more cleaned-up code
This commit is contained in:
parent
612a86dbef
commit
76760b221d
@ -111,8 +111,7 @@ CmdMngr::Command* CmdMngr::getCmd(long int id, int type, int access)
|
|||||||
|
|
||||||
while (buf_cmdptr)
|
while (buf_cmdptr)
|
||||||
{
|
{
|
||||||
if ((*buf_cmdptr).gotAccess(access) && (*buf_cmdptr).getPlugin()->isExecutable((*buf_cmdptr).getFunction())
|
if ((*buf_cmdptr).gotAccess(access) && (*buf_cmdptr).getPlugin()->isExecutable((*buf_cmdptr).getFunction()) && (*buf_cmdptr).isViewable())
|
||||||
&& (*buf_cmdptr).isViewable())
|
|
||||||
{
|
{
|
||||||
if (id-- == 0)
|
if (id-- == 0)
|
||||||
return &(*buf_cmdptr);
|
return &(*buf_cmdptr);
|
||||||
@ -154,7 +153,7 @@ void CmdMngr::setCmdLink(CmdLink** a, Command* c, bool sorted)
|
|||||||
{
|
{
|
||||||
while (*a)
|
while (*a)
|
||||||
{
|
{
|
||||||
int i = strcmp(c->getCommand(),(*a)->cmd->getCommand());
|
int i = strcmp(c->getCommand(), (*a)->cmd->getCommand());
|
||||||
|
|
||||||
if ((i < 0) || (i == 0) && (strcmp(c->getArgument(), (*a)->cmd->getArgument()) < 0))
|
if ((i < 0) || (i == 0) && (strcmp(c->getArgument(), (*a)->cmd->getArgument()) < 0))
|
||||||
break;
|
break;
|
||||||
@ -184,7 +183,7 @@ void CmdMngr::clearCmdLink(CmdLink** phead, bool pclear)
|
|||||||
|
|
||||||
void CmdMngr::Command::setCmdType(int a)
|
void CmdMngr::Command::setCmdType(int a)
|
||||||
{
|
{
|
||||||
switch(a)
|
switch (a)
|
||||||
{
|
{
|
||||||
case CMD_ConsoleCommand: cmdtype |= 3; break;
|
case CMD_ConsoleCommand: cmdtype |= 3; break;
|
||||||
case CMD_ClientCommand: cmdtype |= 1; break;
|
case CMD_ClientCommand: cmdtype |= 1; break;
|
||||||
@ -207,7 +206,7 @@ void CmdMngr::Command::setCmdType(int a)
|
|||||||
|
|
||||||
const char* CmdMngr::Command::getCmdType() const
|
const char* CmdMngr::Command::getCmdType() const
|
||||||
{
|
{
|
||||||
switch(cmdtype)
|
switch (cmdtype)
|
||||||
{
|
{
|
||||||
case 1: return "client";
|
case 1: return "client";
|
||||||
case 2: return "server";
|
case 2: return "server";
|
||||||
|
@ -299,7 +299,7 @@ void EventsMngr::parseValue(int iValue)
|
|||||||
if (condIter->paramId == m_ParsePos)
|
if (condIter->paramId == m_ParsePos)
|
||||||
{
|
{
|
||||||
anyConditions = true;
|
anyConditions = true;
|
||||||
switch(condIter->type)
|
switch (condIter->type)
|
||||||
{
|
{
|
||||||
case '=': if (condIter->iValue == iValue) execute = true; break;
|
case '=': if (condIter->iValue == iValue) execute = true; break;
|
||||||
case '!': if (condIter->iValue != iValue) execute = true; break;
|
case '!': if (condIter->iValue != iValue) execute = true; break;
|
||||||
@ -345,7 +345,7 @@ void EventsMngr::parseValue(float fValue)
|
|||||||
if (condIter->paramId == m_ParsePos)
|
if (condIter->paramId == m_ParsePos)
|
||||||
{
|
{
|
||||||
anyConditions = true;
|
anyConditions = true;
|
||||||
switch(condIter->type)
|
switch (condIter->type)
|
||||||
{
|
{
|
||||||
case '=': if (condIter->fValue == fValue) execute = true; break;
|
case '=': if (condIter->fValue == fValue) execute = true; break;
|
||||||
case '!': if (condIter->fValue != fValue) execute = true; break;
|
case '!': if (condIter->fValue != fValue) execute = true; break;
|
||||||
@ -390,7 +390,7 @@ void EventsMngr::parseValue(const char *sz)
|
|||||||
if (condIter->paramId == m_ParsePos)
|
if (condIter->paramId == m_ParsePos)
|
||||||
{
|
{
|
||||||
anyConditions = true;
|
anyConditions = true;
|
||||||
switch(condIter->type)
|
switch (condIter->type)
|
||||||
{
|
{
|
||||||
case '=': if (!strcmp(sz, condIter->sValue.c_str())) execute = true; break;
|
case '=': if (!strcmp(sz, condIter->sValue.c_str())) execute = true; break;
|
||||||
case '!': if (strcmp(sz, condIter->sValue.c_str())) execute = true; break;
|
case '!': if (strcmp(sz, condIter->sValue.c_str())) execute = true; break;
|
||||||
@ -440,7 +440,7 @@ const char* EventsMngr::getArgString(int a) const
|
|||||||
|
|
||||||
static char var[32];
|
static char var[32];
|
||||||
|
|
||||||
switch(m_ParseVault[a].type)
|
switch (m_ParseVault[a].type)
|
||||||
{
|
{
|
||||||
case MSG_INTEGER:
|
case MSG_INTEGER:
|
||||||
sprintf(var, "%d", m_ParseVault[a].iValue);
|
sprintf(var, "%d", m_ParseVault[a].iValue);
|
||||||
@ -458,7 +458,7 @@ int EventsMngr::getArgInteger(int a) const
|
|||||||
if (a < 0 || a > m_ParsePos)
|
if (a < 0 || a > m_ParsePos)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
switch(m_ParseVault[a].type)
|
switch (m_ParseVault[a].type)
|
||||||
{
|
{
|
||||||
case MSG_INTEGER:
|
case MSG_INTEGER:
|
||||||
return m_ParseVault[a].iValue;
|
return m_ParseVault[a].iValue;
|
||||||
@ -474,7 +474,7 @@ float EventsMngr::getArgFloat(int a) const
|
|||||||
if (a < 0 || a > m_ParsePos)
|
if (a < 0 || a > m_ParsePos)
|
||||||
return 0.0f;
|
return 0.0f;
|
||||||
|
|
||||||
switch(m_ParseVault[a].type)
|
switch (m_ParseVault[a].type)
|
||||||
{
|
{
|
||||||
case MSG_INTEGER:
|
case MSG_INTEGER:
|
||||||
return static_cast<float>(m_ParseVault[a].iValue);
|
return static_cast<float>(m_ParseVault[a].iValue);
|
||||||
|
@ -556,10 +556,12 @@ char * CLangMngr::FormatAmxString(AMX *amx, cell *params, int parm, int &len)
|
|||||||
} else {
|
} else {
|
||||||
cpLangName = ENTITY_KEYVALUE(GET_PLAYER_POINTER_I(m_CurGlobId)->pEdict, "lang");
|
cpLangName = ENTITY_KEYVALUE(GET_PLAYER_POINTER_I(m_CurGlobId)->pEdict, "lang");
|
||||||
}
|
}
|
||||||
} else if (*pAmxLangName == LANG_SERVER) // LANG_SERVER
|
}
|
||||||
|
else if (*pAmxLangName == LANG_SERVER) // LANG_SERVER
|
||||||
{
|
{
|
||||||
cpLangName = g_vault.get("server_language");
|
cpLangName = g_vault.get("server_language");
|
||||||
} else if (*pAmxLangName >= 1 && *pAmxLangName <= 32) // Direct Client Id
|
}
|
||||||
|
else if (*pAmxLangName >= 1 && *pAmxLangName <= 32) // Direct Client Id
|
||||||
{
|
{
|
||||||
if ((int)CVAR_GET_FLOAT("amx_client_languages") == 0)
|
if ((int)CVAR_GET_FLOAT("amx_client_languages") == 0)
|
||||||
{
|
{
|
||||||
@ -629,7 +631,6 @@ char * CLangMngr::FormatAmxString(AMX *amx, cell *params, int parm, int &len)
|
|||||||
cell *tmpCell = get_amxaddr(amx, params[parm++]);
|
cell *tmpCell = get_amxaddr(amx, params[parm++]);
|
||||||
while (tmpPtr-tmpString < sizeof(tmpString) && *tmpCell)
|
while (tmpPtr-tmpString < sizeof(tmpString) && *tmpCell)
|
||||||
*tmpPtr++ = static_cast<char>(*tmpCell++);
|
*tmpPtr++ = static_cast<char>(*tmpCell++);
|
||||||
|
|
||||||
*tmpPtr = 0;
|
*tmpPtr = 0;
|
||||||
_snprintf(outptr, sizeof(outbuf)-(outptr-outbuf)-1, format, tmpString);
|
_snprintf(outptr, sizeof(outbuf)-(outptr-outbuf)-1, format, tmpString);
|
||||||
ZEROTERM(outbuf);
|
ZEROTERM(outbuf);
|
||||||
@ -815,10 +816,12 @@ char *CLangMngr::FormatString(const char *fmt, va_list &ap)
|
|||||||
} else {
|
} else {
|
||||||
cpLangName = ENTITY_KEYVALUE(GET_PLAYER_POINTER_I(m_CurGlobId)->pEdict, "lang");
|
cpLangName = ENTITY_KEYVALUE(GET_PLAYER_POINTER_I(m_CurGlobId)->pEdict, "lang");
|
||||||
}
|
}
|
||||||
} else if (pAmxLangName == (const char *)LANG_SERVER) // LANG_SERVER
|
}
|
||||||
|
else if (pAmxLangName == (const char *)LANG_SERVER) // LANG_SERVER
|
||||||
{
|
{
|
||||||
cpLangName = g_vault.get("server_language");
|
cpLangName = g_vault.get("server_language");
|
||||||
} else if (pAmxLangName >= (const char *)1 && pAmxLangName <= (const char *)32) // Direct Client Id
|
}
|
||||||
|
else if (pAmxLangName >= (const char *)1 && pAmxLangName <= (const char *)32) // Direct Client Id
|
||||||
{
|
{
|
||||||
if ((int)CVAR_GET_FLOAT("amx_client_languages"))
|
if ((int)CVAR_GET_FLOAT("amx_client_languages"))
|
||||||
{
|
{
|
||||||
@ -1126,6 +1129,7 @@ int CLangMngr::MergeDefinitionFile(const char *file)
|
|||||||
} // if !multiline
|
} // if !multiline
|
||||||
} //if - main
|
} //if - main
|
||||||
}
|
}
|
||||||
|
|
||||||
// merge last section
|
// merge last section
|
||||||
if (!Defq.empty())
|
if (!Defq.empty())
|
||||||
{
|
{
|
||||||
@ -1170,6 +1174,7 @@ const char *CLangMngr::GetDef(const char *langName, const char *key)
|
|||||||
CLang *lang = GetLangR(langName);
|
CLang *lang = GetLangR(langName);
|
||||||
if (lang)
|
if (lang)
|
||||||
return lang->GetDef(key);
|
return lang->GetDef(key);
|
||||||
|
|
||||||
return "ML_NOTFOUND(LANG)";
|
return "ML_NOTFOUND(LANG)";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -292,7 +292,7 @@ public:
|
|||||||
iterator find(iterator startOn, const F &desc)
|
iterator find(iterator startOn, const F &desc)
|
||||||
{
|
{
|
||||||
iterator iter = startOn;
|
iterator iter = startOn;
|
||||||
while(iter)
|
while (iter)
|
||||||
{
|
{
|
||||||
if (*iter == desc)
|
if (*iter == desc)
|
||||||
break;
|
break;
|
||||||
|
@ -112,7 +112,7 @@ public:
|
|||||||
LogCond *filters;
|
LogCond *filters;
|
||||||
LogEventsMngr* parent;
|
LogEventsMngr* parent;
|
||||||
CLogEvent *next;
|
CLogEvent *next;
|
||||||
CLogEvent(CPluginMngr::CPlugin *p,int f, LogEventsMngr* ppp) : plugin(p), func(f), filters(0), parent(ppp), next(0) { }
|
CLogEvent(CPluginMngr::CPlugin *p, int f, LogEventsMngr* ppp) : plugin(p), func(f), filters(0), parent(ppp), next(0) { }
|
||||||
~CLogEvent();
|
~CLogEvent();
|
||||||
public:
|
public:
|
||||||
inline CPluginMngr::CPlugin *getPlugin() { return plugin; }
|
inline CPluginMngr::CPlugin *getPlugin() { return plugin; }
|
||||||
@ -121,7 +121,7 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
private:
|
private:
|
||||||
CLogEvent *logevents[MAX_LOGARGS+1];
|
CLogEvent *logevents[MAX_LOGARGS + 1];
|
||||||
CLogEvent *getValidLogEvent(CLogEvent * a);
|
CLogEvent *getValidLogEvent(CLogEvent * a);
|
||||||
CLogCmp* registerCondition(char* filter);
|
CLogCmp* registerCondition(char* filter);
|
||||||
void clearConditions();
|
void clearConditions();
|
||||||
|
@ -35,7 +35,8 @@
|
|||||||
// *****************************************************
|
// *****************************************************
|
||||||
// class MenuMngr
|
// class MenuMngr
|
||||||
// *****************************************************
|
// *****************************************************
|
||||||
MenuMngr::MenuCommand::MenuCommand( CPluginMngr::CPlugin *a, int mi, int k, int f ) {
|
MenuMngr::MenuCommand::MenuCommand(CPluginMngr::CPlugin *a, int mi, int k, int f)
|
||||||
|
{
|
||||||
plugin = a;
|
plugin = a;
|
||||||
keys = k;
|
keys = k;
|
||||||
menuid = mi;
|
menuid = mi;
|
||||||
@ -50,28 +51,32 @@ MenuMngr::~MenuMngr()
|
|||||||
|
|
||||||
int MenuMngr::findMenuId(const char* name, AMX* amx)
|
int MenuMngr::findMenuId(const char* name, AMX* amx)
|
||||||
{
|
{
|
||||||
for( MenuIdEle* b = headid; b ; b = b->next) {
|
for (MenuIdEle* b = headid; b; b = b->next)
|
||||||
if ( (!amx || !b->amx || amx == b->amx) && strstr(name,b->name.c_str()) )
|
{
|
||||||
|
if ((!amx || !b->amx || amx == b->amx) && strstr(name,b->name.c_str()))
|
||||||
return b->id;
|
return b->id;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int MenuMngr::registerMenuId(const char* n, AMX* a )
|
int MenuMngr::registerMenuId(const char* n, AMX* a)
|
||||||
{
|
{
|
||||||
int id = findMenuId( n, a );
|
int id = findMenuId(n, a);
|
||||||
if (id) return id;
|
if (id) return id;
|
||||||
headid = new MenuIdEle( n, a , headid );
|
headid = new MenuIdEle(n, a, headid);
|
||||||
|
|
||||||
if (!headid)
|
if (!headid)
|
||||||
return 0; // :TODO: Better error report
|
return 0; // :TODO: Better error report
|
||||||
|
|
||||||
return headid->id;
|
return headid->id;
|
||||||
}
|
}
|
||||||
|
|
||||||
void MenuMngr::registerMenuCmd( CPluginMngr::CPlugin *a,int mi, int k , int f )
|
void MenuMngr::registerMenuCmd(CPluginMngr::CPlugin *a, int mi, int k, int f)
|
||||||
{
|
{
|
||||||
MenuCommand** temp = &headcmd;
|
MenuCommand** temp = &headcmd;
|
||||||
while(*temp) temp = &(*temp)->next;
|
while (*temp) temp = &(*temp)->next;
|
||||||
*temp = new MenuCommand(a,mi, k,f);
|
*temp = new MenuCommand(a, mi, k, f);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MenuMngr::clear()
|
void MenuMngr::clear()
|
||||||
|
@ -33,7 +33,7 @@
|
|||||||
// class CPlayer
|
// class CPlayer
|
||||||
// *****************************************************
|
// *****************************************************
|
||||||
|
|
||||||
void CPlayer::Init( edict_t* e , int i )
|
void CPlayer::Init(edict_t* e, int i)
|
||||||
{
|
{
|
||||||
index = i;
|
index = i;
|
||||||
pEdict = e;
|
pEdict = e;
|
||||||
@ -55,7 +55,8 @@ void CPlayer::Init( edict_t* e , int i )
|
|||||||
team.clear();
|
team.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CPlayer::Disconnect() {
|
void CPlayer::Disconnect()
|
||||||
|
{
|
||||||
ingame = false;
|
ingame = false;
|
||||||
initialized = false;
|
initialized = false;
|
||||||
authorized = false;
|
authorized = false;
|
||||||
@ -64,8 +65,10 @@ void CPlayer::Disconnect() {
|
|||||||
{
|
{
|
||||||
ClientCvarQuery_Info *pQuery = cvarQueryQueue.front();
|
ClientCvarQuery_Info *pQuery = cvarQueryQueue.front();
|
||||||
unregisterSPForward(pQuery->resultFwd);
|
unregisterSPForward(pQuery->resultFwd);
|
||||||
|
|
||||||
if (pQuery->params)
|
if (pQuery->params)
|
||||||
delete [] pQuery->params;
|
delete [] pQuery->params;
|
||||||
|
|
||||||
delete pQuery;
|
delete pQuery;
|
||||||
cvarQueryQueue.pop();
|
cvarQueryQueue.pop();
|
||||||
}
|
}
|
||||||
@ -73,39 +76,40 @@ void CPlayer::Disconnect() {
|
|||||||
bot = 0;
|
bot = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CPlayer::PutInServer() {
|
void CPlayer::PutInServer()
|
||||||
|
{
|
||||||
playtime = gpGlobals->time;
|
playtime = gpGlobals->time;
|
||||||
ingame = true;
|
ingame = true;
|
||||||
}
|
}
|
||||||
bool CPlayer::Connect(const char* connectname,const char* ipaddress) {
|
|
||||||
|
bool CPlayer::Connect(const char* connectname, const char* ipaddress)
|
||||||
|
{
|
||||||
name.assign(connectname);
|
name.assign(connectname);
|
||||||
ip.assign(ipaddress);
|
ip.assign(ipaddress);
|
||||||
time = gpGlobals->time;
|
time = gpGlobals->time;
|
||||||
bot = IsBot();
|
bot = IsBot();
|
||||||
death_killer = 0;
|
death_killer = 0;
|
||||||
memset(flags,0,sizeof(flags));
|
memset(flags, 0, sizeof(flags));
|
||||||
memset(weapons,0,sizeof(weapons));
|
memset(weapons, 0, sizeof(weapons));
|
||||||
initialized = true;
|
initialized = true;
|
||||||
authorized = false;
|
authorized = false;
|
||||||
|
|
||||||
const char* authid = GETPLAYERAUTHID( pEdict );
|
const char* authid = GETPLAYERAUTHID(pEdict);
|
||||||
|
|
||||||
if ( (authid == 0) || (*authid == 0)
|
if ((authid == 0) || (*authid == 0) || (strcmp(authid, "STEAM_ID_PENDING") == 0))
|
||||||
|| (strcmp( authid , "STEAM_ID_PENDING") == 0) )
|
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// *****************************************************
|
// *****************************************************
|
||||||
// class Grenades
|
// class Grenades
|
||||||
// *****************************************************
|
// *****************************************************
|
||||||
void Grenades::put( edict_t* grenade, float time, int type, CPlayer* player )
|
|
||||||
|
void Grenades::put(edict_t* grenade, float time, int type, CPlayer* player)
|
||||||
{
|
{
|
||||||
Obj* a = new Obj;
|
Obj* a = new Obj;
|
||||||
if ( a == 0 ) return;
|
if (a == 0) return;
|
||||||
a->player = player;
|
a->player = player;
|
||||||
a->grenade = grenade;
|
a->grenade = grenade;
|
||||||
a->time = gpGlobals->time + time;
|
a->time = gpGlobals->time + time;
|
||||||
@ -114,34 +118,37 @@ void Grenades::put( edict_t* grenade, float time, int type, CPlayer* player )
|
|||||||
head = a;
|
head = a;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Grenades::find( edict_t* enemy, CPlayer** p, int& type )
|
bool Grenades::find(edict_t* enemy, CPlayer** p, int& type)
|
||||||
{
|
{
|
||||||
bool found = false;
|
bool found = false;
|
||||||
Obj** a = &head;
|
Obj** a = &head;
|
||||||
while ( *a ){
|
|
||||||
if ( (*a)->time > gpGlobals->time ) {
|
while (*a)
|
||||||
if ( (*a)->grenade == enemy ) {
|
{
|
||||||
|
if ((*a)->time > gpGlobals->time)
|
||||||
|
{
|
||||||
|
if ((*a)->grenade == enemy)
|
||||||
|
{
|
||||||
found = true;
|
found = true;
|
||||||
(*p) = (*a)->player;
|
(*p) = (*a)->player;
|
||||||
type = (*a)->type;
|
type = (*a)->type;
|
||||||
}
|
}
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
Obj* b = (*a)->next;
|
Obj* b = (*a)->next;
|
||||||
delete *a;
|
delete *a;
|
||||||
*a = b;
|
*a = b;
|
||||||
|
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
}
|
}
|
||||||
a = &(*a)->next;
|
a = &(*a)->next;
|
||||||
}
|
}
|
||||||
|
|
||||||
return found;
|
return found;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Grenades::clear()
|
void Grenades::clear()
|
||||||
{
|
{
|
||||||
while(head){
|
while (head)
|
||||||
|
{
|
||||||
Obj* a = head->next;
|
Obj* a = head->next;
|
||||||
delete head;
|
delete head;
|
||||||
head = a;
|
head = a;
|
||||||
@ -151,21 +158,24 @@ void Grenades::clear()
|
|||||||
// *****************************************************
|
// *****************************************************
|
||||||
// class XVars
|
// class XVars
|
||||||
// *****************************************************
|
// *****************************************************
|
||||||
void XVars::clear() {
|
|
||||||
|
void XVars::clear()
|
||||||
|
{
|
||||||
delete[] head;
|
delete[] head;
|
||||||
head = 0;
|
head = 0;
|
||||||
num = 0;
|
num = 0;
|
||||||
size = 0;
|
size = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int XVars::put( AMX* p, cell* v )
|
int XVars::put(AMX* p, cell* v)
|
||||||
{
|
{
|
||||||
for(int a = 0; a < num; ++a) {
|
for (int a = 0; a < num; ++a)
|
||||||
if ( (head[a].amx == p) && (head[a].value == v) )
|
{
|
||||||
|
if ((head[a].amx == p) && (head[a].value == v))
|
||||||
return a;
|
return a;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( (num >= size) && realloc_array( size ? (size * 2) : 8 ) )
|
if ((num >= size) && realloc_array(size ? (size * 2) : 8))
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
head[num].value = v;
|
head[num].value = v;
|
||||||
@ -173,71 +183,90 @@ int XVars::put( AMX* p, cell* v )
|
|||||||
return num++;
|
return num++;
|
||||||
}
|
}
|
||||||
|
|
||||||
int XVars::realloc_array( int nsize )
|
int XVars::realloc_array(int nsize)
|
||||||
{
|
{
|
||||||
XVarEle* me = new XVarEle[nsize];
|
XVarEle* me = new XVarEle[nsize];
|
||||||
if ( me ){
|
|
||||||
for(int a = 0 ; a < num; ++a)
|
if (me)
|
||||||
|
{
|
||||||
|
for (int a = 0 ; a < num; ++a)
|
||||||
me[a] = head[a];
|
me[a] = head[a];
|
||||||
|
|
||||||
delete[] head;
|
delete[] head;
|
||||||
head = me;
|
head = me;
|
||||||
size = nsize;
|
size = nsize;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// *****************************************************
|
// *****************************************************
|
||||||
// class TeamIds
|
// class TeamIds
|
||||||
// *****************************************************
|
// *****************************************************
|
||||||
|
|
||||||
TeamIds::TeamIds() { head = 0; newTeam = 0; }
|
TeamIds::TeamIds() { head = 0; newTeam = 0; }
|
||||||
TeamIds::~TeamIds() {
|
|
||||||
while( head ) {
|
TeamIds::~TeamIds()
|
||||||
|
{
|
||||||
|
while (head)
|
||||||
|
{
|
||||||
TeamEle* a = head->next;
|
TeamEle* a = head->next;
|
||||||
delete head;
|
delete head;
|
||||||
head = a;
|
head = a;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void TeamIds::registerTeam( const char* n ,int s )
|
void TeamIds::registerTeam(const char* n, int s)
|
||||||
{
|
{
|
||||||
TeamEle** a = &head;
|
TeamEle** a = &head;
|
||||||
while( *a ){
|
|
||||||
if ( strcmp((*a)->name.c_str(),n) == 0 ){
|
while (*a)
|
||||||
if (s != -1){
|
{
|
||||||
|
if (strcmp((*a)->name.c_str(),n) == 0)
|
||||||
|
{
|
||||||
|
if (s != -1)
|
||||||
|
{
|
||||||
(*a)->id = s;
|
(*a)->id = s;
|
||||||
newTeam &= ~(1<<(*a)->tid);
|
newTeam &= ~(1<<(*a)->tid);
|
||||||
}
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
a = &(*a)->next;
|
a = &(*a)->next;
|
||||||
}
|
}
|
||||||
*a = new TeamEle( n , s );
|
|
||||||
if ( *a == 0 ) return;
|
*a = new TeamEle(n, s);
|
||||||
|
if (*a == 0) return;
|
||||||
newTeam |= (1<<(*a)->tid);
|
newTeam |= (1<<(*a)->tid);
|
||||||
}
|
}
|
||||||
|
|
||||||
int TeamIds::findTeamId( const char* n )
|
int TeamIds::findTeamId(const char* n)
|
||||||
{
|
{
|
||||||
TeamEle* a = head;
|
TeamEle* a = head;
|
||||||
while( a ){
|
|
||||||
if ( !stricmp(a->name.c_str(),n) )
|
while (a)
|
||||||
|
{
|
||||||
|
if (!stricmp(a->name.c_str(), n))
|
||||||
return a->id;
|
return a->id;
|
||||||
a = a->next;
|
a = a->next;
|
||||||
}
|
}
|
||||||
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
int TeamIds::findTeamIdCase( const char* n)
|
int TeamIds::findTeamIdCase(const char* n)
|
||||||
{
|
{
|
||||||
TeamEle* a = head;
|
TeamEle* a = head;
|
||||||
while( a ){
|
|
||||||
if ( !strcmp(a->name.c_str(), n) )
|
while (a)
|
||||||
|
{
|
||||||
|
if (!strcmp(a->name.c_str(), n))
|
||||||
return a->id;
|
return a->id;
|
||||||
a = a->next;
|
a = a->next;
|
||||||
}
|
}
|
||||||
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
char TeamIds::TeamEle::uid = 0;
|
char TeamIds::TeamEle::uid = 0;
|
||||||
|
|
||||||
|
@ -32,7 +32,7 @@
|
|||||||
#include "amxmodx.h"
|
#include "amxmodx.h"
|
||||||
|
|
||||||
#ifndef FAR
|
#ifndef FAR
|
||||||
#define FAR
|
#define FAR
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// New
|
// New
|
||||||
@ -55,7 +55,7 @@ CModule::CModule(const char* fname)
|
|||||||
CModule::~CModule()
|
CModule::~CModule()
|
||||||
{
|
{
|
||||||
// old & new
|
// old & new
|
||||||
if ( m_Handle )
|
if (m_Handle)
|
||||||
DLFREE(m_Handle);
|
DLFREE(m_Handle);
|
||||||
|
|
||||||
clear();
|
clear();
|
||||||
@ -67,6 +67,7 @@ void CModule::clear(bool clearFilename)
|
|||||||
m_Metamod = false;
|
m_Metamod = false;
|
||||||
m_Handle = NULL;
|
m_Handle = NULL;
|
||||||
m_Status = MODULE_NONE;
|
m_Status = MODULE_NONE;
|
||||||
|
|
||||||
if (clearFilename)
|
if (clearFilename)
|
||||||
m_Filename.assign("unknown");
|
m_Filename.assign("unknown");
|
||||||
|
|
||||||
@ -114,6 +115,7 @@ bool CModule::attachModule()
|
|||||||
|
|
||||||
if (!AttachFunc_New)
|
if (!AttachFunc_New)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
g_ModuleCallReason = ModuleCall_Attach;
|
g_ModuleCallReason = ModuleCall_Attach;
|
||||||
g_CurrentlyCalledModule = this;
|
g_CurrentlyCalledModule = this;
|
||||||
int retVal = (*AttachFunc_New)(Module_ReqFnptr);
|
int retVal = (*AttachFunc_New)(Module_ReqFnptr);
|
||||||
@ -163,6 +165,7 @@ bool CModule::queryModule()
|
|||||||
|
|
||||||
// Try new interface first
|
// Try new interface first
|
||||||
QUERYMOD_NEW queryFunc_New = (QUERYMOD_NEW)DLPROC(m_Handle, "AMXX_Query");
|
QUERYMOD_NEW queryFunc_New = (QUERYMOD_NEW)DLPROC(m_Handle, "AMXX_Query");
|
||||||
|
|
||||||
if (queryFunc_New)
|
if (queryFunc_New)
|
||||||
{
|
{
|
||||||
m_Amxx = true;
|
m_Amxx = true;
|
||||||
@ -172,6 +175,7 @@ bool CModule::queryModule()
|
|||||||
int retVal = (*queryFunc_New)(&ifVers, &m_InfoNew);
|
int retVal = (*queryFunc_New)(&ifVers, &m_InfoNew);
|
||||||
g_CurrentlyCalledModule = NULL;
|
g_CurrentlyCalledModule = NULL;
|
||||||
g_ModuleCallReason = ModuleCall_NotCalled;
|
g_ModuleCallReason = ModuleCall_NotCalled;
|
||||||
|
|
||||||
switch (retVal)
|
switch (retVal)
|
||||||
{
|
{
|
||||||
case AMXX_PARAM:
|
case AMXX_PARAM:
|
||||||
@ -201,9 +205,7 @@ bool CModule::queryModule()
|
|||||||
|
|
||||||
m_Status = MODULE_QUERY;
|
m_Status = MODULE_QUERY;
|
||||||
return true;
|
return true;
|
||||||
}
|
} else {
|
||||||
else
|
|
||||||
{
|
|
||||||
m_Status = MODULE_NOQUERY;
|
m_Status = MODULE_NOQUERY;
|
||||||
m_Amxx = false;
|
m_Amxx = false;
|
||||||
return false;
|
return false;
|
||||||
@ -218,6 +220,7 @@ bool CModule::detachModule()
|
|||||||
if (m_Amxx)
|
if (m_Amxx)
|
||||||
{
|
{
|
||||||
DETACHMOD_NEW detachFunc_New = (DETACHMOD_NEW)DLPROC(m_Handle, "AMXX_Detach");
|
DETACHMOD_NEW detachFunc_New = (DETACHMOD_NEW)DLPROC(m_Handle, "AMXX_Detach");
|
||||||
|
|
||||||
if (detachFunc_New)
|
if (detachFunc_New)
|
||||||
{
|
{
|
||||||
g_ModuleCallReason = ModuleCall_Detach;
|
g_ModuleCallReason = ModuleCall_Detach;
|
||||||
@ -227,14 +230,17 @@ bool CModule::detachModule()
|
|||||||
g_ModuleCallReason = ModuleCall_NotCalled;
|
g_ModuleCallReason = ModuleCall_NotCalled;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef FAKEMETA
|
#ifndef FAKEMETA
|
||||||
if (IsMetamod())
|
if (IsMetamod())
|
||||||
{
|
{
|
||||||
UnloadMetamodPlugin(m_Handle);
|
UnloadMetamodPlugin(m_Handle);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
DLFREE(m_Handle);
|
DLFREE(m_Handle);
|
||||||
clear();
|
clear();
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -247,14 +253,16 @@ void CModule::CallPluginsLoaded()
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
PLUGINSLOADED_NEW func = (PLUGINSLOADED_NEW)DLPROC(m_Handle, "AMXX_PluginsLoaded");
|
PLUGINSLOADED_NEW func = (PLUGINSLOADED_NEW)DLPROC(m_Handle, "AMXX_PluginsLoaded");
|
||||||
|
|
||||||
if (!func)
|
if (!func)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
func();
|
func();
|
||||||
}
|
}
|
||||||
|
|
||||||
const char* CModule::getStatus() const
|
const char* CModule::getStatus() const
|
||||||
{
|
{
|
||||||
switch(m_Status)
|
switch (m_Status)
|
||||||
{
|
{
|
||||||
case MODULE_NONE: return "error";
|
case MODULE_NONE: return "error";
|
||||||
case MODULE_QUERY: return "pending";
|
case MODULE_QUERY: return "pending";
|
||||||
@ -270,5 +278,6 @@ const char* CModule::getStatus() const
|
|||||||
case MODULE_NOT64BIT: return "not 64bit";
|
case MODULE_NOT64BIT: return "not 64bit";
|
||||||
default: break;
|
default: break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return "unknown";
|
return "unknown";
|
||||||
}
|
}
|
||||||
|
@ -33,6 +33,7 @@
|
|||||||
#include "CTask.h"
|
#include "CTask.h"
|
||||||
|
|
||||||
/*********************** CTask ***********************/
|
/*********************** CTask ***********************/
|
||||||
|
|
||||||
int CTaskMngr::CTask::getTaskId() const
|
int CTaskMngr::CTask::getTaskId() const
|
||||||
{
|
{
|
||||||
return m_iId;
|
return m_iId;
|
||||||
@ -57,10 +58,13 @@ void CTaskMngr::CTask::set(CPluginMngr::CPlugin *pPlugin, int iFunc, int iFlags,
|
|||||||
{
|
{
|
||||||
m_bLoop = true;
|
m_bLoop = true;
|
||||||
m_iRepeat = -1;
|
m_iRepeat = -1;
|
||||||
} else if (iFlags & 1) {
|
}
|
||||||
|
else if (iFlags & 1)
|
||||||
|
{
|
||||||
m_bLoop = true;
|
m_bLoop = true;
|
||||||
m_iRepeat = iRepeat;
|
m_iRepeat = iRepeat;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_bAfterStart = (iFlags & 4) ? true : false;
|
m_bAfterStart = (iFlags & 4) ? true : false;
|
||||||
m_bBeforeEnd = (iFlags & 8) ? true : false;
|
m_bBeforeEnd = (iFlags & 8) ? true : false;
|
||||||
|
|
||||||
@ -123,8 +127,9 @@ void CTaskMngr::CTask::resetNextExecTime(float fCurrentTime)
|
|||||||
|
|
||||||
void CTaskMngr::CTask::executeIfRequired(float fCurrentTime, float fTimeLimit, float fTimeLeft)
|
void CTaskMngr::CTask::executeIfRequired(float fCurrentTime, float fTimeLimit, float fTimeLeft)
|
||||||
{
|
{
|
||||||
bool execute=false;
|
bool execute = false;
|
||||||
bool done=false;
|
bool done = false;
|
||||||
|
|
||||||
if (m_bAfterStart)
|
if (m_bAfterStart)
|
||||||
{
|
{
|
||||||
if (fCurrentTime - fTimeLeft + 1.0f >= m_fBase)
|
if (fCurrentTime - fTimeLeft + 1.0f >= m_fBase)
|
||||||
@ -134,14 +139,16 @@ void CTaskMngr::CTask::executeIfRequired(float fCurrentTime, float fTimeLimit, f
|
|||||||
{
|
{
|
||||||
if (fTimeLimit != 0.0f && (fTimeLeft + fTimeLimit * 60.0f) - fCurrentTime - 1.0f <= m_fBase)
|
if (fTimeLimit != 0.0f && (fTimeLeft + fTimeLimit * 60.0f) - fCurrentTime - 1.0f <= m_fBase)
|
||||||
execute = true;
|
execute = true;
|
||||||
} else if (m_fNextExecTime <= fCurrentTime) {
|
}
|
||||||
|
else if (m_fNextExecTime <= fCurrentTime)
|
||||||
|
{
|
||||||
execute = true;
|
execute = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (execute)
|
if (execute)
|
||||||
{
|
{
|
||||||
//only bother calling if we have something to call
|
//only bother calling if we have something to call
|
||||||
if ( !(m_bLoop && !m_iRepeat) )
|
if (!(m_bLoop && !m_iRepeat))
|
||||||
{
|
{
|
||||||
if (m_iParamLen) // call with parameters
|
if (m_iParamLen) // call with parameters
|
||||||
{
|
{
|
||||||
@ -199,6 +206,7 @@ CTaskMngr::CTask::~CTask()
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*********************** CTaskMngr ***********************/
|
/*********************** CTaskMngr ***********************/
|
||||||
|
|
||||||
CTaskMngr::CTaskMngr()
|
CTaskMngr::CTaskMngr()
|
||||||
{
|
{
|
||||||
m_pTmr_CurrentTime = NULL;
|
m_pTmr_CurrentTime = NULL;
|
||||||
@ -222,17 +230,18 @@ void CTaskMngr::registerTask(CPluginMngr::CPlugin *pPlugin, int iFunc, int iFlag
|
|||||||
{
|
{
|
||||||
// first, search for free tasks
|
// first, search for free tasks
|
||||||
TaskListIter iter = m_Tasks.find(CTaskDescriptor(0, NULL, true));
|
TaskListIter iter = m_Tasks.find(CTaskDescriptor(0, NULL, true));
|
||||||
|
|
||||||
if (iter)
|
if (iter)
|
||||||
{
|
{
|
||||||
// found: reuse it
|
// found: reuse it
|
||||||
iter->set(pPlugin, iFunc, iFlags, iId, fBase, iParamsLen, pParams, iRepeat, *m_pTmr_CurrentTime);
|
iter->set(pPlugin, iFunc, iFlags, iId, fBase, iParamsLen, pParams, iRepeat, *m_pTmr_CurrentTime);
|
||||||
}
|
} else {
|
||||||
else
|
|
||||||
{
|
|
||||||
// not found: make a new one
|
// not found: make a new one
|
||||||
CTask *pTmp = new CTask;
|
CTask *pTmp = new CTask;
|
||||||
|
|
||||||
if (!pTmp)
|
if (!pTmp)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
pTmp->set(pPlugin, iFunc, iFlags, iId, fBase, iParamsLen, pParams, iRepeat, *m_pTmr_CurrentTime);
|
pTmp->set(pPlugin, iFunc, iFlags, iId, fBase, iParamsLen, pParams, iRepeat, *m_pTmr_CurrentTime);
|
||||||
m_Tasks.put(pTmp);
|
m_Tasks.put(pTmp);
|
||||||
}
|
}
|
||||||
@ -242,13 +251,15 @@ int CTaskMngr::removeTasks(int iId, AMX *pAmx)
|
|||||||
{
|
{
|
||||||
CTaskDescriptor descriptor(iId, pAmx);
|
CTaskDescriptor descriptor(iId, pAmx);
|
||||||
TaskListIter iter = m_Tasks.find(descriptor);
|
TaskListIter iter = m_Tasks.find(descriptor);
|
||||||
int i=0;
|
int i = 0;
|
||||||
|
|
||||||
while (iter)
|
while (iter)
|
||||||
{
|
{
|
||||||
iter->clear();
|
iter->clear();
|
||||||
++i;
|
++i;
|
||||||
iter = m_Tasks.find(++iter, descriptor);
|
iter = m_Tasks.find(++iter, descriptor);
|
||||||
}
|
}
|
||||||
|
|
||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -256,7 +267,8 @@ int CTaskMngr::changeTasks(int iId, AMX *pAmx, float fNewBase)
|
|||||||
{
|
{
|
||||||
CTaskDescriptor descriptor(iId, pAmx);
|
CTaskDescriptor descriptor(iId, pAmx);
|
||||||
TaskListIter iter = m_Tasks.find(descriptor);
|
TaskListIter iter = m_Tasks.find(descriptor);
|
||||||
int i=0;
|
int i = 0;
|
||||||
|
|
||||||
while (iter)
|
while (iter)
|
||||||
{
|
{
|
||||||
iter->changeBase(fNewBase);
|
iter->changeBase(fNewBase);
|
||||||
@ -264,6 +276,7 @@ int CTaskMngr::changeTasks(int iId, AMX *pAmx, float fNewBase)
|
|||||||
++i;
|
++i;
|
||||||
iter = m_Tasks.find(++iter, descriptor);
|
iter = m_Tasks.find(++iter, descriptor);
|
||||||
}
|
}
|
||||||
|
|
||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -39,46 +39,47 @@
|
|||||||
// *****************************************************
|
// *****************************************************
|
||||||
// class Vault
|
// class Vault
|
||||||
// *****************************************************
|
// *****************************************************
|
||||||
bool Vault::exists( const char* k )
|
|
||||||
{
|
|
||||||
if ( *k == 0 ) return false;
|
|
||||||
|
|
||||||
return *find( k ) != 0;
|
bool Vault::exists(const char* k)
|
||||||
|
{
|
||||||
|
if (*k == 0) return false;
|
||||||
|
|
||||||
|
return *find(k) != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Vault::put( const char* k, const char* v )
|
void Vault::put(const char* k, const char* v)
|
||||||
{
|
{
|
||||||
if ( *k == 0 ) return;
|
if (*k == 0) return;
|
||||||
|
|
||||||
if ( *v == 0 )
|
if (*v == 0)
|
||||||
{
|
{
|
||||||
remove( k );
|
remove(k);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Obj** a = find( k );
|
Obj** a = find(k);
|
||||||
|
|
||||||
if ( *a )
|
if (*a)
|
||||||
{
|
{
|
||||||
(*a)->value.assign(v);
|
(*a)->value.assign(v);
|
||||||
(*a)->number = atoi( v );
|
(*a)->number = atoi(v);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
*a = new Obj( k , v );
|
*a = new Obj(k, v);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Vault::Obj::Obj( const char* k, const char* v): key(k) , value(v) , next(0) {
|
Vault::Obj::Obj(const char* k, const char* v): key(k), value(v), next(0)
|
||||||
|
{
|
||||||
number = atoi(v);
|
number = atoi(v);
|
||||||
}
|
}
|
||||||
|
|
||||||
Vault::Obj** Vault::find( const char* n )
|
Vault::Obj** Vault::find(const char* n)
|
||||||
{
|
{
|
||||||
Obj** a = &head;
|
Obj** a = &head;
|
||||||
|
|
||||||
while( *a )
|
while (*a)
|
||||||
{
|
{
|
||||||
if ( strcmp((*a)->key.c_str(), n) == 0 )
|
if (strcmp((*a)->key.c_str(), n) == 0)
|
||||||
return a;
|
return a;
|
||||||
|
|
||||||
a = &(*a)->next;
|
a = &(*a)->next;
|
||||||
@ -88,31 +89,31 @@ Vault::Obj** Vault::find( const char* n )
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int Vault::get_number( const char* n )
|
int Vault::get_number(const char* n)
|
||||||
{
|
{
|
||||||
if ( *n == 0 ) return 0;
|
if (*n == 0) return 0;
|
||||||
|
|
||||||
Obj* b = *find( n );
|
Obj* b = *find(n);
|
||||||
|
|
||||||
if ( b == 0 ) return 0;
|
if (b == 0) return 0;
|
||||||
|
|
||||||
return b->number;
|
return b->number;
|
||||||
}
|
}
|
||||||
|
|
||||||
const char* Vault::get( const char* n )
|
const char* Vault::get(const char* n)
|
||||||
{
|
{
|
||||||
if ( *n == 0 ) return "";
|
if (*n == 0) return "";
|
||||||
|
|
||||||
Obj* b = *find( n );
|
Obj* b = *find(n);
|
||||||
|
|
||||||
if ( b == 0 ) return "";
|
if (b == 0) return "";
|
||||||
|
|
||||||
return b->value.c_str();
|
return b->value.c_str();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Vault::clear()
|
void Vault::clear()
|
||||||
{
|
{
|
||||||
while ( head )
|
while (head)
|
||||||
{
|
{
|
||||||
Obj* a = head->next;
|
Obj* a = head->next;
|
||||||
delete head;
|
delete head;
|
||||||
@ -120,58 +121,57 @@ void Vault::clear()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Vault::remove( const char* n )
|
void Vault::remove(const char* n)
|
||||||
{
|
{
|
||||||
Obj** b = find( n );
|
Obj** b = find(n);
|
||||||
|
|
||||||
if ( *b == 0 ) return;
|
if (*b == 0) return;
|
||||||
|
|
||||||
Obj* a = (*b)->next;
|
Obj* a = (*b)->next;
|
||||||
delete *b;
|
delete *b;
|
||||||
*b = a;
|
*b = a;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Vault::setSource( const char* n )
|
void Vault::setSource(const char* n)
|
||||||
{
|
{
|
||||||
path.assign(n);
|
path.assign(n);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool Vault::loadVault()
|
||||||
bool Vault::loadVault( )
|
|
||||||
{
|
{
|
||||||
if ( path.empty() ) return false;
|
if (path.empty()) return false;
|
||||||
|
|
||||||
clear();
|
clear();
|
||||||
|
|
||||||
File a( path.c_str() , "r" );
|
File a(path.c_str(), "r");
|
||||||
|
|
||||||
if ( !a ) return false;
|
if (!a) return false;
|
||||||
|
|
||||||
const int sz = 512;
|
const int sz = 512;
|
||||||
char value[sz+1];
|
char value[sz + 1];
|
||||||
char key[sz+1];
|
char key[sz + 1];
|
||||||
|
|
||||||
while ( a >> key && a.skipWs() && a.getline( value , sz ) )
|
while (a >> key && a.skipWs() && a.getline(value, sz))
|
||||||
{
|
{
|
||||||
if ( isalpha ( *key ) )
|
if (isalpha(*key))
|
||||||
put( key, value );
|
put(key, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Vault::saveVault( )
|
bool Vault::saveVault()
|
||||||
{
|
{
|
||||||
if ( path.empty() ) return false;
|
if (path.empty()) return false;
|
||||||
|
|
||||||
File a( path.c_str() , "w" );
|
File a(path.c_str(), "w");
|
||||||
|
|
||||||
if ( !a ) return false;
|
if (!a) return false;
|
||||||
|
|
||||||
a << "; Don't modify!" << '\n';
|
a << "; Don't modify!" << '\n';
|
||||||
|
|
||||||
for (Obj* b = head; b ;b = b->next)
|
for (Obj* b = head; b; b = b->next)
|
||||||
a << b->key << '\t' << b->value << '\n';
|
a << b->key << '\t' << b->value << '\n';
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -105,7 +105,8 @@ CAmxxReader::CAmxxReader(const char *filename, int cellsize)
|
|||||||
m_pFile = NULL;
|
m_pFile = NULL;
|
||||||
|
|
||||||
return;
|
return;
|
||||||
} else if (magic == MAGIC_HEADER2)
|
}
|
||||||
|
else if (magic == MAGIC_HEADER2)
|
||||||
{
|
{
|
||||||
DATAREAD(&m_Bh.version, sizeof(int16_t), 1);
|
DATAREAD(&m_Bh.version, sizeof(int16_t), 1);
|
||||||
|
|
||||||
@ -155,7 +156,8 @@ CAmxxReader::CAmxxReader(const char *filename, int cellsize)
|
|||||||
|
|
||||||
pe = &(m_Bh.plugins[m_Entry]);
|
pe = &(m_Bh.plugins[m_Entry]);
|
||||||
m_SectionLength = pe->disksize;
|
m_SectionLength = pe->disksize;
|
||||||
} else if (magic == MAGIC_HEADER)
|
}
|
||||||
|
else if (magic == MAGIC_HEADER)
|
||||||
{
|
{
|
||||||
// try to find the section
|
// try to find the section
|
||||||
mint8_t numOfPlugins;
|
mint8_t numOfPlugins;
|
||||||
@ -185,7 +187,7 @@ CAmxxReader::CAmxxReader(const char *filename, int cellsize)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// compute section length
|
// compute section length
|
||||||
if ((i+1) < static_cast<int>(numOfPlugins))
|
if ((i + 1) < static_cast<int>(numOfPlugins))
|
||||||
{
|
{
|
||||||
// there is a next section
|
// there is a next section
|
||||||
TableEntry nextEntry;
|
TableEntry nextEntry;
|
||||||
@ -274,7 +276,8 @@ size_t CAmxxReader::GetBufferSize()
|
|||||||
DATAREAD(&hdr, sizeof(hdr), 1);
|
DATAREAD(&hdr, sizeof(hdr), 1);
|
||||||
fseek(m_pFile, save, SEEK_SET);
|
fseek(m_pFile, save, SEEK_SET);
|
||||||
return hdr.stp;
|
return hdr.stp;
|
||||||
} else if (m_AmxxFile)
|
}
|
||||||
|
else if (m_AmxxFile)
|
||||||
{
|
{
|
||||||
PluginEntry *pe = &(m_Bh.plugins[m_Entry]);
|
PluginEntry *pe = &(m_Bh.plugins[m_Entry]);
|
||||||
|
|
||||||
@ -321,7 +324,8 @@ CAmxxReader::Error CAmxxReader::GetSection(void *buffer)
|
|||||||
m_Status = Err_None;
|
m_Status = Err_None;
|
||||||
|
|
||||||
return m_Status;
|
return m_Status;
|
||||||
} else if (m_AmxxFile)
|
}
|
||||||
|
else if (m_AmxxFile)
|
||||||
{
|
{
|
||||||
PluginEntry *pe = &(m_Bh.plugins[m_Entry]);
|
PluginEntry *pe = &(m_Bh.plugins[m_Entry]);
|
||||||
char *tempBuffer = new char[m_SectionLength + 1];
|
char *tempBuffer = new char[m_SectionLength + 1];
|
||||||
|
159
amxmodx/emsg.cpp
159
amxmodx/emsg.cpp
@ -58,7 +58,9 @@ WeaponsVault g_weaponsData[MAX_WEAPONS];
|
|||||||
void Client_VGUIMenu(void* mValue)
|
void Client_VGUIMenu(void* mValue)
|
||||||
{
|
{
|
||||||
if (!mPlayer) return;
|
if (!mPlayer) return;
|
||||||
switch (mState++){
|
|
||||||
|
switch (mState++)
|
||||||
|
{
|
||||||
case 0:
|
case 0:
|
||||||
mPlayer->menu = -(*(int*)mValue);
|
mPlayer->menu = -(*(int*)mValue);
|
||||||
break;
|
break;
|
||||||
@ -70,12 +72,14 @@ void Client_VGUIMenu(void* mValue)
|
|||||||
void Client_ShowMenu(void* mValue)
|
void Client_ShowMenu(void* mValue)
|
||||||
{
|
{
|
||||||
if (!mPlayer) return;
|
if (!mPlayer) return;
|
||||||
switch (mState++){
|
|
||||||
|
switch (mState++)
|
||||||
|
{
|
||||||
case 0:
|
case 0:
|
||||||
mPlayer->keys = *(int*)mValue;
|
mPlayer->keys = *(int*)mValue;
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
mPlayer->menu = g_menucmds.findMenuId( (char*)mValue );
|
mPlayer->menu = g_menucmds.findMenuId((char*)mValue);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -83,59 +87,74 @@ void Client_TeamInfo(void* mValue)
|
|||||||
{
|
{
|
||||||
if (mPlayer) return;
|
if (mPlayer) return;
|
||||||
static int index;
|
static int index;
|
||||||
switch (mState++) {
|
|
||||||
|
switch (mState++)
|
||||||
|
{
|
||||||
case 0:
|
case 0:
|
||||||
index = *(int*)mValue;
|
index = *(int*)mValue;
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
if ( index < 1 || index > gpGlobals->maxClients ) break;
|
if (index < 1 || index > gpGlobals->maxClients) break;
|
||||||
char* msg = (char*)mValue;
|
char* msg = (char*)mValue;
|
||||||
g_players[ index ].team.assign( msg );
|
g_players[index].team.assign(msg);
|
||||||
g_teamsIds.registerTeam( msg , -1 );
|
g_teamsIds.registerTeam(msg, -1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Client_TextMsg(void* mValue)
|
void Client_TextMsg(void* mValue)
|
||||||
{
|
{
|
||||||
if ( mPlayer ) return;
|
if (mPlayer) return;
|
||||||
switch (mState++) {
|
|
||||||
case 1:{
|
switch (mState++)
|
||||||
|
{
|
||||||
|
case 1:
|
||||||
|
{
|
||||||
char * msg = (char*)mValue;
|
char * msg = (char*)mValue;
|
||||||
if (!msg) break;
|
if (!msg) break;
|
||||||
if ( !strncmp("#Game_C", msg , 7) ) {
|
|
||||||
|
if (!strncmp("#Game_C", msg, 7))
|
||||||
|
{
|
||||||
g_game_timeleft = g_game_restarting = gpGlobals->time + 3;
|
g_game_timeleft = g_game_restarting = gpGlobals->time + 3;
|
||||||
// g_endround_time = gpGlobals->time;
|
//g_endround_time = gpGlobals->time;
|
||||||
// g_newround_time = gpGlobals->time + CVAR_GET_FLOAT("mp_freezetime") + 3;
|
//g_newround_time = gpGlobals->time + CVAR_GET_FLOAT("mp_freezetime") + 3;
|
||||||
}
|
}
|
||||||
else if (!strncmp("#Game_w", msg , 7) ) {
|
else if (!strncmp("#Game_w", msg, 7))
|
||||||
|
{
|
||||||
g_game_timeleft = -2;
|
g_game_timeleft = -2;
|
||||||
}
|
}
|
||||||
else if ( !strncmp("#game_clan_s", msg , 12) ){
|
else if (!strncmp("#game_clan_s", msg, 12))
|
||||||
|
{
|
||||||
g_game_timeleft = -3;
|
g_game_timeleft = -3;
|
||||||
}
|
}
|
||||||
break;
|
|
||||||
}
|
|
||||||
case 2:{
|
|
||||||
char * msg = (char*)mValue;
|
|
||||||
if (!msg) break;
|
|
||||||
if (g_game_timeleft == -2 ){
|
|
||||||
g_game_timeleft = g_game_restarting = gpGlobals->time + atoi( msg );
|
|
||||||
// g_newround_time = g_game_timeleft + CVAR_GET_FLOAT("mp_freezetime");
|
|
||||||
}
|
|
||||||
else if ( g_game_timeleft == -3 )
|
|
||||||
g_game_restarting = atoi( msg ) * 60.0f;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case 3:{
|
|
||||||
char * msg = (char*)mValue;
|
|
||||||
if (!msg) break;
|
|
||||||
if ( g_game_timeleft != -3 ) break;
|
|
||||||
g_game_restarting += atoi( msg );
|
|
||||||
g_game_timeleft = g_game_restarting = gpGlobals->time + g_game_restarting;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 2:
|
||||||
|
{
|
||||||
|
char * msg = (char*)mValue;
|
||||||
|
if (!msg) break;
|
||||||
|
|
||||||
|
if (g_game_timeleft == -2)
|
||||||
|
{
|
||||||
|
g_game_timeleft = g_game_restarting = gpGlobals->time + atoi(msg);
|
||||||
|
//g_newround_time = g_game_timeleft + CVAR_GET_FLOAT("mp_freezetime");
|
||||||
|
}
|
||||||
|
else if (g_game_timeleft == -3)
|
||||||
|
g_game_restarting = atoi(msg) * 60.0f;
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 3:
|
||||||
|
{
|
||||||
|
char * msg = (char*)mValue;
|
||||||
|
if (!msg) break;
|
||||||
|
if (g_game_timeleft != -3) break;
|
||||||
|
g_game_restarting += atoi(msg);
|
||||||
|
g_game_timeleft = g_game_restarting = gpGlobals->time + g_game_restarting;
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Client_WeaponList(void* mValue)
|
void Client_WeaponList(void* mValue)
|
||||||
@ -144,7 +163,9 @@ void Client_WeaponList(void* mValue)
|
|||||||
//static int wpnList2;
|
//static int wpnList2;
|
||||||
static int iSlot;
|
static int iSlot;
|
||||||
static const char* wpnName;
|
static const char* wpnName;
|
||||||
switch (mState++) {
|
|
||||||
|
switch (mState++)
|
||||||
|
{
|
||||||
case 0:
|
case 0:
|
||||||
wpnName = (char*)mValue;
|
wpnName = (char*)mValue;
|
||||||
break;
|
break;
|
||||||
@ -153,13 +174,12 @@ void Client_WeaponList(void* mValue)
|
|||||||
break;
|
break;
|
||||||
case 7:
|
case 7:
|
||||||
int iId = *(int*)mValue;
|
int iId = *(int*)mValue;
|
||||||
if ( (iId < 0 || iId >= MAX_WEAPONS ) || (wpnList & (1<<iId)) )
|
if ((iId < 0 || iId >= MAX_WEAPONS) || (wpnList & (1<<iId)))
|
||||||
break;
|
break;
|
||||||
wpnList |= (1<<iId);
|
wpnList |= (1<<iId);
|
||||||
g_weaponsData[iId].iId = iId;
|
g_weaponsData[iId].iId = iId;
|
||||||
g_weaponsData[iId].ammoSlot = iSlot;
|
g_weaponsData[iId].ammoSlot = iSlot;
|
||||||
g_weaponsData[iId].fullName.assign(wpnName);
|
g_weaponsData[iId].fullName.assign(wpnName);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -167,7 +187,9 @@ void Client_CurWeapon(void* mValue)
|
|||||||
{
|
{
|
||||||
static int iState;
|
static int iState;
|
||||||
static int iId;
|
static int iId;
|
||||||
switch (mState++){
|
|
||||||
|
switch (mState++)
|
||||||
|
{
|
||||||
case 0:
|
case 0:
|
||||||
iState = *(int*)mValue;
|
iState = *(int*)mValue;
|
||||||
break;
|
break;
|
||||||
@ -177,7 +199,7 @@ void Client_CurWeapon(void* mValue)
|
|||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
if (!mPlayer) return;
|
if (!mPlayer) return;
|
||||||
if (!iState || (iId < 1 || iId >= MAX_WEAPONS ) ) break;
|
if (!iState || (iId < 1 || iId >= MAX_WEAPONS)) break;
|
||||||
mPlayer->weapons[iId].clip = *(int*)mValue;
|
mPlayer->weapons[iId].clip = *(int*)mValue;
|
||||||
mPlayer->current = iId;
|
mPlayer->current = iId;
|
||||||
mPlayer->lastHit = mPlayer->lastTrace;
|
mPlayer->lastHit = mPlayer->lastTrace;
|
||||||
@ -186,15 +208,16 @@ void Client_CurWeapon(void* mValue)
|
|||||||
|
|
||||||
void Client_AmmoX(void* mValue)
|
void Client_AmmoX(void* mValue)
|
||||||
{
|
{
|
||||||
|
|
||||||
static int iAmmo;
|
static int iAmmo;
|
||||||
switch (mState++){
|
|
||||||
|
switch (mState++)
|
||||||
|
{
|
||||||
case 0:
|
case 0:
|
||||||
iAmmo = *(int*)mValue;
|
iAmmo = *(int*)mValue;
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
if (!mPlayer) return;
|
if (!mPlayer) return;
|
||||||
for(int i=1;i<MAX_WEAPONS;++i)
|
for (int i = 1; i < MAX_WEAPONS; ++i)
|
||||||
if (iAmmo == g_weaponsData[i].ammoSlot)
|
if (iAmmo == g_weaponsData[i].ammoSlot)
|
||||||
mPlayer->weapons[i].ammo = *(int*)mValue;
|
mPlayer->weapons[i].ammo = *(int*)mValue;
|
||||||
}
|
}
|
||||||
@ -203,13 +226,15 @@ void Client_AmmoX(void* mValue)
|
|||||||
void Client_AmmoPickup(void* mValue)
|
void Client_AmmoPickup(void* mValue)
|
||||||
{
|
{
|
||||||
static int iSlot;
|
static int iSlot;
|
||||||
switch (mState++){
|
|
||||||
|
switch (mState++)
|
||||||
|
{
|
||||||
case 0:
|
case 0:
|
||||||
iSlot = *(int*)mValue;
|
iSlot = *(int*)mValue;
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
if (!mPlayer) return;
|
if (!mPlayer) return;
|
||||||
for(int i=1;i<MAX_WEAPONS;++i)
|
for (int i = 1; i < MAX_WEAPONS; ++i)
|
||||||
if (g_weaponsData[i].ammoSlot==iSlot)
|
if (g_weaponsData[i].ammoSlot==iSlot)
|
||||||
mPlayer->weapons[i].ammo += *(int*)mValue;
|
mPlayer->weapons[i].ammo += *(int*)mValue;
|
||||||
}
|
}
|
||||||
@ -219,7 +244,9 @@ void Client_ScoreInfo(void* mValue)
|
|||||||
{
|
{
|
||||||
static int index;
|
static int index;
|
||||||
static int deaths;
|
static int deaths;
|
||||||
switch (mState++){
|
|
||||||
|
switch (mState++)
|
||||||
|
{
|
||||||
case 0:
|
case 0:
|
||||||
index = *(int*)mValue;
|
index = *(int*)mValue;
|
||||||
break;
|
break;
|
||||||
@ -227,12 +254,12 @@ void Client_ScoreInfo(void* mValue)
|
|||||||
deaths = *(int*)mValue;
|
deaths = *(int*)mValue;
|
||||||
break;
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
if ( index < 1 || index > gpGlobals->maxClients ) break;
|
if (index < 1 || index > gpGlobals->maxClients) break;
|
||||||
CPlayer*pPlayer = GET_PLAYER_POINTER_I( index );
|
CPlayer*pPlayer = GET_PLAYER_POINTER_I(index);
|
||||||
pPlayer->deaths = deaths;
|
pPlayer->deaths = deaths;
|
||||||
pPlayer->teamId = *(int*)mValue;
|
pPlayer->teamId = *(int*)mValue;
|
||||||
if ( g_teamsIds.isNewTeam() )
|
if (g_teamsIds.isNewTeam())
|
||||||
g_teamsIds.registerTeam( pPlayer->team.c_str() , pPlayer->teamId );
|
g_teamsIds.registerTeam(pPlayer->team.c_str(), pPlayer->teamId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -240,14 +267,14 @@ void Client_DamageEnd(void* mValue)
|
|||||||
{
|
{
|
||||||
CPlayer* dead = mPlayer;
|
CPlayer* dead = mPlayer;
|
||||||
|
|
||||||
if ( dead && dead->death_killer )
|
if (dead && dead->death_killer)
|
||||||
{
|
{
|
||||||
g_events.parserInit( CS_DEATHMSG , &gpGlobals->time , mPlayer = 0, mPlayerIndex = 0 );
|
g_events.parserInit(CS_DEATHMSG, &gpGlobals->time, mPlayer = 0, mPlayerIndex = 0);
|
||||||
g_events.parseValue( dead->death_killer );
|
g_events.parseValue(dead->death_killer);
|
||||||
g_events.parseValue( dead->index );
|
g_events.parseValue(dead->index);
|
||||||
g_events.parseValue( dead->death_headshot );
|
g_events.parseValue(dead->death_headshot);
|
||||||
g_events.parseValue( dead->death_weapon.c_str() );
|
g_events.parseValue(dead->death_weapon.c_str());
|
||||||
g_events.parseValue( dead->death_tk ? 1 : 0 );
|
g_events.parseValue(dead->death_tk ? 1 : 0);
|
||||||
g_events.executeEvents();
|
g_events.executeEvents();
|
||||||
dead->death_killer = 0;
|
dead->death_killer = 0;
|
||||||
}
|
}
|
||||||
@ -261,24 +288,21 @@ void Client_DeathMsg(void* mValue)
|
|||||||
static int victim_id;
|
static int victim_id;
|
||||||
static int hs;
|
static int hs;
|
||||||
|
|
||||||
switch (mState++){
|
switch (mState++)
|
||||||
|
{
|
||||||
case 0:
|
case 0:
|
||||||
killer_id = *(int*)mValue;
|
killer_id = *(int*)mValue;
|
||||||
killer = (killer_id > 0 && killer_id < 33) ?
|
killer = (killer_id > 0 && killer_id < 33) ? GET_PLAYER_POINTER_I(killer_id) : 0;
|
||||||
GET_PLAYER_POINTER_I(killer_id) : 0;
|
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
victim_id = *(int*)mValue;
|
victim_id = *(int*)mValue;
|
||||||
victim = (victim_id > 0 && victim_id < 33) ?
|
victim = (victim_id > 0 && victim_id < 33) ? GET_PLAYER_POINTER_I(victim_id) : 0;
|
||||||
GET_PLAYER_POINTER_I(victim_id) : 0;
|
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
hs = *(int*)mValue;
|
hs = *(int*)mValue;
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
|
if (!killer || !victim) break;
|
||||||
if ( !killer || !victim ) break;
|
|
||||||
|
|
||||||
victim->death_killer = killer_id;
|
victim->death_killer = killer_id;
|
||||||
victim->death_weapon.assign((char*)mValue);
|
victim->death_weapon.assign((char*)mValue);
|
||||||
victim->death_headshot = hs;
|
victim->death_headshot = hs;
|
||||||
@ -313,4 +337,3 @@ void Client_ResetHUD(void* mValue)
|
|||||||
|
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
398
amxmodx/file.cpp
398
amxmodx/file.cpp
@ -5,7 +5,7 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify it
|
* This program is free software; you can redistribute it and/or modify it
|
||||||
* under the terms of the GNU General Public License as published by the
|
* under the terms of the GNU General Publicç License as published by the
|
||||||
* Free Software Foundation; either version 2 of the License, or (at
|
* Free Software Foundation; either version 2 of the License, or (at
|
||||||
* your option) any later version.
|
* your option) any later version.
|
||||||
*
|
*
|
||||||
@ -63,11 +63,13 @@ class AutoFilePtr
|
|||||||
public:
|
public:
|
||||||
AutoFilePtr(FILE *fp) : m_FP(fp)
|
AutoFilePtr(FILE *fp) : m_FP(fp)
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
~AutoFilePtr()
|
~AutoFilePtr()
|
||||||
{
|
{
|
||||||
if (m_FP)
|
if (m_FP)
|
||||||
fclose(m_FP);
|
fclose(m_FP);
|
||||||
}
|
}
|
||||||
|
|
||||||
operator FILE* ()
|
operator FILE* ()
|
||||||
{
|
{
|
||||||
return m_FP;
|
return m_FP;
|
||||||
@ -80,20 +82,25 @@ static cell AMX_NATIVE_CALL read_dir(AMX *amx, cell *params)
|
|||||||
int a;
|
int a;
|
||||||
struct dirent *ep;
|
struct dirent *ep;
|
||||||
DIR *dp;
|
DIR *dp;
|
||||||
char* dirname = build_pathname("%s",get_amxstring(amx,params[1],0,a) );
|
char* dirname = build_pathname("%s", get_amxstring(amx, params[1], 0, a));
|
||||||
a = params[2];
|
a = params[2];
|
||||||
if ( (dp = opendir (dirname)) == NULL )
|
|
||||||
|
if ((dp = opendir (dirname)) == NULL)
|
||||||
return 0;
|
return 0;
|
||||||
seekdir( dp , a );
|
seekdir(dp, a);
|
||||||
if ( (ep = readdir (dp)) != NULL ) {
|
|
||||||
cell *length = get_amxaddr(amx,params[5]);
|
if ((ep = readdir (dp)) != NULL)
|
||||||
*length = set_amxstring(amx,params[3], ep->d_name ,params[4]);
|
{
|
||||||
a = telldir( dp );
|
cell *length = get_amxaddr(amx, params[5]);
|
||||||
}
|
*length = set_amxstring(amx, params[3], ep->d_name, params[4]);
|
||||||
else
|
a = telldir(dp);
|
||||||
|
} else
|
||||||
a = 0;
|
a = 0;
|
||||||
|
|
||||||
closedir (dp);
|
closedir (dp);
|
||||||
|
|
||||||
return a;
|
return a;
|
||||||
|
|
||||||
#else
|
#else
|
||||||
int tmp;
|
int tmp;
|
||||||
char *dirname = build_pathname("%s/*", get_amxstring(amx, params[1], 0, tmp));
|
char *dirname = build_pathname("%s/*", get_amxstring(amx, params[1], 0, tmp));
|
||||||
@ -101,10 +108,12 @@ static cell AMX_NATIVE_CALL read_dir(AMX *amx, cell *params)
|
|||||||
|
|
||||||
_finddata_t fd;
|
_finddata_t fd;
|
||||||
intptr_t handle = _findfirst(dirname, &fd);
|
intptr_t handle = _findfirst(dirname, &fd);
|
||||||
|
|
||||||
if (handle < 0)
|
if (handle < 0)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
++tmp;
|
++tmp;
|
||||||
|
|
||||||
for (int i = 0; i < tmp; ++i)
|
for (int i = 0; i < tmp; ++i)
|
||||||
{
|
{
|
||||||
if (_findnext(handle, &fd) < 0)
|
if (_findnext(handle, &fd) < 0)
|
||||||
@ -113,8 +122,9 @@ static cell AMX_NATIVE_CALL read_dir(AMX *amx, cell *params)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// current data in fd
|
// current data in fd
|
||||||
cell *length = get_amxaddr(amx,params[5]); // pointer to the outLen parameter
|
cell *length = get_amxaddr(amx, params[5]); // pointer to the outLen parameter
|
||||||
*length = set_amxstring(amx, params[3], fd.name, params[4]); // set output and outLen parameters
|
*length = set_amxstring(amx, params[3], fd.name, params[4]); // set output and outLen parameters
|
||||||
_findclose(handle);
|
_findclose(handle);
|
||||||
|
|
||||||
@ -125,60 +135,74 @@ static cell AMX_NATIVE_CALL read_dir(AMX *amx, cell *params)
|
|||||||
static cell AMX_NATIVE_CALL read_file(AMX *amx, cell *params) /* 5 param */
|
static cell AMX_NATIVE_CALL read_file(AMX *amx, cell *params) /* 5 param */
|
||||||
{
|
{
|
||||||
int iLen;
|
int iLen;
|
||||||
char* szFile = get_amxstring(amx,params[1],0,iLen);
|
char* szFile = get_amxstring(amx, params[1], 0, iLen);
|
||||||
FILE*fp;
|
FILE *fp;
|
||||||
if ( (fp =fopen(build_pathname("%s",szFile),"r")) == NULL) {
|
|
||||||
amx_RaiseError(amx,AMX_ERR_NATIVE);
|
if ((fp =fopen(build_pathname("%s", szFile), "r")) == NULL)
|
||||||
|
{
|
||||||
|
amx_RaiseError(amx, AMX_ERR_NATIVE);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
char buffor[1024];
|
char buffor[1024];
|
||||||
int i = 0, iLine = params[2];
|
int i = 0, iLine = params[2];
|
||||||
while((i <= iLine) && fgets(buffor,1023,fp) )
|
|
||||||
|
while ((i <= iLine) && fgets(buffor, 1023, fp))
|
||||||
i++;
|
i++;
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
if (i > iLine){
|
|
||||||
|
if (i > iLine)
|
||||||
|
{
|
||||||
int len = strlen(buffor);
|
int len = strlen(buffor);
|
||||||
if (buffor[len-1]=='\n')
|
if (buffor[len - 1] == '\n')
|
||||||
buffor[--len]=0;
|
buffor[--len] = 0;
|
||||||
if (buffor[len-1]=='\r')
|
if (buffor[len - 1] == '\r')
|
||||||
buffor[--len]=0;
|
buffor[--len] = 0;
|
||||||
cell *length = get_amxaddr(amx,params[5]);
|
cell *length = get_amxaddr(amx, params[5]);
|
||||||
*length = set_amxstring(amx,params[3],buffor,params[4]);
|
*length = set_amxstring(amx, params[3], buffor, params[4]);
|
||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static cell AMX_NATIVE_CALL write_file(AMX *amx, cell *params) /* 3 param */
|
static cell AMX_NATIVE_CALL write_file(AMX *amx, cell *params) /* 3 param */
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
char* sFile = build_pathname("%s", get_amxstring(amx,params[1],0,i) );
|
char* sFile = build_pathname("%s", get_amxstring(amx, params[1], 0, i));
|
||||||
char* sText = get_amxstring(amx,params[2],0,i);
|
char* sText = get_amxstring(amx, params[2], 0, i);
|
||||||
FILE* pFile;
|
FILE* pFile;
|
||||||
int iLine = params[3];
|
int iLine = params[3];
|
||||||
|
|
||||||
// apending to the end
|
// apending to the end
|
||||||
if (iLine < 0) {
|
if (iLine < 0)
|
||||||
if ( (pFile = fopen( sFile ,"a")) == NULL ){
|
{
|
||||||
amx_RaiseError(amx,AMX_ERR_NATIVE);
|
if ((pFile = fopen(sFile, "a")) == NULL)
|
||||||
|
{
|
||||||
|
amx_RaiseError(amx, AMX_ERR_NATIVE);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
fputs( sText , pFile );
|
|
||||||
fputc( '\n', pFile );
|
fputs(sText, pFile);
|
||||||
fclose( pFile );
|
fputc('\n', pFile);
|
||||||
|
fclose(pFile);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// creating a new file with a line in a middle
|
// creating a new file with a line in a middle
|
||||||
if ( (pFile = fopen(sFile,"r")) == NULL ) {
|
if ((pFile = fopen(sFile, "r")) == NULL)
|
||||||
if ( (pFile = fopen(sFile,"w")) == NULL ){
|
{
|
||||||
amx_RaiseError(amx,AMX_ERR_NATIVE);
|
if ((pFile = fopen(sFile, "w")) == NULL)
|
||||||
|
{
|
||||||
|
amx_RaiseError(amx, AMX_ERR_NATIVE);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
for(i=0;i < iLine;++i)
|
|
||||||
fputc('\n',pFile);
|
for (i = 0; i < iLine; ++i)
|
||||||
fputs( sText , pFile );
|
fputc('\n', pFile);
|
||||||
fputc( '\n', pFile );
|
|
||||||
|
fputs(sText, pFile);
|
||||||
|
fputc('\n', pFile);
|
||||||
fclose(pFile);
|
fclose(pFile);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@ -187,22 +211,27 @@ static cell AMX_NATIVE_CALL write_file(AMX *amx, cell *params) /* 3 param */
|
|||||||
FILE* pTemp;
|
FILE* pTemp;
|
||||||
char buffor[2048];
|
char buffor[2048];
|
||||||
|
|
||||||
if ( (pTemp = tmpfile()) == NULL ){
|
if ((pTemp = tmpfile()) == NULL)
|
||||||
amx_RaiseError(amx,AMX_ERR_NATIVE);
|
{
|
||||||
|
amx_RaiseError(amx, AMX_ERR_NATIVE);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
for(i=0;;++i){
|
for (i = 0; ; ++i)
|
||||||
if ( i == iLine ){
|
{
|
||||||
fgets(buffor,2047,pFile);
|
if (i == iLine)
|
||||||
fputs( sText , pTemp );
|
{
|
||||||
fputc( '\n', pTemp );
|
fgets(buffor, 2047, pFile);
|
||||||
|
fputs(sText, pTemp);
|
||||||
|
fputc('\n', pTemp);
|
||||||
}
|
}
|
||||||
else if ( fgets(buffor,2047,pFile) ){
|
else if (fgets(buffor, 2047, pFile))
|
||||||
fputs(buffor , pTemp );
|
{
|
||||||
|
fputs(buffor, pTemp);
|
||||||
}
|
}
|
||||||
else if ( i < iLine ) {
|
else if (i < iLine)
|
||||||
fputc( '\n', pTemp );
|
{
|
||||||
|
fputc('\n', pTemp);
|
||||||
}
|
}
|
||||||
else break;
|
else break;
|
||||||
}
|
}
|
||||||
@ -211,31 +240,34 @@ static cell AMX_NATIVE_CALL write_file(AMX *amx, cell *params) /* 3 param */
|
|||||||
rewind(pTemp);
|
rewind(pTemp);
|
||||||
|
|
||||||
// now rewrite because file can be now smaller...
|
// now rewrite because file can be now smaller...
|
||||||
if ( (pFile = fopen(sFile,"w")) == NULL ){
|
if ((pFile = fopen(sFile, "w")) == NULL)
|
||||||
amx_RaiseError(amx,AMX_ERR_NATIVE);
|
{
|
||||||
|
amx_RaiseError(amx, AMX_ERR_NATIVE);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
while(fgets(buffor,2047,pTemp))
|
while (fgets(buffor, 2047, pTemp))
|
||||||
fputs(buffor,pFile );
|
fputs(buffor, pFile);
|
||||||
|
|
||||||
fclose(pTemp);
|
fclose(pTemp);
|
||||||
fclose(pFile);
|
fclose(pFile);
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static cell AMX_NATIVE_CALL delete_file(AMX *amx, cell *params) /* 1 param */
|
static cell AMX_NATIVE_CALL delete_file(AMX *amx, cell *params) /* 1 param */
|
||||||
{
|
{
|
||||||
int iLen;
|
int iLen;
|
||||||
char* sFile = get_amxstring(amx,params[1],0,iLen);
|
char* sFile = get_amxstring(amx, params[1], 0, iLen);
|
||||||
return (unlink( build_pathname("%s",sFile) )?0:1);
|
return (unlink(build_pathname("%s", sFile)) ? 0 : 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
static cell AMX_NATIVE_CALL file_exists(AMX *amx, cell *params) /* 1 param */
|
static cell AMX_NATIVE_CALL file_exists(AMX *amx, cell *params) /* 1 param */
|
||||||
{
|
{
|
||||||
int iLen;
|
int iLen;
|
||||||
char *sFile = get_amxstring(amx,params[1],0,iLen);
|
char *sFile = get_amxstring(amx, params[1], 0, iLen);
|
||||||
char *file = build_pathname("%s",sFile);
|
char *file = build_pathname("%s", sFile);
|
||||||
|
|
||||||
#if defined WIN32 || defined _WIN32
|
#if defined WIN32 || defined _WIN32
|
||||||
DWORD attr = GetFileAttributes(file);
|
DWORD attr = GetFileAttributes(file);
|
||||||
if (attr == INVALID_FILE_ATTRIBUTES)
|
if (attr == INVALID_FILE_ATTRIBUTES)
|
||||||
@ -256,8 +288,9 @@ static cell AMX_NATIVE_CALL file_exists(AMX *amx, cell *params) /* 1 param */
|
|||||||
static cell AMX_NATIVE_CALL dir_exists(AMX *amx, cell *params) /* 1 param */
|
static cell AMX_NATIVE_CALL dir_exists(AMX *amx, cell *params) /* 1 param */
|
||||||
{
|
{
|
||||||
int iLen;
|
int iLen;
|
||||||
char *sFile = get_amxstring(amx,params[1],0,iLen);
|
char *sFile = get_amxstring(amx, params[1], 0, iLen);
|
||||||
char *file = build_pathname("%s",sFile);
|
char *file = build_pathname("%s", sFile);
|
||||||
|
|
||||||
#if defined WIN32 || defined _WIN32
|
#if defined WIN32 || defined _WIN32
|
||||||
DWORD attr = GetFileAttributes(file);
|
DWORD attr = GetFileAttributes(file);
|
||||||
if (attr == INVALID_FILE_ATTRIBUTES)
|
if (attr == INVALID_FILE_ATTRIBUTES)
|
||||||
@ -278,24 +311,25 @@ static cell AMX_NATIVE_CALL dir_exists(AMX *amx, cell *params) /* 1 param */
|
|||||||
static cell AMX_NATIVE_CALL file_size(AMX *amx, cell *params) /* 1 param */
|
static cell AMX_NATIVE_CALL file_size(AMX *amx, cell *params) /* 1 param */
|
||||||
{
|
{
|
||||||
int iLen;
|
int iLen;
|
||||||
char* sFile = get_amxstring(amx,params[1],0,iLen);
|
char* sFile = get_amxstring(amx, params[1], 0, iLen);
|
||||||
AutoFilePtr fp(fopen(build_pathname("%s",sFile),"r"));
|
AutoFilePtr fp(fopen(build_pathname("%s", sFile), "r"));
|
||||||
if ( fp != NULL)
|
|
||||||
|
if (fp != NULL)
|
||||||
{
|
{
|
||||||
if ( params[0] < 2 || params[2] == 0 )
|
if (params[0] < 2 || params[2] == 0)
|
||||||
{
|
{
|
||||||
fseek(fp,0,SEEK_END);
|
fseek(fp, 0, SEEK_END);
|
||||||
int size = ftell(fp);
|
int size = ftell(fp);
|
||||||
return size;
|
return size;
|
||||||
}
|
}
|
||||||
else if ( params[2] == 1 )
|
else if (params[2] == 1)
|
||||||
{
|
{
|
||||||
int a = 0,lines = 0;
|
int a = 0,lines = 0;
|
||||||
while( a != EOF )
|
|
||||||
|
while (a != EOF)
|
||||||
{
|
{
|
||||||
++lines;
|
++lines;
|
||||||
while ( (a = fgetc(fp)) != '\n' && a != EOF )
|
while ((a = fgetc(fp)) != '\n' && a != EOF);
|
||||||
;
|
|
||||||
}
|
}
|
||||||
//int a, b = '\n';
|
//int a, b = '\n';
|
||||||
//while( (a = fgetc(fp)) != EOF ){
|
//while( (a = fgetc(fp)) != EOF ){
|
||||||
@ -307,13 +341,16 @@ static cell AMX_NATIVE_CALL file_size(AMX *amx, cell *params) /* 1 param */
|
|||||||
// ++lines;
|
// ++lines;
|
||||||
return lines;
|
return lines;
|
||||||
}
|
}
|
||||||
else if ( params[2] == 2 ){
|
else if (params[2] == 2)
|
||||||
fseek(fp,-1,SEEK_END);
|
{
|
||||||
if ( fgetc(fp) == '\n' )
|
fseek(fp, -1, SEEK_END);
|
||||||
|
|
||||||
|
if (fgetc(fp) == '\n')
|
||||||
return 1;
|
return 1;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -327,12 +364,13 @@ static cell AMX_NATIVE_CALL amx_fopen(AMX *amx, cell *params)
|
|||||||
char *flags = get_amxstring(amx, params[2], 0, len);
|
char *flags = get_amxstring(amx, params[2], 0, len);
|
||||||
|
|
||||||
FILE *fp = fopen(file, flags);
|
FILE *fp = fopen(file, flags);
|
||||||
if (fp == NULL) {
|
if (fp == NULL)
|
||||||
|
{
|
||||||
// Failed
|
// Failed
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i=0; i<FileList.size(); i++)
|
for (i = 0; i < FileList.size(); i++)
|
||||||
{
|
{
|
||||||
if (FileList.at(i) == NULL)
|
if (FileList.at(i) == NULL)
|
||||||
{
|
{
|
||||||
@ -340,7 +378,8 @@ static cell AMX_NATIVE_CALL amx_fopen(AMX *amx, cell *params)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (j==-1)
|
|
||||||
|
if (j == -1)
|
||||||
{
|
{
|
||||||
FileList.push_back(fp);
|
FileList.push_back(fp);
|
||||||
j = FileList.size() - 1;
|
j = FileList.size() - 1;
|
||||||
@ -348,16 +387,19 @@ static cell AMX_NATIVE_CALL amx_fopen(AMX *amx, cell *params)
|
|||||||
FileList.at(j) = fp;
|
FileList.at(j) = fp;
|
||||||
}
|
}
|
||||||
|
|
||||||
return j+1;
|
return j + 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static cell AMX_NATIVE_CALL amx_fclose(AMX *amx, cell *params)
|
static cell AMX_NATIVE_CALL amx_fclose(AMX *amx, cell *params)
|
||||||
{
|
{
|
||||||
unsigned int id = params[1] - 1;
|
unsigned int id = params[1] - 1;
|
||||||
|
|
||||||
if (id >= FileList.size() || FileList.at(id) == NULL)
|
if (id >= FileList.size() || FileList.at(id) == NULL)
|
||||||
return 0;
|
return 0;
|
||||||
FILE *fp = FileList.at(id);
|
FILE *fp = FileList.at(id);
|
||||||
if (fp) {
|
|
||||||
|
if (fp)
|
||||||
|
{
|
||||||
return fclose(fp);
|
return fclose(fp);
|
||||||
} else {
|
} else {
|
||||||
return -1;
|
return -1;
|
||||||
@ -367,17 +409,22 @@ static cell AMX_NATIVE_CALL amx_fclose(AMX *amx, cell *params)
|
|||||||
static cell AMX_NATIVE_CALL amx_fread(AMX *amx, cell *params)
|
static cell AMX_NATIVE_CALL amx_fread(AMX *amx, cell *params)
|
||||||
{
|
{
|
||||||
unsigned int id = params[1] - 1;
|
unsigned int id = params[1] - 1;
|
||||||
|
|
||||||
if (id >= FileList.size() || FileList.at(id) == NULL)
|
if (id >= FileList.size() || FileList.at(id) == NULL)
|
||||||
return 0;
|
return 0;
|
||||||
FILE *fp = FileList.at(id);
|
FILE *fp = FileList.at(id);
|
||||||
|
|
||||||
char *buffer;
|
char *buffer;
|
||||||
if (fp) {
|
|
||||||
|
if (fp)
|
||||||
|
{
|
||||||
buffer = new char[params[3]]; // SLOW!!! :TODO: Find a better way (auto pointers?)
|
buffer = new char[params[3]]; // SLOW!!! :TODO: Find a better way (auto pointers?)
|
||||||
fread(buffer, sizeof(char), params[3], fp);
|
fread(buffer, sizeof(char), params[3], fp);
|
||||||
set_amxstring(amx, params[2], buffer, params[3]);
|
set_amxstring(amx, params[2], buffer, params[3]);
|
||||||
delete [] buffer;
|
delete [] buffer;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -385,10 +432,13 @@ static cell AMX_NATIVE_CALL amx_fread(AMX *amx, cell *params)
|
|||||||
static cell AMX_NATIVE_CALL amx_fgetc(AMX *amx, cell *params)
|
static cell AMX_NATIVE_CALL amx_fgetc(AMX *amx, cell *params)
|
||||||
{
|
{
|
||||||
unsigned int id = params[1] - 1;
|
unsigned int id = params[1] - 1;
|
||||||
|
|
||||||
if (id >= FileList.size() || FileList.at(id) == NULL)
|
if (id >= FileList.size() || FileList.at(id) == NULL)
|
||||||
return 0;
|
return 0;
|
||||||
FILE *fp = FileList.at(id);
|
FILE *fp = FileList.at(id);
|
||||||
if (fp) {
|
|
||||||
|
if (fp)
|
||||||
|
{
|
||||||
return fgetc(fp);
|
return fgetc(fp);
|
||||||
} else {
|
} else {
|
||||||
return -1;
|
return -1;
|
||||||
@ -398,89 +448,111 @@ static cell AMX_NATIVE_CALL amx_fgetc(AMX *amx, cell *params)
|
|||||||
static cell AMX_NATIVE_CALL amx_fwrite(AMX *amx, cell *params)
|
static cell AMX_NATIVE_CALL amx_fwrite(AMX *amx, cell *params)
|
||||||
{
|
{
|
||||||
unsigned int id = params[1] - 1;
|
unsigned int id = params[1] - 1;
|
||||||
|
|
||||||
if (id >= FileList.size() || FileList.at(id) == NULL)
|
if (id >= FileList.size() || FileList.at(id) == NULL)
|
||||||
return 0;
|
return 0;
|
||||||
FILE *fp = FileList.at(id);
|
FILE *fp = FileList.at(id);
|
||||||
char *buf;
|
char *buf;
|
||||||
int len;
|
int len;
|
||||||
if (fp) {
|
|
||||||
|
if (fp)
|
||||||
|
{
|
||||||
buf = format_amxstring(amx, params, 2, len);
|
buf = format_amxstring(amx, params, 2, len);
|
||||||
return fwrite(buf, sizeof(char), strlen(buf), fp);
|
return fwrite(buf, sizeof(char), strlen(buf), fp);
|
||||||
}
|
}
|
||||||
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static cell AMX_NATIVE_CALL amx_feof(AMX *amx, cell *params)
|
static cell AMX_NATIVE_CALL amx_feof(AMX *amx, cell *params)
|
||||||
{
|
{
|
||||||
unsigned int id = params[1] - 1;
|
unsigned int id = params[1] - 1;
|
||||||
|
|
||||||
if (id >= FileList.size() || FileList.at(id) == NULL)
|
if (id >= FileList.size() || FileList.at(id) == NULL)
|
||||||
return 0;
|
return 0;
|
||||||
FILE *fp = FileList.at(id);
|
FILE *fp = FileList.at(id);
|
||||||
if (fp) {
|
|
||||||
if (feof(fp)) {
|
if (fp)
|
||||||
|
{
|
||||||
|
if (feof(fp))
|
||||||
|
{
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static cell AMX_NATIVE_CALL amx_fseek(AMX *amx, cell *params)
|
static cell AMX_NATIVE_CALL amx_fseek(AMX *amx, cell *params)
|
||||||
{
|
{
|
||||||
unsigned int id = params[1] - 1;
|
unsigned int id = params[1] - 1;
|
||||||
|
|
||||||
if (id >= FileList.size() || FileList.at(id) == NULL)
|
if (id >= FileList.size() || FileList.at(id) == NULL)
|
||||||
return 0;
|
return 0;
|
||||||
FILE *fp = FileList.at(id);
|
FILE *fp = FileList.at(id);
|
||||||
|
|
||||||
if (fp) {
|
if (fp)
|
||||||
|
{
|
||||||
return fseek(fp, (long)params[2], params[3]);
|
return fseek(fp, (long)params[2], params[3]);
|
||||||
}
|
}
|
||||||
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static cell AMX_NATIVE_CALL amx_fputc(AMX *amx, cell *params)
|
static cell AMX_NATIVE_CALL amx_fputc(AMX *amx, cell *params)
|
||||||
{
|
{
|
||||||
unsigned int id = params[1] - 1;
|
unsigned int id = params[1] - 1;
|
||||||
|
|
||||||
if (id >= FileList.size() || FileList.at(id) == NULL)
|
if (id >= FileList.size() || FileList.at(id) == NULL)
|
||||||
return 0;
|
return 0;
|
||||||
FILE *fp = FileList.at(id);
|
FILE *fp = FileList.at(id);
|
||||||
|
|
||||||
if (fp) {
|
if (fp)
|
||||||
|
{
|
||||||
return fputc(params[2], fp);
|
return fputc(params[2], fp);
|
||||||
}
|
}
|
||||||
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static cell AMX_NATIVE_CALL amx_rewind(AMX *amx, cell *params)
|
static cell AMX_NATIVE_CALL amx_rewind(AMX *amx, cell *params)
|
||||||
{
|
{
|
||||||
unsigned int id = params[1] - 1;
|
unsigned int id = params[1] - 1;
|
||||||
|
|
||||||
if (id >= FileList.size() || FileList.at(id) == NULL)
|
if (id >= FileList.size() || FileList.at(id) == NULL)
|
||||||
return 0;
|
return 0;
|
||||||
FILE *fp = FileList.at(id);
|
FILE *fp = FileList.at(id);
|
||||||
|
|
||||||
if (fp) {
|
if (fp)
|
||||||
|
{
|
||||||
rewind(fp);
|
rewind(fp);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static cell AMX_NATIVE_CALL amx_fflush(AMX *amx, cell *params)
|
static cell AMX_NATIVE_CALL amx_fflush(AMX *amx, cell *params)
|
||||||
{
|
{
|
||||||
unsigned int id = params[1] - 1;
|
unsigned int id = params[1] - 1;
|
||||||
|
|
||||||
if (id >= FileList.size() || FileList.at(id) == NULL)
|
if (id >= FileList.size() || FileList.at(id) == NULL)
|
||||||
return 0;
|
return 0;
|
||||||
FILE *fp = FileList.at(id);
|
FILE *fp = FileList.at(id);
|
||||||
|
|
||||||
if (fp) {
|
if (fp)
|
||||||
|
{
|
||||||
return fflush(fp);
|
return fflush(fp);
|
||||||
}
|
}
|
||||||
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static cell AMX_NATIVE_CALL amx_fscanf(AMX *amx, cell *params)
|
static cell AMX_NATIVE_CALL amx_fscanf(AMX *amx, cell *params)
|
||||||
{
|
{
|
||||||
unsigned int id = params[1] - 1;
|
unsigned int id = params[1] - 1;
|
||||||
|
|
||||||
if (id >= FileList.size() || FileList.at(id) == NULL)
|
if (id >= FileList.size() || FileList.at(id) == NULL)
|
||||||
return 0;
|
return 0;
|
||||||
FILE *fp = FileList.at(id);
|
FILE *fp = FileList.at(id);
|
||||||
@ -488,7 +560,9 @@ static cell AMX_NATIVE_CALL amx_fscanf(AMX *amx, cell *params)
|
|||||||
char *buf;
|
char *buf;
|
||||||
int len;
|
int len;
|
||||||
buf = format_amxstring(amx, params, 2, len);
|
buf = format_amxstring(amx, params, 2, len);
|
||||||
if (fp) {
|
|
||||||
|
if (fp)
|
||||||
|
{
|
||||||
return fscanf(fp, "%s", buf);
|
return fscanf(fp, "%s", buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -498,13 +572,16 @@ static cell AMX_NATIVE_CALL amx_fscanf(AMX *amx, cell *params)
|
|||||||
static cell AMX_NATIVE_CALL amx_ftell(AMX *amx, cell *params)
|
static cell AMX_NATIVE_CALL amx_ftell(AMX *amx, cell *params)
|
||||||
{
|
{
|
||||||
unsigned int id = params[1] - 1;
|
unsigned int id = params[1] - 1;
|
||||||
|
|
||||||
if (id >= FileList.size() || FileList.at(id) == NULL)
|
if (id >= FileList.size() || FileList.at(id) == NULL)
|
||||||
return 0;
|
return 0;
|
||||||
FILE *fp = FileList.at(id);
|
FILE *fp = FileList.at(id);
|
||||||
|
|
||||||
if (fp) {
|
if (fp)
|
||||||
|
{
|
||||||
return ftell(fp);
|
return ftell(fp);
|
||||||
}
|
}
|
||||||
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
#endif //UNUSED
|
#endif //UNUSED
|
||||||
@ -515,11 +592,14 @@ static cell AMX_NATIVE_CALL amx_filesize(AMX *amx, cell *params)
|
|||||||
char *file = build_pathname("%s", format_amxstring(amx, params, 1, len));
|
char *file = build_pathname("%s", format_amxstring(amx, params, 1, len));
|
||||||
long size;
|
long size;
|
||||||
AutoFilePtr fp(fopen(file, "rb"));
|
AutoFilePtr fp(fopen(file, "rb"));
|
||||||
if (fp) {
|
|
||||||
|
if (fp)
|
||||||
|
{
|
||||||
fseek(fp, 0, SEEK_END);
|
fseek(fp, 0, SEEK_END);
|
||||||
size = ftell(fp);
|
size = ftell(fp);
|
||||||
return size;
|
return size;
|
||||||
}
|
}
|
||||||
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -527,116 +607,148 @@ static cell AMX_NATIVE_CALL amx_filesize(AMX *amx, cell *params)
|
|||||||
static cell AMX_NATIVE_CALL amx_fgetl(AMX *amx, cell *params)
|
static cell AMX_NATIVE_CALL amx_fgetl(AMX *amx, cell *params)
|
||||||
{
|
{
|
||||||
unsigned int id = params[1] - 1;
|
unsigned int id = params[1] - 1;
|
||||||
|
|
||||||
if (id >= FileList.size() || FileList.at(id) == NULL)
|
if (id >= FileList.size() || FileList.at(id) == NULL)
|
||||||
return 0;
|
return 0;
|
||||||
FILE *fp = FileList.at(id);
|
FILE *fp = FileList.at(id);
|
||||||
|
|
||||||
long t;
|
long t;
|
||||||
if (fp) {
|
|
||||||
|
if (fp)
|
||||||
|
{
|
||||||
fread(&t, sizeof(long), 1, fp);
|
fread(&t, sizeof(long), 1, fp);
|
||||||
return t;
|
return t;
|
||||||
}
|
}
|
||||||
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static cell AMX_NATIVE_CALL amx_fgeti(AMX *amx, cell *params)
|
static cell AMX_NATIVE_CALL amx_fgeti(AMX *amx, cell *params)
|
||||||
{
|
{
|
||||||
unsigned int id = params[1] - 1;
|
unsigned int id = params[1] - 1;
|
||||||
|
|
||||||
if (id >= FileList.size() || FileList.at(id) == NULL)
|
if (id >= FileList.size() || FileList.at(id) == NULL)
|
||||||
return 0;
|
return 0;
|
||||||
FILE *fp = FileList.at(id);
|
FILE *fp = FileList.at(id);
|
||||||
|
|
||||||
int t;
|
int t;
|
||||||
if (fp) {
|
|
||||||
|
if (fp)
|
||||||
|
{
|
||||||
fread(&t, sizeof(int), 1, fp);
|
fread(&t, sizeof(int), 1, fp);
|
||||||
return t;
|
return t;
|
||||||
}
|
}
|
||||||
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static cell AMX_NATIVE_CALL amx_fgets(AMX *amx, cell *params)
|
static cell AMX_NATIVE_CALL amx_fgets(AMX *amx, cell *params)
|
||||||
{
|
{
|
||||||
unsigned int id = params[1] - 1;
|
unsigned int id = params[1] - 1;
|
||||||
|
|
||||||
if (id >= FileList.size() || FileList.at(id) == NULL)
|
if (id >= FileList.size() || FileList.at(id) == NULL)
|
||||||
return 0;
|
return 0;
|
||||||
FILE *fp = FileList.at(id);
|
FILE *fp = FileList.at(id);
|
||||||
|
|
||||||
short t;
|
short t;
|
||||||
if (fp) {
|
|
||||||
|
if (fp)
|
||||||
|
{
|
||||||
fread(&t, sizeof(short), 1, fp);
|
fread(&t, sizeof(short), 1, fp);
|
||||||
return t;
|
return t;
|
||||||
}
|
}
|
||||||
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static cell AMX_NATIVE_CALL amx_fputs(AMX *amx, cell *params)
|
static cell AMX_NATIVE_CALL amx_fputs(AMX *amx, cell *params)
|
||||||
{
|
{
|
||||||
unsigned int id = params[1] - 1;
|
unsigned int id = params[1] - 1;
|
||||||
|
|
||||||
if (id >= FileList.size() || FileList.at(id) == NULL)
|
if (id >= FileList.size() || FileList.at(id) == NULL)
|
||||||
return 0;
|
return 0;
|
||||||
FILE *fp = FileList.at(id);
|
FILE *fp = FileList.at(id);
|
||||||
|
|
||||||
short size = params[2];
|
short size = params[2];
|
||||||
if (fp) {
|
|
||||||
|
if (fp)
|
||||||
|
{
|
||||||
return fwrite(&size, sizeof(short), 1, fp);
|
return fwrite(&size, sizeof(short), 1, fp);
|
||||||
}
|
}
|
||||||
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static cell AMX_NATIVE_CALL amx_fputl(AMX *amx, cell *params)
|
static cell AMX_NATIVE_CALL amx_fputl(AMX *amx, cell *params)
|
||||||
{
|
{
|
||||||
unsigned int id = params[1] - 1;
|
unsigned int id = params[1] - 1;
|
||||||
|
|
||||||
if (id >= FileList.size() || FileList.at(id) == NULL)
|
if (id >= FileList.size() || FileList.at(id) == NULL)
|
||||||
return 0;
|
return 0;
|
||||||
FILE *fp = FileList.at(id);
|
FILE *fp = FileList.at(id);
|
||||||
|
|
||||||
long size = params[2];
|
long size = params[2];
|
||||||
if (fp) {
|
|
||||||
|
if (fp)
|
||||||
|
{
|
||||||
return fwrite(&size, sizeof(long), 1, fp);
|
return fwrite(&size, sizeof(long), 1, fp);
|
||||||
}
|
}
|
||||||
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static cell AMX_NATIVE_CALL amx_fputi(AMX *amx, cell *params)
|
static cell AMX_NATIVE_CALL amx_fputi(AMX *amx, cell *params)
|
||||||
{
|
{
|
||||||
unsigned int id = params[1] - 1;
|
unsigned int id = params[1] - 1;
|
||||||
|
|
||||||
if (id >= FileList.size() || FileList.at(id) == NULL)
|
if (id >= FileList.size() || FileList.at(id) == NULL)
|
||||||
return 0;
|
return 0;
|
||||||
FILE *fp = FileList.at(id);
|
FILE *fp = FileList.at(id);
|
||||||
|
|
||||||
int size = params[2];
|
int size = params[2];
|
||||||
if (fp) {
|
|
||||||
|
if (fp)
|
||||||
|
{
|
||||||
return fwrite(&size, sizeof(int), 1, fp);
|
return fwrite(&size, sizeof(int), 1, fp);
|
||||||
}
|
}
|
||||||
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static cell AMX_NATIVE_CALL amx_fgetf(AMX *amx, cell *params)
|
static cell AMX_NATIVE_CALL amx_fgetf(AMX *amx, cell *params)
|
||||||
{
|
{
|
||||||
unsigned int id = params[1] - 1;
|
unsigned int id = params[1] - 1;
|
||||||
|
|
||||||
if (id >= FileList.size() || FileList.at(id) == NULL)
|
if (id >= FileList.size() || FileList.at(id) == NULL)
|
||||||
return 0;
|
return 0;
|
||||||
FILE *fp = FileList.at(id);
|
FILE *fp = FileList.at(id);
|
||||||
|
|
||||||
float t;
|
float t;
|
||||||
if (fp) {
|
|
||||||
|
if (fp)
|
||||||
|
{
|
||||||
fread(&t, sizeof(float), 1, fp);
|
fread(&t, sizeof(float), 1, fp);
|
||||||
return *(cell*)&t;
|
return *(cell*)&t;
|
||||||
}
|
}
|
||||||
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static cell AMX_NATIVE_CALL amx_fputf(AMX *amx, cell *params)
|
static cell AMX_NATIVE_CALL amx_fputf(AMX *amx, cell *params)
|
||||||
{
|
{
|
||||||
unsigned int id = params[1] - 1;
|
unsigned int id = params[1] - 1;
|
||||||
|
|
||||||
if (id >= FileList.size() || FileList.at(id) == NULL)
|
if (id >= FileList.size() || FileList.at(id) == NULL)
|
||||||
return 0;
|
return 0;
|
||||||
FILE *fp = FileList.at(id);
|
FILE *fp = FileList.at(id);
|
||||||
|
|
||||||
float size = *(float *)((void *)¶ms[2]);
|
float size = *(float *)((void *)¶ms[2]);
|
||||||
if (fp) {
|
|
||||||
|
if (fp)
|
||||||
|
{
|
||||||
return fwrite(&size, sizeof(float), 1, fp);
|
return fwrite(&size, sizeof(float), 1, fp);
|
||||||
}
|
}
|
||||||
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
#endif //UNUSED
|
#endif //UNUSED
|
||||||
@ -657,22 +769,28 @@ static cell AMX_NATIVE_CALL amx_open_dir(AMX *amx, cell *params)
|
|||||||
char *dirname = build_pathname("%s\\*", path);
|
char *dirname = build_pathname("%s\\*", path);
|
||||||
WIN32_FIND_DATA fd;
|
WIN32_FIND_DATA fd;
|
||||||
HANDLE hFile = FindFirstFile(dirname, &fd);
|
HANDLE hFile = FindFirstFile(dirname, &fd);
|
||||||
|
|
||||||
if (hFile == INVALID_HANDLE_VALUE)
|
if (hFile == INVALID_HANDLE_VALUE)
|
||||||
return 0;
|
return 0;
|
||||||
set_amxstring(amx, params[2], fd.cFileName, params[3]);
|
set_amxstring(amx, params[2], fd.cFileName, params[3]);
|
||||||
|
|
||||||
return (DWORD)hFile;
|
return (DWORD)hFile;
|
||||||
#else
|
#else
|
||||||
char *dirname = build_pathname("%s", path);
|
char *dirname = build_pathname("%s", path);
|
||||||
DIR *dp = opendir(dirname);
|
DIR *dp = opendir(dirname);
|
||||||
|
|
||||||
if (!dp)
|
if (!dp)
|
||||||
return NULL;
|
return NULL;
|
||||||
struct dirent *ep = readdir(dp);
|
struct dirent *ep = readdir(dp);
|
||||||
|
|
||||||
if (!ep)
|
if (!ep)
|
||||||
{
|
{
|
||||||
closedir(dp);
|
closedir(dp);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
set_amxstring(amx,params[2], ep->d_name,params[3]);
|
|
||||||
|
set_amxstring(amx, params[2], ep->d_name, params[3]);
|
||||||
|
|
||||||
return (cell)dp;
|
return (cell)dp;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
@ -681,14 +799,18 @@ static cell AMX_NATIVE_CALL amx_close_dir(AMX *amx, cell *params)
|
|||||||
{
|
{
|
||||||
#if defined WIN32 || defined _WIN32
|
#if defined WIN32 || defined _WIN32
|
||||||
HANDLE hFile = (HANDLE)((DWORD)params[1]);
|
HANDLE hFile = (HANDLE)((DWORD)params[1]);
|
||||||
|
|
||||||
if (hFile == INVALID_HANDLE_VALUE || hFile == NULL)
|
if (hFile == INVALID_HANDLE_VALUE || hFile == NULL)
|
||||||
return 0;
|
return 0;
|
||||||
FindClose(hFile);
|
FindClose(hFile);
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
#else
|
#else
|
||||||
DIR *dp = (DIR *)params[1];
|
DIR *dp = (DIR *)params[1];
|
||||||
|
|
||||||
if (!dp)
|
if (!dp)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
closedir(dp);
|
closedir(dp);
|
||||||
return 1;
|
return 1;
|
||||||
#endif
|
#endif
|
||||||
@ -698,64 +820,68 @@ static cell AMX_NATIVE_CALL amx_get_dir(AMX *amx, cell *params)
|
|||||||
{
|
{
|
||||||
#if defined WIN32 || defined _WIN32
|
#if defined WIN32 || defined _WIN32
|
||||||
HANDLE hFile = (HANDLE)((DWORD)params[1]);
|
HANDLE hFile = (HANDLE)((DWORD)params[1]);
|
||||||
|
|
||||||
if (hFile == INVALID_HANDLE_VALUE || hFile == NULL)
|
if (hFile == INVALID_HANDLE_VALUE || hFile == NULL)
|
||||||
return 0;
|
return 0;
|
||||||
WIN32_FIND_DATA fd;
|
WIN32_FIND_DATA fd;
|
||||||
|
|
||||||
if (!FindNextFile(hFile, &fd))
|
if (!FindNextFile(hFile, &fd))
|
||||||
return 0;
|
return 0;
|
||||||
set_amxstring(amx, params[2], fd.cFileName, params[3]);
|
set_amxstring(amx, params[2], fd.cFileName, params[3]);
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
#else
|
#else
|
||||||
DIR *dp = (DIR *)params[1];
|
DIR *dp = (DIR *)params[1];
|
||||||
|
|
||||||
if (!dp)
|
if (!dp)
|
||||||
return 0;
|
return 0;
|
||||||
struct dirent *ep = readdir(dp);
|
struct dirent *ep = readdir(dp);
|
||||||
|
|
||||||
if (!ep)
|
if (!ep)
|
||||||
return 0;
|
return 0;
|
||||||
set_amxstring(amx,params[2], ep->d_name,params[3]);
|
set_amxstring(amx, params[2], ep->d_name, params[3]);
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
AMX_NATIVE_INFO file_Natives[] = {
|
AMX_NATIVE_INFO file_Natives[] =
|
||||||
{ "delete_file", delete_file },
|
{
|
||||||
{ "file_exists", file_exists },
|
{"delete_file", delete_file},
|
||||||
{ "file_size", file_size },
|
{"file_exists", file_exists},
|
||||||
{ "read_dir", read_dir },
|
{"file_size", file_size},
|
||||||
{ "read_file", read_file },
|
{"read_dir", read_dir},
|
||||||
{ "write_file", write_file },
|
{"read_file", read_file},
|
||||||
|
{"write_file", write_file},
|
||||||
//Sanji's File Natives
|
//Sanji's File Natives
|
||||||
{ "fopen", amx_fopen },
|
{"fopen", amx_fopen},
|
||||||
{ "fclose", amx_fclose },
|
{"fclose", amx_fclose},
|
||||||
{ "fread", amx_fread },
|
{"fread", amx_fread},
|
||||||
{ "filesize", amx_filesize },
|
{"filesize", amx_filesize},
|
||||||
#ifdef UNUSED
|
#ifdef UNUSED
|
||||||
{ "fgetc", amx_fgetc },
|
{"fgetc", amx_fgetc},
|
||||||
{ "fwrite", amx_fwrite },
|
{"fwrite", amx_fwrite},
|
||||||
{ "feof", amx_feof },
|
{"feof", amx_feof},
|
||||||
{ "fseek", amx_fseek },
|
{"fseek", amx_fseek},
|
||||||
{ "fputc", amx_fputc },
|
{"fputc", amx_fputc},
|
||||||
{ "rewind", amx_rewind },
|
{"rewind", amx_rewind},
|
||||||
{ "fflush", amx_fflush },
|
{"fflush", amx_fflush},
|
||||||
{ "fscanf", amx_fscanf },
|
{"fscanf", amx_fscanf},
|
||||||
{ "ftell", amx_ftell },
|
{"ftell", amx_ftell},
|
||||||
{ "fgetl", amx_fgetl },
|
{"fgetl", amx_fgetl},
|
||||||
{ "fgeti", amx_fgeti },
|
{"fgeti", amx_fgeti},
|
||||||
{ "fgets", amx_fgets },
|
{"fgets", amx_fgets},
|
||||||
{ "fputs", amx_fputs },
|
{"fputs", amx_fputs},
|
||||||
{ "fputl", amx_fputl },
|
{"fputl", amx_fputl},
|
||||||
{ "fputi", amx_fputi },
|
{"fputi", amx_fputi},
|
||||||
{ "fgetf", amx_fgetf },
|
{"fgetf", amx_fgetf},
|
||||||
{ "fputf", amx_fputf },
|
{"fputf", amx_fputf},
|
||||||
#endif
|
#endif
|
||||||
{ "unlink", delete_file },
|
{"unlink", delete_file},
|
||||||
{ "build_pathname", amx_build_pathname},
|
{"build_pathname", amx_build_pathname},
|
||||||
{ "dir_exists", dir_exists },
|
{"dir_exists", dir_exists},
|
||||||
{ "open_dir", amx_open_dir },
|
{"open_dir", amx_open_dir},
|
||||||
{ "close_dir", amx_close_dir },
|
{"close_dir", amx_close_dir},
|
||||||
{ "next_file", amx_get_dir },
|
{"next_file", amx_get_dir},
|
||||||
|
{NULL, NULL}
|
||||||
{ NULL, NULL }
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -168,7 +168,7 @@ int C_PrecacheSound(char *s)
|
|||||||
for (CList<ForceObject>::iterator a = g_forcesounds.begin(); a; ++a)
|
for (CList<ForceObject>::iterator a = g_forcesounds.begin(); a; ++a)
|
||||||
{
|
{
|
||||||
PRECACHE_SOUND((char*)(*a).getFilename());
|
PRECACHE_SOUND((char*)(*a).getFilename());
|
||||||
ENGINE_FORCE_UNMODIFIED((*a).getForceType(),(*a).getMin(),(*a).getMax(),(*a).getFilename());
|
ENGINE_FORCE_UNMODIFIED((*a).getForceType(), (*a).getMin(), (*a).getMax(), (*a).getFilename());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!g_bmod_cstrike)
|
if (!g_bmod_cstrike)
|
||||||
@ -206,7 +206,7 @@ const char* get_localinfo(const char* name, const char* def)
|
|||||||
const char* b = LOCALINFO((char*)name);
|
const char* b = LOCALINFO((char*)name);
|
||||||
|
|
||||||
if (b == 0 || *b == 0)
|
if (b == 0 || *b == 0)
|
||||||
SET_LOCALINFO((char*)name,(char*)(b = def));
|
SET_LOCALINFO((char*)name, (char*)(b = def));
|
||||||
|
|
||||||
return b;
|
return b;
|
||||||
}
|
}
|
||||||
@ -320,7 +320,7 @@ int C_Spawn(edict_t *pent)
|
|||||||
{
|
{
|
||||||
PRECACHE_GENERIC((char*)(*a).getFilename());
|
PRECACHE_GENERIC((char*)(*a).getFilename());
|
||||||
ENGINE_FORCE_UNMODIFIED((*a).getForceType(),
|
ENGINE_FORCE_UNMODIFIED((*a).getForceType(),
|
||||||
(*a).getMin(),(*a).getMax(),(*a).getFilename());
|
(*a).getMin(), (*a).getMax(), (*a).getFilename());
|
||||||
}
|
}
|
||||||
|
|
||||||
RETURN_META_VALUE(MRES_IGNORED, 0);
|
RETURN_META_VALUE(MRES_IGNORED, 0);
|
||||||
@ -413,7 +413,7 @@ void C_ServerActivate_Post(edict_t *pEdictList, int edictCount, int clientMax)
|
|||||||
if (g_activated)
|
if (g_activated)
|
||||||
RETURN_META(MRES_IGNORED);
|
RETURN_META(MRES_IGNORED);
|
||||||
|
|
||||||
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);
|
||||||
pPlayer->Init(pEdictList + i, i);
|
pPlayer->Init(pEdictList + i, i);
|
||||||
@ -609,7 +609,7 @@ void C_ClientUserInfoChanged_Post(edict_t *pEntity, char *infobuffer)
|
|||||||
{
|
{
|
||||||
CPlayer *pPlayer = GET_PLAYER_POINTER(pEntity);
|
CPlayer *pPlayer = GET_PLAYER_POINTER(pEntity);
|
||||||
executeForwards(FF_ClientInfoChanged, pPlayer->index);
|
executeForwards(FF_ClientInfoChanged, pPlayer->index);
|
||||||
const char* name = INFOKEY_VALUE(infobuffer,"name");
|
const char* name = INFOKEY_VALUE(infobuffer, "name");
|
||||||
|
|
||||||
// Emulate bot connection and putinserver
|
// Emulate bot connection and putinserver
|
||||||
if (pPlayer->ingame)
|
if (pPlayer->ingame)
|
||||||
@ -690,7 +690,7 @@ void C_ClientCommand(edict_t *pEntity)
|
|||||||
|
|
||||||
/* check menu commands */
|
/* check menu commands */
|
||||||
|
|
||||||
if (!strcmp(cmd,"menuselect"))
|
if (!strcmp(cmd, "menuselect"))
|
||||||
{
|
{
|
||||||
int pressed_key = atoi(arg) - 1;
|
int pressed_key = atoi(arg) - 1;
|
||||||
int bit_key = (1<<pressed_key);
|
int bit_key = (1<<pressed_key);
|
||||||
@ -718,16 +718,19 @@ void C_ClientCommand(edict_t *pEntity)
|
|||||||
ret = executeForwards((*a).getFunction(), pPlayer->index, menu, item);
|
ret = executeForwards((*a).getFunction(), pPlayer->index, menu, item);
|
||||||
|
|
||||||
if (ret & 2) result = MRES_SUPERCEDE;
|
if (ret & 2) result = MRES_SUPERCEDE;
|
||||||
else if (ret & 1) RETURN_META(MRES_SUPERCEDE);
|
else
|
||||||
|
if (ret & 1) RETURN_META(MRES_SUPERCEDE);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (item == MENU_BACK)
|
if (item == MENU_BACK)
|
||||||
{
|
{
|
||||||
pMenu->Display(pPlayer->index, pPlayer->page-1);
|
pMenu->Display(pPlayer->index, pPlayer->page-1);
|
||||||
} else if (item == MENU_MORE)
|
}
|
||||||
|
else if (item == MENU_MORE)
|
||||||
{
|
{
|
||||||
pMenu->Display(pPlayer->index, pPlayer->page+1);
|
pMenu->Display(pPlayer->index, pPlayer->page + 1);
|
||||||
} else if (item == MENU_EXIT)
|
}
|
||||||
|
else if (item == MENU_EXIT)
|
||||||
{
|
{
|
||||||
//nothing
|
//nothing
|
||||||
}
|
}
|
||||||
@ -1119,11 +1122,13 @@ C_DLLEXPORT int Meta_Query(char *ifvers, plugin_info_t **pPlugInfo, mutil_funcs_
|
|||||||
{
|
{
|
||||||
LOG_ERROR(PLID, "metamod version is too old for this plugin; update metamod");
|
LOG_ERROR(PLID, "metamod version is too old for this plugin; update metamod");
|
||||||
return (FALSE);
|
return (FALSE);
|
||||||
} else if (pmajor < mmajor)
|
}
|
||||||
|
else if (pmajor < mmajor)
|
||||||
{
|
{
|
||||||
LOG_ERROR(PLID, "metamod version is incompatible with this plugin; please find a newer version of this plugin");
|
LOG_ERROR(PLID, "metamod version is incompatible with this plugin; please find a newer version of this plugin");
|
||||||
return (FALSE);
|
return (FALSE);
|
||||||
} else if (pmajor == mmajor)
|
}
|
||||||
|
else if (pmajor == mmajor)
|
||||||
{
|
{
|
||||||
#ifdef FAKEMETA
|
#ifdef FAKEMETA
|
||||||
if (mminor == 10)
|
if (mminor == 10)
|
||||||
@ -1138,14 +1143,17 @@ C_DLLEXPORT int Meta_Query(char *ifvers, plugin_info_t **pPlugInfo, mutil_funcs_
|
|||||||
{
|
{
|
||||||
g_NeedsP = true;
|
g_NeedsP = true;
|
||||||
#endif
|
#endif
|
||||||
} else if (mminor >= 11)
|
}
|
||||||
|
else if (mminor >= 11)
|
||||||
{
|
{
|
||||||
g_IsNewMM = true;
|
g_IsNewMM = true;
|
||||||
} else if (pminor > mminor)
|
}
|
||||||
|
else if (pminor > mminor)
|
||||||
{
|
{
|
||||||
LOG_ERROR(PLID, "metamod version is incompatible with this plugin; please find a newer version of this plugin");
|
LOG_ERROR(PLID, "metamod version is incompatible with this plugin; please find a newer version of this plugin");
|
||||||
return FALSE;
|
return FALSE;
|
||||||
} else if (pminor < mminor)
|
}
|
||||||
|
else if (pminor < mminor)
|
||||||
{
|
{
|
||||||
LOG_MESSAGE(PLID, "WARNING: metamod version is newer than expected; consider finding a newer version of this plugin");
|
LOG_MESSAGE(PLID, "WARNING: metamod version is newer than expected; consider finding a newer version of this plugin");
|
||||||
|
|
||||||
@ -1423,13 +1431,13 @@ C_DLLEXPORT int GetEntityAPI2_Post(DLL_FUNCTIONS *pFunctionTable, int *interface
|
|||||||
enginefuncs_t meta_engfuncs;
|
enginefuncs_t meta_engfuncs;
|
||||||
C_DLLEXPORT int GetEngineFunctions(enginefuncs_t *pengfuncsFromEngine, int *interfaceVersion)
|
C_DLLEXPORT int GetEngineFunctions(enginefuncs_t *pengfuncsFromEngine, int *interfaceVersion)
|
||||||
{
|
{
|
||||||
if (stricmp(g_mod_name.c_str(),"cstrike") == 0 || stricmp(g_mod_name.c_str(),"czero") == 0)
|
if (stricmp(g_mod_name.c_str(), "cstrike") == 0 || stricmp(g_mod_name.c_str(), "czero") == 0)
|
||||||
{
|
{
|
||||||
meta_engfuncs.pfnSetModel = C_SetModel;
|
meta_engfuncs.pfnSetModel = C_SetModel;
|
||||||
g_bmod_cstrike = true;
|
g_bmod_cstrike = true;
|
||||||
} else {
|
} else {
|
||||||
g_bmod_cstrike = false;
|
g_bmod_cstrike = false;
|
||||||
g_bmod_dod = !stricmp(g_mod_name.c_str(),"dod");
|
g_bmod_dod = !stricmp(g_mod_name.c_str(), "dod");
|
||||||
}
|
}
|
||||||
|
|
||||||
meta_engfuncs.pfnCmd_Argc = C_Cmd_Argc;
|
meta_engfuncs.pfnCmd_Argc = C_Cmd_Argc;
|
||||||
|
@ -1,3 +1,33 @@
|
|||||||
|
/* AMX Mod X
|
||||||
|
*
|
||||||
|
* by the AMX Mod X Development Team
|
||||||
|
* originally developed by OLO
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify it
|
||||||
|
* under the terms of the GNU General Public License as published by the
|
||||||
|
* Free Software Foundation; either version 2 of the License, or (at
|
||||||
|
* your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful, but
|
||||||
|
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software Foundation,
|
||||||
|
* Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
*
|
||||||
|
* In addition, as a special exception, the author gives permission to
|
||||||
|
* link the code of this program with the Half-Life Game Engine ("HL
|
||||||
|
* Engine") and Modified Game Libraries ("MODs") developed by Valve,
|
||||||
|
* L.L.C ("Valve"). You must obey the GNU General Public License in all
|
||||||
|
* respects for all of the code used other than the HL Engine and MODs
|
||||||
|
* from Valve. If you modify this file, you may extend this exception
|
||||||
|
* to your version of the file, but you are not obligated to do so. If
|
||||||
|
* you do not wish to do so, delete this exception statement from your
|
||||||
|
* version.
|
||||||
|
*/
|
||||||
|
|
||||||
#include "amxmodx.h"
|
#include "amxmodx.h"
|
||||||
#include "newmenus.h"
|
#include "newmenus.h"
|
||||||
|
|
||||||
@ -5,7 +35,7 @@ CVector<Menu *> g_NewMenus;
|
|||||||
|
|
||||||
void ClearMenus()
|
void ClearMenus()
|
||||||
{
|
{
|
||||||
for (size_t i=0; i<g_NewMenus.size(); i++)
|
for (size_t i = 0; i < g_NewMenus.size(); i++)
|
||||||
delete g_NewMenus[i];
|
delete g_NewMenus[i];
|
||||||
g_NewMenus.clear();
|
g_NewMenus.clear();
|
||||||
}
|
}
|
||||||
@ -19,7 +49,7 @@ Menu::Menu(const char *title, int mid, int tid)
|
|||||||
|
|
||||||
Menu::~Menu()
|
Menu::~Menu()
|
||||||
{
|
{
|
||||||
for (size_t i=0; i<m_Items.size(); i++)
|
for (size_t i = 0; i < m_Items.size(); i++)
|
||||||
delete m_Items[i];
|
delete m_Items[i];
|
||||||
m_Items.clear();
|
m_Items.clear();
|
||||||
}
|
}
|
||||||
@ -86,10 +116,14 @@ int Menu::PagekeyToItem(page_t page, item_t key)
|
|||||||
return MENU_MORE;
|
return MENU_MORE;
|
||||||
else
|
else
|
||||||
return MENU_EXIT;
|
return MENU_EXIT;
|
||||||
} else if (key == rem+1) {
|
}
|
||||||
|
else if (key == rem + 1)
|
||||||
|
{
|
||||||
return MENU_EXIT;
|
return MENU_EXIT;
|
||||||
}
|
}
|
||||||
} else if (page == pages - 1) {
|
}
|
||||||
|
else if (page == pages - 1)
|
||||||
|
{
|
||||||
//find number of remaining items
|
//find number of remaining items
|
||||||
//for example, 11 items on page 1... means start=7, 11-7=4
|
//for example, 11 items on page 1... means start=7, 11-7=4
|
||||||
item_t rem = numItems - start;
|
item_t rem = numItems - start;
|
||||||
@ -97,14 +131,18 @@ int Menu::PagekeyToItem(page_t page, item_t key)
|
|||||||
if (key == rem)
|
if (key == rem)
|
||||||
{
|
{
|
||||||
return MENU_EXIT;
|
return MENU_EXIT;
|
||||||
} else if (key == rem+1) {
|
}
|
||||||
|
else if (key == rem + 1)
|
||||||
|
{
|
||||||
return MENU_BACK;
|
return MENU_BACK;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (key == 7)
|
if (key == 7)
|
||||||
{
|
{
|
||||||
return MENU_MORE;
|
return MENU_MORE;
|
||||||
} else if (key == 8) {
|
}
|
||||||
|
else if (key == 8)
|
||||||
|
{
|
||||||
return MENU_BACK;
|
return MENU_BACK;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -147,9 +185,9 @@ const char *Menu::GetTextString(int player, page_t page, int &keys)
|
|||||||
|
|
||||||
char buffer[255];
|
char buffer[255];
|
||||||
if (g_coloredmenus)
|
if (g_coloredmenus)
|
||||||
_snprintf(buffer, sizeof(buffer)-1, "\\y%s %d/%d\n\\w\n", m_Title.c_str(), page+1, pages);
|
_snprintf(buffer, sizeof(buffer)-1, "\\y%s %d/%d\n\\w\n", m_Title.c_str(), page + 1, pages);
|
||||||
else
|
else
|
||||||
_snprintf(buffer, sizeof(buffer)-1, "%s %d/%d\n\n", m_Title.c_str(), page+1, pages);
|
_snprintf(buffer, sizeof(buffer)-1, "%s %d/%d\n\n", m_Title.c_str(), page + 1, pages);
|
||||||
m_Text.append(buffer);
|
m_Text.append(buffer);
|
||||||
|
|
||||||
item_t start = page * 7;
|
item_t start = page * 7;
|
||||||
@ -166,7 +204,7 @@ const char *Menu::GetTextString(int player, page_t page, int &keys)
|
|||||||
keys = 0;
|
keys = 0;
|
||||||
bool enabled = true;
|
bool enabled = true;
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
for (item_t i=start; i<end; i++)
|
for (item_t i = start; i < end; i++)
|
||||||
{
|
{
|
||||||
pItem = m_Items[i];
|
pItem = m_Items[i];
|
||||||
if (pItem->access && !(pItem->access & g_players[player].flags[0]))
|
if (pItem->access && !(pItem->access & g_players[player].flags[0]))
|
||||||
|
@ -31,34 +31,28 @@
|
|||||||
|
|
||||||
#include "amxmodx.h"
|
#include "amxmodx.h"
|
||||||
|
|
||||||
void amx_command(){
|
void amx_command()
|
||||||
|
{
|
||||||
const char* cmd = CMD_ARGV(1);
|
const char* cmd = CMD_ARGV(1);
|
||||||
|
|
||||||
if (!strcmp(cmd,"plugins") || !strcmp(cmd,"list"))
|
if (!strcmp(cmd, "plugins") || !strcmp(cmd, "list"))
|
||||||
{
|
{
|
||||||
|
|
||||||
print_srvconsole( "Currently loaded plugins:\n");
|
print_srvconsole("Currently loaded plugins:\n");
|
||||||
print_srvconsole( " %-18.17s %-8.7s %-17.16s %-16.15s %-9.8s\n",
|
print_srvconsole(" %-18.17s %-8.7s %-17.16s %-16.15s %-9.8s\n", "name", "version", "author", "file", "status");
|
||||||
"name","version","author","file","status");
|
|
||||||
|
|
||||||
int plugins = 0;
|
int plugins = 0;
|
||||||
int running = 0;
|
int running = 0;
|
||||||
|
|
||||||
|
|
||||||
CPluginMngr::iterator a = g_plugins.begin();
|
CPluginMngr::iterator a = g_plugins.begin();
|
||||||
|
|
||||||
while (a)
|
while (a)
|
||||||
{
|
{
|
||||||
++plugins;
|
++plugins;
|
||||||
|
if ((*a).isValid() && !(*a).isPaused())
|
||||||
if ( (*a).isValid() && !(*a).isPaused() )
|
|
||||||
++running;
|
++running;
|
||||||
|
|
||||||
print_srvconsole( " [%3d] %-18.17s %-8.7s %-17.16s %-16.15s %-9.8s\n",
|
print_srvconsole(" [%3d] %-18.17s %-8.7s %-17.16s %-16.15s %-9.8s\n", plugins, (*a).getTitle(), (*a).getVersion(), (*a).getAuthor(), (*a).getName(), (*a).getStatus());
|
||||||
plugins,(*a).getTitle(),(*a).getVersion(),
|
|
||||||
(*a).getAuthor(), (*a).getName(), (*a).getStatus() );
|
|
||||||
|
|
||||||
++a;
|
++a;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -66,7 +60,7 @@ void amx_command(){
|
|||||||
|
|
||||||
while (a)
|
while (a)
|
||||||
{
|
{
|
||||||
if ( (*a).getStatusCode() == ps_bad_load )
|
if ((*a).getStatusCode() == ps_bad_load)
|
||||||
{
|
{
|
||||||
//error
|
//error
|
||||||
print_srvconsole("Load fails: %s\n", (*a).getError());
|
print_srvconsole("Load fails: %s\n", (*a).getError());
|
||||||
@ -74,121 +68,111 @@ void amx_command(){
|
|||||||
++a;
|
++a;
|
||||||
}
|
}
|
||||||
|
|
||||||
print_srvconsole( "%d plugins, %d running\n",plugins,running );
|
print_srvconsole("%d plugins, %d running\n", plugins, running);
|
||||||
|
|
||||||
}
|
}
|
||||||
else if (!strcmp(cmd,"pause") && CMD_ARGC() > 2)
|
else if (!strcmp(cmd, "pause") && CMD_ARGC() > 2)
|
||||||
{
|
{
|
||||||
const char* sPlugin = CMD_ARGV(2);
|
const char* sPlugin = CMD_ARGV(2);
|
||||||
|
|
||||||
CPluginMngr::CPlugin *plugin = g_plugins.findPlugin(sPlugin);
|
CPluginMngr::CPlugin *plugin = g_plugins.findPlugin(sPlugin);
|
||||||
|
|
||||||
if ( plugin && plugin->isValid() )
|
if (plugin && plugin->isValid())
|
||||||
{
|
{
|
||||||
plugin->pausePlugin();
|
plugin->pausePlugin();
|
||||||
print_srvconsole("Paused plugin \"%s\"\n",plugin->getName() );
|
print_srvconsole("Paused plugin \"%s\"\n", plugin->getName());
|
||||||
}
|
}
|
||||||
else print_srvconsole("Couldn't find plugin matching \"%s\"\n",sPlugin);
|
else
|
||||||
|
print_srvconsole("Couldn't find plugin matching \"%s\"\n", sPlugin);
|
||||||
}
|
}
|
||||||
else if (!strcmp(cmd,"unpause") && CMD_ARGC() > 2)
|
else if (!strcmp(cmd, "unpause") && CMD_ARGC() > 2)
|
||||||
{
|
{
|
||||||
const char* sPlugin = CMD_ARGV(2);
|
const char* sPlugin = CMD_ARGV(2);
|
||||||
|
|
||||||
CPluginMngr::CPlugin *plugin = g_plugins.findPlugin(sPlugin);
|
CPluginMngr::CPlugin *plugin = g_plugins.findPlugin(sPlugin);
|
||||||
|
|
||||||
if ( plugin && plugin->isValid() && plugin->isPaused() )
|
if (plugin && plugin->isValid() && plugin->isPaused())
|
||||||
{
|
{
|
||||||
plugin->unpausePlugin();
|
plugin->unpausePlugin();
|
||||||
print_srvconsole("Unpaused plugin \"%s\"\n",plugin->getName() );
|
print_srvconsole("Unpaused plugin \"%s\"\n", plugin->getName());
|
||||||
} else if (!plugin) {
|
}
|
||||||
print_srvconsole("Couldn't find plugin matching \"%s\"\n",sPlugin);
|
else if (!plugin)
|
||||||
|
{
|
||||||
|
print_srvconsole("Couldn't find plugin matching \"%s\"\n", sPlugin);
|
||||||
} else {
|
} else {
|
||||||
print_srvconsole("Plugin %s can't be unpaused right now.", sPlugin);
|
print_srvconsole("Plugin %s can't be unpaused right now.", sPlugin);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
else if (!strcmp(cmd,"cvars"))
|
else if (!strcmp(cmd, "cvars"))
|
||||||
{
|
{
|
||||||
print_srvconsole( "Registered cvars:\n");
|
print_srvconsole("Registered cvars:\n");
|
||||||
print_srvconsole( " %-24.23s %-24.23s %-16.15s\n",
|
print_srvconsole(" %-24.23s %-24.23s %-16.15s\n", "name", "value", "plugin");
|
||||||
"name","value","plugin");
|
|
||||||
|
|
||||||
int ammount = 0;
|
int ammount = 0;
|
||||||
|
|
||||||
for( CList<CCVar>::iterator a = g_cvars.begin(); a ; ++a )
|
for (CList<CCVar>::iterator a = g_cvars.begin(); a; ++a)
|
||||||
{
|
{
|
||||||
print_srvconsole( " [%3d] %-24.23s %-24.23s %-16.15s\n",++ammount,
|
print_srvconsole(" [%3d] %-24.23s %-24.23s %-16.15s\n", ++ammount, (*a).getName(), CVAR_GET_STRING((*a).getName()), (*a).getPluginName());
|
||||||
(*a).getName() ,CVAR_GET_STRING( (*a).getName() ),(*a).getPluginName() );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
print_srvconsole( "%d cvars\n",ammount);
|
print_srvconsole("%d cvars\n", ammount);
|
||||||
}
|
}
|
||||||
else if ( !strcmp(cmd,"cmds") )
|
else if (!strcmp(cmd, "cmds"))
|
||||||
{
|
{
|
||||||
|
print_srvconsole("Registered commands:\n");
|
||||||
print_srvconsole( "Registered commands:\n");
|
print_srvconsole(" %-24.23s %-16.15s %-8.7s %-16.15s\n", "name", "access", "type", "plugin");
|
||||||
print_srvconsole( " %-24.23s %-16.15s %-8.7s %-16.15s\n",
|
|
||||||
"name","access" ,"type" ,"plugin");
|
|
||||||
|
|
||||||
int ammount = 0;
|
int ammount = 0;
|
||||||
|
|
||||||
char access[32];
|
char access[32];
|
||||||
|
|
||||||
CmdMngr::iterator a = g_commands.begin( CMD_ConsoleCommand );
|
CmdMngr::iterator a = g_commands.begin(CMD_ConsoleCommand);
|
||||||
|
|
||||||
while( a )
|
while (a)
|
||||||
{
|
{
|
||||||
UTIL_GetFlags( access , (*a).getFlags() );
|
UTIL_GetFlags(access, (*a).getFlags());
|
||||||
print_srvconsole( " [%3d] %-24.23s %-16.15s %-8.7s %-16.15s\n",
|
print_srvconsole(" [%3d] %-24.23s %-16.15s %-8.7s %-16.15s\n", ++ammount, (*a).getCmdLine(), access, (*a).getCmdType(), (*a).getPlugin()->getName());
|
||||||
++ammount,(*a).getCmdLine() , access , (*a).getCmdType() , (*a).getPlugin()->getName());
|
|
||||||
++a;
|
++a;
|
||||||
}
|
}
|
||||||
|
|
||||||
print_srvconsole( "%d commands\n",ammount);
|
print_srvconsole("%d commands\n",ammount);
|
||||||
}
|
}
|
||||||
else if (!strcmp(cmd,"version"))
|
else if (!strcmp(cmd, "version"))
|
||||||
{
|
{
|
||||||
|
print_srvconsole("%s %s\n", Plugin_info.name, Plugin_info.version);
|
||||||
print_srvconsole( "%s %s\n", Plugin_info.name, Plugin_info.version);
|
print_srvconsole("Authors: %s (%s)\n", "Felix \"SniperBeamer\" Geyer, David \"BAILOPAN\" Anderson, Pavol \"PM OnoTo\" Marko, Jonny \"Got His Gun\" Bergstrom, and Lukasz \"SidLuke\" Wlasinski.", Plugin_info.url);
|
||||||
print_srvconsole( "Authors: %s (%s)\n", "Felix \"SniperBeamer\" Geyer, David \"BAILOPAN\" Anderson, Pavol \"PM OnoTo\" Marko, Jonny \"Got His Gun\" Bergstrom, and Lukasz \"SidLuke\" Wlasinski.", Plugin_info.url);
|
print_srvconsole("Compiled: %s\n", __DATE__ ", " __TIME__);
|
||||||
print_srvconsole( "Compiled: %s\n", __DATE__ ", " __TIME__);
|
|
||||||
#if defined JIT && !defined ASM32
|
#if defined JIT && !defined ASM32
|
||||||
print_srvconsole( "Core mode: JIT Only\n");
|
print_srvconsole("Core mode: JIT Only\n");
|
||||||
#elif !defined JIT && defined ASM32
|
#elif !defined JIT && defined ASM32
|
||||||
print_srvconsole( "Core mode: ASM32 Only\n");
|
print_srvconsole("Core mode: ASM32 Only\n");
|
||||||
#elif defined JIT && defined ASM32
|
#elif defined JIT && defined ASM32
|
||||||
print_srvconsole( "Core mode: JIT+ASM32\n");
|
print_srvconsole("Core mode: JIT+ASM32\n");
|
||||||
#else
|
#else
|
||||||
print_srvconsole( "Core mode: Normal\n");
|
print_srvconsole("Core mode: Normal\n");
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
else if (!strcmp(cmd,"modules"))
|
else if (!strcmp(cmd, "modules"))
|
||||||
{
|
{
|
||||||
print_srvconsole( "Currently loaded modules:\n");
|
print_srvconsole("Currently loaded modules:\n");
|
||||||
print_srvconsole( " %-23.22s %-8.7s %-20.19s %-11.10s\n",
|
print_srvconsole(" %-23.22s %-8.7s %-20.19s %-11.10s\n", "name", "version", "author", "status");
|
||||||
"name", "version", "author", "status");
|
|
||||||
|
|
||||||
int running = 0;
|
int running = 0;
|
||||||
int modules = 0;
|
int modules = 0;
|
||||||
|
|
||||||
CList<CModule,const char *>::iterator a = g_modules.begin();
|
CList<CModule,const char *>::iterator a = g_modules.begin();
|
||||||
|
|
||||||
while ( a )
|
while (a)
|
||||||
{
|
{
|
||||||
if ( (*a).getStatusValue() == MODULE_LOADED )
|
if ((*a).getStatusValue() == MODULE_LOADED)
|
||||||
++running;
|
++running;
|
||||||
|
|
||||||
++modules;
|
++modules;
|
||||||
|
|
||||||
print_srvconsole( " [%2d] %-23.22s %-8.7s %-20.19s %-11.10s\n", modules,
|
print_srvconsole(" [%2d] %-23.22s %-8.7s %-20.19s %-11.10s\n", modules, (*a).getName(), (*a).getVersion(), (*a).getAuthor(), (*a).getStatus());
|
||||||
(*a).getName(), (*a).getVersion(), (*a).getAuthor() , (*a).getStatus() );
|
|
||||||
|
|
||||||
++a;
|
++a;
|
||||||
}
|
}
|
||||||
|
|
||||||
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");
|
||||||
@ -245,11 +229,7 @@ void amx_command(){
|
|||||||
print_srvconsole("\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3A\x78\x78\x24\x40\x4E\x4E\x4D\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x5E\x3E\x3E\x3F\x3E\x3E\x3E\x3E\x3B\x3B\x3B\x3A\x3A\x3F\x3E\x3A\x2E\x2E\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x2E\x45\x4D\x40\x45\x78\x5E\x33\x68\x33\x2B\n");
|
print_srvconsole("\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3A\x78\x78\x24\x40\x4E\x4E\x4D\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x5E\x3E\x3E\x3F\x3E\x3E\x3E\x3E\x3B\x3B\x3B\x3A\x3A\x3F\x3E\x3A\x2E\x2E\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x2E\x45\x4D\x40\x45\x78\x5E\x33\x68\x33\x2B\n");
|
||||||
print_srvconsole("\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x24\x48\x45\x48\x78\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x2B\x4E\x40\x2B\x66\x33\x78\x20\x20\n");
|
print_srvconsole("\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x24\x48\x45\x48\x78\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x2B\x4E\x40\x2B\x66\x33\x78\x20\x20\n");
|
||||||
print_srvconsole("\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x2B\x2C\x20\x3A\x20\x20\n");
|
print_srvconsole("\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x2B\x2C\x20\x3A\x20\x20\n");
|
||||||
}
|
} else {
|
||||||
else
|
|
||||||
{
|
|
||||||
|
|
||||||
|
|
||||||
print_srvconsole("Usage: amxx < command > [ argument ]\n");
|
print_srvconsole("Usage: amxx < command > [ argument ]\n");
|
||||||
print_srvconsole("Commands:\n");
|
print_srvconsole("Commands:\n");
|
||||||
print_srvconsole(" version - display amxx version info\n");
|
print_srvconsole(" version - display amxx version info\n");
|
||||||
@ -260,11 +240,9 @@ void amx_command(){
|
|||||||
print_srvconsole(" cmds - list commands registered by plugins\n");
|
print_srvconsole(" cmds - list commands registered by plugins\n");
|
||||||
print_srvconsole(" pause < plugin > - pause a running plugin\n");
|
print_srvconsole(" pause < plugin > - pause a running plugin\n");
|
||||||
print_srvconsole(" unpause < plugin > - unpause a previously paused plugin\n");
|
print_srvconsole(" unpause < plugin > - unpause a previously paused plugin\n");
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void plugin_srvcmd()
|
void plugin_srvcmd()
|
||||||
{
|
{
|
||||||
cell ret = 0;
|
cell ret = 0;
|
||||||
@ -272,13 +250,12 @@ void plugin_srvcmd()
|
|||||||
|
|
||||||
CmdMngr::iterator a = g_commands.srvcmdbegin();
|
CmdMngr::iterator a = g_commands.srvcmdbegin();
|
||||||
|
|
||||||
while ( a )
|
while (a)
|
||||||
{
|
{
|
||||||
if ( (*a).matchCommand( cmd ) &&
|
if ((*a).matchCommand(cmd) && (*a).getPlugin()->isExecutable((*a).getFunction()))
|
||||||
(*a).getPlugin()->isExecutable( (*a).getFunction() ) )
|
|
||||||
{
|
{
|
||||||
cell ret = executeForwards((*a).getFunction(), g_srvindex, (*a).getFlags(), (*a).getId());
|
cell ret = executeForwards((*a).getFunction(), g_srvindex, (*a).getFlags(), (*a).getId());
|
||||||
if ( ret ) break;
|
if (ret) break;
|
||||||
}
|
}
|
||||||
++a;
|
++a;
|
||||||
}
|
}
|
||||||
|
@ -32,19 +32,20 @@
|
|||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
#include "amxmodx.h"
|
#include "amxmodx.h"
|
||||||
|
|
||||||
const char* stristr(const char* str,const char* substr)
|
const char* stristr(const char* str, const char* substr)
|
||||||
{
|
{
|
||||||
register char *needle = (char *)substr;
|
register char *needle = (char *)substr;
|
||||||
register char *prevloc = (char *)str;
|
register char *prevloc = (char *)str;
|
||||||
register char *haystack = (char *)str;
|
register char *haystack = (char *)str;
|
||||||
|
|
||||||
while (*haystack) {
|
while (*haystack)
|
||||||
if (tolower(*haystack) == tolower(*needle)) {
|
{
|
||||||
|
if (tolower(*haystack) == tolower(*needle))
|
||||||
|
{
|
||||||
haystack++;
|
haystack++;
|
||||||
if (!*++needle)
|
if (!*++needle)
|
||||||
return prevloc;
|
return prevloc;
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
haystack = ++prevloc;
|
haystack = ++prevloc;
|
||||||
needle = (char *)substr;
|
needle = (char *)substr;
|
||||||
}
|
}
|
||||||
@ -53,7 +54,7 @@ const char* stristr(const char* str,const char* substr)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
char* format_amxstring(AMX *amx, cell *params, int parm,int& len)
|
char* format_amxstring(AMX *amx, cell *params, int parm, int& len)
|
||||||
{
|
{
|
||||||
return g_langMngr.FormatAmxString(amx, params, parm, len);
|
return g_langMngr.FormatAmxString(amx, params, parm, len);
|
||||||
}
|
}
|
||||||
@ -62,71 +63,86 @@ int amxstring_len(cell* a)
|
|||||||
{
|
{
|
||||||
register int c = 0;
|
register int c = 0;
|
||||||
|
|
||||||
while( a[ c ] )
|
while (a[c])
|
||||||
++c;
|
++c;
|
||||||
|
|
||||||
return c;
|
return c;
|
||||||
}
|
}
|
||||||
|
|
||||||
cell* get_amxaddr(AMX *amx,cell amx_addr)
|
cell* get_amxaddr(AMX *amx, cell amx_addr)
|
||||||
{
|
{
|
||||||
return (cell *)(amx->base + (int)(((AMX_HEADER *)amx->base)->dat + amx_addr));
|
return (cell *)(amx->base + (int)(((AMX_HEADER *)amx->base)->dat + amx_addr));
|
||||||
}
|
}
|
||||||
|
|
||||||
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)
|
||||||
{
|
{
|
||||||
cell* dest = (cell *)(amx->base + (int)(((AMX_HEADER *)amx->base)->dat + amx_addr));
|
cell* dest = (cell *)(amx->base + (int)(((AMX_HEADER *)amx->base)->dat + amx_addr));
|
||||||
cell* start = dest;
|
cell* start = dest;
|
||||||
while (max--&&*source)
|
|
||||||
*dest++=(cell)*source++;
|
while (max-- && *source)
|
||||||
|
*dest++ = (cell)*source++;
|
||||||
|
|
||||||
*dest = 0;
|
*dest = 0;
|
||||||
return dest-start;
|
|
||||||
|
return dest - start;
|
||||||
}
|
}
|
||||||
|
|
||||||
char* get_amxstring(AMX *amx,cell amx_addr,int id, int& len)
|
char* get_amxstring(AMX *amx, cell amx_addr, int id, int& len)
|
||||||
{
|
{
|
||||||
static char buffor[4][3072];
|
static char buffor[4][3072];
|
||||||
register cell* source = (cell *)(amx->base + (int)(((AMX_HEADER *)amx->base)->dat + amx_addr));
|
register cell* source = (cell *)(amx->base + (int)(((AMX_HEADER *)amx->base)->dat + amx_addr));
|
||||||
register char* dest = buffor[id];
|
register char* dest = buffor[id];
|
||||||
char* start = dest;
|
char* start = dest;
|
||||||
while ((*dest++=(char)(*source++)))
|
|
||||||
;
|
while ((*dest++=(char)(*source++)));
|
||||||
|
|
||||||
len = --dest - start;
|
len = --dest - start;
|
||||||
|
|
||||||
return start;
|
return start;
|
||||||
}
|
}
|
||||||
|
|
||||||
void copy_amxmemory(cell* dest,cell* src,int len)
|
void copy_amxmemory(cell* dest, cell* src, int len)
|
||||||
{
|
{
|
||||||
while (len--)
|
while (len--)
|
||||||
*dest++=*src++;
|
*dest++=*src++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
char* parse_arg(char** line,int& state)
|
char* parse_arg(char** line, int& state)
|
||||||
{
|
{
|
||||||
static char arg[3072];
|
static char arg[3072];
|
||||||
char* dest = arg;
|
char* dest = arg;
|
||||||
state = 0;
|
state = 0;
|
||||||
while(**line) {
|
|
||||||
if ( isspace(**line) ) {
|
while (**line)
|
||||||
|
{
|
||||||
|
if (isspace(**line))
|
||||||
|
{
|
||||||
if (state == 1)
|
if (state == 1)
|
||||||
break;
|
break;
|
||||||
else if (!state) {
|
else if (!state)
|
||||||
|
{
|
||||||
(*line)++;
|
(*line)++;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (state != 2)
|
else if (state != 2)
|
||||||
state = 1;
|
state = 1;
|
||||||
if (**line=='"') {
|
|
||||||
|
if (**line == '"')
|
||||||
|
{
|
||||||
(*line)++;
|
(*line)++;
|
||||||
|
|
||||||
if (state == 2)
|
if (state == 2)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
state = 2;
|
state = 2;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
*dest++ = *(*line)++;
|
*dest++ = *(*line)++;
|
||||||
}
|
}
|
||||||
|
|
||||||
*dest = '\0';
|
*dest = '\0';
|
||||||
return arg;
|
return arg;
|
||||||
}
|
}
|
||||||
@ -134,89 +150,107 @@ char* parse_arg(char** line,int& state)
|
|||||||
static cell AMX_NATIVE_CALL replace(AMX *amx, cell *params) /* 4 param */
|
static cell AMX_NATIVE_CALL replace(AMX *amx, cell *params) /* 4 param */
|
||||||
{
|
{
|
||||||
static char buffor[3072];
|
static char buffor[3072];
|
||||||
cell *a = get_amxaddr(amx,params[1]);
|
cell *a = get_amxaddr(amx, params[1]);
|
||||||
cell *b = get_amxaddr(amx,params[3]);
|
cell *b = get_amxaddr(amx, params[3]);
|
||||||
cell *c = get_amxaddr(amx,params[4]);
|
cell *c = get_amxaddr(amx, params[4]);
|
||||||
int iMain = amxstring_len(a);
|
int iMain = amxstring_len(a);
|
||||||
int iWhat = amxstring_len(b);
|
int iWhat = amxstring_len(b);
|
||||||
int iWith = amxstring_len(c);
|
int iWith = amxstring_len(c);
|
||||||
int iPot = iMain + iWith - iWhat;
|
int iPot = iMain + iWith - iWhat;
|
||||||
if (iPot>=params[2]){
|
|
||||||
|
if (iPot >= params[2])
|
||||||
|
{
|
||||||
amx_RaiseError(amx,AMX_ERR_NATIVE);
|
amx_RaiseError(amx,AMX_ERR_NATIVE);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
char *d = buffor;
|
char *d = buffor;
|
||||||
cell *x, *y, *z = a, *l = a;
|
cell *x, *y, *z = a, *l = a;
|
||||||
int p = 0;
|
int p = 0;
|
||||||
while(*a){
|
|
||||||
if (*a==*b){
|
while (*a)
|
||||||
x=a+1;
|
{
|
||||||
y=b+1;
|
if (*a == *b)
|
||||||
p=1;
|
{
|
||||||
|
x = a + 1;
|
||||||
|
y = b + 1;
|
||||||
|
p = 1;
|
||||||
if (!*y) break;
|
if (!*y) break;
|
||||||
while(*x==*y){
|
|
||||||
|
while (*x == *y)
|
||||||
|
{
|
||||||
x++; y++; p++;
|
x++; y++; p++;
|
||||||
if (!*y) break;
|
if (!*y) break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!*y) break;
|
if (!*y) break;
|
||||||
p = 0;
|
p = 0;
|
||||||
*d++=(char)*a++;
|
*d++ = (char)*a++;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
*d++=(char)*a++;
|
*d++ = (char)*a++;
|
||||||
}
|
}
|
||||||
if (p){
|
|
||||||
while(*c) *d++=(char)*c++;
|
if (p)
|
||||||
a+=p;
|
{
|
||||||
while(*a) *d++=(char)*a++;
|
while (*c) *d++ = (char)*c++;
|
||||||
*d=0;
|
a += p;
|
||||||
|
while (*a) *d++ = (char)*a++;
|
||||||
|
*d = 0;
|
||||||
d = buffor;
|
d = buffor;
|
||||||
while(*d) *z++=*d++;
|
while (*d) *z++ = *d++;
|
||||||
*z=0;
|
*z = 0;
|
||||||
return (z-l);
|
return (z - l);
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static cell AMX_NATIVE_CALL contain(AMX *amx, cell *params) /* 2 param */
|
static cell AMX_NATIVE_CALL contain(AMX *amx, cell *params) /* 2 param */
|
||||||
{
|
{
|
||||||
register cell *a = get_amxaddr(amx,params[2]);
|
register cell *a = get_amxaddr(amx, params[2]);
|
||||||
register cell *b = get_amxaddr(amx,params[1]);
|
register cell *b = get_amxaddr(amx, params[1]);
|
||||||
register cell *c = b;
|
register cell *c = b;
|
||||||
cell* str = b;
|
cell* str = b;
|
||||||
cell* substr = a;
|
cell* substr = a;
|
||||||
while (*c) {
|
|
||||||
if (*c == *a) {
|
while (*c)
|
||||||
|
{
|
||||||
|
if (*c == *a)
|
||||||
|
{
|
||||||
c++;
|
c++;
|
||||||
if (!*++a)
|
if (!*++a)
|
||||||
return b - str;
|
return b - str;
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
c = ++b;
|
c = ++b;
|
||||||
a = substr;
|
a = substr;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static cell AMX_NATIVE_CALL containi(AMX *amx, cell *params) /* 2 param */
|
static cell AMX_NATIVE_CALL containi(AMX *amx, cell *params) /* 2 param */
|
||||||
{
|
{
|
||||||
register cell *a = get_amxaddr(amx,params[2]);
|
register cell *a = get_amxaddr(amx, params[2]);
|
||||||
register cell *b = get_amxaddr(amx,params[1]);
|
register cell *b = get_amxaddr(amx, params[1]);
|
||||||
register cell *c = b;
|
register cell *c = b;
|
||||||
cell* str = b;
|
cell* str = b;
|
||||||
cell* substr = a;
|
cell* substr = a;
|
||||||
while (*c) {
|
|
||||||
if (tolower(*c) == tolower(*a)) {
|
while (*c)
|
||||||
|
{
|
||||||
|
if (tolower(*c) == tolower(*a))
|
||||||
|
{
|
||||||
c++;
|
c++;
|
||||||
if (!*++a)
|
if (!*++a)
|
||||||
return b - str;
|
return b - str;
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
c = ++b;
|
c = ++b;
|
||||||
a = substr;
|
a = substr;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -237,7 +271,7 @@ static cell AMX_NATIVE_CALL str_to_float(AMX *amx, cell *params)
|
|||||||
{
|
{
|
||||||
cell *str = get_amxaddr(amx, params[1]);
|
cell *str = get_amxaddr(amx, params[1]);
|
||||||
|
|
||||||
bool neg=false;
|
bool neg = false;
|
||||||
unsigned long part1 = 0;
|
unsigned long part1 = 0;
|
||||||
|
|
||||||
if (*str == '-')
|
if (*str == '-')
|
||||||
@ -255,6 +289,7 @@ static cell AMX_NATIVE_CALL str_to_float(AMX *amx, cell *params)
|
|||||||
++str;
|
++str;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (*str < '0' || *str > '9')
|
if (*str < '0' || *str > '9')
|
||||||
{
|
{
|
||||||
REAL fl = neg ? -static_cast<REAL>(part1) : static_cast<REAL>(part1);
|
REAL fl = neg ? -static_cast<REAL>(part1) : static_cast<REAL>(part1);
|
||||||
@ -269,6 +304,7 @@ static cell AMX_NATIVE_CALL str_to_float(AMX *amx, cell *params)
|
|||||||
|
|
||||||
unsigned long part2 = 0;
|
unsigned long part2 = 0;
|
||||||
unsigned long div = 1;
|
unsigned long div = 1;
|
||||||
|
|
||||||
while (*str)
|
while (*str)
|
||||||
{
|
{
|
||||||
if (*str < '0' || *str > '9')
|
if (*str < '0' || *str > '9')
|
||||||
@ -281,8 +317,10 @@ static cell AMX_NATIVE_CALL str_to_float(AMX *amx, cell *params)
|
|||||||
}
|
}
|
||||||
|
|
||||||
REAL fl = static_cast<REAL>(part1) + (static_cast<REAL>(part2) / div);
|
REAL fl = static_cast<REAL>(part1) + (static_cast<REAL>(part2) / div);
|
||||||
|
|
||||||
if (neg)
|
if (neg)
|
||||||
fl = -fl;
|
fl = -fl;
|
||||||
|
|
||||||
return amx_ftoc(fl);
|
return amx_ftoc(fl);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -295,216 +333,264 @@ static cell AMX_NATIVE_CALL float_to_str(AMX *amx, cell *params)
|
|||||||
|
|
||||||
static cell AMX_NATIVE_CALL add(AMX *amx, cell *params) /* 4 param */
|
static cell AMX_NATIVE_CALL add(AMX *amx, cell *params) /* 4 param */
|
||||||
{
|
{
|
||||||
cell *src = get_amxaddr(amx,params[3]);
|
cell *src = get_amxaddr(amx, params[3]);
|
||||||
cell *dest = get_amxaddr(amx,params[1]);
|
cell *dest = get_amxaddr(amx, params[1]);
|
||||||
cell *start = dest;
|
cell *start = dest;
|
||||||
int c = params[2], d = params[4];
|
int c = params[2], d = params[4];
|
||||||
while(*dest&&c--)
|
|
||||||
|
while (*dest && c--)
|
||||||
++dest;
|
++dest;
|
||||||
if (d){
|
|
||||||
while(c--&&d--&&*src)
|
if (d)
|
||||||
*dest++=*src++;
|
{
|
||||||
*dest=0;
|
while (c-- && d-- && *src)
|
||||||
return (dest-start);
|
*dest++ =* src++;
|
||||||
|
*dest = 0;
|
||||||
|
|
||||||
|
return (dest - start);
|
||||||
}
|
}
|
||||||
while(c--&&*src)
|
|
||||||
*dest++=*src++;
|
while (c-- && *src)
|
||||||
*dest=0;
|
*dest++ =* src++;
|
||||||
|
*dest = 0;
|
||||||
|
|
||||||
return (dest-start);
|
return (dest-start);
|
||||||
}
|
}
|
||||||
|
|
||||||
static cell AMX_NATIVE_CALL copy(AMX *amx, cell *params) /* 4 param */
|
static cell AMX_NATIVE_CALL copy(AMX *amx, cell *params) /* 4 param */
|
||||||
{
|
{
|
||||||
cell *src = get_amxaddr(amx,params[3]);
|
cell *src = get_amxaddr(amx, params[3]);
|
||||||
cell *dest = get_amxaddr(amx,params[1]);
|
cell *dest = get_amxaddr(amx, params[1]);
|
||||||
cell *start = dest;
|
cell *start = dest;
|
||||||
int c = params[2];
|
int c = params[2];
|
||||||
while(c--&&*src)
|
|
||||||
*dest++=*src++;
|
while (c-- && *src)
|
||||||
*dest=0;
|
*dest++ =* src++;
|
||||||
return (dest-start);
|
*dest = 0;
|
||||||
|
|
||||||
|
return (dest - start);
|
||||||
}
|
}
|
||||||
|
|
||||||
static cell AMX_NATIVE_CALL copyc(AMX *amx, cell *params) /* 4 param */
|
static cell AMX_NATIVE_CALL copyc(AMX *amx, cell *params) /* 4 param */
|
||||||
{
|
{
|
||||||
cell *src = get_amxaddr(amx,params[3]);
|
cell *src = get_amxaddr(amx, params[3]);
|
||||||
cell *dest = get_amxaddr(amx,params[1]);
|
cell *dest = get_amxaddr(amx, params[1]);
|
||||||
cell *start = dest;
|
cell *start = dest;
|
||||||
int c = params[2];
|
int c = params[2];
|
||||||
cell ch = params[4];
|
cell ch = params[4];
|
||||||
while(c--&&*src&&*src!=ch)
|
|
||||||
*dest++=*src++;
|
while (c-- && *src && *src != ch)
|
||||||
*dest=0;
|
*dest++ =* src++;
|
||||||
return (dest-start);
|
*dest = 0;
|
||||||
|
|
||||||
|
return (dest - start);
|
||||||
}
|
}
|
||||||
|
|
||||||
static cell AMX_NATIVE_CALL setc(AMX *amx, cell *params) /* 4 param */
|
static cell AMX_NATIVE_CALL setc(AMX *amx, cell *params) /* 4 param */
|
||||||
{
|
{
|
||||||
cell *src = get_amxaddr(amx,params[1]);
|
cell *src = get_amxaddr(amx, params[1]);
|
||||||
int c = params[2];
|
int c = params[2];
|
||||||
cell ch = params[3];
|
cell ch = params[3];
|
||||||
while(c--)
|
|
||||||
*src++=ch;
|
while (c--)
|
||||||
|
*src++ = ch;
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static cell AMX_NATIVE_CALL equal(AMX *amx, cell *params) /* 3 param */
|
static cell AMX_NATIVE_CALL equal(AMX *amx, cell *params) /* 3 param */
|
||||||
{
|
{
|
||||||
cell *a = get_amxaddr(amx,params[1]);
|
cell *a = get_amxaddr(amx, params[1]);
|
||||||
cell *b = get_amxaddr(amx,params[2]);
|
cell *b = get_amxaddr(amx, params[2]);
|
||||||
int c = params[3];
|
int c = params[3];
|
||||||
if (c) {
|
|
||||||
while (--c&&*a&&(*a==*b))
|
if (c)
|
||||||
|
{
|
||||||
|
while (--c && *a && (*a == *b))
|
||||||
++a, ++b;
|
++a, ++b;
|
||||||
return (*a-*b)?0:1;
|
return (*a-*b)?0:1;
|
||||||
}
|
}
|
||||||
|
|
||||||
int ret;
|
int ret;
|
||||||
while(!(ret=*a-*b)&&*b)
|
|
||||||
|
while (!(ret = *a - *b) && *b)
|
||||||
++a, ++b;
|
++a, ++b;
|
||||||
return ret?0:1;
|
|
||||||
|
return ret ? 0 : 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static cell AMX_NATIVE_CALL equali(AMX *amx, cell *params) /* 3 param */
|
static cell AMX_NATIVE_CALL equali(AMX *amx, cell *params) /* 3 param */
|
||||||
{
|
{
|
||||||
cell *a = get_amxaddr(amx,params[1]);
|
cell *a = get_amxaddr(amx, params[1]);
|
||||||
cell *b = get_amxaddr(amx,params[2]);
|
cell *b = get_amxaddr(amx, params[2]);
|
||||||
int f,l, c = params[3];
|
int f, l, c = params[3];
|
||||||
if (c) {
|
|
||||||
do {
|
if (c)
|
||||||
|
{
|
||||||
|
do
|
||||||
|
{
|
||||||
f = tolower(*a++);
|
f = tolower(*a++);
|
||||||
l = tolower(*b++);
|
l = tolower(*b++);
|
||||||
|
} while (--c && l && f && f == l);
|
||||||
|
|
||||||
|
return (f - l) ? 0 : 1;
|
||||||
}
|
}
|
||||||
while (--c &&l&&f&& f==l);
|
|
||||||
return(f - l)?0:1;
|
do
|
||||||
}
|
{
|
||||||
do {
|
|
||||||
f = tolower(*a++);
|
f = tolower(*a++);
|
||||||
l = tolower(*b++);
|
l = tolower(*b++);
|
||||||
} while (f && f == l);
|
} while (f && f == l);
|
||||||
return (f - l)?0:1;
|
|
||||||
|
return (f - l) ? 0 : 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static cell AMX_NATIVE_CALL format(AMX *amx, cell *params) /* 3 param */
|
static cell AMX_NATIVE_CALL format(AMX *amx, cell *params) /* 3 param */
|
||||||
{
|
{
|
||||||
int len;
|
int len;
|
||||||
return set_amxstring(amx,params[1],format_amxstring(amx,params,3,len),params[2]);
|
return set_amxstring(amx, params[1], format_amxstring(amx, params, 3, len), params[2]);
|
||||||
}
|
}
|
||||||
|
|
||||||
static cell AMX_NATIVE_CALL parse(AMX *amx, cell *params) /* 3 param */
|
static cell AMX_NATIVE_CALL parse(AMX *amx, cell *params) /* 3 param */
|
||||||
{
|
{
|
||||||
int inum = *params/sizeof(cell), iarg = 2, c;
|
int inum = *params / sizeof(cell), iarg = 2, c;
|
||||||
char* arg, *parse = get_amxstring(amx,params[1],0,c);
|
char* arg, *parse = get_amxstring(amx, params[1], 0, c);
|
||||||
cell *cptr;
|
cell *cptr;
|
||||||
int state;
|
int state;
|
||||||
while(*parse){
|
|
||||||
|
while (*parse)
|
||||||
|
{
|
||||||
arg = parse_arg(&parse,state);
|
arg = parse_arg(&parse,state);
|
||||||
if (state){
|
|
||||||
|
if (state)
|
||||||
|
{
|
||||||
if (inum <= iarg)
|
if (inum <= iarg)
|
||||||
return( (iarg-2)>>1 );
|
return ((iarg - 2)>>1);
|
||||||
cptr = get_amxaddr(amx,params[iarg++]);
|
|
||||||
c = *get_amxaddr(amx,params[iarg++]);
|
cptr = get_amxaddr(amx, params[iarg++]);
|
||||||
while(c--&&*arg)
|
c = *get_amxaddr(amx, params[iarg++]);
|
||||||
*cptr++=(cell)*arg++;
|
|
||||||
*cptr=0;
|
while (c-- && *arg)
|
||||||
|
*cptr++ = (cell)*arg++;
|
||||||
|
*cptr = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return( (iarg-2)>>1 );
|
return ((iarg - 2)>>1);
|
||||||
}
|
}
|
||||||
|
|
||||||
static cell AMX_NATIVE_CALL strtolower(AMX *amx, cell *params) /* 1 param */
|
static cell AMX_NATIVE_CALL strtolower(AMX *amx, cell *params) /* 1 param */
|
||||||
{
|
{
|
||||||
cell *cptr = get_amxaddr(amx,params[1]);
|
cell *cptr = get_amxaddr(amx, params[1]);
|
||||||
cell *begin = cptr;
|
cell *begin = cptr;
|
||||||
while(*cptr){
|
|
||||||
|
while (*cptr)
|
||||||
|
{
|
||||||
*cptr = tolower(*cptr);
|
*cptr = tolower(*cptr);
|
||||||
cptr++;
|
cptr++;
|
||||||
}
|
}
|
||||||
|
|
||||||
return cptr - begin;
|
return cptr - begin;
|
||||||
}
|
}
|
||||||
|
|
||||||
static cell AMX_NATIVE_CALL strtoupper(AMX *amx, cell *params) /* 1 param */
|
static cell AMX_NATIVE_CALL strtoupper(AMX *amx, cell *params) /* 1 param */
|
||||||
{
|
{
|
||||||
cell *cptr = get_amxaddr(amx,params[1]);
|
cell *cptr = get_amxaddr(amx, params[1]);
|
||||||
cell *begin = cptr;
|
cell *begin = cptr;
|
||||||
while(*cptr){
|
|
||||||
|
while (*cptr)
|
||||||
|
{
|
||||||
*cptr = toupper(*cptr);
|
*cptr = toupper(*cptr);
|
||||||
cptr++;
|
cptr++;
|
||||||
}
|
}
|
||||||
|
|
||||||
return cptr - begin;
|
return cptr - begin;
|
||||||
}
|
}
|
||||||
|
|
||||||
int fo_numargs(AMX *amx)
|
int fo_numargs(AMX *amx)
|
||||||
{
|
{
|
||||||
unsigned char *data =amx->base+(int)((AMX_HEADER *)amx->base)->dat;
|
unsigned char *data = amx->base + (int)((AMX_HEADER *)amx->base)->dat;
|
||||||
cell bytes= * (cell *)(data+(int)amx->frm+2*sizeof(cell));
|
cell bytes= *(cell *)(data + (int)amx->frm + 2 * sizeof(cell));
|
||||||
return (int)(bytes/sizeof(cell));
|
return (int)(bytes / sizeof(cell));
|
||||||
}
|
}
|
||||||
|
|
||||||
int fo_getargnum(AMX *amx, int pos)
|
int fo_getargnum(AMX *amx, int pos)
|
||||||
{
|
{
|
||||||
unsigned char *data =amx->base+(int)((AMX_HEADER *)amx->base)->dat;
|
unsigned char *data = amx->base + (int)((AMX_HEADER *)amx->base)->dat;
|
||||||
cell value = * (cell *)(data+(int)amx->frm+(pos+3)*sizeof(cell));
|
cell value = *(cell *)(data + (int)amx->frm + (pos + 3) * sizeof(cell));
|
||||||
return *(cell *)(data+(int)value);
|
return *(cell *)(data + (int)value);
|
||||||
}
|
}
|
||||||
|
|
||||||
float fo_getargfloat(AMX *amx, int pos)
|
float fo_getargfloat(AMX *amx, int pos)
|
||||||
{
|
{
|
||||||
unsigned char *data =amx->base+(int)((AMX_HEADER *)amx->base)->dat;
|
unsigned char *data = amx->base + (int)((AMX_HEADER *)amx->base)->dat;
|
||||||
cell value = * (cell *)(data+(int)amx->frm+(pos+3)*sizeof(cell));
|
cell value = *(cell *)(data + (int)amx->frm + (pos + 3) * sizeof(cell));
|
||||||
cell number = *(cell *)(data+(int)value);
|
cell number = *(cell *)(data + (int)value);
|
||||||
return *(REAL *)((void *)&number);
|
return *(REAL *)((void *)&number);
|
||||||
}
|
}
|
||||||
|
|
||||||
char* fo_getargstr(AMX *amx, int swap, int pos)
|
char* fo_getargstr(AMX *amx, int swap, int pos)
|
||||||
{
|
{
|
||||||
unsigned char *data =amx->base+(int)((AMX_HEADER *)amx->base)->dat;
|
unsigned char *data = amx->base + (int)((AMX_HEADER *)amx->base)->dat;
|
||||||
cell src_value= * (cell *)(data+(int)amx->frm+(pos+3)*sizeof(cell));
|
cell src_value= *(cell *)(data + (int)amx->frm + (pos + 3) * sizeof(cell));
|
||||||
cell value;
|
cell value;
|
||||||
static char buffer[2][3072];
|
static char buffer[2][3072];
|
||||||
char* b = buffer[swap];
|
char* b = buffer[swap];
|
||||||
int a = 0;
|
int a = 0;
|
||||||
do {
|
|
||||||
|
do
|
||||||
|
{
|
||||||
value = src_value + a++ * sizeof(cell);
|
value = src_value + a++ * sizeof(cell);
|
||||||
value = *(cell *)(data+(int)value);
|
value = *(cell *)(data + (int)value);
|
||||||
*b++ = static_cast<char>(value);
|
*b++ = static_cast<char>(value);
|
||||||
} while (value);
|
} while (value);
|
||||||
|
|
||||||
return buffer[swap];
|
return buffer[swap];
|
||||||
}
|
}
|
||||||
|
|
||||||
char* format_arguments(AMX *amx, int parm,int& len)
|
char* format_arguments(AMX *amx, int parm, int& len)
|
||||||
{
|
{
|
||||||
static char buffer[2][3072];
|
static char buffer[2][3072];
|
||||||
static char format[16];
|
static char format[16];
|
||||||
char *ptr,*arg, *dest = *buffer;
|
char *ptr, *arg, *dest = *buffer;
|
||||||
char *src = fo_getargstr(amx, 0,parm++);
|
char *src = fo_getargstr(amx, 0, parm++);
|
||||||
int numparam = fo_numargs(amx);
|
int numparam = fo_numargs(amx);
|
||||||
while(*src) {
|
|
||||||
if (*src=='%'&&*(src+1)) {
|
while (*src)
|
||||||
|
{
|
||||||
|
if (*src == '%' && *(src + 1))
|
||||||
|
{
|
||||||
ptr = format;
|
ptr = format;
|
||||||
*ptr++ = *src++;
|
*ptr++ = *src++;
|
||||||
if (*src=='%'){
|
|
||||||
*dest++=*src++;
|
if (*src == '%')
|
||||||
|
{
|
||||||
|
*dest++ = *src++;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
while (!isalpha(*ptr++=*src++))
|
|
||||||
;
|
while (!isalpha(*ptr++ = *src++));
|
||||||
|
|
||||||
*ptr='\0';
|
*ptr='\0';
|
||||||
if (numparam < parm) continue;
|
if (numparam < parm) continue;
|
||||||
arg = buffer[1];
|
arg = buffer[1];
|
||||||
switch(*(ptr-1)){
|
|
||||||
case 's': sprintf(arg,format,fo_getargstr(amx,1, parm++)); break;
|
switch (*(ptr - 1))
|
||||||
case 'f': case 'g': sprintf(arg,format,fo_getargfloat(amx, parm++)); break;
|
{
|
||||||
default: sprintf(arg,format,fo_getargnum(amx, parm++));
|
case 's': sprintf(arg, format, fo_getargstr(amx, 1, parm++)); break;
|
||||||
|
case 'f': case 'g': sprintf(arg, format, fo_getargfloat(amx, parm++)); break;
|
||||||
|
default: sprintf(arg, format, fo_getargnum(amx, parm++));
|
||||||
}
|
}
|
||||||
while(*arg) *dest++=*arg++;
|
|
||||||
|
while (*arg) *dest++ = *arg++;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
*dest++=*src++;
|
*dest++ = *src++;
|
||||||
}
|
}
|
||||||
*dest='\0';
|
|
||||||
|
*dest = '\0';
|
||||||
len = dest - *buffer;
|
len = dest - *buffer;
|
||||||
|
|
||||||
return *buffer;
|
return *buffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -522,16 +608,17 @@ static cell AMX_NATIVE_CALL amx_strtok(AMX *amx, cell *params)
|
|||||||
//string[]
|
//string[]
|
||||||
char *string = get_amxstring(amx, params[1], 0, len);
|
char *string = get_amxstring(amx, params[1], 0, len);
|
||||||
//left[]
|
//left[]
|
||||||
char *left = new char[len+1];
|
char *left = new char[len + 1];
|
||||||
//right[]
|
//right[]
|
||||||
char *right = new char[len+1];
|
char *right = new char[len + 1];
|
||||||
int leftMax = params[3];
|
int leftMax = params[3];
|
||||||
int rightMax = params[5];
|
int rightMax = params[5];
|
||||||
//token
|
//token
|
||||||
char token = static_cast<char>(params[6]);
|
char token = static_cast<char>(params[6]);
|
||||||
//trim
|
//trim
|
||||||
int trim = params[7];
|
int trim = params[7];
|
||||||
for (i=0; i<(unsigned int)len; i++)
|
|
||||||
|
for (i = 0; i < (unsigned int)len; i++)
|
||||||
{
|
{
|
||||||
if (trim && !done_flag)
|
if (trim && !done_flag)
|
||||||
{
|
{
|
||||||
@ -541,11 +628,13 @@ static cell AMX_NATIVE_CALL amx_strtok(AMX *amx, cell *params)
|
|||||||
done_flag = true;
|
done_flag = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!done_flag && string[i] == token)
|
if (!done_flag && string[i] == token)
|
||||||
{
|
{
|
||||||
done_flag = true;
|
done_flag = true;
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (done_flag)
|
if (done_flag)
|
||||||
{
|
{
|
||||||
right[right_pos++] = string[i];
|
right[right_pos++] = string[i];
|
||||||
@ -553,12 +642,14 @@ static cell AMX_NATIVE_CALL amx_strtok(AMX *amx, cell *params)
|
|||||||
left[left_pos++] = string[i];
|
left[left_pos++] = string[i];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
right[right_pos] = 0;
|
right[right_pos] = 0;
|
||||||
left[left_pos] = 0;
|
left[left_pos] = 0;
|
||||||
set_amxstring(amx, params[2], left, leftMax);
|
set_amxstring(amx, params[2], left, leftMax);
|
||||||
set_amxstring(amx, params[4], right, rightMax);
|
set_amxstring(amx, params[4], right, rightMax);
|
||||||
delete [] left;
|
delete [] left;
|
||||||
delete [] right;
|
delete [] right;
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -571,46 +662,63 @@ static cell AMX_NATIVE_CALL strbreak(AMX *amx, cell *params) /* 5 param */
|
|||||||
bool done_flag = false;
|
bool done_flag = false;
|
||||||
int left_pos = 0;
|
int left_pos = 0;
|
||||||
int right_pos = 0;
|
int right_pos = 0;
|
||||||
int l=0;
|
int l = 0;
|
||||||
unsigned int i=0;
|
unsigned int i = 0;
|
||||||
char hold = '"';
|
char hold = '"';
|
||||||
|
|
||||||
char *string = get_amxstring(amx, params[1], 0, l);
|
char *string = get_amxstring(amx, params[1], 0, l);
|
||||||
char *left = new char[strlen(string)+1];
|
char *left = new char[strlen(string) + 1];
|
||||||
char *right = new char[strlen(string)+1];
|
char *right = new char[strlen(string) + 1];
|
||||||
int LeftMax = params[3];
|
int LeftMax = params[3];
|
||||||
int RightMax = params[5];
|
int RightMax = params[5];
|
||||||
|
|
||||||
for (i=0; i<(unsigned int)l; i++) {
|
for (i = 0; i < (unsigned int)l; i++)
|
||||||
if (string[i] == '"' && !quote_flag) {
|
{
|
||||||
|
if (string[i] == '"' && !quote_flag)
|
||||||
|
{
|
||||||
quote_flag = true;
|
quote_flag = true;
|
||||||
} else if (string[i] == '"' && quote_flag) {
|
}
|
||||||
|
else if (string[i] == '"' && quote_flag)
|
||||||
|
{
|
||||||
quote_flag = false;
|
quote_flag = false;
|
||||||
}
|
}
|
||||||
if (isspace(string[i]) && !quote_flag && !done_flag) {
|
|
||||||
|
if (isspace(string[i]) && !quote_flag && !done_flag)
|
||||||
|
{
|
||||||
done_flag = true;
|
done_flag = true;
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
if (!done_flag && string[i]!='"') {
|
|
||||||
if (left_pos < LeftMax) {
|
if (!done_flag && string[i]!='"')
|
||||||
|
{
|
||||||
|
if (left_pos < LeftMax)
|
||||||
|
{
|
||||||
left[left_pos] = string[i];
|
left[left_pos] = string[i];
|
||||||
if (left[left_pos] == '\'') {
|
|
||||||
|
if (left[left_pos] == '\'')
|
||||||
|
{
|
||||||
left[left_pos] = hold;
|
left[left_pos] = hold;
|
||||||
}
|
}
|
||||||
|
|
||||||
left_pos++;
|
left_pos++;
|
||||||
} else {
|
} else {
|
||||||
done_flag = true;
|
done_flag = true;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (right_pos < RightMax && string[i]!='"') {
|
if (right_pos < RightMax && string[i]!='"')
|
||||||
|
{
|
||||||
right[right_pos] = string[i];
|
right[right_pos] = string[i];
|
||||||
if (right[right_pos] == '\'') {
|
|
||||||
|
if (right[right_pos] == '\'')
|
||||||
|
{
|
||||||
right[right_pos] = hold;
|
right[right_pos] = hold;
|
||||||
}
|
}
|
||||||
|
|
||||||
right_pos++;
|
right_pos++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
left[left_pos] = '\0';
|
left[left_pos] = '\0';
|
||||||
right[right_pos] = '\0';
|
right[right_pos] = '\0';
|
||||||
set_amxstring(amx, params[2], left, params[3]);
|
set_amxstring(amx, params[2], left, params[3]);
|
||||||
@ -625,41 +733,46 @@ static cell AMX_NATIVE_CALL format_args(AMX *amx, cell *params)
|
|||||||
{
|
{
|
||||||
int len;
|
int len;
|
||||||
int pos = params[3];
|
int pos = params[3];
|
||||||
if (pos < 0){
|
|
||||||
amx_RaiseError(amx,AMX_ERR_NATIVE);
|
if (pos < 0)
|
||||||
|
{
|
||||||
|
amx_RaiseError(amx, AMX_ERR_NATIVE);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
char* string = format_arguments(amx, pos ,len); // indexed from 0
|
|
||||||
return set_amxstring(amx,params[1],string,params[2]);
|
char* string = format_arguments(amx, pos, len); // indexed from 0
|
||||||
|
return set_amxstring(amx, params[1], string, params[2]);
|
||||||
}
|
}
|
||||||
|
|
||||||
static cell AMX_NATIVE_CALL is_digit(AMX *amx, cell *params)
|
static cell AMX_NATIVE_CALL is_digit(AMX *amx, cell *params)
|
||||||
{
|
{
|
||||||
return isdigit( params[1] );
|
return isdigit(params[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
static cell AMX_NATIVE_CALL is_alnum(AMX *amx, cell *params)
|
static cell AMX_NATIVE_CALL is_alnum(AMX *amx, cell *params)
|
||||||
{
|
{
|
||||||
return isalnum( params[1] );
|
return isalnum(params[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
static cell AMX_NATIVE_CALL is_space(AMX *amx, cell *params)
|
static cell AMX_NATIVE_CALL is_space(AMX *amx, cell *params)
|
||||||
{
|
{
|
||||||
return isspace( params[1] );
|
return isspace(params[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
static cell AMX_NATIVE_CALL is_alpha(AMX *amx, cell *params)
|
static cell AMX_NATIVE_CALL is_alpha(AMX *amx, cell *params)
|
||||||
{
|
{
|
||||||
return isalpha( params[1] );
|
return isalpha(params[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
static cell AMX_NATIVE_CALL amx_ucfirst(AMX *amx, cell *params)
|
static cell AMX_NATIVE_CALL amx_ucfirst(AMX *amx, cell *params)
|
||||||
{
|
{
|
||||||
int len = 0;
|
int len = 0;
|
||||||
cell *str = get_amxaddr(amx, params[1]);
|
cell *str = get_amxaddr(amx, params[1]);
|
||||||
if (!isalpha((char)str[0]) || !(str[0]&(1<<5)))
|
|
||||||
|
if (!isalpha((char)str[0]) || !(str[0] & (1<<5)))
|
||||||
return 0;
|
return 0;
|
||||||
str[0] &= ~(1<<5);
|
str[0] &= ~(1<<5);
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -679,7 +792,8 @@ static cell AMX_NATIVE_CALL amx_trim(AMX *amx, cell *params)
|
|||||||
while (*cptr++) len++;
|
while (*cptr++) len++;
|
||||||
int flag = 0, incr = 0;
|
int flag = 0, incr = 0;
|
||||||
register int i = 0;
|
register int i = 0;
|
||||||
for (i=len-1; i>=0; i--)
|
|
||||||
|
for (i = len - 1; i >= 0; i--)
|
||||||
{
|
{
|
||||||
if (!isspace(asdf[i]))
|
if (!isspace(asdf[i]))
|
||||||
{
|
{
|
||||||
@ -690,13 +804,13 @@ static cell AMX_NATIVE_CALL amx_trim(AMX *amx, cell *params)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i=0; i<len; i++)
|
for (i = 0; i < len; i++)
|
||||||
{
|
{
|
||||||
if (isspace(asdf[i]) && !flag)
|
if (isspace(asdf[i]) && !flag)
|
||||||
{
|
{
|
||||||
incr++;
|
incr++;
|
||||||
if (incr+i<len)
|
if (incr + i < len)
|
||||||
asdf[i] = asdf[incr+i];
|
asdf[i] = asdf[incr + i];
|
||||||
} else {
|
} else {
|
||||||
if (!flag)
|
if (!flag)
|
||||||
flag = 1;
|
flag = 1;
|
||||||
@ -709,20 +823,23 @@ static cell AMX_NATIVE_CALL amx_trim(AMX *amx, cell *params)
|
|||||||
return incr;
|
return incr;
|
||||||
}
|
}
|
||||||
|
|
||||||
static cell AMX_NATIVE_CALL n_strcat(AMX *amx,cell *params)
|
static cell AMX_NATIVE_CALL n_strcat(AMX *amx, cell *params)
|
||||||
{
|
{
|
||||||
cell *cdest,*csrc;
|
cell *cdest, *csrc;
|
||||||
|
|
||||||
cdest = get_amxaddr(amx, params[1]);
|
cdest = get_amxaddr(amx, params[1]);
|
||||||
csrc = get_amxaddr(amx, params[2]);
|
csrc = get_amxaddr(amx, params[2]);
|
||||||
int num = params[3];
|
int num = params[3];
|
||||||
|
|
||||||
while (*cdest && num)
|
while (*cdest && num)
|
||||||
{
|
{
|
||||||
cdest++;
|
cdest++;
|
||||||
num--;
|
num--;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!num)
|
if (!num)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
while (*csrc && num)
|
while (*csrc && num)
|
||||||
{
|
{
|
||||||
*cdest++ = *csrc++;
|
*cdest++ = *csrc++;
|
||||||
@ -754,22 +871,25 @@ static cell AMX_NATIVE_CALL n_strfind(AMX *amx, cell *params)
|
|||||||
|
|
||||||
bool found = false;
|
bool found = false;
|
||||||
bool igcase = params[3] ? true : false;
|
bool igcase = params[3] ? true : false;
|
||||||
|
|
||||||
if (igcase)
|
if (igcase)
|
||||||
{
|
{
|
||||||
for (int i=0; i<len; i++)
|
for (int i = 0; i < len; i++)
|
||||||
{
|
{
|
||||||
if (str[i] & (1<<5))
|
if (str[i] & (1<<5))
|
||||||
str[i] &= ~(1<<5);
|
str[i] &= ~(1<<5);
|
||||||
}
|
}
|
||||||
for (int i=0; i<sublen; i++)
|
for (int i = 0; i < sublen; i++)
|
||||||
{
|
{
|
||||||
if (str[i] & (1<<5))
|
if (str[i] & (1<<5))
|
||||||
str[i] &= ~(1<<5);
|
str[i] &= ~(1<<5);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (params[4] > len)
|
if (params[4] > len)
|
||||||
return -1;
|
return -1;
|
||||||
char *pos = &(str[ params[4] ]);
|
|
||||||
|
char *pos = &(str[params[4]]);
|
||||||
char *find = strstr(str, sub);
|
char *find = strstr(str, sub);
|
||||||
|
|
||||||
if (!find)
|
if (!find)
|
||||||
@ -778,39 +898,39 @@ static cell AMX_NATIVE_CALL n_strfind(AMX *amx, cell *params)
|
|||||||
return (find - str);
|
return (find - str);
|
||||||
}
|
}
|
||||||
|
|
||||||
AMX_NATIVE_INFO string_Natives[] = {
|
AMX_NATIVE_INFO string_Natives[] =
|
||||||
{ "add", add },
|
{
|
||||||
{ "contain", contain },
|
{"add", add},
|
||||||
{ "containi", containi },
|
{"contain", contain},
|
||||||
{ "copy", copy },
|
{"containi", containi},
|
||||||
{ "copyc", copyc },
|
{"copy", copy},
|
||||||
{ "equal", equal },
|
{"copyc", copyc},
|
||||||
{ "equali", equali },
|
{"equal", equal},
|
||||||
{ "format", format },
|
{"equali", equali},
|
||||||
{ "format_args", format_args },
|
{"format", format},
|
||||||
{ "isdigit", is_digit },
|
{"format_args", format_args},
|
||||||
{ "isalnum", is_alnum },
|
{"isdigit", is_digit},
|
||||||
{ "isspace", is_space },
|
{"isalnum", is_alnum},
|
||||||
{ "isalpha", is_alpha },
|
{"isspace", is_space},
|
||||||
{ "num_to_str", numtostr },
|
{"isalpha", is_alpha},
|
||||||
{ "numtostr", numtostr },
|
{"num_to_str", numtostr},
|
||||||
{ "parse", parse },
|
{"numtostr", numtostr},
|
||||||
{ "replace", replace },
|
{"parse", parse},
|
||||||
{ "setc", setc },
|
{"replace", replace},
|
||||||
{ "strbreak", strbreak},
|
{"setc", setc},
|
||||||
{ "strtolower", strtolower },
|
{"strbreak", strbreak},
|
||||||
{ "strtoupper", strtoupper },
|
{"strtolower", strtolower},
|
||||||
{ "str_to_num", strtonum },
|
{"strtoupper", strtoupper},
|
||||||
{ "strtonum", strtonum },
|
{"str_to_num", strtonum},
|
||||||
{ "trim", amx_trim },
|
{"strtonum", strtonum},
|
||||||
{ "ucfirst", amx_ucfirst },
|
{"trim", amx_trim},
|
||||||
{ "strtok", amx_strtok },
|
{"ucfirst", amx_ucfirst},
|
||||||
{ "strlen", amx_strlen },
|
{"strtok", amx_strtok},
|
||||||
{ "strcat", n_strcat },
|
{"strlen", amx_strlen},
|
||||||
{ "strfind", n_strfind },
|
{"strcat", n_strcat},
|
||||||
{ "strcmp", n_strcmp },
|
{"strfind", n_strfind},
|
||||||
{ "str_to_float", str_to_float },
|
{"strcmp", n_strcmp},
|
||||||
{ "float_to_str", float_to_str },
|
{"str_to_float", str_to_float},
|
||||||
|
{"float_to_str", float_to_str},
|
||||||
{ NULL, NULL }
|
{NULL, NULL }
|
||||||
};
|
};
|
||||||
|
167
amxmodx/util.cpp
167
amxmodx/util.cpp
@ -30,11 +30,10 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
|
|
||||||
#include "amxmodx.h"
|
#include "amxmodx.h"
|
||||||
|
|
||||||
#ifdef __linux__
|
#ifdef __linux__
|
||||||
#define _vsnprintf vsnprintf
|
#define _vsnprintf vsnprintf
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
char *UTIL_VarArgs(const char *fmt, ...)
|
char *UTIL_VarArgs(const char *fmt, ...)
|
||||||
@ -52,21 +51,26 @@ char *UTIL_VarArgs(const char *fmt, ...)
|
|||||||
int UTIL_ReadFlags(const char* c)
|
int UTIL_ReadFlags(const char* c)
|
||||||
{
|
{
|
||||||
int flags = 0;
|
int flags = 0;
|
||||||
while (*c) flags |= ( 1 << ( *c++ - 'a' ) );
|
|
||||||
|
while (*c)
|
||||||
|
flags |= (1<<(*c++ - 'a'));
|
||||||
|
|
||||||
return flags;
|
return flags;
|
||||||
}
|
}
|
||||||
|
|
||||||
void UTIL_GetFlags(char* f,int a)
|
void UTIL_GetFlags(char* f, int a)
|
||||||
{
|
{
|
||||||
for(int i='a';i<='z';++i){
|
for (int i = 'a'; i <= 'z'; ++i)
|
||||||
if ( a & 1 ) *f++ = i;
|
{
|
||||||
|
if (a & 1) *f++ = i;
|
||||||
a >>= 1;
|
a >>= 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
*f = 0;
|
*f = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* warning - don't pass here const string */
|
/* warning - don't pass here const string */
|
||||||
void UTIL_ShowMenu( edict_t* pEdict, int slots, int time, char *menu, int mlen )
|
void UTIL_ShowMenu(edict_t* pEdict, int slots, int time, char *menu, int mlen)
|
||||||
{
|
{
|
||||||
char *n = menu;
|
char *n = menu;
|
||||||
char c = 0;
|
char c = 0;
|
||||||
@ -75,17 +79,19 @@ void UTIL_ShowMenu( edict_t* pEdict, int slots, int time, char *menu, int mlen )
|
|||||||
if (!gmsgShowMenu)
|
if (!gmsgShowMenu)
|
||||||
return; // some games don't support ShowMenu (Firearms)
|
return; // some games don't support ShowMenu (Firearms)
|
||||||
|
|
||||||
while ( *n ) {
|
while (*n)
|
||||||
|
{
|
||||||
a = mlen;
|
a = mlen;
|
||||||
if ( a > 175 ) a = 175;
|
if (a > 175) a = 175;
|
||||||
mlen -= a;
|
mlen -= a;
|
||||||
c = *(n+=a);
|
c = *(n+=a);
|
||||||
*n = 0;
|
*n = 0;
|
||||||
MESSAGE_BEGIN( MSG_ONE , gmsgShowMenu, NULL, pEdict );
|
|
||||||
WRITE_SHORT( slots );
|
MESSAGE_BEGIN(MSG_ONE, gmsgShowMenu, NULL, pEdict);
|
||||||
WRITE_CHAR( time );
|
WRITE_SHORT(slots);
|
||||||
WRITE_BYTE( c ? TRUE : FALSE);
|
WRITE_CHAR(time);
|
||||||
WRITE_STRING( menu );
|
WRITE_BYTE(c ? TRUE : FALSE);
|
||||||
|
WRITE_STRING(menu);
|
||||||
MESSAGE_END();
|
MESSAGE_END();
|
||||||
*n = c;
|
*n = c;
|
||||||
menu = n;
|
menu = n;
|
||||||
@ -93,14 +99,14 @@ 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 (!gmsgMOTD)
|
||||||
return; // :TODO: Maybe output a warning log?
|
return; // :TODO: Maybe output a warning log?
|
||||||
|
|
||||||
if (gmsgServerName)
|
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();
|
||||||
}
|
}
|
||||||
@ -109,15 +115,17 @@ void UTIL_ShowMOTD( edict_t *client , char *motd, int mlen, const char *name)
|
|||||||
char c = 0;
|
char c = 0;
|
||||||
int a;
|
int a;
|
||||||
|
|
||||||
while ( *n ) {
|
while (*n)
|
||||||
|
{
|
||||||
a = mlen;
|
a = mlen;
|
||||||
if ( a > 175 ) a = 175;
|
if (a > 175) a = 175;
|
||||||
mlen -= a;
|
mlen -= a;
|
||||||
c = *(n+=a);
|
c = *(n += a);
|
||||||
*n = 0;
|
*n = 0;
|
||||||
MESSAGE_BEGIN( MSG_ONE , gmsgMOTD, NULL, client );
|
|
||||||
WRITE_BYTE( c ? FALSE : TRUE );
|
MESSAGE_BEGIN(MSG_ONE, gmsgMOTD, NULL, client);
|
||||||
WRITE_STRING( motd );
|
WRITE_BYTE(c ? FALSE : TRUE);
|
||||||
|
WRITE_STRING(motd);
|
||||||
MESSAGE_END();
|
MESSAGE_END();
|
||||||
*n = c;
|
*n = c;
|
||||||
motd = n;
|
motd = n;
|
||||||
@ -125,42 +133,52 @@ void UTIL_ShowMOTD( edict_t *client , char *motd, int mlen, const char *name)
|
|||||||
|
|
||||||
if (gmsgServerName)
|
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)
|
||||||
{
|
{
|
||||||
static const char *words[] = {"zero ","one ","two ","three ","four ",
|
static const char *words[] =
|
||||||
|
{"zero ","one ","two ","three ","four ",
|
||||||
"five ", "six ","seven ","eight ","nine ","ten ",
|
"five ", "six ","seven ","eight ","nine ","ten ",
|
||||||
"eleven ","twelve ","thirteen ","fourteen ","fifteen ",
|
"eleven ","twelve ","thirteen ","fourteen ","fifteen ",
|
||||||
"sixteen ","seventeen ","eighteen ","nineteen ",
|
"sixteen ","seventeen ","eighteen ","nineteen ",
|
||||||
"twenty ","thirty ","fourty ", "fifty ","sixty ",
|
"twenty ","thirty ","fourty ", "fifty ","sixty ",
|
||||||
"seventy ","eighty ","ninety ",
|
"seventy ","eighty ","ninety ",
|
||||||
"hundred ","thousand "};
|
"hundred ","thousand "};
|
||||||
|
|
||||||
*output = 0;
|
*output = 0;
|
||||||
if (value < 0) value = -value;
|
if (value < 0) value = -value;
|
||||||
int tho = value / 1000;
|
int tho = value / 1000;
|
||||||
int aaa = 0;
|
int aaa = 0;
|
||||||
if (tho){
|
|
||||||
aaa += sprintf(&output[aaa], words[ tho ] );
|
if (tho)
|
||||||
aaa += sprintf(&output[aaa], words[29] );
|
{
|
||||||
|
aaa += sprintf(&output[aaa], words[tho]);
|
||||||
|
aaa += sprintf(&output[aaa], words[29]);
|
||||||
value = value % 1000;
|
value = value % 1000;
|
||||||
}
|
}
|
||||||
|
|
||||||
int hun = value / 100;
|
int hun = value / 100;
|
||||||
if (hun) {
|
|
||||||
aaa += sprintf(&output[aaa], words[ hun ] );
|
if (hun)
|
||||||
aaa += sprintf(&output[aaa], words[28] );
|
{
|
||||||
|
aaa += sprintf(&output[aaa], words[hun]);
|
||||||
|
aaa += sprintf(&output[aaa], words[28]);
|
||||||
value = value % 100;
|
value = value % 100;
|
||||||
}
|
}
|
||||||
|
|
||||||
int ten = value / 10;
|
int ten = value / 10;
|
||||||
int unit = value % 10;
|
int unit = value % 10;
|
||||||
if ( ten )
|
|
||||||
aaa += sprintf(&output[aaa], words[ ( ten > 1 ) ? ( ten + 18 ) : ( unit + 10 ) ] );
|
if (ten)
|
||||||
if ( ten != 1 && ( unit || (!value && !hun && !tho) ) )
|
aaa += sprintf(&output[aaa], words[(ten > 1) ? (ten + 18) : (unit + 10)]);
|
||||||
sprintf(&output[aaa], words[ unit ] );
|
|
||||||
|
if (ten != 1 && (unit || (!value && !hun && !tho)))
|
||||||
|
sprintf(&output[aaa], words[unit]);
|
||||||
}
|
}
|
||||||
|
|
||||||
char* UTIL_SplitHudMessage(const char *src)
|
char* UTIL_SplitHudMessage(const char *src)
|
||||||
@ -168,50 +186,57 @@ char* UTIL_SplitHudMessage(const char *src)
|
|||||||
static char message[512];
|
static char message[512];
|
||||||
short b = 0, d = 0, e = 0, c = -1;
|
short b = 0, d = 0, e = 0, c = -1;
|
||||||
|
|
||||||
while ( src[ d ] && e < 480 ) {
|
while (src[d] && e < 480)
|
||||||
if ( src[ d ] == ' ' ) {
|
{
|
||||||
|
if (src[d] == ' ')
|
||||||
|
{
|
||||||
c = e;
|
c = e;
|
||||||
}
|
}
|
||||||
else if ( src[ d ] == '\n' ) {
|
else if (src[d] == '\n')
|
||||||
|
{
|
||||||
c = -1;
|
c = -1;
|
||||||
b = 0;
|
b = 0;
|
||||||
}
|
}
|
||||||
message[ e++ ] = src[ d++ ];
|
|
||||||
if ( ++b == 69 ) {
|
message[e++] = src[d++];
|
||||||
if ( c == -1 ) {
|
|
||||||
message[ e++ ] = '\n';
|
if (++b == 69)
|
||||||
|
{
|
||||||
|
if (c == -1)
|
||||||
|
{
|
||||||
|
message[e++] = '\n';
|
||||||
b = 0;
|
b = 0;
|
||||||
}
|
} else {
|
||||||
else {
|
message[c] = '\n';
|
||||||
message[ c ] = '\n';
|
|
||||||
b = e - c - 1;
|
b = e - c - 1;
|
||||||
c = -1;
|
c = -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
message[ e ] = 0;
|
|
||||||
|
message[e] = 0;
|
||||||
return message;
|
return message;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned short FixedUnsigned16( float value, float scale )
|
unsigned short FixedUnsigned16(float value, float scale)
|
||||||
{
|
{
|
||||||
int output = (int)(value * scale);
|
int output = (int)(value * scale);
|
||||||
|
|
||||||
if ( output < 0 )
|
if (output < 0)
|
||||||
output = 0;
|
output = 0;
|
||||||
else if ( output > 0xFFFF )
|
else if (output > 0xFFFF)
|
||||||
output = 0xFFFF;
|
output = 0xFFFF;
|
||||||
|
|
||||||
return (unsigned short)output;
|
return (unsigned short)output;
|
||||||
}
|
}
|
||||||
|
|
||||||
short FixedSigned16( float value, float scale )
|
short FixedSigned16(float value, float scale)
|
||||||
{
|
{
|
||||||
int output = (int)(value * scale);
|
int output = (int)(value * scale);
|
||||||
|
|
||||||
if ( output > 32767 )
|
if (output > 32767)
|
||||||
output = 32767;
|
output = 32767;
|
||||||
else if ( output < -32768 )
|
else if (output < -32768)
|
||||||
output = -32768;
|
output = -32768;
|
||||||
|
|
||||||
return (short)output;
|
return (short)output;
|
||||||
@ -219,15 +244,15 @@ short FixedSigned16( float value, float scale )
|
|||||||
|
|
||||||
void UTIL_HudMessage(edict_t *pEntity, const hudtextparms_t &textparms, char *pMessage)
|
void UTIL_HudMessage(edict_t *pEntity, const hudtextparms_t &textparms, char *pMessage)
|
||||||
{
|
{
|
||||||
if ( pEntity )
|
if (pEntity)
|
||||||
MESSAGE_BEGIN( MSG_ONE_UNRELIABLE, SVC_TEMPENTITY, NULL, pEntity );
|
MESSAGE_BEGIN(MSG_ONE_UNRELIABLE, SVC_TEMPENTITY, NULL, pEntity);
|
||||||
else
|
else
|
||||||
MESSAGE_BEGIN( MSG_BROADCAST, SVC_TEMPENTITY );
|
MESSAGE_BEGIN(MSG_BROADCAST, SVC_TEMPENTITY);
|
||||||
|
|
||||||
WRITE_BYTE(29);
|
WRITE_BYTE(29);
|
||||||
WRITE_BYTE(textparms.channel & 0xFF);
|
WRITE_BYTE(textparms.channel & 0xFF);
|
||||||
WRITE_SHORT(FixedSigned16(textparms.x, (1<<13) ));
|
WRITE_SHORT(FixedSigned16(textparms.x, (1<<13)));
|
||||||
WRITE_SHORT(FixedSigned16(textparms.y, (1<<13) ));
|
WRITE_SHORT(FixedSigned16(textparms.y, (1<<13)));
|
||||||
WRITE_BYTE(textparms.effect);
|
WRITE_BYTE(textparms.effect);
|
||||||
WRITE_BYTE(textparms.r1);
|
WRITE_BYTE(textparms.r1);
|
||||||
WRITE_BYTE(textparms.g1);
|
WRITE_BYTE(textparms.g1);
|
||||||
@ -237,30 +262,34 @@ void UTIL_HudMessage(edict_t *pEntity, const hudtextparms_t &textparms, char *pM
|
|||||||
WRITE_BYTE(255);
|
WRITE_BYTE(255);
|
||||||
WRITE_BYTE(250);
|
WRITE_BYTE(250);
|
||||||
WRITE_BYTE(0);
|
WRITE_BYTE(0);
|
||||||
WRITE_SHORT(FixedUnsigned16(textparms.fadeinTime, (1<<8) ));
|
WRITE_SHORT(FixedUnsigned16(textparms.fadeinTime, (1<<8)));
|
||||||
WRITE_SHORT(FixedUnsigned16(textparms.fadeoutTime, (1<<8) ));
|
WRITE_SHORT(FixedUnsigned16(textparms.fadeoutTime, (1<<8)));
|
||||||
WRITE_SHORT(FixedUnsigned16(textparms.holdTime, (1<<8) ));
|
WRITE_SHORT(FixedUnsigned16(textparms.holdTime, (1<<8)));
|
||||||
if (textparms.effect==2)
|
|
||||||
WRITE_SHORT(FixedUnsigned16(textparms.fxTime, (1<<8) ) );
|
if (textparms.effect == 2)
|
||||||
|
WRITE_SHORT(FixedUnsigned16(textparms.fxTime, (1<<8)));
|
||||||
|
|
||||||
WRITE_STRING(pMessage);
|
WRITE_STRING(pMessage);
|
||||||
MESSAGE_END();
|
MESSAGE_END();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* warning - buffer of msg must be longer than 190 chars!
|
/* warning - buffer of msg must be longer than 190 chars!
|
||||||
(here in AMX it is always longer) */
|
(here in AMX it is always longer) */
|
||||||
void UTIL_ClientPrint( edict_t *pEntity, int msg_dest, char *msg )
|
void UTIL_ClientPrint(edict_t *pEntity, int msg_dest, char *msg)
|
||||||
{
|
{
|
||||||
if (!gmsgTextMsg)
|
if (!gmsgTextMsg)
|
||||||
return; // :TODO: Maybe output a warning log?
|
return; // :TODO: Maybe output a warning log?
|
||||||
|
|
||||||
char c = msg[190];
|
char c = msg[190];
|
||||||
msg[190] = 0; // truncate without checking with strlen()
|
msg[190] = 0; // truncate without checking with strlen()
|
||||||
if ( pEntity )
|
|
||||||
MESSAGE_BEGIN( MSG_ONE, gmsgTextMsg, NULL, pEntity );
|
if (pEntity)
|
||||||
|
MESSAGE_BEGIN(MSG_ONE, gmsgTextMsg, NULL, pEntity);
|
||||||
else
|
else
|
||||||
MESSAGE_BEGIN( MSG_BROADCAST , gmsgTextMsg);
|
MESSAGE_BEGIN(MSG_BROADCAST, gmsgTextMsg);
|
||||||
WRITE_BYTE( msg_dest );
|
|
||||||
WRITE_STRING( msg );
|
WRITE_BYTE(msg_dest);
|
||||||
|
WRITE_STRING(msg);
|
||||||
MESSAGE_END();
|
MESSAGE_END();
|
||||||
msg[190] = c;
|
msg[190] = c;
|
||||||
}
|
}
|
||||||
@ -304,7 +333,7 @@ void UTIL_FakeClientCommand(edict_t *pEdict, const char *cmd, const char *arg1,
|
|||||||
// store argument
|
// store argument
|
||||||
g_fakecmd.argv[1] = arg1;
|
g_fakecmd.argv[1] = arg1;
|
||||||
// build argument line
|
// build argument line
|
||||||
snprintf( g_fakecmd.args, 255, "%s", arg1);
|
snprintf(g_fakecmd.args, 255, "%s", arg1);
|
||||||
// if snprintf reached 255 chars limit, this will make sure there will be no access violation
|
// if snprintf reached 255 chars limit, this will make sure there will be no access violation
|
||||||
g_fakecmd.args[255] = 0;
|
g_fakecmd.args[255] = 0;
|
||||||
}
|
}
|
||||||
|
@ -34,52 +34,49 @@
|
|||||||
|
|
||||||
Vault g_vault;
|
Vault g_vault;
|
||||||
|
|
||||||
static cell AMX_NATIVE_CALL set_vaultdata(AMX *amx,cell *params)
|
static cell AMX_NATIVE_CALL set_vaultdata(AMX *amx, cell *params)
|
||||||
{
|
{
|
||||||
int iLen;
|
int iLen;
|
||||||
|
|
||||||
g_vault.put( get_amxstring(amx,params[1],0,iLen) , get_amxstring(amx,params[2],1,iLen) );
|
g_vault.put(get_amxstring(amx, params[1], 0, iLen), get_amxstring(amx, params[2], 1, iLen));
|
||||||
g_vault.saveVault();
|
g_vault.saveVault();
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static cell AMX_NATIVE_CALL get_vaultdata(AMX *amx,cell *params)
|
static cell AMX_NATIVE_CALL get_vaultdata(AMX *amx, cell *params)
|
||||||
{
|
{
|
||||||
int iLen;
|
int iLen;
|
||||||
|
const char* key = get_amxstring(amx, params[1], 0, iLen);
|
||||||
|
|
||||||
const char* key = get_amxstring(amx,params[1],0,iLen);
|
if (params[3])
|
||||||
|
return set_amxstring(amx, params[2], g_vault.get(key), params[3]);
|
||||||
|
|
||||||
if ( params[3] )
|
return g_vault.get_number(key);
|
||||||
return set_amxstring( amx , params[2] , g_vault.get( key ) , params[3] );
|
|
||||||
|
|
||||||
return g_vault.get_number( key );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static cell AMX_NATIVE_CALL remove_vaultdata(AMX *amx,cell *params)
|
static cell AMX_NATIVE_CALL remove_vaultdata(AMX *amx, cell *params)
|
||||||
{
|
{
|
||||||
int iLen;
|
int iLen;
|
||||||
|
|
||||||
g_vault.remove( get_amxstring(amx,params[1],0,iLen) );
|
g_vault.remove(get_amxstring(amx, params[1], 0, iLen));
|
||||||
g_vault.saveVault();
|
g_vault.saveVault();
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static cell AMX_NATIVE_CALL vaultdata_exists(AMX *amx,cell *params)
|
static cell AMX_NATIVE_CALL vaultdata_exists(AMX *amx, cell *params)
|
||||||
{
|
{
|
||||||
int iLen;
|
int iLen;
|
||||||
|
return g_vault.exists(get_amxstring(amx, params[1], 0, iLen)) ? 1 : 0;
|
||||||
return g_vault.exists( get_amxstring(amx,params[1],0,iLen) ) ? 1 : 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
AMX_NATIVE_INFO vault_Natives[] = {
|
AMX_NATIVE_INFO vault_Natives[] =
|
||||||
{ "set_vaultdata", set_vaultdata },
|
{
|
||||||
{ "get_vaultdata", get_vaultdata },
|
{"set_vaultdata", set_vaultdata},
|
||||||
{ "remove_vaultdata", remove_vaultdata },
|
{"get_vaultdata", get_vaultdata},
|
||||||
{ "delete_vaultdata", remove_vaultdata },
|
{"remove_vaultdata", remove_vaultdata},
|
||||||
{ "vaultdata_exists", vaultdata_exists },
|
{"delete_vaultdata", remove_vaultdata},
|
||||||
{ 0, 0 }
|
{"vaultdata_exists", vaultdata_exists},
|
||||||
|
{0, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user