Added change_task()

Added server_changelevel forward
This commit is contained in:
David Anderson 2004-07-18 08:07:50 +00:00
parent 8ea1c7f486
commit 41c7d041df
4 changed files with 38 additions and 0 deletions

View File

@ -168,6 +168,20 @@ CTaskMngr::CTask* CTaskMngr::findTask( int id , AMX* amx )
return 0;
}
int CTaskMngr::changeTask(int id, AMX *amx, float flNewTime)
{
CTask *a;
int i = 0;
while ( (a=findTask(id, amx)) != 0)
{
a->changeTime(flNewTime > 0.1 ? flNewTime : 0.1);
++i;
}
return i;
}
void CTaskMngr::unlink(CTask* a){
if ( a->prev ) a->prev->next = a->next;
else head = a->next;

View File

@ -62,6 +62,7 @@ public:
CTask* next;
CTask* prev;
inline void setToRemove() { exec_time = -1.0f; }
inline void changeTime(float flNewTime) { exec_time = flNewTime; }
inline bool isToReply() { return (repeat-- > 0); }
inline bool isRemoved() { return (exec_time == -1.0f); }
CTask( CPluginMngr::CPlugin* p, int f, int flags, int i,
@ -103,6 +104,7 @@ public:
void registerTimers( float* timer , float* timelimit, float* timeleft );
void registerTask( CPluginMngr::CPlugin* plugin, int func, int flags, int i, float base, float exec, int parlen , const cell* par, int repeat );
inline int taskExists( int id ,AMX* amx) { return findTask(id,amx ) ? 1 : 0; }
int changeTask(int id, AMX *amx, float flNewTime);
int removeTasks( int id , AMX* amx );
void clear();

View File

@ -1580,6 +1580,12 @@ static cell AMX_NATIVE_CALL remove_task(AMX *amx, cell *params) /* 1 param */
return g_tasksMngr.removeTasks( params[1] , params[2] ? 0 : amx );
}
static cell AMX_NATIVE_CALL change_task(AMX *amx, cell *params)
{
REAL flNewTime = amx_ctof(params[2]);
return g_tasksMngr.changeTask(params[1], params[3] ? 0 : amx, flNewTime);
}
static cell AMX_NATIVE_CALL task_exists(AMX *amx, cell *params) /* 1 param */
{
return g_tasksMngr.taskExists( params[1] , params[2] ? 0 : amx );
@ -2599,6 +2605,7 @@ AMX_NATIVE_INFO amxmod_Natives[] = {
{ "remove_cvar_flags", remove_cvar_flags },
{ "remove_quotes", remove_quotes },
{ "remove_task", remove_task },
{ "change_task", change_task },
{ "remove_user_flags", remove_user_flags },
{ "server_cmd", server_cmd },
{ "server_exec", server_exec },

View File

@ -122,6 +122,7 @@ int FF_PluginLog = -1;
int FF_PluginEnd = -1;
int FF_InconsistentFile = -1;
int FF_ClientAuthorized = -1;
int FF_ChangeLevel = -1;
// fake metamod api
CFakeMeta g_FakeMeta;
@ -275,6 +276,7 @@ int C_Spawn( edict_t *pent ) {
FF_PluginEnd = registerForward("plugin_end", ET_IGNORE, FP_DONE);
FF_InconsistentFile = registerForward("inconsistent_file", ET_STOP, FP_CELL, FP_STRING, FP_STRINGEX, FP_DONE);
FF_ClientAuthorized = registerForward("client_authorized", ET_IGNORE, FP_CELL, FP_DONE);
FF_ChangeLevel = registerForward("server_changelevel", ET_STOP, FP_STRING, FP_DONE);
modules_callPluginsLoaded();
@ -915,6 +917,18 @@ void C_MessageEnd_Post(void) {
RETURN_META(MRES_IGNORED);
}
void C_ChangeLevel(char* s1, char* s2)
{
if (FF_ChangeLevel) {
int retVal = 0;
char *map = s1;
retVal = executeForwards(FF_ChangeLevel, map);
if (retVal)
RETURN_META(MRES_SUPERCEDE);
}
RETURN_META(MRES_IGNORED);
}
#if 0
const char *C_Cmd_Args( void )
{
@ -1232,6 +1246,7 @@ C_DLLEXPORT int GetEngineFunctions(enginefuncs_t *pengfuncsFromEngine, int *inte
#endif
meta_engfuncs.pfnPrecacheModel = C_PrecacheModel;
meta_engfuncs.pfnPrecacheSound = C_PrecacheSound;
meta_engfuncs.pfnChangeLevel = C_ChangeLevel;
return g_FakeMeta.GetEngineFunctions(pengfuncsFromEngine, interfaceVersion, &meta_engfuncs);
/*