Advertisement
Guest User

Untitled

a guest
May 18th, 2019
122
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.  
  2. static function EventListenerReturn SecondaryPistol_Listener(Object EventData, Object EventSource, XComGameState GameState, Name EventID, Object CallbackData)
  3. {
  4.     local XComGameStateContext_Ability  AbilityContext;
  5.     local XComGameStateHistory          History;
  6.     local XComGameState_Unit            SourceUnit, TargetUnit;
  7.     local XComGameState_Ability         PrimaryAbilityState, SecondaryAbilityState;
  8.     local X2AbilityTemplate             PrimaryAbilityTemplate;
  9.     local XComGameState_Item            PrimaryWeaponItemState;
  10.     local XComGameStateContext          FindContext;
  11.     local int                           VisualizeIndex;
  12.  
  13.     //local array<StateObjectReference> PossibleTargets;
  14.     //local StateObjectReference BestTargetRef;
  15.     //local int BestTargetHP;
  16.     //local int i;
  17.     //local bool bAbilityContinues;
  18.     //
  19.  
  20.     // ==============
  21.     `LOG("Listener activated",, 'IRIPISTOL');
  22.     History = `XCOMHISTORY;
  23.     AbilityContext = XComGameStateContext_Ability(GameState.GetContext());
  24.  
  25.     if (AbilityContext != none && AbilityContext.InterruptionStatus != eInterruptionStatus_Interrupt)
  26.     {
  27.         SourceUnit = XComGameState_Unit(GameState.GetGameStateForObjectID(AbilityContext.InputContext.SourceObject.ObjectID));
  28.         TargetUnit = XComGameState_Unit(GameState.GetGameStateForObjectID(AbilityContext.InputContext.PrimaryTarget.ObjectID));
  29.         PrimaryAbilityState = XComGameState_Ability(GameState.GetGameStateForObjectID(AbilityContext.InputContext.AbilityRef.ObjectID));
  30.         SecondaryAbilityState = XComGameState_Ability(History.GetGameStateForObjectID(SourceUnit.FindAbility('PistolStandardShot_Secondary').ObjectID));
  31.          
  32.         `LOG("SourceUnit: " @ SourceUnit.GetFullName(),, 'IRIPISTOL');
  33.         `LOG("TargetUnit: " @ TargetUnit.GetFullName(),, 'IRIPISTOL');
  34.         `LOG("PrimaryAbilityState: " @ PrimaryAbilityState.GetMyTemplateName(),, 'IRIPISTOL');
  35.         `LOG("SecondaryAbilityState: " @ SecondaryAbilityState.GetMyTemplateName(),, 'IRIPISTOL');
  36.  
  37.         if (SourceUnit != none && TargetUnit != none && PrimaryAbilityState != none && SecondaryAbilityState != none)
  38.         {  
  39.             PrimaryWeaponItemState = XComGameState_Item(History.GetGameStateForObjectID(AbilityContext.InputContext.ItemObject.ObjectID));
  40.             PrimaryAbilityTemplate = PrimaryAbilityState.GetMyTemplate();
  41.  
  42.             `LOG("PrimaryWeaponItemState: " @ PrimaryWeaponItemState.GetMyTemplateName(),, 'IRIPISTOL');
  43.             `LOG("Ability template is hostile: " @ PrimaryAbilityTemplate.Hostility == eHostility_Offensive,, 'IRIPISTOL');
  44.  
  45.             //  check if the triggering ability comes from a pistol
  46.             if (class'X2DownloadableContentInfo_DualWieldedPistols'.default.PistolCategories.Find(X2WeaponTemplate(PrimaryWeaponItemState.GetMyTemplate()).WeaponCat) != INDEX_NONE)
  47.             {
  48.                 if (PrimaryAbilityTemplate.Hostility == eHostility_Offensive && //  triggering ability is offensive
  49.                 !PrimaryAbilityTemplate.IsMelee() &&    //  triggering ability is not a melee attack
  50.                 PrimaryWeaponItemState.InventorySlot == eInvSlot_PrimaryWeapon && // triggering ability comes from the primary weapon
  51.                 SourceUnit.IsEnemyUnit(TargetUnit) && TargetUnit.IsAlive()) // target is a living enemy
  52.                 {
  53.                     `LOG("Activating secondary shot",, 'IRIPISTOL');
  54.  
  55.                     //  Getting the Visualize Index for the triggering ability to pass it along for the Merge Viz function
  56.                     VisualizeIndex = GameState.HistoryIndex;
  57.                     while( FindContext.InterruptionHistoryIndex > -1 )
  58.                     {
  59.                         FindContext = History.GetGameStateFromHistory(FindContext.InterruptionHistoryIndex).GetContext();
  60.                         VisualizeIndex = FindContext.AssociatedState.HistoryIndex;
  61.                     }
  62.  
  63.                     SecondaryAbilityState.AbilityTriggerAgainstSingleTarget(TargetUnit.GetReference(), false, VisualizeIndex);
  64.                 }
  65.             }
  66.         }
  67.     }
  68.     return ELR_NoInterrupt;
  69. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement