L L4D2node

CSentence::operator=

0x000e0420 · 442 bytes · __thiscall

_ZN9CSentenceaSERKS_

Decompiled

undefined (2 params)

/* CSentence::TEMPNAMEPLACEHOLDERVALUE(CSentence const&) */

CSentence * __thiscall CSentence::operator=(CSentence *this,CSentence *param_1)

{
  undefined4 *puVar1;
  CWordTag *pCVar2;
  CWordTag *this_00;
  char *pcVar3;
  int iVar4;
  int iVar5;
  int iVar6;
  CWordTag *local_38;
  undefined4 local_34;
  undefined4 local_30;
  undefined4 local_2c;
  undefined4 local_28;
  undefined4 local_24;
  void *local_20;
  
  iVar4 = 0;
  Reset(this);
  if (0 < *(int *)(param_1 + 0x10)) {
    do {
      pCVar2 = *(CWordTag **)(*(int *)(param_1 + 4) + iVar4 * 4);
      this_00 = operator_new(0x2c);
                    /* try { // try from 000e0471 to 000e0475 has its CatchHandler @ 000e05da */
      CWordTag::CWordTag(this_00,pCVar2);
      iVar4 = iVar4 + 1;
      local_38 = this_00;
      CUtlVector<CWordTag*,CUtlMemory<CWordTag*,int>>::InsertBefore
                ((CUtlVector<CWordTag*,CUtlMemory<CWordTag*,int>> *)(this + 4),*(int *)(this + 0x10)
                 ,&local_38);
    } while (iVar4 < *(int *)(param_1 + 0x10));
  }
  pcVar3 = "";
  if (*(char **)param_1 != (char *)0x0) {
    pcVar3 = *(char **)param_1;
  }
  iVar5 = 0;
  SetText(this,pcVar3);
  *(undefined4 *)(this + 0x2c) = *(undefined4 *)(param_1 + 0x2c);
  iVar4 = *(int *)(param_1 + 0x3c);
  if (0 < iVar4) {
    do {
      iVar6 = iVar5 + 1;
      puVar1 = (undefined4 *)(*(int *)(param_1 + 0x30) + iVar5 * 0xc);
      local_34 = *puVar1;
      local_30 = puVar1[1];
      local_2c = puVar1[2];
      CUtlVector<CEmphasisSample,CUtlMemory<CEmphasisSample,int>>::InsertBefore
                ((CUtlVector<CEmphasisSample,CUtlMemory<CEmphasisSample,int>> *)(this + 0x30),
                 *(int *)(this + 0x3c),(CEmphasisSample *)&local_34);
      iVar5 = iVar6;
    } while (iVar6 != iVar4);
  }
  this[0x4b] = (CSentence)((byte)param_1[0x4b] & 1);
  iVar4 = *(int *)(param_1 + 0x24);
  if (0 < iVar4) {
    iVar5 = 0;
    do {
      puVar1 = *(undefined4 **)(*(int *)(param_1 + 0x18) + iVar5 * 4);
      local_20 = (void *)0x0;
      local_28 = 0;
      local_24 = 0;
      local_34 = *puVar1;
      local_30 = puVar1[1];
      local_2c = puVar1[2];
                    /* try { // try from 000e058d to 000e0591 has its CatchHandler @ 000e05ec */
      AddRuntimePhoneme(this,(CPhonemeTag *)&local_34);
      if (local_20 != (void *)0x0) {
        operator_delete__(local_20);
      }
      iVar5 = iVar5 + 1;
    } while (iVar5 != iVar4);
  }
  this[0x4a] = (CSentence)((byte)param_1[0x4a] & 1);
  this[0x49] = (CSentence)((byte)param_1[0x49] & 1);
  *(undefined4 *)(this + 0x44) = *(undefined4 *)(param_1 + 0x44);
  this[0x48] = (CSentence)((byte)param_1[0x48] & 1);
  return this;
}

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)