1 Commits

Author SHA1 Message Date
Scott Ehlert
62e6b1c859 Tagged 0.20-TP3 2006-07-20 05:30:11 +00:00
231 changed files with 2534 additions and 13364 deletions

View File

@@ -174,7 +174,6 @@ void CSPForward::Set(int func, AMX *amx, int numParams, const ForwardParam *para
m_NumParams = numParams; m_NumParams = numParams;
memcpy((void *)m_ParamTypes, paramTypes, numParams * sizeof(ForwardParam)); memcpy((void *)m_ParamTypes, paramTypes, numParams * sizeof(ForwardParam));
m_HasFunc = true; m_HasFunc = true;
isFree = false;
} }
void CSPForward::Set(const char *funcName, AMX *amx, int numParams, const ForwardParam *paramTypes) void CSPForward::Set(const char *funcName, AMX *amx, int numParams, const ForwardParam *paramTypes)
@@ -183,13 +182,10 @@ void CSPForward::Set(const char *funcName, AMX *amx, int numParams, const Forwar
m_NumParams = numParams; m_NumParams = numParams;
memcpy((void *)m_ParamTypes, paramTypes, numParams * sizeof(ForwardParam)); memcpy((void *)m_ParamTypes, paramTypes, numParams * sizeof(ForwardParam));
m_HasFunc = (amx_FindPublic(amx, funcName, &m_Func) == AMX_ERR_NONE); m_HasFunc = (amx_FindPublic(amx, funcName, &m_Func) == AMX_ERR_NONE);
isFree = false;
} }
cell CSPForward::execute(cell *params, ForwardPreparedArray *preparedArrays) cell CSPForward::execute(cell *params, ForwardPreparedArray *preparedArrays)
{ {
if (isFree)
return 0;
const int STRINGEX_MAXLENGTH = 128; const int STRINGEX_MAXLENGTH = 128;
cell realParams[FORWARD_MAX_PARAMS]; cell realParams[FORWARD_MAX_PARAMS];
@@ -290,13 +286,11 @@ int CForwardMngr::registerSPForward(int func, AMX *amx, int numParams, const For
{ {
int retVal = (m_SPForwards.size() << 1) | 1; int retVal = (m_SPForwards.size() << 1) | 1;
CSPForward *pForward; CSPForward *pForward;
if (!m_FreeSPForwards.empty()) if (m_FreeSPForwards.size())
{ {
pForward = m_SPForwards[m_FreeSPForwards.front() >> 1]; pForward = m_SPForwards[m_FreeSPForwards.back()];
m_FreeSPForwards.pop_back();
pForward->Set(func, amx, numParams, paramTypes); pForward->Set(func, amx, numParams, paramTypes);
if (pForward->getFuncsNum() == 0)
return -1;
m_FreeSPForwards.pop();
} }
else else
{ {
@@ -304,12 +298,6 @@ int CForwardMngr::registerSPForward(int func, AMX *amx, int numParams, const For
if (!pForward) if (!pForward)
return -1; return -1;
pForward->Set(func, amx, numParams, paramTypes); pForward->Set(func, amx, numParams, paramTypes);
if (pForward->getFuncsNum() == 0)
{
return -1;
delete pForward;
}
m_SPForwards.push_back(pForward); m_SPForwards.push_back(pForward);
} }
return retVal; return retVal;
@@ -319,14 +307,11 @@ int CForwardMngr::registerSPForward(const char *funcName, AMX *amx, int numParam
{ {
int retVal = (m_SPForwards.size() << 1) | 1; int retVal = (m_SPForwards.size() << 1) | 1;
CSPForward *pForward; CSPForward *pForward;
if (!m_FreeSPForwards.empty()) if (m_FreeSPForwards.size())
{ {
retVal = m_FreeSPForwards.front(); pForward = m_SPForwards[m_FreeSPForwards.back()];
pForward = m_SPForwards[retVal>>1]; // >>1 because unregisterSPForward pushes the id which contains the sp flag m_FreeSPForwards.pop_back();
pForward->Set(funcName, amx, numParams, paramTypes); pForward->Set(funcName, amx, numParams, paramTypes);
if (pForward->getFuncsNum() == 0)
return -1;
m_FreeSPForwards.pop();
} }
else else
{ {
@@ -334,11 +319,6 @@ int CForwardMngr::registerSPForward(const char *funcName, AMX *amx, int numParam
if (!pForward) if (!pForward)
return -1; return -1;
pForward->Set(funcName, amx, numParams, paramTypes); pForward->Set(funcName, amx, numParams, paramTypes);
if (pForward->getFuncsNum() == 0)
{
delete pForward;
return -1;
}
m_SPForwards.push_back(pForward); m_SPForwards.push_back(pForward);
} }
return retVal; return retVal;
@@ -365,12 +345,6 @@ 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)
@@ -385,8 +359,7 @@ void CForwardMngr::clear()
m_Forwards.clear(); m_Forwards.clear();
m_SPForwards.clear(); m_SPForwards.clear();
while (!m_FreeSPForwards.empty()) m_FreeSPForwards.clear();
m_FreeSPForwards.pop();
m_TmpArraysNum = 0; m_TmpArraysNum = 0;
} }
@@ -397,13 +370,7 @@ bool CForwardMngr::isSPForward(int id) const
void CForwardMngr::unregisterSPForward(int id) void CForwardMngr::unregisterSPForward(int id)
{ {
//make sure the id is valid m_FreeSPForwards.push_back(id);
if ( !isIdValid(id) || m_SPForwards.at(id >> 1)->isFree )
return;
m_SPForwards.at(id >> 1)->isFree = true;
m_FreeSPForwards.push(id);
} }
int registerForward(const char *funcName, ForwardExecType et, ...) int registerForward(const char *funcName, ForwardExecType et, ...)
@@ -480,7 +447,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 (g_forwards.getParamType(id, i) == FP_FLOAT) if (params[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,12 +108,6 @@ 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
@@ -125,8 +119,6 @@ class CSPForward
AMX *m_Amx; AMX *m_Amx;
int m_Func; int m_Func;
bool m_HasFunc; bool m_HasFunc;
public:
bool isFree;
public: public:
CSPForward() { m_HasFunc = false; } CSPForward() { m_HasFunc = false; }
void Set(const char *funcName, AMX *amx, int numParams, const ForwardParam * paramTypes); void Set(const char *funcName, AMX *amx, int numParams, const ForwardParam * paramTypes);
@@ -141,19 +133,13 @@ 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
{ {
typedef CVector<CForward*> ForwardVec; typedef CVector<CForward*> ForwardVec;
typedef CVector<CSPForward*> SPForwardVec; typedef CVector<CSPForward*> SPForwardVec;
typedef CQueue<int> FreeSPVec; // Free SP Forwards typedef CVector<int> FreeSPVec; // Free SP Forwards
ForwardVec m_Forwards; ForwardVec m_Forwards;
@@ -184,7 +170,6 @@ 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

@@ -47,6 +47,15 @@
#define FFHL_VERSION 4 #define FFHL_VERSION 4
#define FFHL_MIN_VERSION 4 #define FFHL_MIN_VERSION 4
#define NEXT_PARAM() \
if (parm > paramCount) \
{ \
strcpy(outbuf, ""); \
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)); \
return outbuf; \
}
/*version history: /*version history:
* 1 (BAILOPAN) - Simplest form possible, no reverse * 1 (BAILOPAN) - Simplest form possible, no reverse
* 2 (BAILOPAN) - One language per file with full reverse * 2 (BAILOPAN) - One language per file with full reverse
@@ -341,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();
@@ -497,36 +506,153 @@ int CLangMngr::GetKeyEntry(String &key)
return -1; return -1;
} }
#define CHECK_PTR(ptr, start, bufsize) if ((ptr) - (start) >= (bufsize)) { \ const char *CLangMngr::Format(const char *src, ...)
AMXXLOG_Log("[AMXX] Buffer overflow in formatting (line %d, \"%s\")", amx->curline, g_plugins.findPluginFast(amx)->getName()); \ {
outbuf[0] = 0; \ va_list argptr;
len = 0; \ va_start(argptr, src);
return outbuf; } static char outbuf[4096];
#define CHECK_OUTPTR(offset) CHECK_PTR(outptr+offset, outbuf, sizeof(outbuf)) char *outptr = outbuf;
#define ZEROTERM(buf) buf[(sizeof(buf)/sizeof(buf[0]))-1]=0; enum State
#define NEXT_PARAM() \ {
if (parm > paramCount) \ S_Normal,
{ \ S_PercentSign,
strcpy(outbuf, ""); \ };
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)->getName()); \ State curState = S_Normal;
return outbuf; \ 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];
char *outptr = outbuf;
cell *src = get_amxaddr(amx, params[parm++]); cell *src = get_amxaddr(amx, params[parm++]);
char *outptr = outbuf;
enum State
{
S_Normal,
S_PercentSign,
};
State curState = S_Normal;
while (*src) while (*src)
{ {
if (*src == '%') if (*src == '%' && curState == S_Normal)
curState = S_PercentSign;
else if (curState == S_PercentSign)
{ {
++src;
if (*src=='L') if (*src=='L')
{ {
cell langName = params[parm]; // "en" case (langName contains the address to the string) cell langName = params[parm]; // "en" case (langName contains the address to the string)
@@ -552,14 +678,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 tmplen = 0; int len = 0;
cpLangName = get_amxstring(amx, langName, 2, tmplen); cpLangName = get_amxstring(amx, langName, 2, len);
} }
if (!cpLangName || strlen(cpLangName) < 1) if (!cpLangName || strlen(cpLangName) < 1)
cpLangName = "en"; cpLangName = "en";
int tmplen = 0; int len = 0;
NEXT_PARAM(); NEXT_PARAM();
char *key = get_amxstring(amx, params[parm++], 1, tmplen); char *key = get_amxstring(amx, params[parm++], 1, len);
const char *def = GetDef(cpLangName, key); const char *def = GetDef(cpLangName, key);
if (def == NULL) if (def == NULL)
{ {
@@ -573,8 +699,7 @@ char * CLangMngr::FormatAmxString(AMX *amx, cell *params, int parm, int &len)
} }
if (!def) if (!def)
{ {
static char buf[512]; static char buf[255];
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;
} }
@@ -584,28 +709,24 @@ char * CLangMngr::FormatAmxString(AMX *amx, cell *params, int parm, int &len)
if (*def == '%') if (*def == '%')
{ {
++def; ++def;
static char format[32]; char format[16];
format[0] = '%'; format[0] = '%';
char *ptr = format+1; char *ptr = format+1;
while (ptr-format<sizeof(format) && !isalpha(*ptr++ = *def++)) while (!isalpha(*ptr++ = *def++))
/*nothing*/; /*nothing*/;
ZEROTERM(format);
*ptr = 0; *ptr = 0;
switch ( *(ptr-1) ) switch ( *(ptr-1) )
{ {
case 's': case 's':
{ {
static char tmpString[4096]; char tmpString[256];
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 (tmpPtr-tmpString < sizeof(tmpString) && *tmpCell) while (*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':
@@ -613,22 +734,19 @@ 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':
case 'd': case 'd':
case 'c':
{ {
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:
{ {
CHECK_OUTPTR(strlen(format)+1); *outptr++ = '%';
strcpy(outptr, format); *outptr++ = *(ptr-1);
break; break;
} }
} }
@@ -640,19 +758,15 @@ 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;
@@ -660,37 +774,33 @@ char * CLangMngr::FormatAmxString(AMX *amx, cell *params, int parm, int &len)
++def; ++def;
} }
else else
{
CHECK_OUTPTR(1);
*outptr++ = *def++; *outptr++ = *def++;
} }
} }
}
else else
{ {
static char tmpString[4096]; char tmpString[256];
char *tmpPtr = tmpString; char *tmpPtr = tmpString;
int tmpLen = 0; int tmpLen =0;
static char format[32] = {'%'}; char format[16];
format[0] = '%';
char *ptr = format+1; char *ptr = format+1;
if (*src != '%') if (*src != '%')
{ {
while (*src != 0 && ptr-format<sizeof(format) && !isalpha(*ptr++ = *src++)) while (!isalpha(*ptr++ = *src++))
/*nothing*/; /*nothing*/;
*ptr = 0;
ZEROTERM(format);
--src; --src;
*ptr = 0;
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 (tmpPtr-tmpString<sizeof(tmpString) && *tmpCell) while (*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':
@@ -702,7 +812,6 @@ char * CLangMngr::FormatAmxString(AMX *amx, cell *params, int parm, int &len)
} }
case 'i': case 'i':
case 'd': case 'd':
case 'c':
{ {
NEXT_PARAM(); NEXT_PARAM();
sprintf(outptr, format, (int)*get_amxaddr(amx, params[parm++])); sprintf(outptr, format, (int)*get_amxaddr(amx, params[parm++]));
@@ -710,225 +819,29 @@ char * CLangMngr::FormatAmxString(AMX *amx, cell *params, int parm, int &len)
} }
default: default:
{ {
CHECK_OUTPTR(strlen(format)+1); *outptr++ = '%';
strcpy(outptr, format); *outptr++ = *(ptr-1);
break; break;
} }
} }
outptr += strlen(outptr);
} else { } else {
CHECK_OUTPTR(1);
*outptr++ = '%'; *outptr++ = '%';
*outptr++ = '%';
src++;
} }
outptr += strlen(outptr);
} }
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;
} }
const char *CLangMngr::Format(const char *fmt, ...)
{
va_list ap;
va_start(ap, fmt);
const char *retVal = FormatString(fmt, ap);
va_end(ap);
return retVal;
}
#undef CHECK_PTR
#undef CHECK_OUTPR
#undef ZEROTERM
#undef NEXT_PARAM
#define CHECK_PTR(ptr, start, bufsize) if ((ptr) - (start) >= (bufsize)) { \
AMXXLOG_Log("[AMXX] Buffer overflow in formatting"); \
outbuf[0] = 0; \
return outbuf; }
#define CHECK_OUTPTR(offset) CHECK_PTR(outptr+offset, outbuf, sizeof(outbuf))
#define ZEROTERM(buf) buf[(sizeof(buf)/sizeof(buf[0]))-1]=0;
#define NEXT_PARAM()
char *CLangMngr::FormatString(const char *fmt, va_list &ap)
{
// the output buffer
static char outbuf[4096];
char *outptr = outbuf;
const char *src = fmt;
while (*src)
{
if (*src == '%')
{
++src;
if (*src=='L')
{
NEXT_PARAM();
const char *pAmxLangName = va_arg(ap, const char*);
const char *cpLangName=NULL;
// Handle player ids (1-32) and server language
if (pAmxLangName == (const char *)LANG_PLAYER) // LANG_PLAYER
{
if ((int)CVAR_GET_FLOAT("amx_client_languages"))
{
cpLangName = g_vault.get("server_language");
} else {
cpLangName = ENTITY_KEYVALUE(GET_PLAYER_POINTER_I(m_CurGlobId)->pEdict, "lang");
}
} else if (pAmxLangName == (const char *)LANG_SERVER) { // LANG_SERVER
cpLangName = g_vault.get("server_language");
} else if (pAmxLangName >= (const char *)1 && pAmxLangName <= (const char *)32) { // Direct Client Id
if ((int)CVAR_GET_FLOAT("amx_client_languages"))
{
cpLangName = g_vault.get("server_language");
} else {
cpLangName = ENTITY_KEYVALUE(GET_PLAYER_POINTER_I((int)pAmxLangName)->pEdict, "lang");
}
} else { // Language Name
int tmplen = 0;
cpLangName = pAmxLangName;
}
if (!cpLangName || strlen(cpLangName) < 1)
cpLangName = "en";
int tmplen = 0;
const char *key = va_arg(ap, const char *);
const char *def = GetDef(cpLangName, key);
if (def == NULL)
{
if (pAmxLangName != LANG_SERVER)
{
def = GetDef(g_vault.get("server_language"), key);
}
if (strcmp(cpLangName, "en")!=0 && strcmp(g_vault.get("server_language"), "en")!=0)
{
def = GetDef("en", key);
}
if (!def)
{
static char buf[512];
CHECK_PTR((char*)(buf+17+strlen(key)), buf, sizeof(buf));
sprintf(buf, "ML_LNOTFOUND: %s", key);
def = buf;
}
}
while (*def)
{
if (*def == '%')
{
++def;
static char format[32];
format[0] = '%';
char *ptr = format+1;
while (ptr-format<sizeof(format) && !isalpha(*ptr++ = *def++))
/*nothing*/;
ZEROTERM(format);
*ptr = 0;
vsprintf(outptr, format, ap);
// vsprintf doesnt alter the ap, increment here
switch (*(ptr-1))
{
case 'f':
va_arg(ap, double);
break;
case 's':
va_arg(ap, char *);
break;
case 'c':
case 'd':
case 'i':
default: // default: assume int-like parameter
va_arg(ap, int);
break;
}
outptr += strlen(outptr);
}
else if (*def == '^')
{
++def;
switch (*def)
{
case 'n':
CHECK_OUTPTR(1);
*outptr++ = '\n';
break;
case 't':
CHECK_OUTPTR(1);
*outptr++ = '\t';
break;
case '^':
CHECK_OUTPTR(1);
*outptr++ = '^';
break;
default:
CHECK_OUTPTR(2);
*outptr++ = '^';
*outptr++ = *def;
break;
}
++def;
}
else
{
CHECK_OUTPTR(1);
*outptr++ = *def++;
}
}
}
else
{
static char format[32] = {'%'};
char *ptr = format+1;
if (*src != '%')
{
while (*src != 0 && ptr-format<sizeof(format) && !isalpha(*ptr++ = *src++))
/*nothing*/;
*ptr = 0;
ZEROTERM(format);
--src;
vsprintf(outptr, format, ap);
// vsprintf doesnt alter the ap, increment here
switch (*(ptr-1))
{
case 'f':
va_arg(ap, double);
break;
case 's':
va_arg(ap, char *);
break;
case 'c':
case 'd':
case 'i':
default: // default: assume int-like parameter
va_arg(ap, int);
break;
}
outptr += strlen(outptr);
} else {
CHECK_OUTPTR(1);
*outptr++ = '%';
}
}
}
else
{
CHECK_OUTPTR(1);
*outptr++ = *src;
}
++src;
}
CHECK_OUTPTR(1);
*outptr++ = 0;
return outbuf;
}
void CLangMngr::MergeDefinitions(const char *lang, CQueue<sKeyDef*> &tmpVec) void CLangMngr::MergeDefinitions(const char *lang, CQueue<sKeyDef*> &tmpVec)
{ {
CLang * language = GetLang(lang); CLang * language = GetLang(lang);
@@ -1025,7 +938,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 { } else if (buf.size() > 4) {
if (!multiline) if (!multiline)
{ {
pos = buf.find('='); pos = buf.find('=');

View File

@@ -171,7 +171,6 @@ public:
const char *Format(const char *src, ...); const char *Format(const char *src, ...);
// Format a string for an AMX plugin // Format a string for an AMX plugin
char *FormatAmxString(AMX *amx, cell *params, int parm, int &len); char *FormatAmxString(AMX *amx, cell *params, int parm, int &len);
char *FormatString(const char *fmt, va_list &ap);
// Save // Save
bool Save(const char *filename); bool Save(const char *filename);
// Load // Load

View File

@@ -126,9 +126,8 @@ pfnmodule_engine_g engModuleFunc = {
// class CModule // class CModule
// ***************************************************** // *****************************************************
CModule::CModule(const char* fname) CModule::CModule(const char* fname) : m_Filename(fname)
{ {
m_Filename.assign(fname);
clear(false); clear(false);
} }

View File

@@ -95,7 +95,7 @@ public:
inline module_info_s* getInfo() const { return m_InfoOld; } // old inline module_info_s* getInfo() const { return m_InfoOld; } // old
inline const amxx_module_info_s* getInfoNew() const { return &m_InfoNew; } // new inline const amxx_module_info_s* getInfoNew() const { return &m_InfoNew; } // new
inline int getStatusValue() { return m_Status; } inline int getStatusValue() { return m_Status; }
inline bool operator==( const char* fname ) { return !strcmp( m_Filename.c_str() , fname ); } inline bool operator==( void* fname ) { return !strcmp( m_Filename.c_str() , (char*)fname ); }
inline bool isReloadable() { return m_Amxx ? ((m_Status == MODULE_LOADED) && (m_InfoNew.reload != 0)) : ( (m_Status==MODULE_LOADED) && (m_InfoOld->type==RELOAD_MODULE)); } inline bool isReloadable() { return m_Amxx ? ((m_Status == MODULE_LOADED) && (m_InfoNew.reload != 0)) : ( (m_Status==MODULE_LOADED) && (m_InfoOld->type==RELOAD_MODULE)); }
inline bool isAmxx() const { return m_Amxx; } inline bool isAmxx() const { return m_Amxx; }
inline const char *getMissingFunc() const { return m_MissingFunc; } inline const char *getMissingFunc() const { return m_MissingFunc; }

View File

@@ -34,11 +34,11 @@
#include "CForward.h" #include "CForward.h"
#include "CFile.h" #include "CFile.h"
CPluginMngr::CPlugin* CPluginMngr::loadPlugin(const char* path, const char* name, char* error, int debug) { CPluginMngr::CPlugin* CPluginMngr::loadPlugin(const char* path, const char* name, char* error) {
CPlugin** a = &head; CPlugin** a = &head;
while( *a ) a = &(*a)->next; while( *a ) a = &(*a)->next;
*a = new CPlugin( pCounter++ ,path,name,error, debug); *a = new CPlugin( pCounter++ ,path,name,error);
return (*a); return *error ? 0 : *a;
} }
void CPluginMngr::unloadPlugin( CPlugin** a ) { void CPluginMngr::unloadPlugin( CPlugin** a ) {
@@ -59,35 +59,20 @@ int CPluginMngr::loadPluginsFromFile( const char* filename )
} }
// Find now folder // Find now folder
char pluginName[256], line[256], error[256], debug[256]; char pluginName[256], line[256], error[256];
int debugFlag = 0; 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 ) )
{ {
*pluginName = 0; *pluginName = 0;
*debug = 0; sscanf(line,"%s",pluginName);
debugFlag = 0;
sscanf(line,"%s %s",pluginName, debug);
if (!isalnum(*pluginName)) continue; if (!isalnum(*pluginName)) continue;
#ifdef JIT CPlugin* plugin = loadPlugin( pluginsDir , pluginName , error );
if (isalnum(*debug) && strcmp(debug, "debug") == 0)
{
debugFlag = 1;
}
#endif
CPlugin* plugin = loadPlugin( pluginsDir , pluginName , error, debugFlag); if (!plugin)
AMXXLOG_Log("[AMXX] %s (plugin \"%s\")", error, pluginName );
if (plugin->getStatusCode() == ps_bad_load)
{
char errorMsg[255];
sprintf(errorMsg, "%s (plugin \"%s\")", error, pluginName);
plugin->setError(errorMsg);
AMXXLOG_Log("[AMXX] %s", plugin->getError());
}
} }
return pCounter; return pCounter;
@@ -102,6 +87,10 @@ void CPluginMngr::clear() {
CPluginMngr::CPlugin* CPluginMngr::findPluginFast(AMX *amx) CPluginMngr::CPlugin* CPluginMngr::findPluginFast(AMX *amx)
{ {
return (CPlugin*)(amx->userdata[3]); return (CPlugin*)(amx->userdata[3]);
/*CPlugin*a = head;
while ( a && &a->amx != amx )
a=a->next;
return a;*/
} }
CPluginMngr::CPlugin* CPluginMngr::findPlugin(AMX *amx) { CPluginMngr::CPlugin* CPluginMngr::findPlugin(AMX *amx) {
@@ -139,20 +128,16 @@ const char* CPluginMngr::CPlugin::getStatus() const {
return "error"; return "error";
} }
CPluginMngr::CPlugin::CPlugin(int i, const char* p,const char* n, char* e, int d) : name(n), title(n) { CPluginMngr::CPlugin::CPlugin(int i, const char* p,const char* n, char* e) : name(n), title(n) {
const char* unk = "unknown"; const char* unk = "unknown";
title.assign(unk); title.assign(unk);
author.assign(unk); author.assign(unk);
version.assign(unk); version.assign(unk);
char* path = build_pathname("%s/%s",p,n); char* path = build_pathname("%s/%s",p,n);
code = 0; code = 0;
int err = load_amxscript(&amx,&code,path,e, d); int err = load_amxscript(&amx,&code,path,e );
if ( err == AMX_ERR_NONE ) if ( err == AMX_ERR_NONE ) status = ps_running;
{ else status = ps_bad_load;
status = ps_running;
} else {
status = ps_bad_load;
}
amx.userdata[3] = this; amx.userdata[3] = this;
paused_fun = 0; paused_fun = 0;
next = 0; next = 0;

View File

@@ -63,12 +63,11 @@ public:
String version; String version;
String title; String title;
String author; String author;
String errorMsg;
int paused_fun; int paused_fun;
int status; int status;
CPlugin* next; CPlugin* next;
int id; int id;
CPlugin(int i , const char* p,const char* n, char* e, int d); CPlugin(int i , const char* p,const char* n, char* e);
~CPlugin( ); ~CPlugin( );
public: public:
@@ -77,14 +76,11 @@ public:
inline const char* getVersion() { return version.c_str();} inline const char* getVersion() { return version.c_str();}
inline const char* getTitle() { return title.c_str();} inline const char* getTitle() { return title.c_str();}
inline const char* getAuthor() { return author.c_str();} inline const char* getAuthor() { return author.c_str();}
inline const char* getError() { return errorMsg.c_str();}
inline int getStatusCode() { return status; }
inline int getId() const { return id; } inline int getId() const { return id; }
inline AMX* getAMX() { return &amx; } inline AMX* getAMX() { return &amx; }
inline void setTitle( const char* n ) { title.assign(n); } inline void setTitle( const char* n ) { title.assign(n); }
inline void setAuthor( const char* n ) { author.assign(n); } inline void setAuthor( const char* n ) { author.assign(n); }
inline void setVersion( const char* n ) { version.assign(n); } inline void setVersion( const char* n ) { version.assign(n); }
inline void setError( const char* n ) { errorMsg.assign(n); }
inline bool isValid() const { return ((status != ps_bad_load) && (status != ps_locked)); } inline bool isValid() const { return ((status != ps_bad_load) && (status != ps_locked)); }
inline bool isPaused() const { return ( (status == ps_paused) || (status == ps_stopped)); } inline bool isPaused() const { return ( (status == ps_paused) || (status == ps_stopped)); }
inline bool isFunctionPaused( int id ) const { return (paused_fun & (1<<id)) ? true : false; } inline bool isFunctionPaused( int id ) const { return (paused_fun & (1<<id)) ? true : false; }
@@ -108,7 +104,7 @@ public:
// Interface // Interface
CPlugin* loadPlugin(const char* path, const char* name, char* error, int debug); CPlugin* loadPlugin(const char* path, const char* name, char* error);
void unloadPlugin( CPlugin** a ); void unloadPlugin( CPlugin** a );
int loadPluginsFromFile( const char* filename ); int loadPluginsFromFile( const char* filename );
CPlugin* findPluginFast(AMX *amx); CPlugin* findPluginFast(AMX *amx);

View File

@@ -71,7 +71,7 @@ public:
void append(const char *t) void append(const char *t)
{ {
Grow(cSize + strlen(t) + 1); Grow(cSize + strlen(t));
strcat(v, t); strcat(v, t);
cSize = strlen(v); cSize = strlen(v);
} }

View File

@@ -61,11 +61,14 @@ 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;
} }
@@ -75,10 +78,7 @@ 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,12 +114,28 @@ 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 arr = prepareCellArray(m_pParams, m_iParamLen); cell amx_addr, *phys_addr;
executeForwards(m_iFunc, arr, m_iId); if (amx_Allot(m_pPlugin->getAMX(), m_iParamLen, &amx_addr, &phys_addr) != AMX_ERR_NONE)
} else { AMXXLOG_Log("[AMXX] Failed to allocate AMX memory (task \"%d\") (plugin \"%s\")", m_iId, m_pPlugin->getName());
executeForwards(m_iFunc, m_iId); else
{
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
@@ -129,8 +145,6 @@ 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:
void set(CPluginMngr::CPlugin *pPlugin, int iFunc, int iFlags, int iId, float fBase, int iParamsLen, const cell *pParams, int iRepeat, float fCurrentTime); inline void set(CPluginMngr::CPlugin *pPlugin, int iFunc, int iFlags, int iId, float fBase, int iParamsLen, const cell *pParams, int iRepeat, float fCurrentTime);
void clear(); inline void clear();
bool isFree() const; inline bool isFree() const;
CPluginMngr::CPlugin *getPlugin() const; inline CPluginMngr::CPlugin *getPlugin() const;
int getTaskId() const; inline int getTaskId() const;
void executeIfRequired(float fCurrentTime, float fTimeLimit, float fTimeLeft); // also removes the task if needed inline void executeIfRequired(float fCurrentTime, float fTimeLimit, float fTimeLeft); // also removes the task if needed
void changeBase(float fNewBase); inline void changeBase(float fNewBase);
void resetNextExecTime(float fCurrentTime); inline void resetNextExecTime(float fCurrentTime);
bool shouldRepeat(); inline bool shouldRepeat();
CTask(); CTask();
~CTask(); ~CTask();

View File

@@ -32,8 +32,6 @@
#ifndef __CVECTOR_H__ #ifndef __CVECTOR_H__
#define __CVECTOR_H__ #define __CVECTOR_H__
#include <assert.h>
// Vector // Vector
template <class T> class CVector template <class T> class CVector
{ {
@@ -286,7 +284,7 @@ public:
iterator iterAt(size_t pos) iterator iterAt(size_t pos)
{ {
if (pos > m_CurrentUsedSize) if (pos > m_CurrentUsedSize)
assert(0); ASSERT(0);
return iterator(m_Data + pos); return iterator(m_Data + pos);
} }
@@ -333,7 +331,7 @@ public:
{ {
if (pos > m_CurrentUsedSize) if (pos > m_CurrentUsedSize)
{ {
assert(0); ASSERT(0);
} }
return m_Data[pos]; return m_Data[pos];
} }
@@ -342,7 +340,7 @@ public:
{ {
if (pos > m_CurrentUsedSize) if (pos > m_CurrentUsedSize)
{ {
assert(0); ASSERT(0);
} }
return m_Data[pos]; return m_Data[pos];
} }
@@ -361,7 +359,7 @@ public:
{ {
if (m_CurrentUsedSize < 1) if (m_CurrentUsedSize < 1)
{ {
assert(0); ASSERT(0);
} }
return m_Data[0]; return m_Data[0];
} }
@@ -370,7 +368,7 @@ public:
{ {
if (m_CurrentUsedSize < 1) if (m_CurrentUsedSize < 1)
{ {
assert(0); ASSERT(0);
} }
return m_Data[0]; return m_Data[0];
} }
@@ -379,7 +377,7 @@ public:
{ {
if (m_CurrentUsedSize < 1) if (m_CurrentUsedSize < 1)
{ {
assert(0); ASSERT(0);
} }
return m_Data[m_CurrentUsedSize - 1]; return m_Data[m_CurrentUsedSize - 1];
} }
@@ -388,7 +386,7 @@ public:
{ {
if (m_CurrentUsedSize < 1) if (m_CurrentUsedSize < 1)
{ {
assert(0); ASSERT(0);
} }
return m_Data[m_CurrentUsedSize - 1]; return m_Data[m_CurrentUsedSize - 1];
} }

View File

@@ -101,6 +101,15 @@
; to compute the destination address: It searches backwards now. ; to compute the destination address: It searches backwards now.
; 1999/07/08 MP - initial revision ; 1999/07/08 MP - initial revision
; Controls generation of LINE op-codes: 0 - no, all other values - yes
; Beware that, if set to 1, this makes the compiled code slower by a factor of
; up to 3!
;
; GWMV: to generate LINE opcode, %define ALLOWOPLINE
;
%undef ALLOWOPLINE
; ;
; If this is set to 1 the JIT generates relocatable code for case tables, too. ; If this is set to 1 the JIT generates relocatable code for case tables, too.
; If set to 0, a faster variant for switch (using absolute addresses) is ; If set to 0, a faster variant for switch (using absolute addresses) is
@@ -155,9 +164,8 @@ _alt: resd 1
_reset_stk: resd 1 _reset_stk: resd 1
_reset_hea: resd 1 _reset_hea: resd 1
_syscall_d: resd 1 _syscall_d: resd 1
; the two fields below are for the JIT ; the two fields below are for the JIT; they do not exist in
; they are included in the non-JIT version for AMX Mod X ; the non-JIT version of the abstract machine
; this is to make sure that the structs match universally!
_reloc_size: resd 1 ; memory block for relocations _reloc_size: resd 1 ; memory block for relocations
_code_size: resd 1 ; memory size of the native code _code_size: resd 1 ; memory size of the native code
endstruc endstruc
@@ -222,7 +230,6 @@ DBG_SYMTAG equ 9
AMX_FLAG_CHAR16 equ 0001h ; characters are 16-bit AMX_FLAG_CHAR16 equ 0001h ; characters are 16-bit
AMX_FLAG_DEBUG equ 0002h ; symbolic info. available AMX_FLAG_DEBUG equ 0002h ; symbolic info. available
AMX_FLAG_LINEOPS equ 0020h ; line ops should be parsed [load time only flag] - ~dvander
AMX_FLAG_BROWSE equ 4000h AMX_FLAG_BROWSE equ 4000h
AMX_FLAG_RELOC equ 8000h ; jump/call addresses relocated AMX_FLAG_RELOC equ 8000h ; jump/call addresses relocated
@@ -784,7 +791,7 @@ OP_ALIGN_PRI:
CHECKCODESIZE j_align_pri CHECKCODESIZE j_align_pri
OP_ALIGN_ALT: OP_ALIGN_ALT:
;nop ;nop;
mov eax,4 mov eax,4
sub eax,[ebx+4] sub eax,[ebx+4]
mov dword [j_align_alt+1],eax mov dword [j_align_alt+1],eax
@@ -1727,29 +1734,13 @@ OP_FILE: ;opcode is simply ignored
OP_LINE: OP_LINE:
;nop; ;nop;
;~dvander - opline is now variable on compile time :] %ifndef ALLOWOPLINE
;save registers
push eax
push ebp
;get .amx flags
mov ebp,[amxhead]
mov eax,[ebp+_h_flags]
;check to see if the flag has line ops
and eax,AMX_FLAG_LINEOPS
cmp eax,AMX_FLAG_LINEOPS
;restore registers
pop ebp
pop eax
;if so, skip down to debug compiler
je _go_debug
mov [ebx],edi ; no line number support: ignore opcode mov [ebx],edi ; no line number support: ignore opcode
add ebx,12 ; move on to next opcode add ebx,12 ; move on to next opcode
cmp ebx,[end_code] cmp ebx,[end_code]
jae code_gen_done jae code_gen_done
jmp dword [ebx] ; go on with the next opcode jmp dword [ebx] ; go on with the next opcode
%else
_go_debug:
putval j_line+6 putval j_line+6
mov eax,[ebx+8] mov eax,[ebx+8]
mov [j_line_sm],eax mov [j_line_sm],eax
@@ -1759,6 +1750,7 @@ _go_debug:
DD 0 ; space for curline DD 0 ; space for curline
j_line_sm DD 0 ; space for curfile j_line_sm DD 0 ; space for curfile
CHECKCODESIZE j_line CHECKCODESIZE j_line
%endif
OP_SYMBOL: ;ignored OP_SYMBOL: ;ignored
mov [ebx],edi mov [ebx],edi

10
amxmodx/JIT/jits.def Executable file
View File

@@ -0,0 +1,10 @@
LIBRARY jits
DESCRIPTION "JIT for AMX Mod X"
EXPORTS
asm_runJIT @1
getMaxCodeSize @2
amx_exec_asm @3
amx_opcodelist @4
SECTIONS
.data READ WRITE
.code EXECUTE

BIN
amxmodx/JIT/jits.exp Executable file

Binary file not shown.

BIN
amxmodx/JIT/jits.lib Executable file

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -12,38 +12,23 @@
# amd64 - compile for AMD64 (impiles no jit) # amd64 - compile for AMD64 (impiles no jit)
# proc=ix86 - assumed not amd64 # proc=ix86 - assumed not amd64
# clean - clean the specifications above # clean - clean the specifications above
# asm - for ASM implementation
# !! TODO - add memory mananger support
# lineop - for JIT only, uses slow version
$PROJECT = "amxmodx_mm"; $PROJECT = "amxx_mm";
$sdk = "../hlsdk/SourceCode"; $sdk = "../hlsdk/SourceCode";
$mm = "../metamod/metamod"; $mm = "../metamod/metamod";
$gccf = "gcc";
$ccf = "cc";
$amd64_lstdc = "-lstdc++";
@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", "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");
@C_SOURCE_FILES = (); @C_SOURCE_FILES = ();
my %OPTIONS, %OPT; my %OPTIONS, %OPT;
$OPT{"debug"} = "-g -ggdb"; $OPT{"debug"} = "-g -ggdb";
$OPT{"opt"} = "-O2 -ffast-math -funroll-loops -fomit-frame-pointer -s -DNDEBUG -Wall -Wno-unknown-pragmas -DOPT_TYPE=\"optimized\" -fno-exceptions -fno-rtti"; $OPT{"opt"} = "-O2 -ffast-math -funroll-loops -fomit-frame-pointer -s -DNDEBUG -Wall -Wno-unknown-pragmas -DOPT_TYPE=\"optimized\"";
$OPTIONS{"include"} = "-I$sdk -I. -I$mm -I$sdk/engine -I$sdk/common -I$sdk/pm_shared -I$sdk/dlls"; $OPTIONS{"include"} = "-I$sdk -I. -I$mm -I$sdk/engine -I$sdk/common -I$sdk/pm_shared -I$sdk/dlls";
while ($cmd = shift) while ($cmd = shift)
{ {
if ($cmd =~ /asm/)
{
if ($OPTIONS{"amd64"})
{
die "You cannot compile the ASM core with AMD64 yet.\n";
} else {
$OPTIONS{"asm"} = 1;
}
}
if ($cmd =~ /jit/) if ($cmd =~ /jit/)
{ {
if ($OPTIONS{"amd64"}) if ($OPTIONS{"amd64"})
@@ -53,9 +38,9 @@ while ($cmd = shift)
$OPTIONS{"jit"} = 1; $OPTIONS{"jit"} = 1;
} }
} elsif ($cmd =~ /amd64/) { } elsif ($cmd =~ /amd64/) {
if ($OPTIONS{"jit"} || $OPTIONS{"asm"}) if ($OPTIONS{"jit"})
{ {
die "You cannot compile the JIT or ASM and AMD64 yet.\n"; die "You cannot compile the JIT and AMD64 yet.\n";
} else { } else {
$OPTIONS{"amd64"} = 1; $OPTIONS{"amd64"} = 1;
} }
@@ -71,26 +56,19 @@ while ($cmd = shift)
} }
} elsif ($cmd =~ /clean/) { } elsif ($cmd =~ /clean/) {
$OPTIONS{"clean"} = 1; $OPTIONS{"clean"} = 1;
} elsif ($cmd =~ /lineop/) {
$OPTIONS{"lineop"} = 1;
} }
} }
$gcc = `$gccf --version`; $gcc = `gcc --version`;
if ($gcc =~ /2\.9/) if ($gcc =~ /2\.9/)
{ {
#if ($OPTIONS{"jit"})
#{
# push(@CPP_SOURCE_FILES, "amx.cpp");
# $OPT{"opt"} .= " -malign-loops=2 -malign-jumps=2 -malign-functions=2";
# } else {
`ln -s amx.cpp amx.c`; `ln -s amx.cpp amx.c`;
push(@C_SOURCE_FILES, "amx.c"); push(@C_SOURCE_FILES, "amx.c");
# } $OPT{"opt"} .= " -malign-loops=2 -malign-jumps=2 -malign-functions=2";
} else { } else {
if ($OPTIONS{"amd64"}) if ($OPTIONS{"amd64"})
{ {
`ln -s amx.cpp amx.c`; `cp 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");
@@ -117,17 +95,12 @@ if ($OPTIONS{"debug"})
if ($OPTIONS{"amd64"}) if ($OPTIONS{"amd64"})
{ {
$cflags = " -m64 -DSMALL_CELL_SIZE=64 -DHAVE_I64 $cflags"; $cflags .= " -m64 -DSMALL_CELL_SIZE=64 -DHAVE_I64 $cflags";
} }
if ($OPTIONS{"jit"}) if ($OPTIONS{"jit"})
{ {
$cflags .= " -DJIT"; $cflags .= "-DJIT";
}
if ($OPTIONS{"asm"})
{
$cflags .= " -DASM32";
} }
if ($OPTIONS{"debug"}) if ($OPTIONS{"debug"})
@@ -156,6 +129,8 @@ if ($OPTIONS{"amd64"})
if ($OPTIONS{"clean"}) if ($OPTIONS{"clean"})
{ {
`rm $outdir/*.o`; `rm $outdir/*.o`;
`rm $outdir/MMGR/*.o`;
`rm $outdir/minilzo/*.o`;
`rm $outdir/$bin`; `rm $outdir/$bin`;
die("Project cleaned.\n"); die("Project cleaned.\n");
} }
@@ -177,32 +152,25 @@ for ($i=0; $i<=$#C_SOURCE_FILES; $i++)
} }
if ($OPTIONS{"jit"}) if ($OPTIONS{"jit"})
{ {
if ($OPTIONS{"lineop"}) {
push(@LINK, "JIT/jits-lineop.o");
} else {
push(@LINK, "JIT/jits.o"); push(@LINK, "JIT/jits.o");
}
}
if ($OPTIONS{"amd64"})
{
push(@LINK, "zlib/libz64.a");
push(@LINK, $amd64_lstdc);
} else {
push(@LINK, "zlib/libz.a");
}
if ($OPTIONS{"asm"})
{
push(@LINK, "amxexecn.o");
} }
if (!(-d $outdir)) if (!(-d $outdir))
{ {
mkdir($outdir); mkdir($outdir);
} }
if (!(-d "$outdir/MMGR"))
{
mkdir("$outdir/MMGR");
}
if (!(-d "$outdir/JIT")) if (!(-d "$outdir/JIT"))
{ {
mkdir("$outdir/JIT"); mkdir("$outdir/JIT");
} }
if (!(-d "$outdir/minilzo"))
{
mkdir("$outdir/minilzo");
}
$inc = $OPTIONS{"include"}; $inc = $OPTIONS{"include"};
@@ -212,14 +180,13 @@ 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 = "$gccf $cflags -Dstrcmpi=strcasecmp -fPIC $inc -c $file -o $ofile"; $gcc = "gcc $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($ofile))[9]; $ofile_time = (stat($file))[9];
if ($file_time > $ofile_time) if ($file_time > $ofile_time)
{ {
`rm $ofile`;
print "$gcc\n"; print "$gcc\n";
`$gcc`; `$gcc`;
} }
@@ -235,11 +202,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 = "$ccf $cflags -Dstrcmpi=strcasecmp -fPIC $inc -c $file -o $ofile"; $gcc = "cc $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($ofile))[9]; $ofile_time = (stat($file))[9];
if ($file_time > $ofile_time) if ($file_time > $ofile_time)
{ {
print "$gcc\n"; print "$gcc\n";
@@ -251,6 +218,6 @@ for ($i=0; $i<=$#CPP_SOURCE_FILES; $i++)
} }
} }
$gcc = "$gccf $cflags -shared -ldl -lm @LINK -o $outdir/$bin"; $gcc = "gcc $cflags -Lzlib/ -shared -ldl -lm @LINK -lz -o $outdir/$bin";
print "$gcc\n"; print "$gcc\n";
`$gcc`; `$gcc`;

View File

@@ -21,7 +21,7 @@
* Version: $Id$ * Version: $Id$
*/ */
// not used #include <stdio.h>
#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,30 +51,27 @@
#include <dlfcn.h> #include <dlfcn.h>
#endif #endif
#endif #endif
#if defined __LCC__ || defined __GNUC__ #if defined __LCC__ || defined __linux__
#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 memory manager here // this file does not include amxmodx.h so we have to include the mem mngr 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> // DWORD, VirtualProtect, ... # include <windows.h>
# elif defined __linux__ # elif defined __linux__
# include <sys/mman.h> // mprotect, PROT_* # include <sys/mman.h>
# 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
@@ -480,13 +477,8 @@ int AMXAPI amx_Debug(AMX *amx)
} }
#if defined JIT #if defined JIT
#if defined WIN32 || defined __cplusplus
extern "C" int AMXAPI getMaxCodeSize(void); extern "C" int AMXAPI getMaxCodeSize(void);
extern "C" int AMXAPI asm_runJIT(void *sourceAMXbase, void *jumparray, void *compiledAMXbase); extern "C" int AMXAPI asm_runJIT(void *sourceAMXbase, void *jumparray, void *compiledAMXbase);
#else
extern int AMXAPI getMaxCodeSize(void);
extern int AMXAPI asm_runJIT(void *sourceAMXbase, void *jumparray, void *compiledAMXbase);
#endif
#endif #endif
#if SMALL_CELL_SIZE==16 #if SMALL_CELL_SIZE==16
@@ -543,16 +535,19 @@ 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
amx->sysreq_d=(sizeof(AMX_NATIVE)<=sizeof(cell)) ? opcode_list[OP_SYSREQ_D] : 0; /* to use direct system requests, a function pointer must fit in a cell;
* 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;
* because the native function's address will be stored as the parameter * see the comment above
* 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
@@ -1054,6 +1049,9 @@ 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
@@ -1105,7 +1103,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( (void*)asm_runJIT, 20000, mac ); memorySetAccess( asm_runJIT, 20000, mac );
return AMX_ERR_NONE; return AMX_ERR_NONE;
} }
@@ -1575,7 +1573,8 @@ static AMX_NATIVE findfunction(const char *name, AMX_NATIVE_INFO *list, int numb
return NULL; return NULL;
} }
const char *no_function; // PM: Nice hack ;) const char *no_function;
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;
@@ -1595,6 +1594,10 @@ 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
@@ -1607,40 +1610,6 @@ int AMXAPI amx_Register(AMX *amx, AMX_NATIVE_INFO *list, int number)
} /* for */ } /* for */
return err; return err;
} }
static cell AMX_NATIVE_CALL null_native(AMX *amx, cell *params)
{
return 0;
}
void amx_NullNativeTable(AMX *amx)
{
AMX_FUNCSTUB *func;
AMX_HEADER *hdr;
int i, numnatives;
hdr=(AMX_HEADER *)amx->base;
if (hdr == NULL)
return;
if (hdr->magic!=AMX_MAGIC)
return;
numnatives = NUMENTRIES(hdr, natives, libraries);
func=GETENTRY(hdr, natives, 0);
for (i=0; i<numnatives; i++)
{
if (strcmp(GETENTRYNAME(hdr,func), "require_module")==0)
{
func->address = NULL;
} else {
func->address = (ucell)null_native;
}
func=(AMX_FUNCSTUB*)((unsigned char*)func+hdr->defsize);
}
}
#endif /* AMX_REGISTER || AMX_EXEC || AMX_INIT */ #endif /* AMX_REGISTER || AMX_EXEC || AMX_INIT */
#if defined AMX_NATIVEINFO #if defined AMX_NATIVEINFO
@@ -1665,7 +1634,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 && !defined JIT #if defined __GNUC__ && !defined ASM32
/* 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.
*/ */
@@ -2767,25 +2736,16 @@ static void *amx_opcodelist_nodebug[] = {
#endif #endif
#elif defined __GNUC__ #elif defined __GNUC__
/* force "cdecl" by adding an "attribute" to the declaration */ /* force "cdecl" by adding an "attribute" to the declaration */
#if defined __cplusplus
extern "C" cell amx_exec_asm(cell *regs,cell *retval,cell stp,cell hea) __attribute__((cdecl)); extern "C" cell amx_exec_asm(cell *regs,cell *retval,cell stp,cell hea) __attribute__((cdecl));
#else #else
extern cell amx_exec_asm(cell *regs,cell *retval,cell stp,cell hea) __attribute__((cdecl));
#endif
#else
/* force "cdecl" by specifying it as a "function class" with the "__cdecl" keyword */ /* force "cdecl" by specifying it as a "function class" with the "__cdecl" keyword */
extern "C" cell __cdecl amx_exec_asm(cell *regs,cell *retval,cell stp,cell hea); extern "C" cell __cdecl amx_exec_asm(cell *regs,cell *retval,cell stp,cell hea);
#endif #endif
#endif #endif
#if defined ASM32 || defined JIT #if defined ASM32 || defined JIT
#if defined WIN32 || defined __cplusplus
extern "C" void *amx_opcodelist[]; extern "C" void *amx_opcodelist[];
extern "C" void *amx_opcodelist_nodebug[]; extern "C" void *amx_opcodelist_nodebug[];
#else
extern void *amx_opcodelist[];
extern void *amx_opcodelist_nodebug[];
#endif
#endif #endif
int AMXAPI amx_Exec(AMX *amx, cell *retval, int index, int numparams, ...) int AMXAPI amx_Exec(AMX *amx, cell *retval, int index, int numparams, ...)
@@ -4079,7 +4039,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,12 +22,14 @@
*/ */
#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
@@ -217,9 +219,11 @@ typedef struct tagAMX {
cell reset_stk PACKED; cell reset_stk PACKED;
cell reset_hea PACKED; cell reset_hea PACKED;
cell sysreq_d PACKED; /* relocated address/value for the SYSREQ.D opcode */ cell sysreq_d PACKED; /* relocated address/value for the SYSREQ.D opcode */
#if defined JIT
/* support variables for the JIT */ /* support variables for the JIT */
int reloc_size PACKED; /* required temporary buffer for relocations */ int reloc_size PACKED; /* required temporary buffer for relocations */
long code_size PACKED; /* estimated memory footprint of the native code */ long code_size PACKED; /* estimated memory footprint of the native code */
#endif
} AMX; } AMX;
/* The AMX_HEADER structure is both the memory format as the file format. The /* The AMX_HEADER structure is both the memory format as the file format. The
@@ -293,7 +297,6 @@ enum {
#define AMX_FLAG_COMPACT 0x04 /* compact encoding */ #define AMX_FLAG_COMPACT 0x04 /* compact encoding */
#define AMX_FLAG_BIGENDIAN 0x08 /* big endian encoding */ #define AMX_FLAG_BIGENDIAN 0x08 /* big endian encoding */
#define AMX_FLAG_NOCHECKS 0x10 /* no array bounds checking */ #define AMX_FLAG_NOCHECKS 0x10 /* no array bounds checking */
#define AMX_FLAG_LINEOPS 0x20 /* line ops are parsed by the JIT [loadtime only flag] */
#define AMX_FLAG_BROWSE 0x4000 /* browsing/relocating or executing */ #define AMX_FLAG_BROWSE 0x4000 /* browsing/relocating or executing */
#define AMX_FLAG_RELOC 0x8000 /* jump/call addresses relocated */ #define AMX_FLAG_RELOC 0x8000 /* jump/call addresses relocated */
@@ -334,7 +337,6 @@ 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
@@ -342,7 +344,6 @@ 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);
@@ -382,7 +383,7 @@ int AMXAPI amx_StrLen(cell *cstring, int *length);
int AMXAPI amx_UTF8Get(const char *string, const char **endptr, cell *value); int AMXAPI amx_UTF8Get(const char *string, const char **endptr, cell *value);
int AMXAPI amx_UTF8Put(char *string, char **endptr, int maxchars, cell value); int AMXAPI amx_UTF8Put(char *string, char **endptr, int maxchars, cell value);
int AMXAPI amx_UTF8Check(const char *string); int AMXAPI amx_UTF8Check(const char *string);
void amx_NullNativeTable(AMX *amx);
#if !defined AMX_NO_ALIGN #if !defined AMX_NO_ALIGN
#if defined __linux__ #if defined __linux__

File diff suppressed because it is too large Load Diff

View File

@@ -70,8 +70,8 @@ static cell AMX_NATIVE_CALL emit_sound(AMX *amx, cell *params) /* 7 param */
int len; int len;
char* szSample = get_amxstring(amx,params[3],0,len); char* szSample = get_amxstring(amx,params[3],0,len);
REAL vol = amx_ctof(params[4]); float vol = *(REAL *)((void *)&params[4]);
REAL att = amx_ctof(params[5]); float att = *(REAL *)((void *)&params[5]);
int channel = params[2]; int channel = params[2];
int pitch = params[7]; int pitch = params[7];
int flags = params[6]; int flags = params[6];
@@ -273,13 +273,13 @@ static cell AMX_NATIVE_CALL set_hudmessage(AMX *amx, cell *params) /* 11 param
g_hudset.r1 = params[1]; g_hudset.r1 = params[1];
g_hudset.g1 = params[2]; g_hudset.g1 = params[2];
g_hudset.b1 = params[3]; g_hudset.b1 = params[3];
g_hudset.x = amx_ctof(params[4]); g_hudset.x = *(REAL *)((void *)&params[4]);
g_hudset.y = amx_ctof(params[5]); g_hudset.y = *(REAL *)((void *)&params[5]);
g_hudset.effect = params[6]; g_hudset.effect = params[6];
g_hudset.fxTime = amx_ctof(params[7]); g_hudset.fxTime = *(REAL *)((void *)&params[7]);
g_hudset.holdTime = amx_ctof(params[8]); g_hudset.holdTime = *(REAL *)((void *)&params[8]);
g_hudset.fadeinTime = amx_ctof(params[9]); g_hudset.fadeinTime = *(REAL *)((void *)&params[9]);
g_hudset.fadeoutTime = amx_ctof(params[10]); g_hudset.fadeoutTime = *(REAL *)((void *)&params[10]);
g_hudset.channel = params[11]; g_hudset.channel = params[11];
return 1; return 1;
} }
@@ -1159,13 +1159,13 @@ static cell AMX_NATIVE_CALL get_cvar_float(AMX *amx, cell *params) /* 1 param */
{ {
int ilen; int ilen;
REAL pFloat = CVAR_GET_FLOAT(get_amxstring(amx,params[1],0,ilen)); REAL pFloat = CVAR_GET_FLOAT(get_amxstring(amx,params[1],0,ilen));
return amx_ftoc(pFloat); return *(cell*)((void *)&pFloat);
} }
static cell AMX_NATIVE_CALL set_cvar_float(AMX *amx, cell *params) /* 2 param */ static cell AMX_NATIVE_CALL set_cvar_float(AMX *amx, cell *params) /* 2 param */
{ {
int ilen; int ilen;
CVAR_SET_FLOAT(get_amxstring(amx,params[1],0,ilen), amx_ctof(params[2])); CVAR_SET_FLOAT(get_amxstring(amx,params[1],0,ilen),*(REAL *)((void *)&params[2]));
return 1; return 1;
} }
@@ -1584,7 +1584,7 @@ static cell AMX_NATIVE_CALL get_maxplayers(AMX *amx, cell *params)
static cell AMX_NATIVE_CALL get_gametime(AMX *amx, cell *params) static cell AMX_NATIVE_CALL get_gametime(AMX *amx, cell *params)
{ {
REAL pFloat = gpGlobals->time; REAL pFloat = gpGlobals->time;
return amx_ftoc(pFloat); return *(cell*)((void *)&pFloat);
} }
static cell AMX_NATIVE_CALL get_mapname(AMX *amx, cell *params) /* 2 param */ static cell AMX_NATIVE_CALL get_mapname(AMX *amx, cell *params) /* 2 param */
@@ -1676,27 +1676,23 @@ 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 (params[5]) if (amx_FindPublic(amx, stemp , &iFunc) != AMX_ERR_NONE){
{
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;
} }
float base = amx_ctof(params[1]); float base = *(REAL *)((void *)&params[1]);
if ( base < 0.1 ) if ( base < 0.1 )
base = 0.1; base = 0.1;
char* temp = get_amxstring(amx,params[6],0,a); char* temp = get_amxstring(amx,params[6],0,a);
g_tasksMngr.registerTask( plugin , iFunc , UTIL_ReadFlags(temp), params[3], base , params[5] , get_amxaddr(amx,params[4]) , params[7] ); g_tasksMngr.registerTask( plugin ,
iFunc , UTIL_ReadFlags(temp), params[3], base ,
params[5] ,
get_amxaddr(amx,params[4]) , params[7] );
return 1; return 1;
} }
@@ -1732,7 +1728,7 @@ static cell AMX_NATIVE_CALL register_cvar(AMX *amx, cell *params) /* 3 param */
{ {
CPluginMngr::CPlugin *plugin = g_plugins.findPluginFast(amx); CPluginMngr::CPlugin *plugin = g_plugins.findPluginFast(amx);
CCVar* cvar = new CCVar( temp , plugin->getName() , params[3] , CCVar* cvar = new CCVar( temp , plugin->getName() , params[3] ,
amx_ctof(params[4]) ); *(REAL *)((void *)&params[4]) );
if ( cvar == 0 ) if ( cvar == 0 )
return 0; return 0;
@@ -2015,10 +2011,10 @@ static cell AMX_NATIVE_CALL get_distance(AMX *amx, cell *params) /* 2 param */
static cell AMX_NATIVE_CALL random_float(AMX *amx, cell *params) /* 2 param */ static cell AMX_NATIVE_CALL random_float(AMX *amx, cell *params) /* 2 param */
{ {
float one = amx_ctof(params[1]); float one = *(REAL *)((void *)&params[1]);
float two = amx_ctof(params[2]); float two = *(REAL *)((void *)&params[2]);
REAL fRnd = RANDOM_FLOAT(one,two); REAL fRnd = RANDOM_FLOAT(one,two);
return amx_ftoc(fRnd); return *(cell*)((void *)&fRnd);
} }
static cell AMX_NATIVE_CALL random_num(AMX *amx, cell *params) /* 2 param */ static cell AMX_NATIVE_CALL random_num(AMX *amx, cell *params) /* 2 param */
@@ -2257,7 +2253,7 @@ static cell AMX_NATIVE_CALL is_module_loaded(AMX *amx, cell *params)
int len; int len;
char *name = get_amxstring(amx, params[1], 0, len); char *name = get_amxstring(amx, params[1], 0, len);
int id = 0; int id = 0;
for (CList<CModule,const char *>::iterator iter = g_modules.begin(); iter; ++iter) for (CList<CModule>::iterator iter = g_modules.begin(); iter; ++iter)
{ {
if (stricmp((*iter).getName(), name) == 0) if (stricmp((*iter).getName(), name) == 0)
return id; return id;
@@ -2290,7 +2286,7 @@ static cell AMX_NATIVE_CALL get_modulesnum(AMX *amx, cell *params)
// native get_module(id, name[], nameLen, author[], authorLen, version[], versionLen, &status); // native get_module(id, name[], nameLen, author[], authorLen, version[], versionLen, &status);
static cell AMX_NATIVE_CALL get_module(AMX *amx, cell *params) static cell AMX_NATIVE_CALL get_module(AMX *amx, cell *params)
{ {
CList<CModule,const char *>::iterator moduleIter; CList<CModule>::iterator moduleIter;
// find the module // find the module
int i = params[1]; int i = params[1];
@@ -2473,7 +2469,7 @@ static cell AMX_NATIVE_CALL callfunc_end(AMX *amx, cell *params)
// native callfunc_push_int(value); // native callfunc_push_int(value);
// native callfunc_push_float(Float: value); // native callfunc_push_float(Float: value);
static cell AMX_NATIVE_CALL callfunc_push_byval(AMX *amx, cell *params) static cell callfunc_push_byval(AMX *amx, cell *params)
{ {
CPluginMngr::CPlugin *curPlugin = g_plugins.findPluginFast(amx); CPluginMngr::CPlugin *curPlugin = g_plugins.findPluginFast(amx);
if (!g_CallFunc_Plugin) if (!g_CallFunc_Plugin)
@@ -2499,7 +2495,7 @@ static cell AMX_NATIVE_CALL callfunc_push_byval(AMX *amx, cell *params)
// native callfunc_push_intref(&value); // native callfunc_push_intref(&value);
// native callfunc_push_floatref(Float: &value); // native callfunc_push_floatref(Float: &value);
static cell AMX_NATIVE_CALL callfunc_push_byref(AMX *amx, cell *params) static cell callfunc_push_byref(AMX *amx, cell *params)
{ {
CPluginMngr::CPlugin *curPlugin = g_plugins.findPluginFast(amx); CPluginMngr::CPlugin *curPlugin = g_plugins.findPluginFast(amx);
if (!g_CallFunc_Plugin) if (!g_CallFunc_Plugin)
@@ -2557,7 +2553,7 @@ static cell AMX_NATIVE_CALL callfunc_push_byref(AMX *amx, cell *params)
} }
// native callfunc_push_str(value[]); // native callfunc_push_str(value[]);
static cell AMX_NATIVE_CALL callfunc_push_str(AMX *amx, cell *params) static cell callfunc_push_str(AMX *amx, cell *params)
{ {
CPluginMngr::CPlugin *curPlugin = g_plugins.findPluginFast(amx); CPluginMngr::CPlugin *curPlugin = g_plugins.findPluginFast(amx);
if (!g_CallFunc_Plugin) if (!g_CallFunc_Plugin)
@@ -2618,54 +2614,34 @@ static cell AMX_NATIVE_CALL callfunc_push_str(AMX *amx, cell *params)
} }
// get_langsnum(); // get_langsnum();
static cell AMX_NATIVE_CALL get_langsnum(AMX *amx, cell *params) static cell get_langsnum(AMX *amx, cell *params)
{ {
return g_langMngr.GetLangsNum(); return g_langMngr.GetLangsNum();
} }
// get_lang(id, name[(at least 3)]); // get_lang(id, name[(at least 3)]);
static cell AMX_NATIVE_CALL get_lang(AMX *amx, cell *params) static cell get_lang(AMX *amx, cell *params)
{ {
set_amxstring(amx, params[2], g_langMngr.GetLangName(params[1]), 2); set_amxstring(amx, params[2], g_langMngr.GetLangName(params[1]), 2);
return 0; return 0;
} }
// register_dictionary(const filename[]); // register_dictionary(const filename[]);
static cell AMX_NATIVE_CALL register_dictionary(AMX *amx, cell *params) 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/amxmodx/data"), get_amxstring(amx, params[1], 1, len))); get_localinfo("amxx_datadir", "addons/amxx/data"), get_amxstring(amx, params[1], 1, len)));
return result; return result;
} }
static cell AMX_NATIVE_CALL plugin_flags(AMX *amx, cell *params)
{
AMX_HEADER *hdr;
hdr = (AMX_HEADER *)amx->base;
return hdr->flags;
}
// lang_exists(const name[]); // lang_exists(const name[]);
static cell AMX_NATIVE_CALL lang_exists(AMX *amx, cell *params) static cell lang_exists(AMX *amx, cell *params)
{ {
int len = 0; int len = 0;
return g_langMngr.LangExists(get_amxstring(amx, params[1], 1, len)) ? 1 : 0; return g_langMngr.LangExists(get_amxstring(amx, params[1], 1, len)) ? 1 : 0;
} }
cell AMX_NATIVE_CALL require_module(AMX *amx, cell *params)
{
int len = 0;
String s;
s.assign(get_amxstring(amx, params[1], 0, len));
CurModuleList.push(s);
return 1;
}
AMX_NATIVE_INFO amxmod_Natives[] = { AMX_NATIVE_INFO amxmod_Natives[] = {
{ "client_cmd", client_cmd }, { "client_cmd", client_cmd },
{ "client_print", client_print }, { "client_print", client_print },
@@ -2765,7 +2741,6 @@ AMX_NATIVE_INFO amxmod_Natives[] = {
{ "register_logevent",register_logevent}, { "register_logevent",register_logevent},
{ "register_menucmd", register_menucmd }, { "register_menucmd", register_menucmd },
{ "register_menuid", register_menuid }, { "register_menuid", register_menuid },
{ "require_module", require_module },
{ "register_plugin", register_plugin }, { "register_plugin", register_plugin },
{ "register_srvcmd", register_srvcmd }, { "register_srvcmd", register_srvcmd },
{ "remove_cvar_flags", remove_cvar_flags }, { "remove_cvar_flags", remove_cvar_flags },
@@ -2823,6 +2798,5 @@ AMX_NATIVE_INFO amxmod_Natives[] = {
{ "lang_exists", lang_exists }, { "lang_exists", lang_exists },
{ "md5", amx_md5 }, { "md5", amx_md5 },
{ "md5_file", amx_md5_file }, { "md5_file", amx_md5_file },
{ "plugin_flags", plugin_flags},
{ NULL, NULL } { NULL, NULL }
}; };

View File

@@ -140,7 +140,7 @@ extern CList<CCVar> g_cvars;
extern CList<ForceObject> g_forcemodels; extern CList<ForceObject> g_forcemodels;
extern CList<ForceObject> g_forcesounds; extern CList<ForceObject> g_forcesounds;
extern CList<ForceObject> g_forcegeneric; extern CList<ForceObject> g_forcegeneric;
extern CList<CModule,const char *> g_modules; extern CList<CModule> g_modules;
extern CList<CPlayer*> g_auth; extern CList<CPlayer*> g_auth;
extern EventsMngr g_events; extern EventsMngr g_events;
extern Grenades g_grenades; extern Grenades g_grenades;
@@ -157,6 +157,7 @@ extern XVars g_xvars;
extern bool g_bmod_cstrike; extern bool g_bmod_cstrike;
extern bool g_bmod_dod; extern bool g_bmod_dod;
extern bool g_dontprecache; extern bool g_dontprecache;
extern bool g_initialized;
extern int g_srvindex; extern int g_srvindex;
extern cvar_t* amxmodx_version; extern cvar_t* amxmodx_version;
extern cvar_t* hostname; extern cvar_t* hostname;
@@ -242,7 +243,7 @@ AMX* get_amxscript(int, void**,const char**);
const char* get_amxscriptname(AMX* amx); const char* get_amxscriptname(AMX* amx);
char* get_amxstring(AMX *amx,cell amx_addr,int id,int& len); char* get_amxstring(AMX *amx,cell amx_addr,int id,int& len);
int amxstring_len(cell* cstr); int amxstring_len(cell* cstr);
int load_amxscript(AMX* amx, void** program, const char* path, char error[64], int debug); int load_amxscript(AMX* amx, void** program, const char* path, char error[64]);
int set_amxnatives(AMX* amx,char error[64]); int set_amxnatives(AMX* amx,char error[64]);
int set_amxstring(AMX *amx,cell amx_addr,const char *source,int max); int set_amxstring(AMX *amx,cell amx_addr,const char *source,int max);
int unload_amxscript(AMX* amx,void** program); int unload_amxscript(AMX* amx,void** program);
@@ -254,7 +255,6 @@ void* alloc_amxmemory(void**, int size);
void free_amxmemory(void **ptr); void free_amxmemory(void **ptr);
// get_localinfo // get_localinfo
const char* get_localinfo( const char* name , const char* def ); const char* get_localinfo( const char* name , const char* def );
cell AMX_NATIVE_CALL require_module(AMX *amx, cell *params);
enum ModuleCallReason enum ModuleCallReason
{ {
@@ -267,7 +267,6 @@ enum ModuleCallReason
extern ModuleCallReason g_ModuleCallReason; // modules.cpp extern ModuleCallReason g_ModuleCallReason; // modules.cpp
extern CModule *g_CurrentlyCalledModule; // modules.cpp extern CModule *g_CurrentlyCalledModule; // modules.cpp
extern const char *g_LastRequestedFunc; // modules.cpp extern const char *g_LastRequestedFunc; // modules.cpp
extern CQueue<String> CurModuleList;
void *Module_ReqFnptr(const char *funcName); // modules.cpp void *Module_ReqFnptr(const char *funcName); // modules.cpp

View File

@@ -270,7 +270,6 @@ 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

@@ -40,10 +40,6 @@
#endif #endif
#include "amxmodx.h" #include "amxmodx.h"
#ifndef __linux__
#define vsnprintf _vsnprintf
#endif
CLog::CLog() CLog::CLog()
{ {
m_LogType = 0; m_LogType = 0;
@@ -162,7 +158,7 @@ void CLog::Log(const char *fmt, ...)
va_list arglst; va_list arglst;
va_start(arglst, fmt); va_start(arglst, fmt);
vsnprintf(msg, 3071, fmt, arglst); vsprintf(msg, fmt, arglst);
va_end(arglst); va_end(arglst);
FILE *pF; FILE *pF;
@@ -185,18 +181,9 @@ 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);
}
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;
}
fclose(pF);
// print on server console // print on server console
print_srvconsole("L %s: %s\n", date, msg); print_srvconsole("L %s: %s\n", date, msg);
} }
@@ -207,7 +194,7 @@ void CLog::Log(const char *fmt, ...)
char msg[3072]; char msg[3072];
va_list arglst; va_list arglst;
va_start(arglst, fmt); va_start(arglst, fmt);
vsnprintf(msg, 3071, fmt, arglst); vsprintf(msg, fmt, arglst);
va_end(arglst); va_end(arglst);
ALERT(at_logged, "%s\n", msg); ALERT(at_logged, "%s\n", 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(), #pfnName); \ (*iter).GetInfo()->name, (*iter).GetPath(), #pfnArgs); \
} \ } \
} \ } \
/* 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(), #pfnName); \ (*iter).GetInfo()->name, (*iter).GetPath(), #pfnArgs); \
} \ } \
} \ } \
/* 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(), #pfnName); \ (*iter).GetInfo()->name, (*iter).GetPath(), #pfnArgs); \
} \ } \
} \ } \
/* Set meta result to the highest value */ \ /* Set meta result to the highest value */ \
@@ -412,10 +412,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(), #pfnName); \ (*iter).GetInfo()->name, (*iter).GetPath(), #pfnArgs); \
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 */ \
@@ -2703,7 +2700,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( NEW_DLL_FUNCTIONS ) ); memcpy( pNewFunctionTable, &g_NewDllFunctionTable, sizeof( DLL_FUNCTIONS ) );
// Make sure there is a core plugin // Make sure there is a core plugin
AddCorePlugin(); AddCorePlugin();
@@ -2738,7 +2735,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( NEW_DLL_FUNCTIONS ) ); memcpy( pNewFunctionTable, &g_NewDllFunctionTable_Post, sizeof( DLL_FUNCTIONS ) );
// Make sure there is a core plugin // Make sure there is a core plugin
AddCorePlugin(); AddCorePlugin();

View File

@@ -37,19 +37,6 @@
#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
@@ -370,7 +357,6 @@ 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);
} }
@@ -385,8 +371,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);
} }
@@ -401,8 +387,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);
} }
@@ -421,7 +407,6 @@ 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

@@ -57,7 +57,6 @@ void (*function)(void*);
void (*endfunction)(void*); void (*endfunction)(void*);
CLog g_log; CLog g_log;
CQueue<String> CurModuleList;
CForwardMngr g_forwards; CForwardMngr g_forwards;
CList<CPlayer*> g_auth; CList<CPlayer*> g_auth;
CList<CCVar> g_cvars; CList<CCVar> g_cvars;
@@ -82,6 +81,7 @@ bool g_bmod_dod;
bool g_dontprecache; bool g_dontprecache;
bool g_forcedmodules; bool g_forcedmodules;
bool g_forcedsounds; bool g_forcedsounds;
bool g_initialized;
fakecmd_t g_fakecmd; fakecmd_t g_fakecmd;
float g_game_restarting; float g_game_restarting;
float g_game_timeleft; float g_game_timeleft;
@@ -105,7 +105,6 @@ int g_srvindex;
cvar_t init_amxmodx_version = {"amxmodx_version", "", FCVAR_SERVER | FCVAR_SPONLY}; cvar_t init_amxmodx_version = {"amxmodx_version", "", FCVAR_SERVER | FCVAR_SPONLY};
cvar_t init_amxmodx_modules = {"amxmodx_modules", "", FCVAR_SPONLY}; cvar_t init_amxmodx_modules = {"amxmodx_modules", "", FCVAR_SPONLY};
cvar_t init_amxmodx_debug = {"amx_debug", "", FCVAR_SPONLY};
cvar_t* amxmodx_version = NULL; cvar_t* amxmodx_version = NULL;
cvar_t* amxmodx_modules = NULL; cvar_t* amxmodx_modules = NULL;
cvar_t* hostname = NULL; cvar_t* hostname = NULL;
@@ -200,6 +199,10 @@ const char* get_localinfo( const char* name , const char* def )
// Initialize AMX stuff and load it's plugins from plugins.ini list // Initialize AMX stuff and load it's plugins from plugins.ini list
// Call precache forward function from plugins // Call precache forward function from plugins
int C_Spawn( edict_t *pent ) { int C_Spawn( edict_t *pent ) {
if ( g_initialized ) RETURN_META_VALUE(MRES_IGNORED, 0);
g_initialized = true;
g_forcedmodules = false; g_forcedmodules = false;
g_forcedsounds = false; g_forcedsounds = false;
@@ -208,7 +211,6 @@ int C_Spawn( edict_t *pent ) {
hostname = CVAR_GET_POINTER("hostname"); hostname = CVAR_GET_POINTER("hostname");
mp_timelimit = CVAR_GET_POINTER("mp_timelimit"); mp_timelimit = CVAR_GET_POINTER("mp_timelimit");
g_forwards.clear();
g_log.MapChange(); g_log.MapChange();
@@ -216,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/amxmodx/data"))); g_langMngr.LoadCache(build_pathname("%s/dictionary.cache", get_localinfo("amxx_datadir", "addons/amxx/data")));
g_langMngr.Load(build_pathname("%s/languages.dat", get_localinfo("amxmodx_datadir", "addons/amxmodx/data"))); g_langMngr.Load(build_pathname("%s/languages.dat", get_localinfo("amxx_datadir", "addons/amxx/data")));
// ###### Initialize commands prefixes // ###### Initialize commands prefixes
g_commands.registerPrefix( "amx" ); g_commands.registerPrefix( "amx" );
g_commands.registerPrefix( "amxx" ); g_commands.registerPrefix( "amxx" );
@@ -227,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/amxmodx"); get_localinfo("amxx_basedir", "addons/amxx");
get_localinfo("amxx_pluginsdir", "addons/amxmodx/plugins"); get_localinfo("amxx_pluginsdir", "addons/amxx/plugins");
get_localinfo("amxx_modulesdir", "addons/amxmodx/modules"); get_localinfo("amxx_modulesdir", "addons/amxx/modules");
get_localinfo("amxx_configsdir", "addons/amxmodx/configs"); get_localinfo("amxx_configsdir", "addons/amxx/configs");
get_localinfo("amxx_customdir", "addons/amxmodx/custom"); get_localinfo("amxx_customdir", "addons/amxx/custom");
// ###### Load modules // ###### Load modules
loadModules(get_localinfo("amxx_modules", "addons/amxmodx/configs/modules.ini")); loadModules(get_localinfo("amxx_modules", "addons/amxx/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
@@ -244,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/amxmodx/configs/vault.ini")) ); g_vault.setSource( build_pathname("%s", get_localinfo("amxx_vault", "addons/amxx/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)
{ {
@@ -266,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/amxmodx/configs/plugins.ini") ); g_plugins.loadPluginsFromFile( get_localinfo("amxx_plugins", "addons/amxx/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_STOP, FP_CELL, FP_DONE); FF_ClientCommand = registerForward("client_command", ET_IGNORE, 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);
@@ -297,9 +299,6 @@ int C_Spawn( edict_t *pent ) {
} }
// HACKHACK:
// Make sure this function wont be called anymore
g_FakeMeta.m_Plugins.begin()->GetDllFuncTable().pfnSpawn = NULL;
RETURN_META_VALUE(MRES_IGNORED, 0); RETURN_META_VALUE(MRES_IGNORED, 0);
} }
@@ -399,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/amxmodx/data"))); g_langMngr.Save(build_pathname("%s/languages.dat", get_localinfo("amxx_datadir", "addons/amxx/data")));
g_langMngr.SaveCache(build_pathname("%s/dictionary.cache", get_localinfo("amxx_datadir", "addons/amxmodx/data"))); g_langMngr.SaveCache(build_pathname("%s/dictionary.cache", get_localinfo("amxx_datadir", "addons/amxx/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;
@@ -441,12 +440,10 @@ void C_ServerDeactivate() {
// However leave AMX modules which are loaded only once // However leave AMX modules which are loaded only once
void C_ServerDeactivate_Post() { void C_ServerDeactivate_Post() {
// HACKHACK: g_initialized = false;
// Make sure the spawn function will be called again
// pft that's not really a hack
g_FakeMeta.m_Plugins.begin()->GetDllFuncTable().pfnSpawn = C_Spawn;
detachReloadModules(); detachReloadModules();
g_auth.clear(); g_auth.clear();
g_forwards.clear(); g_forwards.clear();
g_commands.clear(); g_commands.clear();
@@ -461,16 +458,9 @@ 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/amxmodx/data"))); g_langMngr.Save(build_pathname("%s/languages.dat", get_localinfo("amxx_datadir", "addons/amxx/data")));
g_langMngr.SaveCache(build_pathname("%s/dictionary.cache", get_localinfo("amxx_datadir", "addons/amxmodx/data"))); g_langMngr.SaveCache(build_pathname("%s/dictionary.cache", get_localinfo("amxx_datadir", "addons/amxx/data")));
g_langMngr.Clear(); g_langMngr.Clear();
//clear module name cache
while (!CurModuleList.empty())
{
CurModuleList.pop();
}
// last memreport // last memreport
#ifdef MEMORY_TEST #ifdef MEMORY_TEST
if (g_memreport_enabled) if (g_memreport_enabled)
@@ -483,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/amxmodx")), 0700); mkdir(build_pathname("%s/memreports", get_localinfo("amxx_basedir", "addons/amxx")), 0700);
#else #else
mkdir(build_pathname("%s/memreports", get_localinfo("amxx_basedir", "addons/amxmodx"))); mkdir(build_pathname("%s/memreports", get_localinfo("amxx_basedir", "addons/amxx")));
#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/amxmodx"), curTime->tm_mon + 1, curTime->tm_mday, i); sprintf(buffer, "%s/memreports/D%02d%02d%03d", get_localinfo("amxx_basedir", "addons/amxx"), 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)
@@ -748,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/amxmodx")), 0700); mkdir(build_pathname("%s/memreports", get_localinfo("amxx_basedir", "addons/amxx")), 0700);
#else #else
mkdir(build_pathname("%s/memreports", get_localinfo("amxx_basedir", "addons/amxmodx"))); mkdir(build_pathname("%s/memreports", get_localinfo("amxx_basedir", "addons/amxx")));
#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/amxmodx"), curTime->tm_mon + 1, curTime->tm_mday, i); sprintf(buffer, "%s/memreports/D%02d%02d%03d", get_localinfo("amxx_basedir", "addons/amxx"), 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)
@@ -1033,14 +1023,13 @@ 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;
CVAR_REGISTER(&init_amxmodx_version); CVAR_REGISTER(&init_amxmodx_version);
CVAR_REGISTER(&init_amxmodx_modules); CVAR_REGISTER(&init_amxmodx_modules);
CVAR_REGISTER(&init_amxmodx_debug);
amxmodx_version = CVAR_GET_POINTER(init_amxmodx_version.name); amxmodx_version = CVAR_GET_POINTER(init_amxmodx_version.name);
REG_SVR_COMMAND("amxx",amx_command); REG_SVR_COMMAND("amxx",amx_command);
@@ -1061,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/amxmodx/configs/core.ini"))); amx_config.setSource(build_pathname("%s", get_localinfo("amxx_cfg", "addons/amxx/configs/core.ini")));
if ( amx_config.loadVault() ){ if ( amx_config.loadVault() ){
Vault::iterator a = amx_config.begin(); Vault::iterator a = amx_config.begin();
@@ -1073,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/amxmodx/logs")); g_log_dir.assign(get_localinfo("amxx_logs", "addons/amxx/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/amxmodx/configs/modules.ini") ); attachMetaModModules(now, get_localinfo("amxx_modules", "addons/amxx/configs/modules.ini") );
return(TRUE); return(TRUE);
} }
@@ -1238,6 +1227,15 @@ C_DLLEXPORT int GetEngineFunctions(enginefuncs_t *pengfuncsFromEngine, int *inte
meta_engfuncs.pfnChangeLevel = C_ChangeLevel; meta_engfuncs.pfnChangeLevel = C_ChangeLevel;
return g_FakeMeta.GetEngineFunctions(pengfuncsFromEngine, interfaceVersion, &meta_engfuncs); return g_FakeMeta.GetEngineFunctions(pengfuncsFromEngine, interfaceVersion, &meta_engfuncs);
/*
if(*interfaceVersion!=ENGINE_INTERFACE_VERSION) {
LOG_ERROR(PLID, "GetEngineFunctions version mismatch; requested=%d ours=%d", *interfaceVersion, ENGINE_INTERFACE_VERSION);
*interfaceVersion = ENGINE_INTERFACE_VERSION;
return(FALSE);
}
memcpy(pengfuncsFromEngine, &meta_engfuncs, sizeof(enginefuncs_t));
return(TRUE);
*/
} }
enginefuncs_t meta_engfuncs_post; enginefuncs_t meta_engfuncs_post;
@@ -1280,6 +1278,15 @@ C_DLLEXPORT int GetEngineFunctions_Post(enginefuncs_t *pengfuncsFromEngine, int
++iter; ++iter;
} }
return g_FakeMeta.GetEngineFunctions_Post(pengfuncsFromEngine, interfaceVersion, &meta_engfuncs_post); return g_FakeMeta.GetEngineFunctions_Post(pengfuncsFromEngine, interfaceVersion, &meta_engfuncs_post);
/*
if(*interfaceVersion!=ENGINE_INTERFACE_VERSION) {
LOG_ERROR(PLID, "GetEngineFunctions_Post version mismatch; requested=%d ours=%d", *interfaceVersion, ENGINE_INTERFACE_VERSION);
*interfaceVersion = ENGINE_INTERFACE_VERSION;
return(FALSE);
}
memcpy(pengfuncsFromEngine, &meta_engfuncs_post, sizeof(enginefuncs_t));
return(TRUE);
*/
} }
NEW_DLL_FUNCTIONS gNewDLLFunctionTable; NEW_DLL_FUNCTIONS gNewDLLFunctionTable;

View File

@@ -34,7 +34,7 @@
#include "CFile.h" #include "CFile.h"
#include "amxxfile.h" #include "amxxfile.h"
CList<CModule,const char*> g_modules; CList<CModule> g_modules;
CList<CScript,AMX*> g_loadedscripts; CList<CScript,AMX*> g_loadedscripts;
CModule *g_CurrentlyCalledModule = NULL; // The module we are in at the moment; NULL otherwise CModule *g_CurrentlyCalledModule = NULL; // The module we are in at the moment; NULL otherwise
@@ -44,6 +44,7 @@ ModuleCallReason g_ModuleCallReason;
extern const char* no_function; // stupid work around extern const char* no_function; // stupid work around
void report_error( int code, char* fmt, ... ) void report_error( int code, char* fmt, ... )
{ {
va_list argptr; va_list argptr;
@@ -87,7 +88,7 @@ void free_amxmemory(void **ptr)
*ptr = 0; *ptr = 0;
} }
int load_amxscript(AMX *amx, void **program, const char *filename, char error[64], int debug) int load_amxscript(AMX *amx, void **program, const char *filename, char error[64])
{ {
*error = 0; *error = 0;
CAmxxReader reader(filename, SMALL_CELL_SIZE / 8); CAmxxReader reader(filename, SMALL_CELL_SIZE / 8);
@@ -148,14 +149,6 @@ int load_amxscript(AMX *amx, void **program, const char *filename, char error[64
return (amx->error = AMX_ERR_FORMAT); return (amx->error = AMX_ERR_FORMAT);
} }
#ifdef JIT
if ( ((int)CVAR_GET_FLOAT("amx_debug") == 2 || (debug && (int)CVAR_GET_FLOAT("amx_debug"))) )
{
//automatic debug mode
hdr->flags |= AMX_FLAG_LINEOPS;
}
#endif
int err; int err;
memset(amx, 0, sizeof(*amx)); memset(amx, 0, sizeof(*amx));
if ((err = amx_Init( amx, *program )) != AMX_ERR_NONE) if ((err = amx_Init( amx, *program )) != AMX_ERR_NONE)
@@ -164,6 +157,7 @@ int load_amxscript(AMX *amx, void **program, const char *filename, char error[64
return (amx->error = AMX_ERR_INIT); return (amx->error = AMX_ERR_INIT);
} }
#ifdef JIT #ifdef JIT
void *np = new char[ amx->code_size ]; void *np = new char[ amx->code_size ];
void *rt = new char[ amx->reloc_size ]; void *rt = new char[ amx->reloc_size ];
@@ -213,96 +207,9 @@ int load_amxscript(AMX *amx, void **program, const char *filename, char error[64
return set_amxnatives(amx,error); return set_amxnatives(amx,error);
} }
const char *StrCaseStr(const char *as, const char *bs)
{
static char a[256];
static char b[256];
unsigned int i = 0;
unsigned int len = strlen(as);
if (len > 254)
len = 254;
for (i=0; i<len; i++)
{
a[i] = tolower(as[i]);
}
a[len] = 0;
len = strlen(bs);
if (len > 254)
len = 254;
for (i=0; i<len; i++)
{
b[i] = tolower(bs[i]);
}
b[len] = 0;
return strstr(a,b);
}
//BAILOPAN
int CheckModules(AMX *amx, char error[64])
{
int idx = 0, flag = -1;
if (amx_FindPublic(amx, "plugin_modules", &idx) == AMX_ERR_NONE)
{
cell retVal = 0;
int err = 0;
if ( (err = amx_Exec(amx, &retVal, idx, 0)) == AMX_ERR_NONE )
{
unsigned int i = 0;
while (!CurModuleList.empty())
{
if (!flag)
{
CurModuleList.pop();
continue;
}
//assume module is not found
flag = 0;
for (CList<CModule,const char *>::iterator pMod = g_modules.begin(); pMod; ++pMod)
{
if (strcmpi(CurModuleList.front().c_str(), "dbi") == 0)
{
if (StrCaseStr( (*pMod).getName(), "sql") || strstr( (*pMod).getName(), "dbi" ))
{
// the module checks in
flag = 1;
break;
}
} else {
if (strcmpi( (*pMod).getName(), CurModuleList.front().c_str() ) == 0)
{
flag = 1;
break;
}
}
}
//module was not found
if (!flag)
{
sprintf(error, "Module \"%s\" required for plugin. Check modules.ini.", CurModuleList.front().c_str());
}
CurModuleList.pop();
}
} else {
AMXXLOG_Log("[AMXX] Run time error %d on line %ld during module check.", err, amx->curline);
//could not execute
return -1; //bad! very bad!
}
} else {
return -1;
}
return flag;
}
int set_amxnatives(AMX* amx,char error[64]) int set_amxnatives(AMX* amx,char error[64])
{ {
for ( CList<CModule,const char *>::iterator a = g_modules.begin(); a ; ++a ) for ( CList<CModule>::iterator a = g_modules.begin(); a ; ++a )
{ {
for( CList<AMX_NATIVE_INFO*>::iterator cc = for( CList<AMX_NATIVE_INFO*>::iterator cc =
(*a).m_Natives.begin(); cc; ++cc ) (*a).m_Natives.begin(); cc; ++cc )
@@ -319,29 +226,14 @@ int set_amxnatives(AMX* amx,char error[64])
if ( amx_Register(amx, core_Natives, -1) != AMX_ERR_NONE ) if ( amx_Register(amx, core_Natives, -1) != AMX_ERR_NONE )
{ {
//HACKHACK - if we get here, nullify the plugin's native table sprintf(error,"Function not found (name \"%s\")",no_function);
//then reregister the one native we need
// - BAILOPAN
String save;
save.assign(no_function);
amx_NullNativeTable(amx);
AMX_NATIVE_INFO p[] = {
{ "require_module", require_module },
{ NULL, NULL },
};
amx_Register(amx, p, -1);
if (CheckModules(amx, error) == -1 || *error == 0)
{
sprintf(error,"Plugin uses an unknown function (name \"%s\") - check your modules.ini.",save.c_str());
}
return (amx->error = AMX_ERR_NATIVE); return (amx->error = AMX_ERR_NATIVE);
} }
CheckModules(amx, error);
return AMX_ERR_NONE; return AMX_ERR_NONE;
} }
int unload_amxscript(AMX* amx, void** program) int unload_amxscript(AMX* amx, void** program)
{ {
CList<CScript,AMX*>::iterator a = g_loadedscripts.find( amx ); CList<CScript,AMX*>::iterator a = g_loadedscripts.find( amx );
@@ -440,7 +332,7 @@ char* build_pathname_addons(char *fmt, ... )
int add_amxnatives(module_info_s* info,AMX_NATIVE_INFO*natives) int add_amxnatives(module_info_s* info,AMX_NATIVE_INFO*natives)
{ {
CList<CModule,const char *>::iterator a = g_modules.begin(); CList<CModule>::iterator a = g_modules.begin();
while ( a ) while ( a )
{ {
@@ -472,109 +364,9 @@ bool validFile(const char* file)
#endif #endif
} }
void ConvertModuleName(const char *pathString, String &path)
{
#if SMALL_CELL_SIZE==64
char *ptr = strstr(pathString, "i386");
if (ptr)
{
//attempt to fix the binary name
*ptr = 0;
path.assign(pathString);
path.append("amd64.so");
} else {
ptr = strstr(pathString, ".dll");
if (ptr)
{
*ptr = 0;
path.assign(pathString);
path.append("_amd64.so");
} else {
ptr = strstr(pathString, ".so");
if (ptr)
{
path.assign(pathString);
} else {
//no extension at all
path.assign(pathString);
path.append("_amd64.so");
}
}
}
#else
#ifdef __linux__
char *ptr = strstr(pathString, "amd64");
if (ptr)
{
//attempt to fix the binary name
*ptr = 0;
path.assign(pathString);
path.append("i386.so");
} else {
ptr = strstr(pathString, ".dll");
if (ptr)
{
*ptr = 0;
path.assign(pathString);
path.append("_i386.so");
} else {
//check to see if this file even has an extension
ptr = strstr(pathString, ".so");
if (ptr)
{
path.assign(pathString);
} else {
path.assign(pathString);
path.append("_i386.so");
}
}
}
#else
char *ptr = strstr(pathString, ".dll");
if (ptr)
{
path.assign(pathString);
} else {
//prevent this from loading .so too
ptr = strstr(pathString, ".so");
if (ptr)
{
int i = 0, len = strlen(pathString), c = -1;
for (i=len-1; i>=0; i--)
{
//cut off at first _
if (pathString[i] == '_')
{
//make sure this is a valid _
if (i == len-1 || strncmp(&(pathString[i+1]), "amxx", 4) == 0)
break;
c = i;
break;
}
}
*ptr = 0;
if (c == -1)
{
path.assign(pathString);
path.append(".dll");
} else {
ptr = (char *)&(pathString[c]);
*ptr = 0;
path.assign(pathString);
path.append(".dll");
}
} else {
path.assign(pathString);
path.append(".dll");
}
}
#endif //__linux__
#endif //SMALL_CELL_SIZE==64
}
int loadModules(const char* filename) int loadModules(const char* filename)
{ {
FILE *fp = fopen(build_pathname("%s",filename), "rt"); File fp( build_pathname("%s",filename), "r" );
if ( !fp ) if ( !fp )
{ {
@@ -582,40 +374,23 @@ int loadModules(const char* filename)
return 0; return 0;
} }
char moduleName[256]; char line[256], moduleName[256];
char pathString[512];
String line;
int loaded = 0; int loaded = 0;
String path; while ( fp.getline( line , 255 ) )
while (!feof(fp))
{ {
if (!line._fread(fp) || line.size() < 1)
continue;
line.trim();
*moduleName = 0; *moduleName = 0;
if (sscanf(line.c_str(),"%s",moduleName) == EOF) sscanf(line,"%s",moduleName);
continue; if (!isalnum(*moduleName) || !validFile(moduleName) )
if (moduleName[0] == ';')
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"), moduleName); CList<CModule>::iterator a = g_modules.find( pathname );
strcpy(pathString, pathname);
path.assign("");
ConvertModuleName(pathString, path);
if (!validFile(path.c_str()))
continue;
CList<CModule,const char *>::iterator a = g_modules.find( path.c_str() );
if ( a ) continue; // already loaded if ( a ) continue; // already loaded
CModule* cc = new CModule( path.c_str() ); CModule* cc = new CModule( pathname );
if ( cc == 0 ) return loaded; if ( cc == 0 ) return loaded;
@@ -623,45 +398,42 @@ int loadModules(const char* filename)
switch( cc->getStatusValue() ) { switch( cc->getStatusValue() ) {
case MODULE_BADLOAD: case MODULE_BADLOAD:
report_error( 1 , "[AMXX] Module is not a valid library (file \"%s\")", path.c_str()); report_error( 1 , "[AMXX] Module is not a valid library (file \"%s\")",pathname );
break; break;
case MODULE_NOINFO: case MODULE_NOINFO:
report_error( 1 ,"[AMXX] Couldn't find info. about module (file \"%s\")", path.c_str()); report_error( 1 ,"[AMXX] Couldn't find info. about module (file \"%s\")",pathname );
break; break;
case MODULE_NOQUERY: case MODULE_NOQUERY:
report_error( 1 , "[AMXX] Couldn't find \"AMX_Query\" or \"AMXX_Query\" (file \"%s\")", path.c_str()); report_error( 1 , "[AMXX] Couldn't find \"AMX_Query\" or \"AMXX_Query\" (file \"%s\")", pathname );
break; break;
case MODULE_NOATTACH: case MODULE_NOATTACH:
report_error( 1 , "[AMXX] Couldn't find \"%s\" (file \"%s\")", cc->isAmxx() ? "AMXX_Attach" : "AMX_Attach", path.c_str()); report_error( 1 , "[AMXX] Couldn't find \"%s\" (file \"%s\")", cc->isAmxx() ? "AMXX_Attach" : "AMX_Attach", pathname );
break; break;
case MODULE_OLD: case MODULE_OLD:
report_error( 1 , "[AMXX] Module has a different interface version (file \"%s\")",path.c_str()); report_error( 1 , "[AMXX] Module has a different interface version (file \"%s\")",pathname );
break; break;
case MODULE_NEWER: case MODULE_NEWER:
report_error(1, "[AMXX] Module has a newer interface version (file \"%s\"). Please download a new amxmodx.", path.c_str()); report_error(1, "[AMXX] Module has a newer interface version (file \"%s\"). Please download a new amxmodx.", pathname);
break; break;
case MODULE_INTERROR: case MODULE_INTERROR:
report_error(1, "[AMXX] Internal error during module load (file \"%s\")", path.c_str()); report_error(1, "[AMXX] Internal error during module load (file \"%s\")", pathname);
break; break;
case MODULE_NOT64BIT: case MODULE_NOT64BIT:
report_error(1, "[AMXX] Module \"%s\" is not 64 bit compatible.", path.c_str()); report_error(1, "[AMXX] Module \"%s\" is not 64 bit compatible.", pathname);
break; break;
default: default:
++loaded; ++loaded;
} }
g_modules.put( cc ); g_modules.put( cc );
} }
fclose(fp);
return loaded; return loaded;
} }
void detachModules() void detachModules()
{ {
CList<CModule,const char *>::iterator a = g_modules.begin(); CList<CModule>::iterator a = g_modules.begin();
while ( a ) while ( a )
{ {
@@ -672,7 +444,7 @@ void detachModules()
void detachReloadModules() void detachReloadModules()
{ {
CList<CModule,const char *>::iterator a = g_modules.begin(); CList<CModule>::iterator a = g_modules.begin();
while ( a ) while ( a )
{ {
@@ -690,7 +462,7 @@ void detachReloadModules()
void attachModules() void attachModules()
{ {
CList<CModule,const char *>::iterator a = g_modules.begin(); CList<CModule>::iterator a = g_modules.begin();
while ( a ) while ( a )
{ {
@@ -742,7 +514,6 @@ void attachMetaModModules(PLUG_LOADTIME now, const char* filename)
} }
char line[256], moduleName[256]; char line[256], moduleName[256];
String modPath, mmPath;
DLHANDLE module; DLHANDLE module;
while ( fp.getline( line , 255 ) ) while ( fp.getline( line , 255 ) )
@@ -750,34 +521,12 @@ void attachMetaModModules(PLUG_LOADTIME now, const char* filename)
*moduleName = 0; *moduleName = 0;
sscanf(line,"%s",moduleName); sscanf(line,"%s",moduleName);
if (!isalnum(*moduleName)) if (!isalnum(*moduleName) || !validFile(moduleName) )
continue; continue;
char* pathname = build_pathname("%s/%s", get_localinfo("amxx_modulesdir", "addons/amxmodx/modules"), line); char* pathname = build_pathname("%s/%s", get_localinfo("amxx_modulesdir", "addons/amxx/modules"), line);
char* mmpathname = build_pathname_addons("%s/%s", get_localinfo("amxx_modulesdir", "addons/amxmodx/modules"), line); char* mmpathname = build_pathname_addons("%s/%s", get_localinfo("amxx_modulesdir", "addons/amxx/modules"), line);
module = DLLOAD( pathname ); // link dll
ConvertModuleName(pathname, modPath);
ConvertModuleName(mmpathname, mmPath);
CList<CFakeMeta::CFakeMetaPlugin>::iterator iter = g_FakeMeta.m_Plugins.begin();
//prevent double loading
int foundFlag = 0;
while (iter)
{
if ( strcmp( (*iter).GetPath(), mmPath.c_str() ) == 0 )
{
foundFlag = 1;
break;
}
++iter;
}
if (foundFlag)
continue;
module = DLLOAD( modPath.c_str() ); // link dll
if ( module ) if ( module )
{ {
@@ -786,7 +535,7 @@ void attachMetaModModules(PLUG_LOADTIME now, const char* filename)
if ( a ) if ( a )
{ {
g_FakeMeta.AddPlugin(mmPath.c_str()); g_FakeMeta.AddPlugin(mmpathname);
} }
} }
} }
@@ -799,7 +548,7 @@ void attachMetaModModules(PLUG_LOADTIME now, const char* filename)
// Get the number of running modules // Get the number of running modules
int countModules(CountModulesMode mode) int countModules(CountModulesMode mode)
{ {
CList<CModule,const char *>::iterator iter; CList<CModule>::iterator iter;
int num; int num;
switch (mode) switch (mode)
{ {
@@ -832,7 +581,7 @@ int countModules(CountModulesMode mode)
// Call all modules' AMXX_PluginsLoaded functions // Call all modules' AMXX_PluginsLoaded functions
void modules_callPluginsLoaded() void modules_callPluginsLoaded()
{ {
CList<CModule,const char *>::iterator iter = g_modules.begin(); CList<CModule>::iterator iter = g_modules.begin();
while (iter) while (iter)
{ {
(*iter).CallPluginsLoaded(); (*iter).CallPluginsLoaded();
@@ -844,7 +593,7 @@ void modules_callPluginsLoaded()
int MNF_AddNatives(AMX_NATIVE_INFO* natives) int MNF_AddNatives(AMX_NATIVE_INFO* natives)
{ {
CList<CModule,const char *>::iterator a = g_modules.begin(); CList<CModule>::iterator a = g_modules.begin();
if (!g_CurrentlyCalledModule || g_ModuleCallReason != ModuleCall_Attach) if (!g_CurrentlyCalledModule || g_ModuleCallReason != ModuleCall_Attach)
return FALSE; // may only be called from attach return FALSE; // may only be called from attach
@@ -954,14 +703,6 @@ 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));
@@ -1115,39 +856,6 @@ void MNF_MergeDefinitionFile(const char *file)
g_langMngr.MergeDefinitionFile(file); g_langMngr.MergeDefinitionFile(file);
} }
edict_t* MNF_GetPlayerEdict(int id)
{
if (id < 1 || id > gpGlobals->maxClients)
return NULL;
return (GET_PLAYER_POINTER_I(id)->pEdict);
}
const char *MNF_Format(const char *fmt, ...)
{
va_list ap;
va_start(ap, fmt);
const char *retVal = g_langMngr.FormatString(fmt, ap);
va_end(ap);
return retVal;
}
#ifndef MEMORY_TEST
void *MNF_Allocator(const char *sourceFile, const unsigned int sourceLine, const char *sourceFunc, const unsigned int allocationType, const size_t reportedSize)
{
return malloc(reportedSize);
}
void *MNF_Reallocator(const char *sourceFile, const unsigned int sourceLine, const char *sourceFunc, const unsigned int reallocationType, const size_t reportedSize, void *reportedAddress)
{
return realloc(reportedAddress, reportedSize);
}
void MNF_Deallocator(const char *sourceFile, const unsigned int sourceLine, const char *sourceFunc, const unsigned int deallocationType, void *reportedAddress)
{
free(reportedAddress);
}
#endif
// Fnptr Request function for the new interface // Fnptr Request function for the new interface
const char *g_LastRequestedFunc = NULL; const char *g_LastRequestedFunc = NULL;
#define REGISTER_FUNC(name, func) { name, (void*)func }, #define REGISTER_FUNC(name, func) { name, (void*)func },
@@ -1166,7 +874,6 @@ void *Module_ReqFnptr(const char *funcName)
REGISTER_FUNC("GetModname", MNF_GetModname) REGISTER_FUNC("GetModname", MNF_GetModname)
REGISTER_FUNC("Log", MNF_Log) REGISTER_FUNC("Log", MNF_Log)
REGISTER_FUNC("MergeDefinitionFile", MNF_MergeDefinitionFile) REGISTER_FUNC("MergeDefinitionFile", MNF_MergeDefinitionFile)
REGISTER_FUNC("Format", MNF_Format)
// Amx scripts loading / unloading / managing // Amx scripts loading / unloading / managing
REGISTER_FUNC("GetAmxScript", MNF_GetAmxScript) REGISTER_FUNC("GetAmxScript", MNF_GetAmxScript)
@@ -1203,7 +910,6 @@ 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)
@@ -1223,7 +929,6 @@ void *Module_ReqFnptr(const char *funcName)
REGISTER_FUNC("IsPlayerHLTV", MNF_IsPlayerHLTV) REGISTER_FUNC("IsPlayerHLTV", MNF_IsPlayerHLTV)
REGISTER_FUNC("GetPlayerArmor", MNF_GetPlayerArmor) REGISTER_FUNC("GetPlayerArmor", MNF_GetPlayerArmor)
REGISTER_FUNC("GetPlayerHealth", MNF_GetPlayerHealth) REGISTER_FUNC("GetPlayerHealth", MNF_GetPlayerHealth)
REGISTER_FUNC("GetPlayerEdict", MNF_GetPlayerEdict)
REGISTER_FUNC("CellToReal", MNF_CellToReal) REGISTER_FUNC("CellToReal", MNF_CellToReal)
REGISTER_FUNC("RealToCell", MNF_RealToCell) REGISTER_FUNC("RealToCell", MNF_RealToCell)
@@ -1231,10 +936,6 @@ void *Module_ReqFnptr(const char *funcName)
REGISTER_FUNC("Allocator", m_allocator) REGISTER_FUNC("Allocator", m_allocator)
REGISTER_FUNC("Deallocator", m_deallocator) REGISTER_FUNC("Deallocator", m_deallocator)
REGISTER_FUNC("Reallocator", m_reallocator) REGISTER_FUNC("Reallocator", m_reallocator)
#else
REGISTER_FUNC("Allocator", MNF_Allocator)
REGISTER_FUNC("Deallocator", MNF_Deallocator)
REGISTER_FUNC("Reallocator", MNF_Reallocator)
#endif // MEMORY_TEST #endif // MEMORY_TEST
REGISTER_FUNC("Haha_HiddenStuff", MNF_HiddenStuff) REGISTER_FUNC("Haha_HiddenStuff", MNF_HiddenStuff)

View File

@@ -144,7 +144,7 @@ struct pfnmodule_engine_g {
const char* (*pfnget_amxscriptname)(AMX* amx); // amx const char* (*pfnget_amxscriptname)(AMX* amx); // amx
char* (*pfnget_amxstring)(AMX*,cell,int, int&); // amx, src, buffer (0-3), len char* (*pfnget_amxstring)(AMX*,cell,int, int&); // amx, src, buffer (0-3), len
void (*pfnget_modname)(char*); // modname void (*pfnget_modname)(char*); // modname
int (*pfnload_amxscript)(AMX*, void**, const char*, char[64], int); // amx, code, path, error info int (*pfnload_amxscript)(AMX*, void**, const char*, char[64]); // amx, code, path, error info
void (*pfnprint_console)(char*, ...); // format, .... void (*pfnprint_console)(char*, ...); // format, ....
void (*pfnreport_error)(int code, char*, ... ); void (*pfnreport_error)(int code, char*, ... );
int (*pfnset_amxnatives)(AMX*,char[64]); // amx, error info int (*pfnset_amxnatives)(AMX*,char[64]); // amx, error info

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/amxmodx_mm.dll" OutputFile="debug/amxx_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 ..\zlib\zlib.lib" AdditionalDependencies="odbc32.lib odbccp32.lib"
OutputFile="release/amxmodx_mm.dll" OutputFile="release/amxx_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 ..\zlib\zlib.lib" AdditionalDependencies="odbc32.lib odbccp32.lib"
OutputFile="memtestdebug/amxmodx_mm.dll" OutputFile="memtestdebug/amxx_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 ..\zlib\zlib.lib" AdditionalDependencies="odbc32.lib odbccp32.lib"
OutputFile="memtestrelease/amxmodx_mm.dll" OutputFile="memtestrelease/amxx_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 ..\zlib\zlib.lib" AdditionalDependencies="odbc32.lib odbccp32.lib ..\jit\jits.lib"
OutputFile="jitdebug/amxmodx_mm.dll" OutputFile="jitdebug/amxx_mm.dll"
Version="0.1" Version="0.1"
LinkIncremental="1" LinkIncremental="1"
SuppressStartupBanner="TRUE" SuppressStartupBanner="TRUE"
@@ -386,8 +386,8 @@
<Tool <Tool
Name="VCLinkerTool" Name="VCLinkerTool"
AdditionalOptions="/MACHINE:I386" AdditionalOptions="/MACHINE:I386"
AdditionalDependencies="..\jit\jits.obj ..\zlib\zlib.lib" AdditionalDependencies="odbc32.lib odbccp32.lib ..\jit\jits.lib ..\zlib\zlib.lib"
OutputFile="jitrelease/amxmodx_mm.dll" OutputFile="jitrelease/amxx_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 ..\zlib\zlib.lib" AdditionalDependencies="odbc32.lib odbccp32.lib ..\jit\jits.lib"
OutputFile="jitmemtestrelease/amxmodx_mm.dll" OutputFile="jitmemtestrelease/amxx_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 ..\zlib\zlib.lib" AdditionalDependencies="odbc32.lib odbccp32.lib ..\jit\jits.lib"
OutputFile="MaximalSpeed/amxmodx_mm.dll" OutputFile="MaximalSpeed/amxx_mm.dll"
LinkIncremental="1" LinkIncremental="1"
SuppressStartupBanner="TRUE" SuppressStartupBanner="TRUE"
AdditionalLibraryDirectories="..\extra\lib_win32" AdditionalLibraryDirectories="..\extra\lib_win32"

View File

@@ -2479,9 +2479,6 @@ 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;
PFN_GET_PLAYER_EDICT g_fn_GetPlayerEdict;
PFN_FORMAT g_fn_Format;
// *** 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)
@@ -2526,7 +2523,6 @@ C_DLLEXPORT int AMXX_Attach(PFN_REQ_FNPTR reqFnptrFunc)
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); REQFUNC("MergeDefinitionFile", g_fn_MergeDefinition_File, PFN_MERGEDEFINITION_FILE);
REQFUNC("Format", g_fn_Format, PFN_FORMAT);
// Amx scripts // Amx scripts
REQFUNC("GetAmxScript", g_fn_GetAmxScript, PFN_GET_AMXSCRIPT); REQFUNC("GetAmxScript", g_fn_GetAmxScript, PFN_GET_AMXSCRIPT);
@@ -2534,7 +2530,6 @@ 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);
@@ -2581,8 +2576,6 @@ 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);
REQFUNC("GetPlayerEdict", g_fn_GetPlayerEdict, PFN_GET_PLAYER_EDICT);
// Memory // Memory
REQFUNC_OPT("Allocator", g_fn_Allocator, PFN_ALLOCATOR); REQFUNC_OPT("Allocator", g_fn_Allocator, PFN_ALLOCATOR);
@@ -2677,14 +2670,11 @@ void ValidateMacros_DontCallThis_Smiley()
MF_AmxExecv(0, 0, 0, 0, 0); MF_AmxExecv(0, 0, 0, 0, 0);
MF_AmxFindPublic(0, 0, 0); MF_AmxFindPublic(0, 0, 0);
MF_AmxAllot(0, 0, 0, 0); MF_AmxAllot(0, 0, 0, 0);
MF_LoadAmxScript(0, 0, 0, 0, 0); MF_LoadAmxScript(0, 0, 0, 0);
MF_UnloadAmxScript(0, 0); MF_UnloadAmxScript(0, 0);
MF_RegisterSPForward(0, 0, 0, 0, 0, 0); MF_RegisterSPForward(0, 0, 0, 0, 0, 0);
MF_RegisterSPForwardByName(0, 0, 0, 0, 0, 0); MF_RegisterSPForwardByName(0, 0, 0, 0, 0, 0);
MF_UnregisterSPForward(0); MF_UnregisterSPForward(0);
MF_GetPlayerFrags(0);
MF_GetPlayerEdict(0);
MF_Format("", 4, "str");
} }
#endif #endif
@@ -2801,7 +2791,7 @@ void *operator new(size_t reportedSize)
return ptr; return ptr;
// allocation failed // allocation failed
return NULL; throw std::bad_alloc();
} }
void *operator new[](size_t reportedSize) void *operator new[](size_t reportedSize)
@@ -2814,7 +2804,7 @@ void *operator new[](size_t reportedSize)
return ptr; return ptr;
// allocation failed // allocation failed
return NULL; throw std::bad_alloc();
} }
// Microsoft memory tracking operators // Microsoft memory tracking operators
@@ -2828,7 +2818,7 @@ void *operator new(size_t reportedSize, const char *sourceFile, int sourceLine)
return ptr; return ptr;
// allocation failed // allocation failed
return NULL; throw std::bad_alloc();
} }
void *operator new[](size_t reportedSize, const char *sourceFile, int sourceLine) void *operator new[](size_t reportedSize, const char *sourceFile, int sourceLine)
{ {
@@ -2840,7 +2830,7 @@ void *operator new[](size_t reportedSize, const char *sourceFile, int sourceLine
return ptr; return ptr;
// allocation failed // allocation failed
return NULL; throw std::bad_alloc();
} }
void operator delete(void *reportedAddress) void operator delete(void *reportedAddress)

View File

@@ -204,9 +204,11 @@ typedef struct tagAMX {
cell reset_stk PACKED; cell reset_stk PACKED;
cell reset_hea PACKED; cell reset_hea PACKED;
cell sysreq_d PACKED; /* relocated address/value for the SYSREQ.D opcode */ cell sysreq_d PACKED; /* relocated address/value for the SYSREQ.D opcode */
#if defined JIT
/* support variables for the JIT */ /* support variables for the JIT */
int reloc_size PACKED; /* required temporary buffer for relocations */ int reloc_size PACKED; /* required temporary buffer for relocations */
long code_size PACKED; /* estimated memory footprint of the native code */ long code_size PACKED; /* estimated memory footprint of the native code */
#endif
} AMX; } AMX;
enum { enum {
@@ -238,14 +240,6 @@ 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 *****
@@ -1932,7 +1926,6 @@ 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*/);
@@ -1944,12 +1937,6 @@ typedef int (*PFN_IS_PLAYER_CONNECTING) (int /*id*/);
typedef int (*PFN_IS_PLAYER_HLTV) (int /*id*/); typedef int (*PFN_IS_PLAYER_HLTV) (int /*id*/);
typedef int (*PFN_GET_PLAYER_ARMOR) (int /*id*/); typedef int (*PFN_GET_PLAYER_ARMOR) (int /*id*/);
typedef int (*PFN_GET_PLAYER_HEALTH) (int /*id*/); typedef int (*PFN_GET_PLAYER_HEALTH) (int /*id*/);
#ifdef USE_METAMOD
typedef edict_t * (*PFN_GET_PLAYER_EDICT) (int /*id*/);
#else
typedef void * (*PFN_GET_PLAYER_EDICT) (int /*id*/);
#endif
typedef void * (*PFN_ALLOCATOR) (const char* /*filename*/, const unsigned int /*line*/, const char* /*func*/, typedef void * (*PFN_ALLOCATOR) (const char* /*filename*/, const unsigned int /*line*/, const char* /*func*/,
const unsigned int /*type*/, const size_t /*size*/); const unsigned int /*type*/, const size_t /*size*/);
typedef void * (*PFN_REALLOCATOR) (const char* /*filename*/, const unsigned int /*line*/, const char* /*func*/, typedef void * (*PFN_REALLOCATOR) (const char* /*filename*/, const unsigned int /*line*/, const char* /*func*/,
@@ -1961,7 +1948,7 @@ typedef int (*PFN_AMX_EXECV) (AMX* /*amx*/, cell* /*return val*/, int /*in
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_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*/, int /* debug */); 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*/);
typedef REAL (*PFN_CELL_TO_REAL) (cell /*x*/); typedef REAL (*PFN_CELL_TO_REAL) (cell /*x*/);
@@ -1969,7 +1956,6 @@ typedef int (*PFN_REGISTER_SPFORWARD) (AMX * /*amx*/, int /*func*/, ... /*pa
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*/); typedef void (*PFN_MERGEDEFINITION_FILE) (const char * /*filename*/);
typedef const char * (*PFN_FORMAT) (const char * /*fmt*/, ... /*params*/);
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;
@@ -2023,9 +2009,6 @@ 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;
extern PFN_GET_PLAYER_EDICT g_fn_GetPlayerEdict;
extern PFN_FORMAT g_fn_Format;
#ifdef MAY_NEVER_BE_DEFINED #ifdef MAY_NEVER_BE_DEFINED
// Function prototypes for intellisense and similar systems // Function prototypes for intellisense and similar systems
@@ -2074,9 +2057,6 @@ 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) { }
edict_t* MF_GetPlayerEdict (int id) { }
const char * MF_Format (const char *fmt, ...) { }
#endif // MAY_NEVER_BE_DEFINED #endif // MAY_NEVER_BE_DEFINED
#define MF_AddNatives g_fn_AddNatives #define MF_AddNatives g_fn_AddNatives
@@ -2131,9 +2111,6 @@ 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
#define MF_GetPlayerEdict g_fn_GetPlayerEdict
#define MF_Format g_fn_Format;
/*** Memory ***/ /*** Memory ***/
void *operator new(size_t reportedSize); void *operator new(size_t reportedSize);

View File

@@ -62,18 +62,6 @@ void amx_command(){
++a; ++a;
} }
a = g_plugins.begin();
while (a)
{
if ( (*a).getStatusCode() == ps_bad_load )
{
//error
print_srvconsole("Load fails: %s\n", (*a).getError());
}
++a;
}
print_srvconsole( "%d plugins, %d running\n",plugins,running ); print_srvconsole( "%d plugins, %d running\n",plugins,running );
} }
@@ -150,15 +138,7 @@ void amx_command(){
print_srvconsole( "%s %s\n", Plugin_info.name, Plugin_info.version); print_srvconsole( "%s %s\n", Plugin_info.name, Plugin_info.version);
print_srvconsole( "author: %s (%s)\n", Plugin_info.author, Plugin_info.url); print_srvconsole( "author: %s (%s)\n", Plugin_info.author, Plugin_info.url);
print_srvconsole( "compiled: %s\n", __DATE__ ", " __TIME__); print_srvconsole( "compiled: %s\n", __DATE__ ", " __TIME__);
#ifdef JIT
print_srvconsole( "Core mode: JIT\n");
#else
#ifdef ASM32
print_srvconsole( "Core mode: ASM\n");
#else
print_srvconsole( "Core mode: Normal\n");
#endif
#endif
} }
else if (!strcmp(cmd,"modules")) else if (!strcmp(cmd,"modules"))
{ {
@@ -169,7 +149,7 @@ void amx_command(){
int running = 0; int running = 0;
int modules = 0; int modules = 0;
CList<CModule,const char *>::iterator a = g_modules.begin(); CList<CModule>::iterator a = g_modules.begin();
while ( a ) while ( a )
{ {
@@ -185,7 +165,8 @@ 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, "gpl")) }
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,15 +79,12 @@ 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 (!gmsgMOTD) if (!gmsgServerName)
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;
@@ -107,12 +104,9 @@ 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)

Binary file not shown.

Binary file not shown.

View File

@@ -1,176 +0,0 @@
#!/usr/bin/perl
#(C)2004 AMX Mod X Development Team
# by David "BAILOPAN" Anderson
# output will occur in bin.x.proc
# where x is debug or opt and proc is ix86 or amd64
# You must use this script from the project src dir
#options =
# debug - enable gdb debugging
# amd64 - compile for AMD64
# proc=ix86 - assumed not amd64
# clean - clean the specifications above
$PROJECT = "sasm";
$gccf = "gcc";
@CPP_SOURCE_FILES = ("amx_compiler.cpp", "amx_data.cpp", "amx_define.cpp", "amx_error.cpp", "amx_label.cpp", "amx_macro.cpp", "amx_natives.cpp", "amx_proc.cpp", "amx_parser.cpp", "amx_symbol.cpp", "amxasm.cpp", "cexpr.cpp");
@C_SOURCE_FILES = ();
my %OPTIONS, %OPT;
$OPT{"debug"} = "-g -ggdb";
$OPT{"opt"} = "-O2 -ffast-math -funroll-loops -fomit-frame-pointer -s -DNDEBUG -Wall -Wno-unknown-pragmas -DOPT_TYPE=\"optimized\"";
$OPTIONS{"include"} = "";
while ($cmd = shift)
{
if ($cmd =~ /amd64/) {
$OPTIONS{"amd64"} = 1;
} elsif ($cmd =~ /debug/) {
$OPTIONS{"debug"} = 1;
} elsif ($cmd =~ /proc=i(\d)86/) {
$proc = $1;
if ($OPTIONS{"amd64"})
{
die "You cannot compile for i".$proc."86 and AMD64.\n";
} else {
$OPTIONS{"proc"} = "i".$proc."86";
}
} elsif ($cmd =~ /clean/) {
$OPTIONS{"clean"} = 1;
}
}
$gcc = `$gccf --version`;
if ($gcc =~ /2\.9/)
{
$OPT{"opt"} .= " -malign-loops=2 -malign-jumps=2 -malign-functions=2";
} else {
$OPT{"opt"} .= " -falign-loops=2 -falign-jumps=2 -falign-functions=2";
}
if ($OPTIONS{"debug"})
{
$cflags = $OPT{"debug"};
} else {
if (!$OPTIONS{"amd64"})
{
$proc = $OPTIONS{"proc"};
if (!$proc)
{
$proc = 3;
}
$cflags = "-march=i".$proc."86 ".$OPT{"opt"};
} else {
$cflags = $OPT{"opt"};
}
}
if ($OPTIONS{"amd64"})
{
$cflags .= " -m64 -DHAVE_I64 -DSMALL_CELL_SIZE=64 $cflags";
}
if ($OPTIONS{"debug"})
{
$outdir = "bin.debug";
} else {
$outdir = "bin.opt";
}
if ($OPTIONS{"amd64"})
{
$outdir .= ".amd64";
$bin = $PROJECT."_amd64.so";
} else {
$proc = $OPTIONS{"proc"};
if ($proc)
{
$outdir .= ".i".$proc."86";
$bin = $PROJECT."_i".$proc."86.so";
} else {
$outdir .= ".i386";
$bin = $PROJECT."_i386.so";
}
}
unlink("$outdir/$bin");
if ($OPTIONS{"clean"})
{
`rm $outdir/*.o`;
die("Project cleaned.\n");
}
#create the dirs
#build link list
my @LINK;
for ($i=0; $i<=$#CPP_SOURCE_FILES; $i++)
{
$file = $CPP_SOURCE_FILES[$i];
$file =~ s/\.cpp/\.o/;
push(@LINK, $outdir."/".$file);
}
for ($i=0; $i<=$#C_SOURCE_FILES; $i++)
{
$file = $C_SOURCE_FILES[$i];
$file =~ s/\.c/\.o/;
push(@LINK, $outdir."/".$file);
}
if (!(-d $outdir))
{
mkdir($outdir);
}
$inc = $OPTIONS{"include"};
for ($i=0; $i<=$#CPP_SOURCE_FILES; $i++)
{
$file = $CPP_SOURCE_FILES[$i];
$ofile = $file;
$ofile =~ s/\.cpp/\.o/;
$ofile = "$outdir/$ofile";
$gcc = "$gccf $cflags -Dstrcmpi=strcasecmp -fPIC $inc -c $file -o $ofile";
if (-e $ofile)
{
$file_time = (stat($file))[9];
$ofile_time = (stat($ofile))[9];
if ($file_time > $ofile_time)
{
print "$gcc\n";
`$gcc`;
}
} else {
print "$gcc\n";
`$gcc`;
}
}
for ($i=0; $i<=$#CPP_SOURCE_FILES; $i++)
{
$file = $C_SOURCE_FILES[$i];
$ofile = $file;
$ofile =~ s/\.c/\.o/;
$ofile = "$outdir/$ofile";
$gcc = "cc $cflags -Dstrcmpi=strcasecmp -fPIC $inc -c $file -o $ofile";
if (-e $ofile)
{
$file_time = (stat($file))[9];
$ofile_time = (stat($file))[9];
if ($file_time > $ofile_time)
{
print "$gcc\n";
`$gcc`;
}
} else {
print "$gcc\n";
`$gcc`;
}
}
$gcc = "$gccf $cflags -shared -lstdc++ -ldl -lm @LINK -o $outdir/$bin";
print "$gcc\n";
`$gcc`;

View File

@@ -70,10 +70,3 @@ amx_extendmap_step 15
//If you set this to 0, clients cannot chose their language //If you set this to 0, clients cannot chose their language
amx_client_languages 1 amx_client_languages 1
// Plugin Debug mode
// 0 - No debugging (garbage line numbers)
// 1 - Plugins with "debug" option in plugins.ini are put into debug mode
// 2 - All plugins are put in debug mode
// Note - debug mode will affect JIT performance
amx_debug 1

View File

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

View File

@@ -86,10 +86,3 @@ amx_statsx_freeze -2.0
//If you set this to 0, clients cannot chose their language //If you set this to 0, clients cannot chose their language
amx_client_languages 1 amx_client_languages 1
// Plugin Debug mode
// 0 - No debugging (garbage line numbers)
// 1 - Plugins with "debug" option in plugins.ini are put into debug mode
// 2 - All plugins are put in debug mode
// Note - debug mode will affect JIT performance
amx_debug 1

View File

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

View File

@@ -19,7 +19,7 @@ mapsmenu.amxx ; maps menu (vote, changelevel)
; Chat / Messages ; Chat / Messages
adminchat.amxx ; console chat commands adminchat.amxx ; console chat commands
antiflood.amxx ; prevent clients from chat-flooding the server ;antiflood.amxx ; prevent clients from chat-flooding the server
scrollmsg.amxx ; displays a scrolling message scrollmsg.amxx ; displays a scrolling message
imessage.amxx ; displays information messages imessage.amxx ; displays information messages
adminvote.amxx ; vote commands adminvote.amxx ; vote commands

View File

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

View File

@@ -10,38 +10,29 @@
"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" "0" "3" "6" "u" "mp_tkpenalty" "-1" "3" "6" "u"
"mp_spawnbazookas" "0" "1" "u" "mp_limitallies30cal" "-1" "1" "2" "3" "4" "5" "6" "0" "u"
"mp_limitalliesgarand" "-1" "1" "2" "3" "4" "5" "6" "0" "u" "mp_limitalliesbar" "-1" "1" "2" "3" "4" "5" "6" "0" "u"
"mp_limitalliescarbine" "-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_limitalliesgarand" "-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_limitalliesbar" "-1" "1" "2" "3" "4" "5" "6" "0" "u" "mp_limitalliesthompson" "-1" "1" "2" "3" "4" "5" "6" "0" "u"
"mp_limitallies30cal" "-1" "1" "2" "3" "4" "5" "6" "0" "u" "mp_limitaxisfg42" "-1" "1" "2" "3" "4" "5" "6" "0" "u"
"mp_limitalliesbazooka" "-1" "1" "2" "3" "4" "5" "6" "0" "u" "mp_limitaxisfg42s" "-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_limitaxisk43" "-1" "1" "2" "3" "4" "5" "6" "0" "u" "mp_limitaxisk43" "-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_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_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_limitbritassault" "-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_limitbritlight" "-1" "1" "2" "3" "4" "5" "6" "0" "u"
"mp_limitbritmg" "-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_limitbritsniper" "-1" "1" "2" "3" "4" "5" "6" "0" "u"
"mp_limitbritmortar" "-1" "1" "2" "3" "4" "5" "6" "0" "u"

View File

@@ -19,7 +19,7 @@ mapsmenu.amxx ; maps menu (vote, changelevel)
; Chat / Messages ; Chat / Messages
adminchat.amxx ; console chat commands adminchat.amxx ; console chat commands
antiflood.amxx ; prevent clients from chat-flooding the server ;antiflood.amxx ; prevent clients from chat-flooding the server
scrollmsg.amxx ; displays a scrolling message scrollmsg.amxx ; displays a scrolling message
imessage.amxx ; displays information messages imessage.amxx ; displays information messages
adminvote.amxx ; vote commands adminvote.amxx ; vote commands

View File

@@ -73,10 +73,3 @@ amx_mapnum_ignore 0
//If you set this to 0, clients cannot chose their language //If you set this to 0, clients cannot chose their language
amx_client_languages 1 amx_client_languages 1
// Plugin Debug mode
// 0 - No debugging (garbage line numbers)
// 1 - Plugins with "debug" option in plugins.ini are put into debug mode
// 2 - All plugins are put in debug mode
// Note - debug mode will affect JIT performance
amx_debug 1

View File

@@ -19,7 +19,7 @@ mapsmenu.amxx ; maps menu (vote, changelevel)
; Chat / Messages ; Chat / Messages
adminchat.amxx ; console chat commands adminchat.amxx ; console chat commands
antiflood.amxx ; prevent clients from chat-flooding the server ;antiflood.amxx ; prevent clients from chat-flooding the server
scrollmsg.amxx ; displays a scrolling message scrollmsg.amxx ; displays a scrolling message
imessage.amxx ; displays information messages imessage.amxx ; displays information messages
adminvote.amxx ; vote commands adminvote.amxx ; vote commands

View File

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

View File

@@ -19,7 +19,7 @@ mapsmenu.amxx ; maps menu (vote, changelevel)
; Chat / Messages ; Chat / Messages
adminchat.amxx ; console chat commands adminchat.amxx ; console chat commands
antiflood.amxx ; prevent clients from chat-flooding the server ;antiflood.amxx ; prevent clients from chat-flooding the server
scrollmsg.amxx ; displays a scrolling message scrollmsg.amxx ; displays a scrolling message
imessage.amxx ; displays information messages imessage.amxx ; displays information messages
adminvote.amxx ; vote commands adminvote.amxx ; vote commands

View File

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

View File

@@ -19,7 +19,7 @@ mapsmenu.amxx ; maps menu (vote, changelevel)
; Chat / Messages ; Chat / Messages
adminchat.amxx ; console chat commands adminchat.amxx ; console chat commands
antiflood.amxx ; prevent clients from chat-flooding the server ;antiflood.amxx ; prevent clients from chat-flooding the server
scrollmsg.amxx ; displays a scrolling message scrollmsg.amxx ; displays a scrolling message
imessage.amxx ; displays information messages imessage.amxx ; displays information messages
adminvote.amxx ; vote commands adminvote.amxx ; vote commands

View File

@@ -130,7 +130,7 @@ void RankSystem::clear(){
bool RankSystem::loadCalc(const char* filename, char* error) bool RankSystem::loadCalc(const char* filename, char* error)
{ {
if ((MF_LoadAmxScript(&calc.amx,&calc.code,filename,error,0)!=AMX_ERR_NONE)|| if ((MF_LoadAmxScript(&calc.amx,&calc.code,filename,error)!=AMX_ERR_NONE)||
(MF_AmxAllot(&calc.amx, 8 , &calc.amxAddr1, &calc.physAddr1)!=AMX_ERR_NONE)|| (MF_AmxAllot(&calc.amx, 8 , &calc.amxAddr1, &calc.physAddr1)!=AMX_ERR_NONE)||
(MF_AmxAllot(&calc.amx, 8 , &calc.amxAddr2, &calc.physAddr2)!=AMX_ERR_NONE)|| (MF_AmxAllot(&calc.amx, 8 , &calc.amxAddr2, &calc.physAddr2)!=AMX_ERR_NONE)||
(MF_AmxFindPublic(&calc.amx,"get_score",&calc.func)!=AMX_ERR_NONE)){ (MF_AmxFindPublic(&calc.amx,"get_score",&calc.func)!=AMX_ERR_NONE)){

View File

@@ -15,7 +15,6 @@
$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");
@@ -23,7 +22,7 @@ $gccf = "gcc";
my %OPTIONS, %OPT; my %OPTIONS, %OPT;
$OPT{"debug"} = "-g -ggdb"; $OPT{"debug"} = "-g -ggdb";
$OPT{"opt"} = "-O2 -ffast-math -funroll-loops -fomit-frame-pointer -s -DNDEBUG -Wall -Wno-unknown-pragmas -DOPT_TYPE=\"optimized\" -fno-exceptions -fno-rtti"; $OPT{"opt"} = "-O2 -ffast-math -funroll-loops -fomit-frame-pointer -s -DNDEBUG -Wall -Wno-unknown-pragmas -DOPT_TYPE=\"optimized\"";
$OPTIONS{"include"} = "-I$sdk -I. -I$mm -I$sdk/engine -I$sdk/common -I$sdk/pm_shared -I$sdk/dlls"; $OPTIONS{"include"} = "-I$sdk -I. -I$mm -I$sdk/engine -I$sdk/common -I$sdk/pm_shared -I$sdk/dlls";
@@ -46,7 +45,7 @@ while ($cmd = shift)
} }
} }
$gcc = `$gccf --version`; $gcc = `gcc --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 +134,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 = "$gccf $cflags -Dstrcmpi=strcasecmp -fPIC $inc -c $file -o $ofile"; $gcc = "gcc $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($ofile))[9]; $ofile_time = (stat($file))[9];
if ($file_time > $ofile_time) if ($file_time > $ofile_time)
{ {
print "$gcc\n"; print "$gcc\n";
@@ -161,7 +160,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($ofile))[9]; $ofile_time = (stat($file))[9];
if ($file_time > $ofile_time) if ($file_time > $ofile_time)
{ {
print "$gcc\n"; print "$gcc\n";
@@ -173,6 +172,6 @@ for ($i=0; $i<=$#CPP_SOURCE_FILES; $i++)
} }
} }
$gcc = "$gccf $cflags -shared -ldl -lm @LINK -o $outdir/$bin"; $gcc = "gcc $cflags -shared -ldl -lm @LINK -o $outdir/$bin";
print "$gcc\n"; print "$gcc\n";
`$gcc`; `$gcc`;

View File

@@ -2477,11 +2477,6 @@ 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;
PFN_GETPLAYERFLAGS g_fn_GetPlayerFlags;
PFN_GET_PLAYER_EDICT g_fn_GetPlayerEdict;
PFN_FORMAT g_fn_Format;
// *** 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)
@@ -2525,8 +2520,6 @@ 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);
REQFUNC("Format", g_fn_Format, PFN_FORMAT);
// Amx scripts // Amx scripts
REQFUNC("GetAmxScript", g_fn_GetAmxScript, PFN_GET_AMXSCRIPT); REQFUNC("GetAmxScript", g_fn_GetAmxScript, PFN_GET_AMXSCRIPT);
@@ -2534,7 +2527,6 @@ 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);
@@ -2548,7 +2540,6 @@ 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);
@@ -2581,8 +2572,6 @@ 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);
REQFUNC("GetPlayerEdict", g_fn_GetPlayerEdict, PFN_GET_PLAYER_EDICT);
// Memory // Memory
REQFUNC_OPT("Allocator", g_fn_Allocator, PFN_ALLOCATOR); REQFUNC_OPT("Allocator", g_fn_Allocator, PFN_ALLOCATOR);
@@ -2677,14 +2666,11 @@ void ValidateMacros_DontCallThis_Smiley()
MF_AmxExecv(0, 0, 0, 0, 0); MF_AmxExecv(0, 0, 0, 0, 0);
MF_AmxFindPublic(0, 0, 0); MF_AmxFindPublic(0, 0, 0);
MF_AmxAllot(0, 0, 0, 0); MF_AmxAllot(0, 0, 0, 0);
MF_LoadAmxScript(0, 0, 0, 0, 0); MF_LoadAmxScript(0, 0, 0, 0);
MF_UnloadAmxScript(0, 0); MF_UnloadAmxScript(0, 0);
MF_RegisterSPForward(0, 0, 0, 0, 0, 0); MF_RegisterSPForward(0, 0, 0, 0, 0, 0);
MF_RegisterSPForwardByName(0, 0, 0, 0, 0, 0); MF_RegisterSPForwardByName(0, 0, 0, 0, 0, 0);
MF_UnregisterSPForward(0); MF_UnregisterSPForward(0);
MF_GetPlayerFrags(0);
MF_GetPlayerEdict(0);
MF_Format("", 4, "str");
} }
#endif #endif
@@ -2801,7 +2787,7 @@ void *operator new(size_t reportedSize)
return ptr; return ptr;
// allocation failed // allocation failed
return NULL; throw std::bad_alloc();
} }
void *operator new[](size_t reportedSize) void *operator new[](size_t reportedSize)
@@ -2814,7 +2800,7 @@ void *operator new[](size_t reportedSize)
return ptr; return ptr;
// allocation failed // allocation failed
return NULL; throw std::bad_alloc();
} }
// Microsoft memory tracking operators // Microsoft memory tracking operators
@@ -2828,7 +2814,7 @@ void *operator new(size_t reportedSize, const char *sourceFile, int sourceLine)
return ptr; return ptr;
// allocation failed // allocation failed
return NULL; throw std::bad_alloc();
} }
void *operator new[](size_t reportedSize, const char *sourceFile, int sourceLine) void *operator new[](size_t reportedSize, const char *sourceFile, int sourceLine)
{ {
@@ -2840,7 +2826,7 @@ void *operator new[](size_t reportedSize, const char *sourceFile, int sourceLine
return ptr; return ptr;
// allocation failed // allocation failed
return NULL; throw std::bad_alloc();
} }
void operator delete(void *reportedAddress) void operator delete(void *reportedAddress)

View File

@@ -204,9 +204,11 @@ typedef struct tagAMX {
cell reset_stk PACKED; cell reset_stk PACKED;
cell reset_hea PACKED; cell reset_hea PACKED;
cell sysreq_d PACKED; /* relocated address/value for the SYSREQ.D opcode */ cell sysreq_d PACKED; /* relocated address/value for the SYSREQ.D opcode */
#if defined JIT
/* support variables for the JIT */ /* support variables for the JIT */
int reloc_size PACKED; /* required temporary buffer for relocations */ int reloc_size PACKED; /* required temporary buffer for relocations */
long code_size PACKED; /* estimated memory footprint of the native code */ long code_size PACKED; /* estimated memory footprint of the native code */
#endif
} AMX; } AMX;
enum { enum {
@@ -238,14 +240,6 @@ 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 *****
@@ -1932,7 +1926,6 @@ 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*/);
@@ -1944,12 +1937,6 @@ typedef int (*PFN_IS_PLAYER_CONNECTING) (int /*id*/);
typedef int (*PFN_IS_PLAYER_HLTV) (int /*id*/); typedef int (*PFN_IS_PLAYER_HLTV) (int /*id*/);
typedef int (*PFN_GET_PLAYER_ARMOR) (int /*id*/); typedef int (*PFN_GET_PLAYER_ARMOR) (int /*id*/);
typedef int (*PFN_GET_PLAYER_HEALTH) (int /*id*/); typedef int (*PFN_GET_PLAYER_HEALTH) (int /*id*/);
#ifdef USE_METAMOD
typedef edict_t * (*PFN_GET_PLAYER_EDICT) (int /*id*/);
#else
typedef void * (*PFN_GET_PLAYER_EDICT) (int /*id*/);
#endif
typedef void * (*PFN_ALLOCATOR) (const char* /*filename*/, const unsigned int /*line*/, const char* /*func*/, typedef void * (*PFN_ALLOCATOR) (const char* /*filename*/, const unsigned int /*line*/, const char* /*func*/,
const unsigned int /*type*/, const size_t /*size*/); const unsigned int /*type*/, const size_t /*size*/);
typedef void * (*PFN_REALLOCATOR) (const char* /*filename*/, const unsigned int /*line*/, const char* /*func*/, typedef void * (*PFN_REALLOCATOR) (const char* /*filename*/, const unsigned int /*line*/, const char* /*func*/,
@@ -1960,16 +1947,13 @@ 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*/, int /* debug */);
typedef int (*PFN_UNLOAD_AMXSCRIPT) (AMX* /*amx*/,void** /*code*/); typedef int (*PFN_UNLOAD_AMXSCRIPT) (AMX* /*amx*/,void** /*code*/);
typedef cell (*PFN_REAL_TO_CELL) (REAL /*x*/); typedef cell (*PFN_REAL_TO_CELL) (REAL /*x*/);
typedef REAL (*PFN_CELL_TO_REAL) (cell /*x*/); 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*/);
typedef const char * (*PFN_FORMAT) (const char * /*fmt*/, ... /*params*/);
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;
@@ -2021,11 +2005,6 @@ 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;
extern PFN_GETPLAYERFLAGS g_fn_GetPlayerFlags;
extern PFN_GET_PLAYER_EDICT g_fn_GetPlayerEdict;
extern PFN_FORMAT g_fn_Format;
#ifdef MAY_NEVER_BE_DEFINED #ifdef MAY_NEVER_BE_DEFINED
// Function prototypes for intellisense and similar systems // Function prototypes for intellisense and similar systems
@@ -2074,9 +2053,6 @@ 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) { }
edict_t* MF_GetPlayerEdict (int id) { }
const char * MF_Format (const char *fmt, ...) { }
#endif // MAY_NEVER_BE_DEFINED #endif // MAY_NEVER_BE_DEFINED
#define MF_AddNatives g_fn_AddNatives #define MF_AddNatives g_fn_AddNatives
@@ -2122,18 +2098,13 @@ 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
#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
#define MF_GetPlayerEdict g_fn_GetPlayerEdict
#define MF_Format g_fn_Format;
/*** Memory ***/ /*** Memory ***/
void *operator new(size_t reportedSize); void *operator new(size_t reportedSize);

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/amxmodx/data/csstats.amxx"); const char* path = get_localinfo("csstats_score","addons/amxx/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/amxmodx/data/csstats.dat") ) ); get_localinfo("csstats","addons/amxx/data/csstats.dat") ) );
} }
} }

View File

@@ -4,7 +4,7 @@
#define __MODULECONFIG_H__ #define __MODULECONFIG_H__
// Module info // Module info
#define MODULE_NAME "CSStats" #define MODULE_NAME "CS Stats"
#define MODULE_VERSION "0.20" #define MODULE_VERSION "0.20"
#define MODULE_AUTHOR "AMX Mod X Dev Team" #define MODULE_AUTHOR "AMX Mod X Dev Team"
#define MODULE_URL "http://www.amxmodx.org" #define MODULE_URL "http://www.amxmodx.org"

View File

@@ -15,7 +15,6 @@
$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");
@@ -23,7 +22,7 @@ $gccf = "gcc";
my %OPTIONS, %OPT; my %OPTIONS, %OPT;
$OPT{"debug"} = "-g -ggdb"; $OPT{"debug"} = "-g -ggdb";
$OPT{"opt"} = "-O2 -ffast-math -funroll-loops -fomit-frame-pointer -s -DNDEBUG -Wall -Wno-unknown-pragmas -DOPT_TYPE=\"optimized\" -fno-exceptions -fno-rtti"; $OPT{"opt"} = "-O2 -ffast-math -funroll-loops -fomit-frame-pointer -s -DNDEBUG -Wall -Wno-unknown-pragmas -DOPT_TYPE=\"optimized\"";
$OPTIONS{"include"} = "-I$sdk -I. -I$mm -I$sdk/engine -I$sdk/common -I$sdk/pm_shared -I$sdk/dlls"; $OPTIONS{"include"} = "-I$sdk -I. -I$mm -I$sdk/engine -I$sdk/common -I$sdk/pm_shared -I$sdk/dlls";
@@ -46,7 +45,7 @@ while ($cmd = shift)
} }
} }
$gcc = `$gccf --version`; $gcc = `gcc --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";
@@ -73,7 +72,7 @@ if ($OPTIONS{"debug"})
if ($OPTIONS{"amd64"}) if ($OPTIONS{"amd64"})
{ {
$cflags = " -m64 -DSMALL_CELL_SIZE=64 $cflags"; $cflags .= "-m64 -DSMALL_CELLSIZE=64 $cflags";
} }
if ($OPTIONS{"debug"}) if ($OPTIONS{"debug"})
@@ -135,11 +134,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 = "$gccf $cflags -Dstrcmpi=strcasecmp -fPIC $inc -c $file -o $ofile"; $gcc = "gcc $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($ofile))[9]; $ofile_time = (stat($file))[9];
if ($file_time > $ofile_time) if ($file_time > $ofile_time)
{ {
print "$gcc\n"; print "$gcc\n";
@@ -161,7 +160,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($ofile))[9]; $ofile_time = (stat($file))[9];
if ($file_time > $ofile_time) if ($file_time > $ofile_time)
{ {
print "$gcc\n"; print "$gcc\n";
@@ -173,6 +172,5 @@ for ($i=0; $i<=$#CPP_SOURCE_FILES; $i++)
} }
} }
$gcc = "$gccf $cflags -shared -ldl -lm @LINK -o $outdir/$bin"; $gcc = "gcc $cflags -shared -ldl -lm @LINK -o $outdir/$bin";
print "$gcc\n";
`$gcc`; `$gcc`;

View File

@@ -2477,11 +2477,6 @@ 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;
PFN_GETPLAYERFLAGS g_fn_GetPlayerFlags;
PFN_GET_PLAYER_EDICT g_fn_GetPlayerEdict;
PFN_FORMAT g_fn_Format;
// *** 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)
@@ -2525,8 +2520,6 @@ 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);
REQFUNC("Format", g_fn_Format, PFN_FORMAT);
// Amx scripts // Amx scripts
REQFUNC("GetAmxScript", g_fn_GetAmxScript, PFN_GET_AMXSCRIPT); REQFUNC("GetAmxScript", g_fn_GetAmxScript, PFN_GET_AMXSCRIPT);
@@ -2534,7 +2527,6 @@ 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);
@@ -2548,7 +2540,6 @@ 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);
@@ -2581,8 +2572,6 @@ 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);
REQFUNC("GetPlayerEdict", g_fn_GetPlayerEdict, PFN_GET_PLAYER_EDICT);
// Memory // Memory
REQFUNC_OPT("Allocator", g_fn_Allocator, PFN_ALLOCATOR); REQFUNC_OPT("Allocator", g_fn_Allocator, PFN_ALLOCATOR);
@@ -2677,14 +2666,11 @@ void ValidateMacros_DontCallThis_Smiley()
MF_AmxExecv(0, 0, 0, 0, 0); MF_AmxExecv(0, 0, 0, 0, 0);
MF_AmxFindPublic(0, 0, 0); MF_AmxFindPublic(0, 0, 0);
MF_AmxAllot(0, 0, 0, 0); MF_AmxAllot(0, 0, 0, 0);
MF_LoadAmxScript(0, 0, 0, 0, 0); MF_LoadAmxScript(0, 0, 0, 0);
MF_UnloadAmxScript(0, 0); MF_UnloadAmxScript(0, 0);
MF_RegisterSPForward(0, 0, 0, 0, 0, 0); MF_RegisterSPForward(0, 0, 0, 0, 0, 0);
MF_RegisterSPForwardByName(0, 0, 0, 0, 0, 0); MF_RegisterSPForwardByName(0, 0, 0, 0, 0, 0);
MF_UnregisterSPForward(0); MF_UnregisterSPForward(0);
MF_GetPlayerFrags(0);
MF_GetPlayerEdict(0);
MF_Format("", 4, "str");
} }
#endif #endif
@@ -2801,7 +2787,7 @@ void *operator new(size_t reportedSize)
return ptr; return ptr;
// allocation failed // allocation failed
return NULL; throw std::bad_alloc();
} }
void *operator new[](size_t reportedSize) void *operator new[](size_t reportedSize)
@@ -2814,7 +2800,7 @@ void *operator new[](size_t reportedSize)
return ptr; return ptr;
// allocation failed // allocation failed
return NULL; throw std::bad_alloc();
} }
// Microsoft memory tracking operators // Microsoft memory tracking operators
@@ -2828,7 +2814,7 @@ void *operator new(size_t reportedSize, const char *sourceFile, int sourceLine)
return ptr; return ptr;
// allocation failed // allocation failed
return NULL; throw std::bad_alloc();
} }
void *operator new[](size_t reportedSize, const char *sourceFile, int sourceLine) void *operator new[](size_t reportedSize, const char *sourceFile, int sourceLine)
{ {
@@ -2840,7 +2826,7 @@ void *operator new[](size_t reportedSize, const char *sourceFile, int sourceLine
return ptr; return ptr;
// allocation failed // allocation failed
return NULL; throw std::bad_alloc();
} }
void operator delete(void *reportedAddress) void operator delete(void *reportedAddress)

View File

@@ -204,9 +204,11 @@ typedef struct tagAMX {
cell reset_stk PACKED; cell reset_stk PACKED;
cell reset_hea PACKED; cell reset_hea PACKED;
cell sysreq_d PACKED; /* relocated address/value for the SYSREQ.D opcode */ cell sysreq_d PACKED; /* relocated address/value for the SYSREQ.D opcode */
#if defined JIT
/* support variables for the JIT */ /* support variables for the JIT */
int reloc_size PACKED; /* required temporary buffer for relocations */ int reloc_size PACKED; /* required temporary buffer for relocations */
long code_size PACKED; /* estimated memory footprint of the native code */ long code_size PACKED; /* estimated memory footprint of the native code */
#endif
} AMX; } AMX;
enum { enum {
@@ -238,14 +240,6 @@ 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 *****
@@ -263,9 +257,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_DETACH #ifdef FN_META_DETTACH
void FN_META_DETACH(void); void FN_META_DETTACH(void);
#endif // FN_META_DETACH #endif // FN_META_DETTACH
@@ -1875,9 +1869,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_DETACH #ifdef FN_AMXX_DETTACH
void FN_AMXX_DETACH(void); void FN_AMXX_DETTACH(void);
#endif // FN_AMXX_DETACH #endif // FN_AMXX_DETTACH
#ifdef FN_AMXX_PLUGINSLOADED #ifdef FN_AMXX_PLUGINSLOADED
void FN_AMXX_PLUGINSLOADED(void); void FN_AMXX_PLUGINSLOADED(void);
@@ -1932,7 +1926,6 @@ 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*/);
@@ -1944,12 +1937,6 @@ typedef int (*PFN_IS_PLAYER_CONNECTING) (int /*id*/);
typedef int (*PFN_IS_PLAYER_HLTV) (int /*id*/); typedef int (*PFN_IS_PLAYER_HLTV) (int /*id*/);
typedef int (*PFN_GET_PLAYER_ARMOR) (int /*id*/); typedef int (*PFN_GET_PLAYER_ARMOR) (int /*id*/);
typedef int (*PFN_GET_PLAYER_HEALTH) (int /*id*/); typedef int (*PFN_GET_PLAYER_HEALTH) (int /*id*/);
#ifdef USE_METAMOD
typedef edict_t * (*PFN_GET_PLAYER_EDICT) (int /*id*/);
#else
typedef void * (*PFN_GET_PLAYER_EDICT) (int /*id*/);
#endif
typedef void * (*PFN_ALLOCATOR) (const char* /*filename*/, const unsigned int /*line*/, const char* /*func*/, typedef void * (*PFN_ALLOCATOR) (const char* /*filename*/, const unsigned int /*line*/, const char* /*func*/,
const unsigned int /*type*/, const size_t /*size*/); const unsigned int /*type*/, const size_t /*size*/);
typedef void * (*PFN_REALLOCATOR) (const char* /*filename*/, const unsigned int /*line*/, const char* /*func*/, typedef void * (*PFN_REALLOCATOR) (const char* /*filename*/, const unsigned int /*line*/, const char* /*func*/,
@@ -1960,16 +1947,13 @@ 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*/, int /* debug */);
typedef int (*PFN_UNLOAD_AMXSCRIPT) (AMX* /*amx*/,void** /*code*/); typedef int (*PFN_UNLOAD_AMXSCRIPT) (AMX* /*amx*/,void** /*code*/);
typedef cell (*PFN_REAL_TO_CELL) (REAL /*x*/); typedef cell (*PFN_REAL_TO_CELL) (REAL /*x*/);
typedef REAL (*PFN_CELL_TO_REAL) (cell /*x*/); 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*/);
typedef const char * (*PFN_FORMAT) (const char * /*fmt*/, ... /*params*/);
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;
@@ -2021,11 +2005,6 @@ 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;
extern PFN_GETPLAYERFLAGS g_fn_GetPlayerFlags;
extern PFN_GET_PLAYER_EDICT g_fn_GetPlayerEdict;
extern PFN_FORMAT g_fn_Format;
#ifdef MAY_NEVER_BE_DEFINED #ifdef MAY_NEVER_BE_DEFINED
// Function prototypes for intellisense and similar systems // Function prototypes for intellisense and similar systems
@@ -2074,9 +2053,6 @@ 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) { }
edict_t* MF_GetPlayerEdict (int id) { }
const char * MF_Format (const char *fmt, ...) { }
#endif // MAY_NEVER_BE_DEFINED #endif // MAY_NEVER_BE_DEFINED
#define MF_AddNatives g_fn_AddNatives #define MF_AddNatives g_fn_AddNatives
@@ -2122,18 +2098,13 @@ 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
#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
#define MF_GetPlayerEdict g_fn_GetPlayerEdict
#define MF_Format g_fn_Format;
/*** Memory ***/ /*** Memory ***/
void *operator new(size_t reportedSize); void *operator new(size_t reportedSize);

View File

@@ -15,7 +15,6 @@
$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");
@@ -23,7 +22,7 @@ $gccf = "gcc";
my %OPTIONS, %OPT; my %OPTIONS, %OPT;
$OPT{"debug"} = "-g -ggdb"; $OPT{"debug"} = "-g -ggdb";
$OPT{"opt"} = "-O2 -ffast-math -funroll-loops -fomit-frame-pointer -s -DNDEBUG -Wall -Wno-unknown-pragmas -DOPT_TYPE=\"optimized\" -fno-exceptions -fno-rtti"; $OPT{"opt"} = "-O2 -ffast-math -funroll-loops -fomit-frame-pointer -s -DNDEBUG -Wall -Wno-unknown-pragmas -DOPT_TYPE=\"optimized\"";
$OPTIONS{"include"} = "-I$sdk -I. -I$mm -I$sdk/engine -I$sdk/common -I$sdk/pm_shared -I$sdk/dlls"; $OPTIONS{"include"} = "-I$sdk -I. -I$mm -I$sdk/engine -I$sdk/common -I$sdk/pm_shared -I$sdk/dlls";
@@ -46,7 +45,7 @@ while ($cmd = shift)
} }
} }
$gcc = `$gccf --version`; $gcc = `gcc --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 +134,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 = "$gccf $cflags -Dstrcmpi=strcasecmp -fPIC $inc -c $file -o $ofile"; $gcc = "gcc $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($ofile))[9]; $ofile_time = (stat($file))[9];
if ($file_time > $ofile_time) if ($file_time > $ofile_time)
{ {
print "$gcc\n"; print "$gcc\n";
@@ -161,7 +160,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($ofile))[9]; $ofile_time = (stat($file))[9];
if ($file_time > $ofile_time) if ($file_time > $ofile_time)
{ {
print "$gcc\n"; print "$gcc\n";
@@ -173,6 +172,6 @@ for ($i=0; $i<=$#CPP_SOURCE_FILES; $i++)
} }
} }
$gcc = "$gccf $cflags -shared -ldl -lm @LINK -o $outdir/$bin"; $gcc = "gcc $cflags -shared -ldl -lm @LINK -o $outdir/$bin";
print "$gcc\n"; print "$gcc\n";
`$gcc`; `$gcc`;

View File

@@ -274,9 +274,9 @@ static cell AMX_NATIVE_CALL set_user_ammo(AMX *amx, cell *params){
case DODW_KAR: case DODW_KAR:
case DODW_SCOPED_KAR: case DODW_SCOPED_KAR:
case DODW_ENFIELD: case DODW_ENFIELD:
*( (int*)pPlayer->pEdict->pvPrivateData + 54+LINUXOFFSET ) = params[3]; *( (int*)pPlayer->pEdict->pvPrivateData + 56+LINUXOFFSET ) = params[3];
*( (int*)pPlayer->pEdict->pvPrivateData + 283+LINUXOFFSET ) = params[3]; *( (int*)pPlayer->pEdict->pvPrivateData + 281+LINUXOFFSET ) = params[3];
*( (int*)pPlayer->pEdict->pvPrivateData + 315+LINUXOFFSET ) = params[3]; *( (int*)pPlayer->pEdict->pvPrivateData + 313+LINUXOFFSET ) = params[3];
break; break;
//57,286,318 //57,286,318
@@ -284,9 +284,9 @@ static cell AMX_NATIVE_CALL set_user_ammo(AMX *amx, cell *params){
case DODW_BAR: case DODW_BAR:
case DODW_FG42: case DODW_FG42:
case DODW_BREN: case DODW_BREN:
*( (int*)pPlayer->pEdict->pvPrivateData + 57+LINUXOFFSET ) = params[3]; *( (int*)pPlayer->pEdict->pvPrivateData + 56+LINUXOFFSET ) = params[3];
*( (int*)pPlayer->pEdict->pvPrivateData + 286+LINUXOFFSET ) = params[3]; *( (int*)pPlayer->pEdict->pvPrivateData + 281+LINUXOFFSET ) = params[3];
*( (int*)pPlayer->pEdict->pvPrivateData + 318+LINUXOFFSET ) = params[3]; *( (int*)pPlayer->pEdict->pvPrivateData + 313+LINUXOFFSET ) = params[3];
break; break;
//56,281,313 //56,281,313
@@ -386,7 +386,7 @@ static cell AMX_NATIVE_CALL get_user_ammo(AMX *amx, cell *params){
case DODW_KAR: case DODW_KAR:
case DODW_SCOPED_KAR: case DODW_SCOPED_KAR:
case DODW_ENFIELD: case DODW_ENFIELD:
return *( (int*)pPlayer->pEdict->pvPrivateData + 54+LINUXOFFSET ); return *( (int*)pPlayer->pEdict->pvPrivateData + 56+LINUXOFFSET );
break; break;
//55,285,317 //55,285,317

View File

@@ -2477,11 +2477,6 @@ 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;
PFN_GETPLAYERFLAGS g_fn_GetPlayerFlags;
PFN_GET_PLAYER_EDICT g_fn_GetPlayerEdict;
PFN_FORMAT g_fn_Format;
// *** 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)
@@ -2525,8 +2520,6 @@ 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);
REQFUNC("Format", g_fn_Format, PFN_FORMAT);
// Amx scripts // Amx scripts
REQFUNC("GetAmxScript", g_fn_GetAmxScript, PFN_GET_AMXSCRIPT); REQFUNC("GetAmxScript", g_fn_GetAmxScript, PFN_GET_AMXSCRIPT);
@@ -2534,7 +2527,6 @@ 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);
@@ -2548,7 +2540,6 @@ 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);
@@ -2581,8 +2572,6 @@ 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);
REQFUNC("GetPlayerEdict", g_fn_GetPlayerEdict, PFN_GET_PLAYER_EDICT);
// Memory // Memory
REQFUNC_OPT("Allocator", g_fn_Allocator, PFN_ALLOCATOR); REQFUNC_OPT("Allocator", g_fn_Allocator, PFN_ALLOCATOR);
@@ -2677,14 +2666,11 @@ void ValidateMacros_DontCallThis_Smiley()
MF_AmxExecv(0, 0, 0, 0, 0); MF_AmxExecv(0, 0, 0, 0, 0);
MF_AmxFindPublic(0, 0, 0); MF_AmxFindPublic(0, 0, 0);
MF_AmxAllot(0, 0, 0, 0); MF_AmxAllot(0, 0, 0, 0);
MF_LoadAmxScript(0, 0, 0, 0, 0); MF_LoadAmxScript(0, 0, 0, 0);
MF_UnloadAmxScript(0, 0); MF_UnloadAmxScript(0, 0);
MF_RegisterSPForward(0, 0, 0, 0, 0, 0); MF_RegisterSPForward(0, 0, 0, 0, 0, 0);
MF_RegisterSPForwardByName(0, 0, 0, 0, 0, 0); MF_RegisterSPForwardByName(0, 0, 0, 0, 0, 0);
MF_UnregisterSPForward(0); MF_UnregisterSPForward(0);
MF_GetPlayerFrags(0);
MF_GetPlayerEdict(0);
MF_Format("", 4, "str");
} }
#endif #endif
@@ -2801,7 +2787,7 @@ void *operator new(size_t reportedSize)
return ptr; return ptr;
// allocation failed // allocation failed
return NULL; throw std::bad_alloc();
} }
void *operator new[](size_t reportedSize) void *operator new[](size_t reportedSize)
@@ -2814,7 +2800,7 @@ void *operator new[](size_t reportedSize)
return ptr; return ptr;
// allocation failed // allocation failed
return NULL; throw std::bad_alloc();
} }
// Microsoft memory tracking operators // Microsoft memory tracking operators
@@ -2828,7 +2814,7 @@ void *operator new(size_t reportedSize, const char *sourceFile, int sourceLine)
return ptr; return ptr;
// allocation failed // allocation failed
return NULL; throw std::bad_alloc();
} }
void *operator new[](size_t reportedSize, const char *sourceFile, int sourceLine) void *operator new[](size_t reportedSize, const char *sourceFile, int sourceLine)
{ {
@@ -2840,7 +2826,7 @@ void *operator new[](size_t reportedSize, const char *sourceFile, int sourceLine
return ptr; return ptr;
// allocation failed // allocation failed
return NULL; throw std::bad_alloc();
} }
void operator delete(void *reportedAddress) void operator delete(void *reportedAddress)

View File

@@ -204,9 +204,11 @@ typedef struct tagAMX {
cell reset_stk PACKED; cell reset_stk PACKED;
cell reset_hea PACKED; cell reset_hea PACKED;
cell sysreq_d PACKED; /* relocated address/value for the SYSREQ.D opcode */ cell sysreq_d PACKED; /* relocated address/value for the SYSREQ.D opcode */
#if defined JIT
/* support variables for the JIT */ /* support variables for the JIT */
int reloc_size PACKED; /* required temporary buffer for relocations */ int reloc_size PACKED; /* required temporary buffer for relocations */
long code_size PACKED; /* estimated memory footprint of the native code */ long code_size PACKED; /* estimated memory footprint of the native code */
#endif
} AMX; } AMX;
enum { enum {
@@ -238,14 +240,6 @@ 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 *****
@@ -1932,7 +1926,6 @@ 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*/);
@@ -1944,12 +1937,6 @@ typedef int (*PFN_IS_PLAYER_CONNECTING) (int /*id*/);
typedef int (*PFN_IS_PLAYER_HLTV) (int /*id*/); typedef int (*PFN_IS_PLAYER_HLTV) (int /*id*/);
typedef int (*PFN_GET_PLAYER_ARMOR) (int /*id*/); typedef int (*PFN_GET_PLAYER_ARMOR) (int /*id*/);
typedef int (*PFN_GET_PLAYER_HEALTH) (int /*id*/); typedef int (*PFN_GET_PLAYER_HEALTH) (int /*id*/);
#ifdef USE_METAMOD
typedef edict_t * (*PFN_GET_PLAYER_EDICT) (int /*id*/);
#else
typedef void * (*PFN_GET_PLAYER_EDICT) (int /*id*/);
#endif
typedef void * (*PFN_ALLOCATOR) (const char* /*filename*/, const unsigned int /*line*/, const char* /*func*/, typedef void * (*PFN_ALLOCATOR) (const char* /*filename*/, const unsigned int /*line*/, const char* /*func*/,
const unsigned int /*type*/, const size_t /*size*/); const unsigned int /*type*/, const size_t /*size*/);
typedef void * (*PFN_REALLOCATOR) (const char* /*filename*/, const unsigned int /*line*/, const char* /*func*/, typedef void * (*PFN_REALLOCATOR) (const char* /*filename*/, const unsigned int /*line*/, const char* /*func*/,
@@ -1960,16 +1947,13 @@ 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*/, int /* debug */);
typedef int (*PFN_UNLOAD_AMXSCRIPT) (AMX* /*amx*/,void** /*code*/); typedef int (*PFN_UNLOAD_AMXSCRIPT) (AMX* /*amx*/,void** /*code*/);
typedef cell (*PFN_REAL_TO_CELL) (REAL /*x*/); typedef cell (*PFN_REAL_TO_CELL) (REAL /*x*/);
typedef REAL (*PFN_CELL_TO_REAL) (cell /*x*/); 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*/);
typedef const char * (*PFN_FORMAT) (const char * /*fmt*/, ... /*params*/);
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;
@@ -2021,11 +2005,6 @@ 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;
extern PFN_GETPLAYERFLAGS g_fn_GetPlayerFlags;
extern PFN_GET_PLAYER_EDICT g_fn_GetPlayerEdict;
extern PFN_FORMAT g_fn_Format;
#ifdef MAY_NEVER_BE_DEFINED #ifdef MAY_NEVER_BE_DEFINED
// Function prototypes for intellisense and similar systems // Function prototypes for intellisense and similar systems
@@ -2074,9 +2053,6 @@ 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) { }
edict_t* MF_GetPlayerEdict (int id) { }
const char * MF_Format (const char *fmt, ...) { }
#endif // MAY_NEVER_BE_DEFINED #endif // MAY_NEVER_BE_DEFINED
#define MF_AddNatives g_fn_AddNatives #define MF_AddNatives g_fn_AddNatives
@@ -2122,18 +2098,13 @@ 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
#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
#define MF_GetPlayerEdict g_fn_GetPlayerEdict
#define MF_Format g_fn_Format;
/*** Memory ***/ /*** Memory ***/
void *operator new(size_t reportedSize); void *operator new(size_t reportedSize);

View File

@@ -4,7 +4,7 @@
#define __MODULECONFIG_H__ #define __MODULECONFIG_H__
// Module info // Module info
#define MODULE_NAME "DoD Fun" #define MODULE_NAME "Day of Defeat Fun"
#define MODULE_VERSION "0.1" #define MODULE_VERSION "0.1"
#define MODULE_AUTHOR "AMX Mod X Dev Team" #define MODULE_AUTHOR "AMX Mod X Dev Team"
#define MODULE_URL "http://www.amxmodx.org" #define MODULE_URL "http://www.amxmodx.org"

View File

@@ -367,14 +367,6 @@ void Forward::exec(int p1,int p2,int p3,int p4,int p5){
} }
} }
void Forward::exec(int p1,int p2,int p3){
AmxCall* a = head;
while ( a ){
MF_AmxExec(a->amx, NULL, a->iFunctionIdx, 3,p1, p2, p3);
a = a->next;
}
}
void Forward::exec(int p1,int p2){ void Forward::exec(int p1,int p2){
AmxCall* a = head; AmxCall* a = head;
while ( a ){ while ( a ){

View File

@@ -74,14 +74,11 @@ public:
int current; int current;
int wpnModel; int wpnModel;
float savedScore; int savedScore;
int lastScore;
int sendScore;
bool ingame; bool ingame;
bool bot; bool bot;
float clearStats; float clearStats;
float clearRound;
struct PlayerWeapon : public Stats { struct PlayerWeapon : public Stats {
char* name; char* name;
@@ -181,7 +178,6 @@ public:
void put( AMX *a , int i ); void put( AMX *a , int i );
void exec(int p1,int p2,int p3,int p4,int p5,int p6); void exec(int p1,int p2,int p3,int p4,int p5,int p6);
void exec(int p1,int p2,int p3,int p4,int p5); void exec(int p1,int p2,int p3,int p4,int p5);
void exec(int p1,int p2,int p3);
void exec(int p1,int p2); void exec(int p1,int p2);
}; };
#endif #endif

View File

@@ -147,7 +147,7 @@ void RankSystem::clear(){
bool RankSystem::loadCalc(const char* filename, char* error) bool RankSystem::loadCalc(const char* filename, char* error)
{ {
if ((MF_LoadAmxScript(&calc.amx,&calc.code,filename,error,0)!=AMX_ERR_NONE)|| if ((MF_LoadAmxScript(&calc.amx,&calc.code,filename,error)!=AMX_ERR_NONE)||
(MF_AmxAllot(&calc.amx, 8 , &calc.amxAddr1, &calc.physAddr1)!=AMX_ERR_NONE)|| (MF_AmxAllot(&calc.amx, 8 , &calc.amxAddr1, &calc.physAddr1)!=AMX_ERR_NONE)||
(MF_AmxAllot(&calc.amx, 8 , &calc.amxAddr2, &calc.physAddr2)!=AMX_ERR_NONE)|| (MF_AmxAllot(&calc.amx, 8 , &calc.amxAddr2, &calc.physAddr2)!=AMX_ERR_NONE)||
(MF_AmxFindPublic(&calc.amx,"get_score",&calc.func)!=AMX_ERR_NONE)){ (MF_AmxFindPublic(&calc.amx,"get_score",&calc.func)!=AMX_ERR_NONE)){

View File

@@ -15,7 +15,6 @@
$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");
@@ -23,7 +22,7 @@ $gccf = "gcc";
my %OPTIONS, %OPT; my %OPTIONS, %OPT;
$OPT{"debug"} = "-g -ggdb"; $OPT{"debug"} = "-g -ggdb";
$OPT{"opt"} = "-O2 -ffast-math -funroll-loops -fomit-frame-pointer -s -DNDEBUG -Wall -Wno-unknown-pragmas -DOPT_TYPE=\"optimized\" -fno-exceptions -fno-rtti"; $OPT{"opt"} = "-O2 -ffast-math -funroll-loops -fomit-frame-pointer -s -DNDEBUG -Wall -Wno-unknown-pragmas -DOPT_TYPE=\"optimized\"";
$OPTIONS{"include"} = "-I$sdk -I. -I$mm -I$sdk/engine -I$sdk/common -I$sdk/pm_shared -I$sdk/dlls"; $OPTIONS{"include"} = "-I$sdk -I. -I$mm -I$sdk/engine -I$sdk/common -I$sdk/pm_shared -I$sdk/dlls";
@@ -46,7 +45,7 @@ while ($cmd = shift)
} }
} }
$gcc = `$gccf --version`; $gcc = `gcc --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 +134,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 = "$gccf $cflags -Dstrcmpi=strcasecmp -fPIC $inc -c $file -o $ofile"; $gcc = "gcc $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($ofile))[9]; $ofile_time = (stat($file))[9];
if ($file_time > $ofile_time) if ($file_time > $ofile_time)
{ {
print "$gcc\n"; print "$gcc\n";
@@ -161,7 +160,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($ofile))[9]; $ofile_time = (stat($file))[9];
if ($file_time > $ofile_time) if ($file_time > $ofile_time)
{ {
print "$gcc\n"; print "$gcc\n";
@@ -173,6 +172,6 @@ for ($i=0; $i<=$#CPP_SOURCE_FILES; $i++)
} }
} }
$gcc = "$gccf $cflags -shared -ldl -lm @LINK -o $outdir/$bin"; $gcc = "gcc $cflags -shared -ldl -lm @LINK -o $outdir/$bin";
print "$gcc\n"; print "$gcc\n";
`$gcc`; `$gcc`;

View File

@@ -205,19 +205,11 @@ static cell AMX_NATIVE_CALL register_forward(AMX *amx, cell *params){ // forward
MF_RaiseAmxError(amx,AMX_ERR_NATIVE); MF_RaiseAmxError(amx,AMX_ERR_NATIVE);
return 0; return 0;
break; break;
case 2:
if( MF_AmxFindPublic(amx, "client_score", &iFunctionIndex) == AMX_ERR_NONE )
g_score_info.put( amx , iFunctionIndex );
else
MF_RaiseAmxError(amx,AMX_ERR_NATIVE);
return 0;
break;
default: default:
MF_RaiseAmxError(amx,AMX_ERR_NATIVE); MF_RaiseAmxError(amx,AMX_ERR_NATIVE);
return 0; return 0;
} }
#endif #endif
return 1; return 1;
} }

View File

@@ -2477,11 +2477,6 @@ 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;
PFN_GETPLAYERFLAGS g_fn_GetPlayerFlags;
PFN_GET_PLAYER_EDICT g_fn_GetPlayerEdict;
PFN_FORMAT g_fn_Format;
// *** 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)
@@ -2525,8 +2520,6 @@ 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);
REQFUNC("Format", g_fn_Format, PFN_FORMAT);
// Amx scripts // Amx scripts
REQFUNC("GetAmxScript", g_fn_GetAmxScript, PFN_GET_AMXSCRIPT); REQFUNC("GetAmxScript", g_fn_GetAmxScript, PFN_GET_AMXSCRIPT);
@@ -2534,7 +2527,6 @@ 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);
@@ -2548,7 +2540,6 @@ 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);
@@ -2581,8 +2572,6 @@ 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);
REQFUNC("GetPlayerEdict", g_fn_GetPlayerEdict, PFN_GET_PLAYER_EDICT);
// Memory // Memory
REQFUNC_OPT("Allocator", g_fn_Allocator, PFN_ALLOCATOR); REQFUNC_OPT("Allocator", g_fn_Allocator, PFN_ALLOCATOR);
@@ -2677,14 +2666,11 @@ void ValidateMacros_DontCallThis_Smiley()
MF_AmxExecv(0, 0, 0, 0, 0); MF_AmxExecv(0, 0, 0, 0, 0);
MF_AmxFindPublic(0, 0, 0); MF_AmxFindPublic(0, 0, 0);
MF_AmxAllot(0, 0, 0, 0); MF_AmxAllot(0, 0, 0, 0);
MF_LoadAmxScript(0, 0, 0, 0, 0); MF_LoadAmxScript(0, 0, 0, 0);
MF_UnloadAmxScript(0, 0); MF_UnloadAmxScript(0, 0);
MF_RegisterSPForward(0, 0, 0, 0, 0, 0); MF_RegisterSPForward(0, 0, 0, 0, 0, 0);
MF_RegisterSPForwardByName(0, 0, 0, 0, 0, 0); MF_RegisterSPForwardByName(0, 0, 0, 0, 0, 0);
MF_UnregisterSPForward(0); MF_UnregisterSPForward(0);
MF_GetPlayerFrags(0);
MF_GetPlayerEdict(0);
MF_Format("", 4, "str");
} }
#endif #endif
@@ -2801,7 +2787,7 @@ void *operator new(size_t reportedSize)
return ptr; return ptr;
// allocation failed // allocation failed
return NULL; throw std::bad_alloc();
} }
void *operator new[](size_t reportedSize) void *operator new[](size_t reportedSize)
@@ -2814,7 +2800,7 @@ void *operator new[](size_t reportedSize)
return ptr; return ptr;
// allocation failed // allocation failed
return NULL; throw std::bad_alloc();
} }
// Microsoft memory tracking operators // Microsoft memory tracking operators
@@ -2828,7 +2814,7 @@ void *operator new(size_t reportedSize, const char *sourceFile, int sourceLine)
return ptr; return ptr;
// allocation failed // allocation failed
return NULL; throw std::bad_alloc();
} }
void *operator new[](size_t reportedSize, const char *sourceFile, int sourceLine) void *operator new[](size_t reportedSize, const char *sourceFile, int sourceLine)
{ {
@@ -2840,7 +2826,7 @@ void *operator new[](size_t reportedSize, const char *sourceFile, int sourceLine
return ptr; return ptr;
// allocation failed // allocation failed
return NULL; throw std::bad_alloc();
} }
void operator delete(void *reportedAddress) void operator delete(void *reportedAddress)

View File

@@ -204,9 +204,11 @@ typedef struct tagAMX {
cell reset_stk PACKED; cell reset_stk PACKED;
cell reset_hea PACKED; cell reset_hea PACKED;
cell sysreq_d PACKED; /* relocated address/value for the SYSREQ.D opcode */ cell sysreq_d PACKED; /* relocated address/value for the SYSREQ.D opcode */
#if defined JIT
/* support variables for the JIT */ /* support variables for the JIT */
int reloc_size PACKED; /* required temporary buffer for relocations */ int reloc_size PACKED; /* required temporary buffer for relocations */
long code_size PACKED; /* estimated memory footprint of the native code */ long code_size PACKED; /* estimated memory footprint of the native code */
#endif
} AMX; } AMX;
enum { enum {
@@ -238,14 +240,6 @@ 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 *****
@@ -1932,7 +1926,6 @@ 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*/);
@@ -1944,12 +1937,6 @@ typedef int (*PFN_IS_PLAYER_CONNECTING) (int /*id*/);
typedef int (*PFN_IS_PLAYER_HLTV) (int /*id*/); typedef int (*PFN_IS_PLAYER_HLTV) (int /*id*/);
typedef int (*PFN_GET_PLAYER_ARMOR) (int /*id*/); typedef int (*PFN_GET_PLAYER_ARMOR) (int /*id*/);
typedef int (*PFN_GET_PLAYER_HEALTH) (int /*id*/); typedef int (*PFN_GET_PLAYER_HEALTH) (int /*id*/);
#ifdef USE_METAMOD
typedef edict_t * (*PFN_GET_PLAYER_EDICT) (int /*id*/);
#else
typedef void * (*PFN_GET_PLAYER_EDICT) (int /*id*/);
#endif
typedef void * (*PFN_ALLOCATOR) (const char* /*filename*/, const unsigned int /*line*/, const char* /*func*/, typedef void * (*PFN_ALLOCATOR) (const char* /*filename*/, const unsigned int /*line*/, const char* /*func*/,
const unsigned int /*type*/, const size_t /*size*/); const unsigned int /*type*/, const size_t /*size*/);
typedef void * (*PFN_REALLOCATOR) (const char* /*filename*/, const unsigned int /*line*/, const char* /*func*/, typedef void * (*PFN_REALLOCATOR) (const char* /*filename*/, const unsigned int /*line*/, const char* /*func*/,
@@ -1960,16 +1947,13 @@ 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*/, int /* debug */);
typedef int (*PFN_UNLOAD_AMXSCRIPT) (AMX* /*amx*/,void** /*code*/); typedef int (*PFN_UNLOAD_AMXSCRIPT) (AMX* /*amx*/,void** /*code*/);
typedef cell (*PFN_REAL_TO_CELL) (REAL /*x*/); typedef cell (*PFN_REAL_TO_CELL) (REAL /*x*/);
typedef REAL (*PFN_CELL_TO_REAL) (cell /*x*/); 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*/);
typedef const char * (*PFN_FORMAT) (const char * /*fmt*/, ... /*params*/);
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;
@@ -2021,11 +2005,6 @@ 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;
extern PFN_GETPLAYERFLAGS g_fn_GetPlayerFlags;
extern PFN_GET_PLAYER_EDICT g_fn_GetPlayerEdict;
extern PFN_FORMAT g_fn_Format;
#ifdef MAY_NEVER_BE_DEFINED #ifdef MAY_NEVER_BE_DEFINED
// Function prototypes for intellisense and similar systems // Function prototypes for intellisense and similar systems
@@ -2074,9 +2053,6 @@ 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) { }
edict_t* MF_GetPlayerEdict (int id) { }
const char * MF_Format (const char *fmt, ...) { }
#endif // MAY_NEVER_BE_DEFINED #endif // MAY_NEVER_BE_DEFINED
#define MF_AddNatives g_fn_AddNatives #define MF_AddNatives g_fn_AddNatives
@@ -2122,18 +2098,13 @@ 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
#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
#define MF_GetPlayerEdict g_fn_GetPlayerEdict
#define MF_Format g_fn_Format;
/*** Memory ***/ /*** Memory ***/
void *operator new(size_t reportedSize); void *operator new(size_t reportedSize);

View File

@@ -81,13 +81,11 @@ extern int gmsgPTeam;
extern Forward g_death_info; extern Forward g_death_info;
extern Forward g_damage_info; extern Forward g_damage_info;
extern Forward g_score_info;
#else #else
extern int iFDamage; extern int iFDamage;
extern int iFDeath; extern int iFDeath;
extern int iFScore;
#endif #endif

View File

@@ -51,13 +51,11 @@ int AxisScore;
Forward g_death_info; Forward g_death_info;
Forward g_damage_info; Forward g_damage_info;
Forward g_score_info;
#else #else
int iFDamage; int iFDamage;
int iFDeath; int iFDeath;
int iFScore;
#endif #endif
@@ -154,32 +152,16 @@ void PlayerPreThink_Post( edict_t *pEntity ) {
return; return;
CPlayer *pPlayer = GET_PLAYER_POINTER(pEntity); CPlayer *pPlayer = GET_PLAYER_POINTER(pEntity);
if ( !pPlayer->ingame )
return;
if (pPlayer->clearStats && pPlayer->clearStats < gpGlobals->time){ if (pPlayer->clearStats && pPlayer->clearStats < gpGlobals->time && pPlayer->ingame){
if ( !ignoreBots(pEntity) ){ if ( !ignoreBots(pEntity) ){
pPlayer->clearStats = 0.0f; pPlayer->clearStats = 0.0f;
pPlayer->rank->updatePosition( &pPlayer->life ); pPlayer->rank->updatePosition( &pPlayer->life );
pPlayer->restartStats(false); pPlayer->restartStats(false);
} }
}
if (pPlayer->clearRound && pPlayer->clearRound < gpGlobals->time){
pPlayer->clearRound = 0.0f;
memset(&pPlayer->round,0,sizeof(pPlayer->round));
memset(pPlayer->weaponsRnd,0,sizeof(pPlayer->weaponsRnd));
} }
if (pPlayer->sendScore && pPlayer->sendScore < gpGlobals->time){
pPlayer->sendScore = 0.0f;
#ifdef FORWARD_OLD_SYSTEM
g_score_info.exec( pPlayer->index, pPlayer->lastScore, pPlayer->savedScore );
#else
MF_ExecuteForward( iFScore,pPlayer->index, pPlayer->lastScore, pPlayer->savedScore );
#endif
}
RETURN_META(MRES_IGNORED); RETURN_META(MRES_IGNORED);
} }
@@ -201,7 +183,6 @@ void ServerDeactivate() {
g_damage_info.clear(); g_damage_info.clear();
g_death_info.clear(); g_death_info.clear();
g_score_info.clear();
#endif #endif
@@ -391,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/amxmodx/data/dodstats.amxx"); const char* path = get_localinfo("dodstats_score","addons/amxx/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 );
@@ -399,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/amxmodx/data/dodstats.dat") ) ); get_localinfo("dodstats","addons/amxx/data/dodstats.dat") ) );
} }
g_map.Init(); g_map.Init();
@@ -417,7 +398,7 @@ void OnAmxxDetach() {
void OnPluginsLoaded(){ void OnPluginsLoaded(){
iFDeath = MF_RegisterForward("client_death",ET_IGNORE,FP_CELL,FP_CELL,FP_CELL,FP_CELL,FP_CELL,FP_DONE); iFDeath = MF_RegisterForward("client_death",ET_IGNORE,FP_CELL,FP_CELL,FP_CELL,FP_CELL,FP_CELL,FP_DONE);
iFDamage = MF_RegisterForward("client_damage",ET_IGNORE,FP_CELL,FP_CELL,FP_CELL,FP_CELL,FP_CELL,FP_CELL,FP_DONE); iFDamage = MF_RegisterForward("client_damage",ET_IGNORE,FP_CELL,FP_CELL,FP_CELL,FP_CELL,FP_CELL,FP_CELL,FP_DONE);
iFScore = MF_RegisterForward("client_score",ET_IGNORE,FP_CELL,FP_CELL,FP_CELL,FP_DONE);
} }
#endif #endif

View File

@@ -4,7 +4,7 @@
#define __MODULECONFIG_H__ #define __MODULECONFIG_H__
// Module info // Module info
#define MODULE_NAME "DoDX" #define MODULE_NAME "Day of Defeat X"
#define MODULE_VERSION "0.20" #define MODULE_VERSION "0.20"
#define MODULE_AUTHOR "AMX Mod X Dev Team" #define MODULE_AUTHOR "AMX Mod X Dev Team"
#define MODULE_URL "http://www.amxmodx.org" #define MODULE_URL "http://www.amxmodx.org"

View File

@@ -42,7 +42,8 @@ void Client_RoundState(void* mValue){
for (int i=1;i<=gpGlobals->maxClients;i++){ for (int i=1;i<=gpGlobals->maxClients;i++){
CPlayer *pPlayer = GET_PLAYER_POINTER_I(i); CPlayer *pPlayer = GET_PLAYER_POINTER_I(i);
if (pPlayer->ingame) { if (pPlayer->ingame) {
pPlayer->clearRound = gpGlobals->time + 0.25f; memset(&pPlayer->round,0,sizeof(pPlayer->round));
memset(pPlayer->weaponsRnd,0,sizeof(pPlayer->weaponsRnd));
} }
} }
} }
@@ -69,18 +70,18 @@ void Client_TeamScore(void* mValue){
void Client_ObjScore(void* mValue){ void Client_ObjScore(void* mValue){
static CPlayer *pPlayer; static CPlayer *pPlayer;
static int score; static int TMScore; //total map score :-)
switch(mState++){ switch(mState++){
case 0: case 0:
pPlayer = GET_PLAYER_POINTER_I(*(int*)mValue); pPlayer = GET_PLAYER_POINTER_I(*(int*)mValue);
break; break;
case 1: case 1:
score = *(int*)mValue; TMScore = *(int*)mValue;
if ( (pPlayer->lastScore = score - pPlayer->savedScore) && isModuleActive() ){ int score = TMScore - pPlayer->savedScore;
pPlayer->updateScore(pPlayer->current,pPlayer->lastScore); if ( score && isModuleActive() ){
pPlayer->sendScore = gpGlobals->time + 0.25f; pPlayer->updateScore(pPlayer->current,score);
} }
pPlayer->savedScore = score; pPlayer->savedScore = TMScore;
break; break;
} }
} }

View File

@@ -33,67 +33,30 @@
#define _INCLUDE_CSTRING_H #define _INCLUDE_CSTRING_H
//by David "BAILOPAN" Anderson //by David "BAILOPAN" Anderson
class String class CString
{ {
public: public:
String() CString() { v = NULL; mSize = 0; }
{ ~CString() { if (v) delete [] v; }
v = NULL;
mSize = 0;
cSize = 0;
Grow(2);
assign("");
}
~String() //added these for amxx
{ CString(const char *src) { v = NULL; mSize = 0; assign(src); }
if (v) CString(CString &src) { v = NULL; mSize = 0; assign(src.c_str()); }
delete [] v;
}
String(const char *src)
{
v = NULL;
mSize = 0;
cSize = 0; assign(src);
}
String(String &src)
{
v = NULL;
mSize = 0;
cSize = 0;
assign(src.c_str());
}
const char *c_str() { return v?v:""; } const char *c_str() { return v?v:""; }
const char *c_str() const { return v?v:""; } const char *c_str() const { return v?v:""; }
void append(const char *t) void append(const char *t)
{ {
Grow(cSize + strlen(t)); Grow(strlen(v) + strlen(t));
strcat(v, t); strcat(v, t);
cSize = strlen(v);
} }
void append(const char c) void append(CString &d)
{
Grow(cSize + 2);
v[cSize] = c;
v[++cSize] = 0;
}
void append(String &d)
{ {
const char *t = d.c_str(); const char *t = d.c_str();
Grow(cSize + strlen(t)); Grow(strlen(v) + strlen(t));
strcat(v, t); strcat(v, t);
cSize = strlen(v);
}
void assign(const String &src)
{
assign(src.c_str());
} }
void assign(const char *d) void assign(const char *d)
@@ -101,27 +64,20 @@ public:
if (!d) if (!d)
{ {
Grow(1); Grow(1);
cSize = 0;
strcpy(v, ""); strcpy(v, "");
return; return;
} }
Grow(strlen(d)); Grow(strlen(d));
if (v) if (v)
{
strcpy(v, d); strcpy(v, d);
cSize = strlen(v);
} else {
cSize = 0;
}
} }
void clear() void clear()
{ {
if (v) if (v)
{ delete [] v;
v[0] = 0; v = NULL;
cSize = 0; mSize = 0;
}
} }
int compare (const char *d) int compare (const char *d)
@@ -144,7 +100,7 @@ public:
//Added this for amxx inclusion //Added this for amxx inclusion
bool empty() bool empty()
{ {
if (!v || !cSize) if (!v || !mSize)
return true; return true;
return false; return false;
@@ -154,239 +110,20 @@ public:
{ {
if (!v) if (!v)
return 0; return 0;
return cSize; return strlen(v);
}
const char * _fread(FILE *fp)
{
Grow(512);
char * ret = fgets(v, 511, fp);
cSize = strlen(v);
return ret;
}
int find(const char c, int index = 0)
{
if (!v)
return npos;
if (index >= (int)cSize || index < 0)
return npos;
unsigned int i = 0;
for (i=index; i<cSize; i++)
{
if (v[i] == c)
{
return i;
}
}
return npos;
}
bool is_space(int c)
{
if (c == '\f' || c == '\n' ||
c == '\t' || c == '\r' ||
c == 'v' || c == ' ')
{
return true;
}
return false;
}
void trim()
{
if (!v)
return;
unsigned int i = 0;
unsigned int j = 0;
if (cSize == 1)
{
if (is_space(v[i]))
{
clear();
return;
}
}
unsigned char c0 = v[0];
if (is_space(c0))
{
for (i=0; i<cSize; i++)
{
if (!is_space(v[i]) || (is_space(v[i]) && ((unsigned char)i==cSize-1)))
{
erase(0, i);
break;
}
}
}
cSize = strlen(v);
if (cSize < 1)
{
return;
}
if (is_space(v[cSize-1]))
{
for (i=cSize-1; i>=0; i--)
{
if (!is_space(v[i])
|| (is_space(v[i]) && i==0))
{
erase(i+1, j);
break;
}
j++;
}
}
if (cSize == 1)
{
if (is_space(v[0]))
{
clear();
return;
}
}
}
String & erase(unsigned int start, int num = npos)
{
if (!v)
return (*this);
unsigned int i = 0;
//check for bounds
if (num == npos || start+num > cSize-num+1)
num = cSize - start;
//do the erasing
bool copyflag = false;
for (i=0; i<cSize; i++)
{
if (i>=start && i<start+num)
{
if (i+num < cSize)
{
v[i] = v[i+num];
} else {
v[i] = 0;
}
copyflag = true;
} else if (copyflag) {
if (i+num < cSize)
{
v[i] = v[i+num];
} else {
v[i] = 0;
}
}
}
cSize -= num;
v[cSize] = 0;
return (*this);
}
String substr(unsigned int index, int num = npos)
{
String ns;
if (index >= cSize || !v)
return ns;
if (num == npos)
{
num = cSize - index;
} else if (index+num >= cSize) {
num = cSize - index;
}
unsigned int i = 0, j=0;
char *s = new char[cSize+1];
for (i=index; i<index+num; i++)
{
s[j++] = v[i];
}
s[j] = 0;
ns.assign(s);
delete [] s;
return ns;
}
void toLower()
{
if (!v)
return;
unsigned int i = 0;
for (i=0; i<cSize; i++)
{
if (v[i] >= 65 && v[i] <= 90)
v[i] |= 32;
}
}
String & operator = (const String &src)
{
assign(src);
return *this;
}
String & operator = (const char *src)
{
assign(src);
return *this;
}
char operator [] (unsigned int index)
{
if (index > cSize)
{
return -1;
} else {
return v[index];
}
}
int at(int a)
{
if (a < 0 || a >= (int)cSize)
return -1;
return v[a];
}
bool at(int at, char c)
{
if (at < 0 || at >= (int)cSize)
return false;
v[at] = c;
return true;
} }
private: private:
void Grow(unsigned int d) void Grow(int d)
{ {
if (d<1) if (d<1)
return; return;
if (d > mSize) if (d > mSize)
{ {
mSize = d + 16; // allocate a buffer
char *t = new char[d+1]; char *t = new char[d+1];
if (v) { if (v) {
strcpy(t, v); strcpy(t, v);
t[cSize] = 0; t[strlen(v)] = 0;
delete [] v; delete [] v;
} }
v = t; v = t;
@@ -395,10 +132,7 @@ private:
} }
char *v; char *v;
unsigned int mSize; int mSize;
unsigned int cSize;
public:
static const int npos = -1;
}; };
#endif //_INCLUDE_CSTRING_H #endif //_INCLUDE_CSTRING_H

View File

@@ -32,8 +32,6 @@
#ifndef __CVECTOR_H__ #ifndef __CVECTOR_H__
#define __CVECTOR_H__ #define __CVECTOR_H__
#include <assert.h>
// Vector // Vector
template <class T> class CVector template <class T> class CVector
{ {
@@ -286,7 +284,7 @@ public:
iterator iterAt(size_t pos) iterator iterAt(size_t pos)
{ {
if (pos > m_CurrentUsedSize) if (pos > m_CurrentUsedSize)
assert(0); ASSERT(0);
return iterator(m_Data + pos); return iterator(m_Data + pos);
} }
@@ -333,7 +331,7 @@ public:
{ {
if (pos > m_CurrentUsedSize) if (pos > m_CurrentUsedSize)
{ {
assert(0); ASSERT(0);
} }
return m_Data[pos]; return m_Data[pos];
} }
@@ -342,7 +340,7 @@ public:
{ {
if (pos > m_CurrentUsedSize) if (pos > m_CurrentUsedSize)
{ {
assert(0); ASSERT(0);
} }
return m_Data[pos]; return m_Data[pos];
} }
@@ -361,7 +359,7 @@ public:
{ {
if (m_CurrentUsedSize < 1) if (m_CurrentUsedSize < 1)
{ {
assert(0); ASSERT(0);
} }
return m_Data[0]; return m_Data[0];
} }
@@ -370,7 +368,7 @@ public:
{ {
if (m_CurrentUsedSize < 1) if (m_CurrentUsedSize < 1)
{ {
assert(0); ASSERT(0);
} }
return m_Data[0]; return m_Data[0];
} }
@@ -379,7 +377,7 @@ public:
{ {
if (m_CurrentUsedSize < 1) if (m_CurrentUsedSize < 1)
{ {
assert(0); ASSERT(0);
} }
return m_Data[m_CurrentUsedSize - 1]; return m_Data[m_CurrentUsedSize - 1];
} }
@@ -388,7 +386,7 @@ public:
{ {
if (m_CurrentUsedSize < 1) if (m_CurrentUsedSize < 1)
{ {
assert(0); ASSERT(0);
} }
return m_Data[m_CurrentUsedSize - 1]; return m_Data[m_CurrentUsedSize - 1];
} }

View File

@@ -15,7 +15,6 @@
$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");
@@ -23,7 +22,7 @@ $gccf = "gcc";
my %OPTIONS, %OPT; my %OPTIONS, %OPT;
$OPT{"debug"} = "-g -ggdb"; $OPT{"debug"} = "-g -ggdb";
$OPT{"opt"} = "-O2 -ffast-math -funroll-loops -fomit-frame-pointer -s -DNDEBUG -Wall -Wno-unknown-pragmas -DOPT_TYPE=\"optimized\" -fno-exceptions -fno-rtti"; $OPT{"opt"} = "-O2 -ffast-math -funroll-loops -fomit-frame-pointer -s -DNDEBUG -Wall -Wno-unknown-pragmas -DOPT_TYPE=\"optimized\"";
$OPTIONS{"include"} = "-I$sdk -I. -I$mm -I$sdk/engine -I$sdk/common -I$sdk/pm_shared -I$sdk/dlls"; $OPTIONS{"include"} = "-I$sdk -I. -I$mm -I$sdk/engine -I$sdk/common -I$sdk/pm_shared -I$sdk/dlls";
@@ -46,7 +45,7 @@ while ($cmd = shift)
} }
} }
$gcc = `$gccf --version`; $gcc = `gcc --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";
@@ -73,7 +72,7 @@ if ($OPTIONS{"debug"})
if ($OPTIONS{"amd64"}) if ($OPTIONS{"amd64"})
{ {
$cflags = " -m64 -DSMALL_CELL_SIZE=64 $cflags"; $cflags .= "-m64 -DSMALL_CELLSIZE=64 $cflags";
} }
if ($OPTIONS{"debug"}) if ($OPTIONS{"debug"})
@@ -135,11 +134,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 = "$gccf $cflags -Dstrcmpi=strcasecmp -fPIC $inc -c $file -o $ofile"; $gcc = "gcc $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($ofile))[9]; $ofile_time = (stat($file))[9];
if ($file_time > $ofile_time) if ($file_time > $ofile_time)
{ {
print "$gcc\n"; print "$gcc\n";
@@ -161,7 +160,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($ofile))[9]; $ofile_time = (stat($file))[9];
if ($file_time > $ofile_time) if ($file_time > $ofile_time)
{ {
print "$gcc\n"; print "$gcc\n";
@@ -173,6 +172,5 @@ for ($i=0; $i<=$#CPP_SOURCE_FILES; $i++)
} }
} }
$gcc = "$gccf $cflags -shared -fPIC -ldl -lm -o $outdir/$bin @LINK"; $gcc = "gcc $cflags -shared -ldl -lm @LINK -o $outdir/$bin";
print "$gcc\n";
`$gcc`; `$gcc`;

View File

@@ -11,38 +11,6 @@ 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 ClearHooks()
{
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;
@@ -214,6 +182,16 @@ 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;
@@ -228,8 +206,6 @@ void ServerDeactivate()
g_pFunctionTable->pfnStartFrame=NULL; // "server_frame","ServerFrame" g_pFunctionTable->pfnStartFrame=NULL; // "server_frame","ServerFrame"
g_pFunctionTable->pfnTouch=NULL; // "pfn_touch","vexd_pfntouch" g_pFunctionTable->pfnTouch=NULL; // "pfn_touch","vexd_pfntouch"
ClearHooks();
RETURN_META(MRES_IGNORED); RETURN_META(MRES_IGNORED);
} }
@@ -238,12 +214,9 @@ void ServerActivate(edict_t *pEdictList, int edictCount, int clientMax)
for(int f = 1; f <= gpGlobals->maxClients;f++) for(int f = 1; f <= gpGlobals->maxClients;f++)
g_player_edicts[f]=pEdictList + f; g_player_edicts[f]=pEdictList + f;
Msg.clear(); Msg.clear();
register int i = 0, j = 0; register int i = 0;
for (i=0; i<256; i++) { for (i=0; i<256; i++) {
for (j=0; j<msgHooks[i].size(); j++) msgHooks[i] = 0;
if (msgHooks[i].at(j) != -1)
MF_UnregisterSPForward(msgHooks[i].at(j));
msgHooks[i].clear();
msgBlocks[i] = 0; msgBlocks[i] = 0;
} }

View File

@@ -2539,7 +2539,6 @@ 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);
@@ -2800,7 +2799,7 @@ void *operator new(size_t reportedSize)
return ptr; return ptr;
// allocation failed // allocation failed
return NULL; throw std::bad_alloc();
} }
void *operator new[](size_t reportedSize) void *operator new[](size_t reportedSize)
@@ -2813,7 +2812,7 @@ void *operator new[](size_t reportedSize)
return ptr; return ptr;
// allocation failed // allocation failed
return NULL; throw std::bad_alloc();
} }
// Microsoft memory tracking operators // Microsoft memory tracking operators
@@ -2827,7 +2826,7 @@ void *operator new(size_t reportedSize, const char *sourceFile, int sourceLine)
return ptr; return ptr;
// allocation failed // allocation failed
return NULL; throw std::bad_alloc();
} }
void *operator new[](size_t reportedSize, const char *sourceFile, int sourceLine) void *operator new[](size_t reportedSize, const char *sourceFile, int sourceLine)
{ {
@@ -2839,7 +2838,7 @@ void *operator new[](size_t reportedSize, const char *sourceFile, int sourceLine
return ptr; return ptr;
// allocation failed // allocation failed
return NULL; throw std::bad_alloc();
} }
void operator delete(void *reportedAddress) void operator delete(void *reportedAddress)

View File

@@ -204,9 +204,11 @@ typedef struct tagAMX {
cell reset_stk PACKED; cell reset_stk PACKED;
cell reset_hea PACKED; cell reset_hea PACKED;
cell sysreq_d PACKED; /* relocated address/value for the SYSREQ.D opcode */ cell sysreq_d PACKED; /* relocated address/value for the SYSREQ.D opcode */
#if defined JIT
/* support variables for the JIT */ /* support variables for the JIT */
int reloc_size PACKED; /* required temporary buffer for relocations */ int reloc_size PACKED; /* required temporary buffer for relocations */
long code_size PACKED; /* estimated memory footprint of the native code */ long code_size PACKED; /* estimated memory footprint of the native code */
#endif
} AMX; } AMX;
enum { enum {
@@ -238,14 +240,6 @@ 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 *****
@@ -263,9 +257,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_DETACH #ifdef FN_META_DETTACH
void FN_META_DETACH(void); void FN_META_DETTACH(void);
#endif // FN_META_DETACH #endif // FN_META_DETTACH
@@ -1875,9 +1869,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_DETACH #ifdef FN_AMXX_DETTACH
void FN_AMXX_DETACH(void); void FN_AMXX_DETTACH(void);
#endif // FN_AMXX_DETACH #endif // FN_AMXX_DETTACH
#ifdef FN_AMXX_PLUGINSLOADED #ifdef FN_AMXX_PLUGINSLOADED
void FN_AMXX_PLUGINSLOADED(void); void FN_AMXX_PLUGINSLOADED(void);
@@ -1932,7 +1926,6 @@ 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*/);
@@ -1954,7 +1947,6 @@ 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*/);
@@ -1962,7 +1954,6 @@ 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;
@@ -2014,9 +2005,6 @@ 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;
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
@@ -2065,7 +2053,6 @@ 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,16 +2098,13 @@ 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
#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);

View File

@@ -28,15 +28,14 @@ static cell AMX_NATIVE_CALL register_think(AMX *amx, cell *params)
EntClass *p = new EntClass; EntClass *p = new EntClass;
const char *clsname = MF_GetAmxString(amx, params[1], 0, &len); const char *clsname = MF_GetAmxString(amx, params[1], 0, &len);
p->Class.assign(clsname); p->Class = new char[strlen(clsname)+1];
strcpy(p->Class, clsname);
p->Forward = MF_RegisterSPForwardByName(amx, MF_GetAmxString(amx, params[2], 0, &len), FP_CELL, FP_DONE); p->Forward = MF_RegisterSPForwardByName(amx, MF_GetAmxString(amx, params[2], 0, &len), FP_CELL, FP_DONE);
Thinks.push_back(p); Thinks.push_back(p);
if (!g_pFunctionTable->pfnThink)
g_pFunctionTable->pfnThink=Think; g_pFunctionTable->pfnThink=Think;
return p->Forward; return p->Forward;
} }
@@ -47,13 +46,11 @@ static cell AMX_NATIVE_CALL register_impulse(AMX *amx, cell *params)
Impulse *p = new Impulse; Impulse *p = new Impulse;
p->Check = params[1]; p->Check = params[1];
p->Forward = MF_RegisterSPForwardByName(amx, MF_GetAmxString(amx, params[2], 0, &len), FP_CELL, FP_CELL, FP_DONE); p->Forward = MF_RegisterSPForwardByName(amx, MF_GetAmxString(amx, params[2], 0, &len), FP_CELL, FP_DONE);
Impulses.push_back(p); Impulses.push_back(p);
if (!g_pFunctionTable->pfnCmdStart)
g_pFunctionTable->pfnCmdStart=CmdStart; g_pFunctionTable->pfnCmdStart=CmdStart;
return p->Forward; return p->Forward;
} }
@@ -67,21 +64,22 @@ static cell AMX_NATIVE_CALL register_touch(AMX *amx, cell *params)
Touch *p = new Touch; Touch *p = new Touch;
if (!strlen(Toucher) || strcmp(Toucher, "*")==0) { if (!strlen(Toucher) || strcmp(Toucher, "*")==0) {
p->Toucher.assign(""); p->Toucher = 0;
} else { } else {
p->Toucher.assign(Toucher); p->Toucher = new char[strlen(Toucher)+1];
strcpy(p->Toucher, Toucher);
} }
if (!strlen(Touched) || strcmp(Touched, "*")==0) { if (!strlen(Touched) || strcmp(Touched, "*")==0) {
p->Touched.assign(""); p->Touched = 0;
} else { } else {
p->Touched.assign(Touched); p->Touched = new char[strlen(Touched)+1];
strcpy(p->Touched, Touched);
} }
p->Forward = MF_RegisterSPForwardByName(amx, MF_GetAmxString(amx, params[3], 2, &len), FP_CELL, FP_CELL, FP_DONE); p->Forward = MF_RegisterSPForwardByName(amx, MF_GetAmxString(amx, params[3], 2, &len), FP_CELL, FP_CELL, FP_DONE);
Touches.push_back(p); Touches.push_back(p);
if (!g_pFunctionTable->pfnTouch)
g_pFunctionTable->pfnTouch=pfnTouch; g_pFunctionTable->pfnTouch=pfnTouch;
return p->Forward; return p->Forward;
@@ -102,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)) {
EngineError(amx, "Invalid Entity %d", iEnt); MF_RaiseAmxError(amx, AMX_ERR_NATIVE);
return 0; return 0;
} }
@@ -325,8 +323,8 @@ static cell AMX_NATIVE_CALL set_speak(AMX *amx, cell *params) {
int iIndex = params[1]; int iIndex = params[1];
int iNewSpeakFlags = params[2]; int iNewSpeakFlags = params[2];
if (iIndex> gpGlobals->maxClients || !is_ent_valid(iIndex)) { if (iIndex> 32 || !is_ent_valid(iIndex)) {
EngineError(amx, "Invalid player %d", iIndex); MF_RaiseAmxError(amx,AMX_ERR_NATIVE);
return 0; return 0;
} }
@@ -338,8 +336,8 @@ static cell AMX_NATIVE_CALL set_speak(AMX *amx, cell *params) {
static cell AMX_NATIVE_CALL get_speak(AMX *amx, cell *params) { 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 > gpGlobals->maxClients) { if (!is_ent_valid(iIndex) || iIndex > 32) {
EngineError(amx, "Invalid player %d", iIndex); MF_RaiseAmxError(amx,AMX_ERR_NATIVE);
return 0; return 0;
} }
@@ -366,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)) {
EngineError(amx, "Invalid Entity %d", iEnt); MF_RaiseAmxError(amx,AMX_ERR_NATIVE);
return 0; return 0;
} }
@@ -384,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)) {
EngineError(amx, "Invalid Entity %d", iEnt); MF_RaiseAmxError(amx,AMX_ERR_NATIVE);
return 0; return 0;
} }
@@ -409,13 +407,13 @@ static cell AMX_NATIVE_CALL attach_view(AMX *amx, cell *params)
int iIndex = params[1]; int iIndex = params[1];
int iTargetIndex = params[2]; int iTargetIndex = params[2];
if (iIndex > gpGlobals->maxClients || !is_ent_valid(iIndex)) { if (iIndex > 32 || !is_ent_valid(iIndex)) {
EngineError(amx, "Invalid player %d", iIndex); MF_RaiseAmxError(amx,AMX_ERR_NATIVE);
return 0; return 0;
} }
if (!is_ent_valid(iTargetIndex)) { if (!is_ent_valid(iTargetIndex)) {
EngineError(amx, "Invalid Entity %d", iIndex); MF_RaiseAmxError(amx,AMX_ERR_NATIVE);
return 0; return 0;
} }
@@ -431,8 +429,8 @@ static cell AMX_NATIVE_CALL set_view(AMX *amx, cell *params) {
int iIndex = params[1]; int iIndex = params[1];
int iCameraType = params[2]; int iCameraType = params[2];
if (iIndex > gpGlobals->maxClients || !is_ent_valid(iIndex)) { if (iIndex > 32 || !is_ent_valid(iIndex)) {
EngineError(amx, "Invalid player %d", iIndex); MF_RaiseAmxError(amx,AMX_ERR_NATIVE);
return 0; return 0;
} }
@@ -898,11 +896,36 @@ 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},
@@ -914,6 +937,7 @@ 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,6 +7,11 @@
#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"
@@ -120,11 +125,6 @@ struct GlobalInfo {
class Impulse class Impulse
{ {
public: public:
~Impulse()
{
if (Forward != -1)
MF_UnregisterSPForward(Forward);
}
int Forward; int Forward;
int Check; int Check;
}; };
@@ -133,12 +133,18 @@ class Touch
{ {
public: public:
int Forward; int Forward;
String Toucher; char *Toucher;
String Touched; char *Touched;
~Touch() ~Touch()
{ {
if (Forward != -1) if (Toucher) {
MF_UnregisterSPForward(Forward); delete [] Toucher;
Toucher = 0;
}
if (Touched) {
delete [] Touched;
Touched = 0;
}
} }
}; };
@@ -146,11 +152,13 @@ class EntClass
{ {
public: public:
int Forward; int Forward;
String Class; char *Class;
~EntClass() ~EntClass()
{ {
if (Forward != -1) if (Class) {
MF_UnregisterSPForward(Forward); delete [] Class;
Class = 0;
}
} }
}; };
@@ -169,22 +177,7 @@ 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;
@@ -198,4 +191,3 @@ extern CVector<EntClass *> Thinks;
extern CVector<Touch *> Touches; extern CVector<Touch *> Touches;
#endif //_ENGINE_INCLUDE_H #endif //_ENGINE_INCLUDE_H

View File

@@ -24,7 +24,6 @@
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"
@@ -71,7 +70,6 @@
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)) {
EngineError(amx, "Invalid Entity"); MF_RaiseAmxError(amx, AMX_ERR_NATIVE);
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)) {
EngineError(amx, "Invalid Entity %d", iEnt); MF_RaiseAmxError(amx, AMX_ERR_NATIVE);
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)) {
EngineError(amx, "Invalid Entity"); MF_RaiseAmxError(amx, AMX_ERR_NATIVE);
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)) {
EngineError(amx, "Invalid Entity"); MF_RaiseAmxError(amx, AMX_ERR_NATIVE);
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)) {
EngineError(amx, "Invalid Entity %d", iValue); MF_RaiseAmxError(amx, AMX_ERR_NATIVE);
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)) {
EngineError(amx, "Invalid Entity %d", idx); MF_RaiseAmxError(amx, AMX_ERR_NATIVE);
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)) {
EngineError(amx, "Invalid Entity %d", iEnt); MF_RaiseAmxError(amx, AMX_ERR_NATIVE);
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)) {
EngineError(amx, "Invalid Entity %d", iEnt); MF_RaiseAmxError(amx, AMX_ERR_NATIVE);
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)) {
EngineError(amx, "Invalid Entity %d", iEnt); MF_RaiseAmxError(amx, AMX_ERR_NATIVE);
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)) {
EngineError(amx, "Invalid Entity %d", iEnt); MF_RaiseAmxError(amx, AMX_ERR_NATIVE);
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:
EngineError(amx, "Invalid property %d", iEnt); MF_RaiseAmxError(amx, AMX_ERR_NATIVE);
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)) {
EngineError(amx, "Invalid Entity %d", iEnt); MF_RaiseAmxError(amx, AMX_ERR_NATIVE);
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)) {
EngineError(amx, "Invalid Entity %d", iEnt); MF_RaiseAmxError(amx, AMX_ERR_NATIVE);
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)) {
EngineError(amx, "Invalid Entity %d", iEnt); MF_RaiseAmxError(amx, AMX_ERR_NATIVE);
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)) {
EngineError(amx, "Invalid Entity %d", iEnt); MF_RaiseAmxError(amx, AMX_ERR_NATIVE);
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)) {
EngineError(amx, "Invalid Entity %d", iEnt); MF_RaiseAmxError(amx, AMX_ERR_NATIVE);
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)) {
EngineError(amx, "Invalid Entity %d", iEnt); MF_RaiseAmxError(amx, AMX_ERR_NATIVE);
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)) {
EngineError(amx, "Invalid Entity %d", iEnt); MF_RaiseAmxError(amx, AMX_ERR_NATIVE);
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)) {
EngineError(amx, "Invalid Entity %d", iEnt); MF_RaiseAmxError(amx, AMX_ERR_NATIVE);
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)) {
EngineError(amx, "Invalid Entity %d", iEnt); MF_RaiseAmxError(amx, AMX_ERR_NATIVE);
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)) {
EngineError(amx, "Invalid Entity %d", iEnt); MF_RaiseAmxError(amx, AMX_ERR_NATIVE);
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)) {
EngineError(amx, "Invalid Entity %d", iEnt); MF_RaiseAmxError(amx, AMX_ERR_NATIVE);
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)) {
EngineError(amx, "Invalid Entity %d", iEnt); MF_RaiseAmxError(amx, AMX_ERR_NATIVE);
return 0; return 0;
} }
@@ -1351,6 +1351,167 @@ 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;
@@ -1364,9 +1525,14 @@ 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)) {
MF_RaiseAmxError(amx, AMX_ERR_NATIVE);
return 0;
}
edict_t *pEnt = INDEXENT2(idx); edict_t *pEnt = INDEXENT2(idx);
cell *cAddr = MF_GetAmxAddr(amx, params[2]); cell *cAddr = MF_GetAmxAddr(amx, params[2]);
float origin[3] = { REAL origin[3] = {
amx_ctof(cAddr[0]), amx_ctof(cAddr[0]),
amx_ctof(cAddr[1]), amx_ctof(cAddr[1]),
amx_ctof(cAddr[2]) amx_ctof(cAddr[2])
@@ -1412,7 +1578,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])) {
EngineError(amx, "Invalid Entity %d", params[1]); MF_RaiseAmxError(amx, AMX_ERR_NATIVE);
return 0; return 0;
} }
@@ -1521,9 +1687,9 @@ static cell AMX_NATIVE_CALL find_ent_by_owner(AMX *amx, cell *params) // native
{ {
int iEnt = params[1]; int iEnt = params[1];
int oEnt = params[3]; int oEnt = params[3];
// Check index to start searching at, 0 must be possible for iEnt. // Check index to start searching at, 0 must be possible.
if (!is_ent_valid(oEnt)) { if (!is_ent_valid(iEnt) || !is_ent_valid(oEnt)) {
EngineError(amx, "Invalid Entity"); MF_RaiseAmxError(amx, AMX_ERR_NATIVE);
return 0; return 0;
} }
@@ -1561,7 +1727,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)) {
EngineError(amx, "Invalid Entity %d", index); MF_RaiseAmxError(amx, AMX_ERR_NATIVE);
return 0; return 0;
} }
@@ -1614,6 +1780,16 @@ 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},
@@ -1625,11 +1801,8 @@ AMX_NATIVE_INFO ent_Natives[] = {
{"find_ent_by_owner", find_ent_by_owner}, {"find_ent_by_owner", find_ent_by_owner},
{"get_grenade_id", get_grenade_id}, {"get_grenade_id", get_grenade_id},
{"get_keyvalue", get_keyvalue },
{"copy_keyvalue", copy_keyvalue}, {"copy_keyvalue", copy_keyvalue},
{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 != -1) { if (SpawnForward) {
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 != -1) { if (ChangelevelForward) {
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 != -1) { if (PlaybackForward) {
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,14 +90,16 @@ 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 != -1) { if (DispatchKeyForward) {
retVal = MF_ExecuteForward(DispatchKeyForward, index); retVal = MF_ExecuteForward(DispatchKeyForward, index);
g_inKeyValue=false; g_inKeyValue=false;
if (retVal) if (retVal > 0)
RETURN_META(MRES_SUPERCEDE); RETURN_META(MRES_SUPERCEDE);
else
RETURN_META(MRES_HANDLED);
} }
g_inKeyValue=false; g_inKeyValue=false;
RETURN_META(MRES_IGNORED); RETURN_META(MRES_HANDLED);
} }
void StartFrame() void StartFrame()
@@ -109,9 +111,9 @@ void StartFrame()
} }
} }
if (StartFrameForward != -1) if (StartFrameForward)
MF_ExecuteForward(StartFrameForward); MF_ExecuteForward(StartFrameForward);
else if (VexdServerForward != -1) else if (VexdServerForward)
MF_ExecuteForward(VexdServerForward); MF_ExecuteForward(VexdServerForward);
RETURN_META(MRES_IGNORED); RETURN_META(MRES_IGNORED);
@@ -123,41 +125,35 @@ 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),origImpulse); retVal = MF_ExecuteForward(Impulses[i]->Forward, ENTINDEX(pEntity));
if (retVal & 2 /*PLUGIN_HANDLED_MAIN*/) if (retVal)
{
g_cmd->impulse=0;
RETURN_META(MRES_SUPERCEDE); RETURN_META(MRES_SUPERCEDE);
} else
else if (retVal) RETURN_META(MRES_IGNORED);
res = MRES_SUPERCEDE;
} }
} }
if (CmdStartForward != -1) { if (CmdStartForward) {
incmd = true; incmd = true;
retVal = MF_ExecuteForward(CmdStartForward, ENTINDEX(pEntity), origImpulse); retVal = MF_ExecuteForward(CmdStartForward, ENTINDEX(pEntity), g_cmd->impulse);
incmd = false; incmd = false;
if (retVal) { if (retVal) {
g_cmd->impulse = 0; g_cmd->impulse = 0;
RETURN_META(MRES_SUPERCEDE); RETURN_META(MRES_SUPERCEDE);
} }
} }
if (res == MRES_SUPERCEDE)
g_cmd->impulse=0; 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 != -1) { if (ClientKillForward) {
retVal = MF_ExecuteForward(ClientKillForward, ENTINDEX(pEntity)); retVal = MF_ExecuteForward(ClientKillForward, ENTINDEX(pEntity));
if (retVal) if (retVal)
RETURN_META(MRES_SUPERCEDE); RETURN_META(MRES_SUPERCEDE);
@@ -171,7 +167,6 @@ 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) {
@@ -211,7 +206,7 @@ void PlayerPostThink_Post(edict_t *pEntity)
} }
} }
if (PlayerPostThinkForward != -1) if (PlayerPostThinkForward)
{ {
if (MF_ExecuteForward(PlayerPostThinkForward, ENTINDEX(pEntity))) if (MF_ExecuteForward(PlayerPostThinkForward, ENTINDEX(pEntity)))
RETURN_META(MRES_SUPERCEDE); RETURN_META(MRES_SUPERCEDE);
@@ -226,77 +221,68 @@ 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.size() == 0) if (Touches[i]->Toucher == 0)
{ {
if (Touches[i]->Touched.size() == 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 & 2/*PLUGIN_HANDLED_MAIN*/) if (retVal)
RETURN_META(MRES_SUPERCEDE); RETURN_META(MRES_SUPERCEDE);
else if (retVal) else
res=MRES_SUPERCEDE; RETURN_META(MRES_IGNORED);
} else if (Touches[i]->Touched.compare(ptdClass)==0) { } 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 & 2/*PLUGIN_HANDLED_MAIN*/) if (retVal)
RETURN_META(MRES_SUPERCEDE); RETURN_META(MRES_SUPERCEDE);
else if (retVal) else
res=MRES_SUPERCEDE; RETURN_META(MRES_IGNORED);
} }
} else if (Touches[i]->Toucher.compare(ptrClass)==0) { } else if (fstrcmp(Touches[i]->Toucher, ptrClass)) {
if (Touches[i]->Touched.size() == 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 & 2/*PLUGIN_HANDLED_MAIN*/) if (retVal)
RETURN_META(MRES_SUPERCEDE); RETURN_META(MRES_SUPERCEDE);
else if (retVal) else
res=MRES_SUPERCEDE; RETURN_META(MRES_IGNORED);
} else if (Touches[i]->Touched.compare(ptdClass)==0) { } 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 & 2/*PLUGIN_HANDLED_MAIN*/) if (retVal)
RETURN_META(MRES_SUPERCEDE); RETURN_META(MRES_SUPERCEDE);
else if (retVal) else
res=MRES_SUPERCEDE; RETURN_META(MRES_IGNORED);
} }
} }
} }
/* Execute pfnTouch forwards */ /* Execute pfnTouch forwards */
if (pfnTouchForward != -1) { if (pfnTouchForward) {
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) {
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(res); RETURN_META(MRES_IGNORED);
} }
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 (Thinks[i]->Class.compare(cls)==0) if (fstrcmp(cls, Thinks[i]->Class))
{ {
retVal=MF_ExecuteForward(Thinks[i]->Forward, ENTINDEX(pent)); MF_ExecuteForward(Thinks[i]->Forward, ENTINDEX(pent));
if (retVal & 2/*PLUGIN_HANDLED_MAIN*/) RETURN_META(MRES_IGNORED);
RETURN_META(MRES_SUPERCEDE);
else if (retVal)
res=MRES_SUPERCEDE;
} }
} }
retVal=MF_ExecuteForward(pfnThinkForward, ENTINDEX(pent)); MF_ExecuteForward(pfnThinkForward, ENTINDEX(pent));
if (retVal)
res=MRES_SUPERCEDE;
RETURN_META(res); RETURN_META(MRES_IGNORED);
} }

View File

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

View File

@@ -36,13 +36,13 @@ public:
int type; int type;
REAL fData; REAL fData;
String cData; CString cData;
int iData; int iData;
}; };
extern AMX_NATIVE_INFO msg_Natives[]; extern AMX_NATIVE_INFO msg_Natives[];
extern CVector<argMsg*> Msg; extern CVector<argMsg*> Msg;
extern CVector<int> msgHooks[256]; extern 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

@@ -32,8 +32,6 @@
#ifndef __CVECTOR_H__ #ifndef __CVECTOR_H__
#define __CVECTOR_H__ #define __CVECTOR_H__
#include <assert.h>
// Vector // Vector
template <class T> class CVector template <class T> class CVector
{ {
@@ -78,7 +76,7 @@ template <class T> class CVector
delete [] m_Data; delete [] m_Data;
} }
if (m_Size < size) if (m_Size < size)
m_CurrentSize = size; m_CurrentUsedSize = size;
m_Data = newData; m_Data = newData;
m_Size = size; m_Size = size;
return true; return true;
@@ -286,7 +284,7 @@ public:
iterator iterAt(size_t pos) iterator iterAt(size_t pos)
{ {
if (pos > m_CurrentUsedSize) if (pos > m_CurrentUsedSize)
assert(0); ASSERT(0);
return iterator(m_Data + pos); return iterator(m_Data + pos);
} }
@@ -333,7 +331,7 @@ public:
{ {
if (pos > m_CurrentUsedSize) if (pos > m_CurrentUsedSize)
{ {
assert(0); ASSERT(0);
} }
return m_Data[pos]; return m_Data[pos];
} }
@@ -342,7 +340,7 @@ public:
{ {
if (pos > m_CurrentUsedSize) if (pos > m_CurrentUsedSize)
{ {
assert(0); ASSERT(0);
} }
return m_Data[pos]; return m_Data[pos];
} }
@@ -361,7 +359,7 @@ public:
{ {
if (m_CurrentUsedSize < 1) if (m_CurrentUsedSize < 1)
{ {
assert(0); ASSERT(0);
} }
return m_Data[0]; return m_Data[0];
} }
@@ -370,7 +368,7 @@ public:
{ {
if (m_CurrentUsedSize < 1) if (m_CurrentUsedSize < 1)
{ {
assert(0); ASSERT(0);
} }
return m_Data[0]; return m_Data[0];
} }
@@ -379,7 +377,7 @@ public:
{ {
if (m_CurrentUsedSize < 1) if (m_CurrentUsedSize < 1)
{ {
assert(0); ASSERT(0);
} }
return m_Data[m_CurrentUsedSize - 1]; return m_Data[m_CurrentUsedSize - 1];
} }
@@ -388,7 +386,7 @@ public:
{ {
if (m_CurrentUsedSize < 1) if (m_CurrentUsedSize < 1)
{ {
assert(0); ASSERT(0);
} }
return m_Data[m_CurrentUsedSize - 1]; return m_Data[m_CurrentUsedSize - 1];
} }

View File

@@ -15,7 +15,6 @@
$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");
@@ -23,7 +22,7 @@ $gccf = "gcc";
my %OPTIONS, %OPT; my %OPTIONS, %OPT;
$OPT{"debug"} = "-g -ggdb"; $OPT{"debug"} = "-g -ggdb";
$OPT{"opt"} = "-O2 -ffast-math -funroll-loops -fomit-frame-pointer -s -DNDEBUG -Wall -Wno-unknown-pragmas -DOPT_TYPE=\"optimized\" -fno-exceptions -fno-rtti"; $OPT{"opt"} = "-O2 -ffast-math -funroll-loops -fomit-frame-pointer -s -DNDEBUG -Wall -Wno-unknown-pragmas -DOPT_TYPE=\"optimized\"";
$OPTIONS{"include"} = "-I$sdk -I. -I$mm -I$sdk/engine -I$sdk/common -I$sdk/pm_shared -I$sdk/dlls"; $OPTIONS{"include"} = "-I$sdk -I. -I$mm -I$sdk/engine -I$sdk/common -I$sdk/pm_shared -I$sdk/dlls";
@@ -46,7 +45,7 @@ while ($cmd = shift)
} }
} }
$gcc = `$gccf --version`; $gcc = `gcc --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";
@@ -140,11 +139,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 = "$gccf $cflags -Dstrcmpi=strcasecmp -fPIC $inc -c $file -o $ofile"; $gcc = "gcc $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($ofile))[9]; $ofile_time = (stat($file))[9];
if ($file_time > $ofile_time) if ($file_time > $ofile_time)
{ {
print "$gcc\n"; print "$gcc\n";
@@ -166,7 +165,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($ofile))[9]; $ofile_time = (stat($file))[9];
if ($file_time > $ofile_time) if ($file_time > $ofile_time)
{ {
print "$gcc\n"; print "$gcc\n";
@@ -178,6 +177,6 @@ for ($i=0; $i<=$#CPP_SOURCE_FILES; $i++)
} }
} }
$gcc = "$gccf $cflags -shared -ldl -lm @LINK -o $outdir/$bin"; $gcc = "gcc $cflags -shared -ldl -lm @LINK -o $outdir/$bin";
print "$gcc\n"; print "$gcc\n";
`$gcc`; `$gcc`;

View File

@@ -211,13 +211,6 @@ static cell AMX_NATIVE_CALL dllfunc(AMX *amx,cell *params)
CHECK_ENTITY(index); CHECK_ENTITY(index);
iparam1 = gpMetaUtilFuncs->pfnCallGameEntity(PLID,STRING(ALLOC_STRING(temp)),VARS(INDEXENT2(index))); iparam1 = gpMetaUtilFuncs->pfnCallGameEntity(PLID,STRING(ALLOC_STRING(temp)),VARS(INDEXENT2(index)));
return iparam1; return iparam1;
case DLLFunc_ClientUserInfoChanged: // void ) (edict_t *pEntity, char *infobuffer)
index = cRet[0];
CHECK_ENTITY(index);
gpGamedllFuncs->dllapi_table->pfnClientUserInfoChanged(INDEXENT2(index),(*g_engfuncs.pfnGetInfoKeyBuffer)(INDEXENT2(index)));
return 1;
default: default:
MF_Log("Unknown dllfunc entry."); MF_Log("Unknown dllfunc entry.");
MF_RaiseAmxError(amx, AMX_ERR_NATIVE); MF_RaiseAmxError(amx, AMX_ERR_NATIVE);

View File

@@ -48,8 +48,7 @@ enum
DLLFunc_CreateInstancedBaselines, // void ) ( void ); DLLFunc_CreateInstancedBaselines, // void ) ( void );
DLLFunc_pfnAllowLagCompensation, // int )( void ); DLLFunc_pfnAllowLagCompensation, // int )( void );
// I know this does not fit with DLLFUNC(), but I dont want another native just for it. // I know this does not fit with DLLFUNC(), but I dont want another native just for it.
MetaFunc_CallGameEntity, // bool (plid_t plid, const char *entStr,entvars_t *pev); MetaFunc_CallGameEntity // bool (plid_t plid, const char *entStr,entvars_t *pev);
DLLFunc_ClientUserInfoChanged // void ) (edict_t *pEntity, char *infobuffer)
}; };
#endif //_INCLUDE_DLLFUNC_H #endif //_INCLUDE_DLLFUNC_H

View File

@@ -962,6 +962,7 @@ static cell AMX_NATIVE_CALL engfunc(AMX *amx, cell *params)
temp2 = MF_GetAmxString(amx,params[4],1,&len); temp2 = MF_GetAmxString(amx,params[4],1,&len);
(*g_engfuncs.pfnSetClientKeyValue)(index,(*g_engfuncs.pfnGetInfoKeyBuffer)(INDEXENT2(index)),temp,temp2); (*g_engfuncs.pfnSetClientKeyValue)(index,(*g_engfuncs.pfnGetInfoKeyBuffer)(INDEXENT2(index)),temp,temp2);
return 1; return 1;
default: default:
LOG_CONSOLE(PLID,"[NS2AMX] Unknown engfunc type provided."); LOG_CONSOLE(PLID,"[NS2AMX] Unknown engfunc type provided.");
return 0; return 0;

View File

@@ -10,10 +10,10 @@
#include <fakemeta_const> #include <fakemeta_const>
/* Returns entvar data from an entity Use the pev_* enum to specify which form of data you want returned. */ /* Returns entvar data from an entity Use the pev_* enum to specify which form of data you want returned. */
native pev(_index,_value,{Float,Sql,Result,_}:...) native pev(_index,_value,{Float,_}:...)
/* Sets entvar data for an entity. Use the pev_* enum */ /* Sets entvar data for an entity. Use the pev_* enum */
native set_pev(_index,_value,{Float,Sql,Result,_}:...) native set_pev(_index,_value,{Float,_}:...)
/* Returns an integer from private data. _linuxdiff is added into the _Offset if it's used on a linux server. */ /* Returns an integer from private data. _linuxdiff is added into the _Offset if it's used on a linux server. */
native get_pdata_int(_index,_Offset,_linuxdiff=5); native get_pdata_int(_index,_Offset,_linuxdiff=5);
@@ -32,7 +32,7 @@ native set_pdata_float(_index,_Offset,Float:_Value,_linuxdiff=5);
native register_forward(_forwardType,_function[],_post=0); native register_forward(_forwardType,_function[],_post=0);
/* Returns data for metamod */ /* Returns data for metamod */
native forward_return(type,{Float,Sql,Result,_}:...); native forward_return(type,{Float:_}...);
native engfunc(type,{Float,Sql,Result,_}:...); native engfunc(type,{Float,_}:...);
native dllfunc(type,{Float,Sql,Result,_}:...); native dllfunc(type,{Float,_}:...);

View File

@@ -175,9 +175,6 @@
<File <File
RelativePath=".\forward.h"> RelativePath=".\forward.h">
</File> </File>
<File
RelativePath=".\forwardmacros.h">
</File>
</Filter> </Filter>
</Files> </Files>
<Globals> <Globals>

View File

@@ -1,10 +1,10 @@
/* Fake meta constants /* Fake meta constants
* This file is provided as-is (no warrenties) * This file is provided as-is (no warrenties)
*/ */
#if defined _fakemeta_const_included #if defined _fakemeta_included
#endinput #endinput
#endif #endif
#define _fakemeta_const_included #define _fakemeta_included
// For forward_return // For forward_return
#define FMV_STRING 1 #define FMV_STRING 1
@@ -12,17 +12,14 @@
#define FMV_CELL 3 #define FMV_CELL 3
/* The actual return value of the function, use these instead of PLUGIN_HANDLED etc when // The actual return value of the function
* returning from registered forwards.
*/
#define FMRES_HANDLED 2 #define FMRES_HANDLED 2
#define FMRES_SUPERCEDE 4 #define FMRES_SUPERCEDE 4
#define FMRES_IGNORED 1 #define FMRES_IGNORED 1
#define FMRES_OVERRIDE 3 #define FMRES_OVERRIDE 3
/* Used with engfunc()
*/
enum { enum {
EngFunc_PrecacheModel, // int ) (char* s); EngFunc_PrecacheModel, // int ) (char* s);
EngFunc_PrecacheSound, // int ) (char* s); EngFunc_PrecacheSound, // int ) (char* s);
@@ -102,8 +99,6 @@ enum {
EngFunc_SetClientKeyValue // void ) (int clientIndex, char *infobuffer, char *key, char *value); EngFunc_SetClientKeyValue // void ) (int clientIndex, char *infobuffer, char *key, char *value);
}; };
/* Used with dllfunc()
*/
enum enum
{ {
DLLFunc_GameInit, // void) ( void ); DLLFunc_GameInit, // void) ( void );
@@ -148,159 +143,154 @@ enum
DLLFunc_GetHullBounds, // int) ( int hullnumber, float *mins, float *maxs ); DLLFunc_GetHullBounds, // int) ( int hullnumber, float *mins, float *maxs );
// Create baselines for certain "unplaced" items. // Create baselines for certain "unplaced" items.
DLLFunc_CreateInstancedBaseline, // void ) ( void ); DLLFunc_CreateInstancedBaselines, // void ) ( void );
DLLFunc_pfnAllowLagCompensation, // int )( void ); DLLFunc_pfnAllowLagCompensation, // int )( void );
// I know this does not fit with DLLFUNC(), but I dont want another native just for it. // I know this does not fit with DLLFUNC(), but I dont want another native just for it.
MetaFunc_CallGameEntity, // bool (plid_t plid, const char *entStr,entvars_t *pev); MetaFunc_CallGameEntity // bool (plid_t plid, const char *entStr,entvars_t *pev);
DLLFunc_ClientUserInfoChanged // void (idplayer)
}; };
enum { enum {
pev_string_start = 0, pev_string_start = 0,
pev_classname, classname,
pev_globalname, globalname,
pev_model, model,
pev_target, target,
pev_targetname, targetname,
pev_netname, netname,
pev_message, message,
pev_noise, noise,
pev_noise1, noise1,
pev_noise2, noise2,
pev_noise3, noise3,
pev_string_end, pev_string_end,
pev_edict_start, pev_edict_start,
pev_chain, chain,
pev_dmg_inflictor, dmg_inflictor,
pev_enemy, enemy,
pev_aiment, aiment,
pev_owner, owner,
pev_groundentity, groundentity,
pev_euser1, euser1,
pev_euser2, euser2,
pev_euser3, euser3,
pev_euser4, euser4,
pev_edict_end, pev_edict_end,
pev_float_start, pev_float_start,
pev_impacttime, impacttime,
pev_starttime, starttime,
pev_idealpitch, idealpitch,
pev_ideal_yaw, pitch_speed,
pev_pitch_speed, yaw_speed,
pev_yaw_speed, ltime,
pev_ltime, nextthink,
pev_nextthink, gravity,
pev_gravity, friction,
pev_friction, frame,
pev_frame, animtime,
pev_animtime, framerate,
pev_framerate, scale,
pev_scale, renderamt,
pev_renderamt, health,
pev_health, frags,
pev_frags, takedamage,
pev_takedamage, max_health,
pev_max_health, teleport_time,
pev_teleport_time, armortype,
pev_armortype, armorvalue,
pev_armorvalue, dmg_take,
pev_dmg_take, dmg_save,
pev_dmg_save, dmg,
pev_dmg, dmgtime,
pev_dmgtime, speed,
pev_speed, air_finished,
pev_air_finished, pain_finished,
pev_pain_finished, radsuit_finished,
pev_radsuit_finished, maxspeed,
pev_maxspeed, fov,
pev_fov, flFallVelocity,
pev_flFallVelocity, fuser1,
pev_fuser1, fuser2,
pev_fuser2, fuser3,
pev_fuser3, fuser4,
pev_fuser4,
pev_float_end, pev_float_end,
pev_int_start, pev_int_start,
pev_fixangle, fixangle,
pev_modelindex, modelindex,
pev_viewmodel, viewmodel,
pev_weaponmodel, weaponmodel,
pev_movetype, movetype,
pev_solid, solid,
pev_skin, skin,
pev_body, body,
pev_effects, effects,
pev_light_level, light_level,
pev_sequence, sequence,
pev_gaitsequence, gaitsequence,
pev_rendermode, rendermode,
pev_renderfx, renderfx,
pev_weapons, weapons,
pev_deadflag, deadflag,
pev_button, button,
pev_impulse, impulse,
pev_spawnflags, spawnflags,
pev_flags, flags,
pev_colormap, colormap,
pev_team, team,
pev_waterlevel, waterlevel,
pev_watertype, watertype,
pev_playerclass, playerclass,
pev_weaponanim, weaponanim,
pev_pushmsec, pushmsec,
pev_bInDuck, bInDuck,
pev_flTimeStepSound, flTimeStepSound,
pev_flSwimTime, flSwimTime,
pev_flDuckTime, flDuckTime,
pev_iStepLeft, iStepLeft,
pev_gamestate, gamestate,
pev_oldbuttons, oldbuttons,
pev_groupinfo, groupinfo,
pev_iuser1, iuser1,
pev_iuser2, iuser2,
pev_iuser3, iuser3,
pev_iuser4, iuser4,
pev_int_end, pev_int_end,
pev_byte_start, pev_byte_start,
pev_controller_0, controller_0,
pev_controller_1, controller_1,
pev_controller_2, controller_2,
pev_controller_3, controller_3,
pev_blending_0, blending_0,
pev_blending_1, blending_1,
pev_byte_end, pev_byte_end,
pev_bytearray_start, pev_bytearray_start,
pev_controller, controller,
pev_blending, blending,
pev_bytearray_end, pev_bytearray_end,
pev_vecarray_start, pev_vecarray_start,
pev_origin, origin,
pev_oldorigin, oldorigin,
pev_velocity, velocity,
pev_basevelocity, basevelocity,
pev_clbasevelocity, clbasevelocity,
pev_movedir, movedir,
pev_angles, angles,
pev_avelocity, avelocity,
pev_v_angle, v_angle,
pev_endpos, endpos,
pev_startpos, startpos,
pev_absmin, absmin,
pev_absmax, absmax,
pev_mins, mins,
pev_maxs, maxs,
pev_size, size,
pev_rendercolor, rendercolor,
pev_view_ofs, view_ofs,
pev_vuser1, vuser1,
pev_vuser2, vuser2,
pev_vuser3, vuser3,
pev_vuser4, vuser4,
pev_punchangle, punchangle,
pev_vecarray_end pev_vecarray_end
}; };
/* Used with register_forward()
*/
enum { enum {
FM_PrecacheModel = 1, // done FM_PrecacheModel = 1, // done
FM_PrecacheSound, // done FM_PrecacheSound, // done
@@ -434,6 +424,6 @@ enum {
// Enumerates player hulls. Returns 0 if the hull number doesn't exist, 1 otherwise // Enumerates player hulls. Returns 0 if the hull number doesn't exist, 1 otherwise
// Create baselines for certain "unplaced" items. // Create baselines for certain "unplaced" items.
FM_CreateInstancedBaseline, // done FM_CreateInstancedBaselines, // done
FM_AllowLagCompensation, // done FM_AllowLagCompensation, // done
}; };

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