L L4D2node

InfectedLeanOnWall::OnStart

0x00a372e0 · 2089 bytes · __thiscall

_ZN18InfectedLeanOnWall7OnStartEP8InfectedP6ActionIS0_E

Decompiled

undefined (3 params)

/* InfectedLeanOnWall::OnStart(Infected*, Action<Infected>*) */

InfectedLeanOnWall * __thiscall
InfectedLeanOnWall::OnStart(InfectedLeanOnWall *this,Infected *param_1,Action *param_2)

{
  Action *pAVar1;
  float fVar2;
  float fVar3;
  float fVar4;
  float fVar5;
  float fVar6;
  float fVar7;
  IHandleEntity *pIVar8;
  int *piVar9;
  undefined4 uVar10;
  float *pfVar11;
  undefined4 *puVar12;
  longdouble lVar13;
  float fVar14;
  float fVar15;
  float fVar16;
  float fVar17;
  float local_12c;
  Vector *local_124;
  QAngle local_114 [4];
  undefined4 local_110;
  float local_108;
  float local_104;
  float local_100;
  float local_fc;
  float local_f8;
  float local_f4;
  undefined1 local_f0 [12];
  undefined **local_e4 [4];
  Action *local_d4;
  undefined4 local_d0;
  float local_cc;
  float local_c8;
  float local_c4;
  float local_bc;
  float local_b8;
  float local_b4;
  float local_ac;
  float local_a8;
  float local_a4;
  float local_9c;
  float local_98;
  float local_94;
  undefined4 local_8c;
  undefined1 local_88;
  undefined1 local_87;
  float local_70;
  float local_6c;
  float local_68;
  Vector local_64 [32];
  float local_44;
  char local_3a;
  char local_39;
  
  (**(code **)(*(int *)param_2 + 0x24c))(param_2,&local_108,&local_fc,local_f0);
  fVar15 = *(float *)(param_1 + 0x34);
  fVar17 = *(float *)(param_1 + 0x38);
  fVar16 = *(float *)(param_1 + 0x3c);
  fVar14 = local_104 * fVar17 + local_108 * fVar15 + local_100 * fVar16;
  if (fVar14 < -0.7071) {
    *(undefined4 *)(param_1 + 0x44) = 0x23f;
    local_70 = -fVar15;
    local_6c = -fVar17;
    local_68 = -fVar16;
    VectorAngles((Vector *)&local_70,local_114);
  }
  else if (0.7071 < fVar14) {
    *(undefined4 *)(param_1 + 0x44) = 0x240;
    VectorAngles((Vector *)(param_1 + 0x34),local_114);
  }
  else {
    if (local_f8 * fVar17 + local_fc * fVar15 + fVar16 * local_f4 <= 0.0) {
      *(undefined4 *)(param_1 + 0x44) = 0x242;
      local_6c = -fVar15;
      local_70 = fVar17;
    }
    else {
      *(undefined4 *)(param_1 + 0x44) = 0x241;
      local_70 = -fVar17;
      local_6c = fVar15;
    }
    local_68 = 0.0;
    VectorAngles((Vector *)&local_70,local_114);
  }
  local_124 = (Vector *)&local_70;
  pAVar1 = param_2 + 0x1a3c;
  pIVar8 = (IHandleEntity *)(**(code **)(*(int *)(param_2 + 0x1a3c) + 0xb4))(pAVar1);
  CTraceFilterSimple::CTraceFilterSimple
            ((CTraceFilterSimple *)local_e4,pIVar8,0,IgnoreActorsTraceFilterFunction);
  local_e4[0] = &PTR_ShouldHitEntity_00ca96c8;
  local_d0 = 0;
  local_d4 = pAVar1;
  piVar9 = (int *)(**(code **)(*(int *)param_2 + 0x594))(param_2);
  lVar13 = (longdouble)(**(code **)(*piVar9 + 0x118))(piVar9);
  fVar15 = (float)lVar13 * 0.5;
  fVar17 = fVar15 * 0.5;
  if (*(int *)(param_1 + 0x44) == 0x240) {
    piVar9 = (int *)(**(code **)(*(int *)param_2 + 0x594))(param_2);
    lVar13 = (longdouble)(**(code **)(*piVar9 + 0x120))(piVar9);
    fVar14 = (float)lVar13 * 0.4;
    piVar9 = (int *)(**(code **)(*(int *)param_2 + 0x594))(param_2);
    lVar13 = (longdouble)(**(code **)(*piVar9 + 0x120))(piVar9);
    fVar16 = (float)lVar13 * 0.6;
  }
  else {
    piVar9 = (int *)(**(code **)(*(int *)param_2 + 0x594))();
    lVar13 = (longdouble)(**(code **)(*piVar9 + 0x120))(piVar9);
    fVar14 = (float)lVar13 * 0.75;
    piVar9 = (int *)(**(code **)(*(int *)param_2 + 0x594))(param_2);
    lVar13 = (longdouble)(**(code **)(*piVar9 + 0x120))(piVar9);
    fVar16 = (float)lVar13;
  }
  local_12c = -fVar17;
  piVar9 = (int *)(**(code **)(*(int *)param_2 + 0x594))(param_2);
  uVar10 = (**(code **)(*piVar9 + 0x130))(piVar9);
  fVar2 = *(float *)(param_1 + 0x38);
  fVar3 = *(float *)(param_1 + 0x34);
  fVar4 = *(float *)(param_1 + 0x3c);
  pfVar11 = (float *)(**(code **)(*(int *)(param_2 + 0x1a3c) + 0xd4))(pAVar1);
  fVar5 = *pfVar11;
  fVar6 = pfVar11[1];
  fVar7 = pfVar11[2];
  pfVar11 = (float *)(**(code **)(*(int *)(param_2 + 0x1a3c) + 0xd4))(pAVar1);
  local_bc = (fVar5 - fVar3 * fVar15) - *pfVar11;
  local_b8 = (fVar6 - fVar2 * fVar15) - pfVar11[1];
  local_b4 = (fVar7 - fVar4 * fVar15) - pfVar11[2];
  local_8c = 0;
  local_87 = local_b4 * local_b4 + local_b8 * local_b8 + local_bc * local_bc != 0.0;
  local_9c = (fVar17 - local_12c) * 0.5;
  local_94 = (fVar16 - fVar14) * 0.5;
  local_a4 = (fVar14 + fVar16) * 0.5;
  local_88 = local_9c * local_9c + local_9c * local_9c + local_94 * local_94 < 1e-06;
  local_ac = (fVar17 + local_12c) * 0.5;
  local_cc = *pfVar11 + local_ac;
  local_c8 = pfVar11[1] + local_ac;
  local_ac = -local_ac;
  local_c4 = pfVar11[2] + local_a4;
  local_a4 = -local_a4;
  local_a8 = local_ac;
  local_98 = local_9c;
  (**(code **)(*enginetrace + 0x14))(enginetrace,&local_cc,uVar10,local_e4,local_124);
  if (*(int *)(r_visualizetraces._28_4_ + 0x30) != 0) {
    DebugDrawLine(local_124,local_64,0xff,0xff,0,true,-1.0);
  }
  if (((1.0 <= local_44) && (local_3a == '\0')) && (local_39 == '\0')) {
    puVar12 = ::operator_new(0x4c);
    puVar12[8] = 0;
    puVar12[9] = 0;
    puVar12[10] = 0;
    puVar12[3] = 0;
    puVar12[4] = 0;
    puVar12[5] = 0;
    puVar12[6] = 0;
    puVar12[7] = 0;
    puVar12[2] = 0;
    *(undefined1 *)(puVar12 + 0xc) = 0;
    *(undefined1 *)((int)puVar12 + 0x31) = 0;
    puVar12[0xb] = 0;
    *puVar12 = &PTR__InfectedStandingActivity_00d24c08;
    puVar12[1] = &PTR__InfectedStandingActivity_00d24d6c;
    puVar12[0xe] = &PTR_NetworkStateChanged_00c0b6e0;
    puVar12[0xf] = 0;
    puVar12[0x10] = 0xbf800000;
    puVar12[0xd] = 0x24c;
    puVar12[0x11] = 0;
    *(undefined1 *)(puVar12 + 0x12) = 0;
    *(undefined4 **)(this + 4) = puVar12;
    *(undefined4 *)this = 1;
    *(char **)(this + 8) = "No support for lean";
    return this;
  }
  *(undefined4 *)(param_1 + 0x40) = local_110;
  piVar9 = (int *)(**(code **)(*(int *)param_2 + 0x594))(param_2);
  (**(code **)(*piVar9 + 0xd8))(piVar9,*(undefined4 *)(param_1 + 0x44),1);
  lVar13 = (longdouble)RandomFloat(0x40a00000,0x41a00000);
  fVar15 = (float)lVar13;
  lVar13 = (longdouble)CountdownTimer::Now();
  if ((float)lVar13 + fVar15 != *(float *)(param_1 + 0x50)) {
    (**(code **)(*(int *)(param_1 + 0x48) + 4))(param_1 + 0x48,param_1 + 0x50);
    *(float *)(param_1 + 0x50) = (float)lVar13 + fVar15;
  }
  if (fVar15 != *(float *)(param_1 + 0x4c)) {
    (**(code **)(*(int *)(param_1 + 0x48) + 4))(param_1 + 0x48,param_1 + 0x4c);
    *(float *)(param_1 + 0x4c) = fVar15;
  }
  *(undefined4 *)this = 0;
  *(undefined4 *)(this + 4) = 0;
  *(undefined4 *)(this + 8) = 0;
  return this;
}

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)