L L4D2node

CEnvEffectsScript::SpriteEffectEvent

0x0068e360 · 1227 bytes · __thiscall

_ZN17CEnvEffectsScript17SpriteEffectEventEP20CEffectScriptElement

Decompiled

undefined (2 params)

/* CEnvEffectsScript::SpriteEffectEvent(CEffectScriptElement*) */

void __thiscall
CEnvEffectsScript::SpriteEffectEvent(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;
  undefined *puVar13;
  CSprite *pCVar14;
  CSprite local_2c;
  CSprite local_28;
  
  if (param_1[0x1ad] == (CEffectScriptElement)0x0) {
    uVar1 = *(uint *)(param_1 + 0x84);
    if ((((uVar1 != 0xffffffff) &&
         (puVar13 = g_pEntityList + (uVar1 & 0xfff) * 0x10, puVar13 != (undefined *)0xfffffffc)) &&
        (*(uint *)(puVar13 + 8) == uVar1 >> 0xc)) && (*(int *)(puVar13 + 4) != 0)) {
      return;
    }
    if (((byte)this[0x14d] & 8) != 0) {
      CBaseEntity::CalcAbsolutePosition((CBaseEntity *)this);
    }
    piVar7 = (int *)CSprite::SpriteCreate((char *)(param_1 + 0x120),(Vector *)(this + 0x2e0),true);
    if (piVar7 == (int *)0x0) {
      *(undefined4 *)(param_1 + 0x84) = 0xffffffff;
      pCVar9 = (CBaseEntity *)0x0;
    }
    else {
      puVar8 = (uint *)(**(code **)(*piVar7 + 0xc))(piVar7);
      puVar13 = g_pEntityList;
      uVar1 = *puVar8;
      *(uint *)(param_1 + 0x84) = uVar1;
      if (((uVar1 == 0xffffffff) ||
          (puVar13 = puVar13 + (uVar1 & 0xfff) * 0x10, puVar13 == (undefined *)0xfffffffc)) ||
         (*(uint *)(puVar13 + 8) != uVar1 >> 0xc)) {
        pCVar9 = (CBaseEntity *)0x0;
      }
      else {
        pCVar9 = *(CBaseEntity **)(puVar13 + 4);
      }
    }
    pCVar14 = (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 + 0x84);
    if (((uVar1 != 0xffffffff) &&
        (puVar13 = g_pEntityList + (uVar1 & 0xfff) * 0x10, puVar13 != (undefined *)0xfffffffc)) &&
       (*(uint *)(puVar13 + 8) == uVar1 >> 0xc)) {
      pCVar14 = *(CSprite **)(puVar13 + 4);
    }
    if (SUB41(uVar2,0) != pCVar14[0x121]) {
      if (pCVar14[0x6c] == (CSprite)0x0) {
        pCVar6 = *(CBaseEdict **)(pCVar14 + 0x30);
        if (pCVar6 != (CBaseEdict *)0x0) {
          *(uint *)pCVar6 = *(uint *)pCVar6 | 0x101;
          iVar10 = CBaseEdict::GetChangeAccessor(pCVar6);
          *(undefined2 *)(iVar10 + 2) = 0;
        }
      }
      else {
        pCVar14[0x70] = (CSprite)((byte)pCVar14[0x70] | 1);
      }
      pCVar14[0x121] = SUB41(uVar2,0);
    }
    local_2c = SUB41(uVar5,0);
    local_28 = SUB41(uVar4,0);
    if (local_2c != pCVar14[0x124]) {
      if (pCVar14[0x6c] == (CSprite)0x0) {
        pCVar6 = *(CBaseEdict **)(pCVar14 + 0x30);
        if (pCVar6 != (CBaseEdict *)0x0) {
          *(uint *)pCVar6 = *(uint *)pCVar6 | 0x101;
          iVar10 = CBaseEdict::GetChangeAccessor(pCVar6);
          *(undefined2 *)(iVar10 + 2) = 0;
        }
      }
      else {
        pCVar14[0x70] = (CSprite)((byte)pCVar14[0x70] | 1);
      }
      pCVar14[0x124] = local_2c;
    }
    if (local_28 != pCVar14[0x125]) {
      if (pCVar14[0x6c] == (CSprite)0x0) {
        pCVar6 = *(CBaseEdict **)(pCVar14 + 0x30);
        if (pCVar6 != (CBaseEdict *)0x0) {
          *(uint *)pCVar6 = *(uint *)pCVar6 | 0x101;
          iVar10 = CBaseEdict::GetChangeAccessor(pCVar6);
          *(undefined2 *)(iVar10 + 2) = 0;
        }
      }
      else {
        pCVar14[0x70] = (CSprite)((byte)pCVar14[0x70] | 1);
      }
      pCVar14[0x125] = local_28;
    }
    if (SUB41(uVar3,0) != pCVar14[0x126]) {
      if (pCVar14[0x6c] == (CSprite)0x0) {
        pCVar6 = *(CBaseEdict **)(pCVar14 + 0x30);
        if (pCVar6 != (CBaseEdict *)0x0) {
          *(uint *)pCVar6 = *(uint *)pCVar6 | 0x101;
          iVar10 = CBaseEdict::GetChangeAccessor(pCVar6);
          *(undefined2 *)(iVar10 + 2) = 0;
        }
      }
      else {
        pCVar14[0x70] = (CSprite)((byte)pCVar14[0x70] | 1);
      }
      pCVar14[0x126] = SUB41(uVar3,0);
    }
    CSprite::SetBrightness(pCVar14,iVar11,0.0);
    if (pCVar14[0x120] != (CSprite)0x0) {
      if (pCVar14[0x6c] == (CSprite)0x0) {
        pCVar6 = *(CBaseEdict **)(pCVar14 + 0x30);
        if (pCVar6 != (CBaseEdict *)0x0) {
          *(uint *)pCVar6 = *(uint *)pCVar6 | 0x101;
          iVar11 = CBaseEdict::GetChangeAccessor(pCVar6);
          *(undefined2 *)(iVar11 + 2) = 0;
        }
      }
      else {
        pCVar14[0x70] = (CSprite)((byte)pCVar14[0x70] | 1);
      }
      pCVar14[0x120] = (CSprite)0x0;
    }
    uVar1 = *(uint *)(param_1 + 0x84);
    pCVar14 = (CSprite *)0x0;
    if (((uVar1 != 0xffffffff) &&
        (puVar13 = g_pEntityList + (uVar1 & 0xfff) * 0x10, puVar13 != (undefined *)0xfffffffc)) &&
       (*(uint *)(puVar13 + 8) == uVar1 >> 0xc)) {
      pCVar14 = *(CSprite **)(puVar13 + 4);
    }
    CSprite::SetScale(pCVar14,*(float *)(param_1 + 0x1a0),0.0);
    uVar1 = *(uint *)(param_1 + 0x84);
    pCVar14 = (CSprite *)0x0;
    if (((uVar1 != 0xffffffff) &&
        (puVar13 = g_pEntityList + (uVar1 & 0xfff) * 0x10, puVar13 != (undefined *)0xfffffffc)) &&
       (*(uint *)(puVar13 + 8) == uVar1 >> 0xc)) {
      pCVar14 = *(CSprite **)(puVar13 + 4);
    }
    pCVar9 = (CBaseEntity *)0x0;
    CSprite::TurnOn(pCVar14);
    iVar11 = CBaseAnimating::LookupAttachment((CBaseAnimating *)this,(char *)(param_1 + 0xa0));
    uVar1 = *(uint *)(param_1 + 0x84);
    if (((uVar1 != 0xffffffff) &&
        (puVar13 = g_pEntityList + (uVar1 & 0xfff) * 0x10, puVar13 != (undefined *)0xfffffffc)) &&
       (*(uint *)(puVar13 + 8) == uVar1 >> 0xc)) {
      pCVar9 = *(CBaseEntity **)(puVar13 + 4);
    }
    if (this != (CEnvEffectsScript *)0x0) {
      uVar1 = *(uint *)(pCVar9 + 0x440);
      if ((((uVar1 == 0xffffffff) ||
           (puVar13 = g_pEntityList + (uVar1 & 0xfff) * 0x10, puVar13 == (undefined *)0xfffffffc))
          || (*(uint *)(puVar13 + 8) != uVar1 >> 0xc)) ||
         (this != *(CEnvEffectsScript **)(puVar13 + 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)