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 intoaddons/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.
Signatures + Functions block. The plugin uses
DHookCreateFromConf - DHooks reads return type, this-type,
calling convention, and argument types straight from the gamedata. Less
boilerplate in the plugin, types travel with the gamedata.
Gamedata KeyValues
DHooks plugin example
Type inference is best-effort from the C signature - sanity-check the DHooks types before shipping.