diff --git a/dlls/csx/source/CMisc.cpp b/dlls/csx/source/CMisc.cpp index bc664d8a..35705be7 100755 --- a/dlls/csx/source/CMisc.cpp +++ b/dlls/csx/source/CMisc.cpp @@ -242,48 +242,6 @@ void CPlayer::saveBDefused(){ life.bDefused++; } - -// ***************************************************** -// class Forward -// ***************************************************** - -void Forward::put( AMX *a , int i ){ - head = new AmxCall( a, i , head ); -} - - -void Forward::clear(){ - while ( head ) { - AmxCall* a = head->next; - delete head; - head = a; - } -} - -void Forward::exec(int p1,int p2,int p3,int p4,int p5,int p6){ - AmxCall* a = head; - while ( a ){ - MF_AmxExec(a->amx, NULL, a->iFunctionIdx, 6,p1, p2, p3, p4, p5, p6); - a = a->next; - } -} - -void Forward::exec(int p1,int p2,int p3,int p4,int p5){ - AmxCall* a = head; - while ( a ){ - MF_AmxExec(a->amx, NULL, a->iFunctionIdx, 5,p1, p2, p3, p4, p5); - a = a->next; - } -} - -void Forward::exec(int p1,int p2){ - AmxCall* a = head; - while ( a ){ - MF_AmxExec(a->amx, NULL, a->iFunctionIdx, 2,p1, p2); - a = a->next; - } -} - // ***************************************************** bool ignoreBots (edict_t *pEnt, edict_t *pOther){ diff --git a/dlls/csx/source/CRank.cpp b/dlls/csx/source/CRank.cpp index 4fff5f39..ce615a6c 100755 --- a/dlls/csx/source/CRank.cpp +++ b/dlls/csx/source/CRank.cpp @@ -184,8 +184,10 @@ void RankSystem::updatePos( RankStats* rr , Stats* s ) calc.physAddr2[i] = rr->bodyHits[i]; cell result = 0; int err; - if ((err = MF_AmxExec(&calc.amx,&result, calc.func ,2,calc.amxAddr1,calc.amxAddr2 )) != AMX_ERR_NONE) - LOG_CONSOLE( PLID, "Run time error %d on line %ld (plugin \"%s\")", err,calc.amx.curline,LOCALINFO("csstats_score")); + MF_AmxPush(&calc.amx, calc.amxAddr2); + MF_AmxPush(&calc.amx, calc.amxAddr1); + if ((err = MF_AmxExec(&calc.amx,&result, calc.func)) != AMX_ERR_NONE) + MF_LogError(&calc.amx, err, "Error encountered in stats routine"); rr->score = result; } else rr->score = rr->kills - rr->deaths; diff --git a/dlls/csx/source/amxxmodule.cpp b/dlls/csx/source/amxxmodule.cpp index aa649e2b..c38a396b 100755 --- a/dlls/csx/source/amxxmodule.cpp +++ b/dlls/csx/source/amxxmodule.cpp @@ -2502,6 +2502,7 @@ PFN_GET_PLAYER_EDICT g_fn_GetPlayerEdict; PFN_FORMAT g_fn_Format; PFN_REGISTERFUNCTION g_fn_RegisterFunction; PFN_REQ_FNPTR g_fn_RequestFunction; +PFN_AMX_PUSH g_fn_AmxPush; // *** Exports *** C_DLLEXPORT int AMXX_Query(int *interfaceVersion, amxx_module_info_s *moduleInfo) @@ -2610,6 +2611,7 @@ C_DLLEXPORT int AMXX_Attach(PFN_REQ_FNPTR reqFnptrFunc) REQFUNC("GetPlayerHealth", g_fn_GetPlayerHealth, PFN_GET_PLAYER_HEALTH); REQFUNC("GetPlayerFlags", g_fn_GetPlayerFlags, PFN_GETPLAYERFLAGS); REQFUNC("GetPlayerEdict", g_fn_GetPlayerEdict, PFN_GET_PLAYER_EDICT); + REQFUNC("amx_Push", g_fn_AmxPush, PFN_AMX_PUSH); // Memory REQFUNC_OPT("Allocator", g_fn_Allocator, PFN_ALLOCATOR); @@ -2717,7 +2719,7 @@ void ValidateMacros_DontCallThis_Smiley() MF_IsPlayerHLTV(0); MF_GetPlayerArmor(0); MF_GetPlayerHealth(0); - MF_AmxExec(0, 0, 0, 0); + MF_AmxExec(0, 0, 0); MF_AmxExecv(0, 0, 0, 0, 0); MF_AmxFindPublic(0, 0, 0); MF_AmxAllot(0, 0, 0, 0); diff --git a/dlls/csx/source/amxxmodule.h b/dlls/csx/source/amxxmodule.h index bbaec2f5..baf6d259 100755 --- a/dlls/csx/source/amxxmodule.h +++ b/dlls/csx/source/amxxmodule.h @@ -1987,7 +1987,7 @@ typedef void * (*PFN_REALLOCATOR) (const char* /*filename*/, const unsigned const unsigned int /*type*/, const size_t /*size*/, void* /*addr*/ ); typedef void (*PFN_DEALLOCATOR) (const char* /*filename*/, const unsigned int /*line*/, const char* /*func*/, const unsigned int /*type*/, const void* /*addr*/ ); -typedef int (*PFN_AMX_EXEC) (AMX* /*amx*/, cell* /*return val*/, int /*index*/, int /*numparams*/, ... /*params*/); +typedef int (*PFN_AMX_EXEC) (AMX* /*amx*/, cell* /*return val*/, int /*index*/); typedef int (*PFN_AMX_EXECV) (AMX* /*amx*/, cell* /*return val*/, int /*index*/, int /*numparams*/, cell[] /*params*/); typedef int (*PFN_AMX_ALLOT) (AMX* /*amx*/, int /*length*/, cell* /*amx_addr*/, cell** /*phys_addr*/); typedef int (*PFN_AMX_FINDPUBLIC) (AMX* /*amx*/, char* /*func name*/, int* /*index*/); @@ -2002,6 +2002,7 @@ typedef void (*PFN_UNREGISTER_SPFORWARD) (int /*id*/); typedef void (*PFN_MERGEDEFINITION_FILE) (const char * /*filename*/); typedef const char * (*PFN_FORMAT) (const char * /*fmt*/, ... /*params*/); typedef void (*PFN_REGISTERFUNCTION) (void * /*pfn*/, const char * /*desc*/); +typedef int (*PFN_AMX_PUSH) (AMX * /*amx*/, cell /*value*/); extern PFN_ADD_NATIVES g_fn_AddNatives; extern PFN_BUILD_PATHNAME g_fn_BuildPathname; @@ -2065,6 +2066,7 @@ extern PFN_FORMAT g_fn_Format; extern PFN_GET_PLAYER_TEAM g_fn_GetPlayerTeam; extern PFN_REGISTERFUNCTION g_fn_RegisterFunction; extern PFN_REQ_FNPTR g_fn_RequestFunction; +extern PFN_AMX_PUSH g_fn_AmxPush; #ifdef MAY_NEVER_BE_DEFINED // Function prototypes for intellisense and similar systems @@ -2123,6 +2125,8 @@ edict_t* MF_GetPlayerEdict (int id) { } const char * MF_Format (const char *fmt, ...) { } void MF_RegisterFunction (void *pfn, const char *description) { } void * MF_RequestFunction (const char *description) { } +int MF_AmxPush (AMX *amx, cell *params) { } +int MF_AmxExec (AMX *amx, cell *retval, int idx) { } #endif // MAY_NEVER_BE_DEFINED #define MF_AddNatives g_fn_AddNatives @@ -2187,6 +2191,7 @@ void MF_LogError(AMX *amx, int err, const char *fmt, ...); #define MF_Format g_fn_Format #define MF_RegisterFunction g_fn_RegisterFunction #define MF_RequestFunction g_fn_RequestFunction; +#define MF_AmxPush g_fn_AmxPush /*** Memory ***/ void *operator new(size_t reportedSize);