47 lines
1.7 KiB
C++
47 lines
1.7 KiB
C++
enum struct HOOKS {
|
|
int ent;
|
|
char output[64];
|
|
EntityOutput callback;
|
|
}
|
|
HOOKS g_HookedEntities[128];
|
|
int g_HookedCount = 0;
|
|
|
|
// Hooks an entity by its index
|
|
void HookSingleEntity(int ent, const char[] output, EntityOutput callback)
|
|
{
|
|
if (!IsValidEntity(ent) || g_HookedCount >= sizeof(g_HookedEntities)) return;
|
|
for (int i = 0; i < g_HookedCount; i++) if (g_HookedEntities[i].ent == ent && StrEqual(g_HookedEntities[i].output, output)) return; // Avoid duplicates (same ent + output)
|
|
HookSingleEntityOutput(ent, output, callback);
|
|
g_HookedEntities[g_HookedCount].ent = ent;
|
|
strcopy(g_HookedEntities[g_HookedCount].output, sizeof(g_HookedEntities[g_HookedCount].output), output);
|
|
g_HookedEntities[g_HookedCount].callback = callback;
|
|
PrintToServer("Hooking entity %i with output %s", ent, g_HookedEntities[g_HookedCount].output);
|
|
g_HookedCount++;
|
|
}
|
|
|
|
public void OnEntityDestroyed(int ent){
|
|
for (int i = g_HookedCount - 1; i >= 0; i--)
|
|
{
|
|
if (g_HookedEntities[i].ent == ent)
|
|
{
|
|
UnhookSingleEntityOutput(ent, g_HookedEntities[i].output, g_HookedEntities[i].callback);
|
|
|
|
// Remove entry by shifting left
|
|
for (int j = i; j < g_HookedCount - 1; j++)
|
|
{
|
|
g_HookedEntities[j] = g_HookedEntities[j + 1];
|
|
}
|
|
g_HookedCount--;
|
|
}
|
|
}
|
|
}
|
|
// Hook necessary entities for this plugin's operation
|
|
void HookAllEntities() {
|
|
//PrintToServer("HOOKING ALL THE ENTITIES.");
|
|
//HookSingleEntity(FindEntityByTargetname("Operator", "point_servercommand"), "Command", ass_relay_user1);
|
|
}
|
|
|
|
public void ass_relay_user1(const char[] output, int caller, int activator, float delay){
|
|
//PrintToServer("Got output %s", output);
|
|
}
|