L L4D2node

CEnvEffectsScript::TrailEffectEvent

0x0068dd60 · 1414 bytes · __thiscall

_ZN17CEnvEffectsScript16TrailEffectEventEP20CEffectScriptElement

Decompiled

undefined (2 params)

/* CEnvEffectsScript::TrailEffectEvent(CEffectScriptElement*) */

void __thiscall
CEnvEffectsScript::TrailEffectEvent(CEnvEffectsScript *this,CEffectScriptElement *param_1)

{
  uint uVar1;
  undefined4 uVar2;
  undefined4 uVar3;
  undefined4 uVar4;
  undefined4 uVar5;
  CBaseEdict *pCVar6;
  int *piVar7;
  uint *puVar8;
  CBaseEntity *pCVar9;
  int iVar10;
  int iVar11;
  undefined4 *puVar12;
  CSpriteTrail *pCVar13;
  undefined *puVar14;
  CSprite *pCVar15;
  float fVar16;
  CSprite local_2c;
  CSprite local_28;
  
  if (param_1[0x1ad] == (CEffectScriptElement)0x0) {
    uVar1 = *(uint *)(param_1 + 0x80);
    if ((((uVar1 != 0xffffffff) &&
         (puVar14 = g_pEntityList + (uVar1 & 0xfff) * 0x10, puVar14 != (undefined *)0xfffffffc)) &&
        (*(uint *)(puVar14 + 8) == uVar1 >> 0xc)) && (*(int *)(puVar14 + 4) != 0)) {
      return;
    }
    if (((byte)this[0x14d] & 8) != 0) {
      CBaseEntity::CalcAbsolutePosition((CBaseEntity *)this);
    }
    piVar7 = (int *)CSpriteTrail::SpriteTrailCreate
                              ((char *)(param_1 + 0x120),(Vector *)(this + 0x2e0),true);
    if (piVar7 == (int *)0x0) {
      *(undefined4 *)(param_1 + 0x80) = 0xffffffff;
      pCVar9 = (CBaseEntity *)0x0;
    }
    else {
      puVar8 = (uint *)(**(code **)(*piVar7 + 0xc))(piVar7);
      puVar14 = g_pEntityList;
      uVar1 = *puVar8;
      *(uint *)(param_1 + 0x80) = uVar1;
      if (((uVar1 == 0xffffffff) ||
          (puVar14 = puVar14 + (uVar1 & 0xfff) * 0x10, puVar14 == (undefined *)0xfffffffc)) ||
         (*(uint *)(puVar14 + 8) != uVar1 >> 0xc)) {
        pCVar9 = (CBaseEntity *)0x0;
      }
      else {
        pCVar9 = *(CBaseEntity **)(puVar14 + 4);
      }
    }
    pCVar15 = (CSprite *)0x0;
    CBaseEntity::FollowEntity(pCVar9,(CBaseEntity *)this,true);
    iVar11 = *(int *)(param_1 + 0x9c);
    uVar2 = *(undefined4 *)(param_1 + 0x8c);
    uVar3 = *(undefined4 *)(param_1 + 0x98);
    uVar4 = *(undefined4 *)(param_1 + 0x94);
    uVar5 = *(undefined4 *)(param_1 + 0x90);
    uVar1 = *(uint *)(param_1 + 0x80);
    if (((uVar1 != 0xffffffff) &&
        (puVar14 = g_pEntityList + (uVar1 & 0xfff) * 0x10, puVar14 != (undefined *)0xfffffffc)) &&
       (*(uint *)(puVar14 + 8) == uVar1 >> 0xc)) {
      pCVar15 = *(CSprite **)(puVar14 + 4);
    }
    if (SUB41(uVar2,0) != pCVar15[0x121]) {
      if (pCVar15[0x6c] == (CSprite)0x0) {
        pCVar6 = *(CBaseEdict **)(pCVar15 + 0x30);
        if (pCVar6 != (CBaseEdict *)0x0) {
          *(uint *)pCVar6 = *(uint *)pCVar6 | 0x101;
          iVar10 = CBaseEdict::GetChangeAccessor(pCVar6);
          *(undefined2 *)(iVar10 + 2) = 0;
        }
      }
      else {
        pCVar15[0x70] = (CSprite)((byte)pCVar15[0x70] | 1);
      }
      pCVar15[0x121] = SUB41(uVar2,0);
    }
    local_2c = SUB41(uVar5,0);
    local_28 = SUB41(uVar4,0);
    if (local_2c != pCVar15[0x124]) {
      if (pCVar15[0x6c] == (CSprite)0x0) {
        pCVar6 = *(CBaseEdict **)(pCVar15 + 0x30);
        if (pCVar6 != (CBaseEdict *)0x0) {
          *(uint *)pCVar6 = *(uint *)pCVar6 | 0x101;
          iVar10 = CBaseEdict::GetChangeAccessor(pCVar6);
          *(undefined2 *)(iVar10 + 2) = 0;
        }
      }
      else {
        pCVar15[0x70] = (CSprite)((byte)pCVar15[0x70] | 1);
      }
      pCVar15[0x124] = local_2c;
    }
    if (local_28 != pCVar15[0x125]) {
      if (pCVar15[0x6c] == (CSprite)0x0) {
        pCVar6 = *(CBaseEdict **)(pCVar15 + 0x30);
        if (pCVar6 != (CBaseEdict *)0x0) {
          *(uint *)pCVar6 = *(uint *)pCVar6 | 0x101;
          iVar10 = CBaseEdict::GetChangeAccessor(pCVar6);
          *(undefined2 *)(iVar10 + 2) = 0;
        }
      }
      else {
        pCVar15[0x70] = (CSprite)((byte)pCVar15[0x70] | 1);
      }
      pCVar15[0x125] = local_28;
    }
    if (SUB41(uVar3,0) != pCVar15[0x126]) {
      if (pCVar15[0x6c] == (CSprite)0x0) {
        pCVar6 = *(CBaseEdict **)(pCVar15 + 0x30);
        if (pCVar6 != (CBaseEdict *)0x0) {
          *(uint *)pCVar6 = *(uint *)pCVar6 | 0x101;
          iVar10 = CBaseEdict::GetChangeAccessor(pCVar6);
          *(undefined2 *)(iVar10 + 2) = 0;
        }
      }
      else {
        pCVar15[0x70] = (CSprite)((byte)pCVar15[0x70] | 1);
      }
      pCVar15[0x126] = SUB41(uVar3,0);
    }
    CSprite::SetBrightness(pCVar15,iVar11,0.0);
    if (pCVar15[0x120] != (CSprite)0x0) {
      if (pCVar15[0x6c] == (CSprite)0x0) {
        pCVar6 = *(CBaseEdict **)(pCVar15 + 0x30);
        if (pCVar6 != (CBaseEdict *)0x0) {
          *(uint *)pCVar6 = *(uint *)pCVar6 | 0x101;
          iVar11 = CBaseEdict::GetChangeAccessor(pCVar6);
          *(undefined2 *)(iVar11 + 2) = 0;
        }
      }
      else {
        pCVar15[0x70] = (CSprite)((byte)pCVar15[0x70] | 1);
      }
      pCVar15[0x120] = (CSprite)0x0;
    }
    uVar1 = *(uint *)(param_1 + 0x80);
    pCVar13 = (CSpriteTrail *)0x0;
    if (((uVar1 != 0xffffffff) &&
        (puVar14 = g_pEntityList + (uVar1 & 0xfff) * 0x10, puVar14 != (undefined *)0xfffffffc)) &&
       (*(uint *)(puVar14 + 8) == uVar1 >> 0xc)) {
      pCVar13 = *(CSpriteTrail **)(puVar14 + 4);
    }
    CSpriteTrail::SetStartWidth(pCVar13,*(float *)(param_1 + 0x1a0));
    fVar16 = *(float *)(param_1 + 0x1a8);
    if (fVar16 < 0.0) {
      fVar16 = 0.0625 / *(float *)(param_1 + 0x1a0);
    }
    uVar1 = *(uint *)(param_1 + 0x80);
    pCVar13 = (CSpriteTrail *)0x0;
    if (((uVar1 != 0xffffffff) &&
        (puVar14 = g_pEntityList + (uVar1 & 0xfff) * 0x10, puVar14 != (undefined *)0xfffffffc)) &&
       (*(uint *)(puVar14 + 8) == uVar1 >> 0xc)) {
      pCVar13 = *(CSpriteTrail **)(puVar14 + 4);
    }
    CSpriteTrail::SetTextureResolution(pCVar13,fVar16);
    uVar1 = *(uint *)(param_1 + 0x80);
    pCVar13 = (CSpriteTrail *)0x0;
    if (((uVar1 != 0xffffffff) &&
        (puVar14 = g_pEntityList + (uVar1 & 0xfff) * 0x10, puVar14 != (undefined *)0xfffffffc)) &&
       (*(uint *)(puVar14 + 8) == uVar1 >> 0xc)) {
      pCVar13 = *(CSpriteTrail **)(puVar14 + 4);
    }
    CSpriteTrail::SetLifeTime(pCVar13,*(float *)(param_1 + 0x1a4));
    uVar1 = *(uint *)(param_1 + 0x80);
    pCVar15 = (CSprite *)0x0;
    if (((uVar1 != 0xffffffff) &&
        (puVar14 = g_pEntityList + (uVar1 & 0xfff) * 0x10, puVar14 != (undefined *)0xfffffffc)) &&
       (*(uint *)(puVar14 + 8) == uVar1 >> 0xc)) {
      pCVar15 = *(CSprite **)(puVar14 + 4);
    }
    pCVar9 = (CBaseEntity *)0x0;
    CSprite::TurnOn(pCVar15);
    iVar11 = CBaseAnimating::LookupAttachment((CBaseAnimating *)this,(char *)(param_1 + 0xa0));
    uVar1 = *(uint *)(param_1 + 0x80);
    if (((uVar1 != 0xffffffff) &&
        (puVar14 = g_pEntityList + (uVar1 & 0xfff) * 0x10, puVar14 != (undefined *)0xfffffffc)) &&
       (*(uint *)(puVar14 + 8) == uVar1 >> 0xc)) {
      pCVar9 = *(CBaseEntity **)(puVar14 + 4);
    }
    if (this != (CEnvEffectsScript *)0x0) {
      uVar1 = *(uint *)(pCVar9 + 0x440);
      if (((uVar1 == 0xffffffff) ||
          (puVar14 = g_pEntityList + (uVar1 & 0xfff) * 0x10, puVar14 == (undefined *)0xfffffffc)) ||
         ((*(uint *)(puVar14 + 8) != uVar1 >> 0xc || (this != *(CEnvEffectsScript **)(puVar14 + 4)))
         )) {
        if (pCVar9[0x6c] == (CBaseEntity)0x0) {
          pCVar6 = *(CBaseEdict **)(pCVar9 + 0x30);
          if (pCVar6 != (CBaseEdict *)0x0) {
            *(uint *)pCVar6 = *(uint *)pCVar6 | 0x101;
            iVar10 = CBaseEdict::GetChangeAccessor(pCVar6);
            *(undefined2 *)(iVar10 + 2) = 0;
          }
        }
        else {
          pCVar9[0x70] = (CBaseEntity)((byte)pCVar9[0x70] | 1);
        }
        puVar12 = (undefined4 *)(**(code **)(*(int *)this + 0xc))(this);
        *(undefined4 *)(pCVar9 + 0x440) = *puVar12;
      }
      if (iVar11 != *(int *)(pCVar9 + 0x444)) {
        if (pCVar9[0x6c] == (CBaseEntity)0x0) {
          pCVar6 = *(CBaseEdict **)(pCVar9 + 0x30);
          if (pCVar6 != (CBaseEdict *)0x0) {
            *(uint *)pCVar6 = *(uint *)pCVar6 | 0x101;
            iVar10 = CBaseEdict::GetChangeAccessor(pCVar6);
            *(undefined2 *)(iVar10 + 2) = 0;
          }
        }
        else {
          pCVar9[0x70] = (CBaseEntity)((byte)pCVar9[0x70] | 1);
        }
        *(int *)(pCVar9 + 0x444) = iVar11;
      }
      CBaseEntity::FollowEntity(pCVar9,(CBaseEntity *)this,true);
    }
    param_1[0x1ad] = (CEffectScriptElement)0x1;
  }
  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)