amxmodx/modules/fakemeta/fakemeta_amxx.cpp

232 lines
5.8 KiB
C++
Raw Normal View History

// vim: set ts=4 sw=4 tw=99 noet:
//
// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO").
// Copyright (C) The AMX Mod X Development Team.
//
// This software is licensed under the GNU General Public License, version 3 or higher.
// Additional exceptions apply. For full license details, see LICENSE.txt or visit:
// https://alliedmods.net/amxmodx-license
//
// Fakemeta Module
//
2004-07-28 03:14:07 +00:00
#include "fakemeta_amxx.h"
2007-05-02 23:11:49 +00:00
#include "sh_stack.h"
2004-07-28 03:14:07 +00:00
edict_t *g_player_edicts[33]; // Used for INDEXENT() forward.
2004-07-28 03:14:07 +00:00
void OnAmxxAttach()
{
2006-03-04 06:34:28 +00:00
initialze_offsets();
2006-03-14 16:55:06 +00:00
initialize_glb_offsets();
2004-07-28 03:14:07 +00:00
MF_AddNatives(engfunc_natives);
MF_AddNatives(dllfunc_natives);
2005-07-19 16:08:00 +00:00
MF_AddNatives(pev_natives);
MF_AddNatives(forward_natives);
2004-08-11 05:06:27 +00:00
MF_AddNatives(pdata_natives);
2004-09-14 23:39:22 +00:00
MF_AddNatives(tr_Natives);
2006-03-14 16:55:06 +00:00
MF_AddNatives(glb_natives);
2006-03-20 18:08:51 +00:00
MF_AddNatives(ext2_natives);
MF_AddNatives(misc_natives);
g_kvd_glb.kvd.szClassName = const_cast<char *>(g_kvd_glb.cls.chars());
g_kvd_glb.kvd.szKeyName = const_cast<char *>(g_kvd_glb.key.chars());
g_kvd_glb.kvd.szValue = const_cast<char *>(g_kvd_glb.val.chars());
g_kvd_glb.kvd.fHandled = 0;
}
2006-03-20 18:08:51 +00:00
2007-05-02 23:11:49 +00:00
extern CStack<TraceResult *> g_FreeTRs;
extern ke::Vector<KVD_Wrapper *> g_KVDWs;
extern ke::Vector<KVD_Wrapper *> g_FreeKVDWs;
2007-05-02 23:11:49 +00:00
void OnAmxxDetach()
{
while (!g_FreeTRs.empty())
{
delete g_FreeTRs.front();
g_FreeTRs.pop();
}
while (!g_KVDWs.empty())
delete g_KVDWs.popCopy();
while (!g_FreeKVDWs.empty())
delete g_FreeKVDWs.popCopy();
2007-05-02 23:11:49 +00:00
}
2004-08-11 05:06:27 +00:00
int GetHullBounds(int hullnumber, float *mins, float *maxs);
// sawce: Do not null out the forward for ServerActivate. It's required for the INDEXENT() fix. (I don't think ServerActivate is planned on being forwarded anyway)
void ServerActivate(edict_t *pEdictList, int edictCount, int clientMax)
{
for(int i = 1; i <= gpGlobals->maxClients;i++)
g_player_edicts[i]=pEdictList + i;
g_pFunctionTable_Post->pfnServerDeactivate = FMH_ServerDeactivate_Post;
RETURN_META(MRES_IGNORED);
}
#define RESETD(tcall) \
g_pFunctionTable->pfn##tcall =0; \
g_pFunctionTable_Post->pfn##tcall =NULL; \
2004-08-22 17:56:58 +00:00
Engine[FM_##tcall].clear(); \
2007-01-28 05:01:38 +00:00
EnginePost[FM_##tcall].clear(); \
EngineAddrs[FM_##tcall] = NULL; \
EngineAddrsPost[FM_##tcall] = NULL;
#define RESETE(call) \
g_pengfuncsTable->pfn##call = NULL; \
g_pengfuncsTable_Post->pfn##call = NULL; \
Engine[FM_##call].clear(); \
2007-01-28 05:01:38 +00:00
EnginePost[FM_##call].clear(); \
EngineAddrs[FM_##call] = NULL; \
EngineAddrsPost[FM_##call] = NULL;
2006-02-05 08:06:50 +00:00
#define RESETN(call) \
g_pNewFunctionsTable->pfn##call = NULL; \
g_pNewFunctionsTable_Post->pfn##call = NULL; \
Engine[FM_##call].clear(); \
2007-01-28 05:01:38 +00:00
EnginePost[FM_##call].clear(); \
EngineAddrs[FM_##call] = NULL; \
EngineAddrsPost[FM_##call] = NULL;
2006-02-05 08:06:50 +00:00
void FMH_ServerDeactivate_Post()
{
// Reset all call lists here.
// NULL all function tables
RESETE(PrecacheModel);
RESETE(PrecacheSound);
RESETE(SetModel);
RESETE(ModelIndex);
RESETE(ModelFrames);
RESETE(SetSize);
RESETE(ChangeLevel);
RESETE(VecToYaw);
RESETE(VecToAngles);
RESETE(MoveToOrigin);
RESETE(ChangeYaw);
RESETE(ChangePitch);
RESETE(FindEntityByString);
RESETE(GetEntityIllum);
RESETE(FindEntityInSphere);
RESETE(FindClientInPVS);
RESETE(EntitiesInPVS);
RESETE(MakeVectors);
RESETE(AngleVectors);
RESETE(CreateEntity);
RESETE(RemoveEntity);
RESETE(CreateNamedEntity);
RESETE(MakeStatic);
RESETE(EntIsOnFloor);
RESETE(DropToFloor);
RESETE(WalkMove);
RESETE(SetOrigin);
RESETE(EmitSound);
RESETE(EmitAmbientSound);
RESETE(TraceLine);
RESETE(TraceToss);
RESETE(TraceMonsterHull);
RESETE(TraceHull);
RESETE(TraceModel);
RESETE(TraceTexture);
RESETE(TraceSphere);
RESETE(GetAimVector);
RESETE(ParticleEffect);
RESETE(LightStyle);
RESETE(DecalIndex);
RESETE(PointContents);
RESETE(FreeEntPrivateData);
RESETE(SzFromIndex);
RESETE(AllocString);
RESETE(RegUserMsg);
RESETE(AnimationAutomove);
RESETE(GetBonePosition);
RESETE(GetAttachment);
RESETE(SetView);
RESETE(Time);
RESETE(CrosshairAngle);
RESETE(FadeClientVolume);
RESETE(SetClientMaxspeed);
RESETE(CreateFakeClient);
RESETE(RunPlayerMove);
RESETE(NumberOfEntities);
RESETE(StaticDecal);
RESETE(PrecacheGeneric);
RESETE(BuildSoundMsg);
RESETE(GetPhysicsKeyValue);
RESETE(SetPhysicsKeyValue);
RESETE(GetPhysicsInfoString);
RESETE(PrecacheEvent);
RESETE(PlaybackEvent);
RESETE(CheckVisibility);
RESETE(GetCurrentPlayer);
RESETE(CanSkipPlayer);
RESETE(SetGroupMask);
RESETE(Voice_GetClientListening);
RESETE(Voice_SetClientListening);
RESETE(InfoKeyValue);
RESETE(SetKeyValue);
RESETE(SetClientKeyValue);
2004-08-11 05:06:27 +00:00
RESETE(MessageBegin);
RESETE(MessageEnd);
RESETE(WriteByte);
RESETE(WriteChar);
RESETE(WriteShort);
RESETE(WriteLong);
RESETE(WriteAngle);
RESETE(WriteCoord);
RESETE(WriteString);
RESETE(WriteEntity);
RESETE(CVarGetFloat);
RESETE(CVarGetString);
RESETE(CVarSetFloat);
RESETE(CVarSetString);
2006-02-05 08:06:50 +00:00
RESETE(AlertMessage);
RESETE(CreateInstancedBaseline);
RESETE(GetInfoKeyBuffer);
RESETE(ClientPrintf);
RESETE(GetPlayerAuthId);
RESETE(GetPlayerWONId);
RESETE(IsMapValid);
2007-04-30 18:32:40 +00:00
RESETE(ServerPrint);
RESETD(Spawn);
RESETD(Think);
RESETD(Use);
RESETD(Touch);
RESETD(Blocked);
RESETD(KeyValue);
RESETD(SetAbsBox);
RESETD(ClientConnect);
RESETD(ClientDisconnect);
RESETD(ClientKill);
RESETD(ClientPutInServer);
RESETD(ClientCommand);
RESETD(ServerDeactivate);
RESETD(PlayerPreThink);
RESETD(PlayerPostThink);
RESETD(StartFrame);
RESETD(ParmsNewLevel);
RESETD(ParmsChangeLevel);
RESETD(GetGameDescription);
RESETD(SpectatorConnect);
RESETD(SpectatorDisconnect);
RESETD(SpectatorThink);
RESETD(Sys_Error);
RESETD(PM_FindTextureType);
RESETD(RegisterEncoders);
RESETD(CreateInstancedBaselines);
RESETD(AllowLagCompensation);
RESETD(ClientUserInfoChanged);
RESETD(UpdateClientData);
RESETD(AddToFullPack);
RESETD(CmdStart);
RESETD(CmdEnd);
RESETD(CreateBaseline);
2006-02-05 08:06:50 +00:00
RESETN(OnFreeEntPrivateData);
RESETN(GameShutdown);
RESETN(ShouldCollide);
g_pFunctionTable->pfnServerActivate = ServerActivate;
2006-04-29 13:51:52 +00:00
RETURN_META(MRES_IGNORED);
}