L L4D2node

CTerrorPlayer::OnPlayerUse

0x009c1f90 · 709 bytes · __cdecl

_ZN13CTerrorPlayer11OnPlayerUseEP11CBaseEntityS1_8USE_TYPEf

Decompiled

undefined (4 params)

/* CTerrorPlayer::OnPlayerUse(CBaseEntity*, CBaseEntity*, USE_TYPE, float) */

void CTerrorPlayer::OnPlayerUse(CBaseEntity *param_1,CBaseEntity *param_2)

{
  uint uVar1;
  char cVar2;
  int iVar3;
  undefined *puVar4;
  
  if ((((param_2 != (CBaseEntity *)0x0) &&
       (cVar2 = (**(code **)(*(int *)param_2 + 0x16c))(param_2), cVar2 != '\0')) &&
      (cVar2 = (**(code **)(*(int *)param_1 + 300))(param_1), cVar2 != '\0')) &&
     (cVar2 = (**(code **)(*(int *)param_1 + 0x7e8))(param_1), cVar2 != '\0')) {
    iVar3 = CBaseEntity::GetTeamNumber(param_1);
    cVar2 = IsASurvivorTeam(iVar3);
    if ((cVar2 != '\0') &&
       (((uVar1 = *(uint *)(param_1 + 0x2e24), uVar1 == 0xffffffff ||
         (puVar4 = g_pEntityList + (uVar1 & 0xfff) * 0x10, puVar4 == (undefined *)0xfffffffc)) ||
        ((*(uint *)(puVar4 + 8) != uVar1 >> 0xc ||
         ((*(CBaseEntity **)(puVar4 + 4) == (CBaseEntity *)0x0 ||
          (param_2 == *(CBaseEntity **)(puVar4 + 4))))))))) {
      iVar3 = CBaseEntity::GetTeamNumber(param_2);
      cVar2 = IsASurvivorTeam(iVar3);
      if ((((cVar2 != '\0') &&
           (((((cVar2 = (**(code **)(*(int *)param_2 + 0x7e8))(param_2), cVar2 == '\0' &&
               (cVar2 = IsFiringWeapon((CTerrorPlayer *)param_2), cVar2 == '\0')) &&
              (cVar2 = IsShoving((CTerrorPlayer *)param_2), cVar2 == '\0')) &&
             (((uVar1 = *(uint *)(param_2 + 0x33c4), uVar1 == 0xffffffff ||
               (puVar4 = g_pEntityList + (uVar1 & 0xfff) * 0x10, puVar4 == (undefined *)0xfffffffc))
              || ((*(uint *)(puVar4 + 8) != uVar1 >> 0xc || (*(int *)(puVar4 + 4) == 0)))))) &&
            (((((uVar1 = *(uint *)(param_2 + 0x3e68), uVar1 == 0xffffffff ||
                (puVar4 = g_pEntityList + (uVar1 & 0xfff) * 0x10, puVar4 == (undefined *)0xfffffffc)
                ) || (*(uint *)(puVar4 + 8) != uVar1 >> 0xc)) || (*(int *)(puVar4 + 4) == 0)) &&
             ((((uVar1 = *(uint *)(param_2 + 0x3ee0), uVar1 == 0xffffffff ||
                (puVar4 = g_pEntityList + (uVar1 & 0xfff) * 0x10, puVar4 == (undefined *)0xfffffffc)
                ) || (*(uint *)(puVar4 + 8) != uVar1 >> 0xc)) || (*(int *)(puVar4 + 4) == 0))))))))
          && (((uVar1 = *(uint *)(param_2 + 0x3e48), uVar1 == 0xffffffff ||
               (puVar4 = g_pEntityList + (uVar1 & 0xfff) * 0x10, puVar4 == (undefined *)0xfffffffc))
              || ((*(uint *)(puVar4 + 8) != uVar1 >> 0xc || (*(int *)(puVar4 + 4) == 0)))))) &&
         (((uVar1 = *(uint *)(param_2 + 0x2e28), uVar1 == 0xffffffff ||
           (puVar4 = g_pEntityList + (uVar1 & 0xfff) * 0x10, puVar4 == (undefined *)0xfffffffc)) ||
          ((*(uint *)(puVar4 + 8) != uVar1 >> 0xc || (*(int *)(puVar4 + 4) == 0)))))) {
        uVar1 = *(uint *)(param_2 + 0x2d64);
        if ((((uVar1 == 0xffffffff) ||
             (puVar4 = g_pEntityList + (uVar1 & 0xfff) * 0x10, puVar4 == (undefined *)0xfffffffc))
            || (*(uint *)(puVar4 + 8) != uVar1 >> 0xc)) ||
           (*(CBaseEntity **)(puVar4 + 4) == (CBaseEntity *)0x0)) {
          uVar1 = *(uint *)(param_1 + 0x2e24);
          if (((uVar1 == 0xffffffff) ||
              (puVar4 = g_pEntityList + (uVar1 & 0xfff) * 0x10, puVar4 == (undefined *)0xfffffffc))
             || ((*(uint *)(puVar4 + 8) != uVar1 >> 0xc || (*(int *)(puVar4 + 4) == 0))))
          goto LAB_009c219d;
        }
        else if ((param_1 == *(CBaseEntity **)(puVar4 + 4)) && (((byte)param_2[0x1cb4] & 0x20) != 0)
                ) {
LAB_009c219d:
          StartReviving((CTerrorPlayer *)param_2,(CTerrorPlayer *)param_1);
          return;
        }
      }
    }
  }
  return;
}

SourceMod gamedata

paste into addons/sourcemod/gamedata/<your_plugin>.txt
used as the SourceMod key — change to fit your plugin's convention
SourceMod library name (server / engine / matchmaking)

Just a Signatures{} block, ready to drop into a gamedata file. Wire it up in your plugin however you like - SDKCall, DHooks, raw memory ops, or anything else.



        

        

          

Type inference is best-effort from the C signature - sanity-check the DHooks types before shipping.

Return-type handling cheatsheet (DHookReturn)