L L4D2node

CTerrorPlayerAnimState::DoAnimationEvent

0x005182d0 · 2720 bytes · __thiscall

_ZN22CTerrorPlayerAnimState16DoAnimationEventE17PlayerAnimEvent_ti

Decompiled

undefined (3 params)

/* CTerrorPlayerAnimState::DoAnimationEvent(PlayerAnimEvent_t, int) */

void __thiscall
CTerrorPlayerAnimState::DoAnimationEvent(CTerrorPlayerAnimState *param_1,int param_2,int param_3)

{
  code *pcVar1;
  CBaseEntity *pCVar2;
  char cVar3;
  undefined4 uVar4;
  int iVar5;
  int iVar6;
  int *piVar7;
  uint uVar8;
  CBaseCombatCharacter *pCVar9;
  undefined *puVar10;
  bool bVar11;
  bool bVar12;
  
  cVar3 = CTerrorGameRules::IsInIntro(g_pGameRules);
  if (cVar3 != '\0') {
    return;
  }
  pcVar1 = *(code **)(*(int *)param_1 + 0x1c);
  uVar4 = CMultiPlayerAnimState::GetMainActivity((CMultiPlayerAnimState *)param_1);
  iVar5 = (*pcVar1)(param_1,uVar4);
  bVar11 = iVar5 != 0xc;
  bVar12 = iVar5 != 0x2d;
  switch(param_2) {
  case 4:
  case 5:
  case 6:
  case 0x26:
    if (param_1[0x156] != (CTerrorPlayerAnimState)0x0) {
      return;
    }
    piVar7 = (int *)CCSPlayer::GetActiveCSWeapon(*(CCSPlayer **)(param_1 + 0x118));
    iVar5 = (**(code **)(*piVar7 + 0x61c))(piVar7,param_2,iVar5);
    goto LAB_005183a8;
  case 7:
    param_1[0xf8] = (CTerrorPlayerAnimState)0x1;
    break;
  case 8:
    pCVar2 = *(CBaseEntity **)(param_1 + 0x118);
    iVar5 = CBaseEntity::GetTeamNumber(pCVar2);
    if (((iVar5 == 3) && (iVar5 = (**(code **)(*(int *)pCVar2 + 0x544))(pCVar2), iVar5 == 3)) &&
       (param_3 == 1)) {
      CMultiPlayerAnimState::StartGesture((CMultiPlayerAnimState *)param_1,2,0x2e5,0);
    }
    else {
      iVar5 = CBaseEntity::GetTeamNumber(*(CBaseEntity **)(param_1 + 0x118));
      cVar3 = IsASurvivorTeam(iVar5);
      if (cVar3 != '\0') {
        CMultiPlayerAnimState::StartGesture((CMultiPlayerAnimState *)param_1,2,0x296,0);
      }
    }
    break;
  default:
    CMultiPlayerAnimState::DoAnimationEvent();
    return;
  case 10:
    param_1[0x155] = (CTerrorPlayerAnimState)0x1;
    break;
  case 0x12:
    goto switchD_00518338_caseD_12;
  case 0x20:
  case 0x42:
    cVar3 = CMultiPlayerAnimState::IsGestureSlotActive((CMultiPlayerAnimState *)param_1,0);
    if (cVar3 == '\0') {
      CMultiPlayerAnimState::StartGesture((CMultiPlayerAnimState *)param_1,0,param_3,0);
    }
    break;
  case 0x21:
  case 0x22:
  case 0x23:
  case 0x24:
  case 0x25:
  case 0x28:
  case 0x29:
    iVar6 = CBaseEntity::GetTeamNumber(*(CBaseEntity **)(param_1 + 0x118));
    if (iVar6 != 3) {
      if ((*(CCSPlayer **)(param_1 + 0x118))[0x33bd] != (CCSPlayer)0x0) {
        return;
      }
      piVar7 = (int *)CCSPlayer::GetActiveCSWeapon(*(CCSPlayer **)(param_1 + 0x118));
      iVar5 = (**(code **)(*piVar7 + 0x618))(piVar7,param_2,iVar5);
      goto joined_r0x0051882a;
    }
    if (param_2 == 0x22) {
      cVar3 = CBaseCombatCharacter::IsA(*(CBaseCombatCharacter **)(param_1 + 0x118),8);
      iVar5 = 0x2fb;
      if (cVar3 == '\0') goto LAB_00518ab2;
    }
    else if (param_2 == 0x29) {
      cVar3 = CBaseCombatCharacter::IsA(*(CBaseCombatCharacter **)(param_1 + 0x118),1);
      if ((cVar3 == '\0') &&
         (cVar3 = CBaseCombatCharacter::IsA(*(CBaseCombatCharacter **)(param_1 + 0x118),2),
         cVar3 == '\0')) {
        return;
      }
      iVar5 = 0x2b7;
    }
    else {
LAB_00518ab2:
      cVar3 = CBaseCombatCharacter::IsA(*(CBaseCombatCharacter **)(param_1 + 0x118),8);
      iVar5 = (-(uint)(cVar3 == '\0') & 0xffffff4f) + 0x316;
    }
    goto LAB_005183a8;
  case 0x27:
    param_1[0x163] = (CTerrorPlayerAnimState)0x1;
    break;
  case 0x2a:
  case 0x2b:
  case 0x2c:
  case 0x2d:
    uVar8 = -(uint)(bVar11 && bVar12);
    if (param_2 == 0x2c) {
      iVar5 = (uVar8 & 0xfffffffd) + 0x225;
    }
    else if (param_2 == 0x2d) {
      iVar5 = uVar8 + 0x227;
    }
    else if (param_2 == 0x2b) {
      iVar5 = (uVar8 & 0xfffffffd) + 0x224;
    }
    else {
      iVar5 = (uVar8 & 0xfffffffd) + 0x223;
    }
    goto LAB_005183d3;
  case 0x2e:
  case 0x36:
  case 0x38:
    if (param_1[0x156] == (CTerrorPlayerAnimState)0x0) {
      return;
    }
    param_1[0x156] = (CTerrorPlayerAnimState)0x0;
    goto switchD_00518338_caseD_12;
  case 0x32:
    iVar5 = 0x22c - (uint)(bVar11 && bVar12);
LAB_005183d3:
    param_1[0x156] = (CTerrorPlayerAnimState)0x1;
    goto LAB_005183a8;
  case 0x33:
    param_1[0x157] = (CTerrorPlayerAnimState)0x1;
    break;
  case 0x34:
    param_1[0x156] = (CTerrorPlayerAnimState)0x1;
    iVar5 = 0x230 - (uint)(bVar11 && bVar12);
    goto LAB_005183a8;
  case 0x35:
    param_1[0x156] = (CTerrorPlayerAnimState)0x1;
    CMultiPlayerAnimState::StartGesture((CMultiPlayerAnimState *)param_1,0,0x231,0);
    break;
  case 0x37:
    param_1[0x156] = (CTerrorPlayerAnimState)0x1;
    CMultiPlayerAnimState::StartGesture((CMultiPlayerAnimState *)param_1,0,0x232,0);
    break;
  case 0x39:
  case 0x3a:
    pCVar2 = *(CBaseEntity **)(param_1 + 0x118);
    if (((pCVar2 != (CBaseEntity *)0x0) && (iVar5 = CBaseEntity::GetTeamNumber(pCVar2), iVar5 == 3))
       && (iVar5 = (**(code **)(*(int *)pCVar2 + 0x544))(pCVar2), iVar5 == 8)) {
      cVar3 = (**(code **)(**(int **)(param_1 + 0x118) + 0x7e8))(*(int **)(param_1 + 0x118));
      if (cVar3 != '\0') {
        return;
      }
      iVar5 = CMultiPlayerAnimState::GetGestureSlotActivity((CMultiPlayerAnimState *)param_1,0);
      if (iVar5 == 0x2fb) {
        return;
      }
      iVar5 = CMultiPlayerAnimState::GetGestureSlotActivity((CMultiPlayerAnimState *)param_1,4);
      if (iVar5 == 0x26e) {
        return;
      }
      iVar5 = CMultiPlayerAnimState::GetGestureSlotActivity((CMultiPlayerAnimState *)param_1,4);
      if (iVar5 == 0x26d) {
        return;
      }
      iVar5 = CMultiPlayerAnimState::GetGestureSlotActivity((CMultiPlayerAnimState *)param_1,4);
      if (iVar5 == 0x26f) {
        return;
      }
      iVar5 = CMultiPlayerAnimState::GetGestureSlotActivity((CMultiPlayerAnimState *)param_1,4);
      if (iVar5 == 0x270) {
        return;
      }
    }
    cVar3 = CMultiPlayerAnimState::IsGestureSlotActive((CMultiPlayerAnimState *)param_1,4);
    if ((cVar3 != '\0') &&
       (iVar5 = CMultiPlayerAnimState::GetGestureAnimLayer((CMultiPlayerAnimState *)param_1,4),
       *(float *)(iVar5 + 0xc) <= 0.5 && *(float *)(iVar5 + 0xc) != 0.5)) {
      return;
    }
    if (param_1[0x166] != (CTerrorPlayerAnimState)0x0) {
      return;
    }
    pCVar2 = *(CBaseEntity **)(param_1 + 0x118);
    iVar5 = CBaseEntity::GetTeamNumber(pCVar2);
    if (iVar5 == 3) {
      iVar5 = (**(code **)(*(int *)pCVar2 + 0x544))(pCVar2);
      pCVar9 = *(CBaseCombatCharacter **)(param_1 + 0x118);
      if ((iVar5 != 3) || (pCVar9[0x1a90] == (CBaseCombatCharacter)0x0)) goto LAB_005186d9;
      if (6 < *(int *)(pCVar9 + 0x1838) - 1U) {
        return;
      }
      uVar8 = 1 << ((byte)(*(int *)(pCVar9 + 0x1838) - 1U) & 0x1f);
      if ((uVar8 & 0x50) == 0) {
        if ((uVar8 & 0x28) == 0) {
          if ((uVar8 & 7) == 0) {
            return;
          }
          iVar5 = (param_2 != 0x39) + 0x7f;
        }
        else {
          iVar5 = 0x81;
        }
      }
      else {
        iVar5 = 0x82;
      }
    }
    else {
      pCVar9 = *(CBaseCombatCharacter **)(param_1 + 0x118);
LAB_005186d9:
      iVar5 = 0x2b6;
      if (pCVar9[0x39f1] == (CBaseCombatCharacter)0x0) {
        cVar3 = CBaseCombatCharacter::IsA(pCVar9,8);
        if (cVar3 == '\0') {
          iVar5 = 0x2b5;
        }
        else {
          switch(*(undefined4 *)(*(int *)(param_1 + 0x118) + 0x1838)) {
          case 1:
          case 2:
            iVar5 = 0x75;
            break;
          case 3:
          case 6:
          case 7:
            iVar5 = 0x76;
            break;
          case 4:
            iVar5 = 0x77;
            break;
          case 5:
            iVar5 = 0x78;
            break;
          default:
            goto switchD_00518d16_default;
          }
        }
      }
    }
    CMultiPlayerAnimState::StartGesture((CMultiPlayerAnimState *)param_1,4,iVar5,0);
    break;
  case 0x3b:
    iVar6 = CCSPlayer::GetActiveCSWeapon(*(CCSPlayer **)(param_1 + 0x118));
    if ((iVar6 != 0) &&
       (piVar7 = (int *)__dynamic_cast(iVar6,&CWeaponCSBase::typeinfo,&CBaseCSGrenade::typeinfo,0),
       piVar7 != (int *)0x0)) {
      uVar4 = (**(code **)(*piVar7 + 0x700))(piVar7,iVar5);
      CMultiPlayerAnimState::StartGesture((CMultiPlayerAnimState *)param_1,1,uVar4,0);
    }
    break;
  case 0x3d:
    iVar6 = CCSPlayer::GetActiveCSWeapon(*(CCSPlayer **)(param_1 + 0x118));
    if (iVar6 == 0) {
      return;
    }
    piVar7 = (int *)__dynamic_cast(iVar6,&CWeaponCSBase::typeinfo,&CBaseCSGrenade::typeinfo,0);
    if (piVar7 == (int *)0x0) {
      return;
    }
    iVar5 = (**(code **)(*piVar7 + 0x704))(piVar7,iVar5);
    goto LAB_005183a8;
  case 0x3f:
    param_2 = 1;
    goto LAB_0051835e;
  case 0x40:
    CMultiPlayerAnimState::StartGesture((CMultiPlayerAnimState *)param_1,0,699,0);
    break;
  case 0x41:
    piVar7 = (int *)CCSPlayer::GetActiveCSWeapon(*(CCSPlayer **)(param_1 + 0x118));
    if (piVar7 == (int *)0x0) {
      return;
    }
    pcVar1 = *(code **)(*(int *)param_1 + 0x1c);
    uVar4 = CMultiPlayerAnimState::GetMainActivity((CMultiPlayerAnimState *)param_1);
    uVar4 = (*pcVar1)(param_1,uVar4);
    iVar5 = (**(code **)(*piVar7 + 0x620))(piVar7,param_2,uVar4);
joined_r0x0051882a:
    if (iVar5 == -1) {
      return;
    }
LAB_005183a8:
    CMultiPlayerAnimState::StartGesture((CMultiPlayerAnimState *)param_1,0,iVar5,0);
    break;
  case 0x44:
    CMultiPlayerAnimState::StopAllGestures((CMultiPlayerAnimState *)param_1);
    uVar8 = *(uint *)(*(int *)(param_1 + 0x118) + 0x3e64);
    if ((((uVar8 != 0xffffffff) &&
         (puVar10 = g_pEntityList + (uVar8 & 0xfff) * 0x10, puVar10 != (undefined *)0xfffffffc)) &&
        (*(uint *)(puVar10 + 8) == uVar8 >> 0xc)) && (*(int *)(puVar10 + 4) != 0)) {
      param_3 = param_3 + 4;
    }
    *(int *)(param_1 + 0x17c) = param_3;
    break;
  case 0x45:
    *(undefined4 *)(param_1 + 0x17c) = 0xffffffff;
    break;
  case 0x46:
    param_1[0x160] = (CTerrorPlayerAnimState)0x1;
    break;
  case 0x47:
    param_1[0x168] = (CTerrorPlayerAnimState)0x1;
    break;
  case 0x48:
    param_1[0x168] = (CTerrorPlayerAnimState)0x0;
    break;
  case 0x49:
    param_1[0x169] = (CTerrorPlayerAnimState)0x1;
    break;
  case 0x4a:
    param_1[0x169] = (CTerrorPlayerAnimState)0x0;
    param_1[0x16a] = (CTerrorPlayerAnimState)0x1;
    break;
  case 0x4b:
    CMultiPlayerAnimState::StartGesture((CMultiPlayerAnimState *)param_1,0,0x218,0);
    break;
  case 0x4c:
    CTerrorPlayer::CancelStagger(*(CTerrorPlayer **)(param_1 + 0x118));
    param_1[0x15e] = (CTerrorPlayerAnimState)0x0;
    param_1[0x158] = (CTerrorPlayerAnimState)0x1;
    break;
  case 0x4d:
    CTerrorPlayer::CancelStagger(*(CTerrorPlayer **)(param_1 + 0x118));
    CMultiPlayerAnimState::StopAllGestures((CMultiPlayerAnimState *)param_1);
    (**(code **)(*(int *)param_1 + 0x38))(param_1);
    param_1[0x159] = (CTerrorPlayerAnimState)0x1;
    param_1[0x15c] = (CTerrorPlayerAnimState)0x0;
    param_1[0x158] = (CTerrorPlayerAnimState)0x0;
    break;
  case 0x4e:
    CTerrorPlayer::CancelStagger(*(CTerrorPlayer **)(param_1 + 0x118));
    CMultiPlayerAnimState::StopAllGestures((CMultiPlayerAnimState *)param_1);
    param_1[0x159] = (CTerrorPlayerAnimState)0x0;
    param_1[0x15c] = (CTerrorPlayerAnimState)0x0;
    param_1[0x15d] = (CTerrorPlayerAnimState)0x1;
    param_1[0x158] = (CTerrorPlayerAnimState)0x0;
    param_1[0x15a] = (CTerrorPlayerAnimState)0x0;
    param_1[0x15b] = (CTerrorPlayerAnimState)0x0;
    break;
  case 0x4f:
    CTerrorPlayer::CancelStagger(*(CTerrorPlayer **)(param_1 + 0x118));
    param_1[0x15e] = (CTerrorPlayerAnimState)0x1;
    break;
  case 0x50:
    *(undefined4 *)(param_1 + 0x17c) = 0xffffffff;
    param_1[0x15a] = (CTerrorPlayerAnimState)0x1;
    break;
  case 0x51:
    param_1[0x15b] = (CTerrorPlayerAnimState)0x1;
    break;
  case 0x52:
    param_1[0x164] = (CTerrorPlayerAnimState)0x1;
    break;
  case 0x54:
    param_1[0x165] = (CTerrorPlayerAnimState)0x1;
    break;
  case 0x55:
    CTerrorPlayer::CancelStagger(*(CTerrorPlayer **)(param_1 + 0x118));
    param_1[0x166] = (CTerrorPlayerAnimState)0x1;
    break;
  case 0x56:
    CTerrorPlayer::CancelStagger(*(CTerrorPlayer **)(param_1 + 0x118));
    param_1[0x161] = (CTerrorPlayerAnimState)0x1;
    break;
  case 0x57:
    CMultiPlayerAnimState::StartGesture((CMultiPlayerAnimState *)param_1,0,0x2ed,0);
    break;
  case 0x58:
    param_1[0x167] = (CTerrorPlayerAnimState)0x1;
    param_1[0x16b] = (CTerrorPlayerAnimState)0x0;
    param_1[0x16c] = (CTerrorPlayerAnimState)0x0;
    break;
  case 0x59:
    param_1[0x167] = (CTerrorPlayerAnimState)0x1;
    param_1[0x16b] = (CTerrorPlayerAnimState)0x1;
    param_1[0x16c] = (CTerrorPlayerAnimState)0x0;
    break;
  case 0x5a:
    param_1[0x167] = (CTerrorPlayerAnimState)0x1;
    param_1[0x16b] = (CTerrorPlayerAnimState)0x0;
    param_1[0x16c] = (CTerrorPlayerAnimState)0x1;
    break;
  case 0x5b:
    param_1[0x167] = (CTerrorPlayerAnimState)0x0;
    param_1[0x16b] = (CTerrorPlayerAnimState)0x0;
    param_1[0x16c] = (CTerrorPlayerAnimState)0x0;
    break;
  case 0x5c:
    CTerrorPlayer::CancelStagger(*(CTerrorPlayer **)(param_1 + 0x118));
    param_1[0x162] = (CTerrorPlayerAnimState)0x1;
    break;
  case 0x5d:
    *(int *)(param_1 + 0x170) = param_3;
    break;
  case 0x5e:
    *(int *)(param_1 + 0x174) = param_3;
    break;
  case 0x5f:
    *(int *)(param_1 + 0x178) = param_3;
    break;
  case 0x60:
    param_1[0x15f] = (CTerrorPlayerAnimState)0x1;
    param_1[0x161] = (CTerrorPlayerAnimState)0x0;
    break;
  case 0x62:
    iVar5 = CBaseEntity::GetTeamNumber(*(CBaseEntity **)(param_1 + 0x118));
    cVar3 = IsASurvivorTeam(iVar5);
    if (cVar3 != '\0') {
      CMultiPlayerAnimState::StartGesture((CMultiPlayerAnimState *)param_1,4,0x243,0);
    }
  }
switchD_00518d16_default:
  return;
switchD_00518338_caseD_12:
  param_2 = 0;
LAB_0051835e:
  CMultiPlayerAnimState::StopGesture((CMultiPlayerAnimState *)param_1,param_2,0.0);
  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)