L L4D2node

AI_CriteriaSet::InterceptWorldSetContexts

0x005a9e10 · 1010 bytes · __cdecl

_ZN14AI_CriteriaSet25InterceptWorldSetContextsEPS_S0_

Decompiled

undefined (2 params)

/* AI_CriteriaSet::InterceptWorldSetContexts(AI_CriteriaSet*, AI_CriteriaSet*) */

int AI_CriteriaSet::InterceptWorldSetContexts(AI_CriteriaSet *param_1,AI_CriteriaSet *param_2)

{
  undefined2 uVar1;
  undefined2 uVar2;
  undefined2 uVar3;
  undefined4 uVar4;
  undefined4 uVar5;
  undefined4 uVar6;
  short sVar7;
  void *pvVar8;
  char *pcVar9;
  undefined4 uVar10;
  char *pcVar11;
  int iVar12;
  int in_GS_OFFSET;
  byte bVar13;
  undefined4 uVar14;
  float local_a8;
  undefined2 local_92;
  code *local_90;
  void *local_8c;
  int local_88;
  undefined4 local_84;
  undefined2 local_80;
  short local_7e;
  undefined2 local_7c;
  undefined2 local_7a;
  undefined4 local_78;
  undefined4 local_74;
  char local_70 [80];
  int local_20;
  
  bVar13 = 0;
  iVar12 = *(int *)(param_1 + 0x1c);
  local_20 = *(int *)(in_GS_OFFSET + 0x14);
  if (iVar12 == 0) {
    iVar12 = 0;
  }
  else {
    if ((*(int *)(param_2 + 8) < iVar12) && (-1 < *(int *)(param_2 + 0xc))) {
      *(int *)(param_2 + 8) = iVar12;
      if (*(void **)(param_2 + 4) == (void *)0x0) {
        pvVar8 = malloc(iVar12 * 0x50);
        *(void **)(param_2 + 4) = pvVar8;
      }
      else {
        pvVar8 = realloc(*(void **)(param_2 + 4),iVar12 * 0x50);
        *(void **)(param_2 + 4) = pvVar8;
      }
    }
    local_84 = 0;
    local_90 = CritEntry_t::LessFunc;
    pcVar9 = local_70;
    for (iVar12 = 0x14; iVar12 != 0; iVar12 = iVar12 + -1) {
      pcVar9[0] = '\0';
      pcVar9[1] = '\0';
      pcVar9[2] = '\0';
      pcVar9[3] = '\0';
      pcVar9 = pcVar9 + ((uint)bVar13 * -2 + 1) * 4;
    }
    local_70[0] = 'w';
    local_80 = 0xffff;
    local_7e = 0;
    local_7c = 0xffff;
    local_7a = 0xffff;
    local_70[1] = 0x6f;
    local_70[2] = 0x72;
    local_70[3] = 0x6c;
    iVar12 = *(short *)(param_1 + 0x12) + 1;
    local_70[4] = 100;
    local_8c = (void *)0x0;
    local_88 = 0;
    local_78 = 0;
    local_74 = 0;
    if (0 < iVar12) {
      local_88 = iVar12;
      local_8c = malloc(iVar12 * 0x50);
    }
    sVar7 = CUtlRBTree<AI_CriteriaSet::CritEntry_t,short,bool(*)(AI_CriteriaSet::CritEntry_t_const&,AI_CriteriaSet::CritEntry_t_const&),CUtlMemory<UtlRBTreeNode_t<AI_CriteriaSet::CritEntry_t,short>,short>>
            ::FirstInorder((CUtlRBTree<AI_CriteriaSet::CritEntry_t,short,bool(*)(AI_CriteriaSet::CritEntry_t_const&,AI_CriteriaSet::CritEntry_t_const&),CUtlMemory<UtlRBTreeNode_t<AI_CriteriaSet::CritEntry_t,short>,short>>
                            *)param_1);
    iVar12 = (int)sVar7;
    sVar7 = *(short *)(param_1 + 0x12);
    if ((-1 < iVar12) && (iVar12 < sVar7)) {
      do {
                    /* try { // try from 005a9f5f to 005aa1ae has its CatchHandler @ 005aa219 */
        pcVar9 = (char *)GetName(param_1,iVar12);
        if (*pcVar9 == '$') {
          V_strncpy(local_70 + 5,pcVar9 + 1,0x4b);
          if (iVar12 < *(short *)(param_1 + 0x12)) {
            local_a8 = *(float *)(iVar12 * 0x50 + *(int *)(param_1 + 4) + 0x4c);
          }
          else {
            local_a8 = 1.0;
          }
          pcVar11 = (char *)GetValue(param_1,iVar12);
          AppendCriteria((AI_CriteriaSet *)&local_90,local_70,pcVar11,local_a8);
          if (iVar12 < *(short *)(param_1 + 0x12)) {
            local_a8 = *(float *)(iVar12 * 0x50 + *(int *)(param_1 + 4) + 0x4c);
          }
          else {
            local_a8 = 1.0;
          }
          pcVar11 = (char *)GetValue(param_1,iVar12);
          AppendCriteria(param_2,pcVar9 + 1,pcVar11,local_a8);
          local_70[5] = 0;
        }
        else {
          if (iVar12 < *(short *)(param_1 + 0x12)) {
            uVar14 = *(undefined4 *)(iVar12 * 0x50 + *(int *)(param_1 + 4) + 0x4c);
            uVar10 = GetValue(param_1,iVar12);
            local_92 = *(undefined2 *)(iVar12 * 0x50 + *(int *)(param_1 + 4) + 8);
          }
          else {
            uVar10 = GetValue(param_1,iVar12);
            uVar14 = 0x3f800000;
            local_92 = 0xffff;
          }
          AppendCriteria((AI_CriteriaSet *)&local_90,&local_92,uVar10,uVar14);
        }
        sVar7 = CUtlRBTree<AI_CriteriaSet::CritEntry_t,short,bool(*)(AI_CriteriaSet::CritEntry_t_const&,AI_CriteriaSet::CritEntry_t_const&),CUtlMemory<UtlRBTreeNode_t<AI_CriteriaSet::CritEntry_t,short>,short>>
                ::NextInorder((CUtlRBTree<AI_CriteriaSet::CritEntry_t,short,bool(*)(AI_CriteriaSet::CritEntry_t_const&,AI_CriteriaSet::CritEntry_t_const&),CUtlMemory<UtlRBTreeNode_t<AI_CriteriaSet::CritEntry_t,short>,short>>
                               *)param_1,(short)iVar12);
        iVar12 = (int)sVar7;
        sVar7 = *(short *)(param_1 + 0x12);
      } while ((-1 < iVar12) && (iVar12 < sVar7));
    }
    uVar14 = *(undefined4 *)(param_1 + 0xc);
    *(undefined4 *)(param_1 + 0x1c) = 0;
    uVar10 = *(undefined4 *)(param_1 + 4);
    *(undefined4 *)(param_1 + 0xc) = local_84;
    uVar4 = *(undefined4 *)(param_1 + 8);
    *(void **)(param_1 + 4) = local_8c;
    uVar5 = *(undefined4 *)param_1;
    *(int *)(param_1 + 8) = local_88;
    uVar1 = *(undefined2 *)(param_1 + 0x10);
    *(code **)param_1 = local_90;
    uVar2 = *(undefined2 *)(param_1 + 0x14);
    *(undefined2 *)(param_1 + 0x10) = local_80;
    *(short *)(param_1 + 0x12) = local_7e;
    uVar6 = *(undefined4 *)(param_1 + 0x18);
    *(undefined2 *)(param_1 + 0x14) = local_7c;
    uVar3 = *(undefined2 *)(param_1 + 0x16);
    *(undefined4 *)(param_1 + 0x18) = local_78;
    *(undefined2 *)(param_1 + 0x16) = local_7a;
    iVar12 = (int)*(short *)(param_2 + 0x12);
    local_90 = (code *)uVar5;
    local_8c = (void *)uVar10;
    local_88 = uVar4;
    local_84 = uVar14;
    local_80 = uVar1;
    local_7e = sVar7;
    local_7c = uVar2;
    local_7a = uVar3;
    local_78 = uVar6;
    CUtlRBTree<AI_CriteriaSet::CritEntry_t,short,bool(*)(AI_CriteriaSet::CritEntry_t_const&,AI_CriteriaSet::CritEntry_t_const&),CUtlMemory<UtlRBTreeNode_t<AI_CriteriaSet::CritEntry_t,short>,short>>
    ::RemoveAll((CUtlRBTree<AI_CriteriaSet::CritEntry_t,short,bool(*)(AI_CriteriaSet::CritEntry_t_const&,AI_CriteriaSet::CritEntry_t_const&),CUtlMemory<UtlRBTreeNode_t<AI_CriteriaSet::CritEntry_t,short>,short>>
                 *)&local_90);
    local_7c = 0xffff;
    CUtlMemory<UtlRBTreeNode_t<AI_CriteriaSet::CritEntry_t,short>,short>::Purge
              ((CUtlMemory<UtlRBTreeNode_t<AI_CriteriaSet::CritEntry_t,short>,short> *)&local_8c);
    local_7a = 0xffff;
    CUtlMemory<UtlRBTreeNode_t<AI_CriteriaSet::CritEntry_t,short>,short>::Purge
              ((CUtlMemory<UtlRBTreeNode_t<AI_CriteriaSet::CritEntry_t,short>,short> *)&local_8c);
  }
  if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {
                    /* WARNING: Subroutine does not return */
    __stack_chk_fail();
  }
  return iVar12;
}

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)