CSceneEntity::StartEvent
0x0080fcf0 · 2230 bytes · __thiscall
_ZN12CSceneEntity10StartEventEfP12CChoreoSceneP12CChoreoEvent
Decompiled
undefined (4 params)
/* CSceneEntity::StartEvent(float, CChoreoScene*, CChoreoEvent*) */
void __thiscall
CSceneEntity::StartEvent
(CSceneEntity *this,float param_1,CChoreoScene *param_2,CChoreoEvent *param_3)
{
char cVar1;
char *pcVar2;
int iVar3;
undefined4 uVar4;
CChoreoActor *this_00;
CSceneEntity *pCVar5;
long lVar6;
undefined4 uVar7;
undefined1 *puVar8;
code *pcVar9;
longdouble lVar10;
undefined4 local_44;
undefined4 local_40;
undefined4 local_3c;
undefined1 local_38;
undefined1 local_37;
undefined1 local_36;
undefined1 local_35;
undefined1 local_34;
undefined1 local_33;
undefined1 local_32;
undefined1 local_31;
undefined4 local_30;
undefined4 local_2c;
undefined4 local_28;
undefined4 local_24;
undefined4 local_20;
pcVar2 = (char *)CChoreoEvent::GetName(param_3);
iVar3 = _V_stricmp(pcVar2,"NULL");
if (iVar3 == 0) {
uVar4 = CChoreoEvent::GetDescription(param_3);
puVar8 = &DAT_00d539c2;
if (*(undefined1 **)(this + 0x444) != (undefined1 *)0x0) {
puVar8 = *(undefined1 **)(this + 0x444);
}
Scene_Printf("%s : %8.2f: ignored %s\n",puVar8,(double)param_1,uVar4);
return;
}
this_00 = (CChoreoActor *)CChoreoEvent::GetActor(param_3);
if (this_00 != (CChoreoActor *)0x0) {
pCVar5 = (CSceneEntity *)(**(code **)(*(int *)this + 0x3e0))(this,this_00);
if (pCVar5 != (CSceneEntity *)0x0) goto LAB_0080fd84;
uVar4 = CChoreoActor::GetName(this_00);
goto LAB_00810538;
}
pCVar5 = (CSceneEntity *)0x0;
LAB_0080fd84:
uVar4 = CChoreoEvent::GetDescription(param_3);
puVar8 = &DAT_00d539c2;
if (*(undefined1 **)(this + 0x444) != (undefined1 *)0x0) {
puVar8 = *(undefined1 **)(this + 0x444);
}
Scene_Printf("%s : %8.2f: start %s\n",puVar8,(double)param_1,uVar4);
uVar4 = CChoreoEvent::GetType(param_3);
switch(uVar4) {
case 1:
if (this[0x496] != (CSceneEntity)0x0) {
return;
}
pcVar9 = *(code **)(*(int *)this + 0x3cc);
goto LAB_0080feb5;
case 2:
if ((pCVar5 != (CSceneEntity *)0x0) && (this[0x496] == (CSceneEntity)0x0)) {
(**(code **)(*(int *)this + 0x36c))(this,param_2,pCVar5,param_3);
}
break;
case 3:
if (pCVar5 == (CSceneEntity *)0x0) {
return;
}
if (this[0x496] != (CSceneEntity)0x0) {
return;
}
pcVar9 = *(code **)(*(int *)this + 1000);
uVar4 = CChoreoEvent::GetParameters(param_3);
iVar3 = (*pcVar9)(this,uVar4,pCVar5,0,0);
if (iVar3 != 0) {
(**(code **)(*(int *)this + 900))(this,param_2,pCVar5,iVar3,param_3);
return;
}
goto LAB_008105fb;
case 4:
cVar1 = CChoreoEvent::HasEndTime(param_3);
if (cVar1 == '\0') {
lVar10 = (longdouble)CChoreoEvent::GetStartTime(param_3);
CChoreoEvent::SetEndTime(param_3,(float)lVar10 + 1.0);
}
if (pCVar5 == (CSceneEntity *)0x0) {
return;
}
if (this[0x496] != (CSceneEntity)0x0) {
return;
}
iVar3 = CChoreoEvent::GetParameters3(param_3);
if ((iVar3 == 0) || (pcVar2 = (char *)CChoreoEvent::GetParameters3(param_3), *pcVar2 == '\0')) {
pcVar9 = *(code **)(*(int *)this + 1000);
uVar4 = CChoreoEvent::GetParameters(param_3);
iVar3 = (*pcVar9)(this,uVar4,pCVar5,0,1);
}
else {
pcVar9 = *(code **)(*(int *)this + 0x3ec);
uVar4 = CChoreoEvent::GetParameters3(param_3);
uVar7 = CChoreoEvent::GetParameters(param_3);
iVar3 = (*pcVar9)(this,uVar7,pCVar5,0,1,uVar4,pCVar5,pCVar5);
}
if (iVar3 != 0) {
(**(code **)(*(int *)this + 0x38c))(this,param_2,pCVar5,iVar3,param_3);
return;
}
goto LAB_008105fb;
case 5:
if (pCVar5 == (CSceneEntity *)0x0) {
return;
}
iVar3 = CChoreoEvent::GetParameters2(param_3);
if (iVar3 == 0) {
LAB_008101c4:
lVar6 = 0x50;
}
else {
pcVar2 = (char *)CChoreoEvent::GetParameters2(param_3);
lVar6 = strtol(pcVar2,(char **)0x0,10);
if (lVar6 == 0) goto LAB_008101c4;
}
(**(code **)(*(int *)this + 0x394))(this,param_2,pCVar5,param_3,lVar6);
break;
case 6:
if (pCVar5 != (CSceneEntity *)0x0) {
(**(code **)(*(int *)this + 0x37c))(this,param_2,pCVar5,param_3);
}
break;
case 7:
if (pCVar5 != (CSceneEntity *)0x0) {
(**(code **)(*(int *)this + 0x3a4))(this,param_2,pCVar5,param_3);
}
break;
case 8:
if (pCVar5 == (CSceneEntity *)0x0) {
return;
}
if (this[0x496] != (CSceneEntity)0x0) {
return;
}
pcVar9 = *(code **)(*(int *)this + 1000);
uVar4 = CChoreoEvent::GetParameters(param_3);
iVar3 = (*pcVar9)(this,uVar4,pCVar5,0,0);
if (iVar3 != 0) {
(**(code **)(*(int *)this + 0x39c))(this,param_2,pCVar5,iVar3,param_3);
return;
}
LAB_008105fb:
uVar4 = CChoreoEvent::GetParameters(param_3);
LAB_00810538:
puVar8 = &DAT_00d539c2;
if (*(undefined1 **)(this + 0x154) != (undefined1 *)0x0) {
puVar8 = *(undefined1 **)(this + 0x154);
}
Warning("CSceneEntity %s unable to find actor named \"%s\"\n",puVar8,uVar4);
break;
case 9:
if (this[0x6f8] == (CSceneEntity)0x0) {
if (pCVar5 == (CSceneEntity *)0x0) {
pCVar5 = this;
}
pcVar2 = (char *)CChoreoEvent::GetParameters(param_3);
lVar6 = strtol(pcVar2,(char **)0x0,10);
switch(lVar6) {
case 1:
COutputEvent::FireOutput
((COutputEvent *)(this + 0x540),(CBaseEntity *)pCVar5,(CBaseEntity *)this,0.0);
break;
case 2:
COutputEvent::FireOutput
((COutputEvent *)(this + 0x558),(CBaseEntity *)pCVar5,(CBaseEntity *)this,0.0);
break;
case 3:
COutputEvent::FireOutput
((COutputEvent *)(this + 0x570),(CBaseEntity *)pCVar5,(CBaseEntity *)this,0.0);
break;
case 4:
COutputEvent::FireOutput
((COutputEvent *)(this + 0x588),(CBaseEntity *)pCVar5,(CBaseEntity *)this,0.0);
break;
case 5:
COutputEvent::FireOutput
((COutputEvent *)(this + 0x5a0),(CBaseEntity *)pCVar5,(CBaseEntity *)this,0.0);
break;
case 6:
COutputEvent::FireOutput
((COutputEvent *)(this + 0x5b8),(CBaseEntity *)pCVar5,(CBaseEntity *)this,0.0);
break;
case 7:
COutputEvent::FireOutput
((COutputEvent *)(this + 0x5d0),(CBaseEntity *)pCVar5,(CBaseEntity *)this,0.0);
break;
case 8:
COutputEvent::FireOutput
((COutputEvent *)(this + 0x5e8),(CBaseEntity *)pCVar5,(CBaseEntity *)this,0.0);
break;
case 9:
COutputEvent::FireOutput
((COutputEvent *)(this + 0x600),(CBaseEntity *)pCVar5,(CBaseEntity *)this,0.0);
break;
case 10:
COutputEvent::FireOutput
((COutputEvent *)(this + 0x618),(CBaseEntity *)pCVar5,(CBaseEntity *)this,0.0);
break;
case 0xb:
COutputEvent::FireOutput
((COutputEvent *)(this + 0x630),(CBaseEntity *)pCVar5,(CBaseEntity *)this,0.0);
break;
case 0xc:
COutputEvent::FireOutput
((COutputEvent *)(this + 0x648),(CBaseEntity *)pCVar5,(CBaseEntity *)this,0.0);
break;
case 0xd:
COutputEvent::FireOutput
((COutputEvent *)(this + 0x660),(CBaseEntity *)pCVar5,(CBaseEntity *)this,0.0);
break;
case 0xe:
COutputEvent::FireOutput
((COutputEvent *)(this + 0x678),(CBaseEntity *)pCVar5,(CBaseEntity *)this,0.0);
break;
case 0xf:
COutputEvent::FireOutput
((COutputEvent *)(this + 0x690),(CBaseEntity *)pCVar5,(CBaseEntity *)this,0.0);
break;
case 0x10:
COutputEvent::FireOutput
((COutputEvent *)(this + 0x6a8),(CBaseEntity *)pCVar5,(CBaseEntity *)this,0.0);
}
}
break;
case 10:
if ((pCVar5 != (CSceneEntity *)0x0) && (this[0x496] == (CSceneEntity)0x0)) {
(**(code **)(*(int *)this + 0x374))(this,param_2,pCVar5,param_3);
}
break;
case 0xb:
if ((pCVar5 != (CSceneEntity *)0x0) && (this[0x496] == (CSceneEntity)0x0)) {
(**(code **)(*(int *)this + 0x3ac))(this,param_2,pCVar5,param_3);
}
break;
case 0xc:
(**(code **)(*(int *)this + 0x3c8))(this,param_2,param_3);
break;
case 0xd:
if (this[0x496] == (CSceneEntity)0x0) {
(**(code **)(*(int *)this + 0x3b0))(this,param_2,param_3);
}
break;
case 0xe:
if (this[0x496] != (CSceneEntity)0x0) {
return;
}
pcVar9 = *(code **)(*(int *)this + 0x3d0);
LAB_0080feb5:
uVar4 = CChoreoEvent::GetParameters(param_3);
(*pcVar9)(this,param_2,uVar4);
break;
case 0xf:
if (this[0x496] == (CSceneEntity)0x0) {
(**(code **)(*(int *)this + 0x3c0))(this,param_2,pCVar5,param_3);
}
break;
case 0x10:
iVar3 = CChoreoEvent::GetParameters(param_3);
if (iVar3 != 0) {
pcVar2 = (char *)CChoreoEvent::GetParameters(param_3);
iVar3 = V_strncmp(pcVar2,"debugtext",9);
if (iVar3 == 0) {
iVar3 = CChoreoEvent::GetParameters(param_3);
local_44 = 0xbf800000;
local_40 = 0x3f266666;
local_3c = 0;
local_38 = 0xff;
local_37 = 0xaa;
local_36 = 0;
local_35 = 0xff;
local_34 = 0xff;
local_33 = 0xaa;
local_32 = 0;
local_31 = 0xff;
local_30 = 0;
local_2c = 0;
local_28 = 0x40466666;
local_24 = 0;
local_20 = 1;
UTIL_HudMessageAll((hudtextparms_s *)&local_44,(char *)(iVar3 + 10));
return;
}
}
if (pCVar5 != (CSceneEntity *)0x0) {
(**(code **)(*(int *)this + 0x3b8))(this,param_2,pCVar5,param_3);
}
}
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.