L L4D2node

CreatePhysicsProp

0x007f77a0 · 1469 bytes · __cdecl

_Z17CreatePhysicsPropPKcRK6VectorS3_PK13IHandleEntitybS0_

Decompiled

undefined (6 params)

/* CreatePhysicsProp(char const*, Vector const&, Vector const&, IHandleEntity const*, bool, char
   const*) */

CBaseEntity *
CreatePhysicsProp(char *param_1,Vector *param_2,Vector *param_3,IHandleEntity *param_4,bool param_5,
                 char *param_6)

{
  int *piVar1;
  bool bVar2;
  short sVar3;
  int iVar4;
  int iVar5;
  CBaseEntity *pCVar6;
  int in_GS_OFFSET;
  CTraceFilterSimple local_2dc [16];
  float local_2cc;
  float local_2c8;
  float local_2c4;
  float local_2bc;
  float local_2b8;
  float local_2b4;
  float local_2ac;
  float local_2a8;
  float local_2a4;
  float local_29c;
  float local_298;
  float local_294;
  undefined4 local_28c;
  undefined1 local_288;
  undefined1 local_287;
  Vector local_274 [12];
  float local_268;
  float local_264;
  float local_260;
  float local_25c;
  float local_258;
  float local_254;
  float local_248;
  char local_23e;
  char local_220 [512];
  int local_20;
  
  piVar1 = mdlcache;
  local_20 = *(int *)(in_GS_OFFSET + 0x14);
  (**(code **)(*mdlcache + 0x68))(mdlcache);
                    /* try { // try from 007f7806 to 007f7d06 has its CatchHandler @ 007f7d69 */
  sVar3 = (**(code **)(*mdlcache + 0x18))(mdlcache,param_1);
  if (sVar3 != -1) {
    iVar4 = (**(code **)(*mdlcache + 0x28))(mdlcache,sVar3);
    if (iVar4 != 0) {
      if (param_5) {
                    /* try { // try from 007f7d4c to 007f7d4e has its CatchHandler @ 007f7d69 */
        iVar5 = (**(code **)(*mdlcache + 0x30))(mdlcache,sVar3);
        if (iVar5 == 0) {
          pCVar6 = (CBaseEntity *)0x0;
          goto LAB_007f7d07;
        }
      }
      local_28c = 0;
      local_2bc = *(float *)param_3 - *(float *)param_2;
      local_2b4 = *(float *)(param_3 + 8) - *(float *)(param_2 + 8);
      local_2b8 = *(float *)(param_3 + 4) - *(float *)(param_2 + 4);
      local_287 = local_2b4 * local_2b4 + local_2bc * local_2bc + local_2b8 * local_2b8 != 0.0;
      local_29c = (*(float *)(iVar4 + 0x74) - *(float *)(iVar4 + 0x68)) * 0.5;
      local_294 = (*(float *)(iVar4 + 0x7c) - *(float *)(iVar4 + 0x70)) * 0.5;
      local_298 = (*(float *)(iVar4 + 0x78) - *(float *)(iVar4 + 0x6c)) * 0.5;
      local_2ac = (*(float *)(iVar4 + 0x74) + *(float *)(iVar4 + 0x68)) * 0.5;
      local_2a8 = (*(float *)(iVar4 + 0x78) + *(float *)(iVar4 + 0x6c)) * 0.5;
      local_2a4 = (*(float *)(iVar4 + 0x7c) + *(float *)(iVar4 + 0x70)) * 0.5;
      local_2cc = *(float *)param_2 + local_2ac;
      local_2c8 = *(float *)(param_2 + 4) + local_2a8;
      local_288 = local_294 * local_294 + local_29c * local_29c + local_298 * local_298 < 1e-06;
      local_2c4 = *(float *)(param_2 + 8) + local_2a4;
      local_2ac = -local_2ac;
      local_2a8 = -local_2a8;
      local_2a4 = -local_2a4;
      CTraceFilterSimple::CTraceFilterSimple
                (local_2dc,param_4,0,(_func_bool_IHandleEntity_ptr_int *)0x0);
      (**(code **)(*enginetrace + 0x14))(enginetrace,&local_2cc,0x202400b,local_2dc);
      if (*(int *)(r_visualizetraces._28_4_ + 0x30) != 0) {
        DebugDrawLine(local_274,(Vector *)&local_268,0xff,0xff,0,true,-1.0);
      }
      if (((local_248 != 1.0) ||
          (SQRT((*(float *)(param_3 + 4) - *(float *)(param_2 + 4)) *
                (*(float *)(param_3 + 4) - *(float *)(param_2 + 4)) +
                (*(float *)param_3 - *(float *)param_2) * (*(float *)param_3 - *(float *)param_2) +
                (*(float *)(param_3 + 8) - *(float *)(param_2 + 8)) *
                (*(float *)(param_3 + 8) - *(float *)(param_2 + 8))) <= 0.01)) &&
         (local_23e == '\0')) {
        local_268 = local_268 + local_25c;
        local_264 = local_264 + local_258;
        local_260 = local_260 + local_254;
        bVar2 = (bool)CBaseEntity::IsPrecacheAllowed();
        CBaseEntity::SetAllowPrecache(true);
        iVar4 = CreateEntityByName(param_6,-1,true);
        if (iVar4 == 0) {
          pCVar6 = (CBaseEntity *)0x0;
        }
        else {
          pCVar6 = (CBaseEntity *)
                   __dynamic_cast(iVar4,&CBaseEntity::typeinfo,&CPhysicsProp::typeinfo,0);
          if (pCVar6 != (CBaseEntity *)0x0) {
            V_snprintf(local_220,0x200,"%.10f %.10f %.10f",(double)local_268,(double)local_264,
                       (double)local_260);
            (**(code **)(*(int *)pCVar6 + 0x84))(pCVar6,"origin",local_220);
            V_snprintf(local_220,0x200,"%.10f %.10f %.10f",0,0,0);
            (**(code **)(*(int *)pCVar6 + 0x84))(pCVar6,"angles",local_220);
            (**(code **)(*(int *)pCVar6 + 0x84))(pCVar6,"model",param_1);
            (**(code **)(*(int *)pCVar6 + 0x84))(pCVar6,"fademindist",&DAT_00c0af6c);
            (**(code **)(*(int *)pCVar6 + 0x84))(pCVar6,"fademaxdist",&DAT_00c09604);
            (**(code **)(*(int *)pCVar6 + 0x84))(pCVar6,"fadescale",&DAT_00cbe2d5);
            (**(code **)(*(int *)pCVar6 + 0x84))(pCVar6,"inertiaScale",&DAT_00c096e0);
            (**(code **)(*(int *)pCVar6 + 0x84))(pCVar6,"physdamagescale",&DAT_00c22998);
            (**(code **)(*(int *)pCVar6 + 0x6c))(pCVar6);
            DispatchSpawn(pCVar6,true);
            (**(code **)(*(int *)pCVar6 + 0x94))(pCVar6);
          }
        }
        CBaseEntity::SetAllowPrecache(bVar2);
        goto LAB_007f7d07;
      }
    }
  }
  pCVar6 = (CBaseEntity *)0x0;
LAB_007f7d07:
  (**(code **)(*piVar1 + 0x6c))(piVar1);
  if (local_20 == *(int *)(in_GS_OFFSET + 0x14)) {
    return pCVar6;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail();
}

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)