L L4D2node

CBaseCombatCharacter::FixupBurningServerRagdoll

0x005f1c50 · 468 bytes · __thiscall

_ZN20CBaseCombatCharacter25FixupBurningServerRagdollEP11CBaseEntity

Decompiled

undefined (2 params)

/* CBaseCombatCharacter::FixupBurningServerRagdoll(CBaseEntity*) */

void __thiscall
CBaseCombatCharacter::FixupBurningServerRagdoll(CBaseCombatCharacter *this,CBaseEntity *param_1)

{
  CBaseCombatCharacter CVar1;
  CBaseCombatCharacter CVar2;
  CBaseCombatCharacter CVar3;
  uint uVar4;
  CBaseEdict *pCVar5;
  CBaseEntity *this_00;
  int iVar6;
  undefined *puVar7;
  
  if (((byte)this[0x153] & 8) != 0) {
    uVar4 = *(uint *)(this + 0x224);
    if ((((uVar4 != 0xffffffff) &&
         (puVar7 = g_pEntityList + (uVar4 & 0xfff) * 0x10, puVar7 != (undefined *)0xfffffffc)) &&
        (*(uint *)(puVar7 + 8) == uVar4 >> 0xc)) && (*(int *)(puVar7 + 4) != 0)) {
      this_00 = (CBaseEntity *)
                __dynamic_cast(*(int *)(puVar7 + 4),&CBaseEntity::typeinfo,&CEntityFlame::typeinfo,0
                              );
      if (this_00 != (CBaseEntity *)0x0) {
        CBaseEntity::SetEffectEntity((CBaseEntity *)this,(CBaseEntity *)0x0);
        CBaseEntity::AddFlag(param_1,0x8000000);
        if (((byte)param_1[0x14d] & 8) != 0) {
          CBaseEntity::CalcAbsolutePosition(param_1);
        }
        CBaseEntity::SetAbsOrigin(this_00,(Vector *)(param_1 + 0x2e0));
        CEntityFlame::AttachToEntity((CEntityFlame *)this_00,param_1);
        *(uint *)(this_00 + 0x14c) = *(uint *)(this_00 + 0x14c) | 0x80;
        CBaseEntity::DispatchUpdateTransmitState(this_00);
        CBaseEntity::SetEffectEntity(param_1,this_00);
        CVar1 = this[0x124];
        CVar2 = this[0x125];
        CVar3 = this[0x126];
        if (CVar1 != *(CBaseCombatCharacter *)(param_1 + 0x124)) {
          if (param_1[0x6c] == (CBaseEntity)0x0) {
            pCVar5 = *(CBaseEdict **)(param_1 + 0x30);
            if (pCVar5 != (CBaseEdict *)0x0) {
              *(uint *)pCVar5 = *(uint *)pCVar5 | 0x101;
              iVar6 = CBaseEdict::GetChangeAccessor(pCVar5);
              *(undefined2 *)(iVar6 + 2) = 0;
            }
          }
          else {
            param_1[0x70] = (CBaseEntity)((byte)param_1[0x70] | 1);
          }
          *(CBaseCombatCharacter *)(param_1 + 0x124) = CVar1;
        }
        if (CVar2 != *(CBaseCombatCharacter *)(param_1 + 0x125)) {
          if (param_1[0x6c] == (CBaseEntity)0x0) {
            pCVar5 = *(CBaseEdict **)(param_1 + 0x30);
            if (pCVar5 != (CBaseEdict *)0x0) {
              *(uint *)pCVar5 = *(uint *)pCVar5 | 0x101;
              iVar6 = CBaseEdict::GetChangeAccessor(pCVar5);
              *(undefined2 *)(iVar6 + 2) = 0;
            }
          }
          else {
            param_1[0x70] = (CBaseEntity)((byte)param_1[0x70] | 1);
          }
          *(CBaseCombatCharacter *)(param_1 + 0x125) = CVar2;
        }
        if (CVar3 != *(CBaseCombatCharacter *)(param_1 + 0x126)) {
          if (param_1[0x6c] == (CBaseEntity)0x0) {
            pCVar5 = *(CBaseEdict **)(param_1 + 0x30);
            if (pCVar5 != (CBaseEdict *)0x0) {
              *(uint *)pCVar5 = *(uint *)pCVar5 | 0x101;
              iVar6 = CBaseEdict::GetChangeAccessor(pCVar5);
              *(undefined2 *)(iVar6 + 2) = 0;
            }
          }
          else {
            param_1[0x70] = (CBaseEntity)((byte)param_1[0x70] | 1);
          }
          *(CBaseCombatCharacter *)(param_1 + 0x126) = CVar3;
          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)