From c9a0a3f9be8031f0f7556c429978220cf862ac1a Mon Sep 17 00:00:00 2001 From: Steve Dudenhoeffer Date: Wed, 11 Aug 2004 12:17:39 +0000 Subject: [PATCH] Null tabled some forwards Removed pfnUse hook (pointless) Changed a couple native names --- dlls/engine/amxxapi.cpp | 112 +++- dlls/engine/amxxmodule.cpp | 14 +- dlls/engine/engine.cpp | 1218 +----------------------------------- dlls/engine/engine.h | 136 +--- dlls/engine/engine.vcproj | 1 + dlls/engine/forwards.cpp | 32 +- dlls/engine/moduleconfig.h | 24 +- 7 files changed, 169 insertions(+), 1368 deletions(-) diff --git a/dlls/engine/amxxapi.cpp b/dlls/engine/amxxapi.cpp index 1e93a682..4860d8d6 100755 --- a/dlls/engine/amxxapi.cpp +++ b/dlls/engine/amxxapi.cpp @@ -1,5 +1,7 @@ #include "engine.h" +BOOL CheckForPublic(const char *publicname); + int AmxStringToEngine(AMX *amx, cell param, int &len) { char *szString = MF_GetAmxString(amx, param, 0, &len); @@ -29,20 +31,71 @@ void OnAmxxAttach() void OnPluginsLoaded() { - pfnThinkForward = MF_RegisterForward("pfn_think", ET_STOP, FP_CELL, FP_DONE); - PlayerPreThinkForward = MF_RegisterForward("client_PreThink", ET_STOP, FP_CELL, FP_DONE); - PlayerPostThinkForward = MF_RegisterForward("client_PostThink", ET_STOP, FP_CELL, FP_DONE); - ClientKillForward = MF_RegisterForward("client_kill", ET_STOP, FP_CELL, FP_DONE); - CmdStartForward = MF_RegisterForward("client_impulse", ET_STOP, FP_CELL, FP_CELL, FP_DONE); - StartFrameForward = MF_RegisterForward("server_frame", ET_IGNORE, FP_DONE); - DispatchKeyForward = MF_RegisterForward("Dispatch_KeyVal", ET_STOP, FP_CELL, FP_DONE); - PlaybackForward = MF_RegisterForward("PlaybackEvent", ET_STOP, FP_CELL, FP_CELL, FP_CELL, FP_FLOAT, FP_ARRAY, FP_ARRAY, FP_FLOAT, FP_FLOAT, FP_CELL, FP_CELL, FP_CELL, FP_CELL, FP_DONE); - ChangelevelForward = MF_RegisterForward("server_changelevel", ET_STOP, FP_STRING, FP_DONE); - SpawnForward = MF_RegisterForward("pfn_spawn", ET_IGNORE, FP_CELL, FP_DONE); - DispatchUseForward = MF_RegisterForward("pfn_use", ET_STOP, FP_CELL, FP_CELL, FP_DONE); - pfnTouchForward = MF_RegisterForward("pfn_touch", ET_STOP, FP_CELL, FP_CELL, FP_DONE); - VexdTouchForward = MF_RegisterForward("vexd_pfntouch", ET_IGNORE, FP_CELL, FP_CELL, FP_DONE); - VexdServerForward = MF_RegisterForward("ServerFrame", ET_IGNORE, FP_DONE); + g_CameraCount=0; + pfnThinkForward = MF_RegisterForward("pfn_think", ET_STOP, FP_CELL, FP_DONE); // done + PlayerPreThinkForward = MF_RegisterForward("client_PreThink", ET_STOP, FP_CELL, FP_DONE); // done + PlayerPostThinkForward = MF_RegisterForward("client_PostThink", ET_STOP, FP_CELL, FP_DONE); // done + ClientKillForward = MF_RegisterForward("client_kill", ET_STOP, FP_CELL, FP_DONE); // done + CmdStartForward = MF_RegisterForward("client_impulse", ET_STOP, FP_CELL, FP_CELL, FP_DONE); // done + StartFrameForward = MF_RegisterForward("server_frame", ET_IGNORE, FP_DONE); // done + DispatchKeyForward = MF_RegisterForward("pfn_keyvalue", ET_STOP, FP_CELL, FP_DONE); // done + PlaybackForward = MF_RegisterForward("pfn_playbackevent", ET_STOP, FP_CELL, FP_CELL, FP_CELL, FP_FLOAT, FP_ARRAY, FP_ARRAY, FP_FLOAT, FP_FLOAT, FP_CELL, FP_CELL, FP_CELL, FP_CELL, FP_DONE); // done + SpawnForward = MF_RegisterForward("pfn_spawn", ET_IGNORE, FP_CELL, FP_DONE); // done + pfnTouchForward = MF_RegisterForward("pfn_touch", ET_STOP, FP_CELL, FP_CELL, FP_DONE); // done + VexdTouchForward = MF_RegisterForward("vexd_pfntouch", ET_IGNORE, FP_CELL, FP_CELL, FP_DONE); // done + VexdServerForward = MF_RegisterForward("ServerFrame", ET_IGNORE, FP_DONE); // done + // Reset all standard engine callbacks + + // These will be reset through native calls, if need be + + g_pFunctionTable->pfnAddToFullPack=NULL; + + g_pFunctionTable->pfnKeyValue=NULL; + if (CheckForPublic("pfn_keyvalue")) + g_pFunctionTable->pfnKeyValue=KeyValue; + + g_pengfuncsTable->pfnPlaybackEvent=NULL; // "pfn_playbackevent" + if (CheckForPublic("pfn_playbackevent")) + g_pengfuncsTable->pfnPlaybackEvent=PlaybackEvent; + + g_pFunctionTable->pfnPlayerPreThink=NULL; // "client_PreThink" + if (CheckForPublic("client_PreThink")) + g_pFunctionTable->pfnPlayerPreThink=PlayerPreThink; + + g_pFunctionTable->pfnPlayerPostThink=NULL; // "client_PostThink" + if (CheckForPublic("client_PostThink")) + g_pFunctionTable->pfnPlayerPostThink=PlayerPostThink_Post; + + g_pFunctionTable->pfnSpawn=NULL; // "pfn_spawn" + if (CheckForPublic("pfn_spawn")) + g_pFunctionTable->pfnSpawn=Spawn; + + g_pFunctionTable->pfnClientKill=NULL; // "client_kill" + if (CheckForPublic("client_kill")) + g_pFunctionTable->pfnClientKill=ClientKill; + + g_pFunctionTable->pfnCmdStart=NULL; // "client_impulse","register_impulse" + if (CheckForPublic("client_impulse")) + g_pFunctionTable->pfnCmdStart=CmdStart; + + g_pFunctionTable->pfnThink=NULL; // "pfn_think", "register_think" + if (CheckForPublic("pfn_think")) + g_pFunctionTable->pfnThink=Think; + + g_pFunctionTable->pfnStartFrame=NULL; // "server_frame","ServerFrame" + if (CheckForPublic("server_frame")) + g_pFunctionTable->pfnStartFrame=StartFrame; + + if (CheckForPublic("ServerFrame")) + g_pFunctionTable->pfnStartFrame=StartFrame; + + + g_pFunctionTable->pfnTouch=NULL; // "pfn_touch","vexd_pfntouch" + if (CheckForPublic("pfn_touch")) + g_pFunctionTable->pfnTouch=pfnTouch; + + if (CheckForPublic("vexd_pfntouch")) + g_pFunctionTable->pfnTouch=pfnTouch; } qboolean Voice_SetClientListening(int iReceiver, int iSender, qboolean bListen) @@ -67,6 +120,7 @@ qboolean Voice_SetClientListening(int iReceiver, int iSender, qboolean bListen) int AddToFullPack(struct entity_state_s *state, int e, edict_t *ent, edict_t *host, int hostflags, int player, unsigned char *pSet) { + sprintf("%s called\n",__FUNCTION__); if(ent == host) { if(FStrEq(STRING(ent->v.classname), "player")) { if(plinfo[ENTINDEX(ent)].iViewType != CAMERA_NONE) { @@ -91,6 +145,15 @@ void ClientDisconnect(edict_t *pEntity) { int id = ENTINDEX(pEntity); + if (plinfo[ENTINDEX(pEntity)].iViewType != CAMERA_NONE) // Verify that they were originally in a modified view + { + g_CameraCount--; + if (g_CameraCount < 0) + g_CameraCount=0; + if (g_CameraCount==0) + g_pFunctionTable->pfnAddToFullPack=AddToFullPack; + } + plinfo[id].iSpeakFlags = SPEAK_NORMAL; plinfo[id].iViewType = CAMERA_NONE; plinfo[id].iRenderMode = 0; @@ -152,3 +215,24 @@ void LightStyle(int style, char *val) { RETURN_META(MRES_IGNORED); } + +BOOL CheckForPublic(const char *publicname) +{ + AMX* amx; + char blah[64]; + strncpy(blah,publicname,63); + int iFunctionIndex; + int i=0; + // Loop through all running scripts + while((amx=MF_GetScriptAmx(i++))!=NULL) + { + // Scan for public + if (MF_AmxFindPublic(amx, blah, &iFunctionIndex) == AMX_ERR_NONE) + { + // Public was found. + return TRUE; + } + } + + return FALSE; // no public found in any loaded script +} diff --git a/dlls/engine/amxxmodule.cpp b/dlls/engine/amxxmodule.cpp index b021ab49..7125103e 100755 --- a/dlls/engine/amxxmodule.cpp +++ b/dlls/engine/amxxmodule.cpp @@ -32,6 +32,8 @@ * Description: AMX Mod X Module Interface Functions */ + + #include #include #include @@ -45,6 +47,13 @@ enginefuncs_t g_engfuncs; globalvars_t *gpGlobals; + + +DLL_FUNCTIONS *g_pFunctionTable; +DLL_FUNCTIONS *g_pFunctionTable_Post; +enginefuncs_t *g_pengfuncsTable; +enginefuncs_t *g_pengfuncsTable_Post; + // GetEntityAPI2 functions static DLL_FUNCTIONS g_EntityAPI_Table = { @@ -2114,6 +2123,7 @@ C_DLLEXPORT int GetEntityAPI2(DLL_FUNCTIONS *pFunctionTable, int *interfaceVersi return(FALSE); } memcpy(pFunctionTable, &g_EntityAPI_Table, sizeof(DLL_FUNCTIONS)); + g_pFunctionTable=pFunctionTable; return(TRUE); } @@ -2131,7 +2141,7 @@ C_DLLEXPORT int GetEntityAPI2_Post(DLL_FUNCTIONS *pFunctionTable, int *interface return(FALSE); } memcpy( pFunctionTable, &g_EntityAPI_Post_Table, sizeof( DLL_FUNCTIONS ) ); - + g_pFunctionTable_Post=pFunctionTable; return(TRUE); } @@ -2154,6 +2164,7 @@ C_DLLEXPORT int GetEngineFunctions(enginefuncs_t *pengfuncsFromEngine, int *inte return(FALSE); } memcpy(pengfuncsFromEngine, &g_EngineFuncs_Table, sizeof(enginefuncs_t)); + g_pengfuncsTable=pengfuncsFromEngine; return TRUE; } @@ -2171,6 +2182,7 @@ C_DLLEXPORT int GetEngineFunctions_Post(enginefuncs_t *pengfuncsFromEngine, int return(FALSE); } memcpy(pengfuncsFromEngine, &g_EngineFuncs_Post_Table, sizeof(enginefuncs_t)); + g_pengfuncsTable_Post=pengfuncsFromEngine; return TRUE; } diff --git a/dlls/engine/engine.cpp b/dlls/engine/engine.cpp index d4309700..190dc156 100755 --- a/dlls/engine/engine.cpp +++ b/dlls/engine/engine.cpp @@ -4,6 +4,8 @@ struct usercmd_s *g_cmd; struct PlayerInfo plinfo[33]; struct GlobalInfo glinfo; +int g_CameraCount; + TraceResult g_tr; void UTIL_SetSize(edict_t *pev, const Vector &vecMin, const Vector &vecMax) @@ -33,6 +35,7 @@ static cell AMX_NATIVE_CALL register_think(AMX *amx, cell *params) Thinks.push_back(p); + g_pFunctionTable->pfnThink=Think; return p->Forward; } @@ -47,6 +50,7 @@ static cell AMX_NATIVE_CALL register_impulse(AMX *amx, cell *params) Impulses.push_back(p); + g_pFunctionTable->pfnCmdStart=CmdStart; return p->Forward; } @@ -76,6 +80,8 @@ static cell AMX_NATIVE_CALL register_touch(AMX *amx, cell *params) Touches.push_back(p); + g_pFunctionTable->pfnTouch=pfnTouch; + return p->Forward; } @@ -438,6 +444,15 @@ static cell AMX_NATIVE_CALL set_view(AMX *amx, cell *params) { if(plinfo[ENTINDEX(pPlayer)].pViewEnt) { REMOVE_ENTITY(plinfo[ENTINDEX(pPlayer)].pViewEnt); } + if (plinfo[ENTINDEX(pPlayer)].iViewType != CAMERA_NONE) // Verify that they were originally in a modified view + { + g_CameraCount--; + if (g_CameraCount < 0) + g_CameraCount=0; + if (g_CameraCount==0) + g_pFunctionTable->pfnAddToFullPack=AddToFullPack; + } + plinfo[ENTINDEX(pPlayer)].iViewType = CAMERA_NONE; plinfo[ENTINDEX(pPlayer)].pViewEnt = NULL; @@ -454,7 +469,8 @@ static cell AMX_NATIVE_CALL set_view(AMX *amx, cell *params) { plinfo[ENTINDEX(pPlayer)].iViewType = CAMERA_3RDPERSON; return 1; } - + g_CameraCount++; + g_pFunctionTable->pfnAddToFullPack=AddToFullPack; plinfo[ENTINDEX(pPlayer)].iRenderMode = pPlayer->v.rendermode; plinfo[ENTINDEX(pPlayer)].fRenderAmt = pPlayer->v.renderamt; @@ -484,6 +500,8 @@ static cell AMX_NATIVE_CALL set_view(AMX *amx, cell *params) { return 1; } + g_CameraCount++; + g_pFunctionTable->pfnAddToFullPack=AddToFullPack; plinfo[ENTINDEX(pPlayer)].iRenderMode = pPlayer->v.rendermode; plinfo[ENTINDEX(pPlayer)].fRenderAmt = pPlayer->v.renderamt; @@ -513,6 +531,8 @@ static cell AMX_NATIVE_CALL set_view(AMX *amx, cell *params) { return 1; } + g_CameraCount++; + g_pFunctionTable->pfnAddToFullPack=AddToFullPack; plinfo[ENTINDEX(pPlayer)].iRenderMode = pPlayer->v.rendermode; plinfo[ENTINDEX(pPlayer)].fRenderAmt = pPlayer->v.renderamt; @@ -894,1198 +914,18 @@ static cell AMX_NATIVE_CALL take_damage(AMX *amx, cell *params) return 1; } -//(mahnsawce) -static cell AMX_NATIVE_CALL engfunc(AMX *amx, cell *params) -{ - // Variables I will need throughout all the different calls. - int type = params[1]; -// LOG_CONSOLE(PLID,"Called: %i %i",type,*params/sizeof(cell)); - int len; - char *temp; - char *temp2; - cell *cRet; - vec3_t Vec1; - vec3_t Vec2; - vec3_t Vec3; - vec3_t Vec4; - int iparam1; - int iparam2; - int iparam3; - int iparam4; - int iparam5; - int iparam6; - float fparam1; - float fparam2; - float fparam3; -// float fTemp[3]; - int index; - edict_t *pRet=NULL; - // Now start calling.. :/ - switch (type) - { - // pfnPrecacheModel - case EngFunc_PrecacheModel: // int ) (char* s); - temp = MF_GetAmxString(amx,params[2],0,&len); - if (temp[0]==0) - return 0; - return (*g_engfuncs.pfnPrecacheModel)((char*)STRING(ALLOC_STRING(temp))); - - - // pfnPrecacheSound - case EngFunc_PrecacheSound: // int ) (char* s); - temp = MF_GetAmxString(amx,params[2],0,&len); - if (temp[0]==0) - return 0; - return (*g_engfuncs.pfnPrecacheSound)((char*)STRING(ALLOC_STRING(temp))); - - - // pfnSetModel - case EngFunc_SetModel: // void ) (edict_t *e, const char *m); - temp = MF_GetAmxString(amx,params[3],0,&len); - cRet = MF_GetAmxAddr(amx,params[2]); - index=cRet[0]; - CHECK_ENTITY(index); - (*g_engfuncs.pfnSetModel)(INDEXENT(index),(char*)STRING(ALLOC_STRING(temp))); - return 1; - - - // pfnModelIndex - case EngFunc_ModelIndex: - temp = MF_GetAmxString(amx,params[2],0,&len); - return (*g_engfuncs.pfnModelIndex)(temp); - - - // pfnModelFrames - case EngFunc_ModelFrames: // int ) (int modelIndex); - cRet = MF_GetAmxAddr(amx,params[2]); - index = cRet[0]; - return (*g_engfuncs.pfnModelFrames)(index); - - - // pfnSetSize - case EngFunc_SetSize: // void ) (edict_t *e, const float *rgflMin, const float *rgflMax); - cRet = MF_GetAmxAddr(amx,params[2]); - index=cRet[0]; - CHECK_ENTITY(index); - cRet = MF_GetAmxAddr(amx,params[3]); - Vec1[0]=amx_ctof(cRet[0]); - Vec1[1]=amx_ctof(cRet[1]); - Vec1[2]=amx_ctof(cRet[2]); - cRet = MF_GetAmxAddr(amx,params[4]); - Vec2[0]=amx_ctof(cRet[0]); - Vec2[1]=amx_ctof(cRet[1]); - Vec2[2]=amx_ctof(cRet[2]); - (*g_engfuncs.pfnSetSize)(INDEXENT(index),Vec1,Vec2); - return 1; - - - // pfnChangeLevel (is this needed?) - case EngFunc_ChangeLevel: // void ) (char* s1, char* s2); - temp = MF_GetAmxString(amx,params[2],0,&len); - temp2 = MF_GetAmxString(amx,params[3],1,&len); - (*g_engfuncs.pfnChangeLevel)(temp,temp2); - return 1; - - - // pfnVecToYaw - case EngFunc_VecToYaw: // float) (const float *rgflVector); - cRet = MF_GetAmxAddr(amx,params[2]); - Vec1[0]=amx_ctof(cRet[0]); - Vec1[1]=amx_ctof(cRet[1]); - Vec1[2]=amx_ctof(cRet[2]); - cRet = MF_GetAmxAddr(amx,params[3]); - fparam1= (*g_engfuncs.pfnVecToYaw)(Vec1); - cRet[0] = amx_ftoc(fparam1); - return 1; - - - // pfnVecToAngles - case EngFunc_VecToAngles: // void ) (const float *rgflVectorIn, float *rgflVectorOut); - cRet = MF_GetAmxAddr(amx,params[2]); - Vec1[0]=amx_ctof(cRet[0]); - Vec1[1]=amx_ctof(cRet[1]); - Vec1[2]=amx_ctof(cRet[2]); - - (*g_engfuncs.pfnVecToAngles)(Vec1,Vec2); - cRet = MF_GetAmxAddr(amx,params[3]); - cRet[0]=amx_ftoc(Vec2[0]); - cRet[1]=amx_ftoc(Vec2[1]); - cRet[2]=amx_ftoc(Vec2[2]); - return 1; - - - // pfnMoveToOrigin - case EngFunc_MoveToOrigin: // void ) (edict_t *ent, const float *pflGoal, float dist, int iMoveType); - cRet = MF_GetAmxAddr(amx,params[2]); - index=cRet[0]; - cRet = MF_GetAmxAddr(amx,params[3]); - Vec1[0]=amx_ctof(cRet[0]); - Vec1[1]=amx_ctof(cRet[1]); - Vec1[2]=amx_ctof(cRet[2]); - cRet = MF_GetAmxAddr(amx,params[4]); - fparam1=amx_ctof(cRet[0]); - cRet = MF_GetAmxAddr(amx,params[5]); - iparam1=cRet[0]; - CHECK_ENTITY(index); - (*g_engfuncs.pfnMoveToOrigin)(INDEXENT(index),Vec1,fparam1,iparam1); - return 1; - - - // pfnChangeYaw - case EngFunc_ChangeYaw: // void ) (edict_t* ent); - cRet = MF_GetAmxAddr(amx,params[2]); - index=cRet[0]; - CHECK_ENTITY(index); - (*g_engfuncs.pfnChangeYaw)(INDEXENT(index)); - return 1; - - - // pfnChangePitch - case EngFunc_ChangePitch: // void ) (edict_t* ent); - cRet = MF_GetAmxAddr(amx,params[2]); - index=cRet[0]; - CHECK_ENTITY(index); - (*g_engfuncs.pfnChangePitch)(INDEXENT(index)); - return 1; - - - // pfnFindEntityByString - case EngFunc_FindEntityByString: // edict) (edict_t *pEdictStartSearchAfter, const char *pszField, const char *pszValue); - cRet = MF_GetAmxAddr(amx,params[2]); - index=cRet[0]; - temp = MF_GetAmxString(amx,params[3],0,&len); - temp2 = MF_GetAmxString(amx,params[4],1,&len); - pRet = (*g_engfuncs.pfnFindEntityByString)(index == -1 ? NULL : INDEXENT(index),temp,temp2); - if (pRet) - return ENTINDEX(pRet); - return -1; - - - // pfnGetEntityIllum - case EngFunc_GetEntityIllum: // int ) (edict_t* pEnt); - cRet = MF_GetAmxAddr(amx,params[2]); - index=cRet[0]; - CHECK_ENTITY(index); - return (*g_engfuncs.pfnGetEntityIllum)(INDEXENT(index)); - - - // pfnFindEntityInSphere - case EngFunc_FindEntityInSphere: // edict) (edict_t *pEdictStartSearchAfter, const float *org, float rad); - cRet = MF_GetAmxAddr(amx,params[2]); - index=cRet[0]; - cRet = MF_GetAmxAddr(amx,params[3]); - Vec1[0]=amx_ctof(cRet[0]); - Vec1[1]=amx_ctof(cRet[1]); - Vec1[2]=amx_ctof(cRet[2]); - cRet = MF_GetAmxAddr(amx,params[4]); - fparam1 = amx_ctof(cRet[0]); - pRet = (*g_engfuncs.pfnFindEntityInSphere)(index == -1 ? NULL : INDEXENT(index),Vec1,fparam1); - if (pRet) - return ENTINDEX(pRet); - return -1; - - - // pfnFindClientsInPVS - case EngFunc_FindClientInPVS: // edict) (edict_t *pEdict); - cRet = MF_GetAmxAddr(amx,params[2]); - index=cRet[0]; - CHECK_ENTITY(index); - pRet=(*g_engfuncs.pfnFindClientInPVS)(INDEXENT(index)); - return ENTINDEX(pRet); - - - // pfnEntitiesInPVS - case EngFunc_EntitiesInPVS: // edict) (edict_t *pplayer); - cRet = MF_GetAmxAddr(amx,params[2]); - index=cRet[0]; - CHECK_ENTITY(index); - pRet=(*g_engfuncs.pfnEntitiesInPVS)(INDEXENT(index)); - return ENTINDEX(pRet); - - - // pfnMakeVectors - case EngFunc_MakeVectors: // void ) (const float *rgflVector); - cRet = MF_GetAmxAddr(amx,params[2]); - Vec1[0]=amx_ctof(cRet[0]); - Vec1[1]=amx_ctof(cRet[1]); - Vec1[2]=amx_ctof(cRet[2]); - (*g_engfuncs.pfnMakeVectors)(Vec1); - return 1; - - - // pfnAngleVectors - case EngFunc_AngleVectors: // void ) (const float *rgflVector, float *forward, float *right, float *up); - cRet = MF_GetAmxAddr(amx,params[2]); - Vec1[0]=amx_ctof(cRet[0]); - Vec1[1]=amx_ctof(cRet[1]); - Vec1[2]=amx_ctof(cRet[2]); - (*g_engfuncs.pfnAngleVectors)(Vec1,Vec2,Vec3,Vec4); - cRet = MF_GetAmxAddr(amx,params[3]); - cRet[0] = amx_ftoc(Vec2[0]); - cRet[1] = amx_ftoc(Vec2[1]); - cRet[2] = amx_ftoc(Vec2[2]); - cRet = MF_GetAmxAddr(amx,params[4]); - cRet[0] = amx_ftoc(Vec3[0]); - cRet[1] = amx_ftoc(Vec3[1]); - cRet[2] = amx_ftoc(Vec3[2]); - cRet = MF_GetAmxAddr(amx,params[5]); - cRet[0] = amx_ftoc(Vec4[0]); - cRet[1] = amx_ftoc(Vec4[1]); - cRet[2] = amx_ftoc(Vec4[2]); - return 1; - - - // pfnCreateEntity - case EngFunc_CreateEntity: // edict) (void); - pRet = (*g_engfuncs.pfnCreateEntity)(); - if (pRet) - return ENTINDEX(pRet); - return 0; - - - // pfnRemoveEntity - case EngFunc_RemoveEntity: // void ) (edict_t* e); - cRet = MF_GetAmxAddr(amx,params[2]); - index = cRet[0]; - CHECK_ENTITY(index); - if (index == 0) - return 0; - (*g_engfuncs.pfnRemoveEntity)(INDEXENT(index)); - return 1; - - - // pfnCreateNamedEntity - case EngFunc_CreateNamedEntity: // edict) (int className); - cRet = MF_GetAmxAddr(amx,params[2]); - iparam1 = cRet[0]; - pRet = (*g_engfuncs.pfnCreateNamedEntity)(iparam1); - if (pRet) - return ENTINDEX(pRet); - return 0; - - - // pfnMakeStatic - case EngFunc_MakeStatic: // void ) (edict_t *ent); - cRet = MF_GetAmxAddr(amx,params[2]); - index = cRet[0]; - CHECK_ENTITY(index); - (*g_engfuncs.pfnMakeStatic)(INDEXENT(index)); - return 1; - - - // pfnEntIsOnFloor - case EngFunc_EntIsOnFloor: // int ) (edict_t *e); - cRet = MF_GetAmxAddr(amx,params[2]); - index = cRet[0]; - CHECK_ENTITY(index); - return (*g_engfuncs.pfnEntIsOnFloor)(INDEXENT(index)); - - - // pfnDropToFloor - case EngFunc_DropToFloor: // int ) (edict_t* e); - cRet = MF_GetAmxAddr(amx,params[2]); - index = cRet[0]; - CHECK_ENTITY(index); - return (*g_engfuncs.pfnDropToFloor)(INDEXENT(index)); - - - // pfnWalkMove - case EngFunc_WalkMove: // int ) (edict_t *ent, float yaw, float dist, int iMode); - cRet = MF_GetAmxAddr(amx,params[2]); - index = cRet[0]; - CHECK_ENTITY(index); - cRet = MF_GetAmxAddr(amx,params[3]); - fparam1 = amx_ctof(cRet[0]); - cRet = MF_GetAmxAddr(amx,params[4]); - fparam2 = amx_ctof(cRet[0]); - cRet = MF_GetAmxAddr(amx,params[5]); - iparam1 = cRet[0]; - return (*g_engfuncs.pfnWalkMove)(INDEXENT(index),fparam1,fparam2,iparam1); - - - // pfnSetOrigin - case EngFunc_SetOrigin: // void ) (edict_t *e, const float *rgflOrigin); - cRet = MF_GetAmxAddr(amx,params[2]); - index = cRet[0]; - CHECK_ENTITY(index); - cRet = MF_GetAmxAddr(amx,params[3]); - Vec1[0]=amx_ctof(cRet[0]); - Vec1[1]=amx_ctof(cRet[1]); - Vec1[2]=amx_ctof(cRet[2]); - (*g_engfuncs.pfnSetOrigin)(INDEXENT(index),Vec1); - return 1; - - - // pfnEmitSound - case EngFunc_EmitSound: // void ) (edict_t *entity, int channel, const char *sample, /*int*/float volume, float attenuation, int fFlags, int pitch); - cRet = MF_GetAmxAddr(amx,params[2]); - index = cRet[0]; - CHECK_ENTITY(index); - cRet = MF_GetAmxAddr(amx,params[3]); - iparam1=cRet[0]; - temp = MF_GetAmxString(amx,params[4],0,&len); - cRet = MF_GetAmxAddr(amx,params[5]); - fparam1=amx_ctof(cRet[0]); - cRet = MF_GetAmxAddr(amx,params[6]); - fparam2=amx_ctof(cRet[0]); - cRet = MF_GetAmxAddr(amx,params[7]); - iparam2=cRet[0]; - cRet = MF_GetAmxAddr(amx,params[8]); - iparam3=cRet[0]; - (*g_engfuncs.pfnEmitSound)(INDEXENT(index),iparam1,temp,fparam1,fparam2,iparam2,iparam3); - return 1; - - - // pfnEmitAmbientSound - case EngFunc_EmitAmbientSound: // void ) (edict_t *entity, float *pos, const char *samp, float vol, float attenuation, int fFlags, int pitch); - cRet = MF_GetAmxAddr(amx,params[2]); - index = cRet[0]; - CHECK_ENTITY(index); - cRet = MF_GetAmxAddr(amx,params[3]); - Vec1[0]=amx_ctof(cRet[0]); - Vec1[1]=amx_ctof(cRet[1]); - Vec1[2]=amx_ctof(cRet[2]); - temp = MF_GetAmxString(amx,params[4],0,&len); - cRet = MF_GetAmxAddr(amx,params[5]); - fparam1=amx_ctof(cRet[0]); - cRet = MF_GetAmxAddr(amx,params[6]); - fparam2=amx_ctof(cRet[0]); - cRet = MF_GetAmxAddr(amx,params[7]); - iparam1=cRet[0]; - cRet = MF_GetAmxAddr(amx,params[8]); - iparam2=cRet[0]; - (*g_engfuncs.pfnEmitAmbientSound)(INDEXENT(index),Vec1,temp,fparam1,fparam2,iparam1,iparam2); - return 1; - - // pfnTraceLine - case EngFunc_TraceLine: // void ) (const float *v1, const float *v2, int fNoMonsters, edict_t *pentToSkip, TraceResult *ptr); - cRet = MF_GetAmxAddr(amx,params[2]); - Vec1[0]=amx_ctof(cRet[0]); - Vec1[1]=amx_ctof(cRet[1]); - Vec1[2]=amx_ctof(cRet[2]); - cRet = MF_GetAmxAddr(amx,params[3]); - Vec2[0]=amx_ctof(cRet[0]); - Vec2[1]=amx_ctof(cRet[1]); - Vec2[2]=amx_ctof(cRet[2]); - cRet = MF_GetAmxAddr(amx,params[4]); - iparam1=cRet[0]; - cRet = MF_GetAmxAddr(amx,params[5]); - index=cRet[0]; - (*g_engfuncs.pfnTraceLine)(Vec1,Vec2,iparam1,index != -1 ? INDEXENT(index) : NULL, &g_tr); - return 1; - - - // pfnTraceToss - case EngFunc_TraceToss: // void ) (edict_t* pent, edict_t* pentToIgnore, TraceResult *ptr); - cRet = MF_GetAmxAddr(amx,params[2]); - index = cRet[0]; - cRet = MF_GetAmxAddr(amx,params[3]); - iparam1 = cRet[0]; - CHECK_ENTITY(index); - (*g_engfuncs.pfnTraceToss)(INDEXENT(index),iparam1 == -1 ? NULL : INDEXENT(iparam1),&g_tr); - return 1; - - - // pfnTraceMonsterHull - case EngFunc_TraceMonsterHull: // int ) (edict_t *pEdict, const float *v1, const float *v2, int fNoMonsters, edict_t *pentToSkip, TraceResult *ptr); - cRet = MF_GetAmxAddr(amx,params[2]); - index = cRet[0]; - CHECK_ENTITY(index); - cRet = MF_GetAmxAddr(amx,params[3]); - Vec1[0]=amx_ctof(cRet[0]); - Vec1[1]=amx_ctof(cRet[1]); - Vec1[2]=amx_ctof(cRet[2]); - cRet = MF_GetAmxAddr(amx,params[4]); - Vec2[0]=amx_ctof(cRet[0]); - Vec2[1]=amx_ctof(cRet[1]); - Vec2[2]=amx_ctof(cRet[2]); - cRet = MF_GetAmxAddr(amx,params[5]); - iparam1=cRet[0]; - cRet = MF_GetAmxAddr(amx,params[6]); - iparam2=cRet[0]; - (*g_engfuncs.pfnTraceMonsterHull)(INDEXENT(index),Vec1,Vec2,iparam1,iparam2 == 0 ? NULL : INDEXENT(iparam2),&g_tr); - return 1; - - - // pfnTraceHull - case EngFunc_TraceHull: // void ) (const float *v1, const float *v2, int fNoMonsters, int hullNumber, edict_t *pentToSkip, TraceResult *ptr); - cRet = MF_GetAmxAddr(amx,params[2]); - Vec1[0]=amx_ctof(cRet[0]); - Vec1[1]=amx_ctof(cRet[1]); - Vec1[2]=amx_ctof(cRet[2]); - cRet = MF_GetAmxAddr(amx,params[3]); - Vec2[0]=amx_ctof(cRet[0]); - Vec2[1]=amx_ctof(cRet[1]); - Vec2[2]=amx_ctof(cRet[2]); - cRet = MF_GetAmxAddr(amx,params[4]); - iparam1 = cRet[0]; - cRet = MF_GetAmxAddr(amx,params[5]); - iparam2 = cRet[0]; - cRet = MF_GetAmxAddr(amx,params[6]); - iparam3 = cRet[0]; - (*g_engfuncs.pfnTraceHull)(Vec1,Vec2,iparam1,iparam2,iparam3 == 0 ? 0 : INDEXENT(iparam3),&g_tr); - return 1; - - - // pfnTraceModel - case EngFunc_TraceModel: // void ) (const float *v1, const float *v2, int hullNumber, edict_t *pent, TraceResult *ptr); - cRet = MF_GetAmxAddr(amx,params[2]); - Vec1[0]=amx_ctof(cRet[0]); - Vec1[1]=amx_ctof(cRet[1]); - Vec1[2]=amx_ctof(cRet[2]); - cRet = MF_GetAmxAddr(amx,params[3]); - Vec2[0]=amx_ctof(cRet[0]); - Vec2[1]=amx_ctof(cRet[1]); - Vec2[2]=amx_ctof(cRet[2]); - cRet = MF_GetAmxAddr(amx,params[4]); - iparam1 = cRet[0]; - cRet = MF_GetAmxAddr(amx,params[5]); - iparam2 = cRet[0]; - (*g_engfuncs.pfnTraceModel)(Vec1,Vec2,iparam1,iparam2 == 0 ? NULL : INDEXENT(iparam2),&g_tr); - return 1; - - - // pfnTraceTexture - case EngFunc_TraceTexture: // const char *) (edict_t *pTextureEntity, const float *v1, const float *v2 ); - cRet = MF_GetAmxAddr(amx,params[2]); - index = cRet[0]; - CHECK_ENTITY(index); - cRet = MF_GetAmxAddr(amx,params[3]); - Vec1[0]=amx_ctof(cRet[0]); - Vec1[1]=amx_ctof(cRet[1]); - Vec1[2]=amx_ctof(cRet[2]); - cRet = MF_GetAmxAddr(amx,params[4]); - Vec2[0]=amx_ctof(cRet[0]); - Vec2[1]=amx_ctof(cRet[1]); - Vec2[2]=amx_ctof(cRet[2]); - temp = (char*)(*g_engfuncs.pfnTraceTexture)(INDEXENT(index),Vec1,Vec2); - cRet = MF_GetAmxAddr(amx,params[6]); - MF_SetAmxString(amx, params[5], temp, cRet[0]); - return 1; - - - // pfnTraceSphere - case EngFunc_TraceSphere: // void ) (const float *v1, const float *v2, int fNoMonsters, float radius, edict_t *pentToSkip, TraceResult *ptr); - cRet = MF_GetAmxAddr(amx,params[2]); - Vec1[0]=amx_ctof(cRet[0]); - Vec1[1]=amx_ctof(cRet[1]); - Vec1[2]=amx_ctof(cRet[2]); - cRet = MF_GetAmxAddr(amx,params[3]); - Vec2[0]=amx_ctof(cRet[0]); - Vec2[1]=amx_ctof(cRet[1]); - Vec2[2]=amx_ctof(cRet[2]); - cRet = MF_GetAmxAddr(amx,params[4]); - iparam1 = cRet[0]; - cRet = MF_GetAmxAddr(amx,params[5]); - fparam1 = amx_ctof(cRet[0]); - cRet = MF_GetAmxAddr(amx,params[6]); - index = cRet[0]; - (*g_engfuncs.pfnTraceSphere)(Vec1,Vec2,iparam1,fparam1,index == 0 ? NULL : INDEXENT(index),&g_tr); - return 1; - - - // pfnGetAimVector - case EngFunc_GetAimVector: // void ) (edict_t* ent, float speed, float *rgflReturn); - cRet = MF_GetAmxAddr(amx,params[2]); - index = cRet[0]; - CHECK_ENTITY(index); - cRet = MF_GetAmxAddr(amx,params[3]); - fparam1 = amx_ctof(cRet[0]); - (*g_engfuncs.pfnGetAimVector)(INDEXENT(index),fparam1,Vec1); - cRet = MF_GetAmxAddr(amx,params[4]); - cRet[0] = amx_ftoc(Vec1[0]); - cRet[1] = amx_ftoc(Vec1[1]); - cRet[2] = amx_ftoc(Vec1[2]); - return 1; - - - // pfnParticleEffect - case EngFunc_ParticleEffect: // void ) (const float *org, const float *dir, float color, float count); - cRet = MF_GetAmxAddr(amx,params[2]); - Vec1[0]=amx_ctof(cRet[0]); - Vec1[1]=amx_ctof(cRet[1]); - Vec1[2]=amx_ctof(cRet[2]); - cRet = MF_GetAmxAddr(amx,params[3]); - Vec2[0]=amx_ctof(cRet[0]); - Vec2[1]=amx_ctof(cRet[1]); - Vec2[2]=amx_ctof(cRet[2]); - cRet = MF_GetAmxAddr(amx,params[4]); - fparam1=amx_ctof(cRet[0]); - cRet = MF_GetAmxAddr(amx,params[5]); - fparam2=amx_ctof(cRet[0]); - (*g_engfuncs.pfnParticleEffect)(Vec1,Vec2,fparam1,fparam2); - return 1; - - - // pfnLightStyle - case EngFunc_LightStyle: // void ) (int style, char* val); - cRet = MF_GetAmxAddr(amx,params[2]); - iparam1=cRet[0]; - temp = MF_GetAmxString(amx,params[3],0,&len); - (*g_engfuncs.pfnLightStyle)(iparam1,temp); - return 1; - - - // pfnDecalIndex - case EngFunc_DecalIndex: // int ) (const char *name); - temp = MF_GetAmxString(amx,params[2],0,&len); - return (*g_engfuncs.pfnDecalIndex)(temp); - - - // pfnPointContents - case EngFunc_PointContents: // int ) (const float *rgflVector); - cRet = MF_GetAmxAddr(amx,params[2]); - Vec1[0]=amx_ctof(cRet[0]); - Vec1[1]=amx_ctof(cRet[1]); - Vec1[2]=amx_ctof(cRet[2]); - return (*g_engfuncs.pfnPointContents)(Vec1); - - - // pfnFreeEntPrivateData - case EngFunc_FreeEntPrivateData: // void ) (edict_t *pEdict); - cRet = MF_GetAmxAddr(amx,params[2]); - index = cRet[0]; - CHECK_ENTITY(index); - (*g_engfuncs.pfnFreeEntPrivateData)(INDEXENT(index)); - - - // pfnSzFromIndex - case EngFunc_SzFromIndex: // const char * ) (int iString); - cRet = MF_GetAmxAddr(amx,params[2]); - iparam1 = cRet[0]; - temp = (char*)(*g_engfuncs.pfnSzFromIndex)(iparam1); - cRet = MF_GetAmxAddr(amx,params[4]); - MF_SetAmxString(amx, params[3], temp, cRet[0]); - return 1; - - - // pfnAllocString - case EngFunc_AllocString: // int ) (const char *szValue); - temp = MF_GetAmxString(amx,params[2],0,&len); - return (*g_engfuncs.pfnAllocString)((const char *)temp); - - - // pfnRegUserMsg - case EngFunc_RegUserMsg: // int ) (const char *pszName, int iSize); - temp = MF_GetAmxString(amx,params[2],0,&len); - cRet = MF_GetAmxAddr(amx,params[3]); - iparam1 = cRet[0]; - return (*g_engfuncs.pfnRegUserMsg)(temp,iparam1); - - - // pfnAnimationAutomove - case EngFunc_AnimationAutomove: // void ) (const edict_t* pEdict, float flTime); - cRet = MF_GetAmxAddr(amx,params[2]); - index = cRet[0]; - CHECK_ENTITY(index); - cRet = MF_GetAmxAddr(amx,params[3]); - fparam1 = amx_ctof(cRet[0]); - (*g_engfuncs.pfnAnimationAutomove)(INDEXENT(index),fparam1); - return 1; - - - // pfnGetBonePosition - case EngFunc_GetBonePosition: // void ) (const edict_t* pEdict, int iBone, float *rgflOrigin, float *rgflAngles ); - cRet = MF_GetAmxAddr(amx,params[2]); - index=cRet[0]; - CHECK_ENTITY(index); - cRet = MF_GetAmxAddr(amx,params[3]); - iparam1=cRet[0]; - (*g_engfuncs.pfnGetBonePosition)(INDEXENT(index),iparam1,Vec1,Vec2); - cRet = MF_GetAmxAddr(amx,params[4]); - cRet[0]=amx_ftoc(Vec1[0]); - cRet[1]=amx_ftoc(Vec1[1]); - cRet[2]=amx_ftoc(Vec1[2]); - cRet = MF_GetAmxAddr(amx,params[5]); - cRet[0]=amx_ftoc(Vec2[0]); - cRet[1]=amx_ftoc(Vec2[1]); - cRet[2]=amx_ftoc(Vec2[2]); - return 1; - - - // pfnGetAttachment - case EngFunc_GetAttachment: // void ) (const edict_t *pEdict, int iAttachment, float *rgflOrigin, float *rgflAngles ); - cRet = MF_GetAmxAddr(amx,params[2]); - index=cRet[0]; - CHECK_ENTITY(index); - cRet = MF_GetAmxAddr(amx,params[3]); - iparam1=cRet[0]; - (*g_engfuncs.pfnGetAttachment)(INDEXENT(index),iparam1,Vec1,Vec2); - cRet = MF_GetAmxAddr(amx,params[4]); - cRet[0]=amx_ftoc(Vec1[0]); - cRet[1]=amx_ftoc(Vec1[1]); - cRet[2]=amx_ftoc(Vec1[2]); - cRet = MF_GetAmxAddr(amx,params[5]); - cRet[0]=amx_ftoc(Vec2[0]); - cRet[1]=amx_ftoc(Vec2[1]); - cRet[2]=amx_ftoc(Vec2[2]); - return 1; - - - // pfnSetView - case EngFunc_SetView: // void ) (const edict_t *pClient, const edict_t *pViewent ); - cRet = MF_GetAmxAddr(amx,params[2]); - iparam1 = cRet[0]; - cRet = MF_GetAmxAddr(amx,params[3]); - iparam2 = cRet[0]; - CHECK_ENTITY(iparam1); - CHECK_ENTITY(iparam2); - (*g_engfuncs.pfnSetView)(INDEXENT(iparam1),INDEXENT(iparam2)); - return 1; - - - // pfnTime - case EngFunc_Time: // float) ( void ); - fparam1 = (*g_engfuncs.pfnTime)(); - return amx_ftoc(fparam1); - - - // pfnCrosshairAngle - case EngFunc_CrosshairAngle: // void ) (const edict_t *pClient, float pitch, float yaw); - cRet = MF_GetAmxAddr(amx,params[2]); - index = cRet[0]; - CHECK_ENTITY(index); - cRet = MF_GetAmxAddr(amx,params[3]); - fparam1 = amx_ctof(cRet[0]); - cRet = MF_GetAmxAddr(amx,params[4]); - fparam2 = amx_ctof(cRet[0]); - (*g_engfuncs.pfnCrosshairAngle)(INDEXENT(index),fparam1,fparam2); - return 1; - - - // pfnFadeClientVolume - case EngFunc_FadeClientVolume: // void ) (const edict_t *pEdict, int fadePercent, int fadeOutSeconds, int holdTime, int fadeInSeconds); - cRet = MF_GetAmxAddr(amx,params[2]); - index = cRet[0]; - CHECK_ENTITY(index); - cRet = MF_GetAmxAddr(amx,params[3]); - iparam1 = cRet[0]; - cRet = MF_GetAmxAddr(amx,params[4]); - iparam2 = cRet[0]; - cRet = MF_GetAmxAddr(amx,params[5]); - iparam3 = cRet[0]; - cRet = MF_GetAmxAddr(amx,params[6]); - iparam4 = cRet[0]; - (*g_engfuncs.pfnFadeClientVolume)(INDEXENT(index),iparam1,iparam2,iparam3,iparam4); - return 1; - - - // pfnSetClientMaxSpeed - case EngFunc_SetClientMaxspeed: // void ) (const edict_t *pEdict, float fNewMaxspeed); - cRet = MF_GetAmxAddr(amx,params[2]); - index = cRet[0]; - CHECK_ENTITY(index); - cRet = MF_GetAmxAddr(amx,params[3]); - fparam1 = amx_ctof(cRet[0]); - (*g_engfuncs.pfnSetClientMaxspeed)(INDEXENT(index),fparam1); - return 1; - - - // pfnCreateFakeClient - case EngFunc_CreateFakeClient: // edict) (const char *netname); // returns NULL if fake client can't be created - temp = MF_GetAmxString(amx,params[2],0,&len); - pRet = (*g_engfuncs.pfnCreateFakeClient)(STRING(ALLOC_STRING(temp))); - if (pRet == 0) - return 0; - return ENTINDEX(pRet); - - - // pfnRunPlayerMove - case EngFunc_RunPlayerMove: // void ) (edict_t *fakeclient, const float *viewangles, float forwardmove, float sidemove, float upmove, unsigned short buttons, byte impulse, byte msec ); - cRet = MF_GetAmxAddr(amx,params[2]); - index = cRet[0]; - CHECK_ENTITY(index); - cRet = MF_GetAmxAddr(amx,params[3]); - Vec1[0]=amx_ctof(cRet[0]); - Vec1[1]=amx_ctof(cRet[1]); - Vec1[2]=amx_ctof(cRet[2]); - cRet = MF_GetAmxAddr(amx,params[4]); - fparam1=amx_ctof(cRet[0]); - cRet = MF_GetAmxAddr(amx,params[5]); - fparam2=amx_ctof(cRet[0]); - cRet = MF_GetAmxAddr(amx,params[6]); - fparam3=amx_ctof(cRet[0]); - cRet = MF_GetAmxAddr(amx,params[7]); - iparam1 = cRet[0]; - cRet = MF_GetAmxAddr(amx,params[8]); - iparam2 = cRet[0]; - cRet = MF_GetAmxAddr(amx,params[9]); - iparam3 = cRet[0]; - (*g_engfuncs.pfnRunPlayerMove)(INDEXENT(index),Vec1,fparam1,fparam2,fparam3,iparam1,iparam2,iparam3); - return 1; - - - // pfnNumberOfEntities - case EngFunc_NumberOfEntities: // int ) (void); - return (*g_engfuncs.pfnNumberOfEntities)(); - - - // pfnStaticDecal - case EngFunc_StaticDecal: // void ) ( const float *origin, int decalIndex, int entityIndex, int modelIndex ); - cRet = MF_GetAmxAddr(amx,params[2]); - Vec1[0]=amx_ctof(cRet[0]); - Vec1[1]=amx_ctof(cRet[1]); - Vec1[2]=amx_ctof(cRet[2]); - cRet = MF_GetAmxAddr(amx,params[3]); - iparam1 = cRet[0]; - cRet = MF_GetAmxAddr(amx,params[4]); - iparam2 = cRet[0]; - cRet = MF_GetAmxAddr(amx,params[5]); - iparam3 = cRet[0]; - (*g_engfuncs.pfnStaticDecal)(Vec1,iparam1,iparam2,iparam3); - return 1; - - - // pfnPrecacheGeneric - case EngFunc_PrecacheGeneric: // int ) (char* s); - temp = MF_GetAmxString(amx,params[2],0,&len); - return (*g_engfuncs.pfnPrecacheGeneric)((char*)STRING(ALLOC_STRING(temp))); - - - // pfnBuildSoundMsg - case EngFunc_BuildSoundMsg: // void ) (edict_t *entity, int channel, const char *sample, /*int*/float volume, float attenuation, int fFlags, int pitch, int msg_dest, int msg_type, const float *pOrigin, edict_t *ed); - cRet = MF_GetAmxAddr(amx,params[2]); - index = cRet[0]; - CHECK_ENTITY(index); - cRet = MF_GetAmxAddr(amx,params[3]); - iparam1 = cRet[0]; - temp = MF_GetAmxString(amx,params[4],0,&len); - cRet = MF_GetAmxAddr(amx,params[5]); - fparam1 = amx_ctof(cRet[0]); - cRet = MF_GetAmxAddr(amx,params[6]); - fparam2 = amx_ctof(cRet[0]); - cRet = MF_GetAmxAddr(amx,params[7]); - iparam2 = cRet[0]; - cRet = MF_GetAmxAddr(amx,params[8]); - iparam3 = cRet[0]; - cRet = MF_GetAmxAddr(amx,params[9]); - iparam4 = cRet[0]; - cRet = MF_GetAmxAddr(amx,params[10]); - iparam5 = cRet[0]; - cRet = MF_GetAmxAddr(amx,params[11]); - Vec1[0]=amx_ctof(cRet[0]); - Vec1[1]=amx_ctof(cRet[1]); - Vec1[2]=amx_ctof(cRet[2]); - cRet=MF_GetAmxAddr(amx,params[12]); - iparam6=cRet[0]; - /* don't check, it might not be included - CHECK_ENTITY(iparam5); - */ - (*g_engfuncs.pfnBuildSoundMsg)(INDEXENT(index),iparam1,temp,fparam1,fparam2,iparam2,iparam3,iparam4,iparam5,Vec1,iparam6 == 0 ? NULL : INDEXENT(iparam6)); - return 1; - - - // pfnGetPhysicsKeyValue - case EngFunc_GetPhysicsKeyValue: // const char* ) ( const edict_t *pClient, const char *key ); - cRet = MF_GetAmxAddr(amx,params[2]); - index = cRet[0]; - CHECK_ENTITY(index); - temp = MF_GetAmxString(amx,params[3],0,&len); - temp2 = (char*)(*g_engfuncs.pfnGetPhysicsKeyValue)(INDEXENT(index),(const char *)temp); - cRet = MF_GetAmxAddr(amx,params[5]); - MF_SetAmxString(amx,params[4],temp2,cRet[0]); - return 1; - - - // pfnSetPhysicsKeyValue - case EngFunc_SetPhysicsKeyValue: // void ) ( const edict_t *pClient, const char *key, const char *value ); - cRet = MF_GetAmxAddr(amx,params[2]); - index = cRet[0]; - CHECK_ENTITY(index); - temp = MF_GetAmxString(amx,params[3],0,&len); - temp2 = MF_GetAmxString(amx,params[4],0,&len); - (*g_engfuncs.pfnSetPhysicsKeyValue)(INDEXENT(index),STRING(ALLOC_STRING(temp)),STRING(ALLOC_STRING(temp2))); - return 1; - - - // pfnGetPhysicsInfoString - case EngFunc_GetPhysicsInfoString: // const char* ) ( const edict_t *pClient ); - cRet = MF_GetAmxAddr(amx,params[2]); - index = cRet[0]; - CHECK_ENTITY(index); - temp = (char*)(*g_engfuncs.pfnGetPhysicsInfoString)(INDEXENT(index)); - cRet = MF_GetAmxAddr(amx,params[4]); - - MF_SetAmxString(amx,params[3],temp,cRet[0]); - return 1; - - - // pfnPrecacheEvent - case EngFunc_PrecacheEvent: // unsigned short ) ( int type, const char*psz ); - cRet = MF_GetAmxAddr(amx,params[2]); - iparam1 = cRet[0]; - temp = MF_GetAmxString(amx,params[3],0,&len); - return (*g_engfuncs.pfnPrecacheEvent)(iparam1,(char*)STRING(ALLOC_STRING(temp))); - - - // pfnPlaybackEvent (grr) - case EngFunc_PlaybackEvent: // void ) - cRet = MF_GetAmxAddr(amx,params[2]); - iparam1 = cRet[0]; - cRet = MF_GetAmxAddr(amx,params[3]); - index = cRet[0]; - CHECK_ENTITY(index); - cRet = MF_GetAmxAddr(amx,params[4]); - iparam2 = cRet[0]; - cRet = MF_GetAmxAddr(amx,params[5]); - fparam1 = amx_ctof(cRet[0]); - cRet = MF_GetAmxAddr(amx,params[6]); - Vec1[0]=amx_ctof(cRet[0]); - Vec1[1]=amx_ctof(cRet[1]); - Vec1[2]=amx_ctof(cRet[2]); - cRet = MF_GetAmxAddr(amx,params[7]); - Vec2[0]=amx_ctof(cRet[0]); - Vec2[1]=amx_ctof(cRet[1]); - Vec2[2]=amx_ctof(cRet[2]); - cRet = MF_GetAmxAddr(amx,params[8]); - fparam2 = amx_ctof(cRet[0]); - cRet = MF_GetAmxAddr(amx,params[9]); - fparam3 = amx_ctof(cRet[0]); - cRet = MF_GetAmxAddr(amx,params[10]); - iparam3 = cRet[0]; - cRet = MF_GetAmxAddr(amx,params[11]); - iparam4 = cRet[0]; - cRet = MF_GetAmxAddr(amx,params[12]); - iparam5 = cRet[0]; - cRet = MF_GetAmxAddr(amx,params[13]); - iparam6 = cRet[0]; - (*g_engfuncs.pfnPlaybackEvent)(iparam1,INDEXENT(index),iparam2,fparam1,Vec1,Vec2,fparam2,fparam3,iparam3,iparam4,iparam5,iparam6); - return 1; - - // pfnGetCurrentPlayer - case EngFunc_GetCurrentPlayer: // int ) ( void ); - return (*g_engfuncs.pfnGetCurrentPlayer)(); - - - // pfnCanSkipPlayer - case EngFunc_CanSkipPlayer: // int ) ( const edict_t *player ); - cRet = MF_GetAmxAddr(amx,params[2]); - index = cRet[0]; - CHECK_ENTITY(index); - return (*g_engfuncs.pfnCanSkipPlayer)(INDEXENT(index)); - - - // pfnSetGroupMask - case EngFunc_SetGroupMask: // void ) ( int mask, int op ); - cRet = MF_GetAmxAddr(amx,params[2]); - iparam1 = cRet[0]; - cRet = MF_GetAmxAddr(amx,params[3]); - iparam2 = cRet[0]; - (*g_engfuncs.pfnSetGroupMask)(iparam1,iparam2); - return 1; - - - // pfnGetClientListening - case EngFunc_GetClientListening: // bool (int iReceiver, int iSender) - cRet = MF_GetAmxAddr(amx,params[2]); - iparam1 = cRet[0]; - cRet = MF_GetAmxAddr(amx,params[3]); - iparam2 = cRet[0]; - return (*g_engfuncs.pfnVoice_GetClientListening)(iparam1,iparam2); - - - // pfnSetClientListening - case EngFunc_SetClientListening: // bool (int iReceiver, int iSender, bool Listen) - cRet = MF_GetAmxAddr(amx,params[2]); - iparam1 = cRet[0]; - cRet = MF_GetAmxAddr(amx,params[3]); - iparam2 = cRet[0]; - cRet = MF_GetAmxAddr(amx,params[4]); - iparam3 = cRet[0]; - return (*g_engfuncs.pfnVoice_SetClientListening)(iparam1,iparam2,iparam3); - - - // pfnMessageBegin (AMX doesn't support MSG_ONE_UNRELIABLE, so I should add this incase anyone needs it.) - case EngFunc_MessageBegin: // void (int msg_dest, int msg_type, const float *pOrigin, edict_t *ed) - cRet = MF_GetAmxAddr(amx,params[2]); - iparam1 = cRet[0]; - cRet = MF_GetAmxAddr(amx,params[3]); - iparam2 = cRet[0]; - cRet = MF_GetAmxAddr(amx,params[4]); - Vec1[0]=amx_ctof(cRet[0]); - Vec1[1]=amx_ctof(cRet[1]); - Vec1[2]=amx_ctof(cRet[2]); - cRet = MF_GetAmxAddr(amx,params[5]); - index = cRet[0]; - (*g_engfuncs.pfnMessageBegin)(iparam1,iparam2,Vec1,index == 0 ? NULL : INDEXENT(index)); - return 1; - - - // pfnWriteCoord - case EngFunc_WriteCoord: // void (float) - cRet = MF_GetAmxAddr(amx,params[2]); - fparam1 = amx_ctof(cRet[0]); - (*g_engfuncs.pfnWriteCoord)(fparam1); - return 1; - - - // pfnWriteAngle - case EngFunc_WriteAngle: // void (float) - cRet = MF_GetAmxAddr(amx,params[2]); - fparam1 = amx_ctof(cRet[0]); - (*g_engfuncs.pfnWriteAngle)(fparam1); - return 1; - case EngFunc_InfoKeyValue: // char* ) (char *infobuffer, char *key); - // Modify the syntax a bit. - // index, key - cRet = MF_GetAmxAddr(amx,params[2]); - index = cRet[0]; - cRet = MF_GetAmxAddr(amx,params[5]); - iparam1 = cRet[0]; - CHECK_ENTITY(index); - temp2 = MF_GetAmxString(amx,params[3],0,&len); - temp = (*g_engfuncs.pfnInfoKeyValue)((*g_engfuncs.pfnGetInfoKeyBuffer)(INDEXENT(index)),temp2); - MF_SetAmxString(amx,params[4],temp,iparam1); - return 1; - - case EngFunc_SetKeyValue: // void ) (char *infobuffer, char *key, char *value); - cRet = MF_GetAmxAddr(amx,params[2]); - index = cRet[0]; - CHECK_ENTITY(index); - temp = MF_GetAmxString(amx,params[3],0,&len); - temp2 = MF_GetAmxString(amx,params[4],1,&len); - (*g_engfuncs.pfnSetKeyValue)((*g_engfuncs.pfnGetInfoKeyBuffer)(INDEXENT(index)),temp,temp2); - return 1; - case EngFunc_SetClientKeyValue: // void ) (int clientIndex, char *infobuffer, char *key, char *value); - cRet = MF_GetAmxAddr(amx,params[2]); - index = cRet[0]; - CHECK_ENTITY(index); - temp = MF_GetAmxString(amx,params[3],0,&len); - temp2 = MF_GetAmxString(amx,params[4],1,&len); - (*g_engfuncs.pfnSetClientKeyValue)(index,(*g_engfuncs.pfnGetInfoKeyBuffer)(INDEXENT(index)),temp,temp2); - return 1; - - default: - LOG_CONSOLE(PLID,"[NS2AMX] Unknown engfunc type provided."); - return 0; - } -} - -//by mahnsawce -static cell AMX_NATIVE_CALL dllfunc(AMX *amx,cell *params) -{ - int type; - int index; - int indexb; - char *temp = ""; - char *temp2 = ""; - char *temp3 = ""; - vec3_t Vec1; - vec3_t Vec2; - int iparam1; - int len; - cell *cRet; - type = params[1]; - switch(type) - { - - // pfnGameInit - case DLLFunc_GameInit: // void) ( void ); - gpGamedllFuncs->dllapi_table->pfnGameInit(); - return 1; - - // pfnSpawn - case DLLFunc_Spawn: // int ) ( edict_t *pent ); - cRet = MF_GetAmxAddr(amx,params[2]); - index=cRet[0]; - CHECK_ENTITY(index); - return gpGamedllFuncs->dllapi_table->pfnSpawn(INDEXENT(index)); - - // pfnThink - case DLLFunc_Think: // void ) ( edict_t *pent ); - cRet = MF_GetAmxAddr(amx,params[2]); - index=cRet[0]; - CHECK_ENTITY(index); - gpGamedllFuncs->dllapi_table->pfnThink(INDEXENT(index)); - return 1; - - // pfnUse - case DLLFunc_Use: // void ) ( edict_t *pentUsed, edict_t *pentOther ); - cRet = MF_GetAmxAddr(amx,params[2]); - index=cRet[0]; - CHECK_ENTITY(index); - cRet = MF_GetAmxAddr(amx,params[2]); - indexb=cRet[0]; - CHECK_ENTITY(indexb); - gpGamedllFuncs->dllapi_table->pfnUse(INDEXENT(index),INDEXENT(indexb)); - return 1; - - // pfnTouch - case DLLFunc_Touch: // void ) ( edict_t *pentTouched, edict_t *pentOther ); - cRet = MF_GetAmxAddr(amx,params[2]); - index=cRet[0]; - CHECK_ENTITY(index); - cRet = MF_GetAmxAddr(amx,params[3]); - indexb=cRet[0]; - CHECK_ENTITY(indexb); - gpGamedllFuncs->dllapi_table->pfnTouch(INDEXENT(index),INDEXENT(indexb)); - return 1; - - case DLLFunc_Blocked: // void ) ( edict_t *pentBlocked, edict_t *pentOther ); - cRet = MF_GetAmxAddr(amx,params[2]); - index=cRet[0]; - CHECK_ENTITY(index); - cRet = MF_GetAmxAddr(amx,params[3]); - indexb=cRet[0]; - CHECK_ENTITY(indexb); - gpGamedllFuncs->dllapi_table->pfnBlocked(INDEXENT(index),INDEXENT(indexb)); - return 1; - - - case DLLFunc_SetAbsBox: // void ) ( edict_t *pent ); - cRet = MF_GetAmxAddr(amx,params[2]); - index=cRet[0]; - CHECK_ENTITY(index); - gpGamedllFuncs->dllapi_table->pfnSetAbsBox(INDEXENT(index)); - return 1; - - case DLLFunc_ClientConnect: // bool) ( edict_t *pEntity, const char *pszName, const char *pszAddress, char szRejectReason[ 128 ] ); - // index,szName,szAddress,szRetRejectReason,size - cRet = MF_GetAmxAddr(amx,params[2]); - index=cRet[0]; - CHECK_ENTITY(index); - temp = MF_GetAmxString(amx,params[3],0,&len); - temp2 = MF_GetAmxString(amx,params[4],1,&len); - //temp3 = GET_AMXSTRING(amx,params[5],2,len); - iparam1 = MDLL_ClientConnect(INDEXENT(index),STRING(ALLOC_STRING(temp)),STRING(ALLOC_STRING(temp2)),temp3); - cRet = MF_GetAmxAddr(amx,params[6]); - MF_SetAmxString(amx,params[5],temp3,cRet[0]); - return 1; - - case DLLFunc_ClientDisconnect: // void ) ( edict_t *pEntity ); - cRet = MF_GetAmxAddr(amx,params[2]); - index=cRet[0]; - CHECK_ENTITY(index); - gpGamedllFuncs->dllapi_table->pfnClientDisconnect(INDEXENT(index)); - return 1; - - case DLLFunc_ClientKill: // void ) ( edict_t *pEntity ); - cRet = MF_GetAmxAddr(amx,params[2]); - index=cRet[0]; - CHECK_ENTITY(index); - gpGamedllFuncs->dllapi_table->pfnClientKill(INDEXENT(index)); - return 1; - - case DLLFunc_ClientPutInServer: // void ) ( edict_t *pEntity ); - cRet = MF_GetAmxAddr(amx,params[2]); - index=cRet[0]; - CHECK_ENTITY(index); - gpGamedllFuncs->dllapi_table->pfnClientPutInServer(INDEXENT(index)); - return 1; - - case DLLFunc_ServerDeactivate: // void) ( void ); - gpGamedllFuncs->dllapi_table->pfnServerDeactivate(); - return 1; - - case DLLFunc_PlayerPreThink: // void ) ( edict_t *pEntity ); - cRet = MF_GetAmxAddr(amx,params[2]); - index=cRet[0]; - CHECK_ENTITY(index); - gpGamedllFuncs->dllapi_table->pfnPlayerPreThink(INDEXENT(index)); - return 1; - - case DLLFunc_PlayerPostThink: // void ) ( edict_t *pEntity ); - cRet = MF_GetAmxAddr(amx,params[2]); - index=cRet[0]; - CHECK_ENTITY(index); - gpGamedllFuncs->dllapi_table->pfnPlayerPostThink(INDEXENT(index)); - return 1; - - case DLLFunc_StartFrame: // void ) ( void ); - gpGamedllFuncs->dllapi_table->pfnStartFrame(); - return 1; - - case DLLFunc_ParmsNewLevel: // void ) ( void ); - gpGamedllFuncs->dllapi_table->pfnParmsNewLevel(); - - - case DLLFunc_ParmsChangeLevel: // void ) ( void ); - gpGamedllFuncs->dllapi_table->pfnParmsChangeLevel(); - - // Returns string describing current .dll. E.g., TeamFotrress 2, Half-Life - case DLLFunc_GetGameDescription: // const char * )( void ); - temp = (char*)gpGamedllFuncs->dllapi_table->pfnGetGameDescription(); - cRet = MF_GetAmxAddr(amx,params[3]); - MF_SetAmxString(amx,params[2],temp,cRet[0]); - return 1; - - // Spectator funcs - case DLLFunc_SpectatorConnect: // void) ( edict_t *pEntity ); - cRet = MF_GetAmxAddr(amx,params[2]); - index=cRet[0]; - CHECK_ENTITY(index); - gpGamedllFuncs->dllapi_table->pfnSpectatorConnect(INDEXENT(index)); - return 1; - case DLLFunc_SpectatorDisconnect: // void ) ( edict_t *pEntity ); - cRet = MF_GetAmxAddr(amx,params[2]); - index=cRet[0]; - CHECK_ENTITY(index); - gpGamedllFuncs->dllapi_table->pfnSpectatorDisconnect(INDEXENT(index)); - return 1; - case DLLFunc_SpectatorThink: // void ) ( edict_t *pEntity ); - cRet = MF_GetAmxAddr(amx,params[2]); - index=cRet[0]; - CHECK_ENTITY(index); - gpGamedllFuncs->dllapi_table->pfnSpectatorThink(INDEXENT(index)); - return 1; - - // Notify game .dll that engine is going to shut down. Allows mod authors to set a breakpoint. - case DLLFunc_Sys_Error: // void ) ( const char *error_string ); - temp = MF_GetAmxString(amx,params[2],0,&len); - gpGamedllFuncs->dllapi_table->pfnSys_Error(STRING(ALLOC_STRING(temp))); - return 1; - - case DLLFunc_PM_FindTextureType: // char )( char *name ); - temp = MF_GetAmxString(amx,params[2],0,&len); - return gpGamedllFuncs->dllapi_table->pfnPM_FindTextureType(temp); - - case DLLFunc_RegisterEncoders: // void ) ( void ); - gpGamedllFuncs->dllapi_table->pfnRegisterEncoders(); - return 1; - - // Enumerates player hulls. Returns 0 if the hull number doesn't exist, 1 otherwise - case DLLFunc_GetHullBounds: // int) ( int hullnumber, float *mins, float *maxs ); - cRet = MF_GetAmxAddr(amx,params[2]); - iparam1 = gpGamedllFuncs->dllapi_table->pfnGetHullBounds(cRet[0],Vec1,Vec2); - cRet = MF_GetAmxAddr(amx,params[3]); - cRet[0]=amx_ftoc(Vec1[0]); - cRet[1]=amx_ftoc(Vec1[1]); - cRet[2]=amx_ftoc(Vec1[2]); - cRet = MF_GetAmxAddr(amx,params[4]); - cRet[0]=amx_ftoc(Vec2[0]); - cRet[1]=amx_ftoc(Vec2[1]); - cRet[2]=amx_ftoc(Vec2[2]); - return iparam1; - - // Create baselines for certain "unplaced" items. - case DLLFunc_CreateInstancedBaselines: // void ) ( void ); - gpGamedllFuncs->dllapi_table->pfnCreateInstancedBaselines(); - return 1; - - case DLLFunc_pfnAllowLagCompensation: // int )( void ); - return gpGamedllFuncs->dllapi_table->pfnAllowLagCompensation(); - // I know this doesn't fit with dllfunc, but I dont want to create another native JUST for this. - case MetaFunc_CallGameEntity: // bool (plid_t plid, const char *entStr,entvars_t *pev); - temp = MF_GetAmxString(amx,params[2],0,&len); - cRet = MF_GetAmxAddr(amx,params[3]); - index = cRet[0]; - CHECK_ENTITY(index); - iparam1 = gpMetaUtilFuncs->pfnCallGameEntity(PLID,STRING(ALLOC_STRING(temp)),VARS(INDEXENT(index))); - return iparam1; - default: - MF_Log("Unknown dllfunc entry."); - MF_RaiseAmxError(amx, AMX_ERR_NATIVE); - return 0; - } -} AMX_NATIVE_INFO engine_Natives[] = { {"halflife_time", halflife_time}, //These are mostly from original VexD - {"VelocityByAim", VelocityByAim}, - {"RadiusDamage", RadiusDamage}, - {"PointContents", PointContents}, + + // TODO: Backwards compatibility: VelocityByAim->velocity_by_aim + // RadiusDamage->radius_damage + // PointContents->point_contents + {"velocity_by_aim", VelocityByAim}, + {"radius_damage", RadiusDamage}, + {"point_contents", PointContents}, {"vector_to_angle", vector_to_angle}, {"angle_vector", angle_vector}, {"vector_length", vector_length}, @@ -2114,8 +954,6 @@ AMX_NATIVE_INFO engine_Natives[] = { {"get_usercmd", get_usercmd}, {"set_usercmd", set_usercmd}, - {"engfunc", engfunc}, - {"dllfunc", dllfunc}, {"register_impulse", register_impulse}, {"register_think", register_think}, diff --git a/dlls/engine/engine.h b/dlls/engine/engine.h index f90f1120..2aa1d491 100755 --- a/dlls/engine/engine.h +++ b/dlls/engine/engine.h @@ -20,6 +20,11 @@ #define CHECK_ENTITY(x) if (x != 0 && (FNullEnt(INDEXENT(x)) || x < 0 || x > gpGlobals->maxEntities)) { MF_RaiseAmxError(amx,AMX_ERR_NATIVE); return 0; } +extern DLL_FUNCTIONS *g_pFunctionTable; +extern DLL_FUNCTIONS *g_pFunctionTable_Post; +extern enginefuncs_t *g_pengfuncsTable; +extern enginefuncs_t *g_pengfuncsTable_Post; + extern int SpawnForward; extern int ChangelevelForward; extern int PlaybackForward; @@ -79,134 +84,6 @@ enum }; -enum { - EngFunc_PrecacheModel, // int ) (char* s); - EngFunc_PrecacheSound, // int ) (char* s); - EngFunc_SetModel, // void ) (edict_t *e, const char *m); - EngFunc_ModelIndex, // int ) (const char *m); - EngFunc_ModelFrames, // int ) (int modelIndex); - EngFunc_SetSize, // void ) (edict_t *e, const float *rgflMin, const float *rgflMax); - EngFunc_ChangeLevel, // void ) (char* s1, char* s2); - EngFunc_VecToYaw, // float) (const float *rgflVector); - EngFunc_VecToAngles, // void ) (const float *rgflVectorIn, float *rgflVectorOut); - EngFunc_MoveToOrigin, // void ) (edict_t *ent, const float *pflGoal, float dist, int iMoveType); - EngFunc_ChangeYaw, // void ) (edict_t* ent); - EngFunc_ChangePitch, // void ) (edict_t* ent); - EngFunc_FindEntityByString, // edict) (edict_t *pEdictStartSearchAfter, const char *pszField, const char *pszValue); - EngFunc_GetEntityIllum, // int ) (edict_t* pEnt); - EngFunc_FindEntityInSphere, // edict) (edict_t *pEdictStartSearchAfter, const float *org, float rad); - EngFunc_FindClientInPVS, // edict) (edict_t *pEdict); - EngFunc_EntitiesInPVS, // edict) (edict_t *pplayer); - EngFunc_MakeVectors, // void ) (const float *rgflVector); - EngFunc_AngleVectors, // void ) (const float *rgflVector, float *forward, float *right, float *up); - EngFunc_CreateEntity, // edict) (void); - EngFunc_RemoveEntity, // void ) (edict_t* e); - EngFunc_CreateNamedEntity, // edict) (int className); - EngFunc_MakeStatic, // void ) (edict_t *ent); - EngFunc_EntIsOnFloor, // int ) (edict_t *e); - EngFunc_DropToFloor, // int ) (edict_t* e); - EngFunc_WalkMove, // int ) (edict_t *ent, float yaw, float dist, int iMode); - EngFunc_SetOrigin, // void ) (edict_t *e, const float *rgflOrigin); - EngFunc_EmitSound, // void ) (edict_t *entity, int channel, const char *sample, /*int*/float volume, float attenuation, int fFlags, int pitch); - EngFunc_EmitAmbientSound, // void ) (edict_t *entity, float *pos, const char *samp, float vol, float attenuation, int fFlags, int pitch); - EngFunc_TraceLine, // void ) (const float *v1, const float *v2, int fNoMonsters, edict_t *pentToSkip, TraceResult *ptr); - EngFunc_TraceToss, // void ) (edict_t* pent, edict_t* pentToIgnore, TraceResult *ptr); - EngFunc_TraceMonsterHull, // int ) (edict_t *pEdict, const float *v1, const float *v2, int fNoMonsters, edict_t *pentToSkip, TraceResult *ptr); - EngFunc_TraceHull, // void ) (const float *v1, const float *v2, int fNoMonsters, int hullNumber, edict_t *pentToSkip, TraceResult *ptr); - EngFunc_TraceModel, // void ) (const float *v1, const float *v2, int hullNumber, edict_t *pent, TraceResult *ptr); - EngFunc_TraceTexture, // const char *) (edict_t *pTextureEntity, const float *v1, const float *v2 ); - EngFunc_TraceSphere, // void ) (const float *v1, const float *v2, int fNoMonsters, float radius, edict_t *pentToSkip, TraceResult *ptr); - EngFunc_GetAimVector, // void ) (edict_t* ent, float speed, float *rgflReturn); - EngFunc_ParticleEffect, // void ) (const float *org, const float *dir, float color, float count); - EngFunc_LightStyle, // void ) (int style, char* val); - EngFunc_DecalIndex, // int ) (const char *name); - EngFunc_PointContents, // int ) (const float *rgflVector); - EngFunc_FreeEntPrivateData, // void ) (edict_t *pEdict); - EngFunc_SzFromIndex, // const char * ) (int iString); - EngFunc_AllocString, // int ) (const char *szValue); - EngFunc_RegUserMsg, // int ) (const char *pszName, int iSize); - EngFunc_AnimationAutomove, // void ) (const edict_t* pEdict, float flTime); - EngFunc_GetBonePosition, // void ) (const edict_t* pEdict, int iBone, float *rgflOrigin, float *rgflAngles ); - EngFunc_GetAttachment, // void ) (const edict_t *pEdict, int iAttachment, float *rgflOrigin, float *rgflAngles ); - EngFunc_SetView, // void ) (const edict_t *pClient, const edict_t *pViewent ); - EngFunc_Time, // float) ( void ); - EngFunc_CrosshairAngle, // void ) (const edict_t *pClient, float pitch, float yaw); - EngFunc_FadeClientVolume, // void ) (const edict_t *pEdict, int fadePercent, int fadeOutSeconds, int holdTime, int fadeInSeconds); - EngFunc_SetClientMaxspeed, // void ) (const edict_t *pEdict, float fNewMaxspeed); - EngFunc_CreateFakeClient, // edict) (const char *netname); // returns NULL if fake client can't be created - EngFunc_RunPlayerMove, // void ) (edict_t *fakeclient, const float *viewangles, float forwardmove, float sidemove, float upmove, unsigned short buttons, byte impulse, byte msec ); - EngFunc_NumberOfEntities, // int ) (void); - EngFunc_StaticDecal, // void ) ( const float *origin, int decalIndex, int entityIndex, int modelIndex ); - EngFunc_PrecacheGeneric, // int ) (char* s); - EngFunc_BuildSoundMsg, // void ) (edict_t *entity, int channel, const char *sample, /*int*/float volume, float attenuation, int fFlags, int pitch, int msg_dest, int msg_type, const float *pOrigin, edict_t *ed); - EngFunc_GetPhysicsKeyValue, // const char* ) ( const edict_t *pClient, const char *key ); - EngFunc_SetPhysicsKeyValue, // void ) ( const edict_t *pClient, const char *key, const char *value ); - EngFunc_GetPhysicsInfoString,// const char* ) ( const edict_t *pClient ); - EngFunc_PrecacheEvent, // unsigned short ) ( int type, const char*psz ); - EngFunc_PlaybackEvent, // void ) ( int flags, const edict_t *pInvoker, unsigned short eventindex, float delay, float *origin, float *angles, float fparam1, float fparam2, int iparam1, int iparam2, int bparam1, int bparam2 ); - EngFunc_CheckVisibility, //) ( const edict_t *entity, unsigned char *pset ); - EngFunc_GetCurrentPlayer, //) ( void ); - EngFunc_CanSkipPlayer, //) ( const edict_t *player ); - EngFunc_SetGroupMask, //) ( int mask, int op ); - EngFunc_GetClientListening, // bool (int iReceiver, int iSender) - EngFunc_SetClientListening, // bool (int iReceiver, int iSender, bool Listen) - EngFunc_MessageBegin, // void (int msg_dest, int msg_type, const float *pOrigin, edict_t *ed) - EngFunc_WriteCoord, // void (float) - EngFunc_WriteAngle, // void (float) - EngFunc_InfoKeyValue, // char* ) (char *infobuffer, char *key); - EngFunc_SetKeyValue, // void ) (char *infobuffer, char *key, char *value); - EngFunc_SetClientKeyValue // void ) (int clientIndex, char *infobuffer, char *key, char *value); -}; -enum -{ - DLLFunc_GameInit, // void) ( void ); - DLLFunc_Spawn, // int ) ( edict_t *pent ); - DLLFunc_Think, // void ) ( edict_t *pent ); - DLLFunc_Use, // void ) ( edict_t *pentUsed, edict_t *pentOther ); - DLLFunc_Touch, // void ) ( edict_t *pentTouched, edict_t *pentOther ); - DLLFunc_Blocked, // void ) ( edict_t *pentBlocked, edict_t *pentOther ); - DLLFunc_KeyValue, // void ) ( edict_t *pentKeyvalue, KeyValueData *pkvd ); - DLLFunc_SetAbsBox, // void ) ( edict_t *pent ); - DLLFunc_ClientConnect, // bool) ( edict_t *pEntity, const char *pszName, const char *pszAddress, char szRejectReason[ 128 ] ); - - DLLFunc_ClientDisconnect, // void ) ( edict_t *pEntity ); - DLLFunc_ClientKill, // void ) ( edict_t *pEntity ); - DLLFunc_ClientPutInServer, // void ) ( edict_t *pEntity ); - DLLFunc_ClientCommand, // void ) ( edict_t *pEntity ); - - DLLFunc_ServerDeactivate, // void) ( void ); - - DLLFunc_PlayerPreThink, // void ) ( edict_t *pEntity ); - DLLFunc_PlayerPostThink, // void ) ( edict_t *pEntity ); - - DLLFunc_StartFrame, // void ) ( void ); - DLLFunc_ParmsNewLevel, // void ) ( void ); - DLLFunc_ParmsChangeLevel, // void ) ( void ); - - // Returns string describing current .dll. E.g., TeamFotrress 2, Half-Life - DLLFunc_GetGameDescription, // const char * )( void ); - - // Spectator funcs - DLLFunc_SpectatorConnect, // void) ( edict_t *pEntity ); - DLLFunc_SpectatorDisconnect, // void ) ( edict_t *pEntity ); - DLLFunc_SpectatorThink, // void ) ( edict_t *pEntity ); - - // Notify game .dll that engine is going to shut down. Allows mod authors to set a breakpoint. - DLLFunc_Sys_Error, // void ) ( const char *error_string ); - - DLLFunc_PM_FindTextureType, // char )( char *name ); - DLLFunc_RegisterEncoders, // void ) ( void ); - - // Enumerates player hulls. Returns 0 if the hull number doesn't exist, 1 otherwise - DLLFunc_GetHullBounds, // int) ( int hullnumber, float *mins, float *maxs ); - - // Create baselines for certain "unplaced" items. - DLLFunc_CreateInstancedBaselines, // void ) ( void ); - DLLFunc_pfnAllowLagCompensation, // int )( void ); - // I know this does not fit with DLLFUNC(), but I dont want another native just for it. - MetaFunc_CallGameEntity // bool (plid_t plid, const char *entStr,entvars_t *pev); -}; - // Used by the traceresult() native. enum { @@ -289,6 +166,8 @@ int is_ent_valid(int iEnt); int AmxStringToEngine(AMX *amx, cell param, int &len); edict_t *UTIL_FindEntityInSphere(edict_t *pStart, const Vector &vecCenter, float flRadius); +extern int g_CameraCount; + extern bool g_inKeyValue; extern KeyValueData *g_pkvd; extern bool incmd; @@ -298,7 +177,6 @@ extern struct GlobalInfo glinfo; extern AMX_NATIVE_INFO engine_Natives[]; extern CVector Impulses; extern CVector Thinks; -extern CVector Uses; extern CVector Touches; #endif //_ENGINE_INCLUDE_H \ No newline at end of file diff --git a/dlls/engine/engine.vcproj b/dlls/engine/engine.vcproj index 909afd5c..7739ba28 100755 --- a/dlls/engine/engine.vcproj +++ b/dlls/engine/engine.vcproj @@ -19,6 +19,7 @@ Impulses; CVector Thinks; -CVector Uses; CVector Touches; KeyValueData *g_pkvd; bool g_inKeyValue=false; @@ -37,20 +36,7 @@ int fstrcmp(const char *s1, const char *s2) return 1; } -void DispatchUse(edict_t *pentUsed, edict_t *pentOther) -{ - if (DispatchUseForward) { - int retVal = 0; - int used = ENTINDEX(pentUsed); - int user = ENTINDEX(pentOther); - retVal = MF_ExecuteForward(DispatchUseForward, user, used); - if (retVal) - RETURN_META(MRES_SUPERCEDE); - } - RETURN_META(MRES_IGNORED); -} - -int DispatchSpawn(edict_t *pEntity) { +int Spawn(edict_t *pEntity) { if (SpawnForward) { int retVal = 0; int id = ENTINDEX(pEntity); @@ -116,7 +102,7 @@ void KeyValue(edict_t *pEntity, KeyValueData *pkvd) RETURN_META(MRES_HANDLED); } -void StartFrame_Post() +void StartFrame() { if (glinfo.bCheckLights) { if (!FStrEq((const char*)glinfo.szLastLights, "")) { @@ -176,13 +162,11 @@ void ClientKill(edict_t *pEntity) RETURN_META(MRES_IGNORED); } -void PlayerPreThink_Post(edict_t *pEntity) +void PlayerPreThink(edict_t *pEntity) { MF_ExecuteForward(PlayerPreThinkForward, ENTINDEX(pEntity)); - RETURN_META(MRES_IGNORED); } - void PlayerPostThink_Post(edict_t *pEntity) { if(plinfo[ENTINDEX(pEntity)].pViewEnt) { @@ -222,12 +206,16 @@ void PlayerPostThink_Post(edict_t *pEntity) } } - MF_ExecuteForward(PlayerPostThinkForward, ENTINDEX(pEntity)); + if (PlayerPostThinkForward) + { + if (MF_ExecuteForward(PlayerPostThinkForward, ENTINDEX(pEntity))) + RETURN_META(MRES_SUPERCEDE); + } RETURN_META(MRES_IGNORED); } -void DispatchTouch(edict_t *pToucher, edict_t *pTouched) +void pfnTouch(edict_t *pToucher, edict_t *pTouched) { unsigned int i = 0; int retVal = 0; @@ -282,7 +270,7 @@ void DispatchTouch(edict_t *pToucher, edict_t *pTouched) RETURN_META(MRES_IGNORED); } -void DispatchThink_Post(edict_t *pent) +void Think(edict_t *pent) { unsigned int i = 0; const char *cls = STRING(pent->v.classname); diff --git a/dlls/engine/moduleconfig.h b/dlls/engine/moduleconfig.h index dd134b99..bacdf54a 100755 --- a/dlls/engine/moduleconfig.h +++ b/dlls/engine/moduleconfig.h @@ -54,12 +54,12 @@ // (wd) are Will Day's notes // - GetEntityAPI2 functions // #define FN_GameDLLInit GameDLLInit /* pfnGameInit() */ -#define FN_DispatchSpawn DispatchSpawn /* pfnSpawn() */ -//#define FN_DispatchThink DispatchThink /* pfnThink() */ -#define FN_DispatchUse DispatchUse /* pfnUse() */ -#define FN_DispatchTouch DispatchTouch /* pfnTouch() */ +#define FN_DispatchSpawn Spawn /* pfnSpawn() */ +#define FN_DispatchThink Think /* pfnThink() */ +// #define FN_DispatchUse Use /* pfnUse() */ +#define FN_DispatchTouch pfnTouch /* pfnTouch() */ // #define FN_DispatchBlocked DispatchBlocked /* pfnBlocked() */ -//#define FN_DispatchKeyValue KeyValue /* pfnKeyValue() */ +#define FN_DispatchKeyValue KeyValue /* pfnKeyValue() */ // #define FN_DispatchSave DispatchSave /* pfnSave() */ // #define FN_DispatchRestore DispatchRestore /* pfnRestore() */ // #define FN_DispatchObjectCollsionBox DispatchObjectCollsionBox /* pfnSetAbsBox() */ @@ -76,9 +76,9 @@ // #define FN_ClientUserInfoChanged ClientUserInfoChanged /* pfnClientUserInfoChanged() (wd) Client has updated their setinfo structure */ #define FN_ServerActivate ServerActivate /* pfnServerActivate() (wd) Server is starting a new map */ #define FN_ServerDeactivate ServerDeactivate /* pfnServerDeactivate() (wd) Server is leaving the map (shutdown or changelevel); SDK2 */ -//#define FN_PlayerPreThink PlayerPreThink /* pfnPlayerPreThink() */ -//#define FN_PlayerPostThink PlayerPostThink /* pfnPlayerPostThink() */ -//#define FN_StartFrame StartFrame /* pfnStartFrame() */ +#define FN_PlayerPreThink PlayerPreThink /* pfnPlayerPreThink() */ +// #define FN_PlayerPostThink PlayerPostThink /* pfnPlayerPostThink() */ +#define FN_StartFrame StartFrame /* pfnStartFrame() */ // #define FN_ParmsNewLevel ParmsNewLevel /* pfnParmsNewLevel() */ // #define FN_ParmsChangeLevel ParmsChangeLevel /* pfnParmsChangeLevel() */ // #define FN_GetGameDescription GetGameDescription /* pfnGetGameDescription() Returns string describing current .dll. E.g. "TeamFotrress 2" "Half-Life" */ @@ -107,7 +107,7 @@ // - GetEntityAPI2_Post functions // #define FN_GameDLLInit_Post GameDLLInit_Post // #define FN_DispatchSpawn_Post DispatchSpawn_Post -#define FN_DispatchThink_Post DispatchThink_Post +// #define FN_DispatchThink_Post DispatchThink_Post // #define FN_DispatchUse_Post DispatchUse_Post // #define FN_DispatchTouch_Post DispatchTouch_Post // #define FN_DispatchBlocked_Post DispatchBlocked_Post @@ -128,9 +128,9 @@ // #define FN_ClientUserInfoChanged_Post ClientUserInfoChanged_Post // #define FN_ServerActivate_Post ServerActivate_Post // #define FN_ServerDeactivate_Post ServerDeactivate_Post -#define FN_PlayerPreThink_Post PlayerPreThink_Post +// #define FN_PlayerPreThink_Post PlayerPreThink_Post #define FN_PlayerPostThink_Post PlayerPostThink_Post -#define FN_StartFrame_Post StartFrame_Post +// #define FN_StartFrame_Post StartFrame_Post // #define FN_ParmsNewLevel_Post ParmsNewLevel_Post // #define FN_ParmsChangeLevel_Post ParmsChangeLevel_Post // #define FN_GetGameDescription_Post GetGameDescription_Post @@ -163,7 +163,7 @@ // #define FN_ModelIndex ModelIndex // #define FN_ModelFrames ModelFrames // #define FN_SetSize SetSize -#define FN_ChangeLevel ChangeLevel +// #define FN_ChangeLevel ChangeLevel // #define FN_GetSpawnParms GetSpawnParms // #define FN_SaveSpawnParms SaveSpawnParms // #define FN_VecToYaw VecToYaw