Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class X2DownloadableContentInfo_DontShoot extends X2DownloadableContentInfo config(DontShoot);
- var config int STUNNED_ACTIONPOINTS_ONREVEAL;
- //var config int FORTIFY_COOLDOWN;
- //var config int FORTIFY_DEFENSE;
- static event OnPostTemplatesCreated()
- {
- SurpriseAliens();
- }
- static function SurpriseAliens()
- {
- local X2DataTemplate DataTemplate;
- local array<X2DataTemplate> DataTemplates;
- local X2CharacterTemplate CharacterTemplate;
- local X2CharacterTemplateManager Scamperers;
- local array<name> TemplateNames;
- local name Templatename;
- Scamperers = class'X2CharacterTemplateManager'.static.GetCharacterTemplateManager();
- Scamperers.GetTemplateNames(TemplateNames); // returns all character template names
- foreach TemplateNames(TemplateName) // iterates through all template names
- {
- Scamperers.FindDataTemplateAllDifficulties(TemplateName, DataTemplates); // returns array of all diffculty templates matching iterated name
- foreach DataTemplates(DataTemplate) // iterates through all difficulty templates array
- {
- CharacterTemplate = X2CharacterTemplate(DataTemplate); // this typecasts from X2DataTemplate to X2CharacterTemplate
- CharacterTemplate.Abilities.AddItem('Surprise');
- if(CharacterTemplate != none) // check
- {
- CharacterTemplate.OnRevealEventFn = SurpriseOnReveal;
- }
- }
- }
- }
- static function SurpriseOnReveal(XComGameState_Unit UnitState)
- {
- UnitState.StunnedActionPoints = default.STUNNED_ACTIONPOINTS_ONREVEAL;
- If(`TACTICALRULES.UnitActionPlayerIsAI())
- {
- }
- Else
- {
- `XEVENTMGR.TriggerEvent( 'SurpriseScamper', UnitState, UnitState,); //Triggers "surprise" ability / effect
- }
- }
- ///////////////////////////////////////////////////////////
- class X2Ability_Surprise extends X2Ability config(DontShoot);
- //These aren't used currently
- var config int SURPRISE_TURNS;
- var config int SURPRISE_MOBILITY_ADJUST;
- var config int SURPRISE_AIM_ADJUST;
- var config int SURPRISE_WILL_ADJUST;
- static function array<X2DataTemplate> CreateTemplates()
- {
- local array<X2DataTemplate> Templates;
- Templates.AddItem(AddSurprise());
- return Templates;
- }
- static function X2AbilityTemplate AddSurprise()
- {
- local X2AbilityTemplate Template;
- local X2Effect_PersistentStatChange SurpriseEffect;
- local X2AbilityCooldown Cooldown;
- local X2Condition_AbilityProperty AbilityCondition;
- local X2Condition_UnitProperty Condition_UnitProperty;
- local X2AbilityTrigger_EventListener EventListener;
- local X2Condition_UnitEffects ExcludeEffects;
- `CREATE_X2ABILITY_TEMPLATE(Template, 'Surprise');
- Template.IconImage = "img:///UILibrary_LWAlienPack.LW_AbilityDamageControl";
- Template.AbilitySourceName = 'eAbilitySource_Perk';
- Template.Hostility = eHostility_Neutral;
- Template.eAbilityIconBehaviorHUD = eAbilityIconBehavior_NeverShow;
- Template.AbilityToHitCalc = default.DeadEye;
- Template.AbilityTargetStyle = default.SelfTarget;
- Template.bShowActivation = true;
- Template.bSkipFireAction = true;
- Template.bDisplayInUITooltip = true;
- Template.bDisplayInUITacticalText = true;
- Template.AbilityShooterConditions.AddItem(default.LivingShooterProperty);
- Template.bDontDisplayInAbilitySummary = true;
- Template.AbilityConfirmSound = "TacticalUI_ActivateAbility";
- //Listener
- EventListener = new class'X2AbilityTrigger_EventListener';
- EventListener.ListenerData.Deferral = ELD_OnStateSubmitted;
- //EventListener.ListenerData.EventID = 'OnRevealEventFn';
- //EventListener.ListenerData.EventID = 'ScamperBegin';
- EventListener.ListenerData.EventID = 'SurpriseScamper'; //Triggers when pods scamper per other class
- EventListener.ListenerData.EventFn = class'XComGameState_Ability'.static.AbilityTriggerEventListener_Self;
- EventListener.ListenerData.Filter = eFilter_Unit;
- Template.AbilityTriggers.AddItem(EventListener);
- //Effects - modified disorient
- SurpriseEffect = new class'X2Effect_PersistentStatChange';
- SurpriseEffect.BuildPersistentEffect(2,, false,,eGameRule_PlayerTurnBegin); //Duration
- SurpriseEffect.AddPersistentStatChange(eStat_Offense, float(-40)); //Aim penalty
- SurpriseEffect.EffectName = 'SurpriseEffect';
- SurpriseEffect.SetDisplayInfo(ePerkBuff_Penalty, "Surprised", "This unit is surprised and suffers a penalty to aim and is locked from certain actions.", "img:///UILibrary_PerkIcons.UIPerk_disoriented");
- SurpriseEffect.VisualizationFn = SurpriseVisualization;
- Template.AddTargetEffect (SurpriseEffect);
- Condition_UnitProperty = new class'X2Condition_UnitProperty';
- Condition_UnitProperty.ExcludeOrganic = false;
- Condition_UnitProperty.ExcludeRobotic = false;
- ExcludeEffects = new class'X2Condition_UnitEffects';
- ExcludeEffects.AddExcludeEffect('Surprise', 'AA_RepairServosActivated');
- Template.AbilityShooterConditions.AddItem(ExcludeEffects);
- Template.BuildNewGameStateFn = TypicalAbility_BuildGameState;
- Template.BuildVisualizationFn = TypicalAbility_BuildVisualization;
- Template.BuildInterruptGameStateFn = TypicalAbility_BuildInterruptGameState;
- return Template;
- }
- // Visualization
- static function SurpriseVisualization(XComGameState VisualizeGameState, out VisualizationTrack BuildTrack, const name EffectApplyResult)
- {
- local XComGameState_Unit UnitState;
- if (EffectApplyResult != 'AA_Success')
- {
- return;
- }
- UnitState = XComGameState_Unit(BuildTrack.StateObject_NewState);
- if (UnitState != none && !UnitState.IsRobotic())
- {
- AddEffectSoundAndFlyOverToTrack(BuildTrack, VisualizeGameState.GetContext(), "Surprised", 'Confused', eColor_Bad, class'UIUtilities_Image'.const.UnitStatus_Disoriented);
- AddEffectMessageToTrack(BuildTrack, "Surprised", VisualizeGameState.GetContext());
- UpdateUnitFlag(BuildTrack, VisualizeGameState.GetContext());
- }
- }
- //Could prolly build functions in, but easier to copy and paste
- static function AddEffectSoundAndFlyOverToTrack(out VisualizationTrack BuildTrack, XComGameStateContext Context, string EffectFriendlyName, name nSoldierSpeechCue, EWidgetColor WidgetColor = eColor_Bad, string FlyOverIcon = "", optional float LookAtDuration = 0.0f)
- {
- local X2Action_PlaySoundAndFlyOver SoundAndFlyOver;
- SoundAndFlyOver = X2Action_PlaySoundAndFlyOver(class'X2Action_PlaySoundAndFlyOver'.static.AddToVisualizationTrack(BuildTrack, Context));
- SoundAndFlyOver.SetSoundAndFlyOverParameters(None, EffectFriendlyName, nSoldierSpeechCue, WidgetColor, FlyOverIcon, LookAtDuration);
- }
- static function AddEffectMessageToTrack(out VisualizationTrack BuildTrack, string UnexpandedLocString, XComGameStateContext Context)
- {
- local XComGameState_Unit UnitState;
- local XGParamTag kTag;
- local X2Action_PlayWorldMessage MessageAction;
- UnitState = XComGameState_Unit(BuildTrack.StateObject_NewState);
- if (UnitState == none)
- return;
- kTag = XGParamTag(`XEXPANDCONTEXT.FindTag("XGParam"));
- kTag.StrValue0 = UnitState.GetFullName();
- MessageAction = X2Action_PlayWorldMessage(class'X2Action_PlayWorldMessage'.static.AddToVisualizationTrack(BuildTrack, Context));
- MessageAction.AddWorldMessage(`XEXPAND.ExpandString(UnexpandedLocString));
- }
- static function UpdateUnitFlag(out VisualizationTrack BuildTrack, XComGameStateContext Context)
- {
- local X2Action_UpdateUI UpdateUIAction;
- if (XComGameState_Unit(BuildTrack.StateObject_NewState) == none)
- return;
- UpdateUIAction = X2Action_UpdateUI(class'X2Action_UpdateUI'.static.AddToVisualizationTrack(BuildTrack, Context));
- UpdateUIAction.SpecificID = BuildTrack.StateObject_NewState.ObjectID;
- UpdateUIAction.UpdateType = EUIUT_UnitFlag_Buffs;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement