L L4D2node

HidingSpot::Load

0x0073f1a0 · 918 bytes · __cdecl

_ZN10HidingSpot4LoadER10CUtlBufferj

Decompiled

undefined (2 params)

/* HidingSpot::Load(CUtlBuffer&, unsigned int) */

void HidingSpot::Load(CUtlBuffer *param_1,uint param_2)

{
  byte bVar1;
  char cVar2;
  int iVar3;
  undefined4 *puVar4;
  CUtlBuffer CVar5;
  undefined4 uVar6;
  undefined4 local_14;
  undefined4 local_10;
  
  if ((*(byte *)(param_2 + 0x15) & 1) == 0) {
    cVar2 = CUtlBuffer::CheckGet((CUtlBuffer *)param_2,4);
    uVar6 = 0;
    if (cVar2 == '\0') goto LAB_0073f1d9;
    if ((*(byte *)(param_2 + 0x34) & 1) == 0) {
      iVar3 = *(int *)(param_2 + 0xc);
      uVar6 = *(undefined4 *)(*(int *)param_2 + (iVar3 - *(int *)(param_2 + 0x20)));
    }
    else {
      puVar4 = (undefined4 *)
               ((*(int *)(param_2 + 0xc) - *(int *)(param_2 + 0x20)) + *(int *)param_2);
      if (puVar4 == (undefined4 *)0x0) {
        puVar4 = &local_14;
      }
      local_10 = local_14;
      local_10 = CONCAT31((int3)((uint)local_14 >> 8),*(undefined1 *)((int)puVar4 + 3));
      local_10._2_2_ = (undefined2)((uint)local_14 >> 0x10);
      local_10._0_2_ = CONCAT11(*(undefined1 *)((int)puVar4 + 2),*(undefined1 *)((int)puVar4 + 3));
      local_10._3_1_ = (undefined1)((uint)local_14 >> 0x18);
      local_10._0_3_ = CONCAT12(*(undefined1 *)((int)puVar4 + 1),(undefined2)local_10);
      local_10 = CONCAT13(*(undefined1 *)puVar4,(undefined3)local_10);
      _V_memcpy(&local_14,&local_10,4);
      iVar3 = *(int *)(param_2 + 0xc);
      uVar6 = local_14;
    }
    *(int *)(param_2 + 0xc) = iVar3 + 4;
    *(undefined4 *)(param_1 + 0x10) = uVar6;
    if ((*(byte *)(param_2 + 0x15) & 1) == 0) goto LAB_0073f308;
LAB_0073f1e6:
    local_14 = 0;
    CUtlBuffer::Scanf((CUtlBuffer *)param_2,"%f",&local_14);
    uVar6 = local_14;
LAB_0073f209:
    *(undefined4 *)(param_1 + 4) = uVar6;
    if ((*(byte *)(param_2 + 0x15) & 1) == 0) goto LAB_0073f390;
LAB_0073f218:
    local_14 = 0;
    CUtlBuffer::Scanf((CUtlBuffer *)param_2,"%f",&local_14);
    uVar6 = local_14;
LAB_0073f23b:
    *(undefined4 *)(param_1 + 8) = uVar6;
    if ((*(byte *)(param_2 + 0x15) & 1) == 0) goto LAB_0073f420;
LAB_0073f24a:
    local_14 = 0;
    CUtlBuffer::Scanf((CUtlBuffer *)param_2,"%f",&local_14);
    uVar6 = local_14;
  }
  else {
    local_14 = 0;
    CUtlBuffer::Scanf((CUtlBuffer *)param_2,"%u",&local_14);
    uVar6 = local_14;
LAB_0073f1d9:
    *(undefined4 *)(param_1 + 0x10) = uVar6;
    if ((*(byte *)(param_2 + 0x15) & 1) != 0) goto LAB_0073f1e6;
LAB_0073f308:
    cVar2 = CUtlBuffer::CheckGet((CUtlBuffer *)param_2,4);
    uVar6 = 0;
    if (cVar2 == '\0') goto LAB_0073f209;
    iVar3 = *(int *)(param_2 + 0xc);
    uVar6 = *(undefined4 *)(*(int *)param_2 + (iVar3 - *(int *)(param_2 + 0x20)));
    local_14 = uVar6;
    if ((*(byte *)(param_2 + 0x34) & 1) != 0) {
      local_14._3_1_ = (undefined1)((uint)uVar6 >> 0x18);
      local_14._2_1_ = (undefined1)((uint)uVar6 >> 0x10);
      local_10._0_2_ = CONCAT11(local_14._2_1_,local_14._3_1_);
      local_14._1_1_ = (undefined1)((uint)uVar6 >> 8);
      local_10._0_3_ = CONCAT12(local_14._1_1_,(undefined2)local_10);
      local_14._0_1_ = (undefined1)uVar6;
      local_10 = CONCAT13((undefined1)local_14,(undefined3)local_10);
      _V_memcpy(&local_14,&local_10,4);
      iVar3 = *(int *)(param_2 + 0xc);
    }
    *(int *)(param_2 + 0xc) = iVar3 + 4;
    *(undefined4 *)(param_1 + 4) = local_14;
    if ((*(byte *)(param_2 + 0x15) & 1) != 0) goto LAB_0073f218;
LAB_0073f390:
    cVar2 = CUtlBuffer::CheckGet((CUtlBuffer *)param_2,4);
    uVar6 = 0;
    if (cVar2 == '\0') goto LAB_0073f23b;
    iVar3 = *(int *)(param_2 + 0xc);
    uVar6 = *(undefined4 *)(*(int *)param_2 + (iVar3 - *(int *)(param_2 + 0x20)));
    local_14 = uVar6;
    if ((*(byte *)(param_2 + 0x34) & 1) != 0) {
      local_14._3_1_ = (undefined1)((uint)uVar6 >> 0x18);
      local_14._2_1_ = (undefined1)((uint)uVar6 >> 0x10);
      local_10._0_2_ = CONCAT11(local_14._2_1_,local_14._3_1_);
      local_14._1_1_ = (undefined1)((uint)uVar6 >> 8);
      local_10._0_3_ = CONCAT12(local_14._1_1_,(undefined2)local_10);
      local_14._0_1_ = (undefined1)uVar6;
      local_10 = CONCAT13((undefined1)local_14,(undefined3)local_10);
      _V_memcpy(&local_14,&local_10,4);
      iVar3 = *(int *)(param_2 + 0xc);
    }
    *(int *)(param_2 + 0xc) = iVar3 + 4;
    *(undefined4 *)(param_1 + 8) = local_14;
    if ((*(byte *)(param_2 + 0x15) & 1) != 0) goto LAB_0073f24a;
LAB_0073f420:
    cVar2 = CUtlBuffer::CheckGet((CUtlBuffer *)param_2,4);
    uVar6 = 0;
    if (cVar2 != '\0') {
      iVar3 = *(int *)(param_2 + 0xc);
      uVar6 = *(undefined4 *)(*(int *)param_2 + (iVar3 - *(int *)(param_2 + 0x20)));
      local_14 = uVar6;
      if ((*(byte *)(param_2 + 0x34) & 1) != 0) {
        local_14._3_1_ = (undefined1)((uint)uVar6 >> 0x18);
        local_14._2_1_ = (undefined1)((uint)uVar6 >> 0x10);
        local_10._0_2_ = CONCAT11(local_14._2_1_,local_14._3_1_);
        local_14._1_1_ = (undefined1)((uint)uVar6 >> 8);
        local_10._0_3_ = CONCAT12(local_14._1_1_,(undefined2)local_10);
        local_14._0_1_ = (undefined1)uVar6;
        local_10 = CONCAT13((undefined1)local_14,(undefined3)local_10);
        _V_memcpy(&local_14,&local_10,4);
        iVar3 = *(int *)(param_2 + 0xc);
      }
      *(int *)(param_2 + 0xc) = iVar3 + 4;
      *(undefined4 *)(param_1 + 0xc) = local_14;
      bVar1 = *(byte *)(param_2 + 0x15);
      goto joined_r0x0073f279;
    }
  }
  *(undefined4 *)(param_1 + 0xc) = uVar6;
  bVar1 = *(byte *)(param_2 + 0x15);
joined_r0x0073f279:
  if ((bVar1 & 1) == 0) {
    CVar5 = (CUtlBuffer)(bVar1 & 1);
    cVar2 = CUtlBuffer::CheckGet((CUtlBuffer *)param_2,1);
    if (cVar2 != '\0') {
      CVar5 = *(CUtlBuffer *)
               (*(int *)param_2 + (*(int *)(param_2 + 0xc) - *(int *)(param_2 + 0x20)));
      *(int *)(param_2 + 0xc) = *(int *)(param_2 + 0xc) + 1;
    }
  }
  else {
    local_10 = local_10 & 0xffffff00;
    CUtlBuffer::Scanf((CUtlBuffer *)param_2,"%u",&local_10);
    CVar5 = local_10._0_1_;
  }
  param_1[0x1c] = CVar5;
  if (m_nextID <= *(uint *)(param_1 + 0x10)) {
    m_nextID = *(uint *)(param_1 + 0x10) + 1;
  }
  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)