L L4D2node

CBasePlayer::TraceAttack

0x007a8eb0 · 750 bytes · __thiscall

_ZN11CBasePlayer11TraceAttackERK15CTakeDamageInfoRK6VectorP10CGameTrace

Decompiled

undefined (4 params)

/* CBasePlayer::TraceAttack(CTakeDamageInfo const&, Vector const&, CGameTrace*) */

void __thiscall
CBasePlayer::TraceAttack
          (CBasePlayer *this,CTakeDamageInfo *param_1,Vector *param_2,CGameTrace *param_3)

{
  float fVar1;
  char cVar2;
  undefined *puVar3;
  int *piVar4;
  uint uVar5;
  undefined4 uVar6;
  int iVar7;
  undefined4 local_80;
  undefined4 local_7c;
  undefined4 local_78;
  undefined4 local_74;
  undefined4 local_70;
  undefined4 local_6c;
  undefined4 local_68;
  undefined4 local_64;
  undefined4 local_60;
  undefined4 local_5c;
  undefined4 local_58;
  undefined4 local_54;
  undefined4 local_50;
  undefined4 local_4c;
  uint local_48;
  undefined4 local_44;
  float local_40;
  undefined4 local_3c;
  undefined4 local_38;
  int local_34;
  undefined4 local_30;
  undefined4 local_2c;
  undefined4 local_28;
  undefined4 local_24;
  undefined4 local_20;
  
  if (this[0x105] == (CBasePlayer)0x0) {
    return;
  }
  local_7c = *(undefined4 *)param_1;
  local_44 = *(undefined4 *)(param_1 + 0x38);
  local_40 = *(float *)(param_1 + 0x3c);
  local_3c = *(undefined4 *)(param_1 + 0x40);
  local_78 = *(undefined4 *)(param_1 + 4);
  local_74 = *(undefined4 *)(param_1 + 8);
  local_70 = *(undefined4 *)(param_1 + 0xc);
  local_6c = *(undefined4 *)(param_1 + 0x10);
  local_68 = *(undefined4 *)(param_1 + 0x14);
  local_64 = *(undefined4 *)(param_1 + 0x18);
  local_60 = *(undefined4 *)(param_1 + 0x1c);
  local_5c = *(undefined4 *)(param_1 + 0x20);
  local_58 = *(undefined4 *)(param_1 + 0x24);
  local_54 = *(undefined4 *)(param_1 + 0x28);
  local_50 = *(undefined4 *)(param_1 + 0x2c);
  local_4c = *(undefined4 *)(param_1 + 0x30);
  local_48 = *(uint *)(param_1 + 0x34);
  local_34 = *(int *)(param_1 + 0x48);
  local_38 = *(undefined4 *)(param_1 + 0x44);
  local_24 = *(undefined4 *)(param_1 + 0x58);
  local_30 = *(undefined4 *)(param_1 + 0x4c);
  local_2c = *(undefined4 *)(param_1 + 0x50);
  local_28 = *(undefined4 *)(param_1 + 0x54);
  local_20 = *(undefined4 *)(param_1 + 0x5c);
  if ((((local_48 != 0xffffffff) &&
       (puVar3 = g_pEntityList + (local_48 & 0xfff) * 0x10, puVar3 != (undefined *)0xfffffffc)) &&
      (*(uint *)(puVar3 + 8) == local_48 >> 0xc)) && (*(int *)(puVar3 + 4) != 0)) {
    piVar4 = (int *)CBaseEntity::MyNPCPointer();
    if (((piVar4 != (int *)0x0) &&
        (uVar5 = (**(code **)(*piVar4 + 0x778))(piVar4), (uVar5 & 0x10000000) != 0)) &&
       (iVar7 = (**(code **)(*piVar4 + 0x4f4))(piVar4,this), iVar7 != 1)) {
      return;
    }
    piVar4 = (int *)0x0;
    if (((local_48 != 0xffffffff) &&
        (puVar3 = g_pEntityList + (local_48 & 0xfff) * 0x10, puVar3 != (undefined *)0xfffffffc)) &&
       (*(uint *)(puVar3 + 8) == local_48 >> 0xc)) {
      piVar4 = *(int **)(puVar3 + 4);
    }
    cVar2 = (**(code **)(*piVar4 + 0x16c))(piVar4);
    if (cVar2 != '\0') {
      local_80 = 0;
      if (((local_48 != 0xffffffff) &&
          (puVar3 = g_pEntityList + (local_48 & 0xfff) * 0x10, puVar3 != (undefined *)0xfffffffc))
         && (*(uint *)(puVar3 + 8) == local_48 >> 0xc)) {
        local_80 = *(undefined4 *)(puVar3 + 4);
      }
      cVar2 = (**(code **)(*g_pGameRules + 0xf0))(g_pGameRules,this,local_80);
      if (cVar2 == '\0') {
        return;
      }
    }
  }
  *(undefined4 *)(this + 0x1838) = *(undefined4 *)(param_3 + 0x44);
  switch(*(undefined4 *)(param_3 + 0x44)) {
  case 1:
    local_40 = local_40 * *(float *)(sk_player_head._28_4_ + 0x2c);
    break;
  case 2:
    local_40 = local_40 * *(float *)(sk_player_chest._28_4_ + 0x2c);
    break;
  case 3:
    local_40 = local_40 * *(float *)(sk_player_stomach._28_4_ + 0x2c);
    break;
  case 4:
  case 5:
    local_40 = local_40 * *(float *)(sk_player_arm._28_4_ + 0x2c);
    break;
  case 6:
  case 7:
    local_40 = local_40 * *(float *)(sk_player_leg._28_4_ + 0x2c);
  }
  fVar1 = local_40;
  uVar6 = (**(code **)(*(int *)this + 0x138))(this);
  SpawnBlood(*(undefined4 *)(param_3 + 0xc),*(undefined4 *)(param_3 + 0x10),
             *(undefined4 *)(param_3 + 0x14),param_2,uVar6,fVar1);
  CBaseEntity::TraceBleed((CBaseEntity *)this,local_40,param_2,param_3,local_34);
  AddMultiDamage((CTakeDamageInfo *)&local_7c,(CBaseEntity *)this);
  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)