Advertisement
Iridar51

Untitled

Jun 2nd, 2018
153
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.34 KB | None | 0 0
  1. //class X2Ability_RemoteFuse extends X2Ability;
  2.  
  3. // Implements all Combat Knife abilities
  4. class X2Ability_RemoteFuse extends X2Ability
  5. dependson (XComGameStateContext_Ability) config(DualWieldedPistols);
  6.  
  7.  
  8. static function array<X2DataTemplate> CreateTemplates()
  9. {
  10. local array<X2DataTemplate> Templates;
  11.  
  12. Templates.AddItem(Create_RemoteFuse());
  13. Templates.AddItem(Create_RemoteFuseCounter());
  14. //Templates.AddItem(Create_RemoteFuseAttack());
  15. return Templates;
  16. }
  17. static function X2AbilityTemplate Create_RemoteFuse()
  18. {
  19. local X2AbilityTemplate Template;
  20.  
  21. Template = PurePassive('RemoteFuse', "img:///UILibrary_PerkIcons.UIPerk_RemoteFuse", false, 'eAbilitySource_Perk');
  22. Template.AdditionalAbilities.AddItem('RemoteFuseCounter');
  23.  
  24. return Template;
  25. }
  26.  
  27. static function X2AbilityTemplate Create_RemoteFuseCounter()
  28. {
  29. local X2AbilityTemplate Template;
  30. local X2AbilityTrigger_EventListener Trigger;
  31. local X2Condition_UnitProperty SourceNotConcealedCondition;
  32. local X2Condition_Visibility TargetVisibilityCondition;
  33. local X2Condition_UnitEffects UnitEffectsCondition;
  34. local X2Condition_UnitProperty ExcludeSquadmatesCondition;
  35. local X2Effect_Stunned StunEffect;
  36. local X2Effect_StunRecover StunRecoverEffect;
  37.  
  38.  
  39. `CREATE_X2ABILITY_TEMPLATE(Template, 'RemoteFuseCounter');
  40.  
  41. Template.AbilitySourceName = 'eAbilitySource_Perk';
  42. Template.eAbilityIconBehaviorHUD = eAbilityIconBehavior_NeverShow;
  43. Template.IconImage = "img:///UILibrary_PerkIcons.UIPerk_RemoteFuse";
  44. Template.ShotHUDPriority = class'UIUtilities_Tactical'.const.CLASS_CAPTAIN_PRIORITY;
  45.  
  46. Template.AbilityTargetStyle = default.SimpleSingleTarget;
  47. Template.AbilityToHitCalc = default.DeadEye;
  48.  
  49. // trigger on movement
  50. /*
  51. Trigger = new class'X2AbilityTrigger_EventListener';
  52. Trigger.ListenerData.EventID = 'ObjectMoved';
  53. Trigger.ListenerData.Deferral = ELD_OnStateSubmitted;
  54. Trigger.ListenerData.Filter = eFilter_None;
  55. Trigger.ListenerData.EventFn = class'XComGameState_Ability'.static.TypicalOverwatchListener;
  56. Template.AbilityTriggers.AddItem(Trigger);*/
  57.  
  58. Template.AbilityTargetConditions.AddItem(new class'X2Condition_FuseTarget');
  59. Template.PostActivationEvents.AddItem('FuseTriggered');
  60. Template.PostActivationEvents.AddItem('FusePostTriggered');
  61.  
  62.  
  63.  
  64. StunEffect = class'X2StatusEffects'.static.CreateStunnedStatusEffect(2, 100); // # ACTIONS, % chance
  65. StunEffect.bRemoveWhenSourceDies = true;
  66. Template.AddTargetEffect(StunEffect);
  67.  
  68. StunRecoverEffect = new class'X2Effect_StunRecover';
  69. Template.AddTargetEffect(StunRecoverEffect);
  70.  
  71. //Trigger on movement - interrupt the move
  72. /*
  73. Trigger = new class'X2AbilityTrigger_EventListener';
  74. Trigger.ListenerData.EventID = 'ObjectMoved';
  75. Trigger.ListenerData.Deferral = ELD_OnStateSubmitted;
  76. Trigger.ListenerData.Filter = eFilter_None;
  77. Trigger.ListenerData.EventFn = class'XComGameState_Ability'.static.SkirmisherInterruptListener;
  78. Template.AbilityTriggers.AddItem(Trigger);
  79. */
  80.  
  81. // trigger on an attack
  82. Trigger = new class'X2AbilityTrigger_EventListener';
  83. Trigger.ListenerData.EventID = 'AbilityActivated';
  84. Trigger.ListenerData.Deferral = ELD_OnStateSubmitted;
  85. Trigger.ListenerData.Filter = eFilter_None;
  86. Trigger.ListenerData.EventFn = class'XComGameState_Ability'.static.TypicalAttackListener;
  87. Template.AbilityTriggers.AddItem(Trigger);
  88.  
  89. // it may be the case that enemy movement caused a concealment break, which made RemoteFuse applicable - attempt to trigger afterwards
  90. Trigger = new class'X2AbilityTrigger_EventListener';
  91. Trigger.ListenerData.Deferral = ELD_OnStateSubmitted;
  92. Trigger.ListenerData.EventID = 'UnitConcealmentBroken';
  93. Trigger.ListenerData.Filter = eFilter_Unit;
  94. Trigger.ListenerData.EventFn = RemoteFuseConcealmentListener;
  95. Trigger.ListenerData.Priority = 55;
  96. Template.AbilityTriggers.AddItem(Trigger);
  97.  
  98.  
  99.  
  100. Template.AbilityTargetConditions.AddItem(default.LivingHostileUnitDisallowMindControlProperty);
  101. TargetVisibilityCondition = new class'X2Condition_Visibility';
  102. TargetVisibilityCondition.bRequireGameplayVisible = true;
  103. TargetVisibilityCondition.bRequireBasicVisibility = true;
  104. TargetVisibilityCondition.bDisablePeeksOnMovement = true; //Don't use peek tiles for over watch shots
  105. Template.AbilityTargetConditions.AddItem(TargetVisibilityCondition);
  106. Template.AbilityTargetConditions.AddItem(class'X2Ability_DefaultAbilitySet'.static.OverwatchTargetEffectsCondition());
  107. // Adding exclusion condition to prevent friendly RemoteFuse fire when panicked.
  108. ExcludeSquadmatesCondition = new class'X2Condition_UnitProperty';
  109. ExcludeSquadmatesCondition.ExcludeSquadmates = true;
  110. Template.AbilityTargetConditions.AddItem(ExcludeSquadmatesCondition);
  111.  
  112. Template.AbilityShooterConditions.AddItem(default.LivingShooterProperty);
  113. Template.AddShooterEffectExclusions();
  114.  
  115. //Don't trigger when the source is concealed
  116. SourceNotConcealedCondition = new class'X2Condition_UnitProperty';
  117. SourceNotConcealedCondition.ExcludeConcealed = true;
  118. Template.AbilityShooterConditions.AddItem(SourceNotConcealedCondition);
  119.  
  120. // Don't trigger if the unit has vanished
  121. UnitEffectsCondition = new class'X2Condition_UnitEffects';
  122. UnitEffectsCondition.AddExcludeEffect('Vanish', 'AA_UnitIsConcealed');
  123. UnitEffectsCondition.AddExcludeEffect('VanishingWind', 'AA_UnitIsConcealed');
  124. Template.AbilityShooterConditions.AddItem(UnitEffectsCondition);
  125.  
  126. //Template.bAllowBonusWeaponEffects = true;
  127. //Template.AddTargetEffect(new class'X2Effect_ApplyWeaponDamage');
  128. Template.CustomFireAnim = 'SingleShotLeft';
  129. //Template.ActivationSpeech = 'Fuse';
  130. //Template.AdditionalAbilities.AddItem('DualWieldedShot');
  131. //Template.PostActivationEvents.AddItem('DualWieldedShot');
  132.  
  133. /*
  134. BattlelordEffect = new class'X2Effect_Battlelord';
  135. BattlelordEffect.BuildPersistentEffect(1, false, , , eGameRule_PlayerTurnBegin);
  136. BattlelordEffect.SetDisplayInfo(ePerkBuff_Bonus, Template.LocFriendlyName, Template.LocLongDescription, Template.IconImage, true, , Template.AbilitySourceName);
  137. Template.AddShooterEffect(BattlelordEffect);
  138. //Template.AdditionalAbilities.AddItem('RemoteFuseAttack');*/
  139.  
  140. //Prevent repeatedly hammering on a unit with RemoteFuse triggers.
  141. //(This effect does nothing, but enables many-to-many marking of which RemoteFuse attacks have already occurred each turn.)
  142.  
  143.  
  144. Template.BuildNewGameStateFn = TypicalAbility_BuildGameState;
  145. Template.BuildVisualizationFn = TypicalAbility_BuildVisualization;
  146. Template.bShowActivation = true;
  147.  
  148. Template.SuperConcealmentLoss = class'X2AbilityTemplateManager'.default.SuperConcealmentStandardShotLoss;
  149. Template.ChosenActivationIncreasePerUse = class'X2AbilityTemplateManager'.default.NormalChosenActivationIncreasePerUse;
  150. Template.LostSpawnIncreasePerUse = class'X2AbilityTemplateManager'.default.MeleeLostSpawnIncreasePerUse;
  151.  
  152. //BEGIN AUTOGENERATED CODE: Template Overrides 'RemoteFuseCounter'
  153. Template.bFrameEvenWhenUnitIsHidden = true;
  154. //END AUTOGENERATED CODE: Template Overrides 'RemoteFuseCounter'
  155.  
  156. return Template;
  157. }
  158.  
  159. static function EventListenerReturn RemoteFuseConcealmentListener(Object EventData, Object EventSource, XComGameState GameState, Name Event, Object CallbackData)
  160. {
  161. local XComGameStateContext_Ability AbilityContext;
  162. local XComGameState_Unit ConcealmentBrokenUnit;
  163. local StateObjectReference RemoteFuseRef;
  164. local XComGameState_Ability RemoteFuseState;
  165. local XComGameStateHistory History;
  166.  
  167. History = `XCOMHISTORY;
  168.  
  169. ConcealmentBrokenUnit = XComGameState_Unit(EventSource);
  170. if (ConcealmentBrokenUnit == None)
  171. return ELR_NoInterrupt;
  172.  
  173. //Do not trigger if the RemoteFuse Ranger himself moved to cause the concealment break - only when an enemy moved and caused it.
  174. AbilityContext = XComGameStateContext_Ability(GameState.GetContext().GetFirstStateInEventChain().GetContext());
  175. if (AbilityContext != None && AbilityContext.InputContext.SourceObject != ConcealmentBrokenUnit.ConcealmentBrokenByUnitRef)
  176. return ELR_NoInterrupt;
  177.  
  178. RemoteFuseRef = ConcealmentBrokenUnit.FindAbility('RemoteFuseCounter');
  179. if (RemoteFuseRef.ObjectID == 0)
  180. return ELR_NoInterrupt;
  181.  
  182. RemoteFuseState = XComGameState_Ability(History.GetGameStateForObjectID(RemoteFuseRef.ObjectID));
  183. if (RemoteFuseState == None)
  184. return ELR_NoInterrupt;
  185.  
  186. RemoteFuseState.AbilityTriggerAgainstSingleTarget(ConcealmentBrokenUnit.ConcealmentBrokenByUnitRef, false);
  187. return ELR_NoInterrupt;
  188. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement