L L4D2node

CCarriedProp::FindPropUseTarget

0x00530a60 · 1255 bytes · __thiscall

_ZN12CCarriedProp17FindPropUseTargetEP13CTerrorPlayerffi

Decompiled

undefined (5 params)

/* CCarriedProp::FindPropUseTarget(CTerrorPlayer*, float, float, int) */

int * __thiscall
CCarriedProp::FindPropUseTarget
          (CCarriedProp *this,CTerrorPlayer *param_1,float param_2,float param_3,int param_4)

{
  int *piVar1;
  int iVar2;
  code *pcVar3;
  undefined1 *puVar4;
  uint uVar5;
  float *pfVar6;
  int iVar7;
  int *piVar8;
  int *piVar9;
  longdouble lVar10;
  float fVar11;
  int aiStackY_1a8 [2];
  int local_190;
  float local_18c [5];
  int *local_178;
  float local_174;
  CBaseEntity *local_16c;
  float local_168;
  float local_164;
  float local_160;
  float local_15c;
  float local_158;
  float local_154;
  Vector local_150 [12];
  float local_144;
  float local_140;
  float local_13c;
  float local_138;
  float local_134;
  float local_130;
  undefined1 local_12c [16];
  float local_11c;
  float local_118;
  float local_114;
  float local_10c;
  float local_108;
  float local_104;
  undefined4 local_fc;
  undefined4 local_f8;
  undefined4 local_f4;
  undefined4 local_ec;
  undefined4 local_e8;
  undefined4 local_e4;
  undefined4 local_dc;
  undefined1 local_d8;
  undefined1 local_d7;
  undefined4 local_c8;
  undefined4 local_c4;
  float local_c0;
  undefined1 local_bc [32];
  float local_9c;
  int *local_7c;
  undefined1 *local_74;
  undefined4 local_70;
  undefined4 local_6c;
  undefined4 local_68;
  undefined1 local_64 [64];
  int local_24;
  undefined1 *local_20;
  
  if (param_1 == (CTerrorPlayer *)0x0) {
    local_178 = (int *)0x0;
  }
  else {
    local_74 = local_64;
    local_70 = 0x10;
    local_6c = 0xffffffff;
    local_68 = 0;
    local_24 = 0;
                    /* try { // try from 00530acb to 00530f48 has its CatchHandler @ 00530f64 */
    local_20 = local_74;
    (**(code **)(*(int *)param_1 + 0x234))();
    piVar8 = (int *)&stack0xfffffe60;
    local_168 = (float)local_c8;
    local_164 = (float)local_c4;
    local_160 = local_c0;
    if (((byte)param_1[0x14d] & 8) != 0) {
      CBaseEntity::CalcAbsolutePosition((CBaseEntity *)param_1);
    }
    local_164 = *(float *)(param_1 + 0x2e4);
    local_168 = *(float *)(param_1 + 0x2e0);
    CBasePlayer::EyeVectors((CBasePlayer *)param_1,(Vector *)&local_15c,(Vector *)0x0,local_150);
    local_16c = (CBaseEntity *)0x0;
    while( true ) {
      local_16c = (CBaseEntity *)
                  CGlobalEntityList::FindEntityByClassname
                            ((CGlobalEntityList *)gEntList,local_16c,"point_prop_use_target");
      if (local_16c == (CBaseEntity *)0x0) break;
      uVar5 = (**(code **)(*(int *)local_16c + 0xa4))();
      if (((uVar5 & param_4) != 0) &&
         (lVar10 = (longdouble)
                   CCollisionProperty::CalcSqrDistanceFromPoint
                             ((CCollisionProperty *)(local_16c + 0x194),(Vector *)&local_168),
         (float)lVar10 <= param_2 * param_2)) {
        CUtlVector<CBaseEntity*,CUtlMemoryFixedGrowable<CBaseEntity*,16u,int>>::InsertBefore
                  ((CUtlVector<CBaseEntity*,CUtlMemoryFixedGrowable<CBaseEntity*,16u,int>> *)
                   &local_74,local_24,&local_16c);
      }
    }
    if (local_24 < 1) {
      local_178 = (int *)0x0;
    }
    else {
      local_178 = (int *)0x0;
      iVar7 = 0;
      local_174 = 0.0;
      piVar9 = (int *)&stack0xfffffe60;
LAB_00530bec:
      do {
        piVar1 = *(int **)(local_74 + iVar7 * 4);
        iVar2 = *piVar1;
        *piVar9 = (int)piVar1;
        pcVar3 = *(code **)(iVar2 + 0x288);
        piVar9[-1] = 0x530bfd;
        pfVar6 = (float *)(*pcVar3)();
        local_144 = *pfVar6 - local_168;
        local_140 = pfVar6[1] - local_164;
        fVar11 = pfVar6[2];
        *piVar9 = (int)&local_144;
        local_13c = fVar11 - local_160;
        piVar9[-1] = 0x530c49;
        VectorNormalize((Vector *)*piVar9);
        fVar11 = local_154 * local_13c + local_15c * local_144 + local_158 * local_140;
        piVar8 = piVar9;
        if ((local_174 < fVar11) && (param_3 <= fVar11)) {
          piVar9[3] = 0;
          piVar9[2] = 0;
          piVar9[1] = (int)param_1;
          *piVar9 = (int)local_12c;
          piVar9[-1] = 0x530ccf;
          CTraceFilterSimple::CTraceFilterSimple
                    ((CTraceFilterSimple *)*piVar9,(IHandleEntity *)piVar9[1],piVar9[2],
                     (_func_bool_IHandleEntity_ptr_int *)piVar9[3]);
          iVar2 = *piVar1;
          *piVar9 = (int)piVar1;
          pcVar3 = *(code **)(iVar2 + 0x288);
          piVar9[-1] = 0x530cda;
          pfVar6 = (float *)(*pcVar3)();
          iVar2 = *(int *)param_1;
          piVar9[1] = (int)param_1;
          *piVar9 = (int)&local_138;
          pcVar3 = *(code **)(iVar2 + 0x234);
          piVar9[-1] = 0x530cf5;
          (*pcVar3)();
          piVar8 = piVar9 + -1;
          local_11c = local_138;
          local_10c = *pfVar6 - local_138;
          local_118 = local_134;
          local_108 = pfVar6[1] - local_134;
          local_d8 = 1;
          local_e4 = 0;
          local_104 = pfVar6[2] - local_130;
          local_e8 = 0;
          local_ec = 0;
          local_dc = 0;
          local_f4 = 0;
          local_f8 = 0;
          local_fc = 0;
          local_114 = local_130;
          local_d7 = local_108 * local_108 + local_104 * local_104 + local_10c * local_10c != 0.0;
          iVar2 = *enginetrace;
          piVar9[3] = (int)&local_c8;
          piVar9[2] = (int)local_12c;
          piVar9[1] = 0x608b;
          *piVar9 = (int)&local_11c;
          piVar9[-1] = (int)enginetrace;
          pcVar3 = *(code **)(iVar2 + 0x14);
          piVar9[-2] = 0x530e01;
          (*pcVar3)();
          if (*(int *)(r_visualizetraces._28_4_ + 0x30) != 0) {
            piVar9[5] = -0x40800000;
            *piVar9 = (int)local_bc;
            piVar9[4] = 1;
            piVar9[3] = 0;
            piVar9[2] = 0;
            piVar9[1] = 0xff;
            piVar9[-1] = (int)&local_c8;
            piVar9[-2] = 0x530e4d;
            DebugDrawLine((Vector *)piVar9[-1],(Vector *)*piVar9,piVar9[1],piVar9[2],piVar9[3],
                          SUB41(piVar9[4],0),(float)piVar9[5]);
          }
          local_174 = fVar11;
          if ((1.0 <= local_9c) || (local_7c == piVar1)) {
            iVar7 = iVar7 + 1;
            piVar8 = piVar9 + -1;
            piVar9 = piVar9 + -1;
            local_178 = piVar1;
            if (local_24 <= iVar7) break;
            goto LAB_00530bec;
          }
        }
        iVar7 = iVar7 + 1;
        piVar9 = piVar8;
      } while (iVar7 < local_24);
    }
    local_24 = 0;
    *piVar8 = (int)&local_74;
    piVar8[-1] = 0x530e95;
    CUtlMemory<CBaseEntity*,int>::Purge((CUtlMemory<CBaseEntity*,int> *)*piVar8);
    puVar4 = local_74;
    *piVar8 = (int)&local_74;
    local_20 = puVar4;
    piVar8[-1] = 0x530ea3;
    CUtlMemory<CBaseEntity*,int>::Purge((CUtlMemory<CBaseEntity*,int> *)*piVar8);
  }
  return local_178;
}

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)