@@ -1450,37 +1450,40 @@ function DestinationReached()
14501450
14511451// Start Issue #1526
14521452// Checks if the definitions are stale and if plot exists and is valid for mission
1453- private function bool IsMissionValid (GeneratedMissionData MissionData )
1453+ function bool IsMissionValid ()
14541454{
14551455 local MissionDefinition MissionDef ;
14561456 local PlotDefinition PlotDef ;
14571457 local bool bMissionStale , bPlotStale , bPlotInvalid , bPlotMissing ;
14581458
1459- `TACTICALMISSIONMGR .GetMissionDefinitionForType (MissionData .Mission .sType , MissionDef );
1459+ `TACTICALMISSIONMGR .GetMissionDefinitionForType (GeneratedMission .Mission .sType , MissionDef );
14601460
1461- if (MissionData .Mission != MissionDef )
1461+ if (GeneratedMission .Mission != MissionDef )
14621462 {
14631463 bMissionStale = true ;
14641464 }
14651465
1466- if (!`MAPS .DoesMapPackageExist (MissionData .Plot .MapName ))
1466+ if (!`MAPS .DoesMapPackageExist (GeneratedMission .Plot .MapName ))
14671467 {
14681468 bPlotMissing = true ;
14691469 }
14701470
1471- PlotDef = `PARCELMGR .GetPlotDefinition (MissionData .Plot .MapName , MissionData .Biome .strType );
1472- if (MissionData .Plot != PlotDef )
1471+ PlotDef = `PARCELMGR .GetPlotDefinition (GeneratedMission .Plot .MapName , GeneratedMission .Biome .strType );
1472+ if (GeneratedMission .Plot != PlotDef )
14731473 {
14741474 bPlotStale = true ;
14751475 }
14761476
14771477 if (!bMissionStale && !bPlotStale && !bPlotMissing )
14781478 {
1479- bPlotInvalid = ! `PARCELMGR .IsPlotValidForMission (MissionData .Plot , MissionData .Mission );
1479+ bPlotInvalid = `PARCELMGR .IsPlotValidForMission (GeneratedMission .Plot , GeneratedMission .Mission );
14801480 }
14811481
14821482 if (bMissionStale || bPlotMissing || bPlotStale || bPlotInvalid )
14831483 {
1484+ CHReleaseLog ("ERROR: Mission determined to not be valid, this can happen due to adding/removing mods or mod updates" , 'X2WOTCCommunityHighlander' );
1485+ PrintMissionInvalidationText (self );
1486+ PrintMissionInformation (self );
14841487 return false ;
14851488 }
14861489 else
@@ -1498,23 +1501,35 @@ private function bool RebuildMission()
14981501 local XComGameState_Reward MissionReward ;
14991502 local XComGameState_MissionSite MissionState ;
15001503 local XComGameState_HeadquartersXCom XComHQ ;
1501- local int MissionIndex ;
1504+ local string BattleOpName ;
1505+ local int HQMissionDataIndex ;
15021506
15031507 History = `XCOMHISTORY ;
1508+
15041509 NewGameState = class 'XComGameStateContext_ChangeContainer' .static .CreateChangeState ("CHL: Rebuilding Mission" );
15051510 MissionState = XComGameState_MissionSite (NewGameState .ModifyStateObject (class 'XComGameState_MissionSite' , ObjectID ));
15061511
15071512 MissionReward = XComGameState_Reward (History .GetGameStateForObjectID (Rewards [0 ].ObjectID ));
1513+ BattleOpName = GeneratedMission .BattleOpName ;
15081514
15091515 // Rebuilds mission here
15101516 MissionState .SetMissionData (MissionReward .GetMyTemplate (), true , GeneratedMission .LevelSeed );
1517+ MissionState .GeneratedMission .BattleOpName = BattleOpName ;
15111518
15121519 // Reset schedules
15131520 MissionState .SelectedMissionData .SelectedMissionScheduleName = '';
15141521 MissionState .CacheSelectedMissionData (MissionState .SelectedMissionData .ForceLevel , MissionState .SelectedMissionData .AlertLevel );
15151522
1516- if (!IsMissionValid (MissionState .GeneratedMission ))
1523+ CHReleaseLog ("WARNING: Rebuilt mission, printing new mission data" , 'X2WOTCCommunityHighlander' );
1524+ PrintMissionInformation (MissionState );
1525+
1526+ if ( MissionState .GetMissionSource () == None || MissionState .GeneratedMission .Mission .sType == "" ||
1527+ !`MAPS .DoesMapPackageExist (MissionState .GeneratedMission .Plot .MapName ) ||
1528+ !`PARCELMGR .IsPlotValidForMission (MissionState .GeneratedMission .Plot , MissionState .GeneratedMission .Mission ) )
15171529 {
1530+ CHReleaseLog ("ERROR: Rebuilt mission still determined to be invalid, tactical mission will launch with original mission data" , 'X2WOTCCommunityHighlander' );
1531+ PrintMissionInvalidationText (MissionState );
1532+
15181533 History .CleanupPendingGameState (NewGameState );
15191534 return false ;
15201535 }
@@ -1526,58 +1541,60 @@ private function bool RebuildMission()
15261541 XComHQ = XComGameState_HeadquartersXCom (History .GetSingleGameStateObjectForClass (class 'XComGameState_HeadquartersXCom' ));
15271542 XComHQ = XComGameState_HeadquartersXCom (NewGameState .ModifyStateObject (class 'XComGameState_HeadquartersXCom' , XComHQ .ObjectID ));
15281543
1529- MissionIndex = XComHQ .arrGeneratedMissionData .Find ('MissionID' , ObjectID );
1530- if (MissionIndex != INDEX_NONE )
1544+ HQMissionDataIndex = XComHQ .arrGeneratedMissionData .Find ('MissionID' , ObjectID );
1545+ if (HQMissionDataIndex != INDEX_NONE )
15311546 {
1532- XComHQ .arrGeneratedMissionData [MissionIndex ] = MissionState . GeneratedMission ;
1547+ XComHQ .arrGeneratedMissionData [HQMissionDataIndex ] = GeneratedMission ;
15331548 }
15341549
1550+ CHReleaseLog ("WARNING: Rebuilt mission determined valid, tactical mission will launch with rebuilt mission data" , 'X2WOTCCommunityHighlander' );
15351551 `XCOMGAME .GameRuleset .SubmitGameState (NewGameState );
15361552 return true ;
15371553}
1554+ // End Issue #1526
15381555
15391556// Start Issue #1526
1540- private function PrintMissionInformation ()
1557+ private function PrintMissionInformation (XComGameState_MissionSite MissionSite )
15411558{
15421559 local int i ;
15431560 CHReleaseLog ("" , 'X2WOTCCommunityHighlander' );
15441561 CHReleaseLog ("-- MISSION DATA --" , 'X2WOTCCommunityHighlander' );
1545- CHReleaseLog ("Mission ObjectID:" @ ObjectID , 'X2WOTCCommunityHighlander' );
1546- CHReleaseLog ("Mission Region ObjectID:" @ Region .ObjectID , 'X2WOTCCommunityHighlander' );
1547- CHReleaseLog ("Mission Source:" @ Source , 'X2WOTCCommunityHighlander' );
1548- CHReleaseLog ("Mission Name:" @ GeneratedMission .Mission .MissionName , 'X2WOTCCommunityHighlander' );
1549- CHReleaseLog ("Mission Type:" @ GeneratedMission .Mission .sType , 'X2WOTCCommunityHighlander' );
1550- CHReleaseLog ("Mission Family:" @ GeneratedMission .Mission .MissionFamily , 'X2WOTCCommunityHighlander' );
1551- CHReleaseLog ("Mission Biome:" @ GeneratedMission .Biome .strType , 'X2WOTCCommunityHighlander' );
1562+ CHReleaseLog ("Mission ObjectID:" @ MissionSite . ObjectID , 'X2WOTCCommunityHighlander' );
1563+ CHReleaseLog ("Mission Region ObjectID:" @ MissionSite . Region .ObjectID , 'X2WOTCCommunityHighlander' );
1564+ CHReleaseLog ("Mission Source:" @ MissionSite . Source , 'X2WOTCCommunityHighlander' );
1565+ CHReleaseLog ("Mission Name:" @ MissionSite . GeneratedMission .Mission .MissionName , 'X2WOTCCommunityHighlander' );
1566+ CHReleaseLog ("Mission Type:" @ MissionSite . GeneratedMission .Mission .sType , 'X2WOTCCommunityHighlander' );
1567+ CHReleaseLog ("Mission Family:" @ MissionSite . GeneratedMission .Mission .MissionFamily , 'X2WOTCCommunityHighlander' );
1568+ CHReleaseLog ("Mission Biome:" @ MissionSite . GeneratedMission .Biome .strType , 'X2WOTCCommunityHighlander' );
15521569
1553- for (i = 0 ; i < GeneratedMission .Mission .RequiredPlotObjectiveTags .Length ; i ++)
1570+ for (i = 0 ; i < MissionSite . GeneratedMission .Mission .RequiredPlotObjectiveTags .Length ; i ++)
15541571 {
1555- CHReleaseLog ("Mission Required Plot Objective Tags:" @ GeneratedMission .Mission .RequiredPlotObjectiveTags [i ], 'X2WOTCCommunityHighlander' );
1572+ CHReleaseLog ("Mission Required Plot Objective Tags:" @ MissionSite . GeneratedMission .Mission .RequiredPlotObjectiveTags [i ], 'X2WOTCCommunityHighlander' );
15561573 }
1557- for (i = 0 ; i < GeneratedMission .Mission .ExcludedPlotObjectiveTags .Length ; i ++)
1574+ for (i = 0 ; i < MissionSite . GeneratedMission .Mission .ExcludedPlotObjectiveTags .Length ; i ++)
15581575 {
1559- CHReleaseLog ("Mission Excluded Plot Objective Tags:" @ GeneratedMission .Mission .ExcludedPlotObjectiveTags [i ], 'X2WOTCCommunityHighlander' );
1576+ CHReleaseLog ("Mission Excluded Plot Objective Tags:" @ MissionSite . GeneratedMission .Mission .ExcludedPlotObjectiveTags [i ], 'X2WOTCCommunityHighlander' );
15601577 }
1561- for (i = 0 ; i < GeneratedMission .SitReps .Length ; i ++)
1578+ for (i = 0 ; i < MissionSite . GeneratedMission .SitReps .Length ; i ++)
15621579 {
1563- CHReleaseLog ("Mission SitReps:" @ GeneratedMission .SitReps [i ], 'X2WOTCCommunityHighlander' );
1580+ CHReleaseLog ("Mission SitReps:" @ MissionSite . GeneratedMission .SitReps [i ], 'X2WOTCCommunityHighlander' );
15641581 }
1565- CHReleaseLog ("Plot Mapname:" @ GeneratedMission .Plot .MapName , 'X2WOTCCommunityHighlander' );
1566- CHReleaseLog ("Plot Type:" @ GeneratedMission .Plot .strType , 'X2WOTCCommunityHighlander' );
1567- for (i = 0 ; i < GeneratedMission .Plot .ValidBiomes .Length ; i ++)
1582+ CHReleaseLog ("Plot Mapname:" @ MissionSite . GeneratedMission .Plot .MapName , 'X2WOTCCommunityHighlander' );
1583+ CHReleaseLog ("Plot Type:" @ MissionSite . GeneratedMission .Plot .strType , 'X2WOTCCommunityHighlander' );
1584+ for (i = 0 ; i < MissionSite . GeneratedMission .Plot .ValidBiomes .Length ; i ++)
15681585 {
1569- CHReleaseLog ("Plot Biomes:" @ GeneratedMission .Plot .ValidBiomes [i ], 'X2WOTCCommunityHighlander' );
1586+ CHReleaseLog ("Plot Biomes:" @ MissionSite . GeneratedMission .Plot .ValidBiomes [i ], 'X2WOTCCommunityHighlander' );
15701587 }
1571- for (i = 0 ; i < GeneratedMission .Plot .ObjectiveTags .Length ; i ++)
1588+ for (i = 0 ; i < MissionSite . GeneratedMission .Plot .ObjectiveTags .Length ; i ++)
15721589 {
1573- CHReleaseLog ("Plot Objective Tags:" @ GeneratedMission .Plot .ObjectiveTags [i ], 'X2WOTCCommunityHighlander' );
1590+ CHReleaseLog ("Plot Objective Tags:" @ MissionSite . GeneratedMission .Plot .ObjectiveTags [i ], 'X2WOTCCommunityHighlander' );
15741591 }
1575- CHReleaseLog ("Mission Forcelevel:" @ SelectedMissionData .ForceLevel , 'X2WOTCCommunityHighlander' );
1576- CHReleaseLog ("Mission Alertlevel:" @ SelectedMissionData .AlertLevel , 'X2WOTCCommunityHighlander' );
1577- CHReleaseLog ("Mission Schedule:" @ SelectedMissionData .SelectedMissionScheduleName , 'X2WOTCCommunityHighlander' );
1578- for (i = 0 ; i < SelectedMissionData .SelectedEncounters .Length ; i ++)
1592+ CHReleaseLog ("Mission Forcelevel:" @ MissionSite . SelectedMissionData .ForceLevel , 'X2WOTCCommunityHighlander' );
1593+ CHReleaseLog ("Mission Alertlevel:" @ MissionSite . SelectedMissionData .AlertLevel , 'X2WOTCCommunityHighlander' );
1594+ CHReleaseLog ("Mission Schedule:" @ MissionSite . SelectedMissionData .SelectedMissionScheduleName , 'X2WOTCCommunityHighlander' );
1595+ for (i = 0 ; i < MissionSite . SelectedMissionData .SelectedEncounters .Length ; i ++)
15791596 {
1580- CHReleaseLog ("Mission EncounterIDs:" @ SelectedMissionData .SelectedEncounters [i ].SelectedEncounterName , 'X2WOTCCommunityHighlander' );
1597+ CHReleaseLog ("Mission EncounterIDs:" @ MissionSite . SelectedMissionData .SelectedEncounters [i ].SelectedEncounterName , 'X2WOTCCommunityHighlander' );
15811598 }
15821599
15831600 CHReleaseLog ("-- END MISSION DATA --" , 'X2WOTCCommunityHighlander' );
@@ -1586,37 +1603,37 @@ private function PrintMissionInformation()
15861603// End Issue #1526
15871604
15881605// Start Issue #1526
1589- private function PrintMissionInvalidationText ()
1606+ private function PrintMissionInvalidationText (XComGameState_MissionSite MissionSite )
15901607{
15911608 local MissionDefinition MissionDef ;
15921609 local PlotDefinition PlotDef ;
15931610
1594- `TACTICALMISSIONMGR .GetMissionDefinitionForType (GeneratedMission .Mission .sType , MissionDef );
1595- PlotDef = `PARCELMGR .GetPlotDefinition (GeneratedMission .Plot .MapName , GeneratedMission .Biome .strType );
1611+ `TACTICALMISSIONMGR .GetMissionDefinitionForType (MissionSite . GeneratedMission .Mission .sType , MissionDef );
1612+ PlotDef = `PARCELMGR .GetPlotDefinition (MissionSite . GeneratedMission .Plot .MapName , MissionSite . GeneratedMission .Biome .strType );
15961613
15971614 CHReleaseLog ("" , 'X2WOTCCommunityHighlander' );
15981615 CHReleaseLog ("-- REASON FOR MISSION INVALIDATION --" , 'X2WOTCCommunityHighlander' );
1599- if (GetMissionSource () == None )
1616+ if (MissionSite . GetMissionSource () == None )
16001617 {
16011618 CHReleaseLog ("Mission source doesn't exist" , 'X2WOTCCommunityHighlander' );
16021619 }
1603- if (GeneratedMission .Mission .sType == "" )
1620+ if (MissionSite . GeneratedMission .Mission .sType == "" )
16041621 {
16051622 CHReleaseLog ("Mission definition doesn't exist" , 'X2WOTCCommunityHighlander' );
16061623 }
1607- if (GeneratedMission .Mission != MissionDef )
1624+ if (MissionSite . GeneratedMission .Mission != MissionDef )
16081625 {
16091626 CHReleaseLog ("Mission definition is outdated" , 'X2WOTCCommunityHighlander' );
16101627 }
1611- if (!`MAPS .DoesMapPackageExist (GeneratedMission .Plot .MapName ))
1628+ if (!`MAPS .DoesMapPackageExist (MissionSite . GeneratedMission .Plot .MapName ))
16121629 {
16131630 CHReleaseLog ("Plot map doesn't exist" , 'X2WOTCCommunityHighlander' );
16141631 }
1615- if (!`PARCELMGR .IsPlotValidForMission (GeneratedMission .Plot , GeneratedMission .Mission ))
1632+ if (!`PARCELMGR .IsPlotValidForMission (MissionSite . GeneratedMission .Plot , MissionSite . GeneratedMission .Mission ))
16161633 {
16171634 CHReleaseLog ("Plot is not valid for mission" , 'X2WOTCCommunityHighlander' );
16181635 }
1619- if (GeneratedMission .Plot != PlotDef )
1636+ if (MissionSite . GeneratedMission .Plot != PlotDef )
16201637 {
16211638 CHReleaseLog ("Plot definition is outdated" , 'X2WOTCCommunityHighlander' );
16221639 }
@@ -1625,82 +1642,6 @@ private function PrintMissionInvalidationText()
16251642}
16261643// End Issue #1526
16271644
1628- // Start Issue #1526
1629- private function bool ValidateMission ()
1630- {
1631- local TDialogueBoxData kDialogData ;
1632- local bool bRebuildSuccess ;
1633-
1634- if (!IsMissionValid (GeneratedMission ))
1635- {
1636- CHReleaseLog ("ERROR: Mission determined to not be valid, this can happen due to adding/removing mods or mod updates" , 'X2WOTCCommunityHighlander' );
1637- PrintMissionInvalidationText ();
1638- PrintMissionInformation ();
1639-
1640- bRebuildSuccess = RebuildMission ();
1641- if (bRebuildSuccess )
1642- {
1643- CHReleaseLog ("WARNING: Successfully rebuilt mission, tactical mission will launch with rebuilt mission data" , 'X2WOTCCommunityHighlander' );
1644- PrintMissionInformation ();
1645- }
1646- else
1647- {
1648- CHReleaseLog ("ERROR: Failed to rebuild mission, tactical mission will launch with original mission data" , 'X2WOTCCommunityHighlander' );
1649- }
1650-
1651- kDialogData .eType = eDialog_Warning ;
1652- kDialogData .strTitle = class 'CHHelpers' .default .m_strValidateMissionDialogTitle ;
1653- kDialogData .strText = bRebuildSuccess ? class 'CHHelpers' .default .m_strValidateMissionDialogTextSuccess : class 'CHHelpers' .default .m_strValidateMissionDialogTextFail ;
1654- kDialogData .strAccept = class 'UIDialogueBox' .default .m_strDefaultAcceptLabel ;
1655- kDialogData .fnCallback = ValidateMissionDialogCallback ;
1656-
1657- `HQPRES .UIRaiseDialog (kDialogData );
1658-
1659- return false ;
1660- }
1661-
1662- return true ;
1663- }
1664- // End Issue #1526
1665-
1666- // Start Issue #1526
1667- simulated function ValidateMissionDialogCallback (Name eAction )
1668- {
1669- local XComGameStateHistory History ;
1670- local XComGameState_HeadquartersXCom XComHQ ;
1671- local XGStrategy StrategyGame ;
1672- local XComGameState NewGameState ;
1673-
1674- NewGameState = class 'XComGameStateContext_ChangeContainer' .static .CreateChangeState ("Launch Mission Selected" );
1675- `XEVENTMGR .TriggerEvent ('LaunchMissionSelected' , , , NewGameState );
1676- if (GetMissionSource ().DataName == 'MissionSource_Final' )
1677- {
1678- `XEVENTMGR .TriggerEvent ('FinalMissionSquadSelected' , , , NewGameState );
1679- }
1680- `XCOMGAME .GameRuleset .SubmitGameState (NewGameState );
1681-
1682- // return the Skyranger to the Avenger upon returning from the mission
1683- History = `XCOMHISTORY ;
1684- XComHQ = XComGameState_HeadquartersXCom (History .GetSingleGameStateObjectForClass (class 'XComGameState_HeadquartersXCom' ));
1685- XComHQ .SetPendingPointOfTravel (XComHQ );
1686-
1687- StrategyGame = `GAME ;
1688-
1689- if (StrategyGame .SimCombatNextMission )
1690- {
1691- StrategyGame .SimCombatNextMission = false ;
1692- `HQPRES .m_bExitFromSimCombat = true ;
1693- `HQPRES .ExitStrategyMap ();
1694- class 'X2StrategyGame_SimCombat' .static .SimCombat ();
1695- }
1696- else
1697- {
1698- // Launch this Mission!
1699- StrategyGame .LaunchTacticalBattle (ObjectID );
1700- }
1701- }
1702- // End Issue #1526
1703-
17041645function ConfirmMission ()
17051646{
17061647 local XComGameStateHistory History ;
@@ -1711,9 +1652,9 @@ function ConfirmMission()
17111652 /// HL-Docs: ref:Bugfixes; issue:1526
17121653 /// Validates the mission before launching a tactical battle, and attempts rebuilding of mission if determined invalid
17131654 // Start Issue #1526
1714- if (!ValidateMission ())
1655+ if (!IsMissionValid ())
17151656 {
1716- return ;
1657+ RebuildMission () ;
17171658 }
17181659 // End Issue #1526
17191660
0 commit comments