L L4D2node

CNavArea::SpliceEdit

0x00705340 · 1820 bytes · __thiscall

_ZN8CNavArea10SpliceEditEPS_

Decompiled

undefined (2 params)

/* CNavArea::SpliceEdit(CNavArea*) */

undefined4 __thiscall CNavArea::SpliceEdit(CNavArea *this,CNavArea *param_1)

{
  float fVar1;
  float fVar2;
  undefined4 uVar3;
  longdouble lVar4;
  float fVar5;
  float fVar6;
  float fVar7;
  float fVar8;
  CNavArea *local_40;
  float local_3c;
  float local_38;
  float local_34;
  float local_30;
  float local_2c;
  float local_28;
  float local_24;
  float local_20;
  float local_1c;
  float local_18;
  float local_14;
  float local_10;
  
  local_40 = (CNavArea *)0x0;
  fVar6 = *(float *)(this + 4);
  fVar5 = *(float *)(param_1 + 0x10);
  if (fVar6 <= fVar5) {
    fVar8 = *(float *)(this + 0x10);
    fVar7 = *(float *)(param_1 + 4);
    if (fVar7 <= fVar8) {
      fVar1 = *(float *)(this + 8);
      fVar2 = *(float *)(param_1 + 0x14);
      if (fVar2 < fVar1) {
        if (fVar6 <= fVar7) {
          fVar6 = fVar7;
        }
        if (fVar8 <= fVar5) {
          fVar5 = fVar8;
        }
        local_3c = fVar6;
        local_38 = fVar2;
        lVar4 = (longdouble)GetZ(param_1,fVar6,fVar2);
        local_34 = (float)lVar4;
        local_24 = fVar5;
        local_20 = fVar1;
        lVar4 = (longdouble)GetZ(this,fVar5,fVar1);
        local_1c = (float)lVar4;
        local_30 = fVar5;
        local_2c = fVar2;
        lVar4 = (longdouble)GetZ(param_1,fVar5,fVar2);
        local_28 = (float)lVar4;
        local_18 = fVar6;
        local_14 = fVar1;
        lVar4 = (longdouble)GetZ(this,fVar6,fVar1);
        local_10 = (float)lVar4;
        local_40 = (CNavArea *)(**(code **)(*(int *)TheNavMesh + 0x14))(TheNavMesh);
        if (local_40 == (CNavArea *)0x0) goto LAB_00705a58;
        Build(local_40,(Vector *)&local_3c,(Vector *)&local_30,(Vector *)&local_24,
              (Vector *)&local_18);
        ConnectTo(this,local_40,0);
        ConnectTo(local_40,this,2);
        ConnectTo(param_1,local_40,2);
        ConnectTo(local_40,param_1,0);
      }
      else {
        fVar1 = *(float *)(param_1 + 8);
        fVar2 = *(float *)(this + 0x14);
        if (fVar1 <= fVar2) {
          return 0;
        }
        if (fVar6 <= fVar7) {
          fVar6 = fVar7;
        }
        if (fVar8 <= fVar5) {
          fVar5 = fVar8;
        }
        local_3c = fVar6;
        local_38 = fVar2;
        lVar4 = (longdouble)GetZ(this,fVar6,fVar2);
        local_34 = (float)lVar4;
        local_24 = fVar5;
        local_20 = fVar1;
        lVar4 = (longdouble)GetZ(param_1,fVar5,fVar1);
        local_1c = (float)lVar4;
        local_30 = fVar5;
        local_2c = fVar2;
        lVar4 = (longdouble)GetZ(this,fVar5,fVar2);
        local_28 = (float)lVar4;
        local_18 = fVar6;
        local_14 = fVar1;
        lVar4 = (longdouble)GetZ(param_1,fVar6,fVar1);
        local_10 = (float)lVar4;
        local_40 = (CNavArea *)(**(code **)(*(int *)TheNavMesh + 0x14))(TheNavMesh);
        if (local_40 == (CNavArea *)0x0) {
LAB_00705a58:
          Warning("SpliceEdit: Out of memory.\n");
          return 0;
        }
        Build(local_40,(Vector *)&local_3c,(Vector *)&local_30,(Vector *)&local_24,
              (Vector *)&local_18);
        ConnectTo(this,local_40,2);
        ConnectTo(local_40,this,0);
        ConnectTo(param_1,local_40,0);
        ConnectTo(local_40,param_1,2);
      }
    }
    else {
      fVar6 = *(float *)(param_1 + 8);
      if (*(float *)(param_1 + 8) <= *(float *)(this + 8)) {
        fVar6 = *(float *)(this + 8);
      }
      fVar5 = *(float *)(param_1 + 0x14);
      if (*(float *)(this + 0x14) <= *(float *)(param_1 + 0x14)) {
        fVar5 = *(float *)(this + 0x14);
      }
      local_3c = fVar8;
      local_38 = fVar6;
      lVar4 = (longdouble)GetZ(this,fVar8,fVar6);
      local_34 = (float)lVar4;
      local_24 = fVar7;
      local_20 = fVar5;
      lVar4 = (longdouble)GetZ(param_1,fVar7,fVar5);
      local_1c = (float)lVar4;
      local_30 = fVar7;
      local_2c = fVar6;
      lVar4 = (longdouble)GetZ(param_1,fVar7,fVar6);
      local_28 = (float)lVar4;
      local_18 = fVar8;
      local_14 = fVar5;
      lVar4 = (longdouble)GetZ(this,fVar8,fVar5);
      local_10 = (float)lVar4;
      local_40 = (CNavArea *)(**(code **)(*(int *)TheNavMesh + 0x14))(TheNavMesh);
      if (local_40 == (CNavArea *)0x0) goto LAB_00705a58;
      Build(local_40,(Vector *)&local_3c,(Vector *)&local_30,(Vector *)&local_24,(Vector *)&local_18
           );
      ConnectTo(this,local_40,1);
      ConnectTo(local_40,this,3);
      ConnectTo(param_1,local_40,3);
      ConnectTo(local_40,param_1,1);
    }
  }
  else {
    fVar8 = *(float *)(param_1 + 8);
    if (*(float *)(param_1 + 8) <= *(float *)(this + 8)) {
      fVar8 = *(float *)(this + 8);
    }
    fVar7 = *(float *)(param_1 + 0x14);
    if (*(float *)(this + 0x14) <= *(float *)(param_1 + 0x14)) {
      fVar7 = *(float *)(this + 0x14);
    }
    local_3c = fVar5;
    local_38 = fVar8;
    lVar4 = (longdouble)GetZ(param_1,fVar5,fVar8);
    local_34 = (float)lVar4;
    local_24 = fVar6;
    local_20 = fVar7;
    lVar4 = (longdouble)GetZ(this,fVar6,fVar7);
    local_1c = (float)lVar4;
    local_30 = fVar6;
    local_2c = fVar8;
    lVar4 = (longdouble)GetZ(this,fVar6,fVar8);
    local_28 = (float)lVar4;
    local_18 = fVar5;
    local_14 = fVar7;
    lVar4 = (longdouble)GetZ(param_1,fVar5,fVar7);
    local_10 = (float)lVar4;
    local_40 = (CNavArea *)(**(code **)(*(int *)TheNavMesh + 0x14))(TheNavMesh);
    if (local_40 == (CNavArea *)0x0) goto LAB_00705a58;
    Build(local_40,(Vector *)&local_3c,(Vector *)&local_30,(Vector *)&local_24,(Vector *)&local_18);
    ConnectTo(this,local_40,3);
    ConnectTo(local_40,this,1);
    ConnectTo(param_1,local_40,1);
    ConnectTo(local_40,param_1,3);
  }
  (**(code **)(*(int *)local_40 + 0x78))(local_40,this,param_1);
  uVar3 = CUtlVector<CNavArea*,CUtlMemory<CNavArea*,int>>::InsertBefore
                    ((CUtlVector<CNavArea*,CUtlMemory<CNavArea*,int>> *)&TheNavAreas,DAT_00fe6000,
                     &local_40);
  *(undefined4 *)(local_40 + 0x90) = uVar3;
  CNavMesh::AddNavArea(TheNavMesh,local_40);
  (**(code **)(*(int *)TheNavMesh + 0x6c))(TheNavMesh,local_40);
  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)