L L4D2node

MountedGunFire

0x0054f8f0 · 1809 bytes · __cdecl

_Z14MountedGunFireP13CTerrorPlayerP15CPropMountedGunRK6VectorS5_S5_fb

Decompiled

undefined (7 params)

/* MountedGunFire(CTerrorPlayer*, CPropMountedGun*, Vector const&, Vector const&, Vector const&,
   float, bool) */

void MountedGunFire(CTerrorPlayer *param_1,CPropMountedGun *param_2,Vector *param_3,Vector *param_4,
                   Vector *param_5,float param_6,bool param_7)

{
  float fVar1;
  uint uVar2;
  char cVar3;
  undefined4 uVar4;
  CAmmoDef *pCVar5;
  int iVar6;
  int iVar7;
  undefined *puVar8;
  IHandleEntity *local_1b0;
  undefined **local_1a0 [4];
  undefined4 local_190 [3];
  undefined4 local_184;
  undefined4 local_180;
  undefined4 local_17c;
  undefined4 local_178;
  undefined4 local_174;
  float local_16c;
  float local_168;
  float local_164;
  undefined4 local_15c;
  undefined4 local_158;
  undefined4 local_154;
  undefined4 local_14c;
  undefined4 local_148;
  undefined4 local_144;
  undefined4 local_13c;
  undefined1 local_138;
  undefined1 local_137;
  undefined4 local_12c;
  undefined4 local_128;
  undefined4 local_124;
  float local_11c;
  float local_118;
  float local_114;
  undefined4 local_10c;
  undefined4 local_108;
  undefined4 local_104;
  undefined4 local_fc;
  undefined4 local_f8;
  undefined4 local_f4;
  undefined4 local_ec;
  undefined1 local_e8;
  undefined1 local_e7;
  undefined4 local_d0;
  undefined4 local_cc;
  undefined4 local_c8;
  undefined4 local_c4;
  undefined4 local_c0;
  undefined4 local_bc;
  CBaseEntity *local_84;
  undefined4 local_7c;
  undefined4 local_78;
  undefined4 local_74;
  int local_28;
  
  if (param_2[0x15dd] == (CPropMountedGun)0x0) {
    CBaseEntity::EmitSound((CBaseEntity *)param_1,"50cal.fire",0.0,(float *)0x0);
    uVar4 = (**(code **)(*(int *)param_1 + 0x288))(param_1);
    UTIL_ScreenShake(uVar4,0x3f800000,0x3f000000,0x3e99999a,0x42f00000,0,0,0);
    CTraceFilterSimpleList::CTraceFilterSimpleList((CTraceFilterSimpleList *)local_1a0,0);
                    /* try { // try from 0054f9c1 to 0054ffe8 has its CatchHandler @ 00550018 */
    CTraceFilterSimpleList::AddEntityToIgnore
              ((CTraceFilterSimpleList *)local_1a0,(IHandleEntity *)param_2);
    local_13c = 0;
    local_138 = 0;
    local_14c = 0x40400000;
    local_148 = 0x40400000;
    local_16c = *(float *)param_5 * 16384.0;
    local_144 = 0x40400000;
    local_168 = *(float *)(param_5 + 4) * 16384.0;
    local_15c = 0;
    local_164 = *(float *)(param_5 + 8) * 16384.0;
    local_158 = 0;
    local_154 = 0;
    local_17c = *(undefined4 *)param_4;
    local_178 = *(undefined4 *)(param_4 + 4);
    local_174 = *(undefined4 *)(param_4 + 8);
    local_137 = local_168 * local_168 + local_16c * local_16c + local_164 * local_164 != 0.0;
    (**(code **)(*enginetrace + 0x14))
              (enginetrace,&local_17c,0x46004003,(CTraceFilterSimpleList *)local_1a0,&local_d0);
    if (*(int *)(r_visualizetraces._28_4_ + 0x30) != 0) {
      DebugDrawLine((Vector *)&local_d0,(Vector *)&local_c4,0xff,0xff,0,true,-1.0);
    }
    DispatchParticleEffect
              ("weapon_muzzle_flash_50cal",5,param_2,*(undefined4 *)(param_2 + 0x1664),0,0xffffffff)
    ;
    DispatchParticleEffect
              ("weapon_shell_casing_50cal",4,param_2,*(undefined4 *)(param_2 + 0x1660),0,0xffffffff)
    ;
    if (local_84 != (CBaseEntity *)0x0) {
      cVar3 = (**(code **)(*(int *)local_84 + 0x16c))(local_84);
      if (cVar3 != '\0') {
        iVar6 = CBaseEntity::GetTeamNumber(local_84);
        cVar3 = IsASurvivorTeam(iVar6);
        if (cVar3 != '\0') {
          local_1b0 = (IHandleEntity *)local_84;
          if ((local_84 == (CBaseEntity *)0x0) ||
             (cVar3 = (**(code **)(*(int *)local_84 + 0x16c))(local_84), cVar3 == '\0')) {
            local_1b0 = (IHandleEntity *)0x0;
          }
          uVar2 = *(uint *)(local_1b0 + 0x3e68);
          if (((((((uVar2 != 0xffffffff) &&
                  (puVar8 = g_pEntityList + (uVar2 & 0xfff) * 0x10,
                  puVar8 != (undefined *)0xfffffffc)) && (*(uint *)(puVar8 + 8) == uVar2 >> 0xc)) &&
                (*(int *)(puVar8 + 4) != 0)) ||
               (((uVar2 = *(uint *)(local_1b0 + 0x3e48), uVar2 != 0xffffffff &&
                 (puVar8 = g_pEntityList + (uVar2 & 0xfff) * 0x10, puVar8 != (undefined *)0xfffffffc
                 )) && ((*(uint *)(puVar8 + 8) == uVar2 >> 0xc && (*(int *)(puVar8 + 4) != 0))))))
              || (((uVar2 = *(uint *)(local_1b0 + 0x33c4), uVar2 != 0xffffffff &&
                   (puVar8 = g_pEntityList + (uVar2 & 0xfff) * 0x10,
                   puVar8 != (undefined *)0xfffffffc)) &&
                  ((*(uint *)(puVar8 + 8) == uVar2 >> 0xc && (*(int *)(puVar8 + 4) != 0)))))) ||
             ((((uVar2 = *(uint *)(local_1b0 + 0x3ee0), uVar2 != 0xffffffff &&
                (puVar8 = g_pEntityList + (uVar2 & 0xfff) * 0x10, puVar8 != (undefined *)0xfffffffc)
                ) && (*(uint *)(puVar8 + 8) == uVar2 >> 0xc)) && (*(int *)(puVar8 + 4) != 0)))) {
            CTraceFilterSimpleList::AddEntityToIgnore((CTraceFilterSimpleList *)local_1a0,local_1b0)
            ;
            local_ec = 0;
            local_e8 = 0;
            local_fc = 0x40400000;
            local_f8 = 0x40400000;
            local_11c = *(float *)param_5 * 16384.0;
            local_f4 = 0x40400000;
            local_118 = *(float *)(param_5 + 4) * 16384.0;
            local_10c = 0;
            local_114 = *(float *)(param_5 + 8) * 16384.0;
            local_108 = 0;
            local_104 = 0;
            local_12c = *(undefined4 *)param_4;
            local_128 = *(undefined4 *)(param_4 + 4);
            local_124 = *(undefined4 *)(param_4 + 8);
            local_e7 = local_118 * local_118 + local_11c * local_11c + local_114 * local_114 != 0.0;
            (**(code **)(*enginetrace + 0x14))
                      (enginetrace,&local_12c,0x46004003,(CTraceFilterSimpleList *)local_1a0,
                       (Vector *)&local_d0);
            if (*(int *)(r_visualizetraces._28_4_ + 0x30) != 0) {
              DebugDrawLine((Vector *)&local_d0,(Vector *)&local_c4,0xff,0xff,0,true,-1.0);
            }
          }
        }
      }
      UTIL_ImpactTrace((CGameTrace *)&local_d0,-0x7ffffffe,(char *)0x0);
      local_7c = 0;
      local_78 = 0;
      local_74 = 0;
      DispatchParticleEffect
                ("weapon_tracers_50cal",local_d0,local_cc,local_c8,local_c4,local_c0,local_bc,0,0,0,
                 0,0,0xffffffff);
      ClearMultiDamage();
      pCVar5 = (CAmmoDef *)GetAmmoDef();
      iVar6 = CAmmoDef::Index(pCVar5,"AMMO_TYPE_MINIGUN");
      fVar1 = *(float *)(ZombieHealth._28_4_ + 0x2c);
      pCVar5 = (CAmmoDef *)GetAmmoDef();
      iVar7 = CAmmoDef::DamageType(pCVar5,iVar6);
      CTakeDamageInfo::CTakeDamageInfo
                ((CTakeDamageInfo *)&local_7c,(CBaseEntity *)param_2,(CBaseEntity *)param_1,fVar1,
                 iVar7,0);
      CalculateBulletDamageForce((CTakeDamageInfo *)&local_7c,iVar6,param_5,(Vector *)&local_c4,1.0)
      ;
      local_28 = iVar6;
      CBaseEntity::DispatchTraceAttack
                ((CTakeDamageInfo *)local_84,(Vector *)&local_7c,(CGameTrace *)param_5);
      ApplyMultiDamage();
    }
    local_1a0[0] = &PTR_ShouldHitEntity_00c54590;
    local_184 = 0;
    CUtlMemory<IHandleEntity*,int>::Purge((CUtlMemory<IHandleEntity*,int> *)local_190);
    local_180 = local_190[0];
    CUtlMemory<IHandleEntity*,int>::Purge((CUtlMemory<IHandleEntity*,int> *)local_190);
    return;
  }
  CBaseEntity::EmitSound((CBaseEntity *)param_1,"Default.ClipEmpty_Rifle",0.0,(float *)0x0);
  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)