Advertisement
Guest User

Untitled

a guest
May 4th, 2017
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ```
  2. static function X2AbilityTemplate IcarusJump()
  3. {
  4.     local X2AbilityTemplate Template;
  5.     local X2AbilityTarget_Cursor CursorTarget;
  6.     local X2AbilityMultiTarget_Radius RadiusMultiTarget;
  7.     local X2AbilityCost_Charges ChargeCost;
  8.     local X2AbilityCharges Charges;
  9.     local X2AbilityCooldown Cooldown;
  10.     local X2Effect_RemoveEffects RemoveEffects;
  11.     local X2Effect_Persistent IcarusJumpEffect;
  12.     local X2Condition_UnitEffects UnitEffectsCondition;
  13.  
  14.     Template= new(None, string('IcarusJump')) class'X2AbilityTemplate'; Template.SetTemplateName('IcarusJump');;;
  15.  
  16.     Template.AbilitySourceName = 'eAbilitySource_Standard';
  17.     Template.eAbilityIconBehaviorHUD = EAbilityIconBehavior_AlwaysShow;
  18.     Template.IconImage = "img:///UILibrary_DLC2Images.UIPerk_icarusjump";
  19.  
  20.     Template.AbilityCosts.AddItem(default.FreeActionCost);
  21.  
  22.     ChargeCost = new class'X2AbilityCost_Charges';
  23.     ChargeCost.NumCharges = 1;
  24.     Template.AbilityCosts.AddItem(ChargeCost);
  25.  
  26.     Charges = new class'X2AbilityCharges';
  27.     Charges.InitialCharges = default.ICARUS_JUMP_CHARGES;
  28.     Template.AbilityCharges = Charges;
  29.    
  30.     Cooldown = new class'X2AbilityCooldown';
  31.     Cooldown.iNumTurns = 2;
  32.     Template.AbilityCooldown = Cooldown;
  33.  
  34.     Template.TargetingMethod = class'X2TargetingMethod_DLC_2IcarusJump';
  35.     Template.AbilityTriggers.AddItem(default.PlayerInputTrigger);
  36.     Template.AbilityToHitCalc = default.DeadEye;
  37.  
  38.     CursorTarget = new class'X2AbilityTarget_Cursor';
  39.     CursorTarget.bRestrictToSquadsightRange = true;
  40.     Template.AbilityTargetStyle = CursorTarget;
  41.  
  42.     RadiusMultiTarget = new class'X2AbilityMultiTarget_Radius';
  43.     RadiusMultiTarget.fTargetRadius = 0.25; // small amount so it just grabs one tile
  44.     Template.AbilityMultiTargetStyle = RadiusMultiTarget;
  45.  
  46.     // Shooter Conditions
  47.     Template.AbilityShooterConditions.AddItem(default.LivingShooterProperty);
  48.  
  49.     UnitEffectsCondition = new class'X2Condition_UnitEffects';
  50.     UnitEffectsCondition.AddExcludeEffect(class'X2Ability_CarryUnit'.default.CarryUnitEffectName, 'AA_CarryingUnit');
  51.     Template.AbilityShooterConditions.AddItem(UnitEffectsCondition);
  52.  
  53.     Template.AddShooterEffectExclusions();
  54.  
  55.     RemoveEffects = new class'X2Effect_RemoveEffects';
  56.     RemoveEffects.EffectNamesToRemove.AddItem('IcarusJumpEffect');
  57.     Template.AddShooterEffect(RemoveEffects);
  58.  
  59.     IcarusJumpEffect = new class'X2Effect_Persistent';
  60.     IcarusJumpEffect.BuildPersistentEffect(1, false, true);
  61.     IcarusJumpEffect.DuplicateResponse = eDupe_Refresh;
  62.     IcarusJumpEffect.EffectName = 'IcarusJumpEffect';
  63.     IcarusJumpEffect.EffectAddedFn = IcarusJump_EffectAdded;
  64.     Template.AddShooterEffect(IcarusJumpEffect);
  65.    
  66.     Template.PostActivationEvents.AddItem('RulerArmorAbilityActivated');
  67.  
  68.     Template.ModifyNewContextFn = class'X2Ability_Cyberus'.static.Teleport_ModifyActivatedAbilityContext;
  69.     Template.BuildNewGameStateFn = class'X2Ability_DLC_Day60ItemGrantedAbilitySet'.static.IcarusJump_BuildGameState;
  70.     Template.BuildVisualizationFn = IcarusJump_BuildVisualization;
  71.  
  72.     return Template;
  73. }
  74.  
  75. static simulated function XComGameState IcarusJump_BuildGameState(XComGameStateContext Context)
  76. {
  77.     local XComGameState NewGameState;
  78.     local XComGameState_Unit UnitState;
  79.     local XComGameStateContext_Ability AbilityContext;
  80.     local X2EventManager EventManager;
  81.  
  82.     NewGameState = class'X2Ability_Cyberus'.static.Teleport_BuildGameState(Context);
  83.  
  84.     AbilityContext = XComGameStateContext_Ability(NewGameState.GetContext());
  85.     UnitState = XComGameState_Unit(NewGameState.CreateStateObject(class'XComGameState_Unit', AbilityContext.InputContext.SourceObject.ObjectID));
  86.  
  87.     EventManager = class'X2EventManager'.static.GetEventManager();
  88.     EventManager.TriggerEvent('UnitIcarusJumped', UnitState, UnitState, NewGameState);
  89.  
  90.     return NewGameState;
  91. }
  92.  
  93. static function IcarusJump_EffectAdded(X2Effect_Persistent PersistentEffect, const out EffectAppliedData ApplyEffectParameters, XComGameState_BaseObject kNewTargetState, XComGameState NewGameState)
  94. {
  95.     local XComWorldData World;
  96.     local X2EventManager EventManager;
  97.     local XComGameState_Unit UnitState;
  98.     local TTile StartTileLocation, EndTileLocation, Tile;
  99.     local XComGameState_EnvironmentDamage WorldDamage;
  100.  
  101.     World = class'XComWorldData'.static.GetWorldData();
  102.     EventManager = class'X2EventManager'.static.GetEventManager();
  103.  
  104.     UnitState = XComGameState_Unit(kNewTargetState);
  105.     Assert(UnitState != none);
  106.  
  107.     StartTileLocation = UnitState.TileLocation;
  108.     EndTileLocation = UnitState.TileLocation;
  109.     EndTileLocation.Z = World.NumZ;
  110.  
  111.     Tile = StartTileLocation;
  112.     while( Tile != EndTileLocation )
  113.     {
  114.         ++Tile.Z;
  115.  
  116.         WorldDamage = XComGameState_EnvironmentDamage(NewGameState.CreateStateObject(class'XComGameState_EnvironmentDamage'));
  117.  
  118.         WorldDamage.DamageTypeTemplateName = 'NoFireExplosion';
  119.         WorldDamage.DamageCause = UnitState.GetReference();
  120.         WorldDamage.DamageSource = WorldDamage.DamageCause;
  121.         WorldDamage.bRadialDamage = false;
  122.         WorldDamage.HitLocationTile = Tile;
  123.         WorldDamage.DamageTiles.AddItem(WorldDamage.HitLocationTile);
  124.  
  125.         WorldDamage.DamageDirection.X = 0.0f;
  126.         WorldDamage.DamageDirection.Y = 0.0f;
  127.         WorldDamage.DamageDirection.Z = -1.0f;
  128.  
  129.         WorldDamage.DamageAmount = 30;
  130.         WorldDamage.PhysImpulse = 10;
  131.  
  132.         NewGameState.AddStateObject(WorldDamage);
  133.     }
  134.  
  135.     EventManager.TriggerEvent('ObjectMoved', UnitState, UnitState, NewGameState);
  136.     EventManager.TriggerEvent('UnitMoveFinished', UnitState, UnitState, NewGameState);
  137. }
  138.  
  139. simulated function IcarusJump_BuildVisualization(XComGameState VisualizeGameState, out array<VisualizationTrack> OutVisualizationTracks)
  140. {
  141.     local XComGameStateHistory History;
  142.     local XComGameStateContext_Ability  AbilityContext;
  143.     local StateObjectReference InteractingUnitRef;
  144.     local X2AbilityTemplate AbilityTemplate;
  145.     local VisualizationTrack EmptyTrack, BuildTrack;
  146.     local X2Action_PlaySoundAndFlyOver SoundAndFlyover;
  147.     local int i, j;
  148.     local XComGameState_WorldEffectTileData WorldDataUpdate;
  149.     local X2Action_MoveTurn MoveTurnAction;
  150.     local X2VisualizerInterface TargetVisualizerInterface;
  151.     local XComGameState_EnvironmentDamage DamageEventStateObject;
  152.    
  153.     History = class'XComGameStateHistory'.static.GetGameStateHistory();
  154.  
  155.     AbilityContext = XComGameStateContext_Ability(VisualizeGameState.GetContext());
  156.     InteractingUnitRef = AbilityContext.InputContext.SourceObject;
  157.  
  158.     AbilityTemplate = class'XComGameState_Ability'.static.GetMyTemplateManager().FindAbilityTemplate(AbilityContext.InputContext.AbilityTemplateName);
  159.  
  160.     //****************************************************************************************
  161.     //Configure the visualization track for the source
  162.     //****************************************************************************************
  163.     BuildTrack = EmptyTrack;
  164.     BuildTrack.StateObject_OldState = History.GetGameStateForObjectID(InteractingUnitRef.ObjectID, eReturnType_Reference, VisualizeGameState.HistoryIndex - 1);
  165.     BuildTrack.StateObject_NewState = VisualizeGameState.GetGameStateForObjectID(InteractingUnitRef.ObjectID);
  166.     BuildTrack.TrackActor = History.GetVisualizer(InteractingUnitRef.ObjectID);
  167.  
  168.     SoundAndFlyOver = X2Action_PlaySoundAndFlyOver(class'X2Action_PlaySoundAndFlyover'.static.AddToVisualizationTrack(BuildTrack, AbilityContext));
  169.     SoundAndFlyOver.SetSoundAndFlyOverParameters(None, AbilityTemplate.LocFlyOverText, '', eColor_Good);
  170.  
  171.     // Turn to face the target action. The target location is the center of the ability's radius, stored in the 0 index of the TargetLocations
  172.     MoveTurnAction = X2Action_MoveTurn(class'X2Action_MoveTurn'.static.AddToVisualizationTrack(BuildTrack, AbilityContext));
  173.     MoveTurnAction.m_vFacePoint = AbilityContext.InputContext.TargetLocations[0];
  174.  
  175.     // move action
  176.     class'X2VisualizerHelpers'.static.ParsePath(AbilityContext, BuildTrack, OutVisualizationTracks);
  177.  
  178.     for (i = 0; i < BuildTrack.TrackActions.Length; ++i)
  179.     {
  180.         if (X2Action_CameraFollowUnit(BuildTrack.TrackActions[i]) != none)
  181.             X2Action_CameraFollowUnit(BuildTrack.TrackActions[i]).bLockFloorZ = true;
  182.     }
  183.  
  184.     OutVisualizationTracks.AddItem(BuildTrack);
  185.    
  186.     //****************************************************************************************
  187.  
  188.     foreach VisualizeGameState.IterateByClassType(class'XComGameState_WorldEffectTileData', WorldDataUpdate)
  189.     {
  190.         BuildTrack = EmptyTrack;
  191.         BuildTrack.TrackActor = none;
  192.         BuildTrack.StateObject_NewState = WorldDataUpdate;
  193.         BuildTrack.StateObject_OldState = WorldDataUpdate;
  194.  
  195.         for (i = 0; i < AbilityTemplate.AbilityTargetEffects.Length; ++i)
  196.         {
  197.             AbilityTemplate.AbilityTargetEffects[i].AddX2ActionsForVisualization(VisualizeGameState, BuildTrack, AbilityContext.FindTargetEffectApplyResult(AbilityTemplate.AbilityTargetEffects[i]));
  198.         }
  199.  
  200.         OutVisualizationTracks.AddItem(BuildTrack);
  201.     }
  202.  
  203.     //****************************************************************************************
  204.     //Configure the visualization track for the targets
  205.     //****************************************************************************************
  206.     for( i = 0; i < AbilityContext.InputContext.MultiTargets.Length; ++i )
  207.     {
  208.         InteractingUnitRef = AbilityContext.InputContext.MultiTargets[i];
  209.         BuildTrack = EmptyTrack;
  210.         BuildTrack.StateObject_OldState = History.GetGameStateForObjectID(InteractingUnitRef.ObjectID, eReturnType_Reference, VisualizeGameState.HistoryIndex - 1);
  211.         BuildTrack.StateObject_NewState = VisualizeGameState.GetGameStateForObjectID(InteractingUnitRef.ObjectID);
  212.         BuildTrack.TrackActor = History.GetVisualizer(InteractingUnitRef.ObjectID);
  213.  
  214.         class'X2Action_WaitForAbilityEffect'.static.AddToVisualizationTrack(BuildTrack, AbilityContext);
  215.         for( j = 0; j < AbilityContext.ResultContext.MultiTargetEffectResults[i].Effects.Length; ++j )
  216.         {
  217.             AbilityContext.ResultContext.MultiTargetEffectResults[i].Effects[j].AddX2ActionsForVisualization(VisualizeGameState, BuildTrack, AbilityContext.ResultContext.MultiTargetEffectResults[i].ApplyResults[j]);
  218.         }
  219.  
  220.         TargetVisualizerInterface = X2VisualizerInterface(BuildTrack.TrackActor);
  221.         if( TargetVisualizerInterface != none )
  222.         {
  223.             //Allow the visualizer to do any custom processing based on the new game state. For example, units will create a death action when they reach 0 HP.
  224.             TargetVisualizerInterface.BuildAbilityEffectsVisualization(VisualizeGameState, BuildTrack);
  225.         }
  226.  
  227.         if (BuildTrack.TrackActions.Length > 0)
  228.         {
  229.             OutVisualizationTracks.AddItem(BuildTrack);
  230.         }
  231.     }
  232.  
  233.     // add visualization of environment damage
  234.     foreach VisualizeGameState.IterateByClassType(class'XComGameState_EnvironmentDamage', DamageEventStateObject)
  235.     {
  236.         BuildTrack = EmptyTrack;
  237.         BuildTrack.StateObject_OldState = DamageEventStateObject;
  238.         BuildTrack.StateObject_NewState = DamageEventStateObject;
  239.         BuildTrack.TrackActor = class'XComGameStateHistory'.static.GetGameStateHistory().GetVisualizer(DamageEventStateObject.ObjectID);
  240.         class'X2Action_WaitForAbilityEffect'.static.AddToVisualizationTrack(BuildTrack, AbilityContext);
  241.         class'X2Action_ApplyWeaponDamageToTerrain'.static.AddToVisualizationTrack(BuildTrack, AbilityContext);
  242.         OutVisualizationTracks.AddItem(BuildTrack);
  243.     }
  244. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement