L L4D2node

UTIL_CheckTeamVisibility

0x0042e170 · 641 bytes · __cdecl

_Z24UTIL_CheckTeamVisibilityRK6Vectorif

Decompiled

undefined (3 params)

/* UTIL_CheckTeamVisibility(Vector const&, int, float) */

int * UTIL_CheckTeamVisibility(Vector *param_1,int param_2,float param_3)

{
  code *pcVar1;
  char cVar2;
  int *piVar3;
  int iVar4;
  int iVar5;
  int *piVar6;
  int *piVar7;
  float fVar8;
  float fVar9;
  int iStack_124;
  float local_120;
  int local_11c [2];
  float local_114;
  int local_110;
  int local_10c;
  float local_108 [5];
  undefined1 *local_f4;
  float local_f0;
  float local_e8;
  float local_e4;
  float local_e0;
  undefined1 local_dc [16];
  float local_cc;
  float local_c8;
  float local_c4;
  float local_bc;
  float local_b8;
  float local_b4;
  undefined4 local_ac;
  undefined4 local_a8;
  undefined4 local_a4;
  undefined4 local_9c;
  undefined4 local_98;
  undefined4 local_94;
  undefined4 local_8c;
  undefined1 local_88;
  undefined1 local_87;
  undefined1 local_70 [12];
  undefined1 local_64 [32];
  float local_44;
  
  if (0 < *(int *)(gpGlobals + 0x14)) {
    iVar5 = 1;
    local_f0 = param_3 * param_3;
    piVar7 = local_11c;
    do {
      *piVar7 = iVar5;
      piVar7[-1] = 0x42e1c9;
      piVar3 = (int *)UTIL_PlayerByIndex(*piVar7);
      piVar6 = piVar7;
      if (piVar3 != (int *)0x0) {
        iVar4 = *piVar3;
        *piVar7 = (int)piVar3;
        pcVar1 = *(code **)(iVar4 + 300);
        piVar7[-1] = 0x42e1da;
        cVar2 = (*pcVar1)();
        if (cVar2 != '\0') {
          *piVar7 = (int)piVar3;
          piVar7[-1] = 0x42e1e6;
          iVar4 = CBaseEntity::GetTeamNumber((CBaseEntity *)*piVar7);
          if (iVar4 == param_2) {
            iVar4 = *piVar3;
            piVar7[1] = (int)piVar3;
            *piVar7 = (int)&local_e8;
            pcVar1 = *(code **)(iVar4 + 0x234);
            piVar7[-1] = 0x42e1ff;
            (*pcVar1)();
            if (param_3 <= 0.0) {
              local_f4 = *(undefined1 **)param_1;
              fVar8 = *(float *)(param_1 + 4);
              fVar9 = *(float *)(param_1 + 8);
            }
            else {
              local_f4 = *(undefined1 **)param_1;
              fVar8 = *(float *)(param_1 + 4);
              fVar9 = *(float *)(param_1 + 8);
              piVar6 = piVar7 + -1;
              if (local_f0 <
                  (local_e0 - fVar9) * (local_e0 - fVar9) + (local_e4 - fVar8) * (local_e4 - fVar8)
                  + (local_e8 - (float)local_f4) * (local_e8 - (float)local_f4)) goto LAB_0042e1b0;
            }
            local_bc = (float)local_f4 - local_e8;
            local_f4 = local_dc;
            *piVar7 = (int)piVar3;
            local_b8 = fVar8 - local_e4;
            piVar7[-1] = (int)local_f4;
            local_b4 = fVar9 - local_e0;
            piVar7[2] = 0;
            piVar7[1] = 0;
            local_cc = local_e8;
            local_c8 = local_e4;
            local_c4 = local_e0;
            local_94 = 0;
            local_98 = 0;
            local_9c = 0;
            local_87 = local_b8 * local_b8 + local_bc * local_bc + local_b4 * local_b4 != 0.0;
            local_88 = 1;
            local_8c = 0;
            local_a4 = 0;
            local_a8 = 0;
            local_ac = 0;
            piVar7[-2] = 0x42e36a;
            CTraceFilterSimple::CTraceFilterSimple
                      ((CTraceFilterSimple *)piVar7[-1],(IHandleEntity *)*piVar7,piVar7[1],
                       (_func_bool_IHandleEntity_ptr_int *)piVar7[2]);
            iVar4 = *enginetrace;
            piVar7[3] = (int)local_70;
            piVar7[1] = 0x4081;
            piVar7[-1] = (int)enginetrace;
            piVar7[2] = (int)local_f4;
            *piVar7 = (int)&local_cc;
            pcVar1 = *(code **)(iVar4 + 0x14);
            piVar7[-2] = 0x42e39b;
            (*pcVar1)();
            if (*(int *)(r_visualizetraces._28_4_ + 0x30) != 0) {
              piVar7[5] = -0x40800000;
              *piVar7 = (int)local_64;
              piVar7[4] = 1;
              piVar7[3] = 0;
              piVar7[2] = 0;
              piVar7[1] = 0xff;
              piVar7[-1] = (int)local_70;
              piVar7[-2] = 0x42e3e1;
              DebugDrawLine((Vector *)piVar7[-1],(Vector *)*piVar7,piVar7[1],piVar7[2],piVar7[3],
                            SUB41(piVar7[4],0),(float)piVar7[5]);
            }
            piVar6 = piVar7 + -1;
            if (local_44 == 1.0) {
              return piVar3;
            }
          }
        }
      }
LAB_0042e1b0:
      iVar5 = iVar5 + 1;
      piVar7 = piVar6;
    } while (iVar5 <= *(int *)(gpGlobals + 0x14));
  }
  return (int *)0x0;
}

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)