Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Haunt Panic - Triggered:
- static function X2AbilityTemplate WOTC_APA_HauntPanic()
- {
- local X2AbilityTemplate Template;
- local X2AbilityTrigger_EventListener EventListener;
- local X2AbilityMultiTarget_Radius RadiusMultiTarget;
- local X2Condition_UnitProperty UnitPropertyCondition;
- local X2Effect_Persistent PanickedEffect;
- `CREATE_X2ABILITY_TEMPLATE(Template, 'WOTC_APA_HauntPanic');
- Template.IconImage = "img:///UILibrary_WOTC_APA_Reaper.perk_Haunt";
- Template.AbilitySourceName = 'eAbilitySource_Perk';
- Template.eAbilityIconBehaviorHUD = EAbilityIconBehavior_NeverShow;
- Template.Hostility = eHostility_Neutral;
- Template.AbilityToHitCalc = default.DeadEye;
- Template.AbilityTargetStyle = default.SimpleSingleTarget;
- Template.bDontDisplayInAbilitySummary = true;
- Template.bDisplayInUITooltip = false;
- Template.bSkipFireAction = true;
- Template.bShowActivation = true;
- Template.bFrameEvenWhenUnitIsHidden = true;
- Template.bCrossClassEligible = false;
- // This ability fires when the unit is revealed
- EventListener = new class'X2AbilityTrigger_EventListener';
- EventListener.ListenerData.Deferral = ELD_OnStateSubmitted;
- EventListener.ListenerData.EventID = 'UnitConcealmentBroken';
- EventListener.ListenerData.EventFn = class'XComGameState_Ability'.static.AbilityTriggerEventListener_Self;
- EventListener.ListenerData.Filter = eFilter_Unit;
- Template.AbilityTriggers.AddItem(EventListener);
- // Setup Multitarget attributes
- RadiusMultiTarget = new class'X2AbilityMultiTarget_Radius';
- RadiusMultiTarget.bIgnoreBlockingCover = true;
- RadiusMultiTarget.bAllowDeadMultiTargetUnits = false;
- RadiusMultiTarget.bExcludeSelfAsTargetIfWithinRadius = false;
- RadiusMultiTarget.bUseWeaponRadius = false;
- RadiusMultiTarget.fTargetRadius = 1.5 * (default.HAUNT_PANIC_RANGE + 0.1);
- Template.AbilityMultiTargetStyle = RadiusMultiTarget;
- // Don't apply to allies, robots, or civilians
- UnitPropertyCondition = new class'X2Condition_UnitProperty';
- UnitPropertyCondition.ExcludeDead = true;
- UnitPropertyCondition.ExcludeRobotic = true;
- UnitPropertyCondition.ExcludeFriendlyToSource = true;
- UnitPropertyCondition.ExcludeHostileToSource = false;
- UnitPropertyCondition.ExcludeCivilian = true;
- UnitPropertyCondition.FailOnNonUnits = true;
- Template.AbilityMultiTargetConditions.AddItem(UnitPropertyCondition);
- // Create the Panic effect on the targets
- PanickedEffect = class'X2StatusEffects'.static.CreatePanickedStatusEffect();
- PanickedEffect.ApplyChanceFn = WOTC_APA_HauntPanicApplyChance;
- //PanickedEffect.ApplyChance = default.HAUNT_PANIC_CHANCE;
- Template.AddMultiTargetEffect(PanickedEffect);
- Template.BuildNewGameStateFn = TypicalAbility_BuildGameState;
- Template.BuildVisualizationFn = TypicalAbility_BuildVisualization;
- return Template;
- }
- function name WOTC_APA_HauntPanicApplyChance(const out EffectAppliedData ApplyEffectParameters, XComGameState_BaseObject kNewTargetState, XComGameState NewGameState)
- {
- local XComGameState_Unit TargetUnit;
- local name ImmuneName;
- local int RandRoll;
- TargetUnit = XComGameState_Unit(kNewTargetState);
- if (TargetUnit != none)
- {
- foreach class'X2AbilityToHitCalc_PanicCheck'.default.PanicImmunityAbilities(ImmuneName)
- {
- if (TargetUnit.FindAbility(ImmuneName).ObjectID != 0)
- {
- return 'AA_UnitIsImmune';
- }
- }
- RandRoll = `SYNC_RAND(100);
- if (RandRoll < default.HAUNT_PANIC_CHANCE)
- {
- return 'AA_Success';
- }
- }
- return 'AA_EffectChanceFailed';
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement