Skip to content

Commit

Permalink
Fix SetString, hook FreeEntPrivateData instead of ED_Free
Browse files Browse the repository at this point in the history
  • Loading branch information
rsKliPPy committed Feb 24, 2017
1 parent 97cf95b commit 0c125bb
Show file tree
Hide file tree
Showing 3 changed files with 11 additions and 23 deletions.
2 changes: 1 addition & 1 deletion source/amxxsdk/moduleconfig.h
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
* to add multiple entries.
*/
#define MODULE_NAME "Custom Entity Data"
#define MODULE_VERSION "1.0.0"
#define MODULE_VERSION "1.0.1"
#define MODULE_AUTHOR "KliPPy"
#define MODULE_URL "http://"
#define MODULE_LOGTAG "CED"
Expand Down
30 changes: 9 additions & 21 deletions source/module.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,48 +5,36 @@

static CHooker Hooker;

using FN_ED_Free = void (*)(edict_t *);
//typedef void (*FN_ED_Free)(edict_t *);
static CFunc* funcFreeEntPrivateData = nullptr;

static FN_ED_Free pfnED_Free = nullptr;
static CFunc* funcED_Free = nullptr;


void ED_Free_Hook(edict_t *ed)
void FreeEntPrivateData_Hook(edict_t *ed)
{
GET_ORIG_FUNC(func);

if(func->Restore())
{
g_entityData[g_engfuncs.pfnIndexOfEdict(ed)].clear();

pfnED_Free(ed);
g_engfuncs.pfnFreeEntPrivateData(ed);

funcED_Free->Patch();
funcFreeEntPrivateData->Patch();
}
}

bool CreateHooks()
{
#ifdef KE_WINDOWS
pfnED_Free = Hooker.MemorySearch<FN_ED_Free>("0x55,0x8B,0xEC,0x56,0x8B,0x75,*,0x57,0x33,0xFF,0x39,0x3E", (void *)gpGlobals, FALSE);
#else
pfnED_Free = Hooker.MemorySearch<FN_ED_Free>("ED_Free", (void *)gpGlobals, TRUE);
#endif

funcED_Free = Hooker.CreateHook((void *)pfnED_Free, (void *)ED_Free_Hook, TRUE);
if(funcED_Free == nullptr)
funcFreeEntPrivateData = Hooker.CreateHook((void *)g_engfuncs.pfnFreeEntPrivateData, (void *)FreeEntPrivateData_Hook, TRUE);
if(funcFreeEntPrivateData == nullptr)
{
g_engfuncs.pfnServerPrint("Failed to create ED_Free() hook...\n");
g_engfuncs.pfnServerPrint("[CED] Failed to create FreeEntPrivateData() hook...\n");
return false;
}

g_engfuncs.pfnServerPrint("Successfully hooked ED_Free()\n");

return true;
}

void RestoreHooks()
{
funcED_Free->Restore();
if(funcFreeEntPrivateData != nullptr)
funcFreeEntPrivateData->Restore();
}
2 changes: 1 addition & 1 deletion source/natives.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ static cell Native_SetString(AMX *amx, cell *params)
{
NATIVE_SETUP();

g_entityData[index].replace(key, ke::AutoPtr<IEntDataEntry>(new EntDataString(MF_GetAmxString(amx, params[3], 1, &dummyLen))));
g_entityData[index].replace(key, ke::AutoPtr<IEntDataEntry>(new EntDataString(MF_GetAmxString(amx, params[3], 2, &dummyLen))));

return 0;
}
Expand Down

0 comments on commit 0c125bb

Please sign in to comment.