94 Commits

Author SHA1 Message Date
e3fce14045 Tagged 0.20-TP4 2006-07-20 05:06:31 +00:00
e8ec0ad5bf Improved error reporting 2004-09-02 10:26:00 +00:00
961b92db2c Backported mysql changes 2004-09-02 09:07:07 +00:00
af6349454d Updated for 0.20, fixed makefiles 2004-09-02 08:35:58 +00:00
32b07e4c0c Fixed JIT on Linux 2004-09-02 08:25:48 +00:00
e73b3bbbb7 New locations 2004-09-02 02:44:39 +00:00
fbb7c0bb92 Changed addons/amxx to addons/amxmodx 2004-09-02 02:16:38 +00:00
04c43f8589 Fixed a bug reported by kama - recommend not use -wait for rewrite 2004-09-02 01:31:39 +00:00
9d733d7a6b CVS terrorist strikes again! 2004-09-02 01:14:16 +00:00
30ddeda877 oops 2004-09-02 01:13:17 +00:00
72e5e9885f new makefile 2004-09-02 01:12:29 +00:00
5c6b34b1d8 Fixed some bugs in CLang 2004-09-02 00:22:56 +00:00
7a627f75cf Removed references to _snprintf() - math wrong but compatibility of snprintf() unknown 2004-09-01 22:03:44 +00:00
02cb4b94f5 Commited new SDK 2004-09-01 21:13:30 +00:00
0b5c02f678 fixed warning 2004-09-01 20:58:03 +00:00
ec5f9ec5ca Added buffer overflow (stack corruption) checking. To be tested! 2004-09-01 17:02:24 +00:00
551d51ea42 When AMXX can't open the logfile it outputs an error rather than crashing 2004-09-01 17:01:52 +00:00
560cd184cc Fixed JIT issues 2004-09-01 16:46:27 +00:00
14297c8408 Bad commit?!
New make
2004-09-01 15:56:31 +00:00
385fa07884 sql.cfg is always executed 2004-09-01 11:47:20 +00:00
35fdb8aa6e fixed compiler warning 2004-09-01 11:41:07 +00:00
34c6a1d4be stop removing my changes *evil* 2004-09-01 11:34:48 +00:00
745c595fc8 Now uses fakemeta for pdata stocks 2004-09-01 08:39:30 +00:00
e979252742 More fixes from malex 2004-08-31 22:40:30 +00:00
90b7dc2b9c updated dod stats file to ML 2004-08-31 22:00:15 +00:00
66bed5a1ab max cvars changed to 48 , DoD has too many cvars ... 2004-08-31 21:59:09 +00:00
8575c9a637 Added some description. hopefully they are right :-) 2004-08-31 16:43:58 +00:00
e73acf4fe4 Renamed is_jit_enabled from jit_enabled 2004-08-31 15:37:22 +00:00
2f37ab7ede Fixed bug where radians were not converted properly (malex) 2004-08-31 15:16:16 +00:00
b1dd324354 Fixed client_command forward 2004-08-31 15:10:12 +00:00
5f00f09314 Moved stocks 2004-08-31 15:02:51 +00:00
f06796c275 Changed so that a MOTD will also display when there is no ServerName message (as proposed by karlos on the forums). 2004-08-31 13:20:29 +00:00
e15c151167 minor fix from karlos 2004-08-31 12:45:11 +00:00
0b2eae8e0a Fixed a bug where remove_task() crashed
amxx_mm -> amxmodx_mm
2004-08-31 06:49:22 +00:00
4fff936626 amxx_mm -> amxmodx_mm 2004-08-31 06:46:44 +00:00
e2c9dbaa62 fixes 2004-08-31 06:39:08 +00:00
b2f3a52884 Attempt at reverting set_user_hitzones() 2004-08-31 06:32:38 +00:00
a720b62aaa Oh small compiler, how I hate thee
(Fixed issue where SC warned and truncated an enum entry)
2004-08-31 06:26:41 +00:00
71e6ce30a3 Fixed amx_say bug 2004-08-31 05:50:06 +00:00
4ee0573203 Changed to 2.5.1 compiler 2004-08-31 05:30:44 +00:00
68354f8964 Reverted to 2.5.1 2004-08-31 05:30:27 +00:00
d0b37726d5 Backwards compatibility bug found by karlos 2004-08-31 05:27:31 +00:00
51e8519d96 Fixed a bug fsfod made because i'm never wrong 2004-08-31 05:23:49 +00:00
c6d2516df8 fixed all registered forwards 2004-08-31 05:02:19 +00:00
813bc1a212 Removed pvPrivateData manipulation - see fakemeta_amxx 2004-08-31 02:58:28 +00:00
aa3c8fa377 sql cvars register by default 2004-08-31 02:53:06 +00:00
8cb5ad18f5 Removed some messiness 2004-08-31 02:29:31 +00:00
b34179e997 Fixed memory leak in detach 2004-08-31 02:05:27 +00:00
91aacb1036 Fixed bug where file stats were incorrect (malex) 2004-08-30 23:29:37 +00:00
2134a7e36d Messages can now be registered by multiple plugins (thanks fsfod) 2004-08-30 22:24:43 +00:00
6da1dc3e4a Fixed bug in set_msg_arg_int() reported by fsfod 2004-08-30 16:14:41 +00:00
b33a53d258 fixed bug where expressions like %02d would not be evaluated correctly 2004-08-30 15:14:50 +00:00
bec1e418e7 removed "J" from amxmodx_version cvar again 2004-08-30 15:02:07 +00:00
5c6db6d743 added missing zlib.lib 2004-08-30 14:41:32 +00:00
ac25c5fc60 %% in a format input string now produces one % in the output string correctly 2004-08-30 14:35:16 +00:00
1e36d0ca39 *** empty log message *** 2004-08-30 06:38:11 +00:00
945900605d Backported SDK changes 2004-08-30 03:34:13 +00:00
3b6d22d3bf Added amx_client_languages option 2004-08-30 03:31:00 +00:00
b254f14285 Fixed bug where MF_GetScriptName() was NULL 2004-08-30 02:00:01 +00:00
38e89f11f4 Fixed possible bug for %% 2004-08-30 01:39:15 +00:00
f4960433bc Fixed possible formatting bug 2004-08-30 01:37:25 +00:00
ebe778d0ee Fixed bug where meta tables would not be NULL'd correctly 2004-08-30 01:11:48 +00:00
36ad12b6b3 fixed bugs 2004-08-30 00:07:55 +00:00
0c022b1543 Fixed some bugs in admin_sql
Changed some things in dbi
2004-08-29 23:42:35 +00:00
4e9de62da6 Added new SDK version 2004-08-29 19:51:38 +00:00
727c798892 fixed crash bug 2004-08-29 19:49:08 +00:00
d9b768e2cf Added new SDK version 2004-08-29 19:39:18 +00:00
c1d75857f3 fixed crash bug 2004-08-29 18:51:25 +00:00
6d91af30b8 fixed memory leak 2004-08-29 18:50:38 +00:00
a1d36ff75d possible fix for the : issue 2004-08-29 18:00:16 +00:00
9a3e53478e Added better error reporting
Added new SDK version
2004-08-29 17:55:11 +00:00
7703c36a90 DoD cvars update 2004-08-29 17:37:37 +00:00
a3d048880f oops 2004-08-29 17:15:32 +00:00
53f8d12237 Switched tasks to forward system 2004-08-29 17:11:08 +00:00
54fb9fbfef registerSPForwardByName now automatically unregisters the forward again and returns -1 if the function is not found 2004-08-29 16:52:54 +00:00
5a80d24780 Fixed NewDLL heap corruption 2004-08-29 16:48:31 +00:00
b8bbe4ae8f Fixed small NewDLL issues 2004-08-29 13:32:55 +00:00
da13f4797d Reenabled NewDLL functions 2004-08-29 13:32:31 +00:00
6d35912c67 Removed debug info 2004-08-28 22:34:54 +00:00
02be09dd00 Removed inline notation. 2004-08-28 22:34:02 +00:00
93cd6dbed5 Fixed problem with pack not popped (=> hlsdk structures should be aligned correctly again) 2004-08-28 21:29:25 +00:00
8c8ccc51c4 Probably fixed problem with forwards getting garbage parameters 2004-08-28 21:25:29 +00:00
c7982c2bc3 Probably fixed problem with forwards getting garbage parameters 2004-08-28 21:25:03 +00:00
4015655141 added 4byte struct alignment (fsfod) 2004-08-28 03:57:29 +00:00
980ccfddf5 fixed building in debug mode issues 2004-08-26 21:27:39 +00:00
891be11032 register_impulse fix 2004-08-26 18:58:46 +00:00
269a0e4305 Sawce, the master of stupid mistakes strikes again!
(Fixed small bug)
2004-08-25 04:26:32 +00:00
9fb04f552c Moved includes to /plugins/include 2004-08-24 21:40:51 +00:00
19101470fd Added fakemeta includes (from dlls/fakemeta/)
Updated ns includes
2004-08-24 21:36:39 +00:00
fb8a883eec Removed old include files (now located in plugins/include) 2004-08-24 21:06:45 +00:00
8d714dd84e Added "ns_give_item"
Fixed SPForward registers
2004-08-24 21:05:01 +00:00
c6c958db2d Fixed another small error 2004-08-24 09:27:20 +00:00
185070a9ad Fixed a small error because I'm an idiot 2004-08-24 09:21:07 +00:00
a86c892af2 Fixed pointcontents stock 2004-08-24 09:04:27 +00:00
112 changed files with 1453 additions and 1653 deletions

View File

@ -300,6 +300,11 @@ int CForwardMngr::registerSPForward(int func, AMX *amx, int numParams, const For
pForward->Set(func, amx, numParams, paramTypes); pForward->Set(func, amx, numParams, paramTypes);
m_SPForwards.push_back(pForward); m_SPForwards.push_back(pForward);
} }
if (pForward->getFuncsNum() == 0)
{
unregisterSPForward(retVal);
return -1;
}
return retVal; return retVal;
} }
@ -309,8 +314,9 @@ int CForwardMngr::registerSPForward(const char *funcName, AMX *amx, int numParam
CSPForward *pForward; CSPForward *pForward;
if (m_FreeSPForwards.size()) if (m_FreeSPForwards.size())
{ {
pForward = m_SPForwards[m_FreeSPForwards.back()]; retVal = m_FreeSPForwards.back();
m_FreeSPForwards.pop_back(); m_FreeSPForwards.pop_back();
pForward = m_SPForwards[retVal>>1]; // >>1 because unregisterSPForward pushes the id which contains the sp flag
pForward->Set(funcName, amx, numParams, paramTypes); pForward->Set(funcName, amx, numParams, paramTypes);
} }
else else
@ -345,6 +351,12 @@ int CForwardMngr::getParamsNum(int id) const
m_Forwards[id >> 1]->getParamsNum(); m_Forwards[id >> 1]->getParamsNum();
} }
ForwardParam CForwardMngr::getParamType(int id, int paramNum) const
{
return (id & 1) ? m_SPForwards[id >> 1]->getParamType(paramNum) :
m_Forwards[id >> 1]->getParamType(paramNum);
}
void CForwardMngr::clear() void CForwardMngr::clear()
{ {
for (ForwardVec::iterator iter = m_Forwards.begin(); iter != m_Forwards.end(); ++iter) for (ForwardVec::iterator iter = m_Forwards.begin(); iter != m_Forwards.end(); ++iter)
@ -447,7 +459,7 @@ cell executeForwards(int id, ...)
va_start(argptr, id); va_start(argptr, id);
for (int i = 0; i < paramsNum && i < FORWARD_MAX_PARAMS; ++i) for (int i = 0; i < paramsNum && i < FORWARD_MAX_PARAMS; ++i)
{ {
if (params[i] == FP_FLOAT) if (g_forwards.getParamType(id, i) == FP_FLOAT)
{ {
REAL tmp = (REAL)va_arg(argptr, double); // floats get converted to doubles REAL tmp = (REAL)va_arg(argptr, double); // floats get converted to doubles
params[i] = *(cell*)&tmp; params[i] = *(cell*)&tmp;

View File

@ -108,6 +108,12 @@ public:
{ {
return m_Funcs.size(); return m_Funcs.size();
} }
ForwardParam getParamType(int paramId) const
{
if (paramId < 0 || paramId >= m_NumParams)
return FP_DONE;
return m_ParamTypes[paramId];
}
}; };
// Single plugin forward // Single plugin forward
@ -133,6 +139,12 @@ public:
{ {
return (m_HasFunc) ? 1 : 0; return (m_HasFunc) ? 1 : 0;
} }
ForwardParam getParamType(int paramId) const
{
if (paramId < 0 || paramId >= m_NumParams)
return FP_DONE;
return m_ParamTypes[paramId];
}
}; };
class CForwardMngr class CForwardMngr
@ -170,6 +182,7 @@ public:
bool isSPForward(int id) const; // check whether forward is single plugin bool isSPForward(int id) const; // check whether forward is single plugin
int getParamsNum(int id) const; // get num of params of a forward int getParamsNum(int id) const; // get num of params of a forward
int getFuncsNum(int id) const; // get num of found functions of a forward int getFuncsNum(int id) const; // get num of found functions of a forward
ForwardParam getParamType(int id, int paramId) const;
cell prepareArray(void *ptr, unsigned int size, ForwardArrayElemType type); // prepare array cell prepareArray(void *ptr, unsigned int size, ForwardArrayElemType type); // prepare array
}; };

View File

@ -52,7 +52,7 @@
{ \ { \
strcpy(outbuf, ""); \ strcpy(outbuf, ""); \
len = 0; \ len = 0; \
AMXXLOG_Log("[AMXX] Plugin did not format a string correctly (parameter %d (total %d), line %d, \"%s\")", parm, paramCount, amx->curline, g_plugins.findPluginFast(amx)); \ AMXXLOG_Log("[AMXX] Plugin did not format a string correctly (parameter %d (total %d), line %d, \"%s\")", parm, paramCount, amx->curline, g_plugins.findPluginFast(amx)->getName()); \
return outbuf; \ return outbuf; \
} }
@ -350,7 +350,7 @@ void CLangMngr::CLang::MergeDefinitions(CQueue<sKeyDef*> &vec)
entry->SetKey(key); entry->SetKey(key);
entry->SetCache(false); entry->SetCache(false);
} else { } else {
AMXXLOG_Log("[AMXX] Language key %s[%s] defined twice", m_LMan->GetKey(key), m_LanguageName); //AMXXLOG_Log("[AMXX] Language key %s[%s] defined twice", m_LMan->GetKey(key), m_LanguageName);
} }
} }
delete vec.front(); delete vec.front();
@ -506,140 +506,22 @@ int CLangMngr::GetKeyEntry(String &key)
return -1; return -1;
} }
const char *CLangMngr::Format(const char *src, ...) #define CHECK_PTR(ptr, start, bufsize) if ((ptr) - (start) >= (bufsize)) { \
{ AMXXLOG_Log("[AMXX] Buffer overflow in formatting (line %d, \"%s\")", amx->curline, g_plugins.findPluginFast(amx)->getName()); \
va_list argptr; outbuf[0] = 0; \
va_start(argptr, src); len = 0; \
static char outbuf[4096]; return outbuf; }
char *outptr = outbuf; #define CHECK_OUTPTR(offset) CHECK_PTR(outptr+offset, outbuf, sizeof(outbuf))
enum State #define ZEROTERM(buf) buf[(sizeof(buf)/sizeof(buf[0]))-1]=0;
{
S_Normal,
S_PercentSign,
};
State curState = S_Normal;
while (*src)
{
if (*src == '%' && curState == S_Normal)
curState = S_PercentSign;
else if (curState == S_PercentSign)
{
switch (*src)
{
case 's':
{
char *tmpArg = va_arg(argptr, char*);
while (*tmpArg)
*outptr++ = *tmpArg++;
break;
}
case 'f':
case 'g':
{
char format[16];
format[0] = '%';
char *ptr = format+1;
while (!isalpha(*ptr++ = *src++))
/*nothing*/;
--src;
*ptr = 0;
sprintf(outptr, format, va_arg(argptr, double));
outptr += strlen(outptr);
break;
}
case 'L':
{
char *langName = va_arg(argptr, char*);
const char *cpLangName=NULL;
// Handle player ids (1-32) and server language
if ((int)langName == LANG_PLAYER)
{
langName = (char*)m_CurGlobId;
}
if ((int)langName == LANG_SERVER)
{
cpLangName = g_vault.get("server_language");
} else if ((int)langName >= 1 && (int)langName <= 32) {
if ((int)CVAR_GET_FLOAT("amx_client_languages"))
{
cpLangName = g_vault.get("server_language");
} else {
cpLangName = ENTITY_KEYVALUE(GET_PLAYER_POINTER_I((int)langName)->pEdict, "lang");
}
} else {
cpLangName = langName;
}
if (!cpLangName || strlen(cpLangName) < 1)
cpLangName = "en";
char *key = va_arg(argptr, char*);
const char *def = GetDef(cpLangName, key);
while (*def)
{
switch (*def)
{
case INSERT_NUMBER:
{
sprintf(outptr, "%d", va_arg(argptr, int));
outptr += strlen(outptr);
break;
}
case INSERT_STRING:
{
char *tmpArg = va_arg(argptr, char*);
while (*tmpArg)
*outptr++ = *tmpArg++;
break;
}
case INSERT_FLOAT:
{
double tmpArg = va_arg(argptr, double);
sprintf(outptr, "%f", tmpArg);
outptr += strlen(outptr);
break;
}
case INSERT_NEWLINE:
*outptr++ = '\n';
break;
default:
*outptr++ = *def;
}
}
break;
}
case 'd':
{
char format[16];
format[0] = '%';
char *ptr = format+1;
while (!isalpha(*ptr++ = *src++))
/*nothing*/;
--src;
*ptr = 0;
sprintf(outptr, format, va_arg(argptr, int));
outptr += strlen(outptr);
break;
}
default:
*outptr++ = '%';
*outptr++ = *src;
}
curState = S_Normal;
}
else
*outptr++ = *src;
++src;
}
*outptr++ = 0;
return outbuf;
}
char * CLangMngr::FormatAmxString(AMX *amx, cell *params, int parm, int &len) char * CLangMngr::FormatAmxString(AMX *amx, cell *params, int parm, int &len)
{ {
// number of parameters ( for NEXT_PARAM macro )
int paramCount = *params / sizeof(cell); int paramCount = *params / sizeof(cell);
// the output buffer
static char outbuf[4096]; static char outbuf[4096];
cell *src = get_amxaddr(amx, params[parm++]);
char *outptr = outbuf; char *outptr = outbuf;
cell *src = get_amxaddr(amx, params[parm++]);
enum State enum State
{ {
S_Normal, S_Normal,
@ -678,14 +560,14 @@ char * CLangMngr::FormatAmxString(AMX *amx, cell *params, int parm, int &len)
cpLangName = ENTITY_KEYVALUE(GET_PLAYER_POINTER_I(*pAmxLangName)->pEdict, "lang"); cpLangName = ENTITY_KEYVALUE(GET_PLAYER_POINTER_I(*pAmxLangName)->pEdict, "lang");
} }
} else { // Language Name } else { // Language Name
int len = 0; int tmplen = 0;
cpLangName = get_amxstring(amx, langName, 2, len); cpLangName = get_amxstring(amx, langName, 2, tmplen);
} }
if (!cpLangName || strlen(cpLangName) < 1) if (!cpLangName || strlen(cpLangName) < 1)
cpLangName = "en"; cpLangName = "en";
int len = 0; int tmplen = 0;
NEXT_PARAM(); NEXT_PARAM();
char *key = get_amxstring(amx, params[parm++], 1, len); char *key = get_amxstring(amx, params[parm++], 1, tmplen);
const char *def = GetDef(cpLangName, key); const char *def = GetDef(cpLangName, key);
if (def == NULL) if (def == NULL)
{ {
@ -699,7 +581,8 @@ char * CLangMngr::FormatAmxString(AMX *amx, cell *params, int parm, int &len)
} }
if (!def) if (!def)
{ {
static char buf[255]; static char buf[512];
CHECK_PTR((char*)(buf+17+strlen(key)), buf, sizeof(buf));
sprintf(buf, "ML_LNOTFOUND: %s", key); sprintf(buf, "ML_LNOTFOUND: %s", key);
def = buf; def = buf;
} }
@ -709,24 +592,28 @@ char * CLangMngr::FormatAmxString(AMX *amx, cell *params, int parm, int &len)
if (*def == '%') if (*def == '%')
{ {
++def; ++def;
char format[16]; char format[32];
format[0] = '%'; format[0] = '%';
char *ptr = format+1; char *ptr = format+1;
while (!isalpha(*ptr++ = *def++)) while (ptr-format<sizeof(format) && !isalpha(*ptr++ = *def++))
/*nothing*/; /*nothing*/;
ZEROTERM(format);
*ptr = 0; *ptr = 0;
switch ( *(ptr-1) ) switch ( *(ptr-1) )
{ {
case 's': case 's':
{ {
char tmpString[256]; char tmpString[4096];
char *tmpPtr = tmpString; char *tmpPtr = tmpString;
NEXT_PARAM(); NEXT_PARAM();
cell *tmpCell = get_amxaddr(amx, params[parm++]); cell *tmpCell = get_amxaddr(amx, params[parm++]);
while (*tmpCell) while (tmpPtr-tmpString < sizeof(tmpString) && *tmpCell)
*tmpPtr++ = *tmpCell++; *tmpPtr++ = *tmpCell++;
*tmpPtr = 0; *tmpPtr = 0;
sprintf(outptr, format, tmpString); sprintf(outptr, format, tmpString);
ZEROTERM(outbuf);
break; break;
} }
case 'g': case 'g':
@ -734,6 +621,7 @@ char * CLangMngr::FormatAmxString(AMX *amx, cell *params, int parm, int &len)
{ {
NEXT_PARAM(); NEXT_PARAM();
sprintf(outptr, format, *(REAL*)get_amxaddr(amx, params[parm++])); sprintf(outptr, format, *(REAL*)get_amxaddr(amx, params[parm++]));
ZEROTERM(outbuf);
break; break;
} }
case 'i': case 'i':
@ -741,12 +629,13 @@ char * CLangMngr::FormatAmxString(AMX *amx, cell *params, int parm, int &len)
{ {
NEXT_PARAM(); NEXT_PARAM();
sprintf(outptr, format, (int)*get_amxaddr(amx, params[parm++])); sprintf(outptr, format, (int)*get_amxaddr(amx, params[parm++]));
ZEROTERM(outbuf);
break; break;
} }
default: default:
{ {
*outptr++ = '%'; CHECK_OUTPTR(strlen(format)+1);
*outptr++ = *(ptr-1); strcpy(outptr, format);
break; break;
} }
} }
@ -758,15 +647,19 @@ char * CLangMngr::FormatAmxString(AMX *amx, cell *params, int parm, int &len)
switch (*def) switch (*def)
{ {
case 'n': case 'n':
CHECK_OUTPTR(1);
*outptr++ = '\n'; *outptr++ = '\n';
break; break;
case 't': case 't':
CHECK_OUTPTR(1);
*outptr++ = '\t'; *outptr++ = '\t';
break; break;
case '^': case '^':
CHECK_OUTPTR(1);
*outptr++ = '^'; *outptr++ = '^';
break; break;
default: default:
CHECK_OUTPTR(2);
*outptr++ = '^'; *outptr++ = '^';
*outptr++ = *def; *outptr++ = *def;
break; break;
@ -774,33 +667,38 @@ char * CLangMngr::FormatAmxString(AMX *amx, cell *params, int parm, int &len)
++def; ++def;
} }
else else
{
CHECK_OUTPTR(1);
*outptr++ = *def++; *outptr++ = *def++;
} }
} }
}
else else
{ {
char tmpString[256]; char tmpString[4096];
char *tmpPtr = tmpString; char *tmpPtr = tmpString;
int tmpLen =0; int tmpLen = 0;
char format[16]; char format[32];
format[0] = '%'; format[0] = '%';
char *ptr = format+1; char *ptr = format+1;
if (*src != '%') if (*src != '%')
{ {
while (!isalpha(*ptr++ = *src++)) while (*src != 0 && ptr-format<sizeof(format) && !isalpha(*ptr++ = *src++))
/*nothing*/; /*nothing*/;
--src;
*ptr = 0; *ptr = 0;
ZEROTERM(format);
--src;
switch ( *(ptr-1) ) switch ( *(ptr-1) )
{ {
case 's': case 's':
{ {
NEXT_PARAM(); NEXT_PARAM();
cell *tmpCell = get_amxaddr(amx, params[parm++]); cell *tmpCell = get_amxaddr(amx, params[parm++]);
while (*tmpCell) while (tmpPtr-tmpString<sizeof(tmpString) && *tmpCell)
*tmpPtr++ = *tmpCell++; *tmpPtr++ = *tmpCell++;
*tmpPtr = 0; *tmpPtr = 0;
sprintf(outptr, format, tmpString); sprintf(outptr, format, tmpString);
ZEROTERM(outbuf);
break; break;
} }
case 'g': case 'g':
@ -819,25 +717,28 @@ char * CLangMngr::FormatAmxString(AMX *amx, cell *params, int parm, int &len)
} }
default: default:
{ {
*outptr++ = '%'; CHECK_OUTPTR(strlen(format)+1);
*outptr++ = *(ptr-1); strcpy(outptr, format);
break; break;
} }
} }
} else {
*outptr++ = '%';
*outptr++ = '%';
src++;
}
outptr += strlen(outptr); outptr += strlen(outptr);
} else {
CHECK_OUTPTR(1);
*outptr++ = '%';
}
} }
curState = S_Normal; curState = S_Normal;
} }
else else
{
CHECK_OUTPTR(1);
*outptr++ = *src; *outptr++ = *src;
}
++src; ++src;
} }
len = outptr - outbuf; len = outptr - outbuf;
CHECK_OUTPTR(1);
*outptr++ = 0; *outptr++ = 0;
return outbuf; return outbuf;
} }
@ -938,7 +839,7 @@ int CLangMngr::MergeDefinitionFile(const char *file)
language[0] = buf[1]; language[0] = buf[1];
language[1] = buf[2]; language[1] = buf[2];
language[2] = 0; language[2] = 0;
} else if (buf.size() > 4) { } else {
if (!multiline) if (!multiline)
{ {
pos = buf.find('='); pos = buf.find('=');

View File

@ -60,7 +60,7 @@ int CPluginMngr::loadPluginsFromFile( const char* filename )
// Find now folder // Find now folder
char pluginName[256], line[256], error[256]; char pluginName[256], line[256], error[256];
const char *pluginsDir = get_localinfo("amxx_pluginsdir", "addons/amxx/plugins"); const char *pluginsDir = get_localinfo("amxx_pluginsdir", "addons/amxmodx/plugins");
while ( fp.getline(line , 255 ) ) while ( fp.getline(line , 255 ) )

View File

@ -61,14 +61,11 @@ void CTaskMngr::CTask::set(CPluginMngr::CPlugin *pPlugin, int iFunc, int iFlags,
if (iParamsLen) if (iParamsLen)
{ {
// also add a cell to the back with the value 0
m_iParamLen = iParamsLen + 1; m_iParamLen = iParamsLen + 1;
m_pParams = new cell[m_iParamLen]; m_pParams = new cell[m_iParamLen];
memcpy(m_pParams, pParams, sizeof(cell)*iParamsLen); memcpy(m_pParams, pParams, sizeof(cell)*iParamsLen);
m_pParams[iParamsLen] = 0; m_pParams[iParamsLen] = 0;
} } else {
else
{
m_iParamLen = 0; m_iParamLen = 0;
m_pParams = NULL; m_pParams = NULL;
} }
@ -78,7 +75,10 @@ void CTaskMngr::CTask::clear()
{ {
m_bFree = true; m_bFree = true;
if (m_pParams) if (m_pParams)
{
delete [] m_pParams; delete [] m_pParams;
m_pParams = NULL;
}
} }
bool CTaskMngr::CTask::isFree() const bool CTaskMngr::CTask::isFree() const
@ -114,28 +114,12 @@ void CTaskMngr::CTask::executeIfRequired(float fCurrentTime, float fTimeLimit, f
if (execute) if (execute)
{ {
if (m_pPlugin->isExecutable(m_iFunc))
{
int err;
if (m_iParamLen) // call with parameters if (m_iParamLen) // call with parameters
{ {
cell amx_addr, *phys_addr; cell arr = prepareCellArray(m_pParams, m_iParamLen);
if (amx_Allot(m_pPlugin->getAMX(), m_iParamLen, &amx_addr, &phys_addr) != AMX_ERR_NONE) executeForwards(m_iFunc, arr, m_iId);
AMXXLOG_Log("[AMXX] Failed to allocate AMX memory (task \"%d\") (plugin \"%s\")", m_iId, m_pPlugin->getName()); } else {
else executeForwards(m_iFunc, m_iId);
{
copy_amxmemory(phys_addr, m_pParams, m_iParamLen);
if ((err = amx_Exec(m_pPlugin->getAMX(), NULL, m_iFunc, 2, amx_addr, m_iId)) != AMX_ERR_NONE)
AMXXLOG_Log("[AMXX] Run time error %d on line %ld (task \"%d\") (plugin \"%s\")", err, m_pPlugin->getAMX()->curline, m_iId, m_pPlugin->getName());
amx_Release(m_pPlugin->getAMX(), amx_addr);
}
}
else
{
if ((err = amx_Exec(m_pPlugin->getAMX(), NULL, m_iFunc, 1, m_iId)) != AMX_ERR_NONE)
AMXXLOG_Log("[AMXX] Run time error %d on line %ld (task \"%d\") (plugin \"%s\")", err, m_pPlugin->getAMX()->curline, m_iId, m_pPlugin->getName());
}
} }
// set new exec time OR remove the task if needed // set new exec time OR remove the task if needed
@ -145,6 +129,8 @@ void CTaskMngr::CTask::executeIfRequired(float fCurrentTime, float fTimeLimit, f
} }
else else
{ {
unregisterSPForward(m_iFunc);
m_iFunc = 0;
m_bFree = true; m_bFree = true;
} }
} }

View File

@ -54,19 +54,19 @@ private:
// execution // execution
float m_fNextExecTime; float m_fNextExecTime;
public: public:
inline void set(CPluginMngr::CPlugin *pPlugin, int iFunc, int iFlags, int iId, float fBase, int iParamsLen, const cell *pParams, int iRepeat, float fCurrentTime); void set(CPluginMngr::CPlugin *pPlugin, int iFunc, int iFlags, int iId, float fBase, int iParamsLen, const cell *pParams, int iRepeat, float fCurrentTime);
inline void clear(); void clear();
inline bool isFree() const; bool isFree() const;
inline CPluginMngr::CPlugin *getPlugin() const; CPluginMngr::CPlugin *getPlugin() const;
inline int getTaskId() const; int getTaskId() const;
inline void executeIfRequired(float fCurrentTime, float fTimeLimit, float fTimeLeft); // also removes the task if needed void executeIfRequired(float fCurrentTime, float fTimeLimit, float fTimeLeft); // also removes the task if needed
inline void changeBase(float fNewBase); void changeBase(float fNewBase);
inline void resetNextExecTime(float fCurrentTime); void resetNextExecTime(float fCurrentTime);
inline bool shouldRepeat(); bool shouldRepeat();
CTask(); CTask();
~CTask(); ~CTask();

Binary file not shown.

View File

@ -13,9 +13,11 @@
# proc=ix86 - assumed not amd64 # proc=ix86 - assumed not amd64
# clean - clean the specifications above # clean - clean the specifications above
$PROJECT = "amxx_mm"; $PROJECT = "amxmodx_mm";
$sdk = "../hlsdk/SourceCode"; $sdk = "../hlsdk/SourceCode";
$mm = "../metamod/metamod"; $mm = "../metamod/metamod";
$gccf = "gcc";
$ccf = "cc";
@CPP_SOURCE_FILES = ("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", "srvcmd.cpp", "strptime.cpp", "amxcore.cpp", "amxtime.cpp", "power.cpp", "amxxlog.cpp", "fakemeta.cpp", "MMGR/MMGR.cpp", "amxxfile.cpp", "CLang.cpp", "md5.cpp", "emsg.cpp", "CForward.cpp", "CPlugin.cpp", "CModule.cpp", "CMenu.cpp", "util.cpp"); @CPP_SOURCE_FILES = ("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", "srvcmd.cpp", "strptime.cpp", "amxcore.cpp", "amxtime.cpp", "power.cpp", "amxxlog.cpp", "fakemeta.cpp", "MMGR/MMGR.cpp", "amxxfile.cpp", "CLang.cpp", "md5.cpp", "emsg.cpp", "CForward.cpp", "CPlugin.cpp", "CModule.cpp", "CMenu.cpp", "util.cpp");
@ -59,16 +61,15 @@ while ($cmd = shift)
} }
} }
$gcc = `gcc --version`; $gcc = `$gccf --version`;
if ($gcc =~ /2\.9/) if ($gcc =~ /2\.9/)
{ {
`ln -s amx.cpp amx.c`; push(@CPP_SOURCE_FILES, "amx.cpp");
push(@C_SOURCE_FILES, "amx.c");
$OPT{"opt"} .= " -malign-loops=2 -malign-jumps=2 -malign-functions=2"; $OPT{"opt"} .= " -malign-loops=2 -malign-jumps=2 -malign-functions=2";
} else { } else {
if ($OPTIONS{"amd64"}) if ($OPTIONS{"amd64"})
{ {
`cp amx.cpp amx.c`; `ln -s amx.cpp amx.c`;
push(@C_SOURCE_FILES, "amx.c"); push(@C_SOURCE_FILES, "amx.c");
} else { } else {
push(@CPP_SOURCE_FILES, "amx.cpp"); push(@CPP_SOURCE_FILES, "amx.cpp");
@ -100,7 +101,7 @@ if ($OPTIONS{"amd64"})
if ($OPTIONS{"jit"}) if ($OPTIONS{"jit"})
{ {
$cflags .= "-DJIT"; $cflags .= " -DJIT";
} }
if ($OPTIONS{"debug"}) if ($OPTIONS{"debug"})
@ -180,11 +181,11 @@ for ($i=0; $i<=$#CPP_SOURCE_FILES; $i++)
$ofile = $file; $ofile = $file;
$ofile =~ s/\.cpp/\.o/; $ofile =~ s/\.cpp/\.o/;
$ofile = "$outdir/$ofile"; $ofile = "$outdir/$ofile";
$gcc = "gcc $cflags -Dstrcmpi=strcasecmp -fPIC $inc -c $file -o $ofile"; $gcc = "$gccf $cflags -Dstrcmpi=strcasecmp -fPIC $inc -c $file -o $ofile";
if (-e $ofile) if (-e $ofile)
{ {
$file_time = (stat($file))[9]; $file_time = (stat($file))[9];
$ofile_time = (stat($file))[9]; $ofile_time = (stat($ofile))[9];
if ($file_time > $ofile_time) if ($file_time > $ofile_time)
{ {
print "$gcc\n"; print "$gcc\n";
@ -202,11 +203,11 @@ for ($i=0; $i<=$#CPP_SOURCE_FILES; $i++)
$ofile = $file; $ofile = $file;
$ofile =~ s/\.c/\.o/; $ofile =~ s/\.c/\.o/;
$ofile = "$outdir/$ofile"; $ofile = "$outdir/$ofile";
$gcc = "cc $cflags -Dstrcmpi=strcasecmp -fPIC $inc -c $file -o $ofile"; $gcc = "$ccf $cflags -Dstrcmpi=strcasecmp -fPIC $inc -c $file -o $ofile";
if (-e $ofile) if (-e $ofile)
{ {
$file_time = (stat($file))[9]; $file_time = (stat($file))[9];
$ofile_time = (stat($file))[9]; $ofile_time = (stat($ofile))[9];
if ($file_time > $ofile_time) if ($file_time > $ofile_time)
{ {
print "$gcc\n"; print "$gcc\n";
@ -218,6 +219,6 @@ for ($i=0; $i<=$#CPP_SOURCE_FILES; $i++)
} }
} }
$gcc = "gcc $cflags -Lzlib/ -shared -ldl -lm @LINK -lz -o $outdir/$bin"; $gcc = "$gccf $cflags -Lzlib/ -shared -ldl -lstdc++ @LINK -lm -lz -o $outdir/$bin";
print "$gcc\n"; print "$gcc\n";
`$gcc`; `$gcc`;

View File

@ -21,7 +21,7 @@
* Version: $Id$ * Version: $Id$
*/ */
#include <stdio.h> // not used
#define AMX_NODYNALOAD #define AMX_NODYNALOAD
// bad bad workaround but we have to prevent a compiler crash :/ // bad bad workaround but we have to prevent a compiler crash :/
@ -51,27 +51,30 @@
#include <dlfcn.h> #include <dlfcn.h>
#endif #endif
#endif #endif
#if defined __LCC__ || defined __linux__ #if defined __LCC__ || defined __GNUC__
#include <wchar.h> /* for wcslen() */ #include <wchar.h> /* for wcslen() */
#endif #endif
#if (defined _Windows && !defined AMX_NODYNALOAD) || (defined JIT && !defined __linux__)
#include <windows.h>
#endif
// this file does not include amxmodx.h so we have to include the mem mngr here // this file does not include amxmodx.h, so we have to include the memory manager here
#ifdef MEMORY_TEST #ifdef MEMORY_TEST
#include "mmgr/mmgr.h" #include "mmgr/mmgr.h"
#endif //MEMORY_TEST #endif // MEMORY_TEST
#include "amx.h" #include "amx.h"
#ifdef JIT #ifdef JIT
# ifdef __WIN32__ # ifdef __WIN32__
# include <windows.h> # include <windows.h> // DWORD, VirtualProtect, ...
# elif defined __linux__ # elif defined __linux__
# include <sys/mman.h> # include <sys/mman.h> // mprotect, PROT_*
# include <unistd.h> # include <unistd.h>
# else # else
// :TODO: // :TODO:
# endif # endif
#endif //JIT #endif // JIT
/* When one or more of the AMX_funcname macris are defined, we want /* When one or more of the AMX_funcname macris are defined, we want
* to compile only those functions. However, when none of these macros * to compile only those functions. However, when none of these macros
@ -535,19 +538,16 @@ static int amx_BrowseRelocate(AMX *amx)
if (debug) if (debug)
amx->flags|=AMX_FLAG_DEBUG; amx->flags|=AMX_FLAG_DEBUG;
#if (defined __GNUC__ || defined ASM32 || defined JIT) && !defined __64BIT__ #if defined __GNUC__ || defined ASM32 || defined JIT && !defined __64BIT__
amx_Exec(amx, (cell*)&opcode_list, 0, 0); amx_Exec(amx, (cell*)&opcode_list, 0, 0);
#if !defined JIT #if !defined JIT
/* to use direct system requests, a function pointer must fit in a cell; amx->sysreq_d=(sizeof(AMX_NATIVE)<=sizeof(cell)) ? opcode_list[OP_SYSREQ_D] : 0;
* because the native function's address will be stored as the parameter
* of SYSREQ.D
*/
amx->sysreq_d= (sizeof(AMX_NATIVE)<=sizeof(cell)) ? opcode_list[OP_SYSREQ_D] : 0;
#endif #endif
#else #else
/* ANSI C /* ANSI C
* to use direct system requests, a function pointer must fit in a cell; * to use direct system requests, a function pointer must fit in a cell;
* see the comment above * because the native function's address will be stored as the parameter
* of SYSREQ.D
*/ */
amx->sysreq_d= (sizeof(AMX_NATIVE)<=sizeof(cell)) ? OP_SYSREQ_D : 0; amx->sysreq_d= (sizeof(AMX_NATIVE)<=sizeof(cell)) ? OP_SYSREQ_D : 0;
#endif #endif
@ -1049,9 +1049,6 @@ int AMXAPI amx_Init(AMX *amx,void *program)
} }
#else /* #if defined __WIN32 __ */ #else /* #if defined __WIN32 __ */
// TODO: Add cases for Linux, Unix, OS/2, ...
// DOS32 has no imposed limits on its segments. // DOS32 has no imposed limits on its segments.
#if defined __BORLANDC__ || defined __WATCOMC__ #if defined __BORLANDC__ || defined __WATCOMC__
#pragma argsused #pragma argsused
@ -1103,7 +1100,7 @@ int AMXAPI amx_InitJIT(AMX *amx, void *reloc_table, void *native_code)
*(cell *)((char*)native_code + hdr->dat + hdr->stp - sizeof(cell)) = 0; *(cell *)((char*)native_code + hdr->dat + hdr->stp - sizeof(cell)) = 0;
amx->stk = amx->stp; amx->stk = amx->stp;
memorySetAccess( asm_runJIT, 20000, mac ); memorySetAccess( (void*)asm_runJIT, 20000, mac );
return AMX_ERR_NONE; return AMX_ERR_NONE;
} }
@ -1573,8 +1570,7 @@ static AMX_NATIVE findfunction(const char *name, AMX_NATIVE_INFO *list, int numb
return NULL; return NULL;
} }
const char *no_function; const char *no_function; // PM: Nice hack ;)
int AMXAPI amx_Register(AMX *amx, AMX_NATIVE_INFO *list, int number) int AMXAPI amx_Register(AMX *amx, AMX_NATIVE_INFO *list, int number)
{ {
AMX_FUNCSTUB *func; AMX_FUNCSTUB *func;
@ -1594,10 +1590,6 @@ int AMXAPI amx_Register(AMX *amx, AMX_NATIVE_INFO *list, int number)
if (func->address==0) { if (func->address==0) {
/* this function is not yet located */ /* this function is not yet located */
funcptr=(list!=NULL) ? findfunction(GETENTRYNAME(hdr,func),list,number) : NULL; funcptr=(list!=NULL) ? findfunction(GETENTRYNAME(hdr,func),list,number) : NULL;
/* on 64-bit architectures with, only the lower 32-bits of the address
* can be stored; hopefully, all addresses can be assumed to have the
* same value for the upper 32-bits
*/
if (funcptr!=NULL) if (funcptr!=NULL)
func->address=(ucell)funcptr; func->address=(ucell)funcptr;
else else
@ -1634,7 +1626,7 @@ AMX_NATIVE_INFO * AMXAPI amx_NativeInfo(const char *name, AMX_NATIVE func)
#define CHKSTACK() if (stk>amx->stp) return AMX_ERR_STACKLOW #define CHKSTACK() if (stk>amx->stp) return AMX_ERR_STACKLOW
#define CHKHEAP() if (hea<amx->hlw) return AMX_ERR_HEAPLOW #define CHKHEAP() if (hea<amx->hlw) return AMX_ERR_HEAPLOW
#if defined __GNUC__ && !defined ASM32 #if defined __GNUC__ && !defined ASM32 && !defined JIT
/* GNU C version uses the "labels as values" extension to create /* GNU C version uses the "labels as values" extension to create
* fast "indirect threaded" interpreter. * fast "indirect threaded" interpreter.
*/ */
@ -4039,7 +4031,7 @@ static long utf8_lowmark[5] = { 0x80, 0x800, 0x10000, 0x200000, 0x4000000 };
*/ */
if (result<utf8_lowmark[followup]) if (result<utf8_lowmark[followup])
goto error; goto error;
if (result>=0xd800 && result<=0xdfff || result==0xfffe || result==0xffff) if ((result>=0xd800 && result<=0xdfff) || result==0xfffe || result==0xffff)
goto error; goto error;
} /* if */ } /* if */

View File

@ -22,14 +22,12 @@
*/ */
#if defined __linux__ #if defined __linux__
#include "sclinux.h" #include <sclinux.h>
#endif #endif
#ifndef AMX_H_INCLUDED #ifndef AMX_H_INCLUDED
#define AMX_H_INCLUDED #define AMX_H_INCLUDED
//#define JIT
#if defined __LCC__ || defined __DMC__ || defined __linux__ #if defined __LCC__ || defined __DMC__ || defined __linux__
#include <stdint.h> #include <stdint.h>
#elif !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L #elif !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L
@ -337,6 +335,7 @@ uint32_t * AMXAPI amx_Align32(uint32_t *v);
#if defined _I64_MAX || defined HAVE_I64 #if defined _I64_MAX || defined HAVE_I64
uint64_t * AMXAPI amx_Align64(uint64_t *v); uint64_t * AMXAPI amx_Align64(uint64_t *v);
#endif #endif
#if SMALL_CELL_SIZE==32 #if SMALL_CELL_SIZE==32
#define amx_AlignCell amx_Align32 #define amx_AlignCell amx_Align32
#elif SMALL_CELL_SIZE==64 #elif SMALL_CELL_SIZE==64
@ -344,6 +343,7 @@ uint32_t * AMXAPI amx_Align32(uint32_t *v);
#else #else
#error Unsupported cell size #error Unsupported cell size
#endif #endif
int AMXAPI amx_Allot(AMX *amx, int cells, cell *amx_addr, cell **phys_addr); int AMXAPI amx_Allot(AMX *amx, int cells, cell *amx_addr, cell **phys_addr);
int AMXAPI amx_Callback(AMX *amx, cell index, cell *result, cell *params); int AMXAPI amx_Callback(AMX *amx, cell index, cell *result, cell *params);
int AMXAPI amx_Cleanup(AMX *amx); int AMXAPI amx_Cleanup(AMX *amx);

View File

@ -1676,7 +1676,14 @@ static cell AMX_NATIVE_CALL set_task(AMX *amx, cell *params) /* 2 param */
char* stemp = get_amxstring(amx,params[2],1, a ); char* stemp = get_amxstring(amx,params[2],1, a );
if (amx_FindPublic(amx, stemp , &iFunc) != AMX_ERR_NONE){ if (params[5])
{
iFunc = registerSPForwardByName(amx, stemp, FP_ARRAY, FP_CELL, FP_DONE);
} else {
iFunc = registerSPForwardByName(amx, stemp, FP_CELL, FP_DONE);
}
if (iFunc == -1)
{
AMXXLOG_Log("[AMXX] Function is not present (function \"%s\") (plugin \"%s\")",stemp,plugin->getName() ); AMXXLOG_Log("[AMXX] Function is not present (function \"%s\") (plugin \"%s\")",stemp,plugin->getName() );
amx_RaiseError(amx,AMX_ERR_NATIVE); amx_RaiseError(amx,AMX_ERR_NATIVE);
return 0; return 0;
@ -1689,10 +1696,7 @@ static cell AMX_NATIVE_CALL set_task(AMX *amx, cell *params) /* 2 param */
char* temp = get_amxstring(amx,params[6],0,a); char* temp = get_amxstring(amx,params[6],0,a);
g_tasksMngr.registerTask( plugin , g_tasksMngr.registerTask( plugin , iFunc , UTIL_ReadFlags(temp), params[3], base , params[5] , get_amxaddr(amx,params[4]) , params[7] );
iFunc , UTIL_ReadFlags(temp), params[3], base ,
params[5] ,
get_amxaddr(amx,params[4]) , params[7] );
return 1; return 1;
} }
@ -2631,7 +2635,7 @@ static cell register_dictionary(AMX *amx, cell *params)
{ {
int len; int len;
int result = g_langMngr.MergeDefinitionFile(build_pathname("%s/lang/%s", int result = g_langMngr.MergeDefinitionFile(build_pathname("%s/lang/%s",
get_localinfo("amxx_datadir", "addons/amxx/data"), get_amxstring(amx, params[1], 1, len))); get_localinfo("amxx_datadir", "addons/amxmodx/data"), get_amxstring(amx, params[1], 1, len)));
return result; return result;
} }

View File

@ -270,6 +270,7 @@ CAmxxReader::Error CAmxxReader::GetSection(void *buffer)
// AMXXLOG_Log("|||| First Bytes: %d %d %d %d", tempBuffer[0], tempBuffer[1], tempBuffer[2], tempBuffer[3]); // AMXXLOG_Log("|||| First Bytes: %d %d %d %d", tempBuffer[0], tempBuffer[1], tempBuffer[2], tempBuffer[3]);
int result = uncompress((Bytef *)buffer, &destLen, int result = uncompress((Bytef *)buffer, &destLen,
(Bytef *)tempBuffer, m_SectionLength); (Bytef *)tempBuffer, m_SectionLength);
delete [] tempBuffer;
// AMXXLOG_Log("|||| Result: %d, m_SectionLength=%d, destLen=%d", result, m_SectionLength, destLen); // AMXXLOG_Log("|||| Result: %d, m_SectionLength=%d, destLen=%d", result, m_SectionLength, destLen);
if (result != Z_OK) if (result != Z_OK)
{ {

View File

@ -181,9 +181,18 @@ void CLog::Log(const char *fmt, ...)
{ {
pF = fopen(build_pathname("%s/L%02d%02d.log", g_log_dir.c_str(), curTime->tm_mon + 1, curTime->tm_mday), "a+"); pF = fopen(build_pathname("%s/L%02d%02d.log", g_log_dir.c_str(), curTime->tm_mon + 1, curTime->tm_mday), "a+");
} }
if (pF)
{
fprintf(pF, "L %s: %s\n", date, msg); fprintf(pF, "L %s: %s\n", date, msg);
fclose(pF); fclose(pF);
}
else
{
ALERT(at_logged, "[AMXX] Unexpected fatal logging error (couldn't open %s for a+). AMXX Logging disabled for this map.\n", m_LogFile.c_str());
m_LogType = 0;
return;
}
// print on server console // print on server console
print_srvconsole("L %s: %s\n", date, msg); print_srvconsole("L %s: %s\n", date, msg);
} }

View File

@ -320,7 +320,7 @@
prev_mres = mres; \ prev_mres = mres; \
if (mres == MRES_UNSET) \ if (mres == MRES_UNSET) \
AMXXLOG_Log("[AMXX] Module \"%s\" (\"%s\") has not set meta result in \"%s\"", \ AMXXLOG_Log("[AMXX] Module \"%s\" (\"%s\") has not set meta result in \"%s\"", \
(*iter).GetInfo()->name, (*iter).GetPath(), #pfnArgs); \ (*iter).GetInfo()->name, (*iter).GetPath(), #pfnName); \
} \ } \
} \ } \
/* Set meta result to the highest value */ \ /* Set meta result to the highest value */ \
@ -353,7 +353,7 @@
prev_mres = mres; \ prev_mres = mres; \
if (mres == MRES_UNSET) \ if (mres == MRES_UNSET) \
AMXXLOG_Log("[AMXX] Module \"%s\" (\"%s\") has not set meta result in \"%s\"", \ AMXXLOG_Log("[AMXX] Module \"%s\" (\"%s\") has not set meta result in \"%s\"", \
(*iter).GetInfo()->name, (*iter).GetPath(), #pfnArgs); \ (*iter).GetInfo()->name, (*iter).GetPath(), #pfnName); \
} \ } \
} \ } \
/* Set meta result to the highest value */ \ /* Set meta result to the highest value */ \
@ -379,7 +379,7 @@
prev_mres = mres; \ prev_mres = mres; \
if (mres == MRES_UNSET) \ if (mres == MRES_UNSET) \
AMXXLOG_Log("[AMXX] Module \"%s\" (\"%s\") has not set meta result in \"%s\"", \ AMXXLOG_Log("[AMXX] Module \"%s\" (\"%s\") has not set meta result in \"%s\"", \
(*iter).GetInfo()->name, (*iter).GetPath(), #pfnArgs); \ (*iter).GetInfo()->name, (*iter).GetPath(), #pfnName); \
} \ } \
} \ } \
/* Set meta result to the highest value */ \ /* Set meta result to the highest value */ \
@ -412,7 +412,10 @@
prev_mres = mres; \ prev_mres = mres; \
if (mres == MRES_UNSET) \ if (mres == MRES_UNSET) \
AMXXLOG_Log("[AMXX] Module \"%s\" (\"%s\") has not set meta result in \"%s\"", \ AMXXLOG_Log("[AMXX] Module \"%s\" (\"%s\") has not set meta result in \"%s\"", \
(*iter).GetInfo()->name, (*iter).GetPath(), #pfnArgs); \ (*iter).GetInfo()->name, (*iter).GetPath(), #pfnName); \
if (mres == MRES_SUPERCEDE) \
AMXXLOG_Log("[AMXX] Module \"%s\" (\"%s\") has set meta result in \"%s\" to supercede", \
(*iter).GetInfo()->name, (*iter).GetPath(), #pfnName); \
} \ } \
} \ } \
/* Set meta result to the highest value */ \ /* Set meta result to the highest value */ \
@ -2700,7 +2703,7 @@ int CFakeMeta::GetNewDLLFunctions(NEW_DLL_FUNCTIONS *pNewFunctionTable, int *int
*interfaceVersion = NEW_DLL_FUNCTIONS_VERSION; *interfaceVersion = NEW_DLL_FUNCTIONS_VERSION;
return(FALSE); return(FALSE);
} }
memcpy( pNewFunctionTable, &g_NewDllFunctionTable, sizeof( DLL_FUNCTIONS ) ); memcpy( pNewFunctionTable, &g_NewDllFunctionTable, sizeof( NEW_DLL_FUNCTIONS ) );
// Make sure there is a core plugin // Make sure there is a core plugin
AddCorePlugin(); AddCorePlugin();
@ -2735,7 +2738,7 @@ int CFakeMeta::GetNewDLLFunctions_Post(NEW_DLL_FUNCTIONS *pNewFunctionTable, int
*interfaceVersion = NEW_DLL_FUNCTIONS_VERSION; *interfaceVersion = NEW_DLL_FUNCTIONS_VERSION;
return(FALSE); return(FALSE);
} }
memcpy( pNewFunctionTable, &g_NewDllFunctionTable_Post, sizeof( DLL_FUNCTIONS ) ); memcpy( pNewFunctionTable, &g_NewDllFunctionTable_Post, sizeof( NEW_DLL_FUNCTIONS ) );
// Make sure there is a core plugin // Make sure there is a core plugin
AddCorePlugin(); AddCorePlugin();

View File

@ -37,6 +37,19 @@
#define PI 3.1415926535897932384626433832795 #define PI 3.1415926535897932384626433832795
static REAL FromRadians(REAL angle, int radix)
{
switch (radix)
{
case 1: /* degrees, sexagesimal system (technically: degrees/minutes/seconds) */
return (REAL)(angle / PI * 180.0);
case 2: /* grades, centesimal system */
return (REAL)(angle / PI * 200.0);
default: /* assume already radian */
return angle;
} /* switch */
}
#if defined __BORLANDC__ || defined __WATCOMC__ #if defined __BORLANDC__ || defined __WATCOMC__
#pragma argsused #pragma argsused
#endif #endif
@ -357,6 +370,7 @@ static cell AMX_NATIVE_CALL n_floatatan(AMX *amx, cell *params)
REAL fA = amx_ctof(params[1]); REAL fA = amx_ctof(params[1]);
fA = ToRadians(fA, params[2]); fA = ToRadians(fA, params[2]);
fA = atan(fA); fA = atan(fA);
fA = FromRadians(fA, params[2]);
return amx_ftoc(fA); return amx_ftoc(fA);
} }
@ -371,8 +385,8 @@ static cell AMX_NATIVE_CALL n_floatacos(AMX *amx, cell *params)
* params[2] = radix * params[2] = radix
*/ */
REAL fA = amx_ctof(params[1]); REAL fA = amx_ctof(params[1]);
fA = ToRadians(fA, params[2]);
fA = acos(fA); fA = acos(fA);
fA = FromRadians(fA, params[2]);
return amx_ftoc(fA); return amx_ftoc(fA);
} }
@ -387,8 +401,8 @@ static cell AMX_NATIVE_CALL n_floatasin(AMX *amx, cell *params)
* params[2] = radix * params[2] = radix
*/ */
REAL fA = amx_ctof(params[1]); REAL fA = amx_ctof(params[1]);
fA = ToRadians(fA, params[2]);
fA = asin(fA); fA = asin(fA);
fA = FromRadians(fA, params[2]);
return amx_ftoc(fA); return amx_ftoc(fA);
} }
@ -407,6 +421,7 @@ static cell AMX_NATIVE_CALL n_floatatan2(AMX *amx, cell *params)
REAL fB = amx_ctof(params[2]); REAL fB = amx_ctof(params[2]);
REAL fC; REAL fC;
fC = atan2(fA, fB); fC = atan2(fA, fB);
fC = FromRadians(fC, params[3]);
return amx_ftoc(fC); return amx_ftoc(fC);
} }

View File

@ -218,8 +218,8 @@ int C_Spawn( edict_t *pent ) {
g_tasksMngr.registerTimers( &gpGlobals->time, &mp_timelimit->value, &g_game_timeleft ); g_tasksMngr.registerTimers( &gpGlobals->time, &mp_timelimit->value, &g_game_timeleft );
// ###### Load lang // ###### Load lang
g_langMngr.LoadCache(build_pathname("%s/dictionary.cache", get_localinfo("amxx_datadir", "addons/amxx/data"))); g_langMngr.LoadCache(build_pathname("%s/dictionary.cache", get_localinfo("amxx_datadir", "addons/amxmodx/data")));
g_langMngr.Load(build_pathname("%s/languages.dat", get_localinfo("amxx_datadir", "addons/amxx/data"))); g_langMngr.Load(build_pathname("%s/languages.dat", get_localinfo("amxmodx_datadir", "addons/amxmodx/data")));
// ###### Initialize commands prefixes // ###### Initialize commands prefixes
g_commands.registerPrefix( "amx" ); g_commands.registerPrefix( "amx" );
g_commands.registerPrefix( "amxx" ); g_commands.registerPrefix( "amxx" );
@ -229,14 +229,14 @@ int C_Spawn( edict_t *pent ) {
g_commands.registerPrefix( "cm_" ); g_commands.registerPrefix( "cm_" );
// make sure localinfos are set // make sure localinfos are set
get_localinfo("amxx_basedir", "addons/amxx"); get_localinfo("amxx_basedir", "addons/amxmodx");
get_localinfo("amxx_pluginsdir", "addons/amxx/plugins"); get_localinfo("amxx_pluginsdir", "addons/amxmodx/plugins");
get_localinfo("amxx_modulesdir", "addons/amxx/modules"); get_localinfo("amxx_modulesdir", "addons/amxmodx/modules");
get_localinfo("amxx_configsdir", "addons/amxx/configs"); get_localinfo("amxx_configsdir", "addons/amxmodx/configs");
get_localinfo("amxx_customdir", "addons/amxx/custom"); get_localinfo("amxx_customdir", "addons/amxmodx/custom");
// ###### Load modules // ###### Load modules
loadModules(get_localinfo("amxx_modules", "addons/amxx/configs/modules.ini")); loadModules(get_localinfo("amxx_modules", "addons/amxmodx/configs/modules.ini"));
attachModules(); attachModules();
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
@ -246,7 +246,7 @@ int C_Spawn( edict_t *pent ) {
CVAR_SET_STRING(init_amxmodx_modules.name, buffer); CVAR_SET_STRING(init_amxmodx_modules.name, buffer);
// ###### Load Vault // ###### Load Vault
g_vault.setSource( build_pathname("%s", get_localinfo("amxx_vault", "addons/amxx/configs/vault.ini")) ); g_vault.setSource( build_pathname("%s", get_localinfo("amxx_vault", "addons/amxmodx/configs/vault.ini")) );
g_vault.loadVault( ); g_vault.loadVault( );
if (strlen(g_vault.get("server_language")) < 1) if (strlen(g_vault.get("server_language")) < 1)
{ {
@ -268,11 +268,11 @@ int C_Spawn( edict_t *pent ) {
memset(g_players[0].flags,-1,sizeof(g_players[0].flags)); memset(g_players[0].flags,-1,sizeof(g_players[0].flags));
// ###### Load AMX scripts // ###### Load AMX scripts
g_plugins.loadPluginsFromFile( get_localinfo("amxx_plugins", "addons/amxx/configs/plugins.ini") ); g_plugins.loadPluginsFromFile( get_localinfo("amxx_plugins", "addons/amxmodx/configs/plugins.ini") );
// Register forwards // Register forwards
FF_PluginInit = registerForward("plugin_init", ET_IGNORE, FP_DONE); FF_PluginInit = registerForward("plugin_init", ET_IGNORE, FP_DONE);
FF_ClientCommand = registerForward("client_command", ET_IGNORE, FP_CELL, FP_DONE); FF_ClientCommand = registerForward("client_command", ET_STOP, FP_CELL, FP_DONE);
FF_ClientConnect = registerForward("client_connect", ET_IGNORE, FP_CELL, FP_DONE); FF_ClientConnect = registerForward("client_connect", ET_IGNORE, FP_CELL, FP_DONE);
FF_ClientDisconnect = registerForward("client_disconnect", ET_IGNORE, FP_CELL, FP_DONE); FF_ClientDisconnect = registerForward("client_disconnect", ET_IGNORE, FP_CELL, FP_DONE);
FF_ClientInfoChanged = registerForward("client_infochanged", ET_IGNORE, FP_CELL, FP_DONE); FF_ClientInfoChanged = registerForward("client_infochanged", ET_IGNORE, FP_CELL, FP_DONE);
@ -398,8 +398,8 @@ void C_ServerActivate_Post( edict_t *pEdictList, int edictCount, int clientMax )
executeForwards(FF_PluginCfg); executeForwards(FF_PluginCfg);
// ###### Save lang // ###### Save lang
g_langMngr.Save(build_pathname("%s/languages.dat", get_localinfo("amxx_datadir", "addons/amxx/data"))); g_langMngr.Save(build_pathname("%s/languages.dat", get_localinfo("amxx_datadir", "addons/amxmodx/data")));
g_langMngr.SaveCache(build_pathname("%s/dictionary.cache", get_localinfo("amxx_datadir", "addons/amxx/data"))); g_langMngr.SaveCache(build_pathname("%s/dictionary.cache", get_localinfo("amxx_datadir", "addons/amxmodx/data")));
// Correct time in Counter-Strike and other mods (except DOD) // Correct time in Counter-Strike and other mods (except DOD)
if ( !g_bmod_dod) g_game_timeleft = 0; if ( !g_bmod_dod) g_game_timeleft = 0;
@ -458,8 +458,8 @@ void C_ServerDeactivate_Post() {
g_vault.clear(); g_vault.clear();
g_xvars.clear(); g_xvars.clear();
g_plugins.clear(); g_plugins.clear();
g_langMngr.Save(build_pathname("%s/languages.dat", get_localinfo("amxx_datadir", "addons/amxx/data"))); g_langMngr.Save(build_pathname("%s/languages.dat", get_localinfo("amxx_datadir", "addons/amxmodx/data")));
g_langMngr.SaveCache(build_pathname("%s/dictionary.cache", get_localinfo("amxx_datadir", "addons/amxx/data"))); g_langMngr.SaveCache(build_pathname("%s/dictionary.cache", get_localinfo("amxx_datadir", "addons/amxmodx/data")));
g_langMngr.Clear(); g_langMngr.Clear();
// last memreport // last memreport
#ifdef MEMORY_TEST #ifdef MEMORY_TEST
@ -473,14 +473,14 @@ void C_ServerDeactivate_Post() {
tm *curTime = localtime(&td); tm *curTime = localtime(&td);
int i = 0; int i = 0;
#ifdef __linux__ #ifdef __linux__
mkdir(build_pathname("%s/memreports", get_localinfo("amxx_basedir", "addons/amxx")), 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/amxx"))); mkdir(build_pathname("%s/memreports", get_localinfo("amxx_basedir", "addons/amxmodx")));
#endif #endif
while (true) while (true)
{ {
char buffer[256]; char buffer[256];
sprintf(buffer, "%s/memreports/D%02d%02d%03d", get_localinfo("amxx_basedir", "addons/amxx"), 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__ #ifdef __linux__
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)
@ -738,14 +738,14 @@ void C_StartFrame_Post( void ) {
tm *curTime = localtime(&td); tm *curTime = localtime(&td);
int i = 0; int i = 0;
#ifdef __linux__ #ifdef __linux__
mkdir(build_pathname("%s/memreports", get_localinfo("amxx_basedir", "addons/amxx")), 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/amxx"))); mkdir(build_pathname("%s/memreports", get_localinfo("amxx_basedir", "addons/amxmodx")));
#endif #endif
while (true) while (true)
{ {
char buffer[256]; char buffer[256];
sprintf(buffer, "%s/memreports/D%02d%02d%03d", get_localinfo("amxx_basedir", "addons/amxx"), 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__ #ifdef __linux__
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)
@ -1023,8 +1023,8 @@ C_DLLEXPORT int Meta_Attach(PLUG_LOADTIME now, META_FUNCTIONS *pFunctionTable, m
gMetaFunctionTable.pfnGetEntityAPI2_Post = GetEntityAPI2_Post; gMetaFunctionTable.pfnGetEntityAPI2_Post = GetEntityAPI2_Post;
gMetaFunctionTable.pfnGetEngineFunctions = GetEngineFunctions; gMetaFunctionTable.pfnGetEngineFunctions = GetEngineFunctions;
gMetaFunctionTable.pfnGetEngineFunctions_Post = GetEngineFunctions_Post; gMetaFunctionTable.pfnGetEngineFunctions_Post = GetEngineFunctions_Post;
//gMetaFunctionTable.pfnGetNewDLLFunctions = GetNewDLLFunctions; gMetaFunctionTable.pfnGetNewDLLFunctions = GetNewDLLFunctions;
//gMetaFunctionTable.pfnGetNewDLLFunctions_Post = GetNewDLLFunctions_Post; gMetaFunctionTable.pfnGetNewDLLFunctions_Post = GetNewDLLFunctions_Post;
memcpy(pFunctionTable, &gMetaFunctionTable, sizeof(META_FUNCTIONS)); memcpy(pFunctionTable, &gMetaFunctionTable, sizeof(META_FUNCTIONS));
gpGamedllFuncs=pGamedllFuncs; gpGamedllFuncs=pGamedllFuncs;
@ -1050,7 +1050,7 @@ C_DLLEXPORT int Meta_Attach(PLUG_LOADTIME now, META_FUNCTIONS *pFunctionTable, m
// ###### Load custom path configuration // ###### Load custom path configuration
Vault amx_config; Vault amx_config;
amx_config.setSource(build_pathname("%s", get_localinfo("amxx_cfg", "addons/amxx/configs/core.ini"))); amx_config.setSource(build_pathname("%s", get_localinfo("amxx_cfg", "addons/amxmodx/configs/core.ini")));
if ( amx_config.loadVault() ){ if ( amx_config.loadVault() ){
Vault::iterator a = amx_config.begin(); Vault::iterator a = amx_config.begin();
@ -1062,11 +1062,11 @@ C_DLLEXPORT int Meta_Attach(PLUG_LOADTIME now, META_FUNCTIONS *pFunctionTable, m
} }
// ###### Initialize logging here // ###### Initialize logging here
g_log_dir.assign(get_localinfo("amxx_logs", "addons/amxx/logs")); g_log_dir.assign(get_localinfo("amxx_logs", "addons/amxmodx/logs"));
// ###### Now attach metamod modules // ###### Now attach metamod modules
// This will also call modules Meta_Query and Meta_Attach functions // This will also call modules Meta_Query and Meta_Attach functions
attachMetaModModules(now, get_localinfo("amxx_modules", "addons/amxx/configs/modules.ini") ); attachMetaModModules(now, get_localinfo("amxx_modules", "addons/amxmodx/configs/modules.ini") );
return(TRUE); return(TRUE);
} }

View File

@ -384,7 +384,7 @@ int loadModules(const char* filename)
if (!isalnum(*moduleName) || !validFile(moduleName) ) if (!isalnum(*moduleName) || !validFile(moduleName) )
continue; continue;
char* pathname = build_pathname("%s/%s", get_localinfo("amxx_modulesdir", "addons/amxx/modules"), line); char* pathname = build_pathname("%s/%s", get_localinfo("amxx_modulesdir", "addons/amxmodx/modules"), line);
CList<CModule>::iterator a = g_modules.find( pathname ); CList<CModule>::iterator a = g_modules.find( pathname );
@ -703,6 +703,14 @@ char *MNF_FormatAmxString(AMX *amx, cell *params, int startParam, int *pLen)
return retVal; return retVal;
} }
int MNF_GetPlayerFlags(int id)
{
if (id < 1 || id > gpGlobals->maxClients)
return 0;
CPlayer *pPlayer = GET_PLAYER_POINTER_I(id);
return (pPlayer->flags[0]);
}
void MNF_CopyAmxMemory(cell * dest, const cell * src, int len) void MNF_CopyAmxMemory(cell * dest, const cell * src, int len)
{ {
memcpy((void*)dest, (const void *)src, (size_t)len*sizeof(cell)); memcpy((void*)dest, (const void *)src, (size_t)len*sizeof(cell));
@ -910,6 +918,7 @@ void *Module_ReqFnptr(const char *funcName)
REGISTER_FUNC("PrepareCharArray", prepareCharArray) REGISTER_FUNC("PrepareCharArray", prepareCharArray)
// Player // Player
REGISTER_FUNC("GetPlayerFlags", MNF_GetPlayerFlags)
REGISTER_FUNC("IsPlayerValid", MNF_IsPlayerValid) REGISTER_FUNC("IsPlayerValid", MNF_IsPlayerValid)
REGISTER_FUNC("GetPlayerName", MNF_GetPlayerName) REGISTER_FUNC("GetPlayerName", MNF_GetPlayerName)
REGISTER_FUNC("GetPlayerIP", MNF_GetPlayerIP) REGISTER_FUNC("GetPlayerIP", MNF_GetPlayerIP)

View File

@ -43,7 +43,7 @@
Name="VCLinkerTool" Name="VCLinkerTool"
AdditionalOptions="/MACHINE:I386" AdditionalOptions="/MACHINE:I386"
AdditionalDependencies="odbc32.lib odbccp32.lib ..\zlib\zlib.lib" AdditionalDependencies="odbc32.lib odbccp32.lib ..\zlib\zlib.lib"
OutputFile="debug/amxx_mm.dll" OutputFile="debug/amxmodx_mm.dll"
Version="0.1" Version="0.1"
LinkIncremental="1" LinkIncremental="1"
SuppressStartupBanner="TRUE" SuppressStartupBanner="TRUE"
@ -112,8 +112,8 @@
<Tool <Tool
Name="VCLinkerTool" Name="VCLinkerTool"
AdditionalOptions="/MACHINE:I386" AdditionalOptions="/MACHINE:I386"
AdditionalDependencies="odbc32.lib odbccp32.lib" AdditionalDependencies="odbc32.lib odbccp32.lib ..\zlib\zlib.lib"
OutputFile="release/amxx_mm.dll" OutputFile="release/amxmodx_mm.dll"
LinkIncremental="1" LinkIncremental="1"
SuppressStartupBanner="TRUE" SuppressStartupBanner="TRUE"
AdditionalLibraryDirectories="..\extra\lib_win32" AdditionalLibraryDirectories="..\extra\lib_win32"
@ -179,8 +179,8 @@
<Tool <Tool
Name="VCLinkerTool" Name="VCLinkerTool"
AdditionalOptions="/MACHINE:I386" AdditionalOptions="/MACHINE:I386"
AdditionalDependencies="odbc32.lib odbccp32.lib" AdditionalDependencies="odbc32.lib odbccp32.lib ..\zlib\zlib.lib"
OutputFile="memtestdebug/amxx_mm.dll" OutputFile="memtestdebug/amxmodx_mm.dll"
Version="0.1" Version="0.1"
LinkIncremental="2" LinkIncremental="2"
SuppressStartupBanner="TRUE" SuppressStartupBanner="TRUE"
@ -249,8 +249,8 @@
<Tool <Tool
Name="VCLinkerTool" Name="VCLinkerTool"
AdditionalOptions="/MACHINE:I386" AdditionalOptions="/MACHINE:I386"
AdditionalDependencies="odbc32.lib odbccp32.lib" AdditionalDependencies="odbc32.lib odbccp32.lib ..\zlib\zlib.lib"
OutputFile="memtestrelease/amxx_mm.dll" OutputFile="memtestrelease/amxmodx_mm.dll"
LinkIncremental="1" LinkIncremental="1"
SuppressStartupBanner="TRUE" SuppressStartupBanner="TRUE"
AdditionalLibraryDirectories="..\extra\lib_win32" AdditionalLibraryDirectories="..\extra\lib_win32"
@ -316,8 +316,8 @@
<Tool <Tool
Name="VCLinkerTool" Name="VCLinkerTool"
AdditionalOptions="/MACHINE:I386" AdditionalOptions="/MACHINE:I386"
AdditionalDependencies="odbc32.lib odbccp32.lib ..\jit\jits.lib" AdditionalDependencies="odbc32.lib odbccp32.lib ..\jit\jits.lib ..\zlib\zlib.lib"
OutputFile="jitdebug/amxx_mm.dll" OutputFile="jitdebug/amxmodx_mm.dll"
Version="0.1" Version="0.1"
LinkIncremental="1" LinkIncremental="1"
SuppressStartupBanner="TRUE" SuppressStartupBanner="TRUE"
@ -387,7 +387,7 @@
Name="VCLinkerTool" Name="VCLinkerTool"
AdditionalOptions="/MACHINE:I386" AdditionalOptions="/MACHINE:I386"
AdditionalDependencies="odbc32.lib odbccp32.lib ..\jit\jits.lib ..\zlib\zlib.lib" AdditionalDependencies="odbc32.lib odbccp32.lib ..\jit\jits.lib ..\zlib\zlib.lib"
OutputFile="jitrelease/amxx_mm.dll" OutputFile="jitrelease/amxmodx_mm.dll"
LinkIncremental="1" LinkIncremental="1"
SuppressStartupBanner="TRUE" SuppressStartupBanner="TRUE"
AdditionalLibraryDirectories="..\extra\lib_win32" AdditionalLibraryDirectories="..\extra\lib_win32"
@ -454,8 +454,8 @@
<Tool <Tool
Name="VCLinkerTool" Name="VCLinkerTool"
AdditionalOptions="/MACHINE:I386" AdditionalOptions="/MACHINE:I386"
AdditionalDependencies="odbc32.lib odbccp32.lib ..\jit\jits.lib" AdditionalDependencies="odbc32.lib odbccp32.lib ..\jit\jits.lib ..\zlib\zlib.lib"
OutputFile="jitmemtestrelease/amxx_mm.dll" OutputFile="jitmemtestrelease/amxmodx_mm.dll"
LinkIncremental="1" LinkIncremental="1"
SuppressStartupBanner="TRUE" SuppressStartupBanner="TRUE"
AdditionalLibraryDirectories="..\extra\lib_win32" AdditionalLibraryDirectories="..\extra\lib_win32"
@ -525,8 +525,8 @@
<Tool <Tool
Name="VCLinkerTool" Name="VCLinkerTool"
AdditionalOptions="/MACHINE:I386" AdditionalOptions="/MACHINE:I386"
AdditionalDependencies="odbc32.lib odbccp32.lib ..\jit\jits.lib" AdditionalDependencies="odbc32.lib odbccp32.lib ..\jit\jits.lib ..\zlib\zlib.lib"
OutputFile="MaximalSpeed/amxx_mm.dll" OutputFile="MaximalSpeed/amxmodx_mm.dll"
LinkIncremental="1" LinkIncremental="1"
SuppressStartupBanner="TRUE" SuppressStartupBanner="TRUE"
AdditionalLibraryDirectories="..\extra\lib_win32" AdditionalLibraryDirectories="..\extra\lib_win32"

View File

@ -2479,6 +2479,7 @@ PFN_REGISTER_SPFORWARD_BYNAME g_fn_RegisterSPForwardByName;
PFN_UNREGISTER_SPFORWARD g_fn_UnregisterSPForward; PFN_UNREGISTER_SPFORWARD g_fn_UnregisterSPForward;
PFN_MERGEDEFINITION_FILE g_fn_MergeDefinition_File; PFN_MERGEDEFINITION_FILE g_fn_MergeDefinition_File;
PFN_AMX_FINDNATIVE g_fn_AmxFindNative; PFN_AMX_FINDNATIVE g_fn_AmxFindNative;
PFN_GETPLAYERFLAGS g_fn_GetPlayerFlags;
// *** Exports *** // *** Exports ***
C_DLLEXPORT int AMXX_Query(int *interfaceVersion, amxx_module_info_s *moduleInfo) C_DLLEXPORT int AMXX_Query(int *interfaceVersion, amxx_module_info_s *moduleInfo)
@ -2530,6 +2531,7 @@ C_DLLEXPORT int AMXX_Attach(PFN_REQ_FNPTR reqFnptrFunc)
REQFUNC("FindAmxScriptByName", g_fn_FindAmxScriptByName, PFN_FIND_AMXSCRIPT_BYNAME); REQFUNC("FindAmxScriptByName", g_fn_FindAmxScriptByName, PFN_FIND_AMXSCRIPT_BYNAME);
REQFUNC("LoadAmxScript", g_fn_LoadAmxScript, PFN_LOAD_AMXSCRIPT); REQFUNC("LoadAmxScript", g_fn_LoadAmxScript, PFN_LOAD_AMXSCRIPT);
REQFUNC("UnloadAmxScript", g_fn_UnloadAmxScript, PFN_UNLOAD_AMXSCRIPT); REQFUNC("UnloadAmxScript", g_fn_UnloadAmxScript, PFN_UNLOAD_AMXSCRIPT);
REQFUNC("GetAmxScriptName", g_fn_GetAmxScriptName, PFN_GET_AMXSCRIPTNAME);
// String / mem in amx scripts support // String / mem in amx scripts support
REQFUNC("SetAmxString", g_fn_SetAmxString, PFN_SET_AMXSTRING); REQFUNC("SetAmxString", g_fn_SetAmxString, PFN_SET_AMXSTRING);
@ -2576,6 +2578,7 @@ C_DLLEXPORT int AMXX_Attach(PFN_REQ_FNPTR reqFnptrFunc)
REQFUNC("IsPlayerHLTV", g_fn_IsPlayerHLTV, PFN_IS_PLAYER_HLTV); REQFUNC("IsPlayerHLTV", g_fn_IsPlayerHLTV, PFN_IS_PLAYER_HLTV);
REQFUNC("GetPlayerArmor", g_fn_GetPlayerArmor, PFN_GET_PLAYER_ARMOR); REQFUNC("GetPlayerArmor", g_fn_GetPlayerArmor, PFN_GET_PLAYER_ARMOR);
REQFUNC("GetPlayerHealth", g_fn_GetPlayerHealth, PFN_GET_PLAYER_HEALTH); REQFUNC("GetPlayerHealth", g_fn_GetPlayerHealth, PFN_GET_PLAYER_HEALTH);
REQFUNC("GetPlayerFlags", g_fn_GetPlayerFlags, PFN_GETPLAYERFLAGS);
// Memory // Memory
REQFUNC_OPT("Allocator", g_fn_Allocator, PFN_ALLOCATOR); REQFUNC_OPT("Allocator", g_fn_Allocator, PFN_ALLOCATOR);

View File

@ -240,6 +240,14 @@ enum {
AMX_ERR_DOMAIN, /* domain error, expression result does not fit in range */ AMX_ERR_DOMAIN, /* domain error, expression result does not fit in range */
}; };
#if !defined AMX_NO_ALIGN
#if defined __linux__
#pragma pack() /* reset default packing */
#else
#pragma pack(pop) /* reset previous packing */
#endif
#endif
// ***** declare functions ***** // ***** declare functions *****
@ -1926,6 +1934,7 @@ typedef int (*PFN_IS_PLAYER_BOT) (int /*id*/);
typedef int (*PFN_IS_PLAYER_AUTHORIZED) (int /*id*/); typedef int (*PFN_IS_PLAYER_AUTHORIZED) (int /*id*/);
typedef float (*PFN_GET_PLAYER_TIME) (int /*id*/); typedef float (*PFN_GET_PLAYER_TIME) (int /*id*/);
typedef float (*PFN_GET_PLAYER_PLAYTIME) (int /*id*/); typedef float (*PFN_GET_PLAYER_PLAYTIME) (int /*id*/);
typedef int (*PFN_GETPLAYERFLAGS) (int /* id*/);
typedef int (*PFN_GET_PLAYER_CURWEAPON) (int /*id*/); typedef int (*PFN_GET_PLAYER_CURWEAPON) (int /*id*/);
typedef int (*PFN_GET_PLAYER_TEAMID) (int /*id*/); typedef int (*PFN_GET_PLAYER_TEAMID) (int /*id*/);
typedef int (*PFN_GET_PLAYER_DEATHS) (int /*id*/); typedef int (*PFN_GET_PLAYER_DEATHS) (int /*id*/);
@ -2009,6 +2018,7 @@ extern PFN_REGISTER_SPFORWARD_BYNAME g_fn_RegisterSPForwardByName;
extern PFN_UNREGISTER_SPFORWARD g_fn_UnregisterSPForward; extern PFN_UNREGISTER_SPFORWARD g_fn_UnregisterSPForward;
extern PFN_MERGEDEFINITION_FILE g_fn_MergeDefinition_File; extern PFN_MERGEDEFINITION_FILE g_fn_MergeDefinition_File;
extern PFN_AMX_FINDNATIVE g_fn_AmxFindNative; extern PFN_AMX_FINDNATIVE g_fn_AmxFindNative;
extern PFN_GETPLAYERFLAGS g_fn_GetPlayerFlags;
#ifdef MAY_NEVER_BE_DEFINED #ifdef MAY_NEVER_BE_DEFINED
// Function prototypes for intellisense and similar systems // Function prototypes for intellisense and similar systems
@ -2057,6 +2067,7 @@ cell amx_ftoc (float x) { }
int MF_RegisterSPForwardByName (AMX * amx, const char *str, ...) { } int MF_RegisterSPForwardByName (AMX * amx, const char *str, ...) { }
int MF_RegisterSPForward (AMX * amx, int func, ...) { } int MF_RegisterSPForward (AMX * amx, int func, ...) { }
void MF_UnregisterSPForward (int id) { } void MF_UnregisterSPForward (int id) { }
int MF_GetPlayerFlags (int id) { }
#endif // MAY_NEVER_BE_DEFINED #endif // MAY_NEVER_BE_DEFINED
#define MF_AddNatives g_fn_AddNatives #define MF_AddNatives g_fn_AddNatives
@ -2111,6 +2122,7 @@ void MF_Log(const char *fmt, ...);
#define MF_RegisterSPForwardByName g_fn_RegisterSPForwardByName #define MF_RegisterSPForwardByName g_fn_RegisterSPForwardByName
#define MF_RegisterSPForward g_fn_RegisterSPForward #define MF_RegisterSPForward g_fn_RegisterSPForward
#define MF_UnregisterSPForward g_fn_UnregisterSPForward #define MF_UnregisterSPForward g_fn_UnregisterSPForward
#define MF_GetPlayerFlags g_fn_GetPlayerFlags
/*** Memory ***/ /*** Memory ***/
void *operator new(size_t reportedSize); void *operator new(size_t reportedSize);
@ -2155,4 +2167,5 @@ void Mem_Deallocator(const char *sourceFile, const unsigned int sourceLine, cons
#define realloc(ptr,sz) Mem_Reallocator(__FILE__,__LINE__,__FUNCTION__,m_alloc_realloc,sz,ptr) #define realloc(ptr,sz) Mem_Reallocator(__FILE__,__LINE__,__FUNCTION__,m_alloc_realloc,sz,ptr)
#define free(ptr) Mem_Deallocator(__FILE__,__LINE__,__FUNCTION__,m_alloc_free,ptr) #define free(ptr) Mem_Deallocator(__FILE__,__LINE__,__FUNCTION__,m_alloc_free,ptr)
#endif // #ifndef __AMXXMODULE_H__ #endif // #ifndef __AMXXMODULE_H__

View File

@ -165,8 +165,13 @@ void amx_command(){
} }
print_srvconsole( "%d modules, %d correct\n",modules,running); print_srvconsole( "%d modules, %d correct\n",modules,running);
} } else if (!strcmp(cmd, "jit")) {
else if (!strcmp(cmd, "gpl")) #ifdef JIT
print_srvconsole("Using the JIT.\n");
#else
print_srvconsole("Not using the JIT.\n");
#endif
} else if (!strcmp(cmd, "gpl"))
{ {
print_srvconsole("AMX Mod X\n"); print_srvconsole("AMX Mod X\n");
print_srvconsole("\n"); print_srvconsole("\n");

View File

@ -79,12 +79,15 @@ void UTIL_ShowMenu( edict_t* pEdict, int slots, int time, char *menu, int mlen )
/* warning - don't pass here const string */ /* warning - don't pass here const string */
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)
{ {
if (!gmsgServerName) if (!gmsgMOTD)
return; // :TODO: Maybe output a warning log? return; // :TODO: Maybe output a warning log?
if (gmsgServerName)
{
MESSAGE_BEGIN( MSG_ONE , gmsgServerName, NULL, client ); MESSAGE_BEGIN( MSG_ONE , gmsgServerName, NULL, client );
WRITE_STRING(name); WRITE_STRING(name);
MESSAGE_END(); MESSAGE_END();
}
char *n = motd; char *n = motd;
char c = 0; char c = 0;
@ -104,9 +107,12 @@ void UTIL_ShowMOTD( edict_t *client , char *motd, int mlen, const char *name)
motd = n; motd = n;
} }
if (gmsgServerName)
{
MESSAGE_BEGIN( MSG_ONE , gmsgServerName, NULL, client ); MESSAGE_BEGIN( MSG_ONE , gmsgServerName, NULL, client );
WRITE_STRING( hostname->string ); WRITE_STRING( hostname->string );
MESSAGE_END(); MESSAGE_END();
}
} }
void UTIL_IntToString(int value, char *output) void UTIL_IntToString(int value, char *output)

View File

@ -1,12 +1,12 @@
; Configuration file for AMX Mod X ; Configuration file for AMX Mod X
amxx_logdir addons/amxx/logs amxx_logdir addons/amxmodx/logs
amxx_configsdir addons/amxx/configs amxx_configsdir addons/amxmodx/configs
amxx_datadir addons/amxx/data amxx_datadir addons/amxmodx/data
amxx_modules addons/amxx/configs/modules.ini amxx_modules addons/amxmodx/configs/modules.ini
amxx_plugins addons/amxx/configs/plugins.ini amxx_plugins addons/amxmodx/configs/plugins.ini
amxx_pluginsdir addons/amxx/plugins amxx_pluginsdir addons/amxmodx/plugins
amxx_modulesdir addons/amxx/modules amxx_modulesdir addons/amxmodx/modules
amxx_vault addons/amxx/data/vault.ini amxx_vault addons/amxmodx/data/vault.ini
; Logging mode ; Logging mode
; 0 - no logging ; 0 - no logging

View File

@ -1,14 +1,14 @@
; Configuration file for AMX Mod X ; Configuration file for AMX Mod X
amxx_logdir addons/amxx/logs amxx_logdir addons/amxmodx/logs
amxx_configsdir addons/amxx/configs amxx_configsdir addons/amxmodx/configs
amxx_datadir addons/amxx/data amxx_datadir addons/amxmodx/data
amxx_modules addons/amxx/configs/modules.ini amxx_modules addons/amxmodx/configs/modules.ini
amxx_plugins addons/amxx/configs/plugins.ini amxx_plugins addons/amxmodx/configs/plugins.ini
amxx_pluginsdir addons/amxx/plugins amxx_pluginsdir addons/amxmodx/plugins
amxx_modulesdir addons/amxx/modules amxx_modulesdir addons/amxmodx/modules
amxx_vault addons/amxx/data/vault.ini amxx_vault addons/amxmodx/data/vault.ini
csstats_score addons/amxx/data/csstats.amxx csstats_score addons/amxmodx/data/csstats.amxx
csstats addons/amxx/data/csstats.dat csstats addons/amxmodx/data/csstats.dat
; Logging mode ; Logging mode
; 0 - no logging ; 0 - no logging

View File

@ -1,12 +1,12 @@
; Configuration file for AMX Mod X ; Configuration file for AMX Mod X
amxx_logdir addons/amxx/logs amxx_logdir addons/amxmodx/logs
amxx_configsdir addons/amxx/configs amxx_configsdir addons/amxmodx/configs
amxx_datadir addons/amxx/data amxx_datadir addons/amxmodx/data
amxx_modules addons/amxx/configs/modules.ini amxx_modules addons/amxmodx/configs/modules.ini
amxx_plugins addons/amxx/configs/plugins.ini amxx_plugins addons/amxmodx/configs/plugins.ini
amxx_pluginsdir addons/amxx/plugins amxx_pluginsdir addons/amxmodx/plugins
amxx_modulesdir addons/amxx/modules amxx_modulesdir addons/amxmodx/modules
amxx_vault addons/amxx/data/vault.ini amxx_vault addons/amxmodx/data/vault.ini
; Logging mode ; Logging mode
; 0 - no logging ; 0 - no logging
@ -15,5 +15,5 @@ amxx_vault addons/amxx/data/vault.ini
; 3 - HL Logs ; 3 - HL Logs
amx_logging 1 amx_logging 1
dodstats_score addons/amxx/data/dodstats.amxx dodstats_score addons/amxmodx/data/dodstats.amxx
dodstats addons/amxx/data/dodstats.dat dodstats addons/amxmodx/data/dodstats.dat

View File

@ -10,29 +10,38 @@
"pausable" "0" "1" "u" "pausable" "0" "1" "u"
"sv_voiceenable" "0" "1" "u" "sv_voiceenable" "0" "1" "u"
"mp_chattime" "0" "1" "3" "u" "mp_chattime" "0" "1" "3" "u"
"mp_logmessages" "0" "1" "u"
"mp_friendlyfire" "0" "1" "u" "mp_friendlyfire" "0" "1" "u"
"mp_allowspectators" "0" "1" "u" "mp_allowspectators" "0" "1" "u"
"mp_flashlight" "0" "1" "u"
"mp_deathmsg" "0" "1" "u" "mp_deathmsg" "0" "1" "u"
"mp_fadetoblack" "0" "1" "u" "mp_fadetoblack" "0" "1" "u"
"mp_tkpenalty" "-1" "3" "6" "u" "mp_tkpenalty" "0" "3" "6" "u"
"mp_limitallies30cal" "-1" "1" "2" "3" "4" "5" "6" "0" "u" "mp_spawnbazookas" "0" "1" "u"
"mp_limitalliesbar" "-1" "1" "2" "3" "4" "5" "6" "0" "u"
"mp_limitalliescarbine" "-1" "1" "2" "3" "4" "5" "6" "0" "u"
"mp_limitalliesgarand" "-1" "1" "2" "3" "4" "5" "6" "0" "u" "mp_limitalliesgarand" "-1" "1" "2" "3" "4" "5" "6" "0" "u"
"mp_limitalliescarbine" "-1" "1" "2" "3" "4" "5" "6" "0" "u"
"mp_limitalliesthompson" "-1" "1" "2" "3" "4" "5" "6" "0" "u"
"mp_limitalliesgreasegun" "-1" "1" "2" "3" "4" "5" "6" "0" "u" "mp_limitalliesgreasegun" "-1" "1" "2" "3" "4" "5" "6" "0" "u"
"mp_limitalliesspring" "-1" "1" "2" "3" "4" "5" "6" "0" "u" "mp_limitalliesspring" "-1" "1" "2" "3" "4" "5" "6" "0" "u"
"mp_limitalliesthompson" "-1" "1" "2" "3" "4" "5" "6" "0" "u" "mp_limitalliesbar" "-1" "1" "2" "3" "4" "5" "6" "0" "u"
"mp_limitaxisfg42" "-1" "1" "2" "3" "4" "5" "6" "0" "u" "mp_limitallies30cal" "-1" "1" "2" "3" "4" "5" "6" "0" "u"
"mp_limitaxisfg42s" "-1" "1" "2" "3" "4" "5" "6" "0" "u" "mp_limitalliesbazooka" "-1" "1" "2" "3" "4" "5" "6" "0" "u"
"mp_limitaxisk43" "-1" "1" "2" "3" "4" "5" "6" "0" "u" "mp_limitalliesmortar" "-1" "1" "2" "3" "4" "5" "6" "0" "u"
"mp_limitaxiskar" "-1" "1" "2" "3" "4" "5" "6" "0" "u" "mp_limitaxiskar" "-1" "1" "2" "3" "4" "5" "6" "0" "u"
"mp_limitaxismg34" "-1" "1" "2" "3" "4" "5" "6" "0" "u" "mp_limitaxisk43" "-1" "1" "2" "3" "4" "5" "6" "0" "u"
"mp_limitaxismg42" "-1" "1" "2" "3" "4" "5" "6" "0" "u"
"mp_limitaxismp40" "-1" "1" "2" "3" "4" "5" "6" "0" "u" "mp_limitaxismp40" "-1" "1" "2" "3" "4" "5" "6" "0" "u"
"mp_limitaxismp44" "-1" "1" "2" "3" "4" "5" "6" "0" "u" "mp_limitaxismp44" "-1" "1" "2" "3" "4" "5" "6" "0" "u"
"mp_limitaxisscopedkar" "-1" "1" "2" "3" "4" "5" "6" "0" "u" "mp_limitaxisscopedkar" "-1" "1" "2" "3" "4" "5" "6" "0" "u"
"mp_limitbritassault" "-1" "1" "2" "3" "4" "5" "6" "0" "u" "mp_limitaxisfg42" "-1" "1" "2" "3" "4" "5" "6" "0" "u"
"mp_limitaxisfg42s" "-1" "1" "2" "3" "4" "5" "6" "0" "u"
"mp_limitaxismg34" "-1" "1" "2" "3" "4" "5" "6" "0" "u"
"mp_limitaxismg42" "-1" "1" "2" "3" "4" "5" "6" "0" "u"
"mp_combinemglimits" "0" "1" "u"
"mp_limitaxispschreck" "-1" "1" "2" "3" "4" "5" "6" "0" "u"
"mp_limitaxismortar" "-1" "1" "2" "3" "4" "5" "6" "0" "u"
"mp_limitbritlight" "-1" "1" "2" "3" "4" "5" "6" "0" "u" "mp_limitbritlight" "-1" "1" "2" "3" "4" "5" "6" "0" "u"
"mp_limitbritmg" "-1" "1" "2" "3" "4" "5" "6" "0" "u" "mp_limitbritassault" "-1" "1" "2" "3" "4" "5" "6" "0" "u"
"mp_limitbritsniper" "-1" "1" "2" "3" "4" "5" "6" "0" "u" "mp_limitbritsniper" "-1" "1" "2" "3" "4" "5" "6" "0" "u"
"mp_limitbritmg" "-1" "1" "2" "3" "4" "5" "6" "0" "u"
"mp_limitbritpiat" "-1" "1" "2" "3" "4" "5" "6" "0" "u"
"mp_limitbritmortar" "-1" "1" "2" "3" "4" "5" "6" "0" "u"

View File

@ -1,14 +1,14 @@
; Configuration file for AMX Mod X ; Configuration file for AMX Mod X
amxx_logdir addons/amxx/logs amxx_logdir addons/amxmodx/logs
amxx_configsdir addons/amxx/configs amxx_configsdir addons/amxmodx/configs
amxx_datadir addons/amxx/data amxx_datadir addons/amxmodx/data
amxx_modules addons/amxx/configs/modules.ini amxx_modules addons/amxmodx/configs/modules.ini
amxx_plugins addons/amxx/configs/plugins.ini amxx_plugins addons/amxmodx/configs/plugins.ini
amxx_pluginsdir addons/amxx/plugins amxx_pluginsdir addons/amxmodx/plugins
amxx_modulesdir addons/amxx/modules amxx_modulesdir addons/amxmodx/modules
amxx_vault addons/amxx/data/vault.ini amxx_vault addons/amxmodx/data/vault.ini
tfcstats_score addons/amxx/data/tfcstats.amxx tfcstats_score addons/amxmodx/data/tfcstats.amxx
tfcstats addons/amxx/data/tfcstats.dat tfcstats addons/amxmodx/data/tfcstats.dat
; Logging mode ; Logging mode
; 0 - no logging ; 0 - no logging

View File

@ -1,14 +1,14 @@
; Configuration file for AMX Mod X ; Configuration file for AMX Mod X
amxx_logdir addons/amxx/logs amxx_logdir addons/amxmodx/logs
amxx_configsdir addons/amxx/configs amxx_configsdir addons/amxmodx/configs
amxx_datadir addons/amxx/data amxx_datadir addons/amxmodx/data
amxx_modules addons/amxx/configs/modules.inia amxx_modules addons/amxmodx/configs/modules.inia
mxx_plugins addons/amxx/configs/plugins.ini mxx_plugins addons/amxmodx/configs/plugins.ini
amxx_pluginsdir addons/amxx/plugins amxx_pluginsdir addons/amxmodx/plugins
amxx_modulesdir addons/amxx/modules amxx_modulesdir addons/amxmodx/modules
amxx_vault addons/amxx/data/vault.ini amxx_vault addons/amxmodx/data/vault.ini
tsstats_score addons/amxx/data/tsstats.amxx tsstats_score addons/amxmodx/data/tsstats.amxx
tsstats addons/amxx/data/tsstats.dat tsstats addons/amxmodx/data/tsstats.dat
; Logging mode ; Logging mode
; 0 - no logging ; 0 - no logging

View File

@ -15,6 +15,7 @@
$PROJECT = "csstats_amxx"; $PROJECT = "csstats_amxx";
$sdk = "../../../hlsdk/SourceCode"; $sdk = "../../../hlsdk/SourceCode";
$mm = "../../../metamod/metamod"; $mm = "../../../metamod/metamod";
$gccf = "gcc";
@CPP_SOURCE_FILES = ("amxxmodule.cpp", "CMisc.cpp", "usermsg.cpp", "meta_api.cpp", "rank.cpp", "CRank.cpp"); @CPP_SOURCE_FILES = ("amxxmodule.cpp", "CMisc.cpp", "usermsg.cpp", "meta_api.cpp", "rank.cpp", "CRank.cpp");
@ -45,7 +46,7 @@ while ($cmd = shift)
} }
} }
$gcc = `gcc --version`; $gcc = `$gccf --version`;
if ($gcc =~ /2\.9/) if ($gcc =~ /2\.9/)
{ {
$OPT{"opt"} .= " -malign-loops=2 -malign-jumps=2 -malign-functions=2"; $OPT{"opt"} .= " -malign-loops=2 -malign-jumps=2 -malign-functions=2";
@ -134,11 +135,11 @@ for ($i=0; $i<=$#CPP_SOURCE_FILES; $i++)
$ofile = $file; $ofile = $file;
$ofile =~ s/\.cpp/\.o/; $ofile =~ s/\.cpp/\.o/;
$ofile = "$outdir/$ofile"; $ofile = "$outdir/$ofile";
$gcc = "gcc $cflags -Dstrcmpi=strcasecmp -fPIC $inc -c $file -o $ofile"; $gcc = "$gccf $cflags -Dstrcmpi=strcasecmp -fPIC $inc -c $file -o $ofile";
if (-e $ofile) if (-e $ofile)
{ {
$file_time = (stat($file))[9]; $file_time = (stat($file))[9];
$ofile_time = (stat($file))[9]; $ofile_time = (stat($ofile))[9];
if ($file_time > $ofile_time) if ($file_time > $ofile_time)
{ {
print "$gcc\n"; print "$gcc\n";
@ -160,7 +161,7 @@ for ($i=0; $i<=$#CPP_SOURCE_FILES; $i++)
if (-e $ofile) if (-e $ofile)
{ {
$file_time = (stat($file))[9]; $file_time = (stat($file))[9];
$ofile_time = (stat($file))[9]; $ofile_time = (stat($ofile))[9];
if ($file_time > $ofile_time) if ($file_time > $ofile_time)
{ {
print "$gcc\n"; print "$gcc\n";
@ -172,6 +173,6 @@ for ($i=0; $i<=$#CPP_SOURCE_FILES; $i++)
} }
} }
$gcc = "gcc $cflags -shared -ldl -lm @LINK -o $outdir/$bin"; $gcc = "$gccf $cflags -shared -ldl -lm @LINK -o $outdir/$bin";
print "$gcc\n"; print "$gcc\n";
`$gcc`; `$gcc`;

View File

@ -2477,6 +2477,8 @@ PFN_CELL_TO_REAL g_fn_CellToReal;
PFN_REGISTER_SPFORWARD g_fn_RegisterSPForward; PFN_REGISTER_SPFORWARD g_fn_RegisterSPForward;
PFN_REGISTER_SPFORWARD_BYNAME g_fn_RegisterSPForwardByName; PFN_REGISTER_SPFORWARD_BYNAME g_fn_RegisterSPForwardByName;
PFN_UNREGISTER_SPFORWARD g_fn_UnregisterSPForward; PFN_UNREGISTER_SPFORWARD g_fn_UnregisterSPForward;
PFN_MERGEDEFINITION_FILE g_fn_MergeDefinition_File;
PFN_AMX_FINDNATIVE g_fn_AmxFindNative;
// *** Exports *** // *** Exports ***
C_DLLEXPORT int AMXX_Query(int *interfaceVersion, amxx_module_info_s *moduleInfo) C_DLLEXPORT int AMXX_Query(int *interfaceVersion, amxx_module_info_s *moduleInfo)
@ -2520,6 +2522,7 @@ C_DLLEXPORT int AMXX_Attach(PFN_REQ_FNPTR reqFnptrFunc)
REQFUNC("PrintSrvConsole", g_fn_PrintSrvConsole, PFN_PRINT_SRVCONSOLE); REQFUNC("PrintSrvConsole", g_fn_PrintSrvConsole, PFN_PRINT_SRVCONSOLE);
REQFUNC("GetModname", g_fn_GetModname, PFN_GET_MODNAME); REQFUNC("GetModname", g_fn_GetModname, PFN_GET_MODNAME);
REQFUNC("Log", g_fn_Log, PFN_LOG); REQFUNC("Log", g_fn_Log, PFN_LOG);
REQFUNC("MergeDefinitionFile", g_fn_MergeDefinition_File, PFN_MERGEDEFINITION_FILE);
// Amx scripts // Amx scripts
REQFUNC("GetAmxScript", g_fn_GetAmxScript, PFN_GET_AMXSCRIPT); REQFUNC("GetAmxScript", g_fn_GetAmxScript, PFN_GET_AMXSCRIPT);
@ -2540,6 +2543,7 @@ C_DLLEXPORT int AMXX_Attach(PFN_REQ_FNPTR reqFnptrFunc)
REQFUNC("amx_Execv", g_fn_AmxExecv, PFN_AMX_EXECV); REQFUNC("amx_Execv", g_fn_AmxExecv, PFN_AMX_EXECV);
REQFUNC("amx_FindPublic", g_fn_AmxFindPublic, PFN_AMX_FINDPUBLIC); REQFUNC("amx_FindPublic", g_fn_AmxFindPublic, PFN_AMX_FINDPUBLIC);
REQFUNC("amx_Allot", g_fn_AmxAllot, PFN_AMX_ALLOT); REQFUNC("amx_Allot", g_fn_AmxAllot, PFN_AMX_ALLOT);
REQFUNC("amx_FindNative", g_fn_AmxFindNative, PFN_AMX_FINDNATIVE);
// Natives / Forwards // Natives / Forwards
REQFUNC("AddNatives", g_fn_AddNatives, PFN_ADD_NATIVES); REQFUNC("AddNatives", g_fn_AddNatives, PFN_ADD_NATIVES);

View File

@ -240,6 +240,14 @@ enum {
AMX_ERR_DOMAIN, /* domain error, expression result does not fit in range */ AMX_ERR_DOMAIN, /* domain error, expression result does not fit in range */
}; };
#if !defined AMX_NO_ALIGN
#if defined __linux__
#pragma pack() /* reset default packing */
#else
#pragma pack(pop) /* reset previous packing */
#endif
#endif
// ***** declare functions ***** // ***** declare functions *****
@ -1947,6 +1955,7 @@ typedef int (*PFN_AMX_EXEC) (AMX* /*amx*/, cell* /*return val*/, int /*in
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*/, char* /*func name*/, int* /*index*/);
typedef int (*PFN_AMX_FINDNATIVE) (AMX* /*amx*/, char* /*func name*/, int* /*index*/);
typedef int (*PFN_LOAD_AMXSCRIPT) (AMX* /*amx*/, void** /*code*/, const char* /*path*/, char[64] /*error info*/); typedef int (*PFN_LOAD_AMXSCRIPT) (AMX* /*amx*/, void** /*code*/, const char* /*path*/, char[64] /*error info*/);
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*/);
@ -1954,6 +1963,7 @@ typedef REAL (*PFN_CELL_TO_REAL) (cell /*x*/);
typedef int (*PFN_REGISTER_SPFORWARD) (AMX * /*amx*/, int /*func*/, ... /*params*/); typedef int (*PFN_REGISTER_SPFORWARD) (AMX * /*amx*/, int /*func*/, ... /*params*/);
typedef int (*PFN_REGISTER_SPFORWARD_BYNAME) (AMX * /*amx*/, const char * /*funcName*/, ... /*params*/); typedef int (*PFN_REGISTER_SPFORWARD_BYNAME) (AMX * /*amx*/, const char * /*funcName*/, ... /*params*/);
typedef void (*PFN_UNREGISTER_SPFORWARD) (int /*id*/); typedef void (*PFN_UNREGISTER_SPFORWARD) (int /*id*/);
typedef void (*PFN_MERGEDEFINITION_FILE) (const char * /*filename*/);
extern PFN_ADD_NATIVES g_fn_AddNatives; extern PFN_ADD_NATIVES g_fn_AddNatives;
extern PFN_BUILD_PATHNAME g_fn_BuildPathname; extern PFN_BUILD_PATHNAME g_fn_BuildPathname;
@ -2005,6 +2015,8 @@ extern PFN_CELL_TO_REAL g_fn_CellToReal;
extern PFN_REGISTER_SPFORWARD g_fn_RegisterSPForward; extern PFN_REGISTER_SPFORWARD g_fn_RegisterSPForward;
extern PFN_REGISTER_SPFORWARD_BYNAME g_fn_RegisterSPForwardByName; extern PFN_REGISTER_SPFORWARD_BYNAME g_fn_RegisterSPForwardByName;
extern PFN_UNREGISTER_SPFORWARD g_fn_UnregisterSPForward; extern PFN_UNREGISTER_SPFORWARD g_fn_UnregisterSPForward;
extern PFN_MERGEDEFINITION_FILE g_fn_MergeDefinition_File;
extern PFN_AMX_FINDNATIVE g_fn_AmxFindNative;
#ifdef MAY_NEVER_BE_DEFINED #ifdef MAY_NEVER_BE_DEFINED
// Function prototypes for intellisense and similar systems // Function prototypes for intellisense and similar systems
@ -2098,8 +2110,10 @@ void MF_Log(const char *fmt, ...);
#define MF_AmxExecv g_fn_AmxExecv #define MF_AmxExecv g_fn_AmxExecv
#define MF_AmxFindPublic g_fn_AmxFindPublic #define MF_AmxFindPublic g_fn_AmxFindPublic
#define MF_AmxAllot g_fn_AmxAllot #define MF_AmxAllot g_fn_AmxAllot
#define MF_AmxFindNative g_fn_AmxFindNative
#define MF_LoadAmxScript g_fn_LoadAmxScript #define MF_LoadAmxScript g_fn_LoadAmxScript
#define MF_UnloadAmxScript g_fn_UnloadAmxScript #define MF_UnloadAmxScript g_fn_UnloadAmxScript
#define MF_MergeDefinitionFile g_fn_MergeDefinition_File
#define amx_ctof g_fn_CellToReal #define amx_ctof g_fn_CellToReal
#define amx_ftoc g_fn_RealToCell #define amx_ftoc g_fn_RealToCell
#define MF_RegisterSPForwardByName g_fn_RegisterSPForwardByName #define MF_RegisterSPForwardByName g_fn_RegisterSPForwardByName
@ -2149,4 +2163,5 @@ void Mem_Deallocator(const char *sourceFile, const unsigned int sourceLine, cons
#define realloc(ptr,sz) Mem_Reallocator(__FILE__,__LINE__,__FUNCTION__,m_alloc_realloc,sz,ptr) #define realloc(ptr,sz) Mem_Reallocator(__FILE__,__LINE__,__FUNCTION__,m_alloc_realloc,sz,ptr)
#define free(ptr) Mem_Deallocator(__FILE__,__LINE__,__FUNCTION__,m_alloc_free,ptr) #define free(ptr) Mem_Deallocator(__FILE__,__LINE__,__FUNCTION__,m_alloc_free,ptr)
#endif // #ifndef __AMXXMODULE_H__ #endif // #ifndef __AMXXMODULE_H__

View File

@ -289,7 +289,7 @@ void OnMetaAttach() {
void OnAmxxAttach(){ void OnAmxxAttach(){
MF_AddNatives(stats_Natives); MF_AddNatives(stats_Natives);
const char* path = get_localinfo("csstats_score","addons/amxx/data/csstats.amxx"); const char* path = get_localinfo("csstats_score","addons/amxmodx/data/csstats.amxx");
if ( path && *path ) if ( path && *path )
{ {
char error[128]; char error[128];
@ -299,7 +299,7 @@ void OnAmxxAttach(){
if ( !g_rank.begin() ) if ( !g_rank.begin() )
{ {
g_rank.loadRank( MF_BuildPathname("%s", g_rank.loadRank( MF_BuildPathname("%s",
get_localinfo("csstats","addons/amxx/data/csstats.dat") ) ); get_localinfo("csstats","addons/amxmodx/data/csstats.dat") ) );
} }
} }

View File

@ -15,6 +15,7 @@
$PROJECT = "cstrike_amxx"; $PROJECT = "cstrike_amxx";
$sdk = "../hlsdk/SourceCode"; $sdk = "../hlsdk/SourceCode";
$mm = "../metamod/metamod"; $mm = "../metamod/metamod";
$gccf = "gcc";
@CPP_SOURCE_FILES = ("CstrikePlayer.cpp", "cstrike.cpp", "amxxmodule.cpp"); @CPP_SOURCE_FILES = ("CstrikePlayer.cpp", "cstrike.cpp", "amxxmodule.cpp");
@ -45,7 +46,7 @@ while ($cmd = shift)
} }
} }
$gcc = `gcc --version`; $gcc = `$gccf --version`;
if ($gcc =~ /2\.9/) if ($gcc =~ /2\.9/)
{ {
$OPT{"opt"} .= " -malign-loops=2 -malign-jumps=2 -malign-functions=2"; $OPT{"opt"} .= " -malign-loops=2 -malign-jumps=2 -malign-functions=2";
@ -134,11 +135,11 @@ for ($i=0; $i<=$#CPP_SOURCE_FILES; $i++)
$ofile = $file; $ofile = $file;
$ofile =~ s/\.cpp/\.o/; $ofile =~ s/\.cpp/\.o/;
$ofile = "$outdir/$ofile"; $ofile = "$outdir/$ofile";
$gcc = "gcc $cflags -Dstrcmpi=strcasecmp -fPIC $inc -c $file -o $ofile"; $gcc = "$gccf $cflags -Dstrcmpi=strcasecmp -fPIC $inc -c $file -o $ofile";
if (-e $ofile) if (-e $ofile)
{ {
$file_time = (stat($file))[9]; $file_time = (stat($file))[9];
$ofile_time = (stat($file))[9]; $ofile_time = (stat($ofile))[9];
if ($file_time > $ofile_time) if ($file_time > $ofile_time)
{ {
print "$gcc\n"; print "$gcc\n";
@ -160,7 +161,7 @@ for ($i=0; $i<=$#CPP_SOURCE_FILES; $i++)
if (-e $ofile) if (-e $ofile)
{ {
$file_time = (stat($file))[9]; $file_time = (stat($file))[9];
$ofile_time = (stat($file))[9]; $ofile_time = (stat($ofile))[9];
if ($file_time > $ofile_time) if ($file_time > $ofile_time)
{ {
print "$gcc\n"; print "$gcc\n";
@ -172,5 +173,6 @@ for ($i=0; $i<=$#CPP_SOURCE_FILES; $i++)
} }
} }
$gcc = "gcc $cflags -shared -ldl -lm @LINK -o $outdir/$bin"; $gcc = "$gccf $cflags -shared -ldl -lm @LINK -o $outdir/$bin";
print "$gcc\n";
`$gcc`; `$gcc`;

View File

@ -2477,6 +2477,8 @@ PFN_CELL_TO_REAL g_fn_CellToReal;
PFN_REGISTER_SPFORWARD g_fn_RegisterSPForward; PFN_REGISTER_SPFORWARD g_fn_RegisterSPForward;
PFN_REGISTER_SPFORWARD_BYNAME g_fn_RegisterSPForwardByName; PFN_REGISTER_SPFORWARD_BYNAME g_fn_RegisterSPForwardByName;
PFN_UNREGISTER_SPFORWARD g_fn_UnregisterSPForward; PFN_UNREGISTER_SPFORWARD g_fn_UnregisterSPForward;
PFN_MERGEDEFINITION_FILE g_fn_MergeDefinition_File;
PFN_AMX_FINDNATIVE g_fn_AmxFindNative;
// *** Exports *** // *** Exports ***
C_DLLEXPORT int AMXX_Query(int *interfaceVersion, amxx_module_info_s *moduleInfo) C_DLLEXPORT int AMXX_Query(int *interfaceVersion, amxx_module_info_s *moduleInfo)
@ -2520,6 +2522,7 @@ C_DLLEXPORT int AMXX_Attach(PFN_REQ_FNPTR reqFnptrFunc)
REQFUNC("PrintSrvConsole", g_fn_PrintSrvConsole, PFN_PRINT_SRVCONSOLE); REQFUNC("PrintSrvConsole", g_fn_PrintSrvConsole, PFN_PRINT_SRVCONSOLE);
REQFUNC("GetModname", g_fn_GetModname, PFN_GET_MODNAME); REQFUNC("GetModname", g_fn_GetModname, PFN_GET_MODNAME);
REQFUNC("Log", g_fn_Log, PFN_LOG); REQFUNC("Log", g_fn_Log, PFN_LOG);
REQFUNC("MergeDefinitionFile", g_fn_MergeDefinition_File, PFN_MERGEDEFINITION_FILE);
// Amx scripts // Amx scripts
REQFUNC("GetAmxScript", g_fn_GetAmxScript, PFN_GET_AMXSCRIPT); REQFUNC("GetAmxScript", g_fn_GetAmxScript, PFN_GET_AMXSCRIPT);
@ -2540,6 +2543,7 @@ C_DLLEXPORT int AMXX_Attach(PFN_REQ_FNPTR reqFnptrFunc)
REQFUNC("amx_Execv", g_fn_AmxExecv, PFN_AMX_EXECV); REQFUNC("amx_Execv", g_fn_AmxExecv, PFN_AMX_EXECV);
REQFUNC("amx_FindPublic", g_fn_AmxFindPublic, PFN_AMX_FINDPUBLIC); REQFUNC("amx_FindPublic", g_fn_AmxFindPublic, PFN_AMX_FINDPUBLIC);
REQFUNC("amx_Allot", g_fn_AmxAllot, PFN_AMX_ALLOT); REQFUNC("amx_Allot", g_fn_AmxAllot, PFN_AMX_ALLOT);
REQFUNC("amx_FindNative", g_fn_AmxFindNative, PFN_AMX_FINDNATIVE);
// Natives / Forwards // Natives / Forwards
REQFUNC("AddNatives", g_fn_AddNatives, PFN_ADD_NATIVES); REQFUNC("AddNatives", g_fn_AddNatives, PFN_ADD_NATIVES);

View File

@ -240,6 +240,14 @@ enum {
AMX_ERR_DOMAIN, /* domain error, expression result does not fit in range */ AMX_ERR_DOMAIN, /* domain error, expression result does not fit in range */
}; };
#if !defined AMX_NO_ALIGN
#if defined __linux__
#pragma pack() /* reset default packing */
#else
#pragma pack(pop) /* reset previous packing */
#endif
#endif
// ***** declare functions ***** // ***** declare functions *****
@ -257,9 +265,9 @@ void FN_META_QUERY(void);
void FN_META_ATTACH(void); void FN_META_ATTACH(void);
#endif // FN_META_ATTACH #endif // FN_META_ATTACH
#ifdef FN_META_DETTACH #ifdef FN_META_DETACH
void FN_META_DETTACH(void); void FN_META_DETACH(void);
#endif // FN_META_DETTACH #endif // FN_META_DETACH
@ -1869,9 +1877,9 @@ void FN_AMXX_QUERY(void);
void FN_AMXX_ATTACH(void); void FN_AMXX_ATTACH(void);
#endif // FN_AMXX_ATTACH #endif // FN_AMXX_ATTACH
#ifdef FN_AMXX_DETTACH #ifdef FN_AMXX_DETACH
void FN_AMXX_DETTACH(void); void FN_AMXX_DETACH(void);
#endif // FN_AMXX_DETTACH #endif // FN_AMXX_DETACH
#ifdef FN_AMXX_PLUGINSLOADED #ifdef FN_AMXX_PLUGINSLOADED
void FN_AMXX_PLUGINSLOADED(void); void FN_AMXX_PLUGINSLOADED(void);
@ -1947,6 +1955,7 @@ typedef int (*PFN_AMX_EXEC) (AMX* /*amx*/, cell* /*return val*/, int /*in
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*/, char* /*func name*/, int* /*index*/);
typedef int (*PFN_AMX_FINDNATIVE) (AMX* /*amx*/, char* /*func name*/, int* /*index*/);
typedef int (*PFN_LOAD_AMXSCRIPT) (AMX* /*amx*/, void** /*code*/, const char* /*path*/, char[64] /*error info*/); typedef int (*PFN_LOAD_AMXSCRIPT) (AMX* /*amx*/, void** /*code*/, const char* /*path*/, char[64] /*error info*/);
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*/);
@ -1954,6 +1963,7 @@ typedef REAL (*PFN_CELL_TO_REAL) (cell /*x*/);
typedef int (*PFN_REGISTER_SPFORWARD) (AMX * /*amx*/, int /*func*/, ... /*params*/); typedef int (*PFN_REGISTER_SPFORWARD) (AMX * /*amx*/, int /*func*/, ... /*params*/);
typedef int (*PFN_REGISTER_SPFORWARD_BYNAME) (AMX * /*amx*/, const char * /*funcName*/, ... /*params*/); typedef int (*PFN_REGISTER_SPFORWARD_BYNAME) (AMX * /*amx*/, const char * /*funcName*/, ... /*params*/);
typedef void (*PFN_UNREGISTER_SPFORWARD) (int /*id*/); typedef void (*PFN_UNREGISTER_SPFORWARD) (int /*id*/);
typedef void (*PFN_MERGEDEFINITION_FILE) (const char * /*filename*/);
extern PFN_ADD_NATIVES g_fn_AddNatives; extern PFN_ADD_NATIVES g_fn_AddNatives;
extern PFN_BUILD_PATHNAME g_fn_BuildPathname; extern PFN_BUILD_PATHNAME g_fn_BuildPathname;
@ -2005,6 +2015,8 @@ extern PFN_CELL_TO_REAL g_fn_CellToReal;
extern PFN_REGISTER_SPFORWARD g_fn_RegisterSPForward; extern PFN_REGISTER_SPFORWARD g_fn_RegisterSPForward;
extern PFN_REGISTER_SPFORWARD_BYNAME g_fn_RegisterSPForwardByName; extern PFN_REGISTER_SPFORWARD_BYNAME g_fn_RegisterSPForwardByName;
extern PFN_UNREGISTER_SPFORWARD g_fn_UnregisterSPForward; extern PFN_UNREGISTER_SPFORWARD g_fn_UnregisterSPForward;
extern PFN_MERGEDEFINITION_FILE g_fn_MergeDefinition_File;
extern PFN_AMX_FINDNATIVE g_fn_AmxFindNative;
#ifdef MAY_NEVER_BE_DEFINED #ifdef MAY_NEVER_BE_DEFINED
// Function prototypes for intellisense and similar systems // Function prototypes for intellisense and similar systems
@ -2098,8 +2110,10 @@ void MF_Log(const char *fmt, ...);
#define MF_AmxExecv g_fn_AmxExecv #define MF_AmxExecv g_fn_AmxExecv
#define MF_AmxFindPublic g_fn_AmxFindPublic #define MF_AmxFindPublic g_fn_AmxFindPublic
#define MF_AmxAllot g_fn_AmxAllot #define MF_AmxAllot g_fn_AmxAllot
#define MF_AmxFindNative g_fn_AmxFindNative
#define MF_LoadAmxScript g_fn_LoadAmxScript #define MF_LoadAmxScript g_fn_LoadAmxScript
#define MF_UnloadAmxScript g_fn_UnloadAmxScript #define MF_UnloadAmxScript g_fn_UnloadAmxScript
#define MF_MergeDefinitionFile g_fn_MergeDefinition_File
#define amx_ctof g_fn_CellToReal #define amx_ctof g_fn_CellToReal
#define amx_ftoc g_fn_RealToCell #define amx_ftoc g_fn_RealToCell
#define MF_RegisterSPForwardByName g_fn_RegisterSPForwardByName #define MF_RegisterSPForwardByName g_fn_RegisterSPForwardByName
@ -2149,4 +2163,5 @@ void Mem_Deallocator(const char *sourceFile, const unsigned int sourceLine, cons
#define realloc(ptr,sz) Mem_Reallocator(__FILE__,__LINE__,__FUNCTION__,m_alloc_realloc,sz,ptr) #define realloc(ptr,sz) Mem_Reallocator(__FILE__,__LINE__,__FUNCTION__,m_alloc_realloc,sz,ptr)
#define free(ptr) Mem_Deallocator(__FILE__,__LINE__,__FUNCTION__,m_alloc_free,ptr) #define free(ptr) Mem_Deallocator(__FILE__,__LINE__,__FUNCTION__,m_alloc_free,ptr)
#endif // #ifndef __AMXXMODULE_H__ #endif // #ifndef __AMXXMODULE_H__

View File

@ -15,6 +15,7 @@
$PROJECT = "dodfun_amxx"; $PROJECT = "dodfun_amxx";
$sdk = "../../../hlsdk/SourceCode"; $sdk = "../../../hlsdk/SourceCode";
$mm = "../../../metamod/metamod"; $mm = "../../../metamod/metamod";
$gccf = "gcc";
@CPP_SOURCE_FILES = ("CMisc.cpp", "NPD.cpp", "NBase.cpp", "Utils.cpp", "moduleconfig.cpp", "usermsg.cpp", "amxxmodule.cpp"); @CPP_SOURCE_FILES = ("CMisc.cpp", "NPD.cpp", "NBase.cpp", "Utils.cpp", "moduleconfig.cpp", "usermsg.cpp", "amxxmodule.cpp");
@ -45,7 +46,7 @@ while ($cmd = shift)
} }
} }
$gcc = `gcc --version`; $gcc = `$gccf --version`;
if ($gcc =~ /2\.9/) if ($gcc =~ /2\.9/)
{ {
$OPT{"opt"} .= " -malign-loops=2 -malign-jumps=2 -malign-functions=2"; $OPT{"opt"} .= " -malign-loops=2 -malign-jumps=2 -malign-functions=2";
@ -134,11 +135,11 @@ for ($i=0; $i<=$#CPP_SOURCE_FILES; $i++)
$ofile = $file; $ofile = $file;
$ofile =~ s/\.cpp/\.o/; $ofile =~ s/\.cpp/\.o/;
$ofile = "$outdir/$ofile"; $ofile = "$outdir/$ofile";
$gcc = "gcc $cflags -Dstrcmpi=strcasecmp -fPIC $inc -c $file -o $ofile"; $gcc = "$gccf $cflags -Dstrcmpi=strcasecmp -fPIC $inc -c $file -o $ofile";
if (-e $ofile) if (-e $ofile)
{ {
$file_time = (stat($file))[9]; $file_time = (stat($file))[9];
$ofile_time = (stat($file))[9]; $ofile_time = (stat($ofile))[9];
if ($file_time > $ofile_time) if ($file_time > $ofile_time)
{ {
print "$gcc\n"; print "$gcc\n";
@ -160,7 +161,7 @@ for ($i=0; $i<=$#CPP_SOURCE_FILES; $i++)
if (-e $ofile) if (-e $ofile)
{ {
$file_time = (stat($file))[9]; $file_time = (stat($file))[9];
$ofile_time = (stat($file))[9]; $ofile_time = (stat($ofile))[9];
if ($file_time > $ofile_time) if ($file_time > $ofile_time)
{ {
print "$gcc\n"; print "$gcc\n";
@ -172,6 +173,6 @@ for ($i=0; $i<=$#CPP_SOURCE_FILES; $i++)
} }
} }
$gcc = "gcc $cflags -shared -ldl -lm @LINK -o $outdir/$bin"; $gcc = "$gccf $cflags -shared -ldl -lm @LINK -o $outdir/$bin";
print "$gcc\n"; print "$gcc\n";
`$gcc`; `$gcc`;

View File

@ -2477,6 +2477,8 @@ PFN_CELL_TO_REAL g_fn_CellToReal;
PFN_REGISTER_SPFORWARD g_fn_RegisterSPForward; PFN_REGISTER_SPFORWARD g_fn_RegisterSPForward;
PFN_REGISTER_SPFORWARD_BYNAME g_fn_RegisterSPForwardByName; PFN_REGISTER_SPFORWARD_BYNAME g_fn_RegisterSPForwardByName;
PFN_UNREGISTER_SPFORWARD g_fn_UnregisterSPForward; PFN_UNREGISTER_SPFORWARD g_fn_UnregisterSPForward;
PFN_MERGEDEFINITION_FILE g_fn_MergeDefinition_File;
PFN_AMX_FINDNATIVE g_fn_AmxFindNative;
// *** Exports *** // *** Exports ***
C_DLLEXPORT int AMXX_Query(int *interfaceVersion, amxx_module_info_s *moduleInfo) C_DLLEXPORT int AMXX_Query(int *interfaceVersion, amxx_module_info_s *moduleInfo)
@ -2520,6 +2522,7 @@ C_DLLEXPORT int AMXX_Attach(PFN_REQ_FNPTR reqFnptrFunc)
REQFUNC("PrintSrvConsole", g_fn_PrintSrvConsole, PFN_PRINT_SRVCONSOLE); REQFUNC("PrintSrvConsole", g_fn_PrintSrvConsole, PFN_PRINT_SRVCONSOLE);
REQFUNC("GetModname", g_fn_GetModname, PFN_GET_MODNAME); REQFUNC("GetModname", g_fn_GetModname, PFN_GET_MODNAME);
REQFUNC("Log", g_fn_Log, PFN_LOG); REQFUNC("Log", g_fn_Log, PFN_LOG);
REQFUNC("MergeDefinitionFile", g_fn_MergeDefinition_File, PFN_MERGEDEFINITION_FILE);
// Amx scripts // Amx scripts
REQFUNC("GetAmxScript", g_fn_GetAmxScript, PFN_GET_AMXSCRIPT); REQFUNC("GetAmxScript", g_fn_GetAmxScript, PFN_GET_AMXSCRIPT);
@ -2540,6 +2543,7 @@ C_DLLEXPORT int AMXX_Attach(PFN_REQ_FNPTR reqFnptrFunc)
REQFUNC("amx_Execv", g_fn_AmxExecv, PFN_AMX_EXECV); REQFUNC("amx_Execv", g_fn_AmxExecv, PFN_AMX_EXECV);
REQFUNC("amx_FindPublic", g_fn_AmxFindPublic, PFN_AMX_FINDPUBLIC); REQFUNC("amx_FindPublic", g_fn_AmxFindPublic, PFN_AMX_FINDPUBLIC);
REQFUNC("amx_Allot", g_fn_AmxAllot, PFN_AMX_ALLOT); REQFUNC("amx_Allot", g_fn_AmxAllot, PFN_AMX_ALLOT);
REQFUNC("amx_FindNative", g_fn_AmxFindNative, PFN_AMX_FINDNATIVE);
// Natives / Forwards // Natives / Forwards
REQFUNC("AddNatives", g_fn_AddNatives, PFN_ADD_NATIVES); REQFUNC("AddNatives", g_fn_AddNatives, PFN_ADD_NATIVES);

View File

@ -240,6 +240,14 @@ enum {
AMX_ERR_DOMAIN, /* domain error, expression result does not fit in range */ AMX_ERR_DOMAIN, /* domain error, expression result does not fit in range */
}; };
#if !defined AMX_NO_ALIGN
#if defined __linux__
#pragma pack() /* reset default packing */
#else
#pragma pack(pop) /* reset previous packing */
#endif
#endif
// ***** declare functions ***** // ***** declare functions *****
@ -1947,6 +1955,7 @@ typedef int (*PFN_AMX_EXEC) (AMX* /*amx*/, cell* /*return val*/, int /*in
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*/, char* /*func name*/, int* /*index*/);
typedef int (*PFN_AMX_FINDNATIVE) (AMX* /*amx*/, char* /*func name*/, int* /*index*/);
typedef int (*PFN_LOAD_AMXSCRIPT) (AMX* /*amx*/, void** /*code*/, const char* /*path*/, char[64] /*error info*/); typedef int (*PFN_LOAD_AMXSCRIPT) (AMX* /*amx*/, void** /*code*/, const char* /*path*/, char[64] /*error info*/);
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*/);
@ -1954,6 +1963,7 @@ typedef REAL (*PFN_CELL_TO_REAL) (cell /*x*/);
typedef int (*PFN_REGISTER_SPFORWARD) (AMX * /*amx*/, int /*func*/, ... /*params*/); typedef int (*PFN_REGISTER_SPFORWARD) (AMX * /*amx*/, int /*func*/, ... /*params*/);
typedef int (*PFN_REGISTER_SPFORWARD_BYNAME) (AMX * /*amx*/, const char * /*funcName*/, ... /*params*/); typedef int (*PFN_REGISTER_SPFORWARD_BYNAME) (AMX * /*amx*/, const char * /*funcName*/, ... /*params*/);
typedef void (*PFN_UNREGISTER_SPFORWARD) (int /*id*/); typedef void (*PFN_UNREGISTER_SPFORWARD) (int /*id*/);
typedef void (*PFN_MERGEDEFINITION_FILE) (const char * /*filename*/);
extern PFN_ADD_NATIVES g_fn_AddNatives; extern PFN_ADD_NATIVES g_fn_AddNatives;
extern PFN_BUILD_PATHNAME g_fn_BuildPathname; extern PFN_BUILD_PATHNAME g_fn_BuildPathname;
@ -2005,6 +2015,8 @@ extern PFN_CELL_TO_REAL g_fn_CellToReal;
extern PFN_REGISTER_SPFORWARD g_fn_RegisterSPForward; extern PFN_REGISTER_SPFORWARD g_fn_RegisterSPForward;
extern PFN_REGISTER_SPFORWARD_BYNAME g_fn_RegisterSPForwardByName; extern PFN_REGISTER_SPFORWARD_BYNAME g_fn_RegisterSPForwardByName;
extern PFN_UNREGISTER_SPFORWARD g_fn_UnregisterSPForward; extern PFN_UNREGISTER_SPFORWARD g_fn_UnregisterSPForward;
extern PFN_MERGEDEFINITION_FILE g_fn_MergeDefinition_File;
extern PFN_AMX_FINDNATIVE g_fn_AmxFindNative;
#ifdef MAY_NEVER_BE_DEFINED #ifdef MAY_NEVER_BE_DEFINED
// Function prototypes for intellisense and similar systems // Function prototypes for intellisense and similar systems
@ -2098,8 +2110,10 @@ void MF_Log(const char *fmt, ...);
#define MF_AmxExecv g_fn_AmxExecv #define MF_AmxExecv g_fn_AmxExecv
#define MF_AmxFindPublic g_fn_AmxFindPublic #define MF_AmxFindPublic g_fn_AmxFindPublic
#define MF_AmxAllot g_fn_AmxAllot #define MF_AmxAllot g_fn_AmxAllot
#define MF_AmxFindNative g_fn_AmxFindNative
#define MF_LoadAmxScript g_fn_LoadAmxScript #define MF_LoadAmxScript g_fn_LoadAmxScript
#define MF_UnloadAmxScript g_fn_UnloadAmxScript #define MF_UnloadAmxScript g_fn_UnloadAmxScript
#define MF_MergeDefinitionFile g_fn_MergeDefinition_File
#define amx_ctof g_fn_CellToReal #define amx_ctof g_fn_CellToReal
#define amx_ftoc g_fn_RealToCell #define amx_ftoc g_fn_RealToCell
#define MF_RegisterSPForwardByName g_fn_RegisterSPForwardByName #define MF_RegisterSPForwardByName g_fn_RegisterSPForwardByName
@ -2149,4 +2163,5 @@ void Mem_Deallocator(const char *sourceFile, const unsigned int sourceLine, cons
#define realloc(ptr,sz) Mem_Reallocator(__FILE__,__LINE__,__FUNCTION__,m_alloc_realloc,sz,ptr) #define realloc(ptr,sz) Mem_Reallocator(__FILE__,__LINE__,__FUNCTION__,m_alloc_realloc,sz,ptr)
#define free(ptr) Mem_Deallocator(__FILE__,__LINE__,__FUNCTION__,m_alloc_free,ptr) #define free(ptr) Mem_Deallocator(__FILE__,__LINE__,__FUNCTION__,m_alloc_free,ptr)
#endif // #ifndef __AMXXMODULE_H__ #endif // #ifndef __AMXXMODULE_H__

View File

@ -15,6 +15,7 @@
$PROJECT = "dodx_amxx"; $PROJECT = "dodx_amxx";
$sdk = "../../../hlsdk/SourceCode"; $sdk = "../../../hlsdk/SourceCode";
$mm = "../../../metamod/metamod"; $mm = "../../../metamod/metamod";
$gccf = "gcc";
@CPP_SOURCE_FILES = ("CMisc.cpp", "CRank.cpp", "NBase.cpp", "NRank.cpp", "Utils.cpp", "moduleconfig.cpp", "usermsg.cpp", "amxxmodule.cpp"); @CPP_SOURCE_FILES = ("CMisc.cpp", "CRank.cpp", "NBase.cpp", "NRank.cpp", "Utils.cpp", "moduleconfig.cpp", "usermsg.cpp", "amxxmodule.cpp");
@ -45,7 +46,7 @@ while ($cmd = shift)
} }
} }
$gcc = `gcc --version`; $gcc = `$gccf --version`;
if ($gcc =~ /2\.9/) if ($gcc =~ /2\.9/)
{ {
$OPT{"opt"} .= " -malign-loops=2 -malign-jumps=2 -malign-functions=2"; $OPT{"opt"} .= " -malign-loops=2 -malign-jumps=2 -malign-functions=2";
@ -134,11 +135,11 @@ for ($i=0; $i<=$#CPP_SOURCE_FILES; $i++)
$ofile = $file; $ofile = $file;
$ofile =~ s/\.cpp/\.o/; $ofile =~ s/\.cpp/\.o/;
$ofile = "$outdir/$ofile"; $ofile = "$outdir/$ofile";
$gcc = "gcc $cflags -Dstrcmpi=strcasecmp -fPIC $inc -c $file -o $ofile"; $gcc = "$gccf $cflags -Dstrcmpi=strcasecmp -fPIC $inc -c $file -o $ofile";
if (-e $ofile) if (-e $ofile)
{ {
$file_time = (stat($file))[9]; $file_time = (stat($file))[9];
$ofile_time = (stat($file))[9]; $ofile_time = (stat($ofile))[9];
if ($file_time > $ofile_time) if ($file_time > $ofile_time)
{ {
print "$gcc\n"; print "$gcc\n";
@ -160,7 +161,7 @@ for ($i=0; $i<=$#CPP_SOURCE_FILES; $i++)
if (-e $ofile) if (-e $ofile)
{ {
$file_time = (stat($file))[9]; $file_time = (stat($file))[9];
$ofile_time = (stat($file))[9]; $ofile_time = (stat($ofile))[9];
if ($file_time > $ofile_time) if ($file_time > $ofile_time)
{ {
print "$gcc\n"; print "$gcc\n";
@ -172,6 +173,6 @@ for ($i=0; $i<=$#CPP_SOURCE_FILES; $i++)
} }
} }
$gcc = "gcc $cflags -shared -ldl -lm @LINK -o $outdir/$bin"; $gcc = "$gccf $cflags -shared -ldl -lm @LINK -o $outdir/$bin";
print "$gcc\n"; print "$gcc\n";
`$gcc`; `$gcc`;

View File

@ -2477,6 +2477,8 @@ PFN_CELL_TO_REAL g_fn_CellToReal;
PFN_REGISTER_SPFORWARD g_fn_RegisterSPForward; PFN_REGISTER_SPFORWARD g_fn_RegisterSPForward;
PFN_REGISTER_SPFORWARD_BYNAME g_fn_RegisterSPForwardByName; PFN_REGISTER_SPFORWARD_BYNAME g_fn_RegisterSPForwardByName;
PFN_UNREGISTER_SPFORWARD g_fn_UnregisterSPForward; PFN_UNREGISTER_SPFORWARD g_fn_UnregisterSPForward;
PFN_MERGEDEFINITION_FILE g_fn_MergeDefinition_File;
PFN_AMX_FINDNATIVE g_fn_AmxFindNative;
// *** Exports *** // *** Exports ***
C_DLLEXPORT int AMXX_Query(int *interfaceVersion, amxx_module_info_s *moduleInfo) C_DLLEXPORT int AMXX_Query(int *interfaceVersion, amxx_module_info_s *moduleInfo)
@ -2520,6 +2522,7 @@ C_DLLEXPORT int AMXX_Attach(PFN_REQ_FNPTR reqFnptrFunc)
REQFUNC("PrintSrvConsole", g_fn_PrintSrvConsole, PFN_PRINT_SRVCONSOLE); REQFUNC("PrintSrvConsole", g_fn_PrintSrvConsole, PFN_PRINT_SRVCONSOLE);
REQFUNC("GetModname", g_fn_GetModname, PFN_GET_MODNAME); REQFUNC("GetModname", g_fn_GetModname, PFN_GET_MODNAME);
REQFUNC("Log", g_fn_Log, PFN_LOG); REQFUNC("Log", g_fn_Log, PFN_LOG);
REQFUNC("MergeDefinitionFile", g_fn_MergeDefinition_File, PFN_MERGEDEFINITION_FILE);
// Amx scripts // Amx scripts
REQFUNC("GetAmxScript", g_fn_GetAmxScript, PFN_GET_AMXSCRIPT); REQFUNC("GetAmxScript", g_fn_GetAmxScript, PFN_GET_AMXSCRIPT);
@ -2540,6 +2543,7 @@ C_DLLEXPORT int AMXX_Attach(PFN_REQ_FNPTR reqFnptrFunc)
REQFUNC("amx_Execv", g_fn_AmxExecv, PFN_AMX_EXECV); REQFUNC("amx_Execv", g_fn_AmxExecv, PFN_AMX_EXECV);
REQFUNC("amx_FindPublic", g_fn_AmxFindPublic, PFN_AMX_FINDPUBLIC); REQFUNC("amx_FindPublic", g_fn_AmxFindPublic, PFN_AMX_FINDPUBLIC);
REQFUNC("amx_Allot", g_fn_AmxAllot, PFN_AMX_ALLOT); REQFUNC("amx_Allot", g_fn_AmxAllot, PFN_AMX_ALLOT);
REQFUNC("amx_FindNative", g_fn_AmxFindNative, PFN_AMX_FINDNATIVE);
// Natives / Forwards // Natives / Forwards
REQFUNC("AddNatives", g_fn_AddNatives, PFN_ADD_NATIVES); REQFUNC("AddNatives", g_fn_AddNatives, PFN_ADD_NATIVES);

View File

@ -240,6 +240,14 @@ enum {
AMX_ERR_DOMAIN, /* domain error, expression result does not fit in range */ AMX_ERR_DOMAIN, /* domain error, expression result does not fit in range */
}; };
#if !defined AMX_NO_ALIGN
#if defined __linux__
#pragma pack() /* reset default packing */
#else
#pragma pack(pop) /* reset previous packing */
#endif
#endif
// ***** declare functions ***** // ***** declare functions *****
@ -1947,6 +1955,7 @@ typedef int (*PFN_AMX_EXEC) (AMX* /*amx*/, cell* /*return val*/, int /*in
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*/, char* /*func name*/, int* /*index*/);
typedef int (*PFN_AMX_FINDNATIVE) (AMX* /*amx*/, char* /*func name*/, int* /*index*/);
typedef int (*PFN_LOAD_AMXSCRIPT) (AMX* /*amx*/, void** /*code*/, const char* /*path*/, char[64] /*error info*/); typedef int (*PFN_LOAD_AMXSCRIPT) (AMX* /*amx*/, void** /*code*/, const char* /*path*/, char[64] /*error info*/);
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*/);
@ -1954,6 +1963,7 @@ typedef REAL (*PFN_CELL_TO_REAL) (cell /*x*/);
typedef int (*PFN_REGISTER_SPFORWARD) (AMX * /*amx*/, int /*func*/, ... /*params*/); typedef int (*PFN_REGISTER_SPFORWARD) (AMX * /*amx*/, int /*func*/, ... /*params*/);
typedef int (*PFN_REGISTER_SPFORWARD_BYNAME) (AMX * /*amx*/, const char * /*funcName*/, ... /*params*/); typedef int (*PFN_REGISTER_SPFORWARD_BYNAME) (AMX * /*amx*/, const char * /*funcName*/, ... /*params*/);
typedef void (*PFN_UNREGISTER_SPFORWARD) (int /*id*/); typedef void (*PFN_UNREGISTER_SPFORWARD) (int /*id*/);
typedef void (*PFN_MERGEDEFINITION_FILE) (const char * /*filename*/);
extern PFN_ADD_NATIVES g_fn_AddNatives; extern PFN_ADD_NATIVES g_fn_AddNatives;
extern PFN_BUILD_PATHNAME g_fn_BuildPathname; extern PFN_BUILD_PATHNAME g_fn_BuildPathname;
@ -2005,6 +2015,8 @@ extern PFN_CELL_TO_REAL g_fn_CellToReal;
extern PFN_REGISTER_SPFORWARD g_fn_RegisterSPForward; extern PFN_REGISTER_SPFORWARD g_fn_RegisterSPForward;
extern PFN_REGISTER_SPFORWARD_BYNAME g_fn_RegisterSPForwardByName; extern PFN_REGISTER_SPFORWARD_BYNAME g_fn_RegisterSPForwardByName;
extern PFN_UNREGISTER_SPFORWARD g_fn_UnregisterSPForward; extern PFN_UNREGISTER_SPFORWARD g_fn_UnregisterSPForward;
extern PFN_MERGEDEFINITION_FILE g_fn_MergeDefinition_File;
extern PFN_AMX_FINDNATIVE g_fn_AmxFindNative;
#ifdef MAY_NEVER_BE_DEFINED #ifdef MAY_NEVER_BE_DEFINED
// Function prototypes for intellisense and similar systems // Function prototypes for intellisense and similar systems
@ -2098,8 +2110,10 @@ void MF_Log(const char *fmt, ...);
#define MF_AmxExecv g_fn_AmxExecv #define MF_AmxExecv g_fn_AmxExecv
#define MF_AmxFindPublic g_fn_AmxFindPublic #define MF_AmxFindPublic g_fn_AmxFindPublic
#define MF_AmxAllot g_fn_AmxAllot #define MF_AmxAllot g_fn_AmxAllot
#define MF_AmxFindNative g_fn_AmxFindNative
#define MF_LoadAmxScript g_fn_LoadAmxScript #define MF_LoadAmxScript g_fn_LoadAmxScript
#define MF_UnloadAmxScript g_fn_UnloadAmxScript #define MF_UnloadAmxScript g_fn_UnloadAmxScript
#define MF_MergeDefinitionFile g_fn_MergeDefinition_File
#define amx_ctof g_fn_CellToReal #define amx_ctof g_fn_CellToReal
#define amx_ftoc g_fn_RealToCell #define amx_ftoc g_fn_RealToCell
#define MF_RegisterSPForwardByName g_fn_RegisterSPForwardByName #define MF_RegisterSPForwardByName g_fn_RegisterSPForwardByName
@ -2149,4 +2163,5 @@ void Mem_Deallocator(const char *sourceFile, const unsigned int sourceLine, cons
#define realloc(ptr,sz) Mem_Reallocator(__FILE__,__LINE__,__FUNCTION__,m_alloc_realloc,sz,ptr) #define realloc(ptr,sz) Mem_Reallocator(__FILE__,__LINE__,__FUNCTION__,m_alloc_realloc,sz,ptr)
#define free(ptr) Mem_Deallocator(__FILE__,__LINE__,__FUNCTION__,m_alloc_free,ptr) #define free(ptr) Mem_Deallocator(__FILE__,__LINE__,__FUNCTION__,m_alloc_free,ptr)
#endif // #ifndef __AMXXMODULE_H__ #endif // #ifndef __AMXXMODULE_H__

View File

@ -372,7 +372,7 @@ void OnAmxxAttach() {
MF_AddNatives( stats_Natives ); MF_AddNatives( stats_Natives );
MF_AddNatives( base_Natives ); MF_AddNatives( base_Natives );
const char* path = get_localinfo("dodstats_score","addons/amxx/data/dodstats.amxx"); const char* path = get_localinfo("dodstats_score","addons/amxmodx/data/dodstats.amxx");
if ( path && *path ) { if ( path && *path ) {
char error[128]; char error[128];
g_rank.loadCalc( MF_BuildPathname("%s",path) , error ); g_rank.loadCalc( MF_BuildPathname("%s",path) , error );
@ -380,7 +380,7 @@ void OnAmxxAttach() {
if ( !g_rank.begin() ){ if ( !g_rank.begin() ){
g_rank.loadRank( MF_BuildPathname("%s", g_rank.loadRank( MF_BuildPathname("%s",
get_localinfo("dodstats","addons/amxx/data/dodstats.dat") ) ); get_localinfo("dodstats","addons/amxmodx/data/dodstats.dat") ) );
} }
g_map.Init(); g_map.Init();

View File

@ -136,3 +136,4 @@ private:
}; };
#endif //_INCLUDE_CSTRING_H #endif //_INCLUDE_CSTRING_H

View File

@ -15,6 +15,7 @@
$PROJECT = "engine_amxx"; $PROJECT = "engine_amxx";
$sdk = "../hlsdk/SourceCode"; $sdk = "../hlsdk/SourceCode";
$mm = "../metamod/metamod"; $mm = "../metamod/metamod";
$gccf = "gcc";
@CPP_SOURCE_FILES = ("amxxmodule.cpp", "forwards.cpp", "messages.cpp", "entity.cpp", "globals.cpp", "amxxapi.cpp", "engine.cpp"); @CPP_SOURCE_FILES = ("amxxmodule.cpp", "forwards.cpp", "messages.cpp", "entity.cpp", "globals.cpp", "amxxapi.cpp", "engine.cpp");
@ -45,7 +46,7 @@ while ($cmd = shift)
} }
} }
$gcc = `gcc --version`; $gcc = `$gccf --version`;
if ($gcc =~ /2\.9/) if ($gcc =~ /2\.9/)
{ {
$OPT{"opt"} .= " -malign-loops=2 -malign-jumps=2 -malign-functions=2"; $OPT{"opt"} .= " -malign-loops=2 -malign-jumps=2 -malign-functions=2";
@ -134,7 +135,7 @@ for ($i=0; $i<=$#CPP_SOURCE_FILES; $i++)
$ofile = $file; $ofile = $file;
$ofile =~ s/\.cpp/\.o/; $ofile =~ s/\.cpp/\.o/;
$ofile = "$outdir/$ofile"; $ofile = "$outdir/$ofile";
$gcc = "gcc $cflags -Dstrcmpi=strcasecmp -fPIC $inc -c $file -o $ofile"; $gcc = "$gccf $cflags -Dstrcmpi=strcasecmp -fPIC $inc -c $file -o $ofile";
if (-e $ofile) if (-e $ofile)
{ {
$file_time = (stat($file))[9]; $file_time = (stat($file))[9];
@ -172,5 +173,6 @@ for ($i=0; $i<=$#CPP_SOURCE_FILES; $i++)
} }
} }
$gcc = "gcc $cflags -shared -ldl -lm @LINK -o $outdir/$bin"; $gcc = "$gccf $cflags -shared -ldl -lm @LINK -o $outdir/$bin";
print "$gcc\n";
`$gcc`; `$gcc`;

View File

@ -11,6 +11,38 @@ int AmxStringToEngine(AMX *amx, cell param, int &len)
return ALLOC_STRING(szString); return ALLOC_STRING(szString);
} }
void EngineError(AMX *amx, char *fmt, ...)
{
va_list p;
va_start(p, fmt);
char errbuf[512];
vsprintf(errbuf, fmt, p);
va_end(p);
MF_Log("%s (\"%s\", line %d)", errbuf, MF_GetScriptName(MF_FindScriptByAmx(amx)), amx->curline);
MF_RaiseAmxError(amx, AMX_ERR_NATIVE);
}
void OnAmxxDetach()
{
register unsigned int i = 0;
for (i=0; i<256; i++) {
msgHooks[i].clear();
msgBlocks[i] = 0;
}
for (i=0; i<Msg.size(); i++)
delete Msg[i];
for (i=0; i<Touches.size(); i++)
delete Touches[i];
for (i=0; i<Impulses.size(); i++)
delete Impulses[i];
for (i=0; i<Thinks.size(); i++)
delete Thinks[i];
Msg.clear();
Touches.clear();
Impulses.clear();
Thinks.clear();
}
void OnAmxxAttach() void OnAmxxAttach()
{ {
pfnTouchForward = 0; pfnTouchForward = 0;
@ -182,16 +214,6 @@ void ServerDeactivate()
memset(glinfo.szRealLights, 0x0, 128); memset(glinfo.szRealLights, 0x0, 128);
glinfo.bLights = false; glinfo.bLights = false;
glinfo.fNextLights = 0; glinfo.fNextLights = 0;
Msg.clear();
register int i = 0;
for (i=0; i<256; i++) {
msgHooks[i] = 0;
msgBlocks[i] = 0;
}
Touches.clear();
Impulses.clear();
Thinks.clear();
// Reset all forwarding function tables (so that forwards won't be called before plugins are initialized) // Reset all forwarding function tables (so that forwards won't be called before plugins are initialized)
g_pFunctionTable->pfnAddToFullPack=NULL; g_pFunctionTable->pfnAddToFullPack=NULL;
@ -216,7 +238,7 @@ void ServerActivate(edict_t *pEdictList, int edictCount, int clientMax)
Msg.clear(); Msg.clear();
register int i = 0; register int i = 0;
for (i=0; i<256; i++) { for (i=0; i<256; i++) {
msgHooks[i] = 0; msgHooks[i].clear();
msgBlocks[i] = 0; msgBlocks[i] = 0;
} }

View File

@ -2539,6 +2539,7 @@ C_DLLEXPORT int AMXX_Attach(PFN_REQ_FNPTR reqFnptrFunc)
REQFUNC("FindAmxScriptByName", g_fn_FindAmxScriptByName, PFN_FIND_AMXSCRIPT_BYNAME); REQFUNC("FindAmxScriptByName", g_fn_FindAmxScriptByName, PFN_FIND_AMXSCRIPT_BYNAME);
REQFUNC("LoadAmxScript", g_fn_LoadAmxScript, PFN_LOAD_AMXSCRIPT); REQFUNC("LoadAmxScript", g_fn_LoadAmxScript, PFN_LOAD_AMXSCRIPT);
REQFUNC("UnloadAmxScript", g_fn_UnloadAmxScript, PFN_UNLOAD_AMXSCRIPT); REQFUNC("UnloadAmxScript", g_fn_UnloadAmxScript, PFN_UNLOAD_AMXSCRIPT);
REQFUNC("GetAmxScriptName", g_fn_GetAmxScriptName, PFN_GET_AMXSCRIPTNAME);
// String / mem in amx scripts support // String / mem in amx scripts support
REQFUNC("SetAmxString", g_fn_SetAmxString, PFN_SET_AMXSTRING); REQFUNC("SetAmxString", g_fn_SetAmxString, PFN_SET_AMXSTRING);

View File

@ -240,6 +240,14 @@ enum {
AMX_ERR_DOMAIN, /* domain error, expression result does not fit in range */ AMX_ERR_DOMAIN, /* domain error, expression result does not fit in range */
}; };
#if !defined AMX_NO_ALIGN
#if defined __linux__
#pragma pack() /* reset default packing */
#else
#pragma pack(pop) /* reset previous packing */
#endif
#endif
// ***** declare functions ***** // ***** declare functions *****
@ -257,9 +265,9 @@ void FN_META_QUERY(void);
void FN_META_ATTACH(void); void FN_META_ATTACH(void);
#endif // FN_META_ATTACH #endif // FN_META_ATTACH
#ifdef FN_META_DETTACH #ifdef FN_META_DETACH
void FN_META_DETTACH(void); void FN_META_DETACH(void);
#endif // FN_META_DETTACH #endif // FN_META_DETACH
@ -1869,9 +1877,9 @@ void FN_AMXX_QUERY(void);
void FN_AMXX_ATTACH(void); void FN_AMXX_ATTACH(void);
#endif // FN_AMXX_ATTACH #endif // FN_AMXX_ATTACH
#ifdef FN_AMXX_DETTACH #ifdef FN_AMXX_DETACH
void FN_AMXX_DETTACH(void); void FN_AMXX_DETACH(void);
#endif // FN_AMXX_DETTACH #endif // FN_AMXX_DETACH
#ifdef FN_AMXX_PLUGINSLOADED #ifdef FN_AMXX_PLUGINSLOADED
void FN_AMXX_PLUGINSLOADED(void); void FN_AMXX_PLUGINSLOADED(void);
@ -1947,6 +1955,7 @@ typedef int (*PFN_AMX_EXEC) (AMX* /*amx*/, cell* /*return val*/, int /*in
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*/, char* /*func name*/, int* /*index*/);
typedef int (*PFN_AMX_FINDNATIVE) (AMX* /*amx*/, char* /*func name*/, int* /*index*/);
typedef int (*PFN_LOAD_AMXSCRIPT) (AMX* /*amx*/, void** /*code*/, const char* /*path*/, char[64] /*error info*/); typedef int (*PFN_LOAD_AMXSCRIPT) (AMX* /*amx*/, void** /*code*/, const char* /*path*/, char[64] /*error info*/);
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*/);
@ -1954,6 +1963,7 @@ typedef REAL (*PFN_CELL_TO_REAL) (cell /*x*/);
typedef int (*PFN_REGISTER_SPFORWARD) (AMX * /*amx*/, int /*func*/, ... /*params*/); typedef int (*PFN_REGISTER_SPFORWARD) (AMX * /*amx*/, int /*func*/, ... /*params*/);
typedef int (*PFN_REGISTER_SPFORWARD_BYNAME) (AMX * /*amx*/, const char * /*funcName*/, ... /*params*/); typedef int (*PFN_REGISTER_SPFORWARD_BYNAME) (AMX * /*amx*/, const char * /*funcName*/, ... /*params*/);
typedef void (*PFN_UNREGISTER_SPFORWARD) (int /*id*/); typedef void (*PFN_UNREGISTER_SPFORWARD) (int /*id*/);
typedef void (*PFN_MERGEDEFINITION_FILE) (const char * /*filename*/);
extern PFN_ADD_NATIVES g_fn_AddNatives; extern PFN_ADD_NATIVES g_fn_AddNatives;
extern PFN_BUILD_PATHNAME g_fn_BuildPathname; extern PFN_BUILD_PATHNAME g_fn_BuildPathname;
@ -2005,6 +2015,8 @@ extern PFN_CELL_TO_REAL g_fn_CellToReal;
extern PFN_REGISTER_SPFORWARD g_fn_RegisterSPForward; extern PFN_REGISTER_SPFORWARD g_fn_RegisterSPForward;
extern PFN_REGISTER_SPFORWARD_BYNAME g_fn_RegisterSPForwardByName; extern PFN_REGISTER_SPFORWARD_BYNAME g_fn_RegisterSPForwardByName;
extern PFN_UNREGISTER_SPFORWARD g_fn_UnregisterSPForward; extern PFN_UNREGISTER_SPFORWARD g_fn_UnregisterSPForward;
extern PFN_MERGEDEFINITION_FILE g_fn_MergeDefinition_File;
extern PFN_AMX_FINDNATIVE g_fn_AmxFindNative;
#ifdef MAY_NEVER_BE_DEFINED #ifdef MAY_NEVER_BE_DEFINED
// Function prototypes for intellisense and similar systems // Function prototypes for intellisense and similar systems
@ -2098,8 +2110,10 @@ void MF_Log(const char *fmt, ...);
#define MF_AmxExecv g_fn_AmxExecv #define MF_AmxExecv g_fn_AmxExecv
#define MF_AmxFindPublic g_fn_AmxFindPublic #define MF_AmxFindPublic g_fn_AmxFindPublic
#define MF_AmxAllot g_fn_AmxAllot #define MF_AmxAllot g_fn_AmxAllot
#define MF_AmxFindNative g_fn_AmxFindNative
#define MF_LoadAmxScript g_fn_LoadAmxScript #define MF_LoadAmxScript g_fn_LoadAmxScript
#define MF_UnloadAmxScript g_fn_UnloadAmxScript #define MF_UnloadAmxScript g_fn_UnloadAmxScript
#define MF_MergeDefinitionFile g_fn_MergeDefinition_File
#define amx_ctof g_fn_CellToReal #define amx_ctof g_fn_CellToReal
#define amx_ftoc g_fn_RealToCell #define amx_ftoc g_fn_RealToCell
#define MF_RegisterSPForwardByName g_fn_RegisterSPForwardByName #define MF_RegisterSPForwardByName g_fn_RegisterSPForwardByName
@ -2149,4 +2163,5 @@ void Mem_Deallocator(const char *sourceFile, const unsigned int sourceLine, cons
#define realloc(ptr,sz) Mem_Reallocator(__FILE__,__LINE__,__FUNCTION__,m_alloc_realloc,sz,ptr) #define realloc(ptr,sz) Mem_Reallocator(__FILE__,__LINE__,__FUNCTION__,m_alloc_realloc,sz,ptr)
#define free(ptr) Mem_Deallocator(__FILE__,__LINE__,__FUNCTION__,m_alloc_free,ptr) #define free(ptr) Mem_Deallocator(__FILE__,__LINE__,__FUNCTION__,m_alloc_free,ptr)
#endif // #ifndef __AMXXMODULE_H__ #endif // #ifndef __AMXXMODULE_H__

View File

@ -100,7 +100,7 @@ static cell AMX_NATIVE_CALL VelocityByAim(AMX *amx, cell *params)
Vector vVector = Vector(0, 0, 0); Vector vVector = Vector(0, 0, 0);
if (!is_ent_valid(iEnt)) { if (!is_ent_valid(iEnt)) {
MF_RaiseAmxError(amx, AMX_ERR_NATIVE); EngineError(amx, "Invalid Entity %d", iEnt);
return 0; return 0;
} }
@ -324,7 +324,7 @@ static cell AMX_NATIVE_CALL set_speak(AMX *amx, cell *params) {
int iNewSpeakFlags = params[2]; int iNewSpeakFlags = params[2];
if (iIndex> 32 || !is_ent_valid(iIndex)) { if (iIndex> 32 || !is_ent_valid(iIndex)) {
MF_RaiseAmxError(amx,AMX_ERR_NATIVE); EngineError(amx, "Invalid player %d", iIndex);
return 0; return 0;
} }
@ -337,7 +337,7 @@ static cell AMX_NATIVE_CALL get_speak(AMX *amx, cell *params) {
int iIndex = params[1]; int iIndex = params[1];
if (!is_ent_valid(iIndex) || iIndex > 32) { if (!is_ent_valid(iIndex) || iIndex > 32) {
MF_RaiseAmxError(amx,AMX_ERR_NATIVE); EngineError(amx, "Invalid player %d", iIndex);
return 0; return 0;
} }
@ -364,7 +364,7 @@ static cell AMX_NATIVE_CALL get_info_keybuffer(AMX *amx, cell *params)
int iEnt = params[1]; int iEnt = params[1];
if (!is_ent_valid(iEnt)) { if (!is_ent_valid(iEnt)) {
MF_RaiseAmxError(amx,AMX_ERR_NATIVE); EngineError(amx, "Invalid Entity %d", iEnt);
return 0; return 0;
} }
@ -382,7 +382,7 @@ static cell AMX_NATIVE_CALL drop_to_floor(AMX *amx, cell *params)
int iEnt = params[1]; int iEnt = params[1];
if (!is_ent_valid(iEnt)) { if (!is_ent_valid(iEnt)) {
MF_RaiseAmxError(amx,AMX_ERR_NATIVE); EngineError(amx, "Invalid Entity %d", iEnt);
return 0; return 0;
} }
@ -408,12 +408,12 @@ static cell AMX_NATIVE_CALL attach_view(AMX *amx, cell *params)
int iTargetIndex = params[2]; int iTargetIndex = params[2];
if (iIndex > 32 || !is_ent_valid(iIndex)) { if (iIndex > 32 || !is_ent_valid(iIndex)) {
MF_RaiseAmxError(amx,AMX_ERR_NATIVE); EngineError(amx, "Invalid player %d", iIndex);
return 0; return 0;
} }
if (!is_ent_valid(iTargetIndex)) { if (!is_ent_valid(iTargetIndex)) {
MF_RaiseAmxError(amx,AMX_ERR_NATIVE); EngineError(amx, "Invalid Entity %d", iIndex);
return 0; return 0;
} }
@ -430,7 +430,7 @@ static cell AMX_NATIVE_CALL set_view(AMX *amx, cell *params) {
int iCameraType = params[2]; int iCameraType = params[2];
if (iIndex > 32 || !is_ent_valid(iIndex)) { if (iIndex > 32 || !is_ent_valid(iIndex)) {
MF_RaiseAmxError(amx,AMX_ERR_NATIVE); EngineError(amx, "Invalid player %d", iIndex);
return 0; return 0;
} }
@ -896,36 +896,11 @@ static cell AMX_NATIVE_CALL traceresult(AMX *amx, cell *params)
return 0; return 0;
} }
//(mahnsawce)
static cell AMX_NATIVE_CALL take_damage(AMX *amx, cell *params)
{
int indexa = params[1];
int indexb = params[2];
int indexc = params[3];
if (!is_ent_valid(indexa) || !is_ent_valid(indexb) || !is_ent_valid(indexc)) {
MF_RaiseAmxError(amx, AMX_ERR_NATIVE);
return 0;
}
REAL fnDamage = amx_ctof(params[4]);
int inType = params[5];
edict_t* pEntitya = INDEXENT2(indexa);
edict_t* pEntityb = INDEXENT2(indexb);
edict_t* pEntityc = INDEXENT2(indexc);
CBaseEntity *pCEntity = NULL;
pCEntity = CBaseEntity::Instance(INDEXENT2(indexa));
pCEntity->TakeDamage(VARS(pEntityb),VARS(pEntityc),fnDamage,inType);
return 1;
}
AMX_NATIVE_INFO engine_Natives[] = { AMX_NATIVE_INFO engine_Natives[] = {
{"halflife_time", halflife_time}, {"halflife_time", halflife_time},
//These are mostly from original VexD //These are mostly from original VexD
// TODO: Backwards compatibility: VelocityByAim->velocity_by_aim
// RadiusDamage->radius_damage
// PointContents->point_contents
{"velocity_by_aim", VelocityByAim}, {"velocity_by_aim", VelocityByAim},
{"radius_damage", RadiusDamage}, {"radius_damage", RadiusDamage},
{"point_contents", PointContents}, {"point_contents", PointContents},
@ -937,7 +912,6 @@ AMX_NATIVE_INFO engine_Natives[] = {
{"trace_line", trace_line}, {"trace_line", trace_line},
{"trace_hull", trace_hull}, {"trace_hull", trace_hull},
{"traceresult", traceresult}, {"traceresult", traceresult},
{"take_damage", take_damage},
{"set_speak", set_speak}, {"set_speak", set_speak},
{"get_speak", get_speak}, {"get_speak", get_speak},

View File

@ -7,11 +7,6 @@
#include <sdk_util.h> #include <sdk_util.h>
#include "CVector.h" #include "CVector.h"
#include "CString.h" #include "CString.h"
#ifndef CBASEPLAYER_H
#define CBASEPLAYER_H
#include <cbase.h>
#include <player.h>
#endif
#include "amxxmodule.h" #include "amxxmodule.h"
#include <usercmd.h> #include <usercmd.h>
#include "messages.h" #include "messages.h"
@ -177,7 +172,22 @@ inline edict_t* INDEXENT2( int iEdictNum )
else else
return (*g_engfuncs.pfnPEntityOfEntIndex)(iEdictNum); return (*g_engfuncs.pfnPEntityOfEntIndex)(iEdictNum);
} }
#define CHECK_ENTITY(x) if (x != 0 && (FNullEnt(INDEXENT2(x)) || x < 0 || x > gpGlobals->maxEntities)) { MF_RaiseAmxError(amx,AMX_ERR_NATIVE); return 0; }
void EngineError(AMX *amx, char *fmt, ...);
int Spawn(edict_t *pEntity);
void ChangeLevel(char* s1, char* s2);
void PlaybackEvent(int flags, const edict_t *pInvoker, unsigned short eventindex, float delay, float *origin, float *angles, float fparam1, float fparam2, int iparam1, int iparam2, int bparam1, int bparam2);
void KeyValue(edict_t *pEntity, KeyValueData *pkvd);
void StartFrame();
void CmdStart(const edict_t *player, const struct usercmd_s *_cmd, unsigned int random_seed);
void ClientKill(edict_t *pEntity);
void PlayerPreThink(edict_t *pEntity);
void PlayerPostThink_Post(edict_t *pEntity);
void pfnTouch(edict_t *pToucher, edict_t *pTouched);
void Think(edict_t *pent);
#define CHECK_ENTITY(x) if (x != 0 && (FNullEnt(INDEXENT2(x)) || x < 0 || x > gpGlobals->maxEntities)) { EngineError(amx, "Invalid entity %d", x); return 0; }
extern bool g_inKeyValue; extern bool g_inKeyValue;
extern KeyValueData *g_pkvd; extern KeyValueData *g_pkvd;
@ -191,3 +201,4 @@ extern CVector<EntClass *> Thinks;
extern CVector<Touch *> Touches; extern CVector<Touch *> Touches;
#endif //_ENGINE_INCLUDE_H #endif //_ENGINE_INCLUDE_H

View File

@ -24,6 +24,7 @@
MinimalRebuild="TRUE" MinimalRebuild="TRUE"
BasicRuntimeChecks="3" BasicRuntimeChecks="3"
RuntimeLibrary="5" RuntimeLibrary="5"
StructMemberAlignment="3"
UsePrecompiledHeader="0" UsePrecompiledHeader="0"
WarningLevel="3" WarningLevel="3"
Detect64BitPortabilityProblems="FALSE" Detect64BitPortabilityProblems="FALSE"
@ -70,6 +71,7 @@
Name="VCCLCompilerTool" Name="VCCLCompilerTool"
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;ENGINE_EXPORTS" PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;ENGINE_EXPORTS"
RuntimeLibrary="4" RuntimeLibrary="4"
StructMemberAlignment="3"
UsePrecompiledHeader="0" UsePrecompiledHeader="0"
WarningLevel="3" WarningLevel="3"
Detect64BitPortabilityProblems="FALSE" Detect64BitPortabilityProblems="FALSE"

View File

@ -27,7 +27,7 @@ static cell AMX_NATIVE_CALL entity_range(AMX *amx, cell *params)
int idxb = params[2]; int idxb = params[2];
if (!is_ent_valid(idxa) || !is_ent_valid(idxb)) { if (!is_ent_valid(idxa) || !is_ent_valid(idxb)) {
MF_RaiseAmxError(amx, AMX_ERR_NATIVE); EngineError(amx, "Invalid Entity");
return 0; return 0;
} }
@ -48,7 +48,7 @@ static cell AMX_NATIVE_CALL call_think(AMX *amx, cell *params)
int iEnt = params[1]; int iEnt = params[1];
if (is_ent_valid(iEnt)) { if (is_ent_valid(iEnt)) {
MF_RaiseAmxError(amx, AMX_ERR_NATIVE); EngineError(amx, "Invalid Entity %d", iEnt);
return 0; return 0;
} }
@ -66,7 +66,7 @@ static cell AMX_NATIVE_CALL fake_touch(AMX *amx, cell *params)
int iPtd = params[2]; int iPtd = params[2];
if (!is_ent_valid(iPtr) || !is_ent_valid(iPtd)) { if (!is_ent_valid(iPtr) || !is_ent_valid(iPtd)) {
MF_RaiseAmxError(amx, AMX_ERR_NATIVE); EngineError(amx, "Invalid Entity");
return 0; return 0;
} }
@ -84,7 +84,7 @@ static cell AMX_NATIVE_CALL force_use(AMX *amx, cell *params)
int iPtd = params[2]; int iPtd = params[2];
if (!is_ent_valid(iPtr) || !is_ent_valid(iPtd)) { if (!is_ent_valid(iPtr) || !is_ent_valid(iPtd)) {
MF_RaiseAmxError(amx, AMX_ERR_NATIVE); EngineError(amx, "Invalid Entity");
return 0; return 0;
} }
@ -140,7 +140,7 @@ static cell AMX_NATIVE_CALL DispatchKeyValue(AMX *amx, cell *params)
cell *cVal = MF_GetAmxAddr(amx, params[1]); cell *cVal = MF_GetAmxAddr(amx, params[1]);
int iValue = *cVal; int iValue = *cVal;
if (!is_ent_valid(iValue)) { if (!is_ent_valid(iValue)) {
MF_RaiseAmxError(amx, AMX_ERR_NATIVE); EngineError(amx, "Invalid Entity %d", iValue);
return 0; return 0;
} }
edict_t *pEntity = INDEXENT2(iValue); edict_t *pEntity = INDEXENT2(iValue);
@ -173,7 +173,7 @@ static cell AMX_NATIVE_CALL get_keyvalue(AMX *amx, cell *params)
{ {
int idx = params[1]; int idx = params[1];
if (!is_ent_valid(idx)) { if (!is_ent_valid(idx)) {
MF_RaiseAmxError(amx, AMX_ERR_NATIVE); EngineError(amx, "Invalid Entity %d", idx);
return 0; return 0;
} }
edict_t *pEntity = INDEXENT2(idx); edict_t *pEntity = INDEXENT2(idx);
@ -203,7 +203,7 @@ static cell AMX_NATIVE_CALL DispatchSpawn(AMX *amx, cell *params)
int iEnt = params[1]; int iEnt = params[1];
if (!is_ent_valid(iEnt)) { if (!is_ent_valid(iEnt)) {
MF_RaiseAmxError(amx, AMX_ERR_NATIVE); EngineError(amx, "Invalid Entity %d", iEnt);
return 0; return 0;
} }
@ -225,7 +225,7 @@ static cell AMX_NATIVE_CALL entity_get_float(AMX *amx, cell *params)
REAL fVal = 0; REAL fVal = 0;
if (!is_ent_valid(iEnt)) { if (!is_ent_valid(iEnt)) {
MF_RaiseAmxError(amx, AMX_ERR_NATIVE); EngineError(amx, "Invalid Entity %d", iEnt);
return 0; return 0;
} }
@ -359,7 +359,7 @@ static cell AMX_NATIVE_CALL entity_set_float(AMX *amx, cell *params)
REAL fVal = amx_ctof(params[3]); REAL fVal = amx_ctof(params[3]);
if (!is_ent_valid(iEnt)) { if (!is_ent_valid(iEnt)) {
MF_RaiseAmxError(amx, AMX_ERR_NATIVE); EngineError(amx, "Invalid Entity %d", iEnt);
return 0; return 0;
} }
@ -493,7 +493,7 @@ static cell AMX_NATIVE_CALL entity_get_int(AMX *amx, cell *params)
int iRetValue = 0; int iRetValue = 0;
if (!is_ent_valid(iEnt)) { if (!is_ent_valid(iEnt)) {
MF_RaiseAmxError(amx, AMX_ERR_NATIVE); EngineError(amx, "Invalid Entity %d", iEnt);
return 0; return 0;
} }
@ -613,7 +613,7 @@ static cell AMX_NATIVE_CALL entity_get_int(AMX *amx, cell *params)
iRetValue = pEnt->v.deadflag; iRetValue = pEnt->v.deadflag;
break; break;
default: default:
MF_RaiseAmxError(amx, AMX_ERR_NATIVE); EngineError(amx, "Invalid property %d", iEnt);
return 0; return 0;
break; break;
} }
@ -628,7 +628,7 @@ static cell AMX_NATIVE_CALL entity_set_int(AMX *amx, cell *params)
int iNewValue = params[3]; int iNewValue = params[3];
if (!is_ent_valid(iEnt)) { if (!is_ent_valid(iEnt)) {
MF_RaiseAmxError(amx, AMX_ERR_NATIVE); EngineError(amx, "Invalid Entity %d", iEnt);
return 0; return 0;
} }
@ -763,7 +763,7 @@ static cell AMX_NATIVE_CALL entity_get_vector(AMX *amx, cell *params)
Vector vRetValue = Vector(0, 0, 0); Vector vRetValue = Vector(0, 0, 0);
if (!is_ent_valid(iEnt)) { if (!is_ent_valid(iEnt)) {
MF_RaiseAmxError(amx, AMX_ERR_NATIVE); EngineError(amx, "Invalid Entity %d", iEnt);
return 0; return 0;
} }
@ -859,7 +859,7 @@ static cell AMX_NATIVE_CALL entity_set_vector(AMX *amx, cell *params)
cell *vAmx = MF_GetAmxAddr(amx, params[3]); cell *vAmx = MF_GetAmxAddr(amx, params[3]);
if (!is_ent_valid(iEnt)) { if (!is_ent_valid(iEnt)) {
MF_RaiseAmxError(amx, AMX_ERR_NATIVE); EngineError(amx, "Invalid Entity %d", iEnt);
return 0; return 0;
} }
@ -956,7 +956,7 @@ static cell AMX_NATIVE_CALL entity_get_string(AMX *amx, cell *params)
const char *szRet = NULL; const char *szRet = NULL;
if (!is_ent_valid(iEnt)) { if (!is_ent_valid(iEnt)) {
MF_RaiseAmxError(amx, AMX_ERR_NATIVE); EngineError(amx, "Invalid Entity %d", iEnt);
return 0; return 0;
} }
@ -1021,7 +1021,7 @@ static cell AMX_NATIVE_CALL entity_set_string(AMX *amx, cell *params)
int iszString = AmxStringToEngine(amx, params[3], iLen); int iszString = AmxStringToEngine(amx, params[3], iLen);
if (!is_ent_valid(iEnt)) { if (!is_ent_valid(iEnt)) {
MF_RaiseAmxError(amx, AMX_ERR_NATIVE); EngineError(amx, "Invalid Entity %d", iEnt);
return 0; return 0;
} }
@ -1083,7 +1083,7 @@ static cell AMX_NATIVE_CALL entity_get_edict(AMX *amx, cell *params)
edict_t *pRet; edict_t *pRet;
if (!is_ent_valid(iEnt)) { if (!is_ent_valid(iEnt)) {
MF_RaiseAmxError(amx, AMX_ERR_NATIVE); EngineError(amx, "Invalid Entity %d", iEnt);
return 0; return 0;
} }
@ -1142,7 +1142,7 @@ static cell AMX_NATIVE_CALL entity_set_edict(AMX *amx, cell *params)
int iSetEnt = params[3]; int iSetEnt = params[3];
if (!is_ent_valid(iEnt) || !is_ent_valid(iSetEnt)) { if (!is_ent_valid(iEnt) || !is_ent_valid(iSetEnt)) {
MF_RaiseAmxError(amx, AMX_ERR_NATIVE); EngineError(amx, "Invalid Entity %d", iEnt);
return 0; return 0;
} }
@ -1199,7 +1199,7 @@ static cell AMX_NATIVE_CALL entity_get_byte(AMX *amx, cell *params)
int iRetValue = 0; int iRetValue = 0;
if (!is_ent_valid(iEnt)) { if (!is_ent_valid(iEnt)) {
MF_RaiseAmxError(amx, AMX_ERR_NATIVE); EngineError(amx, "Invalid Entity %d", iEnt);
return 0; return 0;
} }
@ -1240,7 +1240,7 @@ static cell AMX_NATIVE_CALL entity_set_byte(AMX *amx, cell *params)
int iNewValue = params[3]; int iNewValue = params[3];
if (!is_ent_valid(iEnt)) { if (!is_ent_valid(iEnt)) {
MF_RaiseAmxError(amx, AMX_ERR_NATIVE); EngineError(amx, "Invalid Entity %d", iEnt);
return 0; return 0;
} }
@ -1284,7 +1284,7 @@ static cell AMX_NATIVE_CALL entity_set_origin(AMX *amx, cell *params)
int iEnt = params[1]; int iEnt = params[1];
if (!is_ent_valid(iEnt)) { if (!is_ent_valid(iEnt)) {
MF_RaiseAmxError(amx, AMX_ERR_NATIVE); EngineError(amx, "Invalid Entity %d", iEnt);
return 0; return 0;
} }
@ -1306,7 +1306,7 @@ static cell AMX_NATIVE_CALL entity_set_model(AMX *amx, cell *params)
int iEnt = params[1]; int iEnt = params[1];
if (!is_ent_valid(iEnt)) { if (!is_ent_valid(iEnt)) {
MF_RaiseAmxError(amx, AMX_ERR_NATIVE); EngineError(amx, "Invalid Entity %d", iEnt);
return 0; return 0;
} }
@ -1328,7 +1328,7 @@ static cell AMX_NATIVE_CALL entity_set_size(AMX *amx, cell *params)
int iEnt = params[1]; int iEnt = params[1];
if (!is_ent_valid(iEnt)) { if (!is_ent_valid(iEnt)) {
MF_RaiseAmxError(amx, AMX_ERR_NATIVE); EngineError(amx, "Invalid Entity %d", iEnt);
return 0; return 0;
} }
@ -1351,167 +1351,6 @@ static cell AMX_NATIVE_CALL entity_set_size(AMX *amx, cell *params)
return 1; return 1;
} }
/***********************
Offset control natives
***********************/
static cell AMX_NATIVE_CALL get_offset_short(AMX *amx, cell *params)
{
int idx = params[1];
int off = params[2];
if (!is_ent_valid(idx)) {
MF_RaiseAmxError(amx, AMX_ERR_NATIVE);
return 0;
}
edict_t *pEnt = INDEXENT2(idx);
#ifdef __linux__
off += params[3];
#endif
return *((short *)pEnt->pvPrivateData + off);
}
static cell AMX_NATIVE_CALL set_offset_short(AMX *amx, cell *params)
{
int idx = params[1];
int off = params[2];
if (!is_ent_valid(idx)) {
MF_RaiseAmxError(amx, AMX_ERR_NATIVE);
return 0;
}
edict_t *pEnt = INDEXENT2(idx);
#ifdef __linux__
off += params[3];
#endif
*((short *)pEnt->pvPrivateData + off) = (short)params[3];
return 1;
}
static cell AMX_NATIVE_CALL get_offset_char(AMX *amx, cell *params)
{
int idx = params[1];
int off = params[2];
if (!is_ent_valid(idx)) {
MF_RaiseAmxError(amx, AMX_ERR_NATIVE);
return 0;
}
edict_t *pEnt = INDEXENT2(idx);
#ifdef __linux__
off += params[3];
#endif
char r = *((char *)pEnt->pvPrivateData + off);
return r;
}
static cell AMX_NATIVE_CALL set_offset_char(AMX *amx, cell *params)
{
int idx = params[1];
int off = params[2];
if (!is_ent_valid(idx)) {
MF_RaiseAmxError(amx, AMX_ERR_NATIVE);
return 0;
}
edict_t *pEnt = INDEXENT2(idx);
#ifdef __linux__
off += params[3];
#endif
char data = params[3];
*((char *)pEnt->pvPrivateData + off) = data;
return 1;
}
static cell AMX_NATIVE_CALL get_offset_int(AMX *amx, cell *params)
{
int idx = params[1];
int off = params[2];
if (!is_ent_valid(idx)) {
MF_RaiseAmxError(amx, AMX_ERR_NATIVE);
return 0;
}
edict_t *pEnt = INDEXENT2(idx);
#ifdef __linux__
off += params[3];
#endif
return *((int *)pEnt->pvPrivateData + off);
}
static cell AMX_NATIVE_CALL set_offset_int(AMX *amx, cell *params)
{
int idx = params[1];
int off = params[2];
if (!is_ent_valid(idx)) {
MF_RaiseAmxError(amx, AMX_ERR_NATIVE);
return 0;
}
edict_t *pEnt = INDEXENT2(idx);
#ifdef __linux__
off += params[3];
#endif
*((int *)pEnt->pvPrivateData + off) = params[3];
return 1;
}
static cell AMX_NATIVE_CALL get_offset_float(AMX *amx, cell *params)
{
int idx = params[1];
int off = params[2];
if (!is_ent_valid(idx)) {
MF_RaiseAmxError(amx, AMX_ERR_NATIVE);
return 0;
}
edict_t *pEnt = INDEXENT2(idx);
#ifdef __linux__
off += params[3];
#endif
REAL fRet = (REAL)(*((REAL*)pEnt->pvPrivateData + off));
return amx_ftoc(fRet);
}
static cell AMX_NATIVE_CALL set_offset_float(AMX *amx, cell *params)
{
int idx = params[1];
int off = params[2];
if (!is_ent_valid(idx)) {
MF_RaiseAmxError(amx, AMX_ERR_NATIVE);
return 0;
}
edict_t *pEnt = INDEXENT2(idx);
#ifdef __linux__
off += params[3];
#endif
REAL fVal = amx_ctof(params[3]);
*((float *)pEnt->pvPrivateData + off) = fVal;
return 1;
}
static cell AMX_NATIVE_CALL get_entity_pointer(AMX *amx, cell *params) // get_entity_pointer(index, pointer[], len); = 3 params static cell AMX_NATIVE_CALL get_entity_pointer(AMX *amx, cell *params) // get_entity_pointer(index, pointer[], len); = 3 params
{ {
return 0; return 0;
@ -1526,7 +1365,7 @@ static cell AMX_NATIVE_CALL find_ent_in_sphere(AMX *amx, cell *params)
int idx = params[1]; int idx = params[1];
if (!is_ent_valid(idx)) { if (!is_ent_valid(idx)) {
MF_RaiseAmxError(amx, AMX_ERR_NATIVE); EngineError(amx, "Invalid Entity %d", idx);
return 0; return 0;
} }
@ -1578,7 +1417,7 @@ static cell AMX_NATIVE_CALL find_sphere_class(AMX *amx, cell *params) // find_sp
vec3_t vecOrigin; vec3_t vecOrigin;
if (params[1] > 0) { if (params[1] > 0) {
if (!is_ent_valid(params[1])) { if (!is_ent_valid(params[1])) {
MF_RaiseAmxError(amx, AMX_ERR_NATIVE); EngineError(amx, "Invalid Entity %d", params[1]);
return 0; return 0;
} }
@ -1689,7 +1528,7 @@ static cell AMX_NATIVE_CALL find_ent_by_owner(AMX *amx, cell *params) // native
int oEnt = params[3]; int oEnt = params[3];
// Check index to start searching at, 0 must be possible. // Check index to start searching at, 0 must be possible.
if (!is_ent_valid(iEnt) || !is_ent_valid(oEnt)) { if (!is_ent_valid(iEnt) || !is_ent_valid(oEnt)) {
MF_RaiseAmxError(amx, AMX_ERR_NATIVE); EngineError(amx, "Invalid Entity");
return 0; return 0;
} }
@ -1727,7 +1566,7 @@ static cell AMX_NATIVE_CALL get_grenade_id(AMX *amx, cell *params) /* 4 param *
char* szModel; char* szModel;
if (!is_ent_valid(index)) { if (!is_ent_valid(index)) {
MF_RaiseAmxError(amx, AMX_ERR_NATIVE); EngineError(amx, "Invalid Entity %d", index);
return 0; return 0;
} }
@ -1780,16 +1619,6 @@ AMX_NATIVE_INFO ent_Natives[] = {
{"fake_touch", fake_touch}, {"fake_touch", fake_touch},
{"force_use", force_use}, {"force_use", force_use},
{"get_offset_short", get_offset_short},
{"set_offset_short", set_offset_short},
{"get_offset_char", get_offset_char},
{"set_offset_char", set_offset_char},
{"get_offset", get_offset_int},
{"set_offset", set_offset_int},
{"get_offset_int", get_offset_int},
{"set_offset_int", set_offset_int},
{"get_offset_float", get_offset_float},
{"set_offset_float", set_offset_float},
{"get_entity_pointer", get_entity_pointer}, {"get_entity_pointer", get_entity_pointer},
{"find_ent_in_sphere", find_ent_in_sphere}, {"find_ent_in_sphere", find_ent_in_sphere},
@ -1806,3 +1635,4 @@ AMX_NATIVE_INFO ent_Natives[] = {
{NULL, NULL}, {NULL, NULL},
/////////////////// ///////////////////
}; };

View File

@ -37,7 +37,7 @@ int fstrcmp(const char *s1, const char *s2)
} }
int Spawn(edict_t *pEntity) { int Spawn(edict_t *pEntity) {
if (SpawnForward) { if (SpawnForward != -1) {
int retVal = 0; int retVal = 0;
int id = ENTINDEX(pEntity); int id = ENTINDEX(pEntity);
retVal = MF_ExecuteForward(SpawnForward, id); retVal = MF_ExecuteForward(SpawnForward, id);
@ -49,7 +49,7 @@ int Spawn(edict_t *pEntity) {
void ChangeLevel(char* s1, char* s2) void ChangeLevel(char* s1, char* s2)
{ {
if (ChangelevelForward) { if (ChangelevelForward != -1) {
int retVal = 0; int retVal = 0;
char *map = s1; char *map = s1;
retVal = MF_ExecuteForward(ChangelevelForward, map); retVal = MF_ExecuteForward(ChangelevelForward, map);
@ -61,7 +61,7 @@ void ChangeLevel(char* s1, char* s2)
void PlaybackEvent(int flags, const edict_t *pInvoker, unsigned short eventindex, float delay, float *origin, float *angles, float fparam1, float fparam2, int iparam1, int iparam2, int bparam1, int bparam2) void PlaybackEvent(int flags, const edict_t *pInvoker, unsigned short eventindex, float delay, float *origin, float *angles, float fparam1, float fparam2, int iparam1, int iparam2, int bparam1, int bparam2)
{ {
if (PlaybackForward) { if (PlaybackForward != -1) {
edict_t *e = (edict_t *)pInvoker; edict_t *e = (edict_t *)pInvoker;
int retVal = 0; int retVal = 0;
static cell cOrigin[3]; static cell cOrigin[3];
@ -90,16 +90,14 @@ void KeyValue(edict_t *pEntity, KeyValueData *pkvd)
g_inKeyValue=true; g_inKeyValue=true;
g_pkvd=pkvd; g_pkvd=pkvd;
int index = ENTINDEX(pEntity); int index = ENTINDEX(pEntity);
if (DispatchKeyForward) { if (DispatchKeyForward != -1) {
retVal = MF_ExecuteForward(DispatchKeyForward, index); retVal = MF_ExecuteForward(DispatchKeyForward, index);
g_inKeyValue=false; g_inKeyValue=false;
if (retVal > 0) if (retVal)
RETURN_META(MRES_SUPERCEDE); RETURN_META(MRES_SUPERCEDE);
else
RETURN_META(MRES_HANDLED);
} }
g_inKeyValue=false; g_inKeyValue=false;
RETURN_META(MRES_HANDLED); RETURN_META(MRES_IGNORED);
} }
void StartFrame() void StartFrame()
@ -111,9 +109,9 @@ void StartFrame()
} }
} }
if (StartFrameForward) if (StartFrameForward != -1)
MF_ExecuteForward(StartFrameForward); MF_ExecuteForward(StartFrameForward);
else if (VexdServerForward) else if (VexdServerForward != -1)
MF_ExecuteForward(VexdServerForward); MF_ExecuteForward(VexdServerForward);
RETURN_META(MRES_IGNORED); RETURN_META(MRES_IGNORED);
@ -125,20 +123,25 @@ void CmdStart(const edict_t *player, const struct usercmd_s *_cmd, unsigned int
int retVal = 0; int retVal = 0;
edict_t *pEntity = (edict_t *)player; edict_t *pEntity = (edict_t *)player;
struct usercmd_s *g_cmd = (struct usercmd_s *)_cmd; struct usercmd_s *g_cmd = (struct usercmd_s *)_cmd;
META_RES res = MRES_IGNORED;
int origImpulse = g_cmd->impulse; // incase a plugin alters it
for (i=0; i<Impulses.size(); i++) for (i=0; i<Impulses.size(); i++)
{ {
if (Impulses[i]->Check == g_cmd->impulse) if (Impulses[i]->Check == g_cmd->impulse)
{ {
retVal = MF_ExecuteForward(Impulses[i]->Forward, ENTINDEX(pEntity)); retVal = MF_ExecuteForward(Impulses[i]->Forward, ENTINDEX(pEntity));
if (retVal) if (retVal & 2 /*PLUGIN_HANDLED_MAIN*/)
{
g_cmd->impulse=0;
RETURN_META(MRES_SUPERCEDE); RETURN_META(MRES_SUPERCEDE);
else }
RETURN_META(MRES_IGNORED); else if (retVal)
res = MRES_SUPERCEDE;
} }
} }
if (CmdStartForward) { if (CmdStartForward != -1) {
incmd = true; incmd = true;
retVal = MF_ExecuteForward(CmdStartForward, ENTINDEX(pEntity), g_cmd->impulse); retVal = MF_ExecuteForward(CmdStartForward, ENTINDEX(pEntity), origImpulse);
incmd = false; incmd = false;
if (retVal) { if (retVal) {
g_cmd->impulse = 0; g_cmd->impulse = 0;
@ -146,14 +149,14 @@ void CmdStart(const edict_t *player, const struct usercmd_s *_cmd, unsigned int
} }
} }
RETURN_META(MRES_IGNORED); RETURN_META(res);
} }
void ClientKill(edict_t *pEntity) void ClientKill(edict_t *pEntity)
{ {
int retVal = 0; int retVal = 0;
if (ClientKillForward) { if (ClientKillForward != -1) {
retVal = MF_ExecuteForward(ClientKillForward, ENTINDEX(pEntity)); retVal = MF_ExecuteForward(ClientKillForward, ENTINDEX(pEntity));
if (retVal) if (retVal)
RETURN_META(MRES_SUPERCEDE); RETURN_META(MRES_SUPERCEDE);
@ -167,6 +170,7 @@ void PlayerPreThink(edict_t *pEntity)
MF_ExecuteForward(PlayerPreThinkForward, ENTINDEX(pEntity)); MF_ExecuteForward(PlayerPreThinkForward, ENTINDEX(pEntity));
RETURN_META(MRES_IGNORED); RETURN_META(MRES_IGNORED);
} }
void PlayerPostThink_Post(edict_t *pEntity) void PlayerPostThink_Post(edict_t *pEntity)
{ {
if(plinfo[ENTINDEX(pEntity)].pViewEnt) { if(plinfo[ENTINDEX(pEntity)].pViewEnt) {
@ -206,7 +210,7 @@ void PlayerPostThink_Post(edict_t *pEntity)
} }
} }
if (PlayerPostThinkForward) if (PlayerPostThinkForward != -1)
{ {
if (MF_ExecuteForward(PlayerPostThinkForward, ENTINDEX(pEntity))) if (MF_ExecuteForward(PlayerPostThinkForward, ENTINDEX(pEntity)))
RETURN_META(MRES_SUPERCEDE); RETURN_META(MRES_SUPERCEDE);
@ -221,6 +225,7 @@ void pfnTouch(edict_t *pToucher, edict_t *pTouched)
int retVal = 0; int retVal = 0;
const char *ptrClass = STRING(pToucher->v.classname); const char *ptrClass = STRING(pToucher->v.classname);
const char *ptdClass = STRING(pTouched->v.classname); const char *ptdClass = STRING(pTouched->v.classname);
META_RES res=MRES_IGNORED;
for (i=0; i<Touches.size(); i++) for (i=0; i<Touches.size(); i++)
{ {
if (Touches[i]->Toucher == 0) if (Touches[i]->Toucher == 0)
@ -228,61 +233,68 @@ void pfnTouch(edict_t *pToucher, edict_t *pTouched)
if (Touches[i]->Touched == 0) if (Touches[i]->Touched == 0)
{ {
retVal = MF_ExecuteForward(Touches[i]->Forward, ENTINDEX(pToucher), ENTINDEX(pTouched)); retVal = MF_ExecuteForward(Touches[i]->Forward, ENTINDEX(pToucher), ENTINDEX(pTouched));
if (retVal) if (retVal & 2/*PLUGIN_HANDLED_MAIN*/)
RETURN_META(MRES_SUPERCEDE); RETURN_META(MRES_SUPERCEDE);
else else if (retVal)
RETURN_META(MRES_IGNORED); res=MRES_SUPERCEDE;
} else if (fstrcmp(Touches[i]->Touched, ptdClass)) { } else if (fstrcmp(Touches[i]->Touched, ptdClass)) {
retVal = MF_ExecuteForward(Touches[i]->Forward, ENTINDEX(pToucher), ENTINDEX(pTouched)); retVal = MF_ExecuteForward(Touches[i]->Forward, ENTINDEX(pToucher), ENTINDEX(pTouched));
if (retVal) if (retVal & 2/*PLUGIN_HANDLED_MAIN*/)
RETURN_META(MRES_SUPERCEDE); RETURN_META(MRES_SUPERCEDE);
else else if (retVal)
RETURN_META(MRES_IGNORED); res=MRES_SUPERCEDE;
} }
} else if (fstrcmp(Touches[i]->Toucher, ptrClass)) { } else if (fstrcmp(Touches[i]->Toucher, ptrClass)) {
if (Touches[i]->Touched == 0) if (Touches[i]->Touched == 0)
{ {
retVal = MF_ExecuteForward(Touches[i]->Forward, ENTINDEX(pToucher), ENTINDEX(pTouched)); retVal = MF_ExecuteForward(Touches[i]->Forward, ENTINDEX(pToucher), ENTINDEX(pTouched));
if (retVal) if (retVal & 2/*PLUGIN_HANDLED_MAIN*/)
RETURN_META(MRES_SUPERCEDE); RETURN_META(MRES_SUPERCEDE);
else else if (retVal)
RETURN_META(MRES_IGNORED); res=MRES_SUPERCEDE;
} else if (fstrcmp(Touches[i]->Touched, ptdClass)) { } else if (fstrcmp(Touches[i]->Touched, ptdClass)) {
retVal = MF_ExecuteForward(Touches[i]->Forward, ENTINDEX(pToucher), ENTINDEX(pTouched)); retVal = MF_ExecuteForward(Touches[i]->Forward, ENTINDEX(pToucher), ENTINDEX(pTouched));
if (retVal) if (retVal & 2/*PLUGIN_HANDLED_MAIN*/)
RETURN_META(MRES_SUPERCEDE); RETURN_META(MRES_SUPERCEDE);
else else if (retVal)
RETURN_META(MRES_IGNORED); res=MRES_SUPERCEDE;
} }
} }
} }
/* Execute pfnTouch forwards */ /* Execute pfnTouch forwards */
if (pfnTouchForward) { if (pfnTouchForward != -1) {
retVal = MF_ExecuteForward(pfnTouchForward, ENTINDEX(pToucher), ENTINDEX(pTouched)); retVal = MF_ExecuteForward(pfnTouchForward, ENTINDEX(pToucher), ENTINDEX(pTouched));
if (retVal) if (retVal)
RETURN_META(MRES_SUPERCEDE); RETURN_META(MRES_SUPERCEDE);
} else if (VexdTouchForward) { } else if (VexdTouchForward != -1) {
retVal = MF_ExecuteForward(VexdTouchForward, ENTINDEX(pToucher), ENTINDEX(pTouched)); retVal = MF_ExecuteForward(VexdTouchForward, ENTINDEX(pToucher), ENTINDEX(pTouched));
if (retVal) if (retVal)
RETURN_META(MRES_SUPERCEDE); RETURN_META(MRES_SUPERCEDE);
} }
RETURN_META(MRES_IGNORED); RETURN_META(res);
} }
void Think(edict_t *pent) void Think(edict_t *pent)
{ {
unsigned int i = 0; unsigned int i = 0;
const char *cls = STRING(pent->v.classname); const char *cls = STRING(pent->v.classname);
META_RES res=MRES_IGNORED;
int retVal=0;
for (i=0; i<Thinks.size(); i++) for (i=0; i<Thinks.size(); i++)
{ {
if (fstrcmp(cls, Thinks[i]->Class)) if (fstrcmp(cls, Thinks[i]->Class))
{ {
MF_ExecuteForward(Thinks[i]->Forward, ENTINDEX(pent)); retVal=MF_ExecuteForward(Thinks[i]->Forward, ENTINDEX(pent));
RETURN_META(MRES_IGNORED); if (retVal & 2/*PLUGIN_HANDLED_MAIN*/)
RETURN_META(MRES_SUPERCEDE);
else if (retVal)
res=MRES_SUPERCEDE;
} }
} }
MF_ExecuteForward(pfnThinkForward, ENTINDEX(pent)); retVal=MF_ExecuteForward(pfnThinkForward, ENTINDEX(pent));
if (retVal)
res=MRES_SUPERCEDE;
RETURN_META(MRES_IGNORED); RETURN_META(res);
} }

View File

@ -1,7 +1,8 @@
#include "engine.h" #include "engine.h"
CVector<argMsg*> Msg; CVector<argMsg*> Msg;
int msgHooks[256] = {0}; CVector<int> msgHooks[256];
//int msgHooks[256] = {0};
int msgBlocks[256] = {0}; int msgBlocks[256] = {0};
int msgDest; int msgDest;
int msgType; int msgType;
@ -94,7 +95,7 @@ void MessageBegin(int msg_dest, int msg_type, const float *pOrigin, edict_t *ed)
if (msgBlocks[msg_type]) { if (msgBlocks[msg_type]) {
inblock = true; inblock = true;
RETURN_META(MRES_SUPERCEDE); RETURN_META(MRES_SUPERCEDE);
} else if (msgHooks[msg_type]) { } else if (msgHooks[msg_type].size()) {
inhook = true; inhook = true;
msgCount = 0; msgCount = 0;
msgDest = msg_dest; msgDest = msg_dest;
@ -269,7 +270,7 @@ void WriteEntity(int iValue)
void MessageEnd(void) void MessageEnd(void)
{ {
int mres = 0; int mres = 0, mresB = 0;
unsigned int i = 0; unsigned int i = 0;
if (inblock) { if (inblock) {
inblock = false; inblock = false;
@ -277,7 +278,12 @@ void MessageEnd(void)
msgBlocks[msgType] = BLOCK_NOT; msgBlocks[msgType] = BLOCK_NOT;
RETURN_META(MRES_SUPERCEDE); RETURN_META(MRES_SUPERCEDE);
} else if (inhook) { } else if (inhook) {
mres = MF_ExecuteForward(msgHooks[msgType], msgType, msgDest, ENTINDEX(msgpEntity)); for (i=0; i<msgHooks[msgType].size(); i++)
{
mresB = MF_ExecuteForward(msgHooks[msgType].at(i), msgType, msgDest, ENTINDEX(msgpEntity));
if (mresB > mres)
mres = mresB;
}
inhook = false; inhook = false;
if (mres & 1) if (mres & 1)
{ {
@ -302,9 +308,13 @@ static cell AMX_NATIVE_CALL register_message(AMX *amx, cell *params)
int len; int len;
if (params[1]>0 && params[1] < 256) { if (params[1]>0 && params[1] < 256) {
int id = MF_RegisterSPForwardByName(amx, MF_GetAmxString(amx, params[2], 0, &len), FP_CELL, FP_CELL, FP_CELL, FP_CELL, FP_DONE); int id = MF_RegisterSPForwardByName(amx, MF_GetAmxString(amx, params[2], 0, &len), FP_CELL, FP_CELL, FP_CELL, FP_CELL, FP_DONE);
// MF_Log("Registering message %d with result %d", params[1], id); if (id != -1)
msgHooks[params[1]] = id; {
msgHooks[params[1]].push_back(id);
return id; return id;
} else {
return -1;
}
} }
return 0; return 0;
@ -377,7 +387,8 @@ static cell AMX_NATIVE_CALL set_msg_arg_int(AMX *amx, cell *params)
return 0; return 0;
} }
Msg[argn]->iData = params[2]; Msg[argn]->type = params[2];
Msg[argn]->iData = params[3];
return 1; return 1;
} }

View File

@ -42,7 +42,7 @@ public:
extern AMX_NATIVE_INFO msg_Natives[]; extern AMX_NATIVE_INFO msg_Natives[];
extern CVector<argMsg*> Msg; extern CVector<argMsg*> Msg;
extern int msgHooks[256]; extern CVector<int> msgHooks[256];
extern int msgBlocks[256]; extern int msgBlocks[256];
#endif //_MSGS_INCLUDE_H #endif //_MSGS_INCLUDE_H

View File

@ -54,12 +54,12 @@
// (wd) are Will Day's notes // (wd) are Will Day's notes
// - GetEntityAPI2 functions // - GetEntityAPI2 functions
// #define FN_GameDLLInit GameDLLInit /* pfnGameInit() */ // #define FN_GameDLLInit GameDLLInit /* pfnGameInit() */
#define FN_DispatchSpawn Spawn /* pfnSpawn() */ //#define FN_DispatchSpawn Spawn /* pfnSpawn() */
#define FN_DispatchThink Think /* pfnThink() */ //#define FN_DispatchThink Think /* pfnThink() */
// #define FN_DispatchUse Use /* pfnUse() */ // #define FN_DispatchUse Use /* pfnUse() */
#define FN_DispatchTouch pfnTouch /* pfnTouch() */ //#define FN_DispatchTouch pfnTouch /* pfnTouch() */
// #define FN_DispatchBlocked DispatchBlocked /* pfnBlocked() */ // #define FN_DispatchBlocked DispatchBlocked /* pfnBlocked() */
#define FN_DispatchKeyValue KeyValue /* pfnKeyValue() */ //#define FN_DispatchKeyValue KeyValue /* pfnKeyValue() */
// #define FN_DispatchSave DispatchSave /* pfnSave() */ // #define FN_DispatchSave DispatchSave /* pfnSave() */
// #define FN_DispatchRestore DispatchRestore /* pfnRestore() */ // #define FN_DispatchRestore DispatchRestore /* pfnRestore() */
// #define FN_DispatchObjectCollsionBox DispatchObjectCollsionBox /* pfnSetAbsBox() */ // #define FN_DispatchObjectCollsionBox DispatchObjectCollsionBox /* pfnSetAbsBox() */
@ -70,15 +70,15 @@
// #define FN_ResetGlobalState ResetGlobalState /* pfnResetGlobalState() */ // #define FN_ResetGlobalState ResetGlobalState /* pfnResetGlobalState() */
#define FN_ClientConnect ClientConnect /* pfnClientConnect() (wd) Client has connected */ #define FN_ClientConnect ClientConnect /* pfnClientConnect() (wd) Client has connected */
#define FN_ClientDisconnect ClientDisconnect /* pfnClientDisconnect() (wd) Player has left the game */ #define FN_ClientDisconnect ClientDisconnect /* pfnClientDisconnect() (wd) Player has left the game */
#define FN_ClientKill ClientKill /* pfnClientKill() (wd) Player has typed "kill" */ //#define FN_ClientKill ClientKill /* pfnClientKill() (wd) Player has typed "kill" */
// #define FN_ClientPutInServer ClientPutInServer /* pfnClientPutInServer() (wd) Client is entering the game */ // #define FN_ClientPutInServer ClientPutInServer /* pfnClientPutInServer() (wd) Client is entering the game */
// #define FN_ClientCommand ClientCommand /* pfnClientCommand() (wd) Player has sent a command (typed or from a bind) */ // #define FN_ClientCommand ClientCommand /* pfnClientCommand() (wd) Player has sent a command (typed or from a bind) */
// #define FN_ClientUserInfoChanged ClientUserInfoChanged /* pfnClientUserInfoChanged() (wd) Client has updated their setinfo structure */ // #define FN_ClientUserInfoChanged ClientUserInfoChanged /* pfnClientUserInfoChanged() (wd) Client has updated their setinfo structure */
#define FN_ServerActivate ServerActivate /* pfnServerActivate() (wd) Server is starting a new map */ #define FN_ServerActivate ServerActivate /* pfnServerActivate() (wd) Server is starting a new map */
#define FN_ServerDeactivate ServerDeactivate /* pfnServerDeactivate() (wd) Server is leaving the map (shutdown or changelevel); SDK2 */ #define FN_ServerDeactivate ServerDeactivate /* pfnServerDeactivate() (wd) Server is leaving the map (shutdown or changelevel); SDK2 */
#define FN_PlayerPreThink PlayerPreThink /* pfnPlayerPreThink() */ //#define FN_PlayerPreThink PlayerPreThink /* pfnPlayerPreThink() */
// #define FN_PlayerPostThink PlayerPostThink /* pfnPlayerPostThink() */ // #define FN_PlayerPostThink PlayerPostThink /* pfnPlayerPostThink() */
#define FN_StartFrame StartFrame /* pfnStartFrame() */ //#define FN_StartFrame StartFrame /* pfnStartFrame() */
// #define FN_ParmsNewLevel ParmsNewLevel /* pfnParmsNewLevel() */ // #define FN_ParmsNewLevel ParmsNewLevel /* pfnParmsNewLevel() */
// #define FN_ParmsChangeLevel ParmsChangeLevel /* pfnParmsChangeLevel() */ // #define FN_ParmsChangeLevel ParmsChangeLevel /* pfnParmsChangeLevel() */
// #define FN_GetGameDescription GetGameDescription /* pfnGetGameDescription() Returns string describing current .dll. E.g. "TeamFotrress 2" "Half-Life" */ // #define FN_GetGameDescription GetGameDescription /* pfnGetGameDescription() Returns string describing current .dll. E.g. "TeamFotrress 2" "Half-Life" */
@ -96,7 +96,7 @@
// #define FN_CreateBaseline CreateBaseline /* pfnCreateBaseline() Tweak entity baseline for network encoding allows setup of player baselines too.; (wd) SDK2 */ // #define FN_CreateBaseline CreateBaseline /* pfnCreateBaseline() Tweak entity baseline for network encoding allows setup of player baselines too.; (wd) SDK2 */
// #define FN_RegisterEncoders RegisterEncoders /* pfnRegisterEncoders() Callbacks for network encoding; (wd) SDK2 */ // #define FN_RegisterEncoders RegisterEncoders /* pfnRegisterEncoders() Callbacks for network encoding; (wd) SDK2 */
// #define FN_GetWeaponData GetWeaponData /* pfnGetWeaponData() (wd) SDK2 */ // #define FN_GetWeaponData GetWeaponData /* pfnGetWeaponData() (wd) SDK2 */
#define FN_CmdStart CmdStart /* pfnCmdStart() (wd) SDK2 */ //#define FN_CmdStart CmdStart /* pfnCmdStart() (wd) SDK2 */
// #define FN_CmdEnd CmdEnd /* pfnCmdEnd() (wd) SDK2 */ // #define FN_CmdEnd CmdEnd /* pfnCmdEnd() (wd) SDK2 */
// #define FN_ConnectionlessPacket ConnectionlessPacket /* pfnConnectionlessPacket() (wd) SDK2 */ // #define FN_ConnectionlessPacket ConnectionlessPacket /* pfnConnectionlessPacket() (wd) SDK2 */
// #define FN_GetHullBounds GetHullBounds /* pfnGetHullBounds() (wd) SDK2 */ // #define FN_GetHullBounds GetHullBounds /* pfnGetHullBounds() (wd) SDK2 */
@ -129,7 +129,7 @@
// #define FN_ServerActivate_Post ServerActivate_Post // #define FN_ServerActivate_Post ServerActivate_Post
// #define FN_ServerDeactivate_Post ServerDeactivate_Post // #define FN_ServerDeactivate_Post ServerDeactivate_Post
// #define FN_PlayerPreThink_Post PlayerPreThink_Post // #define FN_PlayerPreThink_Post PlayerPreThink_Post
#define FN_PlayerPostThink_Post PlayerPostThink_Post //#define FN_PlayerPostThink_Post PlayerPostThink_Post
// #define FN_StartFrame_Post StartFrame_Post // #define FN_StartFrame_Post StartFrame_Post
// #define FN_ParmsNewLevel_Post ParmsNewLevel_Post // #define FN_ParmsNewLevel_Post ParmsNewLevel_Post
// #define FN_ParmsChangeLevel_Post ParmsChangeLevel_Post // #define FN_ParmsChangeLevel_Post ParmsChangeLevel_Post
@ -280,7 +280,7 @@
// #define FN_SetPhysicsKeyValue SetPhysicsKeyValue // #define FN_SetPhysicsKeyValue SetPhysicsKeyValue
// #define FN_GetPhysicsInfoString GetPhysicsInfoString // #define FN_GetPhysicsInfoString GetPhysicsInfoString
// #define FN_PrecacheEvent PrecacheEvent // #define FN_PrecacheEvent PrecacheEvent
#define FN_PlaybackEvent PlaybackEvent //#define FN_PlaybackEvent PlaybackEvent
// #define FN_SetFatPVS SetFatPVS // #define FN_SetFatPVS SetFatPVS
// #define FN_SetFatPAS SetFatPAS // #define FN_SetFatPAS SetFatPAS
// #define FN_CheckVisibility CheckVisibility // #define FN_CheckVisibility CheckVisibility

View File

@ -15,6 +15,7 @@
$PROJECT = "fakemeta_amxx"; $PROJECT = "fakemeta_amxx";
$sdk = "../../hlsdk/SourceCode"; $sdk = "../../hlsdk/SourceCode";
$mm = "../../metamod/metamod"; $mm = "../../metamod/metamod";
$gccf = "gcc";
@CPP_SOURCE_FILES = ("dllfunc.cpp", "fakemeta_amxx.cpp", "forward.cpp", "pdata.cpp", "pev.cpp", "engfunc.cpp", "sdk/amxxmodule.cpp"); @CPP_SOURCE_FILES = ("dllfunc.cpp", "fakemeta_amxx.cpp", "forward.cpp", "pdata.cpp", "pev.cpp", "engfunc.cpp", "sdk/amxxmodule.cpp");
@ -45,7 +46,7 @@ while ($cmd = shift)
} }
} }
$gcc = `gcc --version`; $gcc = `$gccf --version`;
if ($gcc =~ /2\.9/) if ($gcc =~ /2\.9/)
{ {
$OPT{"opt"} .= " -malign-loops=2 -malign-jumps=2 -malign-functions=2"; $OPT{"opt"} .= " -malign-loops=2 -malign-jumps=2 -malign-functions=2";
@ -139,11 +140,11 @@ for ($i=0; $i<=$#CPP_SOURCE_FILES; $i++)
$ofile = $file; $ofile = $file;
$ofile =~ s/\.cpp/\.o/; $ofile =~ s/\.cpp/\.o/;
$ofile = "$outdir/$ofile"; $ofile = "$outdir/$ofile";
$gcc = "gcc $cflags -Dstrcmpi=strcasecmp -fPIC $inc -c $file -o $ofile"; $gcc = "$gccf $cflags -Dstrcmpi=strcasecmp -fPIC $inc -c $file -o $ofile";
if (-e $ofile) if (-e $ofile)
{ {
$file_time = (stat($file))[9]; $file_time = (stat($file))[9];
$ofile_time = (stat($file))[9]; $ofile_time = (stat($ofile))[9];
if ($file_time > $ofile_time) if ($file_time > $ofile_time)
{ {
print "$gcc\n"; print "$gcc\n";
@ -165,7 +166,7 @@ for ($i=0; $i<=$#CPP_SOURCE_FILES; $i++)
if (-e $ofile) if (-e $ofile)
{ {
$file_time = (stat($file))[9]; $file_time = (stat($file))[9];
$ofile_time = (stat($file))[9]; $ofile_time = (stat($ofile))[9];
if ($file_time > $ofile_time) if ($file_time > $ofile_time)
{ {
print "$gcc\n"; print "$gcc\n";
@ -177,6 +178,6 @@ for ($i=0; $i<=$#CPP_SOURCE_FILES; $i++)
} }
} }
$gcc = "gcc $cflags -shared -ldl -lm @LINK -o $outdir/$bin"; $gcc = "$gccf $cflags -shared -ldl -lm @LINK -o $outdir/$bin";
print "$gcc\n"; print "$gcc\n";
`$gcc`; `$gcc`;

View File

@ -240,11 +240,22 @@ enum {
AMX_ERR_DOMAIN, /* domain error, expression result does not fit in range */ AMX_ERR_DOMAIN, /* domain error, expression result does not fit in range */
}; };
#if !defined AMX_NO_ALIGN
#if defined __linux__
#pragma pack() /* reset default packing */
#else
#pragma pack(pop) /* reset previous packing */
#endif
#endif
// ***** declare functions ***** // ***** declare functions *****
#ifdef USE_METAMOD #ifdef USE_METAMOD
void UTIL_LogPrintf( char *fmt, ... ); void UTIL_LogPrintf( char *fmt, ... );
void UTIL_HudMessage(CBaseEntity *pEntity, const hudtextparms_t &textparms, const char *pMessage);
short FixedSigned16( float value, float scale );
unsigned short FixedUnsigned16( float value, float scale );
#ifdef FN_META_QUERY #ifdef FN_META_QUERY
void FN_META_QUERY(void); void FN_META_QUERY(void);
@ -1944,6 +1955,7 @@ typedef int (*PFN_AMX_EXEC) (AMX* /*amx*/, cell* /*return val*/, int /*in
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*/, char* /*func name*/, int* /*index*/);
typedef int (*PFN_AMX_FINDNATIVE) (AMX* /*amx*/, char* /*func name*/, int* /*index*/);
typedef int (*PFN_LOAD_AMXSCRIPT) (AMX* /*amx*/, void** /*code*/, const char* /*path*/, char[64] /*error info*/); typedef int (*PFN_LOAD_AMXSCRIPT) (AMX* /*amx*/, void** /*code*/, const char* /*path*/, char[64] /*error info*/);
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*/);
@ -1951,6 +1963,7 @@ typedef REAL (*PFN_CELL_TO_REAL) (cell /*x*/);
typedef int (*PFN_REGISTER_SPFORWARD) (AMX * /*amx*/, int /*func*/, ... /*params*/); typedef int (*PFN_REGISTER_SPFORWARD) (AMX * /*amx*/, int /*func*/, ... /*params*/);
typedef int (*PFN_REGISTER_SPFORWARD_BYNAME) (AMX * /*amx*/, const char * /*funcName*/, ... /*params*/); typedef int (*PFN_REGISTER_SPFORWARD_BYNAME) (AMX * /*amx*/, const char * /*funcName*/, ... /*params*/);
typedef void (*PFN_UNREGISTER_SPFORWARD) (int /*id*/); typedef void (*PFN_UNREGISTER_SPFORWARD) (int /*id*/);
typedef void (*PFN_MERGEDEFINITION_FILE) (const char * /*filename*/);
extern PFN_ADD_NATIVES g_fn_AddNatives; extern PFN_ADD_NATIVES g_fn_AddNatives;
extern PFN_BUILD_PATHNAME g_fn_BuildPathname; extern PFN_BUILD_PATHNAME g_fn_BuildPathname;
@ -2002,6 +2015,8 @@ extern PFN_CELL_TO_REAL g_fn_CellToReal;
extern PFN_REGISTER_SPFORWARD g_fn_RegisterSPForward; extern PFN_REGISTER_SPFORWARD g_fn_RegisterSPForward;
extern PFN_REGISTER_SPFORWARD_BYNAME g_fn_RegisterSPForwardByName; extern PFN_REGISTER_SPFORWARD_BYNAME g_fn_RegisterSPForwardByName;
extern PFN_UNREGISTER_SPFORWARD g_fn_UnregisterSPForward; extern PFN_UNREGISTER_SPFORWARD g_fn_UnregisterSPForward;
extern PFN_MERGEDEFINITION_FILE g_fn_MergeDefinition_File;
extern PFN_AMX_FINDNATIVE g_fn_AmxFindNative;
#ifdef MAY_NEVER_BE_DEFINED #ifdef MAY_NEVER_BE_DEFINED
// Function prototypes for intellisense and similar systems // Function prototypes for intellisense and similar systems
@ -2095,8 +2110,10 @@ void MF_Log(const char *fmt, ...);
#define MF_AmxExecv g_fn_AmxExecv #define MF_AmxExecv g_fn_AmxExecv
#define MF_AmxFindPublic g_fn_AmxFindPublic #define MF_AmxFindPublic g_fn_AmxFindPublic
#define MF_AmxAllot g_fn_AmxAllot #define MF_AmxAllot g_fn_AmxAllot
#define MF_AmxFindNative g_fn_AmxFindNative
#define MF_LoadAmxScript g_fn_LoadAmxScript #define MF_LoadAmxScript g_fn_LoadAmxScript
#define MF_UnloadAmxScript g_fn_UnloadAmxScript #define MF_UnloadAmxScript g_fn_UnloadAmxScript
#define MF_MergeDefinitionFile g_fn_MergeDefinition_File
#define amx_ctof g_fn_CellToReal #define amx_ctof g_fn_CellToReal
#define amx_ftoc g_fn_RealToCell #define amx_ftoc g_fn_RealToCell
#define MF_RegisterSPForwardByName g_fn_RegisterSPForwardByName #define MF_RegisterSPForwardByName g_fn_RegisterSPForwardByName
@ -2146,4 +2163,5 @@ void Mem_Deallocator(const char *sourceFile, const unsigned int sourceLine, cons
#define realloc(ptr,sz) Mem_Reallocator(__FILE__,__LINE__,__FUNCTION__,m_alloc_realloc,sz,ptr) #define realloc(ptr,sz) Mem_Reallocator(__FILE__,__LINE__,__FUNCTION__,m_alloc_realloc,sz,ptr)
#define free(ptr) Mem_Deallocator(__FILE__,__LINE__,__FUNCTION__,m_alloc_free,ptr) #define free(ptr) Mem_Deallocator(__FILE__,__LINE__,__FUNCTION__,m_alloc_free,ptr)
#endif // #ifndef __AMXXMODULE_H__ #endif // #ifndef __AMXXMODULE_H__

View File

@ -15,6 +15,7 @@
$PROJECT = "fun_amxx"; $PROJECT = "fun_amxx";
$sdk = "../hlsdk/SourceCode"; $sdk = "../hlsdk/SourceCode";
$mm = "../metamod/metamod"; $mm = "../metamod/metamod";
$gccf = "gcc";
@CPP_SOURCE_FILES = ("fun.cpp", "amxxmodule.cpp"); @CPP_SOURCE_FILES = ("fun.cpp", "amxxmodule.cpp");
@ -45,7 +46,7 @@ while ($cmd = shift)
} }
} }
$gcc = `gcc --version`; $gcc = `$gccf --version`;
if ($gcc =~ /2\.9/) if ($gcc =~ /2\.9/)
{ {
$OPT{"opt"} .= " -malign-loops=2 -malign-jumps=2 -malign-functions=2"; $OPT{"opt"} .= " -malign-loops=2 -malign-jumps=2 -malign-functions=2";
@ -134,11 +135,11 @@ for ($i=0; $i<=$#CPP_SOURCE_FILES; $i++)
$ofile = $file; $ofile = $file;
$ofile =~ s/\.cpp/\.o/; $ofile =~ s/\.cpp/\.o/;
$ofile = "$outdir/$ofile"; $ofile = "$outdir/$ofile";
$gcc = "gcc $cflags -Dstrcmpi=strcasecmp -fPIC $inc -c $file -o $ofile"; $gcc = "$gccf $cflags -Dstrcmpi=strcasecmp -fPIC $inc -c $file -o $ofile";
if (-e $ofile) if (-e $ofile)
{ {
$file_time = (stat($file))[9]; $file_time = (stat($file))[9];
$ofile_time = (stat($file))[9]; $ofile_time = (stat($ofile))[9];
if ($file_time > $ofile_time) if ($file_time > $ofile_time)
{ {
print "$gcc\n"; print "$gcc\n";
@ -160,7 +161,7 @@ for ($i=0; $i<=$#CPP_SOURCE_FILES; $i++)
if (-e $ofile) if (-e $ofile)
{ {
$file_time = (stat($file))[9]; $file_time = (stat($file))[9];
$ofile_time = (stat($file))[9]; $ofile_time = (stat($ofile))[9];
if ($file_time > $ofile_time) if ($file_time > $ofile_time)
{ {
print "$gcc\n"; print "$gcc\n";
@ -172,6 +173,6 @@ for ($i=0; $i<=$#CPP_SOURCE_FILES; $i++)
} }
} }
$gcc = "gcc $cflags -shared -ldl -lm @LINK -o $outdir/$bin"; $gcc = "$gccf $cflags -shared -ldl -lm @LINK -o $outdir/$bin";
print "$gcc\n"; print "$gcc\n";
`$gcc`; `$gcc`;

View File

@ -2477,6 +2477,8 @@ PFN_CELL_TO_REAL g_fn_CellToReal;
PFN_REGISTER_SPFORWARD g_fn_RegisterSPForward; PFN_REGISTER_SPFORWARD g_fn_RegisterSPForward;
PFN_REGISTER_SPFORWARD_BYNAME g_fn_RegisterSPForwardByName; PFN_REGISTER_SPFORWARD_BYNAME g_fn_RegisterSPForwardByName;
PFN_UNREGISTER_SPFORWARD g_fn_UnregisterSPForward; PFN_UNREGISTER_SPFORWARD g_fn_UnregisterSPForward;
PFN_MERGEDEFINITION_FILE g_fn_MergeDefinition_File;
PFN_AMX_FINDNATIVE g_fn_AmxFindNative;
// *** Exports *** // *** Exports ***
C_DLLEXPORT int AMXX_Query(int *interfaceVersion, amxx_module_info_s *moduleInfo) C_DLLEXPORT int AMXX_Query(int *interfaceVersion, amxx_module_info_s *moduleInfo)
@ -2520,6 +2522,7 @@ C_DLLEXPORT int AMXX_Attach(PFN_REQ_FNPTR reqFnptrFunc)
REQFUNC("PrintSrvConsole", g_fn_PrintSrvConsole, PFN_PRINT_SRVCONSOLE); REQFUNC("PrintSrvConsole", g_fn_PrintSrvConsole, PFN_PRINT_SRVCONSOLE);
REQFUNC("GetModname", g_fn_GetModname, PFN_GET_MODNAME); REQFUNC("GetModname", g_fn_GetModname, PFN_GET_MODNAME);
REQFUNC("Log", g_fn_Log, PFN_LOG); REQFUNC("Log", g_fn_Log, PFN_LOG);
REQFUNC("MergeDefinitionFile", g_fn_MergeDefinition_File, PFN_MERGEDEFINITION_FILE);
// Amx scripts // Amx scripts
REQFUNC("GetAmxScript", g_fn_GetAmxScript, PFN_GET_AMXSCRIPT); REQFUNC("GetAmxScript", g_fn_GetAmxScript, PFN_GET_AMXSCRIPT);
@ -2540,6 +2543,7 @@ C_DLLEXPORT int AMXX_Attach(PFN_REQ_FNPTR reqFnptrFunc)
REQFUNC("amx_Execv", g_fn_AmxExecv, PFN_AMX_EXECV); REQFUNC("amx_Execv", g_fn_AmxExecv, PFN_AMX_EXECV);
REQFUNC("amx_FindPublic", g_fn_AmxFindPublic, PFN_AMX_FINDPUBLIC); REQFUNC("amx_FindPublic", g_fn_AmxFindPublic, PFN_AMX_FINDPUBLIC);
REQFUNC("amx_Allot", g_fn_AmxAllot, PFN_AMX_ALLOT); REQFUNC("amx_Allot", g_fn_AmxAllot, PFN_AMX_ALLOT);
REQFUNC("amx_FindNative", g_fn_AmxFindNative, PFN_AMX_FINDNATIVE);
// Natives / Forwards // Natives / Forwards
REQFUNC("AddNatives", g_fn_AddNatives, PFN_ADD_NATIVES); REQFUNC("AddNatives", g_fn_AddNatives, PFN_ADD_NATIVES);

View File

@ -240,6 +240,14 @@ enum {
AMX_ERR_DOMAIN, /* domain error, expression result does not fit in range */ AMX_ERR_DOMAIN, /* domain error, expression result does not fit in range */
}; };
#if !defined AMX_NO_ALIGN
#if defined __linux__
#pragma pack() /* reset default packing */
#else
#pragma pack(pop) /* reset previous packing */
#endif
#endif
// ***** declare functions ***** // ***** declare functions *****
@ -257,9 +265,9 @@ void FN_META_QUERY(void);
void FN_META_ATTACH(void); void FN_META_ATTACH(void);
#endif // FN_META_ATTACH #endif // FN_META_ATTACH
#ifdef FN_META_DETTACH #ifdef FN_META_DETACH
void FN_META_DETTACH(void); void FN_META_DETACH(void);
#endif // FN_META_DETTACH #endif // FN_META_DETACH
@ -1869,9 +1877,9 @@ void FN_AMXX_QUERY(void);
void FN_AMXX_ATTACH(void); void FN_AMXX_ATTACH(void);
#endif // FN_AMXX_ATTACH #endif // FN_AMXX_ATTACH
#ifdef FN_AMXX_DETTACH #ifdef FN_AMXX_DETACH
void FN_AMXX_DETTACH(void); void FN_AMXX_DETACH(void);
#endif // FN_AMXX_DETTACH #endif // FN_AMXX_DETACH
#ifdef FN_AMXX_PLUGINSLOADED #ifdef FN_AMXX_PLUGINSLOADED
void FN_AMXX_PLUGINSLOADED(void); void FN_AMXX_PLUGINSLOADED(void);
@ -1947,6 +1955,7 @@ typedef int (*PFN_AMX_EXEC) (AMX* /*amx*/, cell* /*return val*/, int /*in
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*/, char* /*func name*/, int* /*index*/);
typedef int (*PFN_AMX_FINDNATIVE) (AMX* /*amx*/, char* /*func name*/, int* /*index*/);
typedef int (*PFN_LOAD_AMXSCRIPT) (AMX* /*amx*/, void** /*code*/, const char* /*path*/, char[64] /*error info*/); typedef int (*PFN_LOAD_AMXSCRIPT) (AMX* /*amx*/, void** /*code*/, const char* /*path*/, char[64] /*error info*/);
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*/);
@ -1954,6 +1963,7 @@ typedef REAL (*PFN_CELL_TO_REAL) (cell /*x*/);
typedef int (*PFN_REGISTER_SPFORWARD) (AMX * /*amx*/, int /*func*/, ... /*params*/); typedef int (*PFN_REGISTER_SPFORWARD) (AMX * /*amx*/, int /*func*/, ... /*params*/);
typedef int (*PFN_REGISTER_SPFORWARD_BYNAME) (AMX * /*amx*/, const char * /*funcName*/, ... /*params*/); typedef int (*PFN_REGISTER_SPFORWARD_BYNAME) (AMX * /*amx*/, const char * /*funcName*/, ... /*params*/);
typedef void (*PFN_UNREGISTER_SPFORWARD) (int /*id*/); typedef void (*PFN_UNREGISTER_SPFORWARD) (int /*id*/);
typedef void (*PFN_MERGEDEFINITION_FILE) (const char * /*filename*/);
extern PFN_ADD_NATIVES g_fn_AddNatives; extern PFN_ADD_NATIVES g_fn_AddNatives;
extern PFN_BUILD_PATHNAME g_fn_BuildPathname; extern PFN_BUILD_PATHNAME g_fn_BuildPathname;
@ -2005,6 +2015,8 @@ extern PFN_CELL_TO_REAL g_fn_CellToReal;
extern PFN_REGISTER_SPFORWARD g_fn_RegisterSPForward; extern PFN_REGISTER_SPFORWARD g_fn_RegisterSPForward;
extern PFN_REGISTER_SPFORWARD_BYNAME g_fn_RegisterSPForwardByName; extern PFN_REGISTER_SPFORWARD_BYNAME g_fn_RegisterSPForwardByName;
extern PFN_UNREGISTER_SPFORWARD g_fn_UnregisterSPForward; extern PFN_UNREGISTER_SPFORWARD g_fn_UnregisterSPForward;
extern PFN_MERGEDEFINITION_FILE g_fn_MergeDefinition_File;
extern PFN_AMX_FINDNATIVE g_fn_AmxFindNative;
#ifdef MAY_NEVER_BE_DEFINED #ifdef MAY_NEVER_BE_DEFINED
// Function prototypes for intellisense and similar systems // Function prototypes for intellisense and similar systems
@ -2098,8 +2110,10 @@ void MF_Log(const char *fmt, ...);
#define MF_AmxExecv g_fn_AmxExecv #define MF_AmxExecv g_fn_AmxExecv
#define MF_AmxFindPublic g_fn_AmxFindPublic #define MF_AmxFindPublic g_fn_AmxFindPublic
#define MF_AmxAllot g_fn_AmxAllot #define MF_AmxAllot g_fn_AmxAllot
#define MF_AmxFindNative g_fn_AmxFindNative
#define MF_LoadAmxScript g_fn_LoadAmxScript #define MF_LoadAmxScript g_fn_LoadAmxScript
#define MF_UnloadAmxScript g_fn_UnloadAmxScript #define MF_UnloadAmxScript g_fn_UnloadAmxScript
#define MF_MergeDefinitionFile g_fn_MergeDefinition_File
#define amx_ctof g_fn_CellToReal #define amx_ctof g_fn_CellToReal
#define amx_ftoc g_fn_RealToCell #define amx_ftoc g_fn_RealToCell
#define MF_RegisterSPForwardByName g_fn_RegisterSPForwardByName #define MF_RegisterSPForwardByName g_fn_RegisterSPForwardByName
@ -2149,4 +2163,5 @@ void Mem_Deallocator(const char *sourceFile, const unsigned int sourceLine, cons
#define realloc(ptr,sz) Mem_Reallocator(__FILE__,__LINE__,__FUNCTION__,m_alloc_realloc,sz,ptr) #define realloc(ptr,sz) Mem_Reallocator(__FILE__,__LINE__,__FUNCTION__,m_alloc_realloc,sz,ptr)
#define free(ptr) Mem_Deallocator(__FILE__,__LINE__,__FUNCTION__,m_alloc_free,ptr) #define free(ptr) Mem_Deallocator(__FILE__,__LINE__,__FUNCTION__,m_alloc_free,ptr)
#endif // #ifndef __AMXXMODULE_H__ #endif // #ifndef __AMXXMODULE_H__

View File

@ -70,9 +70,22 @@
// ######## Utils: // ######## Utils:
void FUNUTIL_ResetPlayer(int index) void FUNUTIL_ResetPlayer(int index)
{ {
// Reset hitzones g_zones_toHit[index] = (1<<HITGROUP_GENERIC) |
memset(g_bodyhits[index], 0xFF, sizeof(char)*33); (1<<HITGROUP_HEAD) |
(1<<HITGROUP_CHEST) |
(1<<HITGROUP_STOMACH) |
(1<<HITGROUP_LEFTARM) |
(1<<HITGROUP_RIGHTARM)|
(1<<HITGROUP_LEFTLEG) |
(1<<HITGROUP_RIGHTLEG);
g_zones_getHit[index] = (1<<HITGROUP_GENERIC) |
(1<<HITGROUP_HEAD) |
(1<<HITGROUP_CHEST) |
(1<<HITGROUP_STOMACH) |
(1<<HITGROUP_LEFTARM) |
(1<<HITGROUP_RIGHTARM)|
(1<<HITGROUP_LEFTLEG) |
(1<<HITGROUP_RIGHTLEG);
// Reset silent slippers // Reset silent slippers
g_silent[index] = false; g_silent[index] = false;
} }
@ -525,27 +538,6 @@ static cell AMX_NATIVE_CALL get_user_gravity(AMX *amx, cell *params) // Float:ge
return amx_ftoc(pPlayer->v.gravity); return amx_ftoc(pPlayer->v.gravity);
} }
/*static cell AMX_NATIVE_CALL set_hitzones(AMX *amx, cell *params) // set_hitzones(body = 255) = 1 argument
{
// Sets "hitable" zones.
// params[1] = body hitzones
//native set_user_hitzones(index=0,target=0,body=255);
//set_user_hitzones(id, 0, 0) // Makes ID not able to shoot EVERYONE - id can shoot on 0 (all) at 0
//set_user_hitzones(0, id, 0) // Makes EVERYONE not able to shoot ID - 0 (all) can shoot id at 0
g_body = params[1];
return 1;
}*/
/*static cell AMX_NATIVE_CALL get_hitzones(AMX *amx, cell *params) // get_hitzones() = 0 arguments
{
// Gets hitzones.
return g_body;
}*/
/*
static cell AMX_NATIVE_CALL set_user_hitzones(AMX *amx, cell *params) // set_user_hitzones(index = 0, target = 0, body = 255); = 3 arguments static cell AMX_NATIVE_CALL set_user_hitzones(AMX *amx, cell *params) // set_user_hitzones(index = 0, target = 0, body = 255); = 3 arguments
{ {
// Sets user hitzones. // Sets user hitzones.
@ -589,77 +581,7 @@ static cell AMX_NATIVE_CALL set_user_hitzones(AMX *amx, cell *params) // set_use
return 1; return 1;
} }
*/
static cell AMX_NATIVE_CALL set_user_hitzones(AMX *amx, cell *params) // set_user_hitzones(index = 0, target = 0, body = 255); = 3 arguments
{
int index = params[1];
if (index < 0 || index > gpGlobals->maxClients){
MF_RaiseAmxError(amx,AMX_ERR_NATIVE);
return 0;
}
int target = params[2];
if (target < 0 || target > gpGlobals->maxClients){
MF_RaiseAmxError(amx,AMX_ERR_NATIVE);
return 0;
}
int bodyhits = params[3];
if (index) {
//player_t* pPlayer = GET_PLAYER_POINTER_I(index);
if (true) { // pPlayer->ingame (we have no in-game check yet)
//pPlayer->CountCheat(FUN_HITZONE);
if (target) {
g_bodyhits[index][target] = bodyhits; // pPlayer->bodyhits[target] = bodyhits;
}
else {
for(int i = 1; i <= gpGlobals->maxClients; ++i)
g_bodyhits[index][i] = bodyhits; // pPlayer->bodyhits[i] = bodyhits;
}
return 1;
}
return 0;
}
else {
//player_t* pPlayer;
for(int i = 1; i <= gpGlobals->maxClients; ++i){
//pPlayer = GET_PLAYER_POINTER_I(i);
//pPlayer->CountCheat(FUN_HITZONE);
if (target) {
//pPlayer->bodyhits[target] = bodyhits;
g_bodyhits[index][target] = bodyhits;
}
else {
for(int i = 1; i <= gpGlobals->maxClients; ++i)
g_bodyhits[index][i] = bodyhits; // pPlayer->bodyhits[i] = bodyhits;
}
}
}
return 1;
}
static cell AMX_NATIVE_CALL get_user_hitzones(AMX *amx, cell *params) // get_user_hitzones(index, target); = 2 arguments
{
int index = params[1];
if (index < 1 || index > gpGlobals->maxClients) {
MF_RaiseAmxError(amx, AMX_ERR_NATIVE);
return 0;
}
int target = params[2];
if (target < 1 || target > gpGlobals->maxClients) {
MF_RaiseAmxError(amx, AMX_ERR_NATIVE);
return 0;
}
//return GET_PLAYER_POINTER_I(index)->bodyhits[target];
return g_bodyhits[index][target];
}
/*
static cell AMX_NATIVE_CALL get_user_hitzones(AMX *amx, cell *params) // get_user_hitzones(index, target); = 2 arguments static cell AMX_NATIVE_CALL get_user_hitzones(AMX *amx, cell *params) // get_user_hitzones(index, target); = 2 arguments
{ {
// Gets user hitzones. // Gets user hitzones.
@ -692,7 +614,6 @@ static cell AMX_NATIVE_CALL get_user_hitzones(AMX *amx, cell *params) // get_use
} }
} }
} }
*/
static cell AMX_NATIVE_CALL set_user_noclip(AMX *amx, cell *params) // set_user_noclip(index, noclip = 0); = 2 arguments static cell AMX_NATIVE_CALL set_user_noclip(AMX *amx, cell *params) // set_user_noclip(index, noclip = 0); = 2 arguments
{ {
@ -871,7 +792,7 @@ void PlayerPreThink(edict_t *pEntity)
RETURN_META(MRES_IGNORED); RETURN_META(MRES_IGNORED);
} }
int FN_ClientConnect(edict_t *pPlayer, const char *pszName, const char *pszAddress, char szRejectReason[128]) int ClientConnect(edict_t *pPlayer, const char *pszName, const char *pszAddress, char szRejectReason[128])
{ {
// Reset stuff: // Reset stuff:
FUNUTIL_ResetPlayer(ENTINDEX(pPlayer)); FUNUTIL_ResetPlayer(ENTINDEX(pPlayer));
@ -879,29 +800,30 @@ int FN_ClientConnect(edict_t *pPlayer, const char *pszName, const char *pszAddre
RETURN_META_VALUE(MRES_IGNORED, 0); RETURN_META_VALUE(MRES_IGNORED, 0);
} }
void FN_TraceLine(const float *v1, const float *v2, int fNoMonsters, edict_t *e, TraceResult *ptr) { void TraceLine(const float *v1, const float *v2, int fNoMonsters, edict_t *pentToSkip, TraceResult *ptr) {
TRACE_LINE(v1, v2, fNoMonsters, e, ptr); TRACE_LINE(v1, v2, fNoMonsters, pentToSkip, ptr); // pentToSkip gotta be the one that is shooting, so filter it
if (ptr->pHit&&(ptr->pHit->v.flags& (FL_CLIENT | FL_FAKECLIENT) )&&e&&(e->v.flags & (FL_CLIENT | FL_FAKECLIENT) )) { int hitIndex = ENTINDEX(ptr->pHit);
//player_t* pPlayer = GET_PLAYER_POINTER(e); if (hitIndex >= 1 && hitIndex <= gpGlobals->maxClients) {
if ( !(
if ( !(g_bodyhits[ENTINDEX(e)][ENTINDEX(ptr->pHit)]&(1<<ptr->iHitgroup)) ) // if ( !(pPlayer->bodyhits[ENTINDEX(ptr->pHit)]&(1<<ptr->iHitgroup)) ) g_zones_getHit[hitIndex] & (1 << ptr->iHitgroup) // can ptr->pHit get hit in ptr->iHitgroup at all?
ptr->flFraction = 1.0; && g_zones_toHit[hitIndex] & (1 << ptr->iHitgroup) ) // can pentToSkip hit other people in that hit zone?
) {
ptr->flFraction = 1.0; // set to not hit anything (1.0 = shot doesn't hit anything)
}
} }
RETURN_META(MRES_SUPERCEDE); RETURN_META(MRES_SUPERCEDE);
} }
void FN_AMXX_ATTACH() void OnAmxxAttach()
{ {
MF_AddNatives(fun_Exports); MF_AddNatives(fun_Exports);
// Reset stuff - hopefully this should // Reset stuff - hopefully this should
for (int i = 1; i <= 32; i++) { for (int i = 1; i <= 32; i++) {
// Reset all hitzones // Reset all hitzones
memset(g_bodyhits[i], 0xFF, sizeof(char)*33); FUNUTIL_ResetPlayer(i);
// Reset all silent slippers
g_silent[i] = false;
} }
} }

View File

@ -51,9 +51,9 @@
// Fun-specific defines above // Fun-specific defines above
// The stuff below might end up in a class soon // The stuff below might end up in a class soon
//int g_zones_toHit[33]; // where can people hit other people? int g_zones_toHit[33]; // where can people hit other people?
//int g_zones_getHit[33]; // where can people get hit by other people? int g_zones_getHit[33]; // where can people get hit by other people?
char g_bodyhits[33][33]; //char g_bodyhits[33][33];
bool g_silent[33]; // used for set_user_footsteps() bool g_silent[33]; // used for set_user_footsteps()
//int g_ResetHUD; //int g_ResetHUD;
bool g_ResetHUDbool; bool g_ResetHUDbool;

View File

@ -16,6 +16,8 @@ $PROJECT = "geoip_amxx";
$sdk = "../../hlsdk/SourceCode"; $sdk = "../../hlsdk/SourceCode";
$mm = "../../metamod/metamod"; $mm = "../../metamod/metamod";
$geoip = "geolib/libGeoIP"; $geoip = "geolib/libGeoIP";
$gccf = "gcc";
$ccf = "cc";
@CPP_SOURCE_FILES = ("geoip_amxx.cpp", "amxxmodule.cpp"); @CPP_SOURCE_FILES = ("geoip_amxx.cpp", "amxxmodule.cpp");
@ -46,7 +48,7 @@ while ($cmd = shift)
} }
} }
$gcc = `gcc --version`; $gcc = `$gccf --version`;
if ($gcc =~ /2\.9/) if ($gcc =~ /2\.9/)
{ {
$OPT{"opt"} .= " -malign-loops=2 -malign-jumps=2 -malign-functions=2"; $OPT{"opt"} .= " -malign-loops=2 -malign-jumps=2 -malign-functions=2";
@ -135,11 +137,11 @@ for ($i=0; $i<=$#CPP_SOURCE_FILES; $i++)
$ofile = $file; $ofile = $file;
$ofile =~ s/\.cpp/\.o/; $ofile =~ s/\.cpp/\.o/;
$ofile = "$outdir/$ofile"; $ofile = "$outdir/$ofile";
$gcc = "gcc $cflags -Dstrcmpi=strcasecmp -fPIC $inc -c $file -o $ofile"; $gcc = "$gccf $cflags -Dstrcmpi=strcasecmp -fPIC $inc -c $file -o $ofile";
if (-e $ofile) if (-e $ofile)
{ {
$file_time = (stat($file))[9]; $file_time = (stat($file))[9];
$ofile_time = (stat($file))[9]; $ofile_time = (stat($ofile))[9];
if ($file_time > $ofile_time) if ($file_time > $ofile_time)
{ {
print "$gcc\n"; print "$gcc\n";
@ -157,11 +159,11 @@ for ($i=0; $i<=$#CPP_SOURCE_FILES; $i++)
$ofile = $file; $ofile = $file;
$ofile =~ s/\.c/\.o/; $ofile =~ s/\.c/\.o/;
$ofile = "$outdir/$ofile"; $ofile = "$outdir/$ofile";
$gcc = "cc $cflags -Dstrcmpi=strcasecmp -fPIC $inc -c $file -o $ofile"; $gcc = "$ccf $cflags -Dstrcmpi=strcasecmp -fPIC $inc -c $file -o $ofile";
if (-e $ofile) if (-e $ofile)
{ {
$file_time = (stat($file))[9]; $file_time = (stat($file))[9];
$ofile_time = (stat($file))[9]; $ofile_time = (stat($ofile))[9];
if ($file_time > $ofile_time) if ($file_time > $ofile_time)
{ {
print "$gcc\n"; print "$gcc\n";
@ -173,6 +175,6 @@ for ($i=0; $i<=$#CPP_SOURCE_FILES; $i++)
} }
} }
$gcc = "gcc $cflags -shared -ldl -lm @LINK -o $outdir/$bin"; $gcc = "$gccf $cflags -shared -ldl -lm @LINK -o $outdir/$bin";
print "$gcc\n"; print "$gcc\n";
`$gcc`; `$gcc`;

View File

@ -2477,6 +2477,8 @@ PFN_CELL_TO_REAL g_fn_CellToReal;
PFN_REGISTER_SPFORWARD g_fn_RegisterSPForward; PFN_REGISTER_SPFORWARD g_fn_RegisterSPForward;
PFN_REGISTER_SPFORWARD_BYNAME g_fn_RegisterSPForwardByName; PFN_REGISTER_SPFORWARD_BYNAME g_fn_RegisterSPForwardByName;
PFN_UNREGISTER_SPFORWARD g_fn_UnregisterSPForward; PFN_UNREGISTER_SPFORWARD g_fn_UnregisterSPForward;
PFN_MERGEDEFINITION_FILE g_fn_MergeDefinition_File;
PFN_AMX_FINDNATIVE g_fn_AmxFindNative;
// *** Exports *** // *** Exports ***
C_DLLEXPORT int AMXX_Query(int *interfaceVersion, amxx_module_info_s *moduleInfo) C_DLLEXPORT int AMXX_Query(int *interfaceVersion, amxx_module_info_s *moduleInfo)
@ -2520,6 +2522,7 @@ C_DLLEXPORT int AMXX_Attach(PFN_REQ_FNPTR reqFnptrFunc)
REQFUNC("PrintSrvConsole", g_fn_PrintSrvConsole, PFN_PRINT_SRVCONSOLE); REQFUNC("PrintSrvConsole", g_fn_PrintSrvConsole, PFN_PRINT_SRVCONSOLE);
REQFUNC("GetModname", g_fn_GetModname, PFN_GET_MODNAME); REQFUNC("GetModname", g_fn_GetModname, PFN_GET_MODNAME);
REQFUNC("Log", g_fn_Log, PFN_LOG); REQFUNC("Log", g_fn_Log, PFN_LOG);
REQFUNC("MergeDefinitionFile", g_fn_MergeDefinition_File, PFN_MERGEDEFINITION_FILE);
// Amx scripts // Amx scripts
REQFUNC("GetAmxScript", g_fn_GetAmxScript, PFN_GET_AMXSCRIPT); REQFUNC("GetAmxScript", g_fn_GetAmxScript, PFN_GET_AMXSCRIPT);
@ -2540,6 +2543,7 @@ C_DLLEXPORT int AMXX_Attach(PFN_REQ_FNPTR reqFnptrFunc)
REQFUNC("amx_Execv", g_fn_AmxExecv, PFN_AMX_EXECV); REQFUNC("amx_Execv", g_fn_AmxExecv, PFN_AMX_EXECV);
REQFUNC("amx_FindPublic", g_fn_AmxFindPublic, PFN_AMX_FINDPUBLIC); REQFUNC("amx_FindPublic", g_fn_AmxFindPublic, PFN_AMX_FINDPUBLIC);
REQFUNC("amx_Allot", g_fn_AmxAllot, PFN_AMX_ALLOT); REQFUNC("amx_Allot", g_fn_AmxAllot, PFN_AMX_ALLOT);
REQFUNC("amx_FindNative", g_fn_AmxFindNative, PFN_AMX_FINDNATIVE);
// Natives / Forwards // Natives / Forwards
REQFUNC("AddNatives", g_fn_AddNatives, PFN_ADD_NATIVES); REQFUNC("AddNatives", g_fn_AddNatives, PFN_ADD_NATIVES);

View File

@ -240,6 +240,14 @@ enum {
AMX_ERR_DOMAIN, /* domain error, expression result does not fit in range */ AMX_ERR_DOMAIN, /* domain error, expression result does not fit in range */
}; };
#if !defined AMX_NO_ALIGN
#if defined __linux__
#pragma pack() /* reset default packing */
#else
#pragma pack(pop) /* reset previous packing */
#endif
#endif
// ***** declare functions ***** // ***** declare functions *****
@ -257,9 +265,9 @@ void FN_META_QUERY(void);
void FN_META_ATTACH(void); void FN_META_ATTACH(void);
#endif // FN_META_ATTACH #endif // FN_META_ATTACH
#ifdef FN_META_DETTACH #ifdef FN_META_DETACH
void FN_META_DETTACH(void); void FN_META_DETACH(void);
#endif // FN_META_DETTACH #endif // FN_META_DETACH
@ -1869,9 +1877,9 @@ void FN_AMXX_QUERY(void);
void FN_AMXX_ATTACH(void); void FN_AMXX_ATTACH(void);
#endif // FN_AMXX_ATTACH #endif // FN_AMXX_ATTACH
#ifdef FN_AMXX_DETTACH #ifdef FN_AMXX_DETACH
void FN_AMXX_DETTACH(void); void FN_AMXX_DETACH(void);
#endif // FN_AMXX_DETTACH #endif // FN_AMXX_DETACH
#ifdef FN_AMXX_PLUGINSLOADED #ifdef FN_AMXX_PLUGINSLOADED
void FN_AMXX_PLUGINSLOADED(void); void FN_AMXX_PLUGINSLOADED(void);
@ -1947,6 +1955,7 @@ typedef int (*PFN_AMX_EXEC) (AMX* /*amx*/, cell* /*return val*/, int /*in
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*/, char* /*func name*/, int* /*index*/);
typedef int (*PFN_AMX_FINDNATIVE) (AMX* /*amx*/, char* /*func name*/, int* /*index*/);
typedef int (*PFN_LOAD_AMXSCRIPT) (AMX* /*amx*/, void** /*code*/, const char* /*path*/, char[64] /*error info*/); typedef int (*PFN_LOAD_AMXSCRIPT) (AMX* /*amx*/, void** /*code*/, const char* /*path*/, char[64] /*error info*/);
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*/);
@ -1954,6 +1963,7 @@ typedef REAL (*PFN_CELL_TO_REAL) (cell /*x*/);
typedef int (*PFN_REGISTER_SPFORWARD) (AMX * /*amx*/, int /*func*/, ... /*params*/); typedef int (*PFN_REGISTER_SPFORWARD) (AMX * /*amx*/, int /*func*/, ... /*params*/);
typedef int (*PFN_REGISTER_SPFORWARD_BYNAME) (AMX * /*amx*/, const char * /*funcName*/, ... /*params*/); typedef int (*PFN_REGISTER_SPFORWARD_BYNAME) (AMX * /*amx*/, const char * /*funcName*/, ... /*params*/);
typedef void (*PFN_UNREGISTER_SPFORWARD) (int /*id*/); typedef void (*PFN_UNREGISTER_SPFORWARD) (int /*id*/);
typedef void (*PFN_MERGEDEFINITION_FILE) (const char * /*filename*/);
extern PFN_ADD_NATIVES g_fn_AddNatives; extern PFN_ADD_NATIVES g_fn_AddNatives;
extern PFN_BUILD_PATHNAME g_fn_BuildPathname; extern PFN_BUILD_PATHNAME g_fn_BuildPathname;
@ -2005,6 +2015,8 @@ extern PFN_CELL_TO_REAL g_fn_CellToReal;
extern PFN_REGISTER_SPFORWARD g_fn_RegisterSPForward; extern PFN_REGISTER_SPFORWARD g_fn_RegisterSPForward;
extern PFN_REGISTER_SPFORWARD_BYNAME g_fn_RegisterSPForwardByName; extern PFN_REGISTER_SPFORWARD_BYNAME g_fn_RegisterSPForwardByName;
extern PFN_UNREGISTER_SPFORWARD g_fn_UnregisterSPForward; extern PFN_UNREGISTER_SPFORWARD g_fn_UnregisterSPForward;
extern PFN_MERGEDEFINITION_FILE g_fn_MergeDefinition_File;
extern PFN_AMX_FINDNATIVE g_fn_AmxFindNative;
#ifdef MAY_NEVER_BE_DEFINED #ifdef MAY_NEVER_BE_DEFINED
// Function prototypes for intellisense and similar systems // Function prototypes for intellisense and similar systems
@ -2098,8 +2110,10 @@ void MF_Log(const char *fmt, ...);
#define MF_AmxExecv g_fn_AmxExecv #define MF_AmxExecv g_fn_AmxExecv
#define MF_AmxFindPublic g_fn_AmxFindPublic #define MF_AmxFindPublic g_fn_AmxFindPublic
#define MF_AmxAllot g_fn_AmxAllot #define MF_AmxAllot g_fn_AmxAllot
#define MF_AmxFindNative g_fn_AmxFindNative
#define MF_LoadAmxScript g_fn_LoadAmxScript #define MF_LoadAmxScript g_fn_LoadAmxScript
#define MF_UnloadAmxScript g_fn_UnloadAmxScript #define MF_UnloadAmxScript g_fn_UnloadAmxScript
#define MF_MergeDefinitionFile g_fn_MergeDefinition_File
#define amx_ctof g_fn_CellToReal #define amx_ctof g_fn_CellToReal
#define amx_ftoc g_fn_RealToCell #define amx_ftoc g_fn_RealToCell
#define MF_RegisterSPForwardByName g_fn_RegisterSPForwardByName #define MF_RegisterSPForwardByName g_fn_RegisterSPForwardByName
@ -2149,4 +2163,5 @@ void Mem_Deallocator(const char *sourceFile, const unsigned int sourceLine, cons
#define realloc(ptr,sz) Mem_Reallocator(__FILE__,__LINE__,__FUNCTION__,m_alloc_realloc,sz,ptr) #define realloc(ptr,sz) Mem_Reallocator(__FILE__,__LINE__,__FUNCTION__,m_alloc_realloc,sz,ptr)
#define free(ptr) Mem_Deallocator(__FILE__,__LINE__,__FUNCTION__,m_alloc_free,ptr) #define free(ptr) Mem_Deallocator(__FILE__,__LINE__,__FUNCTION__,m_alloc_free,ptr)
#endif // #ifndef __AMXXMODULE_H__ #endif // #ifndef __AMXXMODULE_H__

View File

@ -2477,6 +2477,8 @@ PFN_CELL_TO_REAL g_fn_CellToReal;
PFN_REGISTER_SPFORWARD g_fn_RegisterSPForward; PFN_REGISTER_SPFORWARD g_fn_RegisterSPForward;
PFN_REGISTER_SPFORWARD_BYNAME g_fn_RegisterSPForwardByName; PFN_REGISTER_SPFORWARD_BYNAME g_fn_RegisterSPForwardByName;
PFN_UNREGISTER_SPFORWARD g_fn_UnregisterSPForward; PFN_UNREGISTER_SPFORWARD g_fn_UnregisterSPForward;
PFN_MERGEDEFINITION_FILE g_fn_MergeDefinition_File;
PFN_AMX_FINDNATIVE g_fn_AmxFindNative;
// *** Exports *** // *** Exports ***
C_DLLEXPORT int AMXX_Query(int *interfaceVersion, amxx_module_info_s *moduleInfo) C_DLLEXPORT int AMXX_Query(int *interfaceVersion, amxx_module_info_s *moduleInfo)
@ -2520,6 +2522,7 @@ C_DLLEXPORT int AMXX_Attach(PFN_REQ_FNPTR reqFnptrFunc)
REQFUNC("PrintSrvConsole", g_fn_PrintSrvConsole, PFN_PRINT_SRVCONSOLE); REQFUNC("PrintSrvConsole", g_fn_PrintSrvConsole, PFN_PRINT_SRVCONSOLE);
REQFUNC("GetModname", g_fn_GetModname, PFN_GET_MODNAME); REQFUNC("GetModname", g_fn_GetModname, PFN_GET_MODNAME);
REQFUNC("Log", g_fn_Log, PFN_LOG); REQFUNC("Log", g_fn_Log, PFN_LOG);
REQFUNC("MergeDefinitionFile", g_fn_MergeDefinition_File, PFN_MERGEDEFINITION_FILE);
// Amx scripts // Amx scripts
REQFUNC("GetAmxScript", g_fn_GetAmxScript, PFN_GET_AMXSCRIPT); REQFUNC("GetAmxScript", g_fn_GetAmxScript, PFN_GET_AMXSCRIPT);
@ -2540,6 +2543,7 @@ C_DLLEXPORT int AMXX_Attach(PFN_REQ_FNPTR reqFnptrFunc)
REQFUNC("amx_Execv", g_fn_AmxExecv, PFN_AMX_EXECV); REQFUNC("amx_Execv", g_fn_AmxExecv, PFN_AMX_EXECV);
REQFUNC("amx_FindPublic", g_fn_AmxFindPublic, PFN_AMX_FINDPUBLIC); REQFUNC("amx_FindPublic", g_fn_AmxFindPublic, PFN_AMX_FINDPUBLIC);
REQFUNC("amx_Allot", g_fn_AmxAllot, PFN_AMX_ALLOT); REQFUNC("amx_Allot", g_fn_AmxAllot, PFN_AMX_ALLOT);
REQFUNC("amx_FindNative", g_fn_AmxFindNative, PFN_AMX_FINDNATIVE);
// Natives / Forwards // Natives / Forwards
REQFUNC("AddNatives", g_fn_AddNatives, PFN_ADD_NATIVES); REQFUNC("AddNatives", g_fn_AddNatives, PFN_ADD_NATIVES);

View File

@ -240,6 +240,14 @@ enum {
AMX_ERR_DOMAIN, /* domain error, expression result does not fit in range */ AMX_ERR_DOMAIN, /* domain error, expression result does not fit in range */
}; };
#if !defined AMX_NO_ALIGN
#if defined __linux__
#pragma pack() /* reset default packing */
#else
#pragma pack(pop) /* reset previous packing */
#endif
#endif
// ***** declare functions ***** // ***** declare functions *****
@ -257,9 +265,9 @@ void FN_META_QUERY(void);
void FN_META_ATTACH(void); void FN_META_ATTACH(void);
#endif // FN_META_ATTACH #endif // FN_META_ATTACH
#ifdef FN_META_DETTACH #ifdef FN_META_DETACH
void FN_META_DETTACH(void); void FN_META_DETACH(void);
#endif // FN_META_DETTACH #endif // FN_META_DETACH
@ -1869,9 +1877,9 @@ void FN_AMXX_QUERY(void);
void FN_AMXX_ATTACH(void); void FN_AMXX_ATTACH(void);
#endif // FN_AMXX_ATTACH #endif // FN_AMXX_ATTACH
#ifdef FN_AMXX_DETTACH #ifdef FN_AMXX_DETACH
void FN_AMXX_DETTACH(void); void FN_AMXX_DETACH(void);
#endif // FN_AMXX_DETTACH #endif // FN_AMXX_DETACH
#ifdef FN_AMXX_PLUGINSLOADED #ifdef FN_AMXX_PLUGINSLOADED
void FN_AMXX_PLUGINSLOADED(void); void FN_AMXX_PLUGINSLOADED(void);
@ -1947,6 +1955,7 @@ typedef int (*PFN_AMX_EXEC) (AMX* /*amx*/, cell* /*return val*/, int /*in
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*/, char* /*func name*/, int* /*index*/);
typedef int (*PFN_AMX_FINDNATIVE) (AMX* /*amx*/, char* /*func name*/, int* /*index*/);
typedef int (*PFN_LOAD_AMXSCRIPT) (AMX* /*amx*/, void** /*code*/, const char* /*path*/, char[64] /*error info*/); typedef int (*PFN_LOAD_AMXSCRIPT) (AMX* /*amx*/, void** /*code*/, const char* /*path*/, char[64] /*error info*/);
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*/);
@ -1954,6 +1963,7 @@ typedef REAL (*PFN_CELL_TO_REAL) (cell /*x*/);
typedef int (*PFN_REGISTER_SPFORWARD) (AMX * /*amx*/, int /*func*/, ... /*params*/); typedef int (*PFN_REGISTER_SPFORWARD) (AMX * /*amx*/, int /*func*/, ... /*params*/);
typedef int (*PFN_REGISTER_SPFORWARD_BYNAME) (AMX * /*amx*/, const char * /*funcName*/, ... /*params*/); typedef int (*PFN_REGISTER_SPFORWARD_BYNAME) (AMX * /*amx*/, const char * /*funcName*/, ... /*params*/);
typedef void (*PFN_UNREGISTER_SPFORWARD) (int /*id*/); typedef void (*PFN_UNREGISTER_SPFORWARD) (int /*id*/);
typedef void (*PFN_MERGEDEFINITION_FILE) (const char * /*filename*/);
extern PFN_ADD_NATIVES g_fn_AddNatives; extern PFN_ADD_NATIVES g_fn_AddNatives;
extern PFN_BUILD_PATHNAME g_fn_BuildPathname; extern PFN_BUILD_PATHNAME g_fn_BuildPathname;
@ -2005,6 +2015,8 @@ extern PFN_CELL_TO_REAL g_fn_CellToReal;
extern PFN_REGISTER_SPFORWARD g_fn_RegisterSPForward; extern PFN_REGISTER_SPFORWARD g_fn_RegisterSPForward;
extern PFN_REGISTER_SPFORWARD_BYNAME g_fn_RegisterSPForwardByName; extern PFN_REGISTER_SPFORWARD_BYNAME g_fn_RegisterSPForwardByName;
extern PFN_UNREGISTER_SPFORWARD g_fn_UnregisterSPForward; extern PFN_UNREGISTER_SPFORWARD g_fn_UnregisterSPForward;
extern PFN_MERGEDEFINITION_FILE g_fn_MergeDefinition_File;
extern PFN_AMX_FINDNATIVE g_fn_AmxFindNative;
#ifdef MAY_NEVER_BE_DEFINED #ifdef MAY_NEVER_BE_DEFINED
// Function prototypes for intellisense and similar systems // Function prototypes for intellisense and similar systems
@ -2098,8 +2110,10 @@ void MF_Log(const char *fmt, ...);
#define MF_AmxExecv g_fn_AmxExecv #define MF_AmxExecv g_fn_AmxExecv
#define MF_AmxFindPublic g_fn_AmxFindPublic #define MF_AmxFindPublic g_fn_AmxFindPublic
#define MF_AmxAllot g_fn_AmxAllot #define MF_AmxAllot g_fn_AmxAllot
#define MF_AmxFindNative g_fn_AmxFindNative
#define MF_LoadAmxScript g_fn_LoadAmxScript #define MF_LoadAmxScript g_fn_LoadAmxScript
#define MF_UnloadAmxScript g_fn_UnloadAmxScript #define MF_UnloadAmxScript g_fn_UnloadAmxScript
#define MF_MergeDefinitionFile g_fn_MergeDefinition_File
#define amx_ctof g_fn_CellToReal #define amx_ctof g_fn_CellToReal
#define amx_ftoc g_fn_RealToCell #define amx_ftoc g_fn_RealToCell
#define MF_RegisterSPForwardByName g_fn_RegisterSPForwardByName #define MF_RegisterSPForwardByName g_fn_RegisterSPForwardByName
@ -2149,4 +2163,5 @@ void Mem_Deallocator(const char *sourceFile, const unsigned int sourceLine, cons
#define realloc(ptr,sz) Mem_Reallocator(__FILE__,__LINE__,__FUNCTION__,m_alloc_realloc,sz,ptr) #define realloc(ptr,sz) Mem_Reallocator(__FILE__,__LINE__,__FUNCTION__,m_alloc_realloc,sz,ptr)
#define free(ptr) Mem_Deallocator(__FILE__,__LINE__,__FUNCTION__,m_alloc_free,ptr) #define free(ptr) Mem_Deallocator(__FILE__,__LINE__,__FUNCTION__,m_alloc_free,ptr)
#endif // #ifndef __AMXXMODULE_H__ #endif // #ifndef __AMXXMODULE_H__

View File

@ -15,6 +15,7 @@
$PROJECT = "ns_amxx"; $PROJECT = "ns_amxx";
$sdk = "../../../hlsdk/SourceCode"; $sdk = "../../../hlsdk/SourceCode";
$mm = "../../../metamod/metamod"; $mm = "../../../metamod/metamod";
$gccf = "gcc";
@CPP_SOURCE_FILES = ("amxxmodule.cpp", "CPlayer.cpp", "CSpawn.cpp", "NMisc.cpp", "NPData.cpp", "hookedfunctions.cpp"); @CPP_SOURCE_FILES = ("amxxmodule.cpp", "CPlayer.cpp", "CSpawn.cpp", "NMisc.cpp", "NPData.cpp", "hookedfunctions.cpp");
@ -45,7 +46,7 @@ while ($cmd = shift)
} }
} }
$gcc = `gcc --version`; $gcc = `$gccf --version`;
if ($gcc =~ /2\.9/) if ($gcc =~ /2\.9/)
{ {
$OPT{"opt"} .= " -malign-loops=2 -malign-jumps=2 -malign-functions=2"; $OPT{"opt"} .= " -malign-loops=2 -malign-jumps=2 -malign-functions=2";
@ -134,11 +135,11 @@ for ($i=0; $i<=$#CPP_SOURCE_FILES; $i++)
$ofile = $file; $ofile = $file;
$ofile =~ s/\.cpp/\.o/; $ofile =~ s/\.cpp/\.o/;
$ofile = "$outdir/$ofile"; $ofile = "$outdir/$ofile";
$gcc = "gcc $cflags -Dstrcmpi=strcasecmp -fPIC $inc -c $file -o $ofile"; $gcc = "$gccf $cflags -Dstrcmpi=strcasecmp -fPIC $inc -c $file -o $ofile";
if (-e $ofile) if (-e $ofile)
{ {
$file_time = (stat($file))[9]; $file_time = (stat($file))[9];
$ofile_time = (stat($file))[9]; $ofile_time = (stat($ofile))[9];
if ($file_time > $ofile_time) if ($file_time > $ofile_time)
{ {
print "$gcc\n"; print "$gcc\n";
@ -160,7 +161,7 @@ for ($i=0; $i<=$#CPP_SOURCE_FILES; $i++)
if (-e $ofile) if (-e $ofile)
{ {
$file_time = (stat($file))[9]; $file_time = (stat($file))[9];
$ofile_time = (stat($file))[9]; $ofile_time = (stat($ofile))[9];
if ($file_time > $ofile_time) if ($file_time > $ofile_time)
{ {
print "$gcc\n"; print "$gcc\n";
@ -172,6 +173,6 @@ for ($i=0; $i<=$#CPP_SOURCE_FILES; $i++)
} }
} }
$gcc = "gcc $cflags -shared -ldl -lm @LINK -o $outdir/$bin"; $gcc = "$gccf $cflags -shared -ldl -lm @LINK -o $outdir/$bin";
print "$gcc\n"; print "$gcc\n";
`$gcc`; `$gcc`;

View File

@ -299,6 +299,30 @@ static cell AMX_NATIVE_CALL ns_set_fov(AMX *amx, cell *params)
} }
return 0; return 0;
} }
static cell AMX_NATIVE_CALL ns_giveitem(AMX *amx, cell *params)
{
int index=params[1];
int len;
char *classname = MF_GetAmxString(amx,params[2],0,&len);
if (index<1 || index>gpGlobals->maxClients)
return 0;
edict_t *player=INDEXENT2(index);
if (player->v.deadflag > 0)
return 0;
edict_t *object=CREATE_NAMED_ENTITY(ALLOC_STRING(classname)); //create
if (!object)
{
MF_Log("Error creating entity `%s`",classname);
return 0;
}
SET_ORIGIN(object,player->v.origin); // move to player
gpGamedllFuncs->dllapi_table->pfnSpawn(object); // emulate spawn
object->v.flags |= FL_ONGROUND; // make it think it's touched the ground
gpGamedllFuncs->dllapi_table->pfnThink(object); //
gpGamedllFuncs->dllapi_table->pfnTouch(player,object); // give it to the player
return 1;
}
AMX_NATIVE_INFO ns_misc_natives[] = { AMX_NATIVE_INFO ns_misc_natives[] = {
/////////////////// ///////////////////
{ "ns_get_build", ns_get_build }, { "ns_get_build", ns_get_build },
@ -331,6 +355,8 @@ AMX_NATIVE_INFO ns_misc_natives[] = {
{ "ns_set_fov", ns_set_fov }, { "ns_set_fov", ns_set_fov },
{ "ns_give_item", ns_giveitem },
/////////////////// ///////////////////
{ NULL, NULL } { NULL, NULL }

View File

@ -240,6 +240,14 @@ enum {
AMX_ERR_DOMAIN, /* domain error, expression result does not fit in range */ AMX_ERR_DOMAIN, /* domain error, expression result does not fit in range */
}; };
#if !defined AMX_NO_ALIGN
#if defined __linux__
#pragma pack() /* reset default packing */
#else
#pragma pack(pop) /* reset previous packing */
#endif
#endif
// ***** declare functions ***** // ***** declare functions *****
@ -257,9 +265,9 @@ void FN_META_QUERY(void);
void FN_META_ATTACH(void); void FN_META_ATTACH(void);
#endif // FN_META_ATTACH #endif // FN_META_ATTACH
#ifdef FN_META_DETTACH #ifdef FN_META_DETACH
void FN_META_DETTACH(void); void FN_META_DETACH(void);
#endif // FN_META_DETTACH #endif // FN_META_DETACH
@ -1869,9 +1877,9 @@ void FN_AMXX_QUERY(void);
void FN_AMXX_ATTACH(void); void FN_AMXX_ATTACH(void);
#endif // FN_AMXX_ATTACH #endif // FN_AMXX_ATTACH
#ifdef FN_AMXX_DETTACH #ifdef FN_AMXX_DETACH
void FN_AMXX_DETTACH(void); void FN_AMXX_DETACH(void);
#endif // FN_AMXX_DETTACH #endif // FN_AMXX_DETACH
#ifdef FN_AMXX_PLUGINSLOADED #ifdef FN_AMXX_PLUGINSLOADED
void FN_AMXX_PLUGINSLOADED(void); void FN_AMXX_PLUGINSLOADED(void);
@ -1947,6 +1955,7 @@ typedef int (*PFN_AMX_EXEC) (AMX* /*amx*/, cell* /*return val*/, int /*in
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*/, char* /*func name*/, int* /*index*/);
typedef int (*PFN_AMX_FINDNATIVE) (AMX* /*amx*/, char* /*func name*/, int* /*index*/);
typedef int (*PFN_LOAD_AMXSCRIPT) (AMX* /*amx*/, void** /*code*/, const char* /*path*/, char[64] /*error info*/); typedef int (*PFN_LOAD_AMXSCRIPT) (AMX* /*amx*/, void** /*code*/, const char* /*path*/, char[64] /*error info*/);
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*/);
@ -1954,6 +1963,7 @@ typedef REAL (*PFN_CELL_TO_REAL) (cell /*x*/);
typedef int (*PFN_REGISTER_SPFORWARD) (AMX * /*amx*/, int /*func*/, ... /*params*/); typedef int (*PFN_REGISTER_SPFORWARD) (AMX * /*amx*/, int /*func*/, ... /*params*/);
typedef int (*PFN_REGISTER_SPFORWARD_BYNAME) (AMX * /*amx*/, const char * /*funcName*/, ... /*params*/); typedef int (*PFN_REGISTER_SPFORWARD_BYNAME) (AMX * /*amx*/, const char * /*funcName*/, ... /*params*/);
typedef void (*PFN_UNREGISTER_SPFORWARD) (int /*id*/); typedef void (*PFN_UNREGISTER_SPFORWARD) (int /*id*/);
typedef void (*PFN_MERGEDEFINITION_FILE) (const char * /*filename*/);
extern PFN_ADD_NATIVES g_fn_AddNatives; extern PFN_ADD_NATIVES g_fn_AddNatives;
extern PFN_BUILD_PATHNAME g_fn_BuildPathname; extern PFN_BUILD_PATHNAME g_fn_BuildPathname;
@ -2005,6 +2015,8 @@ extern PFN_CELL_TO_REAL g_fn_CellToReal;
extern PFN_REGISTER_SPFORWARD g_fn_RegisterSPForward; extern PFN_REGISTER_SPFORWARD g_fn_RegisterSPForward;
extern PFN_REGISTER_SPFORWARD_BYNAME g_fn_RegisterSPForwardByName; extern PFN_REGISTER_SPFORWARD_BYNAME g_fn_RegisterSPForwardByName;
extern PFN_UNREGISTER_SPFORWARD g_fn_UnregisterSPForward; extern PFN_UNREGISTER_SPFORWARD g_fn_UnregisterSPForward;
extern PFN_MERGEDEFINITION_FILE g_fn_MergeDefinition_File;
extern PFN_AMX_FINDNATIVE g_fn_AmxFindNative;
#ifdef MAY_NEVER_BE_DEFINED #ifdef MAY_NEVER_BE_DEFINED
// Function prototypes for intellisense and similar systems // Function prototypes for intellisense and similar systems
@ -2098,8 +2110,10 @@ void MF_Log(const char *fmt, ...);
#define MF_AmxExecv g_fn_AmxExecv #define MF_AmxExecv g_fn_AmxExecv
#define MF_AmxFindPublic g_fn_AmxFindPublic #define MF_AmxFindPublic g_fn_AmxFindPublic
#define MF_AmxAllot g_fn_AmxAllot #define MF_AmxAllot g_fn_AmxAllot
#define MF_AmxFindNative g_fn_AmxFindNative
#define MF_LoadAmxScript g_fn_LoadAmxScript #define MF_LoadAmxScript g_fn_LoadAmxScript
#define MF_UnloadAmxScript g_fn_UnloadAmxScript #define MF_UnloadAmxScript g_fn_UnloadAmxScript
#define MF_MergeDefinitionFile g_fn_MergeDefinition_File
#define amx_ctof g_fn_CellToReal #define amx_ctof g_fn_CellToReal
#define amx_ftoc g_fn_RealToCell #define amx_ftoc g_fn_RealToCell
#define MF_RegisterSPForwardByName g_fn_RegisterSPForwardByName #define MF_RegisterSPForwardByName g_fn_RegisterSPForwardByName
@ -2149,4 +2163,5 @@ void Mem_Deallocator(const char *sourceFile, const unsigned int sourceLine, cons
#define realloc(ptr,sz) Mem_Reallocator(__FILE__,__LINE__,__FUNCTION__,m_alloc_realloc,sz,ptr) #define realloc(ptr,sz) Mem_Reallocator(__FILE__,__LINE__,__FUNCTION__,m_alloc_realloc,sz,ptr)
#define free(ptr) Mem_Deallocator(__FILE__,__LINE__,__FUNCTION__,m_alloc_free,ptr) #define free(ptr) Mem_Deallocator(__FILE__,__LINE__,__FUNCTION__,m_alloc_free,ptr)
#endif // #ifndef __AMXXMODULE_H__ #endif // #ifndef __AMXXMODULE_H__

View File

@ -37,10 +37,10 @@ void OnPluginsLoaded()
if ((mapname[0]=='c' || mapname[0]=='C') && (mapname[1]=='o' || mapname[0]=='O') && mapname[2]=='_') if ((mapname[0]=='c' || mapname[0]=='C') && (mapname[1]=='o' || mapname[0]=='O') && mapname[2]=='_')
iscombat=TRUE; iscombat=TRUE;
ChangeclassForward = MF_RegisterForward("client_changeclass", ET_IGNORE, FP_CELL, FP_CELL, FP_CELL, FP_CELL); ChangeclassForward = MF_RegisterForward("client_changeclass", ET_IGNORE, FP_CELL, FP_CELL, FP_CELL, FP_CELL, FP_DONE);
// No sense in this if it's combat.. // No sense in this if it's combat..
if (!iscombat) if (!iscombat)
BuiltForward = MF_RegisterForward("client_built", ET_IGNORE, FP_CELL, FP_CELL, FP_CELL, FP_CELL); BuiltForward = MF_RegisterForward("client_built", ET_IGNORE, FP_CELL, FP_CELL, FP_CELL, FP_CELL, FP_DONE);
} }

View File

@ -1,176 +0,0 @@
/* NS module functions
* -
* (c) 2004, Steve Dudenhoeffer
* This file is provided as is (no warranties).
*/
#if defined NS_INC
#endinput
#endif
#define NS_INC
#include <ns_const>
/* Called whenever the client's class is changed. The classes given match get_class() output */
forward client_changeclass(id,newclass,oldclass);
/* Called whenever the client build's a structure. If type is 1, it's a marine structure, if type is 2, it's alien. */
forward client_built(idPlayer,idStructure,type,impulse);
/* Returns if the map's combat or not. */
native ns_is_combat();
/* Sends a popup to a player. Set target to 0 to send to everybody. Message length is 188 characters. The last parameter, if set to 1, will only display when the player has cl_autohelp set to 1. */
native ns_popup(target,szMsg[180],ah=0)
/* Sets a player model. Omit the second parameter to return to default.
Note: This does *not* change back on death, team switch, gestations, etc. */
native ns_set_player_model(id,szModel[]="");
/* Sets a player's skin. Omit second parameter to return to default.
Note: This does *not* change back on death, team switch, gestations, etc. */
native ns_set_player_skin(id,skin=-1);
/* Sets a player's body. Omit second parameter to return to default.
Note: This does *not* change back on death, team switch, gestations, etc. */
native ns_set_player_body(id,body=-1);
/* Sets a player's speedchange. Omit the second parameter to return to default */
native ns_set_speedchange(id,speedchange=0);
/* Returns a player's current speedchange. */
native ns_get_speedchange(id);
/* Returns a player's max speed before the speed change is factored in. */
native ns_get_maxspeed(id);
/* Returns whether or not this mask is set from the entity's iuser4 field. Use the "mask" enum for reference. */
native ns_get_mask(id,mask);
/* Sets or removes the mask from the entity's iuser4 field. Set "value" to 1 to turn the mask on, 0 to turn it off. */
native ns_set_mask(id,mask,value);
/* Returns built/unbuilt structures.
If:
builtOnly is 1 (default):
Only fully built structures are counted.
builtOnly is 0:
Any structure meeting the classname is counted.
Number is 0 (default):
The total number of matching structures is returned.
Number is any other value:
The index of the #th matching structure is returned.
*/
native ns_get_build(classname[],builtOnly=1,Number=0);
/* Returns if the player has the weapon or not in their pev->weapons field.
set "setweapon" to 0 to turn the bit off, set to 1 to turn it on. Or omit it to just return the value. */
native ns_has_weapon(id,NSWeapon:weapon,setweapon=-1);
/* Gets spawn point for specified team (type).
If:
Team is equal to 0:
Ready room spawns are returned.
Team is greater than 0:
Spawns for the team are returned.
Number is equal to 0:
Total number of spawns is returned.
Number is greater than 0:
The location of the specified spawn is returned.
*/
native ns_get_spawn(team,number=0,Float:ret[3]);
/* Configures display of the custom menus. This display is _very_ similar to set_hudmessage() */
native ns_set_menu(id,r=NSMENU_R,g=NSMENU_G,b=NSMENU_B,Float:x=NSMENU_X,Float:y=NSMENU_Y, effects=0, Float:fadeintime=0.0, Float:fadeouttime=0.0,channel1=NSMENU_CHAN1,channel2=NSMENU_CHAN2);
/* Displays a custom menu. It will execute command(id,keys) when the menu is pressed. */
native ns_show_menu(id,szCommand[],szText[],keys,time);
/* Returns the class of the player. Look in the classes enum in ns_const.inc for the value's meaning. */
native ns_get_class(id);
/* Returns a player's percentage of JP fuel */
native Float:ns_get_jpfuel(id);
/* Sets a player's percentage of JP fuel */
native ns_set_jpfuel(id,Float:fuel);
/* Returns a player's percentage of adrenaline (alien) */
native Float:ns_get_energy(id);
/* Sets a player's percentage of adrenaline */
native ns_set_energy(id,Float:energy);
/* Returns a player's resources. (alien only) */
native Float:ns_get_res(id);
/* Sets a player's resources. (alien only) */
native ns_set_res(id,Float:res);
/* Returns a player's experience (combat only) */
native Float:ns_get_exp(id);
/* Sets a player's experience (combat only) */
native ns_set_exp(id,Float:exp);
/* Gets a player's point spent value in combat */
native ns_get_points(id);
/* Sets a player's point spent value in combat */
native ns_set_points(id,points);
/* Gets a weapon's damage (use the weapon index, not the player) */
native Float:ns_get_weap_dmg(idWeapon);
/* Sets a weapon's damage (use the weapon index, not the player) */
native ns_set_weap_dmg(idWeapon,Float:damage);
/* Gets a weapon's range (use the weapon index, not the player) */
native Float:ns_get_weap_range(idWeapon);
/* Sets a weapon's range (use the weapon index, not the player) */
native ns_set_weap_range(idWeapon,Float:range);
/* Gets a weapon's clip ammo (use the weapon index, not the player) */
native ns_get_weap_clip(idWeapon);
/* Sets a weapon's clip ammo (use the weapon index, not the player) */
native ns_set_weap_clip(idWeapon,clipsize);
/* Gets the player's weapon reserve for the specified type of weapon.
Look in ns_const.inc for the weapon enum. */
native ns_get_weap_reserve(id,weapon);
/* Sets the player's weapon reserve for the specified type of weapon.
Look in ns_const.inc for the weapon enum. */
native ns_set_weap_reserve(id,weapon,ammo);
/* Gets a player's score. Note: score from level is automatically factored into the scoreboard display in combat. */
native ns_get_score(idPlayer);
/* Sets a player's score. Note: score from level is automatically factored into the scoreboard display in combat. */
native ns_set_score(idPlayer,score);
/* Gets a player's death count. */
native ns_get_deaths(idPlayer);
/* Sets a player's death count. */
native ns_set_deaths(idPlayer,numdeaths);
/* Gets a player's icon value (from the scoreboard) is a bitmask. Use enum "icons" for values. Returns -1 for unauthed */
native ns_get_icon(idPlayer);
/* Sets a player's icon value. */
native ns_set_icon(idPlayer,iconvalue);
/* Gets the trait type tied to the hive. Look at the hivetrait enum for the values. */
native ns_get_hive_trait(idHive);
/* Sets the trait type tied to the hive. Look at the hivetrait enum for the values. */
native ns_set_hive_trait(idHive,trait);
native ns_set_fov(idPlayer,Float:_fov=0.0);

View File

@ -1,139 +0,0 @@
/* NS module constants
* -
* (c) 2004, Steve Dudenhoeffer
* This file is provided as is (no warranties).
*/
#if defined NS_CONST_INC
#endinput
#endif
#define NS_CONST_INC
// These values are customizable (for the custom menus)
// If your menu uses the default menu scheme, then it will use this.
#define NSMENU_X 0.2
#define NSMENU_Y 0.1
#define NSMENU_R 255
#define NSMENU_G 200
#define NSMENU_B 100
#define NSMENU_CHAN1 2
#define NSMENU_CHAN2 3
enum masks
{
MASK_NONE = 0,
MASK_SIGHTED = 1,
MASK_DETECTED = 2,
MASK_BUILDABLE = 4,
MASK_BASEBUILD0 = 8, // Base build slot #0
MASK_WEAPONS1 = 8, // Marine weapons 1
MASK_CARAPACE = 8, // Alien carapace
MASK_WEAPONS2 = 16, // Marines weapons 2
MASK_REGENERATION = 16, // Alien regeneration
MASK_BASEBUILD1 = 16, // Base build slot #1
MASK_WEAPONS3 = 32, // Marine weapons 3
MASK_REDEMPTION = 32, // Alien redemption
MASK_BASEBUILD2 = 32, // Base build slot #2
MASK_ARMOR1 = 64, // Marine armor 1
MASK_CELERITY = 64, // Alien celerity
MASK_BASEBUILD3 = 64, // Base build slot #3
MASK_ARMOR2 = 128, // Marine armor 2
MASK_ADRENALINE = 128, // Alien adrenaline
MASK_BASEBUILD4 = 128, // Base build slot #4
MASK_ARMOR3 = 256, // Marine armor 3
MASK_SILENCE = 256, // Alien silence
MASK_BASEBUILD5 = 256, // Base build slot #5
MASK_JETPACK = 512, // Marine jetpacks
MASK_CLOAKING = 512, // Alien cloaking
MASK_BASEBUILD6 = 512, // Base build slot #6
MASK_FOCUS = 1024, // Alien focus
MASK_MOTION = 1024, // Marine motion tracking
MASK_BASEBUILD7 = 1024, // Base build slot #7
MASK_SCENTOFFEAR = 2048, // Alien scent of fear
MASK_DEFENSE2 = 4096, // Defense level 2
MASK_DEFENSE3 = 8192, // Defense level 3
MASK_ELECTRICITY = 8192, // Electricy
MASK_MOVEMENT2 = 16384, // Movement level 2,
MASK_MOVEMENT3 = 32768, // Movement level 3
MASK_HEAVYARMOR = 32768, // Marine heavy armor
MASK_SENSORY2 = 65536, // Sensory level 2
MASK_SENSORY3 = 131072, // Sensory level 3
MASK_ALIEN_MOVEMENT = 262144, // Onos is charging
MASK_WALLSTICKING = 524288, // Flag for wall-sticking
MASK_PRIMALSCREAM = 1048576, // Alien is in range of active primal scream
MASK_UMBRA = 2097152, // In umbra
MASK_DIGESTING = 4194304, // When set on a visible player, player is digesting. When set on invisible player, player is being digested
MASK_RECYCLING = 8388608, // Building is recycling
MASK_TOPDOWN = 16777216, // Commander view
MASK_PLAYER_STUNNED = 33554432, // Player has been stunned by stomp
MASK_ENSNARED = 67108864, // Webbed
MASK_ALIEN_EMBRYO = 268435456, // Gestating
MASK_SELECTABLE = 536870912, // ???
MASK_PARASITED = 1073741824, // Parasite flag
MASK_SENSORY_NEARBY = 2147483648 // Sensory chamber in range
}
enum classes
{
CLASS_UNKNOWN = 0,
CLASS_SKULK,
CLASS_GORGE,
CLASS_LERK,
CLASS_FADE,
CLASS_ONOS,
CLASS_MARINE,
CLASS_JETPACK,
CLASS_HEAVY,
CLASS_COMMANDER,
CLASS_GESTATE,
CLASS_DEAD,
CLASS_NOTEAM
}
enum weapons
{
WEAPON_NONE = 0,
WEAPON_CLAWS,
WEAPON_SPIT,
WEAPON_SPORES,
WEAPON_SPIKE,
WEAPON_BITE,
WEAPON_BITE2,
WEAPON_SWIPE,
WEAPON_WEBSPINNER,
WEAPON_METABOLIZE,
WEAPON_PARASITE,
WEAPON_BLINK,
WEAPON_DIVINEWIND,
WEAPON_KNIFE,
WEAPON_PISTOL,
WEAPON_LMG,
WEAPON_SHOTGUN,
WEAPON_HMG,
WEAPON_WELDER,
WEAPON_MINE,
WEAPON_GRENADE_GUN,
WEAPON_LEAP,
WEAPON_CHARGE,
WEAPON_UMBRA,
WEAPON_PRIMALSCREAM,
WEAPON_BILEBOMB,
WEAPON_ACIDROCKET,
WEAPON_HEALINGSPRAY,
WEAPON_GRENADE,
WEAPON_STOMP,
WEAPON_DEVOUR,
WEAPON_MAX
}
enum hivetraits
{
HIVETRAIT_NONE = 0,
HIVETRAIT_DC = 92,
HIVETRAIT_SC = 93,
HIVETRAIT_MC = 94
}

View File

@ -16,6 +16,7 @@ $PROJECT = "pgsql_amxx";
$sdk = "../hlsdk/SourceCode"; $sdk = "../hlsdk/SourceCode";
$mm = "../metamod/metamod"; $mm = "../metamod/metamod";
$pg = "postgresql-7.4.3/src"; $pg = "postgresql-7.4.3/src";
$gccf = "gcc";
@CPP_SOURCE_FILES = ("pgsql.cpp", "pgsql_amx.cpp", "amxxmodule.cpp"); @CPP_SOURCE_FILES = ("pgsql.cpp", "pgsql_amx.cpp", "amxxmodule.cpp");
@ -46,7 +47,7 @@ while ($cmd = shift)
} }
} }
$gcc = `gcc --version`; $gcc = `$gccf --version`;
if ($gcc =~ /2\.9/) if ($gcc =~ /2\.9/)
{ {
$OPT{"opt"} .= " -malign-loops=2 -malign-jumps=2 -malign-functions=2"; $OPT{"opt"} .= " -malign-loops=2 -malign-jumps=2 -malign-functions=2";
@ -135,7 +136,7 @@ for ($i=0; $i<=$#CPP_SOURCE_FILES; $i++)
$ofile = $file; $ofile = $file;
$ofile =~ s/\.cpp/\.o/; $ofile =~ s/\.cpp/\.o/;
$ofile = "$outdir/$ofile"; $ofile = "$outdir/$ofile";
$gcc = "gcc $cflags -Dstrcmpi=strcasecmp -fPIC $inc -c $file -o $ofile"; $gcc = "$gccf $cflags -Dstrcmpi=strcasecmp -fPIC $inc -c $file -o $ofile";
if (-e $ofile) if (-e $ofile)
{ {
$file_time = (stat($file))[9]; $file_time = (stat($file))[9];
@ -173,6 +174,6 @@ for ($i=0; $i<=$#CPP_SOURCE_FILES; $i++)
} }
} }
$gcc = "gcc $cflags $inc -shared -ldl -lm @LINK -lpq -lz -lcrypt -o $outdir/$bin"; $gcc = "$gccf $cflags $inc -shared -ldl -lm @LINK -lpq -lz -lcrypt -o $outdir/$bin";
print "$gcc\n"; print "$gcc\n";
`$gcc`; `$gcc`;

View File

@ -2477,6 +2477,8 @@ PFN_CELL_TO_REAL g_fn_CellToReal;
PFN_REGISTER_SPFORWARD g_fn_RegisterSPForward; PFN_REGISTER_SPFORWARD g_fn_RegisterSPForward;
PFN_REGISTER_SPFORWARD_BYNAME g_fn_RegisterSPForwardByName; PFN_REGISTER_SPFORWARD_BYNAME g_fn_RegisterSPForwardByName;
PFN_UNREGISTER_SPFORWARD g_fn_UnregisterSPForward; PFN_UNREGISTER_SPFORWARD g_fn_UnregisterSPForward;
PFN_MERGEDEFINITION_FILE g_fn_MergeDefinition_File;
PFN_AMX_FINDNATIVE g_fn_AmxFindNative;
// *** Exports *** // *** Exports ***
C_DLLEXPORT int AMXX_Query(int *interfaceVersion, amxx_module_info_s *moduleInfo) C_DLLEXPORT int AMXX_Query(int *interfaceVersion, amxx_module_info_s *moduleInfo)
@ -2520,6 +2522,7 @@ C_DLLEXPORT int AMXX_Attach(PFN_REQ_FNPTR reqFnptrFunc)
REQFUNC("PrintSrvConsole", g_fn_PrintSrvConsole, PFN_PRINT_SRVCONSOLE); REQFUNC("PrintSrvConsole", g_fn_PrintSrvConsole, PFN_PRINT_SRVCONSOLE);
REQFUNC("GetModname", g_fn_GetModname, PFN_GET_MODNAME); REQFUNC("GetModname", g_fn_GetModname, PFN_GET_MODNAME);
REQFUNC("Log", g_fn_Log, PFN_LOG); REQFUNC("Log", g_fn_Log, PFN_LOG);
REQFUNC("MergeDefinitionFile", g_fn_MergeDefinition_File, PFN_MERGEDEFINITION_FILE);
// Amx scripts // Amx scripts
REQFUNC("GetAmxScript", g_fn_GetAmxScript, PFN_GET_AMXSCRIPT); REQFUNC("GetAmxScript", g_fn_GetAmxScript, PFN_GET_AMXSCRIPT);
@ -2540,6 +2543,7 @@ C_DLLEXPORT int AMXX_Attach(PFN_REQ_FNPTR reqFnptrFunc)
REQFUNC("amx_Execv", g_fn_AmxExecv, PFN_AMX_EXECV); REQFUNC("amx_Execv", g_fn_AmxExecv, PFN_AMX_EXECV);
REQFUNC("amx_FindPublic", g_fn_AmxFindPublic, PFN_AMX_FINDPUBLIC); REQFUNC("amx_FindPublic", g_fn_AmxFindPublic, PFN_AMX_FINDPUBLIC);
REQFUNC("amx_Allot", g_fn_AmxAllot, PFN_AMX_ALLOT); REQFUNC("amx_Allot", g_fn_AmxAllot, PFN_AMX_ALLOT);
REQFUNC("amx_FindNative", g_fn_AmxFindNative, PFN_AMX_FINDNATIVE);
// Natives / Forwards // Natives / Forwards
REQFUNC("AddNatives", g_fn_AddNatives, PFN_ADD_NATIVES); REQFUNC("AddNatives", g_fn_AddNatives, PFN_ADD_NATIVES);

View File

@ -240,6 +240,14 @@ enum {
AMX_ERR_DOMAIN, /* domain error, expression result does not fit in range */ AMX_ERR_DOMAIN, /* domain error, expression result does not fit in range */
}; };
#if !defined AMX_NO_ALIGN
#if defined __linux__
#pragma pack() /* reset default packing */
#else
#pragma pack(pop) /* reset previous packing */
#endif
#endif
// ***** declare functions ***** // ***** declare functions *****
@ -257,9 +265,9 @@ void FN_META_QUERY(void);
void FN_META_ATTACH(void); void FN_META_ATTACH(void);
#endif // FN_META_ATTACH #endif // FN_META_ATTACH
#ifdef FN_META_DETTACH #ifdef FN_META_DETACH
void FN_META_DETTACH(void); void FN_META_DETACH(void);
#endif // FN_META_DETTACH #endif // FN_META_DETACH
@ -1869,9 +1877,9 @@ void FN_AMXX_QUERY(void);
void FN_AMXX_ATTACH(void); void FN_AMXX_ATTACH(void);
#endif // FN_AMXX_ATTACH #endif // FN_AMXX_ATTACH
#ifdef FN_AMXX_DETTACH #ifdef FN_AMXX_DETACH
void FN_AMXX_DETTACH(void); void FN_AMXX_DETACH(void);
#endif // FN_AMXX_DETTACH #endif // FN_AMXX_DETACH
#ifdef FN_AMXX_PLUGINSLOADED #ifdef FN_AMXX_PLUGINSLOADED
void FN_AMXX_PLUGINSLOADED(void); void FN_AMXX_PLUGINSLOADED(void);
@ -1947,6 +1955,7 @@ typedef int (*PFN_AMX_EXEC) (AMX* /*amx*/, cell* /*return val*/, int /*in
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*/, char* /*func name*/, int* /*index*/);
typedef int (*PFN_AMX_FINDNATIVE) (AMX* /*amx*/, char* /*func name*/, int* /*index*/);
typedef int (*PFN_LOAD_AMXSCRIPT) (AMX* /*amx*/, void** /*code*/, const char* /*path*/, char[64] /*error info*/); typedef int (*PFN_LOAD_AMXSCRIPT) (AMX* /*amx*/, void** /*code*/, const char* /*path*/, char[64] /*error info*/);
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*/);
@ -1954,6 +1963,7 @@ typedef REAL (*PFN_CELL_TO_REAL) (cell /*x*/);
typedef int (*PFN_REGISTER_SPFORWARD) (AMX * /*amx*/, int /*func*/, ... /*params*/); typedef int (*PFN_REGISTER_SPFORWARD) (AMX * /*amx*/, int /*func*/, ... /*params*/);
typedef int (*PFN_REGISTER_SPFORWARD_BYNAME) (AMX * /*amx*/, const char * /*funcName*/, ... /*params*/); typedef int (*PFN_REGISTER_SPFORWARD_BYNAME) (AMX * /*amx*/, const char * /*funcName*/, ... /*params*/);
typedef void (*PFN_UNREGISTER_SPFORWARD) (int /*id*/); typedef void (*PFN_UNREGISTER_SPFORWARD) (int /*id*/);
typedef void (*PFN_MERGEDEFINITION_FILE) (const char * /*filename*/);
extern PFN_ADD_NATIVES g_fn_AddNatives; extern PFN_ADD_NATIVES g_fn_AddNatives;
extern PFN_BUILD_PATHNAME g_fn_BuildPathname; extern PFN_BUILD_PATHNAME g_fn_BuildPathname;
@ -2005,6 +2015,8 @@ extern PFN_CELL_TO_REAL g_fn_CellToReal;
extern PFN_REGISTER_SPFORWARD g_fn_RegisterSPForward; extern PFN_REGISTER_SPFORWARD g_fn_RegisterSPForward;
extern PFN_REGISTER_SPFORWARD_BYNAME g_fn_RegisterSPForwardByName; extern PFN_REGISTER_SPFORWARD_BYNAME g_fn_RegisterSPForwardByName;
extern PFN_UNREGISTER_SPFORWARD g_fn_UnregisterSPForward; extern PFN_UNREGISTER_SPFORWARD g_fn_UnregisterSPForward;
extern PFN_MERGEDEFINITION_FILE g_fn_MergeDefinition_File;
extern PFN_AMX_FINDNATIVE g_fn_AmxFindNative;
#ifdef MAY_NEVER_BE_DEFINED #ifdef MAY_NEVER_BE_DEFINED
// Function prototypes for intellisense and similar systems // Function prototypes for intellisense and similar systems
@ -2098,8 +2110,10 @@ void MF_Log(const char *fmt, ...);
#define MF_AmxExecv g_fn_AmxExecv #define MF_AmxExecv g_fn_AmxExecv
#define MF_AmxFindPublic g_fn_AmxFindPublic #define MF_AmxFindPublic g_fn_AmxFindPublic
#define MF_AmxAllot g_fn_AmxAllot #define MF_AmxAllot g_fn_AmxAllot
#define MF_AmxFindNative g_fn_AmxFindNative
#define MF_LoadAmxScript g_fn_LoadAmxScript #define MF_LoadAmxScript g_fn_LoadAmxScript
#define MF_UnloadAmxScript g_fn_UnloadAmxScript #define MF_UnloadAmxScript g_fn_UnloadAmxScript
#define MF_MergeDefinitionFile g_fn_MergeDefinition_File
#define amx_ctof g_fn_CellToReal #define amx_ctof g_fn_CellToReal
#define amx_ftoc g_fn_RealToCell #define amx_ftoc g_fn_RealToCell
#define MF_RegisterSPForwardByName g_fn_RegisterSPForwardByName #define MF_RegisterSPForwardByName g_fn_RegisterSPForwardByName
@ -2149,4 +2163,5 @@ void Mem_Deallocator(const char *sourceFile, const unsigned int sourceLine, cons
#define realloc(ptr,sz) Mem_Reallocator(__FILE__,__LINE__,__FUNCTION__,m_alloc_realloc,sz,ptr) #define realloc(ptr,sz) Mem_Reallocator(__FILE__,__LINE__,__FUNCTION__,m_alloc_realloc,sz,ptr)
#define free(ptr) Mem_Deallocator(__FILE__,__LINE__,__FUNCTION__,m_alloc_free,ptr) #define free(ptr) Mem_Deallocator(__FILE__,__LINE__,__FUNCTION__,m_alloc_free,ptr)
#endif // #ifndef __AMXXMODULE_H__ #endif // #ifndef __AMXXMODULE_H__

Binary file not shown.

View File

@ -31,26 +31,21 @@
* version. * version.
*/ */
#include <stdarg.h>
#include "pgsql_amx.h" #include "pgsql_amx.h"
#include "amxxmodule.h" #include "amxxmodule.h"
CVector<SQLResult*> Results; CVector<SQLResult*> Results;
CVector<SQL*> DBList; CVector<SQL*> DBList;
int sql_exists(const char* host,const char* user,const char* pass,const char* dbase) { void SqlError(AMX *amx, const char *fmt, ...)
unsigned int i = 0; {
int id = 0; va_list p;
for (i=0; i<=DBList.size(); i++) { va_start(p,fmt);
id++; static char buf[512];
if ((DBList[i]->Host.compare(host) == 0) && vsprintf(buf, fmt, p);
(DBList[i]->Username.compare(user) == 0) && va_end(p);
(DBList[i]->Password.compare(pass) == 0) && MF_Log("SQL Error: %s (plugin \"%s\" line %d)", buf, MF_GetScriptName(MF_FindScriptByAmx(amx)), amx->curline); \
(DBList[i]->Database.compare(dbase) == 0) &&
(!DBList[i]->isFree)) {
return id;
}
}
return -1;
} }
// /////////////////////////////// // ///////////////////////////////
@ -69,14 +64,11 @@ static cell AMX_NATIVE_CALL sql_connect(AMX *amx, cell *params) // 6 param
i = 0; i = 0;
if (!strlen(host) || !strlen(user) || !strlen(dbname)) { if (!strlen(host) || !strlen(user) || !strlen(dbname)) {
MF_RaiseAmxError(amx, AMX_ERR_NATIVE); SqlError(amx, "Could not connect");
return -1; return -1;
} }
int id = sql_exists(host,user,pass,dbname); int id = -1;
if (id > 0)
return id;
SQL *c=NULL; SQL *c=NULL;
@ -113,7 +105,7 @@ static cell AMX_NATIVE_CALL sql_error(AMX *amx, cell *params) // 3 params
unsigned int id = params[1]-1; unsigned int id = params[1]-1;
if (id >= DBList.size() || DBList[id]->isFree) if (id >= DBList.size() || DBList[id]->isFree)
{ {
MF_RaiseAmxError(amx, AMX_ERR_NATIVE); SqlError(amx, "Invalid DB handle: %d", id);
return 0; return 0;
} }
@ -143,8 +135,7 @@ static cell AMX_NATIVE_CALL sql_query(AMX *amx, cell *params) // 2 params
unsigned int id = params[1]-1; unsigned int id = params[1]-1;
if (id >= DBList.size() || DBList[id]->isFree) { if (id >= DBList.size() || DBList[id]->isFree) {
MF_Log("Invalid Database Handle %d", id); SqlError(amx, "Invalid database handle %d", id);
MF_RaiseAmxError(amx, AMX_ERR_NATIVE);
return -1; return -1;
} }
@ -165,10 +156,14 @@ static cell AMX_NATIVE_CALL sql_nextrow(AMX *amx, cell *params) // 1 param
{ {
unsigned int id = params[1]-1; unsigned int id = params[1]-1;
if (id == -1)
{
return 0;
}
if (id >= Results.size() || Results[id]->isFree) if (id >= Results.size() || Results[id]->isFree)
{ {
MF_Log("Invalid result handle %d", id); SqlError(amx, "Invalid result handle %d", id);
MF_RaiseAmxError(amx, AMX_ERR_NATIVE);
return 0; return 0;
} }
@ -183,10 +178,11 @@ static cell AMX_NATIVE_CALL sql_nextrow(AMX *amx, cell *params) // 1 param
// - close connection // - close connection
static cell AMX_NATIVE_CALL sql_close(AMX *amx, cell *params) // 1 param static cell AMX_NATIVE_CALL sql_close(AMX *amx, cell *params) // 1 param
{ {
unsigned int id = params[1]-1; cell *addr = MF_GetAmxAddr(amx, params[1]);
unsigned int id = (*addr)-1;
if (id >= DBList.size() || DBList[id]->isFree) { if (id >= DBList.size() || DBList[id]->isFree) {
MF_Log("Invalid Database Handle %d", id); SqlError(amx, "Invalid database handle %d", id);
MF_RaiseAmxError(amx, AMX_ERR_NATIVE);
return 0; return 0;
} }
@ -194,6 +190,8 @@ static cell AMX_NATIVE_CALL sql_close(AMX *amx, cell *params) // 1 param
sql->Disconnect(); sql->Disconnect();
*addr = 0;
return 1; return 1;
} }
@ -207,8 +205,7 @@ static cell AMX_NATIVE_CALL sql_getfield(AMX *amx, cell *params) // 2-4 params
if (id >= Results.size() || Results[id]->isFree) if (id >= Results.size() || Results[id]->isFree)
{ {
MF_Log("Invalid result handle %d", id); SqlError(amx, "Invalid result handle %d", id);
MF_RaiseAmxError(amx, AMX_ERR_NATIVE);
return 0; return 0;
} }
@ -252,8 +249,7 @@ static cell AMX_NATIVE_CALL sql_getresult(AMX *amx, cell *params) // 4 params
if (id >= Results.size() || Results[id]->isFree) if (id >= Results.size() || Results[id]->isFree)
{ {
MF_Log("Invalid result handle %d", id); SqlError(amx, "Invalid result handle %d", id);
MF_RaiseAmxError(amx, AMX_ERR_NATIVE);
return 0; return 0;
} }
@ -291,12 +287,15 @@ static cell AMX_NATIVE_CALL sql_getresult(AMX *amx, cell *params) // 4 params
static cell AMX_NATIVE_CALL sql_free_result(AMX *amx, cell *params) static cell AMX_NATIVE_CALL sql_free_result(AMX *amx, cell *params)
{ {
unsigned int id = params[1]-1; cell *addr = MF_GetAmxAddr(amx, params[1]);
unsigned int id = (*addr)-1;
if (id == -1)
return 0;
if (id >= Results.size() || Results[id]->isFree) if (id >= Results.size() || Results[id]->isFree)
{ {
MF_Log("Invalid result handle %d", id); SqlError(amx, "Invalid result handle %d", id);
MF_RaiseAmxError(amx, AMX_ERR_NATIVE);
return 0; return 0;
} }
@ -304,6 +303,8 @@ static cell AMX_NATIVE_CALL sql_free_result(AMX *amx, cell *params)
Result->FreeResult(); Result->FreeResult();
*addr = 0;
return 1; return 1;
} }
@ -311,6 +312,9 @@ static cell AMX_NATIVE_CALL sql_num_rows(AMX *amx, cell *params)
{ {
unsigned int id = params[1]-1; unsigned int id = params[1]-1;
if (id == -1)
return 0;
if (id >= Results.size() || Results[id]->isFree) if (id >= Results.size() || Results[id]->isFree)
{ {
MF_Log("Invalid result handle %d", id); MF_Log("Invalid result handle %d", id);

View File

@ -26,6 +26,9 @@ SQLResult::SQLResult()
{ {
isFree = true; isFree = true;
RowCount = 0; RowCount = 0;
Fields.clear();
res = NULL;
row = 0;
} }
SQLResult::~SQLResult() SQLResult::~SQLResult()
@ -106,14 +109,6 @@ int SQL::Query(const char *query)
return -1; return -1;
} }
SQLResult *p = new SQLResult;
int ret = p->Query(this, query);
if (ret < 1)
{
delete p;
return ret;
}
unsigned int i = 0; unsigned int i = 0;
int id = -1; int id = -1;
@ -126,14 +121,34 @@ int SQL::Query(const char *query)
} }
if (id < 0) { if (id < 0) {
SQLResult *p = new SQLResult;
int ret = p->Query(this, query);
if (ret != 0)
{
delete p;
if (ret == -1)
return 0;
else
return -1;
} else {
Results.push_back(p); Results.push_back(p);
return Results.size(); return Results.size();
}
} else { } else {
SQLResult *r = Results[id]; SQLResult *r = Results[id];
Results[id] = p; int ret = Results[id]->Query(this, query);
delete r; if (ret != 0)
{
if (ret == -1)
return 0;
else
return -1;
} else {
return (id + 1); return (id + 1);
} }
}
} }
int SQLResult::Query(SQL *cn, const char *query) int SQLResult::Query(SQL *cn, const char *query)
@ -154,7 +169,7 @@ int SQLResult::Query(SQL *cn, const char *query)
RowCount = PQntuples(res); RowCount = PQntuples(res);
if (RowCount < 1) if (RowCount < 1)
return 0; return -1;
int i = 0; int i = 0;
const char *fld; const char *fld;
@ -164,7 +179,7 @@ int SQLResult::Query(SQL *cn, const char *query)
Fields.push_back(fld); Fields.push_back(fld);
} }
return 1; return 0;
} }
bool SQLResult::Nextrow() bool SQLResult::Nextrow()
@ -189,6 +204,9 @@ void SQLResult::FreeResult()
PQclear(res); PQclear(res);
Fields.clear(); Fields.clear();
res = 0;
row = 0;
isFree = true;
} }
const char *SQLResult::GetField(unsigned int field) const char *SQLResult::GetField(unsigned int field)

View File

@ -43,6 +43,7 @@
OutputFile=".\Release/pgsql_amxx.dll" OutputFile=".\Release/pgsql_amxx.dll"
LinkIncremental="1" LinkIncremental="1"
SuppressStartupBanner="TRUE" SuppressStartupBanner="TRUE"
IgnoreDefaultLibraryNames="LIBCMT, LIBC"
ModuleDefinitionFile="" ModuleDefinitionFile=""
ProgramDatabaseFile=".\Release/pgsql.pdb" ProgramDatabaseFile=".\Release/pgsql.pdb"
ImportLibrary=".\Release/pgsql.lib" ImportLibrary=".\Release/pgsql.lib"
@ -89,7 +90,7 @@
Optimization="0" Optimization="0"
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;PGSQL_EXPORTS" PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;PGSQL_EXPORTS"
BasicRuntimeChecks="3" BasicRuntimeChecks="3"
RuntimeLibrary="1" RuntimeLibrary="0"
UsePrecompiledHeader="2" UsePrecompiledHeader="2"
PrecompiledHeaderFile=".\Debug/pgsql.pch" PrecompiledHeaderFile=".\Debug/pgsql.pch"
AssemblerListingLocation=".\Debug/" AssemblerListingLocation=".\Debug/"
@ -103,7 +104,7 @@
Name="VCCustomBuildTool"/> Name="VCCustomBuildTool"/>
<Tool <Tool
Name="VCLinkerTool" Name="VCLinkerTool"
AdditionalDependencies="wsock32.lib libpq.lib" AdditionalDependencies="wsock32.lib lib\libpq.lib"
OutputFile="Debug/pgsql_amxx.dll" OutputFile="Debug/pgsql_amxx.dll"
LinkIncremental="1" LinkIncremental="1"
SuppressStartupBanner="TRUE" SuppressStartupBanner="TRUE"

View File

@ -15,6 +15,7 @@
$PROJECT = "sockets_amxx"; $PROJECT = "sockets_amxx";
$sdk = "../hlsdk/SourceCode"; $sdk = "../hlsdk/SourceCode";
$mm = "../metamod/metamod"; $mm = "../metamod/metamod";
$gccf = "gcc";
@CPP_SOURCE_FILES = ("sockets.cpp", "amxxmodule.cpp"); @CPP_SOURCE_FILES = ("sockets.cpp", "amxxmodule.cpp");
@ -45,7 +46,7 @@ while ($cmd = shift)
} }
} }
$gcc = `gcc --version`; $gcc = `$gccf --version`;
if ($gcc =~ /2\.9/) if ($gcc =~ /2\.9/)
{ {
$OPT{"opt"} .= " -malign-loops=2 -malign-jumps=2 -malign-functions=2"; $OPT{"opt"} .= " -malign-loops=2 -malign-jumps=2 -malign-functions=2";
@ -134,11 +135,11 @@ for ($i=0; $i<=$#CPP_SOURCE_FILES; $i++)
$ofile = $file; $ofile = $file;
$ofile =~ s/\.cpp/\.o/; $ofile =~ s/\.cpp/\.o/;
$ofile = "$outdir/$ofile"; $ofile = "$outdir/$ofile";
$gcc = "gcc $cflags -Dstrcmpi=strcasecmp -fPIC $inc -c $file -o $ofile"; $gcc = "$gccf $cflags -Dstrcmpi=strcasecmp -fPIC $inc -c $file -o $ofile";
if (-e $ofile) if (-e $ofile)
{ {
$file_time = (stat($file))[9]; $file_time = (stat($file))[9];
$ofile_time = (stat($file))[9]; $ofile_time = (stat($ofile))[9];
if ($file_time > $ofile_time) if ($file_time > $ofile_time)
{ {
print "$gcc\n"; print "$gcc\n";
@ -160,7 +161,7 @@ for ($i=0; $i<=$#CPP_SOURCE_FILES; $i++)
if (-e $ofile) if (-e $ofile)
{ {
$file_time = (stat($file))[9]; $file_time = (stat($file))[9];
$ofile_time = (stat($file))[9]; $ofile_time = (stat($ofile))[9];
if ($file_time > $ofile_time) if ($file_time > $ofile_time)
{ {
print "$gcc\n"; print "$gcc\n";
@ -172,6 +173,6 @@ for ($i=0; $i<=$#CPP_SOURCE_FILES; $i++)
} }
} }
$gcc = "gcc $cflags -shared -ldl -lm @LINK -o $outdir/$bin"; $gcc = "$gccf $cflags -shared -ldl -lm @LINK -o $outdir/$bin";
print "$gcc\n"; print "$gcc\n";
`$gcc`; `$gcc`;

View File

@ -2477,6 +2477,8 @@ PFN_CELL_TO_REAL g_fn_CellToReal;
PFN_REGISTER_SPFORWARD g_fn_RegisterSPForward; PFN_REGISTER_SPFORWARD g_fn_RegisterSPForward;
PFN_REGISTER_SPFORWARD_BYNAME g_fn_RegisterSPForwardByName; PFN_REGISTER_SPFORWARD_BYNAME g_fn_RegisterSPForwardByName;
PFN_UNREGISTER_SPFORWARD g_fn_UnregisterSPForward; PFN_UNREGISTER_SPFORWARD g_fn_UnregisterSPForward;
PFN_MERGEDEFINITION_FILE g_fn_MergeDefinition_File;
PFN_AMX_FINDNATIVE g_fn_AmxFindNative;
// *** Exports *** // *** Exports ***
C_DLLEXPORT int AMXX_Query(int *interfaceVersion, amxx_module_info_s *moduleInfo) C_DLLEXPORT int AMXX_Query(int *interfaceVersion, amxx_module_info_s *moduleInfo)
@ -2520,6 +2522,7 @@ C_DLLEXPORT int AMXX_Attach(PFN_REQ_FNPTR reqFnptrFunc)
REQFUNC("PrintSrvConsole", g_fn_PrintSrvConsole, PFN_PRINT_SRVCONSOLE); REQFUNC("PrintSrvConsole", g_fn_PrintSrvConsole, PFN_PRINT_SRVCONSOLE);
REQFUNC("GetModname", g_fn_GetModname, PFN_GET_MODNAME); REQFUNC("GetModname", g_fn_GetModname, PFN_GET_MODNAME);
REQFUNC("Log", g_fn_Log, PFN_LOG); REQFUNC("Log", g_fn_Log, PFN_LOG);
REQFUNC("MergeDefinitionFile", g_fn_MergeDefinition_File, PFN_MERGEDEFINITION_FILE);
// Amx scripts // Amx scripts
REQFUNC("GetAmxScript", g_fn_GetAmxScript, PFN_GET_AMXSCRIPT); REQFUNC("GetAmxScript", g_fn_GetAmxScript, PFN_GET_AMXSCRIPT);
@ -2540,6 +2543,7 @@ C_DLLEXPORT int AMXX_Attach(PFN_REQ_FNPTR reqFnptrFunc)
REQFUNC("amx_Execv", g_fn_AmxExecv, PFN_AMX_EXECV); REQFUNC("amx_Execv", g_fn_AmxExecv, PFN_AMX_EXECV);
REQFUNC("amx_FindPublic", g_fn_AmxFindPublic, PFN_AMX_FINDPUBLIC); REQFUNC("amx_FindPublic", g_fn_AmxFindPublic, PFN_AMX_FINDPUBLIC);
REQFUNC("amx_Allot", g_fn_AmxAllot, PFN_AMX_ALLOT); REQFUNC("amx_Allot", g_fn_AmxAllot, PFN_AMX_ALLOT);
REQFUNC("amx_FindNative", g_fn_AmxFindNative, PFN_AMX_FINDNATIVE);
// Natives / Forwards // Natives / Forwards
REQFUNC("AddNatives", g_fn_AddNatives, PFN_ADD_NATIVES); REQFUNC("AddNatives", g_fn_AddNatives, PFN_ADD_NATIVES);

View File

@ -240,6 +240,14 @@ enum {
AMX_ERR_DOMAIN, /* domain error, expression result does not fit in range */ AMX_ERR_DOMAIN, /* domain error, expression result does not fit in range */
}; };
#if !defined AMX_NO_ALIGN
#if defined __linux__
#pragma pack() /* reset default packing */
#else
#pragma pack(pop) /* reset previous packing */
#endif
#endif
// ***** declare functions ***** // ***** declare functions *****
@ -1947,6 +1955,7 @@ typedef int (*PFN_AMX_EXEC) (AMX* /*amx*/, cell* /*return val*/, int /*in
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*/, char* /*func name*/, int* /*index*/);
typedef int (*PFN_AMX_FINDNATIVE) (AMX* /*amx*/, char* /*func name*/, int* /*index*/);
typedef int (*PFN_LOAD_AMXSCRIPT) (AMX* /*amx*/, void** /*code*/, const char* /*path*/, char[64] /*error info*/); typedef int (*PFN_LOAD_AMXSCRIPT) (AMX* /*amx*/, void** /*code*/, const char* /*path*/, char[64] /*error info*/);
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*/);
@ -1954,6 +1963,7 @@ typedef REAL (*PFN_CELL_TO_REAL) (cell /*x*/);
typedef int (*PFN_REGISTER_SPFORWARD) (AMX * /*amx*/, int /*func*/, ... /*params*/); typedef int (*PFN_REGISTER_SPFORWARD) (AMX * /*amx*/, int /*func*/, ... /*params*/);
typedef int (*PFN_REGISTER_SPFORWARD_BYNAME) (AMX * /*amx*/, const char * /*funcName*/, ... /*params*/); typedef int (*PFN_REGISTER_SPFORWARD_BYNAME) (AMX * /*amx*/, const char * /*funcName*/, ... /*params*/);
typedef void (*PFN_UNREGISTER_SPFORWARD) (int /*id*/); typedef void (*PFN_UNREGISTER_SPFORWARD) (int /*id*/);
typedef void (*PFN_MERGEDEFINITION_FILE) (const char * /*filename*/);
extern PFN_ADD_NATIVES g_fn_AddNatives; extern PFN_ADD_NATIVES g_fn_AddNatives;
extern PFN_BUILD_PATHNAME g_fn_BuildPathname; extern PFN_BUILD_PATHNAME g_fn_BuildPathname;
@ -2005,6 +2015,8 @@ extern PFN_CELL_TO_REAL g_fn_CellToReal;
extern PFN_REGISTER_SPFORWARD g_fn_RegisterSPForward; extern PFN_REGISTER_SPFORWARD g_fn_RegisterSPForward;
extern PFN_REGISTER_SPFORWARD_BYNAME g_fn_RegisterSPForwardByName; extern PFN_REGISTER_SPFORWARD_BYNAME g_fn_RegisterSPForwardByName;
extern PFN_UNREGISTER_SPFORWARD g_fn_UnregisterSPForward; extern PFN_UNREGISTER_SPFORWARD g_fn_UnregisterSPForward;
extern PFN_MERGEDEFINITION_FILE g_fn_MergeDefinition_File;
extern PFN_AMX_FINDNATIVE g_fn_AmxFindNative;
#ifdef MAY_NEVER_BE_DEFINED #ifdef MAY_NEVER_BE_DEFINED
// Function prototypes for intellisense and similar systems // Function prototypes for intellisense and similar systems
@ -2098,8 +2110,10 @@ void MF_Log(const char *fmt, ...);
#define MF_AmxExecv g_fn_AmxExecv #define MF_AmxExecv g_fn_AmxExecv
#define MF_AmxFindPublic g_fn_AmxFindPublic #define MF_AmxFindPublic g_fn_AmxFindPublic
#define MF_AmxAllot g_fn_AmxAllot #define MF_AmxAllot g_fn_AmxAllot
#define MF_AmxFindNative g_fn_AmxFindNative
#define MF_LoadAmxScript g_fn_LoadAmxScript #define MF_LoadAmxScript g_fn_LoadAmxScript
#define MF_UnloadAmxScript g_fn_UnloadAmxScript #define MF_UnloadAmxScript g_fn_UnloadAmxScript
#define MF_MergeDefinitionFile g_fn_MergeDefinition_File
#define amx_ctof g_fn_CellToReal #define amx_ctof g_fn_CellToReal
#define amx_ftoc g_fn_RealToCell #define amx_ftoc g_fn_RealToCell
#define MF_RegisterSPForwardByName g_fn_RegisterSPForwardByName #define MF_RegisterSPForwardByName g_fn_RegisterSPForwardByName
@ -2149,4 +2163,5 @@ void Mem_Deallocator(const char *sourceFile, const unsigned int sourceLine, cons
#define realloc(ptr,sz) Mem_Reallocator(__FILE__,__LINE__,__FUNCTION__,m_alloc_realloc,sz,ptr) #define realloc(ptr,sz) Mem_Reallocator(__FILE__,__LINE__,__FUNCTION__,m_alloc_realloc,sz,ptr)
#define free(ptr) Mem_Deallocator(__FILE__,__LINE__,__FUNCTION__,m_alloc_free,ptr) #define free(ptr) Mem_Deallocator(__FILE__,__LINE__,__FUNCTION__,m_alloc_free,ptr)
#endif // #ifndef __AMXXMODULE_H__ #endif // #ifndef __AMXXMODULE_H__

View File

@ -15,6 +15,7 @@
$PROJECT = "tfcx_amxx"; $PROJECT = "tfcx_amxx";
$sdk = "../../../hlsdk/SourceCode"; $sdk = "../../../hlsdk/SourceCode";
$mm = "../../../metamod/metamod"; $mm = "../../../metamod/metamod";
$gccf = "gcc";
@CPP_SOURCE_FILES = ("CMisc.cpp", "CRank.cpp", "NBase.cpp", "NRank.cpp", "Utils.cpp", "moduleconfig.cpp", "usermsg.cpp", "amxxmodule.cpp"); @CPP_SOURCE_FILES = ("CMisc.cpp", "CRank.cpp", "NBase.cpp", "NRank.cpp", "Utils.cpp", "moduleconfig.cpp", "usermsg.cpp", "amxxmodule.cpp");
@ -45,7 +46,7 @@ while ($cmd = shift)
} }
} }
$gcc = `gcc --version`; $gcc = `$gccf --version`;
if ($gcc =~ /2\.9/) if ($gcc =~ /2\.9/)
{ {
$OPT{"opt"} .= " -malign-loops=2 -malign-jumps=2 -malign-functions=2"; $OPT{"opt"} .= " -malign-loops=2 -malign-jumps=2 -malign-functions=2";
@ -134,11 +135,11 @@ for ($i=0; $i<=$#CPP_SOURCE_FILES; $i++)
$ofile = $file; $ofile = $file;
$ofile =~ s/\.cpp/\.o/; $ofile =~ s/\.cpp/\.o/;
$ofile = "$outdir/$ofile"; $ofile = "$outdir/$ofile";
$gcc = "gcc $cflags -Dstrcmpi=strcasecmp -fPIC $inc -c $file -o $ofile"; $gcc = "$gccf $cflags -Dstrcmpi=strcasecmp -fPIC $inc -c $file -o $ofile";
if (-e $ofile) if (-e $ofile)
{ {
$file_time = (stat($file))[9]; $file_time = (stat($file))[9];
$ofile_time = (stat($file))[9]; $ofile_time = (stat($ofile))[9];
if ($file_time > $ofile_time) if ($file_time > $ofile_time)
{ {
print "$gcc\n"; print "$gcc\n";
@ -160,7 +161,7 @@ for ($i=0; $i<=$#CPP_SOURCE_FILES; $i++)
if (-e $ofile) if (-e $ofile)
{ {
$file_time = (stat($file))[9]; $file_time = (stat($file))[9];
$ofile_time = (stat($file))[9]; $ofile_time = (stat($ofile))[9];
if ($file_time > $ofile_time) if ($file_time > $ofile_time)
{ {
print "$gcc\n"; print "$gcc\n";
@ -172,6 +173,6 @@ for ($i=0; $i<=$#CPP_SOURCE_FILES; $i++)
} }
} }
$gcc = "gcc $cflags -shared -ldl -lm @LINK -o $outdir/$bin"; $gcc = "$gccf $cflags -shared -ldl -lm @LINK -o $outdir/$bin";
print "$gcc\n"; print "$gcc\n";
`$gcc`; `$gcc`;

View File

@ -2477,6 +2477,8 @@ PFN_CELL_TO_REAL g_fn_CellToReal;
PFN_REGISTER_SPFORWARD g_fn_RegisterSPForward; PFN_REGISTER_SPFORWARD g_fn_RegisterSPForward;
PFN_REGISTER_SPFORWARD_BYNAME g_fn_RegisterSPForwardByName; PFN_REGISTER_SPFORWARD_BYNAME g_fn_RegisterSPForwardByName;
PFN_UNREGISTER_SPFORWARD g_fn_UnregisterSPForward; PFN_UNREGISTER_SPFORWARD g_fn_UnregisterSPForward;
PFN_MERGEDEFINITION_FILE g_fn_MergeDefinition_File;
PFN_AMX_FINDNATIVE g_fn_AmxFindNative;
// *** Exports *** // *** Exports ***
C_DLLEXPORT int AMXX_Query(int *interfaceVersion, amxx_module_info_s *moduleInfo) C_DLLEXPORT int AMXX_Query(int *interfaceVersion, amxx_module_info_s *moduleInfo)
@ -2520,6 +2522,7 @@ C_DLLEXPORT int AMXX_Attach(PFN_REQ_FNPTR reqFnptrFunc)
REQFUNC("PrintSrvConsole", g_fn_PrintSrvConsole, PFN_PRINT_SRVCONSOLE); REQFUNC("PrintSrvConsole", g_fn_PrintSrvConsole, PFN_PRINT_SRVCONSOLE);
REQFUNC("GetModname", g_fn_GetModname, PFN_GET_MODNAME); REQFUNC("GetModname", g_fn_GetModname, PFN_GET_MODNAME);
REQFUNC("Log", g_fn_Log, PFN_LOG); REQFUNC("Log", g_fn_Log, PFN_LOG);
REQFUNC("MergeDefinitionFile", g_fn_MergeDefinition_File, PFN_MERGEDEFINITION_FILE);
// Amx scripts // Amx scripts
REQFUNC("GetAmxScript", g_fn_GetAmxScript, PFN_GET_AMXSCRIPT); REQFUNC("GetAmxScript", g_fn_GetAmxScript, PFN_GET_AMXSCRIPT);
@ -2540,6 +2543,7 @@ C_DLLEXPORT int AMXX_Attach(PFN_REQ_FNPTR reqFnptrFunc)
REQFUNC("amx_Execv", g_fn_AmxExecv, PFN_AMX_EXECV); REQFUNC("amx_Execv", g_fn_AmxExecv, PFN_AMX_EXECV);
REQFUNC("amx_FindPublic", g_fn_AmxFindPublic, PFN_AMX_FINDPUBLIC); REQFUNC("amx_FindPublic", g_fn_AmxFindPublic, PFN_AMX_FINDPUBLIC);
REQFUNC("amx_Allot", g_fn_AmxAllot, PFN_AMX_ALLOT); REQFUNC("amx_Allot", g_fn_AmxAllot, PFN_AMX_ALLOT);
REQFUNC("amx_FindNative", g_fn_AmxFindNative, PFN_AMX_FINDNATIVE);
// Natives / Forwards // Natives / Forwards
REQFUNC("AddNatives", g_fn_AddNatives, PFN_ADD_NATIVES); REQFUNC("AddNatives", g_fn_AddNatives, PFN_ADD_NATIVES);

View File

@ -240,6 +240,14 @@ enum {
AMX_ERR_DOMAIN, /* domain error, expression result does not fit in range */ AMX_ERR_DOMAIN, /* domain error, expression result does not fit in range */
}; };
#if !defined AMX_NO_ALIGN
#if defined __linux__
#pragma pack() /* reset default packing */
#else
#pragma pack(pop) /* reset previous packing */
#endif
#endif
// ***** declare functions ***** // ***** declare functions *****
@ -1947,6 +1955,7 @@ typedef int (*PFN_AMX_EXEC) (AMX* /*amx*/, cell* /*return val*/, int /*in
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*/, char* /*func name*/, int* /*index*/);
typedef int (*PFN_AMX_FINDNATIVE) (AMX* /*amx*/, char* /*func name*/, int* /*index*/);
typedef int (*PFN_LOAD_AMXSCRIPT) (AMX* /*amx*/, void** /*code*/, const char* /*path*/, char[64] /*error info*/); typedef int (*PFN_LOAD_AMXSCRIPT) (AMX* /*amx*/, void** /*code*/, const char* /*path*/, char[64] /*error info*/);
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*/);
@ -1954,6 +1963,7 @@ typedef REAL (*PFN_CELL_TO_REAL) (cell /*x*/);
typedef int (*PFN_REGISTER_SPFORWARD) (AMX * /*amx*/, int /*func*/, ... /*params*/); typedef int (*PFN_REGISTER_SPFORWARD) (AMX * /*amx*/, int /*func*/, ... /*params*/);
typedef int (*PFN_REGISTER_SPFORWARD_BYNAME) (AMX * /*amx*/, const char * /*funcName*/, ... /*params*/); typedef int (*PFN_REGISTER_SPFORWARD_BYNAME) (AMX * /*amx*/, const char * /*funcName*/, ... /*params*/);
typedef void (*PFN_UNREGISTER_SPFORWARD) (int /*id*/); typedef void (*PFN_UNREGISTER_SPFORWARD) (int /*id*/);
typedef void (*PFN_MERGEDEFINITION_FILE) (const char * /*filename*/);
extern PFN_ADD_NATIVES g_fn_AddNatives; extern PFN_ADD_NATIVES g_fn_AddNatives;
extern PFN_BUILD_PATHNAME g_fn_BuildPathname; extern PFN_BUILD_PATHNAME g_fn_BuildPathname;
@ -2005,6 +2015,8 @@ extern PFN_CELL_TO_REAL g_fn_CellToReal;
extern PFN_REGISTER_SPFORWARD g_fn_RegisterSPForward; extern PFN_REGISTER_SPFORWARD g_fn_RegisterSPForward;
extern PFN_REGISTER_SPFORWARD_BYNAME g_fn_RegisterSPForwardByName; extern PFN_REGISTER_SPFORWARD_BYNAME g_fn_RegisterSPForwardByName;
extern PFN_UNREGISTER_SPFORWARD g_fn_UnregisterSPForward; extern PFN_UNREGISTER_SPFORWARD g_fn_UnregisterSPForward;
extern PFN_MERGEDEFINITION_FILE g_fn_MergeDefinition_File;
extern PFN_AMX_FINDNATIVE g_fn_AmxFindNative;
#ifdef MAY_NEVER_BE_DEFINED #ifdef MAY_NEVER_BE_DEFINED
// Function prototypes for intellisense and similar systems // Function prototypes for intellisense and similar systems
@ -2098,8 +2110,10 @@ void MF_Log(const char *fmt, ...);
#define MF_AmxExecv g_fn_AmxExecv #define MF_AmxExecv g_fn_AmxExecv
#define MF_AmxFindPublic g_fn_AmxFindPublic #define MF_AmxFindPublic g_fn_AmxFindPublic
#define MF_AmxAllot g_fn_AmxAllot #define MF_AmxAllot g_fn_AmxAllot
#define MF_AmxFindNative g_fn_AmxFindNative
#define MF_LoadAmxScript g_fn_LoadAmxScript #define MF_LoadAmxScript g_fn_LoadAmxScript
#define MF_UnloadAmxScript g_fn_UnloadAmxScript #define MF_UnloadAmxScript g_fn_UnloadAmxScript
#define MF_MergeDefinitionFile g_fn_MergeDefinition_File
#define amx_ctof g_fn_CellToReal #define amx_ctof g_fn_CellToReal
#define amx_ftoc g_fn_RealToCell #define amx_ftoc g_fn_RealToCell
#define MF_RegisterSPForwardByName g_fn_RegisterSPForwardByName #define MF_RegisterSPForwardByName g_fn_RegisterSPForwardByName
@ -2149,4 +2163,5 @@ void Mem_Deallocator(const char *sourceFile, const unsigned int sourceLine, cons
#define realloc(ptr,sz) Mem_Reallocator(__FILE__,__LINE__,__FUNCTION__,m_alloc_realloc,sz,ptr) #define realloc(ptr,sz) Mem_Reallocator(__FILE__,__LINE__,__FUNCTION__,m_alloc_realloc,sz,ptr)
#define free(ptr) Mem_Deallocator(__FILE__,__LINE__,__FUNCTION__,m_alloc_free,ptr) #define free(ptr) Mem_Deallocator(__FILE__,__LINE__,__FUNCTION__,m_alloc_free,ptr)
#endif // #ifndef __AMXXMODULE_H__ #endif // #ifndef __AMXXMODULE_H__

View File

@ -326,7 +326,7 @@ void OnAmxxAttach() {
MF_AddNatives( stats_Natives ); MF_AddNatives( stats_Natives );
MF_AddNatives( base_Natives ); MF_AddNatives( base_Natives );
const char* path = get_localinfo("tfcstats_score","addons/amxx/data/tfcstats.amxx"); const char* path = get_localinfo("tfcstats_score","addons/amxmodx/data/tfcstats.amxx");
if ( path && *path ) if ( path && *path )
{ {
char error[128]; char error[128];
@ -334,7 +334,7 @@ void OnAmxxAttach() {
} }
if ( !g_rank.begin() ) if ( !g_rank.begin() )
{ {
g_rank.loadRank( MF_BuildPathname("%s",get_localinfo("tfcstats","addons/amxx/data/tfcstats.dat") ) ); g_rank.loadRank( MF_BuildPathname("%s",get_localinfo("tfcstats","addons/amxmodx/data/tfcstats.dat") ) );
} }
// set default PrivateData offsets // set default PrivateData offsets

View File

@ -15,6 +15,7 @@
$PROJECT = "tsx_amxx"; $PROJECT = "tsx_amxx";
$sdk = "../../../hlsdk/SourceCode"; $sdk = "../../../hlsdk/SourceCode";
$mm = "../../../metamod/metamod"; $mm = "../../../metamod/metamod";
$gccf = "gcc";
@CPP_SOURCE_FILES = ("CMisc.cpp", "CRank.cpp", "NBase.cpp", "NRank.cpp", "Utils.cpp", "moduleconfig.cpp", "usermsg.cpp", "amxxmodule.cpp"); @CPP_SOURCE_FILES = ("CMisc.cpp", "CRank.cpp", "NBase.cpp", "NRank.cpp", "Utils.cpp", "moduleconfig.cpp", "usermsg.cpp", "amxxmodule.cpp");
@ -45,7 +46,7 @@ while ($cmd = shift)
} }
} }
$gcc = `gcc --version`; $gcc = `$gccf --version`;
if ($gcc =~ /2\.9/) if ($gcc =~ /2\.9/)
{ {
$OPT{"opt"} .= " -malign-loops=2 -malign-jumps=2 -malign-functions=2"; $OPT{"opt"} .= " -malign-loops=2 -malign-jumps=2 -malign-functions=2";
@ -134,11 +135,11 @@ for ($i=0; $i<=$#CPP_SOURCE_FILES; $i++)
$ofile = $file; $ofile = $file;
$ofile =~ s/\.cpp/\.o/; $ofile =~ s/\.cpp/\.o/;
$ofile = "$outdir/$ofile"; $ofile = "$outdir/$ofile";
$gcc = "gcc $cflags -Dstrcmpi=strcasecmp -fPIC $inc -c $file -o $ofile"; $gcc = "$gccf $cflags -Dstrcmpi=strcasecmp -fPIC $inc -c $file -o $ofile";
if (-e $ofile) if (-e $ofile)
{ {
$file_time = (stat($file))[9]; $file_time = (stat($file))[9];
$ofile_time = (stat($file))[9]; $ofile_time = (stat($ofile))[9];
if ($file_time > $ofile_time) if ($file_time > $ofile_time)
{ {
print "$gcc\n"; print "$gcc\n";
@ -160,7 +161,7 @@ for ($i=0; $i<=$#CPP_SOURCE_FILES; $i++)
if (-e $ofile) if (-e $ofile)
{ {
$file_time = (stat($file))[9]; $file_time = (stat($file))[9];
$ofile_time = (stat($file))[9]; $ofile_time = (stat($ofile))[9];
if ($file_time > $ofile_time) if ($file_time > $ofile_time)
{ {
print "$gcc\n"; print "$gcc\n";
@ -172,6 +173,6 @@ for ($i=0; $i<=$#CPP_SOURCE_FILES; $i++)
} }
} }
$gcc = "gcc $cflags -shared -ldl -lm @LINK -o $outdir/$bin"; $gcc = "$gccf $cflags -shared -ldl -lm @LINK -o $outdir/$bin";
print "$gcc\n"; print "$gcc\n";
`$gcc`; `$gcc`;

View File

@ -2477,6 +2477,8 @@ PFN_CELL_TO_REAL g_fn_CellToReal;
PFN_REGISTER_SPFORWARD g_fn_RegisterSPForward; PFN_REGISTER_SPFORWARD g_fn_RegisterSPForward;
PFN_REGISTER_SPFORWARD_BYNAME g_fn_RegisterSPForwardByName; PFN_REGISTER_SPFORWARD_BYNAME g_fn_RegisterSPForwardByName;
PFN_UNREGISTER_SPFORWARD g_fn_UnregisterSPForward; PFN_UNREGISTER_SPFORWARD g_fn_UnregisterSPForward;
PFN_MERGEDEFINITION_FILE g_fn_MergeDefinition_File;
PFN_AMX_FINDNATIVE g_fn_AmxFindNative;
// *** Exports *** // *** Exports ***
C_DLLEXPORT int AMXX_Query(int *interfaceVersion, amxx_module_info_s *moduleInfo) C_DLLEXPORT int AMXX_Query(int *interfaceVersion, amxx_module_info_s *moduleInfo)
@ -2520,6 +2522,7 @@ C_DLLEXPORT int AMXX_Attach(PFN_REQ_FNPTR reqFnptrFunc)
REQFUNC("PrintSrvConsole", g_fn_PrintSrvConsole, PFN_PRINT_SRVCONSOLE); REQFUNC("PrintSrvConsole", g_fn_PrintSrvConsole, PFN_PRINT_SRVCONSOLE);
REQFUNC("GetModname", g_fn_GetModname, PFN_GET_MODNAME); REQFUNC("GetModname", g_fn_GetModname, PFN_GET_MODNAME);
REQFUNC("Log", g_fn_Log, PFN_LOG); REQFUNC("Log", g_fn_Log, PFN_LOG);
REQFUNC("MergeDefinitionFile", g_fn_MergeDefinition_File, PFN_MERGEDEFINITION_FILE);
// Amx scripts // Amx scripts
REQFUNC("GetAmxScript", g_fn_GetAmxScript, PFN_GET_AMXSCRIPT); REQFUNC("GetAmxScript", g_fn_GetAmxScript, PFN_GET_AMXSCRIPT);
@ -2540,6 +2543,7 @@ C_DLLEXPORT int AMXX_Attach(PFN_REQ_FNPTR reqFnptrFunc)
REQFUNC("amx_Execv", g_fn_AmxExecv, PFN_AMX_EXECV); REQFUNC("amx_Execv", g_fn_AmxExecv, PFN_AMX_EXECV);
REQFUNC("amx_FindPublic", g_fn_AmxFindPublic, PFN_AMX_FINDPUBLIC); REQFUNC("amx_FindPublic", g_fn_AmxFindPublic, PFN_AMX_FINDPUBLIC);
REQFUNC("amx_Allot", g_fn_AmxAllot, PFN_AMX_ALLOT); REQFUNC("amx_Allot", g_fn_AmxAllot, PFN_AMX_ALLOT);
REQFUNC("amx_FindNative", g_fn_AmxFindNative, PFN_AMX_FINDNATIVE);
// Natives / Forwards // Natives / Forwards
REQFUNC("AddNatives", g_fn_AddNatives, PFN_ADD_NATIVES); REQFUNC("AddNatives", g_fn_AddNatives, PFN_ADD_NATIVES);

View File

@ -240,6 +240,14 @@ enum {
AMX_ERR_DOMAIN, /* domain error, expression result does not fit in range */ AMX_ERR_DOMAIN, /* domain error, expression result does not fit in range */
}; };
#if !defined AMX_NO_ALIGN
#if defined __linux__
#pragma pack() /* reset default packing */
#else
#pragma pack(pop) /* reset previous packing */
#endif
#endif
// ***** declare functions ***** // ***** declare functions *****
@ -1947,6 +1955,7 @@ typedef int (*PFN_AMX_EXEC) (AMX* /*amx*/, cell* /*return val*/, int /*in
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*/, char* /*func name*/, int* /*index*/);
typedef int (*PFN_AMX_FINDNATIVE) (AMX* /*amx*/, char* /*func name*/, int* /*index*/);
typedef int (*PFN_LOAD_AMXSCRIPT) (AMX* /*amx*/, void** /*code*/, const char* /*path*/, char[64] /*error info*/); typedef int (*PFN_LOAD_AMXSCRIPT) (AMX* /*amx*/, void** /*code*/, const char* /*path*/, char[64] /*error info*/);
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*/);
@ -1954,6 +1963,7 @@ typedef REAL (*PFN_CELL_TO_REAL) (cell /*x*/);
typedef int (*PFN_REGISTER_SPFORWARD) (AMX * /*amx*/, int /*func*/, ... /*params*/); typedef int (*PFN_REGISTER_SPFORWARD) (AMX * /*amx*/, int /*func*/, ... /*params*/);
typedef int (*PFN_REGISTER_SPFORWARD_BYNAME) (AMX * /*amx*/, const char * /*funcName*/, ... /*params*/); typedef int (*PFN_REGISTER_SPFORWARD_BYNAME) (AMX * /*amx*/, const char * /*funcName*/, ... /*params*/);
typedef void (*PFN_UNREGISTER_SPFORWARD) (int /*id*/); typedef void (*PFN_UNREGISTER_SPFORWARD) (int /*id*/);
typedef void (*PFN_MERGEDEFINITION_FILE) (const char * /*filename*/);
extern PFN_ADD_NATIVES g_fn_AddNatives; extern PFN_ADD_NATIVES g_fn_AddNatives;
extern PFN_BUILD_PATHNAME g_fn_BuildPathname; extern PFN_BUILD_PATHNAME g_fn_BuildPathname;
@ -2005,6 +2015,8 @@ extern PFN_CELL_TO_REAL g_fn_CellToReal;
extern PFN_REGISTER_SPFORWARD g_fn_RegisterSPForward; extern PFN_REGISTER_SPFORWARD g_fn_RegisterSPForward;
extern PFN_REGISTER_SPFORWARD_BYNAME g_fn_RegisterSPForwardByName; extern PFN_REGISTER_SPFORWARD_BYNAME g_fn_RegisterSPForwardByName;
extern PFN_UNREGISTER_SPFORWARD g_fn_UnregisterSPForward; extern PFN_UNREGISTER_SPFORWARD g_fn_UnregisterSPForward;
extern PFN_MERGEDEFINITION_FILE g_fn_MergeDefinition_File;
extern PFN_AMX_FINDNATIVE g_fn_AmxFindNative;
#ifdef MAY_NEVER_BE_DEFINED #ifdef MAY_NEVER_BE_DEFINED
// Function prototypes for intellisense and similar systems // Function prototypes for intellisense and similar systems
@ -2098,8 +2110,10 @@ void MF_Log(const char *fmt, ...);
#define MF_AmxExecv g_fn_AmxExecv #define MF_AmxExecv g_fn_AmxExecv
#define MF_AmxFindPublic g_fn_AmxFindPublic #define MF_AmxFindPublic g_fn_AmxFindPublic
#define MF_AmxAllot g_fn_AmxAllot #define MF_AmxAllot g_fn_AmxAllot
#define MF_AmxFindNative g_fn_AmxFindNative
#define MF_LoadAmxScript g_fn_LoadAmxScript #define MF_LoadAmxScript g_fn_LoadAmxScript
#define MF_UnloadAmxScript g_fn_UnloadAmxScript #define MF_UnloadAmxScript g_fn_UnloadAmxScript
#define MF_MergeDefinitionFile g_fn_MergeDefinition_File
#define amx_ctof g_fn_CellToReal #define amx_ctof g_fn_CellToReal
#define amx_ftoc g_fn_RealToCell #define amx_ftoc g_fn_RealToCell
#define MF_RegisterSPForwardByName g_fn_RegisterSPForwardByName #define MF_RegisterSPForwardByName g_fn_RegisterSPForwardByName
@ -2149,4 +2163,5 @@ void Mem_Deallocator(const char *sourceFile, const unsigned int sourceLine, cons
#define realloc(ptr,sz) Mem_Reallocator(__FILE__,__LINE__,__FUNCTION__,m_alloc_realloc,sz,ptr) #define realloc(ptr,sz) Mem_Reallocator(__FILE__,__LINE__,__FUNCTION__,m_alloc_realloc,sz,ptr)
#define free(ptr) Mem_Deallocator(__FILE__,__LINE__,__FUNCTION__,m_alloc_free,ptr) #define free(ptr) Mem_Deallocator(__FILE__,__LINE__,__FUNCTION__,m_alloc_free,ptr)
#endif // #ifndef __AMXXMODULE_H__ #endif // #ifndef __AMXXMODULE_H__

View File

@ -295,7 +295,7 @@ void OnAmxxAttach() {
MF_AddNatives( stats_Natives ); MF_AddNatives( stats_Natives );
MF_AddNatives( base_Natives ); MF_AddNatives( base_Natives );
const char* path = get_localinfo("tsstats_score","addons/amxx/data/tsstats.amxx"); const char* path = get_localinfo("tsstats_score","addons/amxmodx/data/tsstats.amxx");
if ( path && *path ) if ( path && *path )
{ {
char error[128]; char error[128];
@ -303,7 +303,7 @@ void OnAmxxAttach() {
} }
if ( !g_rank.begin() ) if ( !g_rank.begin() )
{ {
g_rank.loadRank( MF_BuildPathname("%s",get_localinfo("tsstats","addons/amxx/data/tsstats.dat") ) ); g_rank.loadRank( MF_BuildPathname("%s",get_localinfo("tsstats","addons/amxmodx/data/tsstats.dat") ) );
} }
} }

View File

@ -76,12 +76,12 @@ public plugin_init() {
#if defined USING_SQL #if defined USING_SQL
register_srvcmd("amx_sqladmins","adminSql") register_srvcmd("amx_sqladmins","adminSql")
register_cvar("amx_sql_table","admins")
#endif
register_cvar("amx_sql_host","127.0.0.1") register_cvar("amx_sql_host","127.0.0.1")
register_cvar("amx_sql_user","root") register_cvar("amx_sql_user","root")
register_cvar("amx_sql_pass","") register_cvar("amx_sql_pass","")
register_cvar("amx_sql_db","amx") register_cvar("amx_sql_db","amx")
register_cvar("amx_sql_table","admins")
#endif
register_concmd("amx_reloadadmins","cmdReload",ADMIN_CFG) register_concmd("amx_reloadadmins","cmdReload",ADMIN_CFG)
@ -95,8 +95,9 @@ public plugin_init() {
new configsDir[64] new configsDir[64]
get_configsdir(configsDir, 63) get_configsdir(configsDir, 63)
server_cmd("exec %s/amxx.cfg", configsDir) // Execute main configuration file server_cmd("exec %s/amxx.cfg", configsDir) // Execute main configuration file
server_cmd("exec %s/sql.cfg", configsDir)
#if defined USING_SQL #if defined USING_SQL
server_cmd("exec %s/sql.cfg;amx_sqladmins", configsDir) server_cmd("amx_sqladmins")
#else #else
format(configsDir, 63, "%s/users.ini", configsDir) format(configsDir, 63, "%s/users.ini", configsDir)
loadSettings(configsDir) // Load admins accounts loadSettings(configsDir) // Load admins accounts
@ -156,19 +157,20 @@ public adminSql() {
dbi_query(sql,"CREATE TABLE IF NOT EXISTS `%s` ( `auth` VARCHAR( 32 ) NOT NULL, `password` VARCHAR( 32 ) NOT NULL, `access` VARCHAR( 32 ) NOT NULL, `flags` VARCHAR( 32 ) NOT NULL ) COMMENT = 'AMX Mod X Admins'",table) dbi_query(sql,"CREATE TABLE IF NOT EXISTS `%s` ( `auth` VARCHAR( 32 ) NOT NULL, `password` VARCHAR( 32 ) NOT NULL, `access` VARCHAR( 32 ) NOT NULL, `flags` VARCHAR( 32 ) NOT NULL ) COMMENT = 'AMX Mod X Admins'",table)
new Result:Res = dbi_query(sql,"SELECT `auth`,`password`,`access`,`flags` FROM `%s`",table) new Result:Res = dbi_query(sql,"SELECT `auth`,`password`,`access`,`flags` FROM `%s`",table)
if (Res == RESULT_FAILED) { if (Res == RESULT_FAILED) {
dbi_error(sql,error,127) dbi_error(sql,error,127)
server_print("[AMXX] %L",LANG_SERVER,"SQL_CANT_LOAD_ADMINS",error) server_print("[AMXX] %L",LANG_SERVER,"SQL_CANT_LOAD_ADMINS",error)
dbi_free_result(Res) dbi_free_result(Res)
dbi_close(Sql) dbi_close(sql)
return PLUGIN_HANDLED return PLUGIN_HANDLED
} }
else if (Res == RESULT_NONE) { else if (Res == RESULT_NONE) {
server_print("[AMXX] %L",LANG_SERVER,"NO_ADMINS") server_print("[AMXX] %L",LANG_SERVER,"NO_ADMINS")
dbi_free_result(Res) dbi_free_result(Res)
dbi_close(Sql) dbi_close(sql)
return PLUGIN_HANDLED return PLUGIN_HANDLED
} }

View File

@ -155,8 +155,8 @@ public cmdSay(id,level,cid) {
get_user_authid(id,authid,31) get_user_authid(id,authid,31)
get_user_name(id,name,31) get_user_name(id,name,31)
userid = get_user_userid(id) userid = get_user_userid(id)
client_print(0,print_chat,"%L",LANG_PLAYER,"PRINT_LANG",name,message) client_print(0,print_chat,"(ALL) %s : %s",name,message)
console_print(id,"%L",id,"PRINT_LANG",name,message) console_print(id,"(ALL) %s : %s",name,message)
log_amx("Chat: ^"%s<%d><%s><>^" say ^"%s^"", name,userid,authid,message) log_amx("Chat: ^"%s<%d><%s><>^" say ^"%s^"", name,userid,authid,message)
log_message("^"%s<%d><%s><>^" triggered ^"amx_say^" (text ^"%s^")",name,userid,authid,message) log_message("^"%s<%d><%s><>^" triggered ^"amx_say^" (text ^"%s^")",name,userid,authid,message)
return PLUGIN_HANDLED return PLUGIN_HANDLED

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -66,7 +66,7 @@ new g_cmdMenuHelp[ MAX_CMDS_LAYERS ][] = {
/* End of Commands Menu */ /* End of Commands Menu */
#define MAX_CMDS 32 #define MAX_CMDS 32
#define MAX_CVARS 32 #define MAX_CVARS 48
new g_cmdName[MAX_CMDS*MAX_CMDS_LAYERS][32] new g_cmdName[MAX_CMDS*MAX_CMDS_LAYERS][32]
new g_cmdCmd[MAX_CMDS*MAX_CMDS_LAYERS][64] new g_cmdCmd[MAX_CMDS*MAX_CMDS_LAYERS][64]

Some files were not shown because too many files have changed in this diff Show More