L L4D2node

FindWeaponSpawnLookAtAngles

0x00900d30 · 559 bytes · __cdecl

_Z27FindWeaponSpawnLookAtAnglesRK6VectorP6QAngle

Decompiled

undefined (2 params)

/* FindWeaponSpawnLookAtAngles(Vector const&, QAngle*) */

void FindWeaponSpawnLookAtAngles(Vector *param_1,QAngle *param_2)

{
  float fVar1;
  float fVar2;
  float fVar3;
  float fVar4;
  float fVar5;
  float fVar6;
  int *piVar7;
  code *pcVar8;
  char cVar9;
  int iVar10;
  float *pfVar11;
  char *pcVar12;
  int iVar13;
  int *local_34;
  float local_30;
  float local_28;
  float local_24;
  float local_20;
  
  if ((param_2 != (QAngle *)0x0) && (0 < DAT_0100486c)) {
    local_34 = (int *)0x0;
    iVar13 = 0;
    local_30 = 1000.0;
    do {
      piVar7 = *(int **)(TheWeaponSpawns + iVar13 * 4);
      pcVar12 = (char *)piVar7[0x1f];
      if (pcVar12 == (char *)0x0) {
        pcVar12 = "";
LAB_00900d77:
        iVar10 = _V_stricmp("weapon_ammo_spawn",pcVar12);
        if (iVar10 != 0) {
          pfVar11 = (float *)(**(code **)(*piVar7 + 0x288))(piVar7);
          if ((*pfVar11 - *(float *)param_1) * (*pfVar11 - *(float *)param_1) +
              (pfVar11[1] - *(float *)(param_1 + 4)) * (pfVar11[1] - *(float *)(param_1 + 4)) +
              (pfVar11[2] - *(float *)(param_1 + 8)) * (pfVar11[2] - *(float *)(param_1 + 8)) <
              local_30 * local_30) {
            pcVar8 = *(code **)(*piVar7 + 0x268);
            pfVar11 = (float *)(**(code **)(*g_pGameRules + 0x7c))(g_pGameRules);
            local_28 = *pfVar11 + *(float *)param_1;
            local_24 = pfVar11[1] + *(float *)(param_1 + 4);
            local_20 = pfVar11[2] + *(float *)(param_1 + 8);
            cVar9 = (*pcVar8)(piVar7,&local_28,0x4041,0);
            if (cVar9 != '\0') {
              pfVar11 = (float *)(**(code **)(*piVar7 + 0x288))(piVar7);
              local_30 = SQRT((*pfVar11 - *(float *)param_1) * (*pfVar11 - *(float *)param_1) +
                              (pfVar11[1] - *(float *)(param_1 + 4)) *
                              (pfVar11[1] - *(float *)(param_1 + 4)) +
                              (pfVar11[2] - *(float *)(param_1 + 8)) *
                              (pfVar11[2] - *(float *)(param_1 + 8)));
              local_34 = piVar7;
            }
          }
        }
      }
      else if (pcVar12 != "weapon_ammo_spawn") goto LAB_00900d77;
      iVar13 = iVar13 + 1;
    } while (iVar13 < DAT_0100486c);
    if (local_34 != (int *)0x0) {
      pfVar11 = (float *)(**(code **)(*g_pGameRules + 0x7c))(g_pGameRules);
      fVar1 = *(float *)param_1;
      fVar2 = *(float *)(param_1 + 4);
      fVar3 = *(float *)(param_1 + 8);
      fVar4 = *pfVar11;
      fVar5 = pfVar11[1];
      fVar6 = pfVar11[2];
      pfVar11 = (float *)(**(code **)(*local_34 + 0x288))(local_34);
      local_28 = *pfVar11 - (fVar1 + fVar4);
      local_24 = pfVar11[1] - (fVar2 + fVar5);
      local_20 = pfVar11[2] - (fVar3 + fVar6);
      VectorAngles((Vector *)&local_28,param_2);
    }
  }
  return;
}

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)