L L4D2node

CPropMinigun::Use

0x00547c60 · 861 bytes · __cdecl

_ZN12CPropMinigun3UseEP11CBaseEntityS1_8USE_TYPEf

Decompiled

undefined (4 params)

/* CPropMinigun::Use(CBaseEntity*, CBaseEntity*, USE_TYPE, float) */

void CPropMinigun::Use(int *param_1,CBaseCombatCharacter *param_2,undefined4 param_3,int param_4)

{
  CBaseEdict *pCVar1;
  char cVar2;
  int iVar3;
  undefined4 *puVar4;
  int *piVar5;
  undefined *puVar6;
  uint uVar7;
  undefined1 local_24 [20];
  
  uVar7 = param_1[0x573];
  if ((((uVar7 == 0xffffffff) ||
       (puVar6 = g_pEntityList + (uVar7 & 0xfff) * 0x10, puVar6 == (undefined *)0xfffffffc)) ||
      (*(uint *)(puVar6 + 8) != uVar7 >> 0xc)) ||
     (*(CBaseCombatCharacter **)(puVar6 + 4) == (CBaseCombatCharacter *)0x0)) {
    if (param_2 == (CBaseCombatCharacter *)0x0) {
      return;
    }
  }
  else if (param_2 != *(CBaseCombatCharacter **)(puVar6 + 4)) {
    return;
  }
  cVar2 = (**(code **)(*(int *)param_2 + 0x16c))(param_2);
  if (cVar2 != '\0') {
    uVar7 = *(uint *)(param_2 + 0x1d14);
    if (((uVar7 == 0xffffffff) ||
        (puVar6 = g_pEntityList + (uVar7 & 0xfff) * 0x10, puVar6 == (undefined *)0xfffffffc)) ||
       ((*(uint *)(puVar6 + 8) != uVar7 >> 0xc || (*(int **)(puVar6 + 4) != param_1)))) {
      cVar2 = (**(code **)(*param_1 + 0x164))(param_1,param_2);
      if (cVar2 != '\0') {
        uVar7 = *(uint *)(param_2 + 0x1d14);
        if (((uVar7 == 0xffffffff) ||
            (puVar6 = g_pEntityList + (uVar7 & 0xfff) * 0x10, puVar6 == (undefined *)0xfffffffc)) ||
           ((*(uint *)(puVar6 + 8) != uVar7 >> 0xc || (*(int **)(puVar6 + 4) != param_1)))) {
          if (param_2[0x6c] == (CBaseCombatCharacter)0x0) {
            pCVar1 = *(CBaseEdict **)(param_2 + 0x30);
            if (pCVar1 != (CBaseEdict *)0x0) {
              *(uint *)pCVar1 = *(uint *)pCVar1 | 0x101;
              iVar3 = CBaseEdict::GetChangeAccessor(pCVar1);
              *(undefined2 *)(iVar3 + 2) = 0;
            }
          }
          else {
            param_2[0x70] = (CBaseCombatCharacter)((byte)param_2[0x70] | 1);
          }
          puVar4 = (undefined4 *)(**(code **)(*param_1 + 0xc))(param_1);
          *(undefined4 *)(param_2 + 0x1d14) = *puVar4;
        }
        (**(code **)(*(int *)param_2 + 0x76c))(param_2);
        uVar7 = param_1[0x573];
        if ((((uVar7 == 0xffffffff) ||
             (puVar6 = g_pEntityList + (uVar7 & 0xfff) * 0x10, puVar6 == (undefined *)0xfffffffc))
            || (*(uint *)(puVar6 + 8) != uVar7 >> 0xc)) ||
           (param_2 != *(CBaseCombatCharacter **)(puVar6 + 4))) {
          if ((char)param_1[0x1b] == '\0') {
            pCVar1 = (CBaseEdict *)param_1[0xc];
            if (pCVar1 != (CBaseEdict *)0x0) {
              *(uint *)pCVar1 = *(uint *)pCVar1 | 0x101;
              iVar3 = CBaseEdict::GetChangeAccessor(pCVar1);
              *(undefined2 *)(iVar3 + 2) = 0;
            }
          }
          else {
            *(byte *)(param_1 + 0x1c) = *(byte *)(param_1 + 0x1c) | 1;
          }
          piVar5 = (int *)(**(code **)(*(int *)param_2 + 0xc))(param_2);
          param_1[0x573] = *piVar5;
        }
        iVar3 = CBaseCombatCharacter::GetActiveWeapon(param_2);
        if (iVar3 != 0) {
          piVar5 = (int *)CBaseCombatCharacter::GetActiveWeapon(param_2);
          (**(code **)(*piVar5 + 0x428))(piVar5,0);
        }
        CBaseEntity::ThinkSet((_func_void *)local_24,(float)param_1,(char *)FireThink);
        param_1[0x57f] = *(int *)(gpGlobals + 0xc);
        return;
      }
    }
    else if (param_4 != 2) {
      if (param_2[0x6c] == (CBaseCombatCharacter)0x0) {
        pCVar1 = *(CBaseEdict **)(param_2 + 0x30);
        if (pCVar1 != (CBaseEdict *)0x0) {
          *(uint *)pCVar1 = *(uint *)pCVar1 | 0x101;
          iVar3 = CBaseEdict::GetChangeAccessor(pCVar1);
          *(undefined2 *)(iVar3 + 2) = 0;
        }
      }
      else {
        param_2[0x70] = (CBaseCombatCharacter)((byte)param_2[0x70] | 1);
      }
      *(undefined4 *)(param_2 + 0x1d14) = 0xffffffff;
      (**(code **)(*(int *)param_2 + 0x76c))(param_2);
      uVar7 = param_1[0x573];
      if (((uVar7 != 0xffffffff) &&
          (puVar6 = g_pEntityList + (uVar7 & 0xfff) * 0x10, puVar6 != (undefined *)0xfffffffc)) &&
         ((*(uint *)(puVar6 + 8) == uVar7 >> 0xc && (*(int *)(puVar6 + 4) != 0)))) {
        if ((char)param_1[0x1b] == '\0') {
          pCVar1 = (CBaseEdict *)param_1[0xc];
          if (pCVar1 != (CBaseEdict *)0x0) {
            *(uint *)pCVar1 = *(uint *)pCVar1 | 0x101;
            iVar3 = CBaseEdict::GetChangeAccessor(pCVar1);
            *(undefined2 *)(iVar3 + 2) = 0;
          }
        }
        else {
          *(byte *)(param_1 + 0x1c) = *(byte *)(param_1 + 0x1c) | 1;
        }
        param_1[0x573] = -1;
      }
      iVar3 = CBaseCombatCharacter::GetActiveWeapon(param_2);
      if (iVar3 != 0) {
        uVar7 = *(uint *)(param_2 + 0x1a7c) & 0xfffffffe;
        if (*(uint *)(param_2 + 0x1a7c) != uVar7) {
          (**(code **)(*(int *)(param_2 + 0x1a40) + 4))(param_2 + 0x1a40,param_2 + 0x1a7c);
          *(uint *)(param_2 + 0x1a7c) = uVar7;
        }
        piVar5 = (int *)CBaseCombatCharacter::GetActiveWeapon(param_2);
                    /* WARNING: Could not recover jumptable at 0x00547f4c. Too many branches */
                    /* WARNING: Treating indirect jump as call */
        (**(code **)(*piVar5 + 0x424))();
        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)