Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- static function EventListenerReturn SecondaryPistol_Listener(Object EventData, Object EventSource, XComGameState GameState, Name EventID, Object CallbackData)
- {
- local XComGameStateContext_Ability AbilityContext;
- local XComGameStateHistory History;
- local XComGameState_Unit SourceUnit, TargetUnit;
- local XComGameState_Ability PrimaryAbilityState, SecondaryAbilityState;
- local X2AbilityTemplate PrimaryAbilityTemplate;
- local XComGameState_Item PrimaryWeaponItemState;
- local XComGameStateContext FindContext;
- local int VisualizeIndex;
- //local array<StateObjectReference> PossibleTargets;
- //local StateObjectReference BestTargetRef;
- //local int BestTargetHP;
- //local int i;
- //local bool bAbilityContinues;
- //
- // ==============
- `LOG("Listener activated",, 'IRIPISTOL');
- History = `XCOMHISTORY;
- AbilityContext = XComGameStateContext_Ability(GameState.GetContext());
- if (AbilityContext != none && AbilityContext.InterruptionStatus != eInterruptionStatus_Interrupt)
- {
- SourceUnit = XComGameState_Unit(GameState.GetGameStateForObjectID(AbilityContext.InputContext.SourceObject.ObjectID));
- TargetUnit = XComGameState_Unit(GameState.GetGameStateForObjectID(AbilityContext.InputContext.PrimaryTarget.ObjectID));
- PrimaryAbilityState = XComGameState_Ability(GameState.GetGameStateForObjectID(AbilityContext.InputContext.AbilityRef.ObjectID));
- SecondaryAbilityState = XComGameState_Ability(History.GetGameStateForObjectID(SourceUnit.FindAbility('PistolStandardShot_Secondary').ObjectID));
- `LOG("SourceUnit: " @ SourceUnit.GetFullName(),, 'IRIPISTOL');
- `LOG("TargetUnit: " @ TargetUnit.GetFullName(),, 'IRIPISTOL');
- `LOG("PrimaryAbilityState: " @ PrimaryAbilityState.GetMyTemplateName(),, 'IRIPISTOL');
- `LOG("SecondaryAbilityState: " @ SecondaryAbilityState.GetMyTemplateName(),, 'IRIPISTOL');
- if (SourceUnit != none && TargetUnit != none && PrimaryAbilityState != none && SecondaryAbilityState != none)
- {
- PrimaryWeaponItemState = XComGameState_Item(History.GetGameStateForObjectID(AbilityContext.InputContext.ItemObject.ObjectID));
- PrimaryAbilityTemplate = PrimaryAbilityState.GetMyTemplate();
- `LOG("PrimaryWeaponItemState: " @ PrimaryWeaponItemState.GetMyTemplateName(),, 'IRIPISTOL');
- `LOG("Ability template is hostile: " @ PrimaryAbilityTemplate.Hostility == eHostility_Offensive,, 'IRIPISTOL');
- // check if the triggering ability comes from a pistol
- if (class'X2DownloadableContentInfo_DualWieldedPistols'.default.PistolCategories.Find(X2WeaponTemplate(PrimaryWeaponItemState.GetMyTemplate()).WeaponCat) != INDEX_NONE)
- {
- if (PrimaryAbilityTemplate.Hostility == eHostility_Offensive && // triggering ability is offensive
- !PrimaryAbilityTemplate.IsMelee() && // triggering ability is not a melee attack
- PrimaryWeaponItemState.InventorySlot == eInvSlot_PrimaryWeapon && // triggering ability comes from the primary weapon
- SourceUnit.IsEnemyUnit(TargetUnit) && TargetUnit.IsAlive()) // target is a living enemy
- {
- `LOG("Activating secondary shot",, 'IRIPISTOL');
- // Getting the Visualize Index for the triggering ability to pass it along for the Merge Viz function
- VisualizeIndex = GameState.HistoryIndex;
- while( FindContext.InterruptionHistoryIndex > -1 )
- {
- FindContext = History.GetGameStateFromHistory(FindContext.InterruptionHistoryIndex).GetContext();
- VisualizeIndex = FindContext.AssociatedState.HistoryIndex;
- }
- SecondaryAbilityState.AbilityTriggerAgainstSingleTarget(TargetUnit.GetReference(), false, VisualizeIndex);
- }
- }
- }
- }
- return ELR_NoInterrupt;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement