L L4D2node

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 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)