This commit is contained in:
Steve Dudenhoeffer
2004-08-11 05:06:27 +00:00
parent f90ab9d732
commit 74d278d1c6
8 changed files with 1037 additions and 198 deletions

View File

@ -69,7 +69,9 @@ static cell AMX_NATIVE_CALL fm_return(AMX *amx, cell *params)
return 1;
}
/*
* Begining of Game DLL->Engine hooks
*/
// pfnPrecacheModel
SIMPLE_INT_HOOK_STRING(PrecacheModel);
@ -94,50 +96,14 @@ SIMPLE_INT_HOOK_CONSTSTRING(ModelIndex);
// pfnModelFrames
SIMPLE_INT_HOOK_INT(ModelFrames);
void SetSize(edict_t *e, const float *rgflMin, const float *rgflMax)
{
cell vec1[3] = {amx_ftoc(rgflMin[0]), amx_ftoc(rgflMin[1]), amx_ftoc(rgflMin[2])};
cell vec2[3] = {amx_ftoc(rgflMax[0]), amx_ftoc(rgflMax[1]), amx_ftoc(rgflMax[2])};;
cell retvec1 = MF_PrepareCellArray(vec1, 3);
cell retvec2 = MF_PrepareCellArray(vec2, 3);
FM_ENG_HANDLE(FM_SetSize, (Engine[FM_SetSize].at(i), ENTINDEX(e), retvec1, retvec2));
RETURN_META(mswi(lastFmRes));
}
void SetSize_post(edict_t *e, const float *rgflMin, const float *rgflMax)
{
cell vec1[3] = {amx_ftoc(rgflMin[0]), amx_ftoc(rgflMin[1]), amx_ftoc(rgflMin[2])};
cell vec2[3] = {amx_ftoc(rgflMax[0]), amx_ftoc(rgflMax[1]), amx_ftoc(rgflMax[2])};;
cell retvec1 = MF_PrepareCellArray(vec1, 3);
cell retvec2 = MF_PrepareCellArray(vec2, 3);
FM_ENG_HANDLE(FM_SetSize, (Engine[FM_SetSize].at(i), ENTINDEX(e), retvec1, retvec2));
RETURN_META(MRES_IGNORED);
}
// pfnSetSize
SIMPLE_VOID_HOOK_EDICT_CONSTVECT_CONSTVECT(SetSize);
void ChangeLevel(char *s1, char *s2)
{
FM_ENG_HANDLE(FM_ChangeLevel, (Engine[FM_ChangeLevel].at(i), s1, s2));
RETURN_META(mswi(lastFmRes));
}
void ChangeLevel_post(char *s1, char *s2)
{
FM_ENG_HANDLE(FM_ChangeLevel, (Engine[FM_ChangeLevel].at(i), s1, s2));
RETURN_META(MRES_IGNORED);
}
// pfnChangeLevel
SIMPLE_VOID_HOOK_STRING_STRING(ChangeLevel);
float VecToYaw(const float *rgflVector)
{
cell vec[3] = {amx_ftoc(rgflVector[0]), amx_ftoc(rgflVector[1]), amx_ftoc(rgflVector[2])};
cell retvec = MF_PrepareCellArray(vec, 3);
FM_ENG_HANDLE(FM_VecToYaw, (Engine[FM_VecToYaw].at(i), retvec));
RETURN_META_VALUE(mswi(lastFmRes), mlFloatResult);
}
float VecToYaw_post(const float *rgflVector)
{
cell vec[3] = {amx_ftoc(rgflVector[0]), amx_ftoc(rgflVector[1]), amx_ftoc(rgflVector[2])};
cell retvec = MF_PrepareCellArray(vec, 3);
FM_ENG_HANDLE(FM_VecToYaw, (Engine[FM_VecToYaw].at(i), retvec));
RETURN_META_VALUE(MRES_IGNORED, mlFloatResult);
}
// pfnVecToYaw
SIMPLE_FLOAT_HOOK_CONSTVECT(VecToYaw);
void VecToAngles(const float *rgflVectorIn, float *rgflVectorOut)
{
@ -186,6 +152,21 @@ edict_t *FindEntityByString_post(edict_t *pEdictStartSearchAfter, const char *ps
// pfnGetEntityIllum
SIMPLE_INT_HOOK_EDICT(GetEntityIllum);
// pfnFindEntityInSphere
SIMPLE_EDICT_HOOK_EDICT_CONSTVECT_FLOAT(FindEntityInSphere);
// pfnFindClientInPVS
SIMPLE_EDICT_HOOK_EDICT(FindClientInPVS);
// pfnEntitiesInPVS
SIMPLE_EDICT_HOOK_EDICT(EntitiesInPVS);
// pfnMakeVectors
SIMPLE_VOID_HOOK_CONSTVECT(MakeVectors);
// pfnAngleVectors
SIMPLE_VOID_HOOK_CONSTVECT_VECT_VECT_VECT(AngleVectors);
// pfnChangeYaw
SIMPLE_VOID_HOOK_EDICT(ChangeYaw);
@ -210,26 +191,149 @@ SIMPLE_INT_HOOK_EDICT(EntIsOnFloor);
// pfnDropToFloor
SIMPLE_INT_HOOK_EDICT(DropToFloor);
// pfnSetOrigin
SIMPLE_VOID_HOOK_EDICT_CONSTVECT(SetOrigin);
// pfnEmitSound
SIMPLE_VOID_HOOK_EDICT_INT_CONSTSTRING_FLOAT_FLOAT_INT_INT(EmitSound);
// pfnEmitAmbientSound
SIMPLE_VOID_HOOK_EDICT_VECT_CONSTSTRING_FLOAT_FLOAT_INT_INT(EmitAmbientSound);
// pfnGetAimVector
SIMPLE_VOID_HOOK_EDICT_FLOAT_VECT(GetAimVector);
// pfnParticleEffect
SIMPLE_VOID_HOOK_CONSTVECT_CONSTVECT_FLOAT_FLOAT(ParticleEffect);
// pfnLightStyle
SIMPLE_VOID_HOOK_INT_STRING(LightStyle);
// pfnDecalIndex
SIMPLE_INT_HOOK_CONSTSTRING(DecalIndex);
// pfnPointContents
SIMPLE_INT_HOOK_CONSTVECT(PointContents);
// pfnMessageBegin
SIMPLE_VOID_HOOK_INT_INT_CONSTVECT_EDICT(MessageBegin);
// pfnMessageEnd
SIMPLE_VOID_HOOK_VOID(MessageEnd);
// pfnWriteByte
SIMPLE_VOID_HOOK_INT(WriteByte);
// pfnWriteChar
SIMPLE_VOID_HOOK_INT(WriteChar);
// pfnWriteShort
SIMPLE_VOID_HOOK_INT(WriteShort);
// pfnWriteLong
SIMPLE_VOID_HOOK_INT(WriteLong);
// pfnWriteAngle
SIMPLE_VOID_HOOK_FLOAT(WriteAngle);
// pfnWriteCoord
SIMPLE_VOID_HOOK_FLOAT(WriteCoord);
// pfnWriteString
SIMPLE_VOID_HOOK_CONSTSTRING(WriteString);
// pfnWriteEntity
SIMPLE_VOID_HOOK_INT(WriteEntity);
SIMPLE_FLOAT_HOOK_CONSTSTRING(CVarGetFloat);
SIMPLE_CONSTSTRING_HOOK_CONSTSTRING(CVarGetString);
SIMPLE_VOID_HOOK_CONSTSTRING_FLOAT(CVarSetFloat);
SIMPLE_VOID_HOOK_CONSTSTRING_CONSTSTRING(CVarSetString);
// pfnFreeEntPrivateData
SIMPLE_VOID_HOOK_EDICT(FreeEntPrivateData);
// pfnSzFromIndex
SIMPLE_CONSTSTRING_HOOK_INT(SzFromIndex);
// pfnAllocString
SIMPLE_INT_HOOK_CONSTSTRING(AllocString);
SIMPLE_INT_HOOK_CONSTSTRING_INT(RegUserMsg);
// pfnAnimationAutomove
SIMPLE_VOID_HOOK_CONSTEDICT_FLOAT(AnimationAutomove);
// pfnSetView
SIMPLE_VOID_HOOK_CONSTEDICT_CONSTEDICT(SetView);
// pfnTime
SIMPLE_FLOAT_HOOK_VOID(Time);
// pfnCrosshairAngle
SIMPLE_VOID_HOOK_CONSTEDICT_FLOAT_FLOAT(CrosshairAngle);
SIMPLE_VOID_HOOK_CONSTEDICT_INT_INT_INT_INT(FadeClientVolume);
// pfnSetClientMaxspeed
SIMPLE_VOID_HOOK_CONSTEDICT_FLOAT(SetClientMaxspeed);
// pfnPrecacheGeneric
SIMPLE_INT_HOOK_STRING(PrecacheGeneric);
// pfnPrecacheEvent
SIMPLE_USHORT_HOOK_INT_CONSTSTRING(PrecacheEvent);
// pfnGetPhysicsKeyValue
SIMPLE_CONSTSTRING_HOOK_CONSTEDICT_CONSTSTRING(GetPhysicsKeyValue);
// pfnSetPhysicsKeyValue
SIMPLE_VOID_HOOK_CONSTEDICT_CONSTSTRING_CONSTSTRING(SetPhysicsKeyValue);
// pfnGetPhysicsInfoString
SIMPLE_CONSTSTRING_HOOK_CONSTEDICT(GetPhysicsInfoString);
// pfnPlaybackEvent
HOOK_PLAYBACK_EVENT(PlaybackEvent);
// pfnCreateFakeClient
SIMPLE_EDICT_HOOK_CONSTSTRING(CreateFakeClient);
// pfnNumberOfEntities
SIMPLE_INT_HOOK_VOID(NumberOfEntities);
// pfnGetCurrentPlayer
SIMPLE_INT_HOOK_VOID(GetCurrentPlayer);
// pfnCanSkipPlayer
SIMPLE_INT_HOOK_CONSTEDICT(CanSkipPlayer);
// pfnSetGroupMask
SIMPLE_VOID_HOOK_INT_INT(SetGroupMask);
// pfnVoice_GetClientListening
SIMPLE_BOOL_HOOK_INT_INT(Voice_GetClientListening);
// pfnVoice_SetClientListening
SIMPLE_BOOL_HOOK_INT_INT_BOOL(Voice_SetClientListening);
SIMPLE_STRING_HOOK_STRING_STRING(InfoKeyValue);
SIMPLE_VOID_HOOK_STRING_STRING_STRING(SetKeyValue);
SIMPLE_VOID_HOOK_INT_STRING_STRING_STRING(SetClientKeyValue);
SIMPLE_CONSTSTRING_HOOK_EDICT(GetPlayerAuthId);
SIMPLE_UINT_HOOK_EDICT(GetPlayerWONId);
SIMPLE_INT_HOOK_STRING(IsMapValid);
/*
* Beginning of Game DLL hooks
* Beginning of Engine->Game DLL hooks
*/
// pfnSpawn
@ -250,6 +354,9 @@ SIMPLE_VOID_HOOK_EDICT_EDICT(Blocked);
// pfnSetAbsBox
SIMPLE_VOID_HOOK_EDICT(SetAbsBox);
// pfnClientConnect
SIMPLE_BOOL_HOOK_EDICT_CONSTSTRING_CONSTSTRING_STRING128(ClientConnect);
// pfnClientDisconnect
SIMPLE_VOID_HOOK_EDICT(ClientDisconnect);
@ -328,7 +435,6 @@ static cell AMX_NATIVE_CALL register_forward(AMX *amx, cell *params)
int len, fId=0;
const char *funcname = MF_GetAmxString(amx, params[2], 0, &len);
LOG_CONSOLE(PLID,"Registering: Function: %s Post: %i Type: %i",funcname,params[3],params[1]);
enginefuncs_t *engtable;
DLL_FUNCTIONS *dlltable;
@ -404,18 +510,23 @@ static cell AMX_NATIVE_CALL register_forward(AMX *amx, cell *params)
break;
case FM_FindEntityInSphere:
fId = MF_RegisterSPForwardByName(amx, funcname, FP_CELL, FP_ARRAY, FP_FLOAT, FP_DONE);
ENGHOOK(FindEntityInSphere);
break;
case FM_FindClientInPVS:
fId = MF_RegisterSPForwardByName(amx, funcname, FP_CELL, FP_DONE);
ENGHOOK(FindClientInPVS);
break;
case FM_EntitiesInPVS:
fId = MF_RegisterSPForwardByName(amx, funcname, FP_CELL, FP_DONE);
ENGHOOK(EntitiesInPVS);
break;
case FM_MakeVectors:
fId = MF_RegisterSPForwardByName(amx, funcname, FP_ARRAY, FP_DONE);
ENGHOOK(MakeVectors);
break;
case FM_AngleVectors:
fId = MF_RegisterSPForwardByName(amx, funcname, FP_ARRAY, FP_ARRAY, FP_ARRAY, FP_ARRAY, FP_DONE);
ENGHOOK(AngleVectors);
break;
case FM_CreateEntity:
fId = MF_RegisterSPForwardByName(amx, funcname, FP_DONE);
@ -426,7 +537,7 @@ static cell AMX_NATIVE_CALL register_forward(AMX *amx, cell *params)
ENGHOOK(RemoveEntity);
break;
case FM_CreateNamedEntity:
fId = MF_RegisterSPForwardByName(amx, funcname, FP_STRING, FP_DONE);
fId = MF_RegisterSPForwardByName(amx, funcname, FP_CELL, FP_DONE);
ENGHOOK(CreateNamedEntity);
break;
case FM_MakeStatic:
@ -443,45 +554,59 @@ static cell AMX_NATIVE_CALL register_forward(AMX *amx, cell *params)
break;
case FM_WalkMove:
fId = MF_RegisterSPForwardByName(amx, funcname, FP_CELL, FP_FLOAT, FP_FLOAT, FP_CELL, FP_DONE);
// ENGHOOK(WalkMove);
break;
case FM_SetOrigin:
fId = MF_RegisterSPForwardByName(amx, funcname, FP_CELL, FP_ARRAY, FP_DONE);
ENGHOOK(SetOrigin);
break;
case FM_EmitSound:
fId = MF_RegisterSPForwardByName(amx, funcname, FP_CELL, FP_CELL, FP_STRING, FP_FLOAT, FP_FLOAT, FP_CELL, FP_CELL, FP_DONE);
ENGHOOK(EmitSound);
break;
case FM_EmitAmbientSound:
fId = MF_RegisterSPForwardByName(amx, funcname, FP_CELL, FP_ARRAY, FP_STRING, FP_FLOAT, FP_FLOAT, FP_CELL, FP_CELL, FP_DONE);
ENGHOOK(EmitAmbientSound);
break;
case FM_TraceLine:
fId = MF_RegisterSPForwardByName(amx, funcname, FP_ARRAY, FP_ARRAY, FP_CELL, FP_CELL, FP_DONE);
// ENGHOOK(TraceLine);
break;
case FM_TraceToss:
fId = MF_RegisterSPForwardByName(amx, funcname, FP_CELL, FP_CELL, FP_DONE);
// ENGHOOK(TraceToss);
break;
case FM_TraceMonsterHull:
fId = MF_RegisterSPForwardByName(amx, funcname, FP_CELL, FP_ARRAY, FP_ARRAY, FP_CELL, FP_CELL, FP_DONE);
// ENGHOOK(TraceMonsterHull);
break;
case FM_TraceHull:
fId = MF_RegisterSPForwardByName(amx, funcname, FP_ARRAY, FP_ARRAY, FP_CELL, FP_CELL, FP_CELL, FP_DONE);
// ENGHOOK(TraceHull);
break;
case FM_TraceModel:
fId = MF_RegisterSPForwardByName(amx, funcname, FP_ARRAY, FP_ARRAY, FP_CELL, FP_CELL, FP_DONE);
// ENGHOOK(TraceModel);
break;
case FM_TraceTexture:
fId = MF_RegisterSPForwardByName(amx, funcname, FP_CELL, FP_ARRAY, FP_ARRAY, FP_DONE);
// ENGHOOK(TraceTexture);
break;
case FM_TraceSphere:
fId = MF_RegisterSPForwardByName(amx, funcname, FP_ARRAY, FP_ARRAY, FP_CELL, FP_FLOAT, FP_CELL, FP_DONE);
// ENGHOOK(TraceSphere);
break;
case FM_GetAimVector:
fId = MF_RegisterSPForwardByName(amx, funcname, FP_CELL, FP_FLOAT, FP_ARRAY, FP_DONE);
ENGHOOK(GetAimVector);
break;
case FM_ParticleEffect:
fId = MF_RegisterSPForwardByName(amx, funcname, FP_ARRAY, FP_ARRAY, FP_FLOAT, FP_FLOAT, FP_DONE);
ENGHOOK(ParticleEffect);
break;
case FM_LightStyle:
fId = MF_RegisterSPForwardByName(amx, funcname, FP_CELL, FP_STRING, FP_DONE);
ENGHOOK(LightStyle);
break;
case FM_DecalIndex:
fId = MF_RegisterSPForwardByName(amx, funcname, FP_STRING, FP_DONE);
@ -489,85 +614,191 @@ static cell AMX_NATIVE_CALL register_forward(AMX *amx, cell *params)
break;
case FM_PointContents:
fId = MF_RegisterSPForwardByName(amx, funcname, FP_ARRAY, FP_DONE);
ENGHOOK(PointContents);
break;
case FM_MessageBegin:
fId = MF_RegisterSPForwardByName(amx, funcname, FP_CELL, FP_CELL, FP_ARRAY, FP_CELL, FP_DONE);
ENGHOOK(MessageBegin);
break;
case FM_MessageEnd:
fId = MF_RegisterSPForwardByName(amx, funcname, FP_DONE);
ENGHOOK(MessageEnd);
break;
case FM_WriteByte:
fId = MF_RegisterSPForwardByName(amx, funcname, FP_CELL, FP_DONE);
ENGHOOK(WriteByte);
break;
case FM_WriteChar:
fId = MF_RegisterSPForwardByName(amx, funcname, FP_CELL, FP_DONE);
ENGHOOK(WriteChar);
break;
case FM_WriteShort:
fId = MF_RegisterSPForwardByName(amx, funcname, FP_CELL, FP_DONE);
ENGHOOK(WriteShort);
break;
case FM_WriteLong:
fId = MF_RegisterSPForwardByName(amx, funcname, FP_CELL, FP_DONE);
ENGHOOK(WriteLong);
break;
case FM_WriteAngle:
fId = MF_RegisterSPForwardByName(amx, funcname, FP_FLOAT, FP_DONE);
ENGHOOK(WriteAngle);
break;
case FM_WriteCoord:
fId = MF_RegisterSPForwardByName(amx, funcname, FP_FLOAT, FP_DONE);
ENGHOOK(WriteCoord);
break;
case FM_WriteString:
fId = MF_RegisterSPForwardByName(amx, funcname, FP_STRING, FP_DONE);
ENGHOOK(WriteString);
break;
case FM_WriteEntity:
fId = MF_RegisterSPForwardByName(amx, funcname, FP_CELL, FP_DONE);
ENGHOOK(WriteEntity);
break;
case FM_CVarGetFloat:
fId = MF_RegisterSPForwardByName(amx, funcname, FP_STRING, FP_DONE);
ENGHOOK(CVarGetFloat);
break;
case FM_CVarGetString:
fId = MF_RegisterSPForwardByName(amx, funcname, FP_STRING, FP_DONE);
ENGHOOK(CVarGetString);
break;
case FM_CVarSetFloat:
fId = MF_RegisterSPForwardByName(amx, funcname, FP_STRING, FP_FLOAT, FP_DONE);
ENGHOOK(CVarSetFloat);
break;
case FM_CVarSetString:
fId = MF_RegisterSPForwardByName(amx, funcname, FP_STRING, FP_STRING, FP_DONE);
ENGHOOK(CVarSetString);
break;
case FM_FreeEntPrivateData:
fId = MF_RegisterSPForwardByName(amx, funcname, FP_ARRAY, FP_DONE);
ENGHOOK(FreeEntPrivateData);
break;
case FM_SzFromIndex:
fId = MF_RegisterSPForwardByName(amx, funcname, FP_STRING, FP_DONE);
ENGHOOK(SzFromIndex);
break;
case FM_AllocString:
fId = MF_RegisterSPForwardByName(amx, funcname, FP_STRING, FP_DONE);
ENGHOOK(AllocString);
break;
case FM_RegUserMsg:
fId = MF_RegisterSPForwardByName(amx, funcname, FP_STRING, FP_CELL, FP_DONE);
ENGHOOK(RegUserMsg);
break;
case FM_AnimationAutomove:
fId = MF_RegisterSPForwardByName(amx, funcname, FP_CELL, FP_FLOAT, FP_DONE);
ENGHOOK(AnimationAutomove);
break;
case FM_GetBonePosition:
fId = MF_RegisterSPForwardByName(amx, funcname, FP_CELL, FP_CELL, FP_ARRAY, FP_ARRAY, FP_DONE);
// ENGHOOK(GetBonePosition);
break;
case FM_GetAttachment:
fId = MF_RegisterSPForwardByName(amx, funcname, FP_CELL, FP_CELL, FP_ARRAY, FP_ARRAY, FP_DONE);
// ENGHOOK(GetAttachment);
break;
case FM_SetView:
fId = MF_RegisterSPForwardByName(amx, funcname, FP_CELL, FP_CELL, FP_DONE);
ENGHOOK(SetView);
break;
case FM_Time:
fId = MF_RegisterSPForwardByName(amx, funcname, FP_DONE);
ENGHOOK(Time);
break;
case FM_CrosshairAngle:
fId = MF_RegisterSPForwardByName(amx, funcname, FP_CELL, FP_FLOAT, FP_FLOAT, FP_DONE);
ENGHOOK(CrosshairAngle);
break;
case FM_FadeClientVolume:
fId = MF_RegisterSPForwardByName(amx, funcname, FP_CELL, FP_CELL, FP_CELL, FP_CELL, FP_CELL, FP_DONE);
ENGHOOK(FadeClientVolume);
break;
case FM_SetClientMaxspeed:
fId = MF_RegisterSPForwardByName(amx, funcname, FP_CELL, FP_FLOAT, FP_DONE);
ENGHOOK(SetClientMaxspeed);
break;
case FM_CreateFakeClient:
fId = MF_RegisterSPForwardByName(amx, funcname, FP_STRING, FP_DONE);
ENGHOOK(CreateFakeClient);
break;
case FM_RunPlayerMove:
fId = MF_RegisterSPForwardByName(amx, funcname, FP_CELL, FP_ARRAY, FP_FLOAT, FP_FLOAT, FP_FLOAT, FP_CELL, FP_CELL, FP_CELL, FP_DONE);
// ENGHOOK(RunPlayerMove);
break;
case FM_NumberOfEntities:
fId = MF_RegisterSPForwardByName(amx, funcname, FP_DONE);
ENGHOOK(NumberOfEntities);
break;
case FM_StaticDecal:
fId = MF_RegisterSPForwardByName(amx, funcname, FP_ARRAY, FP_CELL, FP_CELL, FP_CELL, FP_DONE);
// ENGHOOK(StaticDecal);
break;
case FM_PrecacheGeneric:
fId = MF_RegisterSPForwardByName(amx, funcname, FP_STRING, FP_DONE);
ENGHOOK(PrecacheGeneric);
break;
case FM_BuildSoundMsg:
fId = MF_RegisterSPForwardByName(amx, funcname, FP_CELL, FP_CELL, FP_STRING, FP_FLOAT, FP_FLOAT, FP_CELL, FP_CELL, FP_CELL, FP_CELL, FP_ARRAY, FP_CELL, FP_DONE);
// ENGHOOK(BuildSoundMsg);
break;
case FM_GetPhysicsKeyValue:
fId = MF_RegisterSPForwardByName(amx, funcname, FP_CELL, FP_STRING, FP_DONE);
ENGHOOK(GetPhysicsKeyValue);
break;
case FM_SetPhysicsKeyValue:
fId = MF_RegisterSPForwardByName(amx, funcname, FP_CELL, FP_STRING, FP_STRING, FP_DONE);
ENGHOOK(SetPhysicsKeyValue);
break;
case FM_GetPhysicsInfoString:
fId = MF_RegisterSPForwardByName(amx, funcname, FP_CELL, FP_DONE);
ENGHOOK(GetPhysicsInfoString);
break;
case FM_PrecacheEvent:
fId = MF_RegisterSPForwardByName(amx, funcname, FP_CELL, FP_STRING, FP_DONE);
ENGHOOK(PrecacheEvent);
break;
case FM_PlaybackEvent:
fId = MF_RegisterSPForwardByName(amx, funcname, 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);
ENGHOOK(PlaybackEvent); // waaaaaaaaaah, its so damn big. :~(
break;
//EngFunc_CheckVisibility, //) ( const edict_t *entity, unsigned char *pset );
case FM_CheckVisibility:
fId = MF_RegisterSPForwardByName(amx, funcname, FP_CELL, FP_STRING, FP_DONE);
// ENGHOOK(CheckVisibility);
break;
//EngFunc_GetCurrentPlayer, //) ( void );
case FM_GetCurrentPlayer:
fId = MF_RegisterSPForwardByName(amx, funcname, FP_DONE);
ENGHOOK(GetCurrentPlayer);
@ -575,65 +806,88 @@ static cell AMX_NATIVE_CALL register_forward(AMX *amx, cell *params)
//EngFunc_CanSkipPlayer, //) ( const edict_t *player );
case FM_CanSkipPlayer:
fId = MF_RegisterSPForwardByName(amx, funcname, FP_CELL, FP_DONE);
ENGHOOK(CanSkipPlayer);
break;
//EngFunc_SetGroupMask, //) ( int mask, int op );
case FM_SetGroupMask:
fId = MF_RegisterSPForwardByName(amx, funcname, FP_CELL, FP_CELL, FP_DONE);
ENGHOOK(SetGroupMask);
break;
//EngFunc_GetClientListening, // bool (int iReceiver, int iSender)
case FM_Voice_GetClientListening:
fId = MF_RegisterSPForwardByName(amx, funcname, FP_CELL, FP_CELL, FP_DONE);
ENGHOOK(Voice_GetClientListening);
break;
//EngFunc_SetClientListening, // bool (int iReceiver, int iSender, bool Listen)
case FM_Voice_SetClientListening:
fId = MF_RegisterSPForwardByName(amx, funcname, FP_CELL, FP_CELL, FP_CELL, FP_DONE); // TODO: bool as cell 3rd arg?
ENGHOOK(Voice_SetClientListening);
break;
//EngFunc_InfoKeyValue, // char* ) (char *infobuffer, char *key);
case FM_InfoKeyValue:
fId = MF_RegisterSPForwardByName(amx, funcname, FP_STRING, FP_STRING, FP_DONE);
ENGHOOK(InfoKeyValue);
break;
//EngFunc_SetKeyValue, // void ) (char *infobuffer, char *key, char *value);
case FM_SetKeyValue:
fId = MF_RegisterSPForwardByName(amx, funcname, FP_STRING, FP_STRING, FP_STRING, FP_DONE);
ENGHOOK(SetKeyValue);
break;
//EngFunc_SetClientKeyValue // void ) (int clientIndex, char *infobuffer, char *key, char *value);
case FM_SetClientKeyValue:
fId = MF_RegisterSPForwardByName(amx, funcname, FP_CELL, FP_STRING, FP_STRING, FP_STRING, FP_DONE);
ENGHOOK(SetClientKeyValue);
break;
case FM_GetPlayerAuthId:
fId = MF_RegisterSPForwardByName(amx, funcname, FP_CELL, FP_DONE);
ENGHOOK(GetPlayerAuthId);
break;
case FM_GetPlayerWONId:
fId = MF_RegisterSPForwardByName(amx,funcname,FP_CELL,FP_DONE);
ENGHOOK(GetPlayerWONId);
break;
case FM_IsMapValid:
fId = MF_RegisterSPForwardByName(amx, funcname,FP_STRING,FP_DONE);
ENGHOOK(IsMapValid);
break;
/*
* Begin of DLLFuncs
*/
//DLLFunc_Spawn, // int ) ( edict_t *pent );
case FM_Spawn:
fId = MF_RegisterSPForwardByName(amx, funcname, FP_CELL, FP_DONE);
DLLHOOK(Spawn);
break;
//DLLFunc_Think, // void ) ( edict_t *pent );
case FM_Think:
fId = MF_RegisterSPForwardByName(amx, funcname, FP_CELL, FP_DONE);
DLLHOOK(Think);
break;
//DLLFunc_Use, // void ) ( edict_t *pentUsed, edict_t *pentOther );
case FM_Use:
fId = MF_RegisterSPForwardByName(amx, funcname, FP_CELL, FP_CELL, FP_DONE);
DLLHOOK(Use);
break;
//DLLFunc_Touch, // void ) ( edict_t *pentTouched, edict_t *pentOther );
case FM_Touch:
fId = MF_RegisterSPForwardByName(amx, funcname, FP_CELL, FP_CELL, FP_DONE);
DLLHOOK(Touch);
break;
//DLLFunc_Blocked, // void ) ( edict_t *pentBlocked, edict_t *pentOther );
case FM_Blocked:
fId = MF_RegisterSPForwardByName(amx, funcname, FP_CELL, FP_CELL, FP_DONE);
DLLHOOK(Blocked);
break;
//DLLFunc_KeyValue, // void ) ( edict_t *pentKeyvalue, KeyValueData *pkvd );
/*
TODO: Expand the structure (simple: just a bunch of strings and a float.)
//DLLFunc_KeyValue, // void ) ( edict_t *pentKeyvalue, KeyValueData *pkvd );
case FM_KeyValue:
fId = MF_RegisterSPForwardByName(amx, funcname, FP_CELL, FP_????, FP_DONE); // TODO: undefined structure?
fId = MF_RegisterSPForwardByName(amx, funcname, FP_CELL, FP_????, FP_DONE);
break;
*/
//DLLFunc_SetAbsBox, // void ) ( edict_t *pent );
@ -642,119 +896,101 @@ static cell AMX_NATIVE_CALL register_forward(AMX *amx, cell *params)
DLLHOOK(SetAbsBox);
break;
//DLLFunc_ClientConnect, // bool) ( edict_t *pEntity, const char *pszName, const char *pszAddress, char szRejectReason[ 128 ] );
case FM_ClientConnect:
fId = MF_RegisterSPForwardByName(amx, funcname, FP_CELL, FP_STRING, FP_STRING, FP_STRING, FP_DONE); // TODO: 4th arg must be of set size 128?
DLLHOOK(ClientConnect);
break;
//DLLFunc_ClientDisconnect, // void ) ( edict_t *pEntity );
case FM_ClientDisconnect:
fId = MF_RegisterSPForwardByName(amx, funcname, FP_CELL, FP_DONE);
DLLHOOK(ClientDisconnect);
break;
//DLLFunc_ClientKill, // void ) ( edict_t *pEntity );
case FM_ClientKill:
fId = MF_RegisterSPForwardByName(amx, funcname, FP_CELL, FP_DONE);
DLLHOOK(ClientKill);
break;
//DLLFunc_ClientPutInServer, // void ) ( edict_t *pEntity );
case FM_ClientPutInServer:
fId = MF_RegisterSPForwardByName(amx, funcname, FP_CELL, FP_DONE);
DLLHOOK(ClientPutInServer);
break;
//DLLFunc_ClientCommand, // void ) ( edict_t *pEntity );
case FM_ClientCommand:
fId = MF_RegisterSPForwardByName(amx, funcname, FP_CELL, FP_DONE);
DLLHOOK(ClientCommand);
break;
//DLLFunc_ServerDeactivate, // void) ( void );
case FM_ServerDeactivate:
fId = MF_RegisterSPForwardByName(amx, funcname, FP_DONE);
DLLHOOK(ServerDeactivate);
break;
//DLLFunc_PlayerPreThink, // void ) ( edict_t *pEntity );
case FM_PlayerPreThink:
fId = MF_RegisterSPForwardByName(amx, funcname, FP_CELL, FP_DONE);
DLLHOOK(PlayerPreThink);
break;
//DLLFunc_PlayerPostThink, // void ) ( edict_t *pEntity );
case FM_PlayerPostThink:
fId = MF_RegisterSPForwardByName(amx, funcname, FP_CELL, FP_DONE);
DLLHOOK(PlayerPostThink);
break;
//DLLFunc_StartFrame, // void ) ( void );
case FM_StartFrame:
fId = MF_RegisterSPForwardByName(amx, funcname, FP_DONE);
DLLHOOK(StartFrame);
break;
//DLLFunc_ParmsNewLevel, // void ) ( void );
case FM_ParmsNewLevel:
fId = MF_RegisterSPForwardByName(amx, funcname, FP_DONE);
DLLHOOK(ParmsNewLevel);
break;
//DLLFunc_ParmsChangeLevel, // void ) ( void );
case FM_ParmsChangeLevel:
fId = MF_RegisterSPForwardByName(amx, funcname, FP_DONE);
DLLHOOK(ParmsChangeLevel);
break;
// Returns string describing current .dll. E.g., TeamFotrress 2, Half-Life
//DLLFunc_GetGameDescription, // const char * )( void );
case FM_GetGameDescription:
fId = MF_RegisterSPForwardByName(amx, funcname, FP_DONE);
DLLHOOK(GetGameDescription);
break;
// Spectator funcs
//DLLFunc_SpectatorConnect, // void) ( edict_t *pEntity );
case FM_SpectatorConnect:
fId = MF_RegisterSPForwardByName(amx, funcname, FP_CELL, FP_DONE);
DLLHOOK(SpectatorConnect);
break;
//DLLFunc_SpectatorDisconnect, // void ) ( edict_t *pEntity );
case FM_SpectatorDisconnect:
fId = MF_RegisterSPForwardByName(amx, funcname, FP_CELL, FP_DONE);
DLLHOOK(SpectatorDisconnect);
break;
//DLLFunc_SpectatorThink, // void ) ( edict_t *pEntity );
case FM_SpectatorThink:
fId = MF_RegisterSPForwardByName(amx, funcname, FP_CELL, FP_DONE);
DLLHOOK(SpectatorThink);
break;
// 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 );
case FM_Sys_Error:
fId = MF_RegisterSPForwardByName(amx, funcname, FP_STRING, FP_DONE);
DLLHOOK(Sys_Error);
break;
//DLLFunc_PM_FindTextureType, // char )( char *name );
case FM_PM_FindTextureType:
fId = MF_RegisterSPForwardByName(amx, funcname, FP_STRING, FP_DONE);
DLLHOOK(PM_FindTextureType);
break;
//DLLFunc_RegisterEncoders, // void ) ( void );
case FM_RegisterEncoders:
fId = MF_RegisterSPForwardByName(amx, funcname, FP_DONE);
DLLHOOK(RegisterEncoders);
break;
// Enumerates player hulls. Returns 0 if the hull number doesn't exist, 1 otherwise
//DLLFunc_GetHullBounds, // int) ( int hullnumber, float *mins, float *maxs );
case FM_GetHullBounds:
fId = MF_RegisterSPForwardByName(amx, funcname, FP_CELL, FP_ARRAY, FP_ARRAY, FP_DONE);
break;
// Create baselines for certain "unplaced" items.
//DLLFunc_CreateInstancedBaselines, // void ) ( void );
case FM_CreateInstancedBaselines:
fId = MF_RegisterSPForwardByName(amx, funcname, FP_DONE);
DLLHOOK(CreateInstancedBaselines);
break;
//DLLFunc_pfnAllowLagCompensation, // int )( void );
case FM_AllowLagCompensation:
fId = MF_RegisterSPForwardByName(amx, funcname, FP_DONE);
DLLHOOK(AllowLagCompensation);
@ -785,5 +1021,6 @@ static cell AMX_NATIVE_CALL register_forward(AMX *amx, cell *params)
AMX_NATIVE_INFO forward_natives[] = {
{ "register_forward", register_forward },
{ "forward_return", fm_return },
{ NULL, NULL }
};