L L4D2node

AddMultiDamage

0x004c8160 · 1007 bytes · __cdecl

_Z14AddMultiDamageRK15CTakeDamageInfoP11CBaseEntity

Decompiled

undefined (2 params)

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* AddMultiDamage(CTakeDamageInfo const&, CBaseEntity*) */

void AddMultiDamage(CTakeDamageInfo *param_1,CBaseEntity *param_2)

{
  char cVar1;
  uint uVar2;
  int iVar3;
  undefined *puVar4;
  CBaseEntity *pCVar5;
  float fVar6;
  float fVar7;
  float fVar8;
  CBaseEntity *local_24;
  CBaseEntity *local_20;
  
  if (param_2 == (CBaseEntity *)0x0) {
    return;
  }
  if ((((_DAT_00f9e2e0 == 0xffffffff) ||
       (puVar4 = g_pEntityList + (_DAT_00f9e2e0 & 0xfff) * 0x10, puVar4 == (undefined *)0xfffffffc))
      || (*(uint *)(puVar4 + 8) != _DAT_00f9e2e0 >> 0xc)) ||
     (param_2 != *(CBaseEntity **)(puVar4 + 4))) {
    ApplyMultiDamage();
    local_20 = (CBaseEntity *)0x0;
    uVar2 = *(uint *)(param_1 + 0x38);
    if (((uVar2 == 0xffffffff) ||
        (puVar4 = g_pEntityList + (uVar2 & 0xfff) * 0x10, puVar4 == (undefined *)0xfffffffc)) ||
       (*(uint *)(puVar4 + 8) != uVar2 >> 0xc)) {
      uVar2 = *(uint *)(param_1 + 0x34);
      if (uVar2 != 0xffffffff) goto LAB_004c81fc;
LAB_004c821c:
      local_24 = (CBaseEntity *)0x0;
      uVar2 = *(uint *)(param_1 + 0x30);
    }
    else {
      local_20 = *(CBaseEntity **)(puVar4 + 4);
      uVar2 = *(uint *)(param_1 + 0x34);
      if (uVar2 == 0xffffffff) goto LAB_004c821c;
LAB_004c81fc:
      puVar4 = g_pEntityList + (uVar2 & 0xfff) * 0x10;
      if ((puVar4 == (undefined *)0xfffffffc) || (*(uint *)(puVar4 + 8) != uVar2 >> 0xc))
      goto LAB_004c821c;
      local_24 = *(CBaseEntity **)(puVar4 + 4);
      uVar2 = *(uint *)(param_1 + 0x30);
    }
    pCVar5 = (CBaseEntity *)0x0;
    if (uVar2 != 0xffffffff) {
      pCVar5 = (CBaseEntity *)0x0;
      puVar4 = g_pEntityList + (uVar2 & 0xfff) * 0x10;
      if ((puVar4 != (undefined *)0xfffffffc) && (*(uint *)(puVar4 + 8) == uVar2 >> 0xc)) {
        pCVar5 = *(CBaseEntity **)(puVar4 + 4);
      }
    }
    CMultiDamage::Init((CMultiDamage *)&g_MultiDamage,param_2,pCVar5,local_24,local_20,
                       (Vector *)&vec3_origin,(Vector *)&vec3_origin,(Vector *)&vec3_origin,0.0,
                       *(int *)(param_1 + 0x48),*(int *)(param_1 + 0x4c));
  }
  _DAT_00f9e2c8 = _DAT_00f9e2c8 | *(uint *)(param_1 + 0x48);
  _DAT_00f9e2bc = *(float *)(param_1 + 0x3c) + _DAT_00f9e2bc;
  DAT_00f9e284 = *(float *)(param_1 + 4) + DAT_00f9e284;
  DAT_00f9e288 = *(float *)(param_1 + 8) + DAT_00f9e288;
  g_MultiDamage = *(float *)param_1 + g_MultiDamage;
  DAT_00f9e290 = *(float *)(param_1 + 0x10);
  DAT_00f9e294 = *(float *)(param_1 + 0x14);
  DAT_00f9e28c = *(float *)(param_1 + 0xc);
  _DAT_00f9e2a8 = *(undefined4 *)(param_1 + 0x28);
  _DAT_00f9e2a4 = *(undefined4 *)(param_1 + 0x24);
  _DAT_00f9e2ac = *(undefined4 *)(param_1 + 0x2c);
  _DAT_00f9e2a0 = *(undefined4 *)(param_1 + 0x20);
  _DAT_00f9e298 = *(undefined4 *)(param_1 + 0x18);
  _DAT_00f9e29c = *(undefined4 *)(param_1 + 0x1c);
  fVar6 = *(float *)(param_1 + 0x40);
  if (*(float *)(param_1 + 0x40) <= _DAT_00f9e2c0) {
    fVar6 = _DAT_00f9e2c0;
  }
  _DAT_00f9e2d4 = *(undefined4 *)(param_1 + 0x54);
  _DAT_00f9e2c0 = fVar6;
  cVar1 = (**(code **)(*g_pGameRules + 0x50))(g_pGameRules,*(undefined4 *)(param_1 + 0x48));
  fVar6 = vec3_origin;
  if (cVar1 != '\0') {
    return;
  }
  if (_DAT_00f9e2c8 == 0) {
    return;
  }
  if (((g_MultiDamage == vec3_origin) && (DAT_00f9e284 == DAT_01053d4c)) &&
     (DAT_00f9e288 == DAT_01053d50)) {
    if (9 < AddMultiDamage(CTakeDamageInfo_const&,CBaseEntity*)::warningCount + 1) {
      AddMultiDamage(CTakeDamageInfo_const&,CBaseEntity*)::warningCount =
           AddMultiDamage(CTakeDamageInfo_const&,CBaseEntity*)::warningCount + 1;
      return;
    }
LAB_004c8480:
    AddMultiDamage(CTakeDamageInfo_const&,CBaseEntity*)::warningCount =
         AddMultiDamage(CTakeDamageInfo_const&,CBaseEntity*)::warningCount + 1;
    iVar3 = AddMultiDamage(CTakeDamageInfo_const&,CBaseEntity*)::warningCount;
    if (DAT_00f9e288 == DAT_01053d50) {
      Warning("AddMultiDamage:  g_MultiDamage.GetDamageForce() == vec3_origin\n");
      iVar3 = AddMultiDamage(CTakeDamageInfo_const&,CBaseEntity*)::warningCount;
    }
  }
  else {
    if (vec3_origin != DAT_00f9e28c) {
      return;
    }
    if (DAT_01053d4c != DAT_00f9e290) {
      return;
    }
    if (DAT_01053d50 != DAT_00f9e294) {
      return;
    }
    iVar3 = AddMultiDamage(CTakeDamageInfo_const&,CBaseEntity*)::warningCount + 1;
    if (9 < iVar3) {
      AddMultiDamage(CTakeDamageInfo_const&,CBaseEntity*)::warningCount = iVar3;
      return;
    }
    fVar7 = DAT_01053d4c;
    fVar8 = DAT_01053d50;
    if (g_MultiDamage != vec3_origin) goto LAB_004c8520;
    if (DAT_01053d4c == DAT_00f9e284) goto LAB_004c8480;
  }
  AddMultiDamage(CTakeDamageInfo_const&,CBaseEntity*)::warningCount = iVar3;
  fVar7 = DAT_00f9e290;
  fVar8 = DAT_00f9e294;
  iVar3 = AddMultiDamage(CTakeDamageInfo_const&,CBaseEntity*)::warningCount;
  if (fVar6 != DAT_00f9e28c) {
    return;
  }
LAB_004c8520:
  AddMultiDamage(CTakeDamageInfo_const&,CBaseEntity*)::warningCount = iVar3;
  if ((fVar7 == DAT_01053d4c) && (fVar8 == DAT_01053d50)) {
    Warning();
    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)