Advertisement
shiremct

Haunt Panic Trigger

Sep 15th, 2019
1,814
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // Haunt Panic - Triggered:
  2. static function X2AbilityTemplate WOTC_APA_HauntPanic()
  3. {
  4.  
  5.     local X2AbilityTemplate                                     Template;  
  6.     local X2AbilityTrigger_EventListener                        EventListener;
  7.     local X2AbilityMultiTarget_Radius                           RadiusMultiTarget;
  8.     local X2Condition_UnitProperty                              UnitPropertyCondition;
  9.     local X2Effect_Persistent                                   PanickedEffect;
  10.  
  11.  
  12.     `CREATE_X2ABILITY_TEMPLATE(Template, 'WOTC_APA_HauntPanic');
  13.     Template.IconImage = "img:///UILibrary_WOTC_APA_Reaper.perk_Haunt";
  14.     Template.AbilitySourceName = 'eAbilitySource_Perk';
  15.     Template.eAbilityIconBehaviorHUD = EAbilityIconBehavior_NeverShow;
  16.     Template.Hostility = eHostility_Neutral;
  17.     Template.AbilityToHitCalc = default.DeadEye;
  18.     Template.AbilityTargetStyle = default.SimpleSingleTarget;
  19.     Template.bDontDisplayInAbilitySummary = true;
  20.     Template.bDisplayInUITooltip = false;
  21.     Template.bSkipFireAction = true;
  22.     Template.bShowActivation = true;
  23.     Template.bFrameEvenWhenUnitIsHidden = true;
  24.     Template.bCrossClassEligible = false;
  25.  
  26.  
  27.     // This ability fires when the unit is revealed
  28.     EventListener = new class'X2AbilityTrigger_EventListener';
  29.     EventListener.ListenerData.Deferral = ELD_OnStateSubmitted;
  30.     EventListener.ListenerData.EventID = 'UnitConcealmentBroken';
  31.     EventListener.ListenerData.EventFn = class'XComGameState_Ability'.static.AbilityTriggerEventListener_Self;
  32.     EventListener.ListenerData.Filter = eFilter_Unit;
  33.     Template.AbilityTriggers.AddItem(EventListener);
  34.  
  35.  
  36.     // Setup Multitarget attributes
  37.     RadiusMultiTarget = new class'X2AbilityMultiTarget_Radius';
  38.     RadiusMultiTarget.bIgnoreBlockingCover = true;
  39.     RadiusMultiTarget.bAllowDeadMultiTargetUnits = false;
  40.     RadiusMultiTarget.bExcludeSelfAsTargetIfWithinRadius = false;
  41.     RadiusMultiTarget.bUseWeaponRadius = false;
  42.     RadiusMultiTarget.fTargetRadius = 1.5 * (default.HAUNT_PANIC_RANGE + 0.1);
  43.     Template.AbilityMultiTargetStyle = RadiusMultiTarget;
  44.  
  45.  
  46.     // Don't apply to allies, robots, or civilians
  47.     UnitPropertyCondition = new class'X2Condition_UnitProperty';
  48.     UnitPropertyCondition.ExcludeDead = true;
  49.     UnitPropertyCondition.ExcludeRobotic = true;
  50.     UnitPropertyCondition.ExcludeFriendlyToSource = true;
  51.     UnitPropertyCondition.ExcludeHostileToSource = false;
  52.     UnitPropertyCondition.ExcludeCivilian = true;
  53.     UnitPropertyCondition.FailOnNonUnits = true;
  54.     Template.AbilityMultiTargetConditions.AddItem(UnitPropertyCondition);
  55.  
  56.  
  57.     // Create the Panic effect on the targets
  58.     PanickedEffect = class'X2StatusEffects'.static.CreatePanickedStatusEffect();
  59.     PanickedEffect.ApplyChanceFn = WOTC_APA_HauntPanicApplyChance;
  60.     //PanickedEffect.ApplyChance = default.HAUNT_PANIC_CHANCE;
  61.     Template.AddMultiTargetEffect(PanickedEffect);
  62.  
  63.    
  64.     Template.BuildNewGameStateFn = TypicalAbility_BuildGameState;
  65.     Template.BuildVisualizationFn = TypicalAbility_BuildVisualization;
  66.     return Template;
  67. }
  68.  
  69. function name WOTC_APA_HauntPanicApplyChance(const out EffectAppliedData ApplyEffectParameters, XComGameState_BaseObject kNewTargetState, XComGameState NewGameState)
  70. {
  71.     local XComGameState_Unit TargetUnit;
  72.     local name ImmuneName;
  73.     local int RandRoll;
  74.  
  75.     TargetUnit = XComGameState_Unit(kNewTargetState);
  76.     if (TargetUnit != none)
  77.     {
  78.         foreach class'X2AbilityToHitCalc_PanicCheck'.default.PanicImmunityAbilities(ImmuneName)
  79.         {
  80.             if (TargetUnit.FindAbility(ImmuneName).ObjectID != 0)
  81.             {
  82.                 return 'AA_UnitIsImmune';
  83.             }
  84.         }
  85.  
  86.         RandRoll = `SYNC_RAND(100);
  87.         if (RandRoll < default.HAUNT_PANIC_CHANCE)
  88.         {
  89.             return 'AA_Success';
  90.         }
  91.     }
  92.  
  93.     return 'AA_EffectChanceFailed';
  94. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement