void *pReal_PawnConstructor = NULL; void *pReal_PawnDeconstructor = NULL; void WINAPI Hooked_PawnConstructor(void) { static APawn* Target = NULL; __asm mov [Target], ecx; __asm call pReal_PawnConstructor; try { if(Target) { bool bValid = true; for(UINT i = 0; i < Targets.size(); i++) bValid = Targets[i] == Target ? false : bValid; if(bValid) { Targets.push_back(Target); fileSave ( L"Pawn Created: %i %s", Targets.size(), Target->GetName()); } } } catch ( ... ) { } __asm mov ecx, Target; } void WINAPI Hooked_PawnDeconstructor(void) { static APawn* Target = NULL; __asm mov [Target], ecx; __asm call pReal_PawnDeconstructor; try { if(Target) { int iPawn = -1; std::vector gTemp; for(UINT z = 0; z < Targets.size(); z++) { if(Targets[z] == Target) { iPawn = z; continue; } gTemp.push_back(Targets[z]); } if (iPawn != - 1) fileSave ( L"Pawn Destroyed: %i %s", iPawn, Target->GetName()); if(Targets.size()) Targets.clear(); for( UINT y = 0; y < gTemp.size(); y++) Targets.push_back(gTemp[y]); if(gTemp.size()) gTemp.clear(); } } catch ( ... ) { } __asm mov ecx, Target; }