Advertisement
Guest User

DisorientPodOnScamper

a guest
Feb 21st, 2019
142
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. class X2DownloadableContentInfo_DontShoot extends X2DownloadableContentInfo config(DontShoot);
  2.  
  3. var config int STUNNED_ACTIONPOINTS_ONREVEAL;
  4. //var config int FORTIFY_COOLDOWN;
  5. //var config int FORTIFY_DEFENSE;
  6.  
  7. static event OnPostTemplatesCreated()
  8. {
  9.     SurpriseAliens();
  10. }
  11.  
  12. static function SurpriseAliens()
  13. {
  14.     local X2DataTemplate DataTemplate;
  15.     local array<X2DataTemplate> DataTemplates;
  16.     local X2CharacterTemplate CharacterTemplate;
  17.     local X2CharacterTemplateManager Scamperers;
  18.     local array<name> TemplateNames;
  19.     local name Templatename;
  20.  
  21.     Scamperers = class'X2CharacterTemplateManager'.static.GetCharacterTemplateManager();
  22.     Scamperers.GetTemplateNames(TemplateNames); // returns all character template names
  23.  
  24.     foreach TemplateNames(TemplateName) // iterates through all template names
  25.     {
  26.         Scamperers.FindDataTemplateAllDifficulties(TemplateName, DataTemplates); // returns array of all diffculty templates matching iterated name
  27.         foreach DataTemplates(DataTemplate) // iterates through all difficulty templates array
  28.         {
  29.  
  30.             CharacterTemplate = X2CharacterTemplate(DataTemplate); // this typecasts from X2DataTemplate to X2CharacterTemplate
  31.             CharacterTemplate.Abilities.AddItem('Surprise');
  32.  
  33.             if(CharacterTemplate != none) // check
  34.             {
  35.                 CharacterTemplate.OnRevealEventFn = SurpriseOnReveal;
  36.             }
  37.         }
  38.     }
  39.  
  40. }
  41.  
  42. static function SurpriseOnReveal(XComGameState_Unit UnitState)
  43. {
  44.     UnitState.StunnedActionPoints = default.STUNNED_ACTIONPOINTS_ONREVEAL;
  45.     If(`TACTICALRULES.UnitActionPlayerIsAI())
  46.     {
  47.     }
  48.     Else
  49.     {
  50.         `XEVENTMGR.TriggerEvent( 'SurpriseScamper', UnitState, UnitState,); //Triggers "surprise" ability / effect
  51.     }
  52. }
  53.  
  54. ///////////////////////////////////////////////////////////
  55.  
  56. class X2Ability_Surprise extends X2Ability config(DontShoot);
  57.  
  58. //These aren't used currently
  59. var config int SURPRISE_TURNS;
  60. var config int SURPRISE_MOBILITY_ADJUST;
  61. var config int SURPRISE_AIM_ADJUST;
  62. var config int SURPRISE_WILL_ADJUST;
  63.  
  64. static function array<X2DataTemplate> CreateTemplates()
  65. {
  66.     local array<X2DataTemplate> Templates;
  67.    
  68.     Templates.AddItem(AddSurprise());
  69.  
  70.     return Templates;
  71. }
  72.  
  73. static function X2AbilityTemplate AddSurprise()
  74. {
  75.     local X2AbilityTemplate                 Template;
  76.     local X2Effect_PersistentStatChange     SurpriseEffect;
  77.     local X2AbilityCooldown                 Cooldown;
  78.     local X2Condition_AbilityProperty    AbilityCondition;
  79.     local X2Condition_UnitProperty      Condition_UnitProperty;
  80.     local X2AbilityTrigger_EventListener    EventListener;
  81.     local X2Condition_UnitEffects    ExcludeEffects;
  82.  
  83.     `CREATE_X2ABILITY_TEMPLATE(Template, 'Surprise');
  84.     Template.IconImage = "img:///UILibrary_LWAlienPack.LW_AbilityDamageControl";
  85.     Template.AbilitySourceName = 'eAbilitySource_Perk';
  86.     Template.Hostility = eHostility_Neutral;
  87.     Template.eAbilityIconBehaviorHUD = eAbilityIconBehavior_NeverShow;
  88.     Template.AbilityToHitCalc = default.DeadEye;
  89.     Template.AbilityTargetStyle = default.SelfTarget;
  90.     Template.bShowActivation = true;
  91.     Template.bSkipFireAction = true;
  92.     Template.bDisplayInUITooltip = true;
  93.     Template.bDisplayInUITacticalText = true;
  94.     Template.AbilityShooterConditions.AddItem(default.LivingShooterProperty);
  95.     Template.bDontDisplayInAbilitySummary = true;
  96.  
  97.  
  98.     Template.AbilityConfirmSound = "TacticalUI_ActivateAbility";
  99.    
  100.     //Listener
  101.     EventListener = new class'X2AbilityTrigger_EventListener';
  102.     EventListener.ListenerData.Deferral = ELD_OnStateSubmitted;
  103.     //EventListener.ListenerData.EventID = 'OnRevealEventFn';
  104.     //EventListener.ListenerData.EventID = 'ScamperBegin';
  105.     EventListener.ListenerData.EventID = 'SurpriseScamper'; //Triggers when pods scamper per other class
  106.     EventListener.ListenerData.EventFn = class'XComGameState_Ability'.static.AbilityTriggerEventListener_Self;
  107.     EventListener.ListenerData.Filter = eFilter_Unit;
  108.     Template.AbilityTriggers.AddItem(EventListener);
  109.  
  110.     //Effects - modified disorient
  111.     SurpriseEffect = new class'X2Effect_PersistentStatChange';
  112.     SurpriseEffect.BuildPersistentEffect(2,, false,,eGameRule_PlayerTurnBegin); //Duration
  113.     SurpriseEffect.AddPersistentStatChange(eStat_Offense, float(-40)); //Aim penalty
  114.     SurpriseEffect.EffectName = 'SurpriseEffect';
  115.     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");
  116.    
  117.     SurpriseEffect.VisualizationFn = SurpriseVisualization;
  118.  
  119.     Template.AddTargetEffect (SurpriseEffect);
  120.    
  121.     Condition_UnitProperty = new class'X2Condition_UnitProperty';
  122.     Condition_UnitProperty.ExcludeOrganic = false;
  123.     Condition_UnitProperty.ExcludeRobotic = false;
  124.  
  125.     ExcludeEffects = new class'X2Condition_UnitEffects';
  126.     ExcludeEffects.AddExcludeEffect('Surprise', 'AA_RepairServosActivated');
  127.     Template.AbilityShooterConditions.AddItem(ExcludeEffects);
  128.  
  129.     Template.BuildNewGameStateFn = TypicalAbility_BuildGameState;
  130.     Template.BuildVisualizationFn = TypicalAbility_BuildVisualization;
  131.     Template.BuildInterruptGameStateFn = TypicalAbility_BuildInterruptGameState;
  132.  
  133.     return Template;
  134. }
  135.  
  136. // Visualization
  137.  
  138. static function SurpriseVisualization(XComGameState VisualizeGameState, out VisualizationTrack BuildTrack, const name EffectApplyResult)
  139. {
  140.     local XComGameState_Unit UnitState;
  141.  
  142.     if (EffectApplyResult != 'AA_Success')
  143.     {
  144.         return;
  145.     }
  146.  
  147.     UnitState = XComGameState_Unit(BuildTrack.StateObject_NewState);
  148.  
  149.     if (UnitState != none && !UnitState.IsRobotic())
  150.     {
  151.         AddEffectSoundAndFlyOverToTrack(BuildTrack, VisualizeGameState.GetContext(), "Surprised", 'Confused', eColor_Bad, class'UIUtilities_Image'.const.UnitStatus_Disoriented);
  152.         AddEffectMessageToTrack(BuildTrack, "Surprised", VisualizeGameState.GetContext());
  153.         UpdateUnitFlag(BuildTrack, VisualizeGameState.GetContext());
  154.     }
  155. }
  156.  
  157.  
  158. //Could prolly build functions in, but easier to copy and paste
  159.  
  160.  
  161. static function AddEffectSoundAndFlyOverToTrack(out VisualizationTrack BuildTrack, XComGameStateContext Context, string EffectFriendlyName, name nSoldierSpeechCue, EWidgetColor WidgetColor = eColor_Bad, string FlyOverIcon = "", optional float LookAtDuration = 0.0f)
  162. {
  163.     local X2Action_PlaySoundAndFlyOver SoundAndFlyOver;
  164.  
  165.     SoundAndFlyOver = X2Action_PlaySoundAndFlyOver(class'X2Action_PlaySoundAndFlyOver'.static.AddToVisualizationTrack(BuildTrack, Context));
  166.     SoundAndFlyOver.SetSoundAndFlyOverParameters(None, EffectFriendlyName, nSoldierSpeechCue, WidgetColor, FlyOverIcon, LookAtDuration);
  167. }
  168.  
  169. static function AddEffectMessageToTrack(out VisualizationTrack BuildTrack, string UnexpandedLocString, XComGameStateContext Context)
  170. {
  171.     local XComGameState_Unit UnitState;
  172.     local XGParamTag kTag;
  173.     local X2Action_PlayWorldMessage MessageAction;
  174.  
  175.     UnitState = XComGameState_Unit(BuildTrack.StateObject_NewState);
  176.     if (UnitState == none)
  177.         return;
  178.  
  179.     kTag = XGParamTag(`XEXPANDCONTEXT.FindTag("XGParam"));
  180.     kTag.StrValue0 = UnitState.GetFullName();
  181.  
  182.     MessageAction = X2Action_PlayWorldMessage(class'X2Action_PlayWorldMessage'.static.AddToVisualizationTrack(BuildTrack, Context));
  183.     MessageAction.AddWorldMessage(`XEXPAND.ExpandString(UnexpandedLocString));
  184. }
  185.  
  186. static function UpdateUnitFlag(out VisualizationTrack BuildTrack, XComGameStateContext Context)
  187. {
  188.     local X2Action_UpdateUI UpdateUIAction;
  189.  
  190.     if (XComGameState_Unit(BuildTrack.StateObject_NewState) == none)
  191.         return;
  192.  
  193.     UpdateUIAction = X2Action_UpdateUI(class'X2Action_UpdateUI'.static.AddToVisualizationTrack(BuildTrack, Context));
  194.     UpdateUIAction.SpecificID = BuildTrack.StateObject_NewState.ObjectID;
  195.     UpdateUIAction.UpdateType = EUIUT_UnitFlag_Buffs;
  196. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement