Code:
<Include.....>
bool Precache = true;
int OnPrecache_Post(const char *Resource)
{
UNREFERENCED_PARAMETER(Resource);
if (!Precache)
RETURN_META_VALUE(MRES_IGNORED, NULL);
Precache = false;
LOG_CONSOLE(PLID, "Precaching Resources...");
PRECACHE_MODEL("models/player.mdl");
RETURN_META_VALUE(MRES_IGNORED, NULL);
}
void OnServerDeactivate_Post(void)
{
if (!Initialized)
RETURN_META(MRES_IGNORED);
TaskManager.clear();
Initialized = false;
Precache = true;
RETURN_META(MRES_IGNORED);
}
void OnActivate()
{
g_pFunctionTable->pfnSpawn = OnPrecache;
g_pengfuncsTable_Post->pfnPrecacheModel = OnPrecache_Post; // <<<<
g_pFunctionTable->pfnServerActivate = OnServerActivate;
g_pFunctionTable_Post->pfnServerActivate = OnServerActivate_Post;
g_pFunctionTable->pfnServerDeactivate = OnServerDeactivate;
g_pFunctionTable_Post->pfnServerDeactivate = OnServerDeactivate_Post; // <<<<
g_pFunctionTable->pfnCmdStart = OnCmdStart;
g_pFunctionTable->pfnClientCommand = OnClientCommand;
g_pengfuncsTable->pfnMessageBegin = OnMessageBegin;
g_pengfuncsTable->pfnWriteAngle = OnWriteAngle;
g_pengfuncsTable->pfnWriteByte = OnWriteByte;
g_pengfuncsTable->pfnWriteChar = OnWriteChar;
g_pengfuncsTable->pfnWriteCoord = OnWriteCoord;
g_pengfuncsTable->pfnWriteEntity = OnWriteEntity;
g_pengfuncsTable->pfnWriteLong = OnWriteLong;
g_pengfuncsTable->pfnWriteShort = OnWriteShort;
g_pengfuncsTable->pfnWriteString = OnWriteString;
g_pengfuncsTable->pfnMessageEnd = OnMessageEnd;
g_pengfuncsTable->pfnEmitSound = OnEmitSound;
g_pFunctionTable->pfnStartFrame = OnStartFrame;
}
I am showing only those 2 forwards, which is problem.
Interesting is that, it only crashes when player is in game.
OnActivate is forward called after:
C_DLLEXPORT int GetEngineFunctions_Post(enginefuncs_t *pengfuncsFromEngine, int *Version)
function.