Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //---------------------------------------------------------------------------------------
- // FILE: X2StrategyElement_DLC_Day90MissionSources.uc
- // AUTHOR: Joe Weinhoffer
- //
- //---------------------------------------------------------------------------------------
- // Copyright (c) 2016 Firaxis Games, Inc. All rights reserved.
- //---------------------------------------------------------------------------------------
- class X2StrategyElement_DukeMissionSource extends X2StrategyElement
- config(GameData);
- var config int MissionDifficulty;
- static function array<X2DataTemplate> CreateTemplates()
- {
- local array<X2DataTemplate> MissionSources;
- MissionSources.AddItem(CreateMissionSource_DukeTemplate());
- return MissionSources;
- }
- static function X2DataTemplate CreateMissionSource_DukeTemplate()
- {
- local X2MissionSourceTemplate Template;
- Template= new(None, string('MissionSource_DukeMission')) class'X2MissionSourceTemplate'; Template.SetTemplateName('MissionSource_DukeMission');;
- Template.bIncreasesForceLevel = false;
- Template.bDisconnectRegionOnFail = false;
- Template.DifficultyValue = default.MissionDifficulty;
- Template.OnSuccessFn = DukeMissionOnSuccess;
- Template.OnFailureFn = DukeMissionOnFailure;
- Template.OverworldMeshPath = "UI_3D.Overwold_Final.Landed_UFO";
- Template.MissionImage = "img:///UILibrary_StrategyImages.X2StrategyMap.Alert_UFO_Landed";
- //Template.ResistanceActivity = 'ResAct_GenjiInvestigated';
- Template.GetMissionDifficultyFn = GetMissionDifficultyFromTemplate;
- Template.WasMissionSuccessfulFn = OneStrategyObjectiveCompleted;
- Template.bIgnoreDifficultyCap = true;
- //Template.GetSitRepsFn = GetSitRepsGeneric;
- return Template;
- }
- static function array<name> GetSupplyRaidSitReps(XComGameState_MissionSite MissionState)
- {
- local array<name> ActiveSitreps;
- ActiveSitreps.Length = 0;
- ActiveSitreps = GetSitrepsGeneric(MissionState);
- return ActiveSitreps;
- }
- function DukeMissionOnSuccess(XComGameState NewGameState, XComGameState_MissionSite MissionState)
- {
- GiveRewards(NewGameState, MissionState);
- SpawnPointOfInterest(NewGameState, MissionState);
- MissionState.RemoveEntity(NewGameState);
- AddDukeToCrew(NewGameState);
- class'XComGameState_HeadquartersResistance'.static.RecordResistanceActivity(NewGameState, 'ResAct_LandedUFOsCompleted');
- }
- //---------------------------------------------------------------------------------------
- // Call in strategy to add Central as a normal soldier to your crew
- function AddDukeToCrew(XComGameState NewGameState)
- {
- local XComGameStateHistory History;
- local XComGameState_HeadquartersXCom XComHQ;
- local XComGameState_Unit UnitState;
- local X2ItemTemplateManager ItemTemplateManager;
- local XComGameState_Item ItemState;
- local X2ItemTemplate ItemTemplate;
- History = class'XComGameStateHistory'.static.GetGameStateHistory();
- foreach History.IterateByClassType(class'XComGameState_Unit', UnitState)
- {
- if(UnitState.GetMyTemplateName() == 'DukeSoldier')
- {
- XComHQ = XComGameState_HeadquartersXCom(History.GetSingleGameStateObjectForClass(class'XComGameState_HeadquartersXCom'));
- XComHQ = XComGameState_HeadquartersXCom(NewGameState.CreateStateObject(class'XComGameState_HeadquartersXCom', XComHQ.ObjectID));
- NewGameState.AddStateObject(XComHQ);
- ItemTemplateManager = class'X2ItemTemplateManager'.static.GetItemTemplateManager();
- ItemTemplate = ItemTemplateManager.FindItemTemplate('IRI_Duke_Winchester');
- ItemState = ItemTemplate.CreateInstanceFromTemplate(NewGameState);
- NewGameState.AddStateObject(ItemState);
- XComHQ.AddItemToHQInventory(ItemState);
- ItemTemplateManager = class'X2ItemTemplateManager'.static.GetItemTemplateManager();
- ItemTemplate = ItemTemplateManager.FindItemTemplate('IRI_DukeWeapons');
- ItemState = ItemTemplate.CreateInstanceFromTemplate(NewGameState);
- NewGameState.AddStateObject(ItemState);
- XComHQ.AddItemToHQInventory(ItemState);
- ItemTemplateManager = class'X2ItemTemplateManager'.static.GetItemTemplateManager();
- ItemTemplate = ItemTemplateManager.FindItemTemplate('IRI_DukeArmor_Kevlar');
- ItemState = ItemTemplate.CreateInstanceFromTemplate(NewGameState);
- NewGameState.AddStateObject(ItemState);
- XComHQ.AddItemToHQInventory(ItemState);
- if(XComHQ.HasItemByName('MediumPlatedArmor'))
- {
- ItemTemplateManager = class'X2ItemTemplateManager'.static.GetItemTemplateManager();
- ItemTemplate = ItemTemplateManager.FindItemTemplate('IRI_DukeArmor_Plated');
- ItemState = ItemTemplate.CreateInstanceFromTemplate(NewGameState);
- NewGameState.AddStateObject(ItemState);
- XComHQ.AddItemToHQInventory(ItemState);
- }
- if(XComHQ.HasItemByName('MediumPoweredArmor'))
- {
- ItemTemplateManager = class'X2ItemTemplateManager'.static.GetItemTemplateManager();
- ItemTemplate = ItemTemplateManager.FindItemTemplate('IRI_DukeArmor_Powered');
- ItemState = ItemTemplate.CreateInstanceFromTemplate(NewGameState);
- NewGameState.AddStateObject(ItemState);
- XComHQ.AddItemToHQInventory(ItemState);
- }
- UnitState = XComGameState_Unit(NewGameState.CreateStateObject(class'XComGameState_Unit', UnitState.ObjectID));
- NewGameState.AddStateObject(UnitState);
- XComHQ.AddToCrew(NewGameState, UnitState);
- //XComGameInfo(class'Engine'.static.GetCurrentWorldInfo().Game).GameRuleset.SubmitGameState(NewGameState); this gets handled by the game automatically
- }
- }
- }
- function DukeMissionOnFailure(XComGameState NewGameState, XComGameState_MissionSite MissionState)
- {
- MissionState.RemoveEntity(NewGameState);
- AddDukeToCrew(NewGameState);
- class'XComGameState_HeadquartersResistance'.static.DeactivatePOI(NewGameState, MissionState.POIToSpawn);
- class'XComGameState_HeadquartersResistance'.static.RecordResistanceActivity(NewGameState, 'ResAct_LandedUFOsFailed');
- }
- // #######################################################################################
- // -------------------- GENERIC FUNCTIONS ------------------------------------------------
- // #######################################################################################
- function int GetMissionDifficultyFromTemplate(XComGameState_MissionSite MissionState)
- {
- local int Difficulty;
- Difficulty = MissionState.GetMissionSource().DifficultyValue;
- Difficulty = Clamp(Difficulty, class'X2StrategyGameRulesetDataStructures'.default.MinMissionDifficulty,
- class'X2StrategyGameRulesetDataStructures'.default.MaxMissionDifficulty);
- return Difficulty;
- }
- function GiveRewards(XComGameState NewGameState, XComGameState_MissionSite MissionState, optional array<int> ExcludeIndices)
- {
- local XComGameStateHistory History;
- local XComGameState_Reward RewardState;
- local int idx;
- History = `XCOMHISTORY;
- // First Check if we need to exclude some rewards
- for(idx = 0; idx < MissionState.Rewards.Length; idx++)
- {
- RewardState = XComGameState_Reward(History.GetGameStateForObjectID(MissionState.Rewards[idx].ObjectID));
- if(RewardState != none)
- {
- if(ExcludeIndices.Find(idx) != INDEX_NONE)
- {
- RewardState.CleanUpReward(NewGameState);
- NewGameState.RemoveStateObject(RewardState.ObjectID);
- MissionState.Rewards.Remove(idx, 1);
- idx--;
- }
- }
- }
- class'XComGameState_HeadquartersResistance'.static.SetRecapRewardString(NewGameState, MissionState.GetRewardAmountStringArray());
- // @mnauta: set VIP rewards string is deprecated, leaving blank
- class'XComGameState_HeadquartersResistance'.static.SetVIPRewardString(NewGameState, "" /*REWARDS!*/);
- for(idx = 0; idx < MissionState.Rewards.Length; idx++)
- {
- RewardState = XComGameState_Reward(History.GetGameStateForObjectID(MissionState.Rewards[idx].ObjectID));
- // Give rewards
- if(RewardState != none)
- {
- RewardState.GiveReward(NewGameState);
- }
- // Remove the reward state objects
- NewGameState.RemoveStateObject(RewardState.ObjectID);
- }
- MissionState.Rewards.Length = 0;
- }
- function SpawnPointOfInterest(XComGameState NewGameState, XComGameState_MissionSite MissionState)
- {
- local XComGameStateHistory History;
- local XComGameState_PointOfInterest POIState;
- local XComGameState_BlackMarket BlackMarketState;
- History = `XCOMHISTORY;
- BlackMarketState = XComGameState_BlackMarket(History.GetSingleGameStateObjectForClass(class'XComGameState_BlackMarket'));
- if (!BlackMarketState.ShowBlackMarket(NewGameState))
- {
- if (MissionState.POIToSpawn.ObjectID != 0)
- {
- POIState = XComGameState_PointOfInterest(History.GetGameStateForObjectID(MissionState.POIToSpawn.ObjectID));
- if (POIState != none)
- {
- POIState = XComGameState_PointOfInterest(NewGameState.CreateStateObject(class'XComGameState_PointOfInterest', POIState.ObjectID));
- NewGameState.AddStateObject(POIState);
- POIState.Spawn(NewGameState);
- }
- }
- }
- else
- {
- class'XComGameState_HeadquartersResistance'.static.DeactivatePOI(NewGameState, MissionState.POIToSpawn);
- }
- }
- //---------------------------------------------------------------------------------------
- function bool OneStrategyObjectiveCompleted(XComGameState_BattleData BattleDataState)
- {
- return (BattleDataState.OneStrategyObjectiveCompleted());
- }
- static function bool StrategySitrepsFilter(X2DataTemplate Template)
- {
- local X2SitRepTemplate SitRep;
- SitRep = X2SitRepTemplate( Template );
- if ((SitRep == none) || SitRep.bExcludeFromStrategy)
- return false;
- return true;
- }
- static function array<name> GetSitrepsGeneric(XComGameState_MissionSite MissionState)
- {
- local X2CardManager CardMgr;
- local X2SitRepTemplateManager SitRepMgr;
- local X2DataTemplate DataTemplate;
- local X2SitRepTemplate SitRepTemplate;
- local array<string> SitRepCards;
- local array<name> ActiveSitreps;
- local String SitRepLabel;
- CardMgr = class'X2CardManager'.static.GetCardManager();
- SitRepMgr = class'X2SitRepTemplateManager'.static.GetSitRepTemplateManager();
- ActiveSitreps.Length = 0;
- // Create SitRep Deck, have to do each time in case more were added
- foreach SitRepMgr.IterateTemplates(DataTemplate, StrategySitrepsFilter)
- {
- SitRepTemplate = X2SitRepTemplate(DataTemplate);
- CardMgr.AddCardToDeck('SitReps', string(SitRepTemplate.DataName));
- }
- // Grab the next valid SitRep from the deck
- CardMgr.GetAllCardsInDeck('SitReps', SitRepCards);
- foreach SitRepCards(SitRepLabel)
- {
- SitRepTemplate = class'X2SitRepTemplateManager'.static.GetSitRepTemplateManager().FindSitRepTemplate(name(SitRepLabel));
- if(SitRepTemplate != none && SitRepTemplate.MeetsRequirements(MissionState))
- {
- ActiveSitreps.AddItem(name(SitRepLabel));
- CardMgr.MarkCardUsed('SitReps', SitRepLabel);
- break;
- }
- }
- return ActiveSitreps;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement