Advertisement
Guest User

Untitled

a guest
Feb 28th, 2019
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //---------------------------------------------------------------------------------------
  2. //  FILE:    X2StrategyElement_DLC_Day90MissionSources.uc
  3. //  AUTHOR:  Joe Weinhoffer
  4. //          
  5. //---------------------------------------------------------------------------------------
  6. //  Copyright (c) 2016 Firaxis Games, Inc. All rights reserved.
  7. //---------------------------------------------------------------------------------------
  8. class X2StrategyElement_DukeMissionSource extends X2StrategyElement
  9.     config(GameData);
  10.  
  11. var config int MissionDifficulty;
  12.  
  13. static function array<X2DataTemplate> CreateTemplates()
  14. {
  15.     local array<X2DataTemplate> MissionSources;
  16.  
  17.     MissionSources.AddItem(CreateMissionSource_DukeTemplate());
  18.  
  19.     return MissionSources;
  20. }
  21.  
  22. static function X2DataTemplate CreateMissionSource_DukeTemplate()
  23. {
  24.     local X2MissionSourceTemplate Template;
  25.  
  26.     Template= new(None, string('MissionSource_DukeMission')) class'X2MissionSourceTemplate'; Template.SetTemplateName('MissionSource_DukeMission');;
  27.     Template.bIncreasesForceLevel = false;
  28.     Template.bDisconnectRegionOnFail = false;
  29.     Template.DifficultyValue = default.MissionDifficulty;
  30.     Template.OnSuccessFn = DukeMissionOnSuccess;
  31.     Template.OnFailureFn = DukeMissionOnFailure;
  32.     Template.OverworldMeshPath = "UI_3D.Overwold_Final.Landed_UFO";
  33.     Template.MissionImage = "img:///UILibrary_StrategyImages.X2StrategyMap.Alert_UFO_Landed";
  34.     //Template.ResistanceActivity = 'ResAct_GenjiInvestigated';
  35.     Template.GetMissionDifficultyFn = GetMissionDifficultyFromTemplate;
  36.     Template.WasMissionSuccessfulFn = OneStrategyObjectiveCompleted;
  37.     Template.bIgnoreDifficultyCap = true;
  38.     //Template.GetSitRepsFn = GetSitRepsGeneric;
  39.  
  40.     return Template;
  41. }
  42.  
  43.  
  44. static function array<name> GetSupplyRaidSitReps(XComGameState_MissionSite MissionState)
  45. {
  46.     local array<name> ActiveSitreps;
  47.  
  48.     ActiveSitreps.Length = 0;
  49.     ActiveSitreps = GetSitrepsGeneric(MissionState);
  50.  
  51.     return ActiveSitreps;
  52. }
  53.  
  54.  
  55. function DukeMissionOnSuccess(XComGameState NewGameState, XComGameState_MissionSite MissionState)
  56. {
  57.     GiveRewards(NewGameState, MissionState);
  58.     SpawnPointOfInterest(NewGameState, MissionState);
  59.     MissionState.RemoveEntity(NewGameState);
  60.     AddDukeToCrew(NewGameState);
  61.     class'XComGameState_HeadquartersResistance'.static.RecordResistanceActivity(NewGameState, 'ResAct_LandedUFOsCompleted');
  62. }
  63.  
  64.  
  65. //---------------------------------------------------------------------------------------
  66. // Call in strategy to add Central as a normal soldier to your crew
  67. function AddDukeToCrew(XComGameState NewGameState)
  68. {
  69.     local XComGameStateHistory History;
  70.     local XComGameState_HeadquartersXCom XComHQ;
  71.     local XComGameState_Unit UnitState;
  72.     local X2ItemTemplateManager ItemTemplateManager;
  73.     local XComGameState_Item ItemState;
  74.     local X2ItemTemplate ItemTemplate;
  75.  
  76.     History = class'XComGameStateHistory'.static.GetGameStateHistory();
  77.  
  78.     foreach History.IterateByClassType(class'XComGameState_Unit', UnitState)
  79.     {
  80.         if(UnitState.GetMyTemplateName() == 'DukeSoldier')
  81.         {  
  82.             XComHQ = XComGameState_HeadquartersXCom(History.GetSingleGameStateObjectForClass(class'XComGameState_HeadquartersXCom'));
  83.             XComHQ = XComGameState_HeadquartersXCom(NewGameState.CreateStateObject(class'XComGameState_HeadquartersXCom', XComHQ.ObjectID));
  84.             NewGameState.AddStateObject(XComHQ);
  85.  
  86.             ItemTemplateManager = class'X2ItemTemplateManager'.static.GetItemTemplateManager();
  87.             ItemTemplate = ItemTemplateManager.FindItemTemplate('IRI_Duke_Winchester');
  88.             ItemState = ItemTemplate.CreateInstanceFromTemplate(NewGameState);
  89.             NewGameState.AddStateObject(ItemState);
  90.             XComHQ.AddItemToHQInventory(ItemState);
  91.    
  92.             ItemTemplateManager = class'X2ItemTemplateManager'.static.GetItemTemplateManager();
  93.             ItemTemplate = ItemTemplateManager.FindItemTemplate('IRI_DukeWeapons');
  94.             ItemState = ItemTemplate.CreateInstanceFromTemplate(NewGameState);
  95.             NewGameState.AddStateObject(ItemState);
  96.             XComHQ.AddItemToHQInventory(ItemState);
  97.  
  98.             ItemTemplateManager = class'X2ItemTemplateManager'.static.GetItemTemplateManager();
  99.             ItemTemplate = ItemTemplateManager.FindItemTemplate('IRI_DukeArmor_Kevlar');
  100.             ItemState = ItemTemplate.CreateInstanceFromTemplate(NewGameState);
  101.             NewGameState.AddStateObject(ItemState);
  102.             XComHQ.AddItemToHQInventory(ItemState);
  103.  
  104.  
  105.  
  106.             if(XComHQ.HasItemByName('MediumPlatedArmor'))
  107.             {
  108.                 ItemTemplateManager = class'X2ItemTemplateManager'.static.GetItemTemplateManager();
  109.                 ItemTemplate = ItemTemplateManager.FindItemTemplate('IRI_DukeArmor_Plated');
  110.                 ItemState = ItemTemplate.CreateInstanceFromTemplate(NewGameState);
  111.                 NewGameState.AddStateObject(ItemState);
  112.                 XComHQ.AddItemToHQInventory(ItemState);
  113.             }
  114.  
  115.             if(XComHQ.HasItemByName('MediumPoweredArmor'))
  116.             {
  117.                 ItemTemplateManager = class'X2ItemTemplateManager'.static.GetItemTemplateManager();
  118.                 ItemTemplate = ItemTemplateManager.FindItemTemplate('IRI_DukeArmor_Powered');
  119.                 ItemState = ItemTemplate.CreateInstanceFromTemplate(NewGameState);
  120.                 NewGameState.AddStateObject(ItemState);
  121.                 XComHQ.AddItemToHQInventory(ItemState);
  122.             }
  123.  
  124.             UnitState = XComGameState_Unit(NewGameState.CreateStateObject(class'XComGameState_Unit', UnitState.ObjectID));
  125.             NewGameState.AddStateObject(UnitState);
  126.  
  127.             XComHQ.AddToCrew(NewGameState, UnitState);
  128.  
  129.             //XComGameInfo(class'Engine'.static.GetCurrentWorldInfo().Game).GameRuleset.SubmitGameState(NewGameState); this gets handled by the game automatically
  130.         }
  131.     }
  132.  
  133.  
  134. }
  135.  
  136. function DukeMissionOnFailure(XComGameState NewGameState, XComGameState_MissionSite MissionState)
  137. {
  138.     MissionState.RemoveEntity(NewGameState);
  139.     AddDukeToCrew(NewGameState);
  140.     class'XComGameState_HeadquartersResistance'.static.DeactivatePOI(NewGameState, MissionState.POIToSpawn);
  141.     class'XComGameState_HeadquartersResistance'.static.RecordResistanceActivity(NewGameState, 'ResAct_LandedUFOsFailed');
  142. }
  143.  
  144.  
  145. // #######################################################################################
  146. // -------------------- GENERIC FUNCTIONS ------------------------------------------------
  147. // #######################################################################################
  148.  
  149. function int GetMissionDifficultyFromTemplate(XComGameState_MissionSite MissionState)
  150. {
  151.     local int Difficulty;
  152.  
  153.     Difficulty = MissionState.GetMissionSource().DifficultyValue;
  154.  
  155.     Difficulty = Clamp(Difficulty, class'X2StrategyGameRulesetDataStructures'.default.MinMissionDifficulty,
  156.     class'X2StrategyGameRulesetDataStructures'.default.MaxMissionDifficulty);
  157.  
  158.     return Difficulty;
  159. }
  160.  
  161.  
  162. function GiveRewards(XComGameState NewGameState, XComGameState_MissionSite MissionState, optional array<int> ExcludeIndices)
  163. {
  164.     local XComGameStateHistory History;
  165.     local XComGameState_Reward RewardState;
  166.     local int idx;
  167.  
  168.     History = `XCOMHISTORY;
  169.  
  170.     // First Check if we need to exclude some rewards
  171.     for(idx = 0; idx < MissionState.Rewards.Length; idx++)
  172.     {
  173.         RewardState = XComGameState_Reward(History.GetGameStateForObjectID(MissionState.Rewards[idx].ObjectID));
  174.         if(RewardState != none)
  175.         {
  176.             if(ExcludeIndices.Find(idx) != INDEX_NONE)
  177.             {
  178.                 RewardState.CleanUpReward(NewGameState);
  179.                 NewGameState.RemoveStateObject(RewardState.ObjectID);
  180.                 MissionState.Rewards.Remove(idx, 1);
  181.                 idx--;
  182.             }
  183.         }
  184.     }
  185.  
  186.     class'XComGameState_HeadquartersResistance'.static.SetRecapRewardString(NewGameState, MissionState.GetRewardAmountStringArray());
  187.  
  188.     // @mnauta: set VIP rewards string is deprecated, leaving blank
  189.     class'XComGameState_HeadquartersResistance'.static.SetVIPRewardString(NewGameState, "" /*REWARDS!*/);
  190.  
  191.     for(idx = 0; idx < MissionState.Rewards.Length; idx++)
  192.     {
  193.         RewardState = XComGameState_Reward(History.GetGameStateForObjectID(MissionState.Rewards[idx].ObjectID));
  194.  
  195.         // Give rewards
  196.         if(RewardState != none)
  197.         {
  198.             RewardState.GiveReward(NewGameState);
  199.         }
  200.  
  201.         // Remove the reward state objects
  202.         NewGameState.RemoveStateObject(RewardState.ObjectID);
  203.     }
  204.  
  205.     MissionState.Rewards.Length = 0;
  206. }
  207.  
  208.  
  209. function SpawnPointOfInterest(XComGameState NewGameState, XComGameState_MissionSite MissionState)
  210. {
  211.     local XComGameStateHistory History;
  212.     local XComGameState_PointOfInterest POIState;
  213.     local XComGameState_BlackMarket BlackMarketState;
  214.  
  215.     History = `XCOMHISTORY;
  216.     BlackMarketState = XComGameState_BlackMarket(History.GetSingleGameStateObjectForClass(class'XComGameState_BlackMarket'));
  217.  
  218.     if (!BlackMarketState.ShowBlackMarket(NewGameState))
  219.     {
  220.         if (MissionState.POIToSpawn.ObjectID != 0)
  221.         {
  222.             POIState = XComGameState_PointOfInterest(History.GetGameStateForObjectID(MissionState.POIToSpawn.ObjectID));
  223.  
  224.             if (POIState != none)
  225.             {
  226.                 POIState = XComGameState_PointOfInterest(NewGameState.CreateStateObject(class'XComGameState_PointOfInterest', POIState.ObjectID));
  227.                 NewGameState.AddStateObject(POIState);
  228.                 POIState.Spawn(NewGameState);
  229.             }
  230.         }
  231.     }
  232.     else
  233.     {
  234.         class'XComGameState_HeadquartersResistance'.static.DeactivatePOI(NewGameState, MissionState.POIToSpawn);
  235.     }
  236. }
  237.  
  238. //---------------------------------------------------------------------------------------
  239. function bool OneStrategyObjectiveCompleted(XComGameState_BattleData BattleDataState)
  240. {
  241.     return (BattleDataState.OneStrategyObjectiveCompleted());
  242. }
  243.  
  244.  
  245.  
  246. static function bool StrategySitrepsFilter(X2DataTemplate Template)
  247. {
  248.     local X2SitRepTemplate SitRep;
  249.  
  250.     SitRep = X2SitRepTemplate( Template );
  251.  
  252.     if ((SitRep == none) || SitRep.bExcludeFromStrategy)
  253.         return false;
  254.  
  255.     return true;
  256. }
  257.  
  258. static function array<name> GetSitrepsGeneric(XComGameState_MissionSite MissionState)
  259. {
  260.     local X2CardManager CardMgr;
  261.     local X2SitRepTemplateManager SitRepMgr;
  262.     local X2DataTemplate DataTemplate;
  263.     local X2SitRepTemplate SitRepTemplate;
  264.     local array<string> SitRepCards;
  265.     local array<name> ActiveSitreps;
  266.     local String SitRepLabel;
  267.  
  268.     CardMgr = class'X2CardManager'.static.GetCardManager();
  269.     SitRepMgr = class'X2SitRepTemplateManager'.static.GetSitRepTemplateManager();
  270.     ActiveSitreps.Length = 0;
  271.  
  272.     // Create SitRep Deck, have to do each time in case more were added
  273.     foreach SitRepMgr.IterateTemplates(DataTemplate, StrategySitrepsFilter)
  274.     {
  275.         SitRepTemplate = X2SitRepTemplate(DataTemplate);
  276.         CardMgr.AddCardToDeck('SitReps', string(SitRepTemplate.DataName));
  277.     }
  278.  
  279.     // Grab the next valid SitRep from the deck
  280.     CardMgr.GetAllCardsInDeck('SitReps', SitRepCards);
  281.     foreach SitRepCards(SitRepLabel)
  282.     {
  283.         SitRepTemplate = class'X2SitRepTemplateManager'.static.GetSitRepTemplateManager().FindSitRepTemplate(name(SitRepLabel));
  284.         if(SitRepTemplate != none && SitRepTemplate.MeetsRequirements(MissionState))
  285.         {
  286.             ActiveSitreps.AddItem(name(SitRepLabel));
  287.             CardMgr.MarkCardUsed('SitReps', SitRepLabel);
  288.             break;
  289.         }
  290.     }
  291.  
  292.     return ActiveSitreps;
  293. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement