L L4D2node

ServerDemoPacket_BaseAnimating::ReadModifiedDataFromBuffer

0x00597010 · 633 bytes · __thiscall

_ZN30ServerDemoPacket_BaseAnimating26ReadModifiedDataFromBufferEP15CCircularBuffer

Decompiled

undefined (2 params)

/* ServerDemoPacket_BaseAnimating::ReadModifiedDataFromBuffer(CCircularBuffer*) */

void __thiscall
ServerDemoPacket_BaseAnimating::ReadModifiedDataFromBuffer
          (ServerDemoPacket_BaseAnimating *this,CCircularBuffer *param_1)

{
  uint uVar1;
  ServerDemoPacket_BaseAnimating *pSVar2;
  int iVar3;
  
  uVar1 = *(uint *)this;
  if ((uVar1 & 1) != 0) {
    CCircularBuffer::Read(param_1,this + 0xc,2);
    uVar1 = *(uint *)this;
  }
  if ((uVar1 & 2) != 0) {
    CCircularBuffer::Read(param_1,this + 0xe,2);
    uVar1 = *(uint *)this;
  }
  if ((uVar1 & 4) != 0) {
    CCircularBuffer::Read(param_1,this + 0x10,2);
    uVar1 = *(uint *)this;
  }
  if ((uVar1 & 8) != 0) {
    CCircularBuffer::Read(param_1,this + 0x12,1);
    uVar1 = *(uint *)this;
  }
  if ((uVar1 & 0x10) != 0) {
    CCircularBuffer::Read(param_1,this + 0x13,1);
    uVar1 = *(uint *)this;
  }
  if ((uVar1 & 0x20) != 0) {
    CCircularBuffer::Read(param_1,this + 0x14,1);
    uVar1 = *(uint *)this;
  }
  if ((uVar1 & 0x40) != 0) {
    CCircularBuffer::Read(param_1,this + 0x15,1);
    uVar1 = *(uint *)this;
  }
  if ((uVar1 & 0x80) != 0) {
    CCircularBuffer::Read(param_1,this + 0x18,4);
    uVar1 = *(uint *)this;
  }
  if ((uVar1 & 0x100) != 0) {
    CCircularBuffer::Read(param_1,this + 0x1c,4);
    uVar1 = *(uint *)this;
  }
  if ((uVar1 & 0x200) != 0) {
    CCircularBuffer::Read(param_1,this + 0x20,4);
    uVar1 = *(uint *)this;
  }
  if ((uVar1 & 0x100000) != 0) {
    ReadBoneList(this,param_1);
    uVar1 = *(uint *)this;
  }
  if ((uVar1 & 0x400) != 0) {
    CCircularBuffer::Read(param_1,this + 0x24,1);
  }
  iVar3 = 0;
  pSVar2 = this + 0x28;
  if (this[0x24] != (ServerDemoPacket_BaseAnimating)0x0) {
    do {
      while (uVar1 = 0x800 << ((byte)iVar3 & 0x1f),
            (*(uint *)(this + 4) & (int)uVar1 >> 0x1f) != 0 || (uVar1 & *(uint *)this) != 0) {
        iVar3 = iVar3 + 1;
        CCircularBuffer::Read(param_1,pSVar2,4);
        pSVar2 = pSVar2 + 4;
        if ((int)(uint)(byte)this[0x24] <= iVar3) {
          return;
        }
      }
      iVar3 = iVar3 + 1;
      pSVar2 = pSVar2 + 4;
    } while (iVar3 < (int)(uint)(byte)this[0x24]);
  }
  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)