L L4D2node

CNetPropManager::SearchDataMap

0x0074ae70 · 1297 bytes · __thiscall

_ZNK15CNetPropManager13SearchDataMapEP9datamap_tPKc

Decompiled

undefined (3 params)

/* CNetPropManager::SearchDataMap(datamap_t*, char const*) const */

int __thiscall
CNetPropManager::SearchDataMap(CNetPropManager *this,datamap_t *param_1,char *param_2)

{
  char *pcVar1;
  int *piVar2;
  int *piVar3;
  int *piVar4;
  int *piVar5;
  int *piVar6;
  int *piVar7;
  int *piVar8;
  int *piVar9;
  datamap_t *pdVar10;
  int iVar11;
  int iVar12;
  int iVar13;
  int local_58;
  int local_54;
  int local_50;
  int local_4c;
  int local_48;
  int local_44;
  int local_2c;
  int local_24;
  
  do {
    if (param_1 == (datamap_t *)0x0) {
      return 0;
    }
    if (0 < *(int *)(param_1 + 4)) {
      local_44 = 0;
      do {
        iVar13 = local_44 * 0x40;
        pcVar1 = *(char **)(*(int *)param_1 + 4 + iVar13);
        if (pcVar1 != (char *)0x0) {
          iVar11 = _V_strcmp(param_2,pcVar1);
          if (iVar11 == 0) {
            return *(int *)param_1 + iVar13;
          }
          for (piVar2 = *(int **)(*(int *)param_1 + 0x20 + iVar13); piVar2 != (int *)0x0;
              piVar2 = (int *)piVar2[3]) {
            if (0 < piVar2[1]) {
              local_48 = 0;
              do {
                iVar13 = local_48 * 0x40;
                pcVar1 = *(char **)(*piVar2 + 4 + iVar13);
                if (pcVar1 != (char *)0x0) {
                  iVar11 = _V_strcmp(param_2,pcVar1);
                  if (iVar11 == 0) {
                    if (iVar13 + *piVar2 != 0) {
                      return iVar13 + *piVar2;
                    }
                    goto LAB_0074b2f7;
                  }
                  for (piVar3 = *(int **)(*piVar2 + 0x20 + iVar13); piVar3 != (int *)0x0;
                      piVar3 = (int *)piVar3[3]) {
                    if (0 < piVar3[1]) {
                      local_4c = 0;
                      do {
                        iVar13 = local_4c * 0x40;
                        pcVar1 = *(char **)(*piVar3 + 4 + iVar13);
                        if (pcVar1 != (char *)0x0) {
                          iVar11 = _V_strcmp(param_2,pcVar1);
                          if (iVar11 == 0) {
                            if (iVar13 + *piVar3 != 0) {
                              return iVar13 + *piVar3;
                            }
                            goto LAB_0074b353;
                          }
                          for (piVar4 = *(int **)(*piVar3 + 0x20 + iVar13); piVar4 != (int *)0x0;
                              piVar4 = (int *)piVar4[3]) {
                            if (0 < piVar4[1]) {
                              local_50 = 0;
                              do {
                                iVar13 = local_50 * 0x40;
                                pcVar1 = *(char **)(*piVar4 + 4 + iVar13);
                                if (pcVar1 != (char *)0x0) {
                                  iVar11 = _V_strcmp(param_2,pcVar1);
                                  if (iVar11 == 0) {
                                    if (iVar13 + *piVar4 != 0) {
                                      return iVar13 + *piVar4;
                                    }
                                    goto LAB_0074b32f;
                                  }
                                  for (piVar5 = *(int **)(*piVar4 + 0x20 + iVar13);
                                      piVar5 != (int *)0x0; piVar5 = (int *)piVar5[3]) {
                                    if (0 < piVar5[1]) {
                                      local_54 = 0;
                                      do {
                                        iVar13 = local_54 * 0x40;
                                        pcVar1 = *(char **)(*piVar5 + 4 + iVar13);
                                        if (pcVar1 != (char *)0x0) {
                                          iVar11 = _V_strcmp(param_2,pcVar1);
                                          if (iVar11 == 0) {
                                            if (iVar13 + *piVar5 != 0) {
                                              return iVar13 + *piVar5;
                                            }
                                            goto LAB_0074b2b2;
                                          }
                                          for (piVar6 = *(int **)(*piVar5 + 0x20 + iVar13);
                                              piVar6 != (int *)0x0; piVar6 = (int *)piVar6[3]) {
                                            if (0 < piVar6[1]) {
                                              local_58 = 0;
LAB_0074b04c:
                                              iVar13 = local_58 * 0x40;
                                              pcVar1 = *(char **)(*piVar6 + 4 + iVar13);
                                              if (pcVar1 == (char *)0x0) goto LAB_0074b1f0;
                                              iVar11 = _V_strcmp(param_2,pcVar1);
                                              if (iVar11 != 0) goto code_r0x0074b07a;
                                              if (iVar13 + *piVar6 != 0) {
                                                return iVar13 + *piVar6;
                                              }
                                              break;
                                            }
LAB_0074b203:
                                          }
                                        }
                                        local_54 = local_54 + 1;
                                      } while (local_54 < piVar5[1]);
                                    }
                                  }
                                }
LAB_0074b2b2:
                                local_50 = local_50 + 1;
                              } while (local_50 < piVar4[1]);
                            }
                          }
                        }
LAB_0074b32f:
                        local_4c = local_4c + 1;
                      } while (local_4c < piVar3[1]);
                    }
                  }
                }
LAB_0074b353:
                local_48 = local_48 + 1;
              } while (local_48 < piVar2[1]);
            }
          }
        }
LAB_0074b2f7:
        local_44 = local_44 + 1;
      } while (local_44 < *(int *)(param_1 + 4));
    }
    param_1 = *(datamap_t **)(param_1 + 0xc);
  } while( true );
code_r0x0074b07a:
  for (piVar7 = *(int **)(*piVar6 + 0x20 + iVar13); piVar7 != (int *)0x0; piVar7 = (int *)piVar7[3])
  {
    if (0 < piVar7[1]) {
      local_2c = 0;
LAB_0074b0a3:
      iVar13 = local_2c * 0x40;
      pcVar1 = *(char **)(*piVar7 + 4 + iVar13);
      if (pcVar1 == (char *)0x0) goto LAB_0074b1cc;
      iVar11 = _V_strcmp(param_2,pcVar1);
      if (iVar11 != 0) goto code_r0x0074b0d1;
      if (iVar13 + *piVar7 != 0) {
        return iVar13 + *piVar7;
      }
      local_58 = local_58 + 1;
      if (piVar6[1] <= local_58) goto LAB_0074b203;
      goto LAB_0074b04c;
    }
LAB_0074b1df:
  }
LAB_0074b1f0:
  local_58 = local_58 + 1;
  if (piVar6[1] <= local_58) goto LAB_0074b203;
  goto LAB_0074b04c;
code_r0x0074b0d1:
  for (piVar8 = *(int **)(*piVar7 + 0x20 + iVar13); piVar8 != (int *)0x0; piVar8 = (int *)piVar8[3])
  {
    if (0 < piVar8[1]) {
      local_24 = 0;
      do {
        iVar13 = local_24 * 0x40;
        pcVar1 = *(char **)(*piVar8 + 4 + iVar13);
        if (pcVar1 != (char *)0x0) {
          iVar11 = _V_strcmp(param_2,pcVar1);
          if (iVar11 == 0) {
            if (iVar13 + *piVar8 != 0) {
              return iVar13 + *piVar8;
            }
            local_2c = local_2c + 1;
            if (piVar7[1] <= local_2c) goto LAB_0074b1df;
            goto LAB_0074b0a3;
          }
          for (piVar9 = *(int **)(*piVar8 + 0x20 + iVar13); piVar9 != (int *)0x0;
              piVar9 = (int *)piVar9[3]) {
            if (0 < piVar9[1]) {
              iVar13 = 0;
              do {
                iVar11 = iVar13 * 0x40;
                pcVar1 = *(char **)(*piVar9 + 4 + iVar11);
                if (pcVar1 != (char *)0x0) {
                  iVar12 = _V_strcmp(param_2,pcVar1);
                  if (iVar12 == 0) {
                    if (iVar11 + *piVar9 != 0) {
                      return iVar11 + *piVar9;
                    }
                    goto LAB_0074b1a8;
                  }
                  pdVar10 = *(datamap_t **)(*piVar9 + 0x20 + iVar11);
                  if ((pdVar10 != (datamap_t *)0x0) &&
                     (iVar11 = SearchDataMap(this,pdVar10,param_2), iVar11 != 0)) {
                    return iVar11;
                  }
                }
                iVar13 = iVar13 + 1;
              } while (iVar13 < piVar9[1]);
            }
          }
        }
LAB_0074b1a8:
        local_24 = local_24 + 1;
      } while (local_24 < piVar8[1]);
    }
  }
LAB_0074b1cc:
  local_2c = local_2c + 1;
  if (piVar7[1] <= local_2c) goto LAB_0074b1df;
  goto LAB_0074b0a3;
}

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)