L L4D2node

CNavArea::IsConnected

0x006fb950 · 238 bytes · __thiscall

_ZNK8CNavArea11IsConnectedEPKS_10NavDirType

Decompiled

undefined (3 params)

/* CNavArea::IsConnected(CNavArea const*, NavDirType) const */

undefined4 __thiscall CNavArea::IsConnected(CNavArea *this,CNavArea *param_1,int param_3)

{
  int *piVar1;
  int iVar2;
  int iVar3;
  
  if (param_1 != this) {
    if (param_3 == 4) {
      iVar2 = 0;
      do {
        piVar1 = *(int **)(this + iVar2 * 4 + 0x58);
        if (0 < *piVar1) {
          if (param_1 == (CNavArea *)piVar1[1]) {
            return 1;
          }
          iVar3 = 0;
          while (iVar3 = iVar3 + 1, iVar3 != *piVar1) {
            if (param_1 == (CNavArea *)piVar1[iVar3 * 2 + 1]) {
              return 1;
            }
          }
        }
        iVar2 = iVar2 + 1;
      } while (iVar2 != 4);
      piVar1 = *(int **)(this + 0x68);
      if (*piVar1 < 1) {
LAB_006fba1f:
        piVar1 = *(int **)(this + 0x6c);
        if (*piVar1 < 1) {
          return 0;
        }
        if (param_1 != *(CNavArea **)(piVar1[1] + 0x34)) {
          iVar2 = 0;
          do {
            if (iVar2 + 1 == *piVar1) {
              return 0;
            }
            iVar3 = iVar2 + 2;
            iVar2 = iVar2 + 1;
          } while (param_1 != *(CNavArea **)(piVar1[iVar3] + 0x34));
        }
      }
      else {
        iVar2 = piVar1[1];
        if ((((param_1 != *(CNavArea **)(iVar2 + 0x30)) && (param_1 != *(CNavArea **)(iVar2 + 0x24))
             ) && (param_1 != *(CNavArea **)(iVar2 + 0x28))) &&
           (param_1 != *(CNavArea **)(iVar2 + 0x2c))) {
          iVar2 = 0;
          do {
            if (iVar2 + 1 == *piVar1) goto LAB_006fba1f;
            iVar3 = piVar1[iVar2 + 2];
          } while (((param_1 != *(CNavArea **)(iVar3 + 0x30)) &&
                   (param_1 != *(CNavArea **)(iVar3 + 0x24))) &&
                  ((param_1 != *(CNavArea **)(iVar3 + 0x28) &&
                   (iVar2 = iVar2 + 1, param_1 != *(CNavArea **)(iVar3 + 0x2c)))));
        }
      }
    }
    else {
      piVar1 = *(int **)(this + param_3 * 4 + 0x58);
      if (*piVar1 < 1) {
        return 0;
      }
      if (param_1 != (CNavArea *)piVar1[1]) {
        iVar2 = 0;
        do {
          iVar2 = iVar2 + 1;
          if (iVar2 == *piVar1) {
            return 0;
          }
        } while (param_1 != (CNavArea *)piVar1[iVar2 * 2 + 1]);
      }
    }
  }
  return 1;
}

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)