L L4D2node

CEnvEffectsScript::HandleAnimEvent

0x0068f430 · 1789 bytes · __thiscall

_ZN17CEnvEffectsScript15HandleAnimEventEP11animevent_t

Decompiled

undefined (2 params)

/* CEnvEffectsScript::HandleAnimEvent(animevent_t*) */

void __thiscall CEnvEffectsScript::HandleAnimEvent(CEnvEffectsScript *this,animevent_t *param_1)

{
  float fVar1;
  uint uVar2;
  CBaseEdict *pCVar3;
  int iVar4;
  uint uVar5;
  CEffectScriptElement *pCVar6;
  int iVar7;
  int iVar8;
  CBaseEntity *pCVar9;
  undefined *puVar10;
  undefined *puVar11;
  CSprite *pCVar12;
  undefined1 local_34 [12];
  Vector local_28 [24];
  
  if (*(int *)param_1 == 0x12) {
    pCVar6 = (CEffectScriptElement *)GetScriptElementByName(this,*(char **)(param_1 + 4));
    if (pCVar6 != (CEffectScriptElement *)0x0) {
      if (*(int *)(pCVar6 + 0x88) == 1) {
        TrailEffectEvent(this,pCVar6);
      }
      else if (*(int *)(pCVar6 + 0x88) == 2) {
        SpriteEffectEvent(this,pCVar6);
      }
    }
  }
  else if (*(int *)param_1 == 0x13) {
    iVar4 = GetScriptElementByName(this,*(char **)(param_1 + 4));
    if ((iVar4 != 0) && (*(char *)(iVar4 + 0x1ad) != '\0')) {
      *(undefined1 *)(iVar4 + 0x1ad) = 0;
      if (*(int *)(iVar4 + 0x88) == 1) {
        if (*(char *)(iVar4 + 0x1ac) != '\0') {
          uVar5 = *(uint *)(iVar4 + 0x80);
          iVar8 = 0;
          if (((uVar5 != 0xffffffff) &&
              (puVar10 = g_pEntityList + (uVar5 & 0xfff) * 0x10, puVar10 != (undefined *)0xfffffffc)
              ) && (*(uint *)(puVar10 + 8) == uVar5 >> 0xc)) {
            iVar8 = *(int *)(puVar10 + 4);
          }
          CBaseAnimating::GetAttachment
                    ((CBaseAnimating *)this,*(int *)(iVar8 + 0x444),local_28,(Vector *)0x0,
                     (Vector *)0x0,(Vector *)0x0);
          uVar5 = *(uint *)(iVar4 + 0x80);
          pCVar9 = (CBaseEntity *)0x0;
          if (((uVar5 != 0xffffffff) &&
              (puVar10 = g_pEntityList + (uVar5 & 0xfff) * 0x10, puVar10 != (undefined *)0xfffffffc)
              ) && (*(uint *)(puVar10 + 8) == uVar5 >> 0xc)) {
            pCVar9 = *(CBaseEntity **)(puVar10 + 4);
          }
          iVar8 = 0;
          CBaseEntity::StopFollowingEntity(pCVar9);
          puVar10 = g_pEntityList;
          uVar5 = *(uint *)(iVar4 + 0x80);
          if (((uVar5 != 0xffffffff) &&
              (puVar11 = g_pEntityList + (uVar5 & 0xfff) * 0x10, puVar11 != (undefined *)0xfffffffc)
              ) && (*(uint *)(puVar11 + 8) == uVar5 >> 0xc)) {
            iVar8 = *(int *)(puVar11 + 4);
          }
          uVar2 = *(uint *)(iVar8 + 0x440);
          if ((((uVar2 != 0xffffffff) &&
               (puVar11 = g_pEntityList + (uVar2 & 0xfff) * 0x10, puVar11 != (undefined *)0xfffffffc
               )) && (*(uint *)(puVar11 + 8) == uVar2 >> 0xc)) && (*(int *)(puVar11 + 4) != 0)) {
            if (*(char *)(iVar8 + 0x6c) == '\0') {
              pCVar3 = *(CBaseEdict **)(iVar8 + 0x30);
              if (pCVar3 != (CBaseEdict *)0x0) {
                *(uint *)pCVar3 = *(uint *)pCVar3 | 0x101;
                iVar7 = CBaseEdict::GetChangeAccessor(pCVar3);
                *(undefined2 *)(iVar7 + 2) = 0;
                puVar10 = g_pEntityList;
              }
            }
            else {
              *(byte *)(iVar8 + 0x70) = *(byte *)(iVar8 + 0x70) | 1;
            }
            *(undefined4 *)(iVar8 + 0x440) = 0xffffffff;
            uVar5 = *(uint *)(iVar4 + 0x80);
          }
          iVar8 = 0;
          if (((uVar5 != 0xffffffff) &&
              (puVar11 = puVar10 + (uVar5 & 0xfff) * 0x10, puVar11 != (undefined *)0xfffffffc)) &&
             (*(uint *)(puVar11 + 8) == uVar5 >> 0xc)) {
            iVar8 = *(int *)(puVar11 + 4);
          }
          if (*(int *)(iVar8 + 0x444) != 0) {
            if (*(char *)(iVar8 + 0x6c) == '\0') {
              pCVar3 = *(CBaseEdict **)(iVar8 + 0x30);
              if (pCVar3 != (CBaseEdict *)0x0) {
                *(uint *)pCVar3 = *(uint *)pCVar3 | 0x101;
                iVar7 = CBaseEdict::GetChangeAccessor(pCVar3);
                *(undefined2 *)(iVar7 + 2) = 0;
                puVar10 = g_pEntityList;
              }
            }
            else {
              *(byte *)(iVar8 + 0x70) = *(byte *)(iVar8 + 0x70) | 1;
            }
            *(undefined4 *)(iVar8 + 0x444) = 0;
            uVar5 = *(uint *)(iVar4 + 0x80);
          }
          pCVar9 = (CBaseEntity *)0x0;
          if (((uVar5 != 0xffffffff) &&
              (puVar10 = puVar10 + (uVar5 & 0xfff) * 0x10, puVar10 != (undefined *)0xfffffffc)) &&
             (*(uint *)(puVar10 + 8) == uVar5 >> 0xc)) {
            pCVar9 = *(CBaseEntity **)(puVar10 + 4);
          }
          CBaseEntity::SetAbsOrigin(pCVar9,local_28);
        }
        uVar5 = *(uint *)(iVar4 + 0x80);
        fVar1 = *(float *)(iVar4 + 0x1a4);
        if (((uVar5 == 0xffffffff) ||
            (puVar10 = g_pEntityList + (uVar5 & 0xfff) * 0x10, puVar10 == (undefined *)0xfffffffc))
           || (*(uint *)(puVar10 + 8) != uVar5 >> 0xc)) {
          pCVar12 = (CSprite *)0x0;
        }
        else {
          pCVar12 = *(CSprite **)(puVar10 + 4);
        }
        CSprite::SetBrightness(pCVar12,0,fVar1);
        CBaseEntity::ThinkSet
                  ((_func_void *)local_34,(float)pCVar12,(char *)CSprite::AnimateUntilDead);
        iVar8 = gpGlobals;
        *(float *)(pCVar12 + 0x450) = fVar1 + *(float *)(gpGlobals + 0xc);
        CBaseEntity::SetNextThink((CBaseEntity *)pCVar12,*(float *)(iVar8 + 0xc),(char *)0x0);
        *(undefined4 *)(iVar4 + 0x80) = 0xffffffff;
      }
      else if (*(int *)(iVar4 + 0x88) == 2) {
        if (*(char *)(iVar4 + 0x1ac) != '\0') {
          uVar5 = *(uint *)(iVar4 + 0x84);
          iVar8 = 0;
          if (((uVar5 != 0xffffffff) &&
              (puVar10 = g_pEntityList + (uVar5 & 0xfff) * 0x10, puVar10 != (undefined *)0xfffffffc)
              ) && (*(uint *)(puVar10 + 8) == uVar5 >> 0xc)) {
            iVar8 = *(int *)(puVar10 + 4);
          }
          CBaseAnimating::GetAttachment
                    ((CBaseAnimating *)this,*(int *)(iVar8 + 0x444),local_28,(Vector *)0x0,
                     (Vector *)0x0,(Vector *)0x0);
          uVar5 = *(uint *)(iVar4 + 0x84);
          pCVar9 = (CBaseEntity *)0x0;
          if (((uVar5 != 0xffffffff) &&
              (puVar10 = g_pEntityList + (uVar5 & 0xfff) * 0x10, puVar10 != (undefined *)0xfffffffc)
              ) && (*(uint *)(puVar10 + 8) == uVar5 >> 0xc)) {
            pCVar9 = *(CBaseEntity **)(puVar10 + 4);
          }
          iVar8 = 0;
          CBaseEntity::StopFollowingEntity(pCVar9);
          puVar10 = g_pEntityList;
          uVar5 = *(uint *)(iVar4 + 0x84);
          if (((uVar5 != 0xffffffff) &&
              (puVar11 = g_pEntityList + (uVar5 & 0xfff) * 0x10, puVar11 != (undefined *)0xfffffffc)
              ) && (*(uint *)(puVar11 + 8) == uVar5 >> 0xc)) {
            iVar8 = *(int *)(puVar11 + 4);
          }
          uVar2 = *(uint *)(iVar8 + 0x440);
          if (((uVar2 != 0xffffffff) &&
              (puVar11 = g_pEntityList + (uVar2 & 0xfff) * 0x10, puVar11 != (undefined *)0xfffffffc)
              ) && ((*(uint *)(puVar11 + 8) == uVar2 >> 0xc && (*(int *)(puVar11 + 4) != 0)))) {
            if (*(char *)(iVar8 + 0x6c) == '\0') {
              pCVar3 = *(CBaseEdict **)(iVar8 + 0x30);
              if (pCVar3 != (CBaseEdict *)0x0) {
                *(uint *)pCVar3 = *(uint *)pCVar3 | 0x101;
                iVar7 = CBaseEdict::GetChangeAccessor(pCVar3);
                *(undefined2 *)(iVar7 + 2) = 0;
                puVar10 = g_pEntityList;
              }
            }
            else {
              *(byte *)(iVar8 + 0x70) = *(byte *)(iVar8 + 0x70) | 1;
            }
            *(undefined4 *)(iVar8 + 0x440) = 0xffffffff;
            uVar5 = *(uint *)(iVar4 + 0x84);
          }
          iVar8 = 0;
          if (((uVar5 != 0xffffffff) &&
              (puVar11 = puVar10 + (uVar5 & 0xfff) * 0x10, puVar11 != (undefined *)0xfffffffc)) &&
             (*(uint *)(puVar11 + 8) == uVar5 >> 0xc)) {
            iVar8 = *(int *)(puVar11 + 4);
          }
          if (*(int *)(iVar8 + 0x444) != 0) {
            if (*(char *)(iVar8 + 0x6c) == '\0') {
              pCVar3 = *(CBaseEdict **)(iVar8 + 0x30);
              if (pCVar3 != (CBaseEdict *)0x0) {
                *(uint *)pCVar3 = *(uint *)pCVar3 | 0x101;
                iVar7 = CBaseEdict::GetChangeAccessor(pCVar3);
                *(undefined2 *)(iVar7 + 2) = 0;
                puVar10 = g_pEntityList;
              }
            }
            else {
              *(byte *)(iVar8 + 0x70) = *(byte *)(iVar8 + 0x70) | 1;
            }
            *(undefined4 *)(iVar8 + 0x444) = 0;
            uVar5 = *(uint *)(iVar4 + 0x84);
          }
          pCVar9 = (CBaseEntity *)0x0;
          if (((uVar5 != 0xffffffff) &&
              (puVar10 = puVar10 + (uVar5 & 0xfff) * 0x10, puVar10 != (undefined *)0xfffffffc)) &&
             (*(uint *)(puVar10 + 8) == uVar5 >> 0xc)) {
            pCVar9 = *(CBaseEntity **)(puVar10 + 4);
          }
          CBaseEntity::SetAbsOrigin(pCVar9,local_28);
        }
        uVar5 = *(uint *)(iVar4 + 0x84);
        fVar1 = *(float *)(iVar4 + 0x1a4);
        if (((uVar5 == 0xffffffff) ||
            (puVar10 = g_pEntityList + (uVar5 & 0xfff) * 0x10, puVar10 == (undefined *)0xfffffffc))
           || (*(uint *)(puVar10 + 8) != uVar5 >> 0xc)) {
          pCVar12 = (CSprite *)0x0;
        }
        else {
          pCVar12 = *(CSprite **)(puVar10 + 4);
        }
        CSprite::SetBrightness(pCVar12,0,fVar1);
        CBaseEntity::ThinkSet
                  ((_func_void *)local_34,(float)pCVar12,(char *)CSprite::AnimateUntilDead);
        iVar8 = gpGlobals;
        *(float *)(pCVar12 + 0x450) = fVar1 + *(float *)(gpGlobals + 0xc);
        CBaseEntity::SetNextThink((CBaseEntity *)pCVar12,*(float *)(iVar8 + 0xc),(char *)0x0);
        *(undefined4 *)(iVar4 + 0x84) = 0xffffffff;
      }
    }
  }
  else {
    CBaseAnimating::HandleAnimEvent((CBaseAnimating *)this,param_1);
  }
  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)