L L4D2node

CHLTVServer::InstallStringTables

0x00171520 · 371 bytes · __thiscall

_ZN11CHLTVServer19InstallStringTablesEv

Decompiled

undefined (1 param)

/* CHLTVServer::InstallStringTables() */

void __thiscall CHLTVServer::InstallStringTables(CHLTVServer *this)

{
  code *pcVar1;
  undefined1 uVar2;
  int iVar3;
  CNetworkStringTable *this_00;
  undefined4 uVar4;
  undefined4 uVar5;
  undefined4 uVar6;
  undefined4 uVar7;
  CNetworkStringTable *this_01;
  int iVar8;
  
  iVar3 = (**(code **)(**(int **)(*(int *)(this + 0x51b4) + 0xbc) + 0x18))
                    (*(int **)(*(int *)(this + 0x51b4) + 0xbc));
  *(CNetworkStringTableContainer **)(this + 0xc0) = (CNetworkStringTableContainer *)(this + 0x63bc);
  CNetworkStringTableContainer::AllowCreation((CNetworkStringTableContainer *)(this + 0x63bc),true);
  CNetworkStringTableContainer::EnableRollback(*(CNetworkStringTableContainer **)(this + 0xc0),true)
  ;
  if (0 < iVar3) {
    iVar8 = 0;
    do {
      while (this_00 = (CNetworkStringTable *)
                       (**(code **)(**(int **)(*(int *)(this + 0x51b4) + 0xbc) + 0x14))
                                 (*(int **)(*(int *)(this + 0x51b4) + 0xbc),iVar8),
            this_00 == (CNetworkStringTable *)0x0) {
LAB_001715a6:
        iVar8 = iVar8 + 1;
        if (iVar8 == iVar3) goto LAB_00171678;
      }
      pcVar1 = *(code **)(**(int **)(this + 0xc0) + 8);
      uVar2 = CNetworkStringTable::IsUsingDictionary(this_00);
      uVar4 = CNetworkStringTable::GetUserDataSizeBits(this_00);
      uVar5 = CNetworkStringTable::GetUserDataSize(this_00);
      uVar6 = (**(code **)(*(int *)this_00 + 0x14))(this_00);
      uVar7 = (**(code **)(*(int *)this_00 + 8))(this_00);
      this_01 = (CNetworkStringTable *)
                (*pcVar1)(*(undefined4 *)(this + 0xc0),uVar7,uVar6,uVar5,uVar4,uVar2);
      if (this_01 != (CNetworkStringTable *)0x0) {
        CNetworkStringTable::CopyStringTable(this_01,this_00);
        CNetworkStringTable::SetMirrorTable(this_00,(INetworkStringTable *)this_01);
        goto LAB_001715a6;
      }
      iVar8 = iVar8 + 1;
      uVar4 = (**(code **)(*(int *)this_00 + 8))(this_00);
      DevMsg("SV_InstallHLTVStringTableMirrors! Missing client table \"%s\".\n ",uVar4);
    } while (iVar8 != iVar3);
  }
LAB_00171678:
  CNetworkStringTableContainer::AllowCreation(*(CNetworkStringTableContainer **)(this + 0xc0),false)
  ;
  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)