fix the end game dialog not showing which objectives failed

- don't mark everything as failed just because one objective did
- remove fake objectives workarounds for non-playable factions
This commit is contained in:
Matthias Mailänder
2014-12-06 20:02:16 +01:00
parent de28df2c41
commit e16bc064a0
4 changed files with 8 additions and 9 deletions

View File

@@ -41,6 +41,7 @@ namespace OpenRA
public readonly PlayerReference PlayerReference;
public bool IsBot;
public int SpawnPoint;
public bool HasObjectives = false;
public Shroud Shroud;
public World World { get; private set; }

View File

@@ -139,7 +139,7 @@ namespace OpenRA.Mods.RA
{
var players = player.World.Players.Where(p => !p.NonCombatant);
var gameOver = players.All(p => p.WinState != WinState.Undefined);
var gameOver = players.All(p => p.WinState != WinState.Undefined || !p.HasObjectives);
if (gameOver)
Game.RunAfterDelay(info.GameOverDelay, () =>
{
@@ -181,6 +181,8 @@ namespace OpenRA.Mods.RA
foreach (var p in enemies)
p.PlayerActor.Trait<MissionObjectives>().ForceDefeat(p);
}
CheckIfGameIsOver(player);
}
public void OnPlayerLost(Player player)
@@ -218,6 +220,8 @@ namespace OpenRA.Mods.RA
p.World.OnPlayerWinStateChanged(p);
}
}
CheckIfGameIsOver(player);
}
public void ForceDefeat(Player player)
@@ -227,7 +231,7 @@ namespace OpenRA.Mods.RA
MarkFailed(player, id);
}
public event Action<Player> ObjectiveAdded = player => { };
public event Action<Player> ObjectiveAdded = player => { player.HasObjectives = true; };
public void OnObjectiveAdded(Player player, int id) {}
public void OnObjectiveCompleted(Player player, int id) {}

View File

@@ -96,7 +96,6 @@ end
RescueFailed = function()
player.MarkFailedObjective(SurviveObjective)
ussr.MarkCompletedObjective(DefendObjective)
end
OilPumpDestroyed = function()
@@ -125,7 +124,6 @@ HelicopterGone = function()
Trigger.AfterDelay(DateTime.Seconds(1), function()
player.MarkCompletedObjective(ExtractObjective)
player.MarkCompletedObjective(SurviveObjective)
ussr.MarkFailedObjective(DefendObjective)
if not collateralDamage then
player.MarkCompletedObjective(CivilProtectionObjective)
end
@@ -178,9 +176,7 @@ WorldLoaded = function()
Media.PlayMovieFullscreen("landing.vqa", function()
FindEinsteinObjective = player.AddPrimaryObjective("Find Einstein.")
SurviveObjective = player.AddPrimaryObjective("Tanya and Einstein must survive.")
england.AddPrimaryObjective("Destroy the soviet base after a successful rescue.")
CivilProtectionObjective = player.AddSecondaryObjective("Protect all civilians.")
DefendObjective = ussr.AddPrimaryObjective("Kill Tanya and keep Einstein hostage.")
RunInitialActivities()
end)

View File

@@ -111,8 +111,6 @@ WorldLoaded = function()
Media.PlayMovieFullscreen("mcv.vqa", function()
ConquestObjective = player.AddPrimaryObjective("Secure the area.")
ussr.AddPrimaryObjective("Defend your base.")
ukraine.AddPrimaryObjective("Destroy the convoy.")
end)
Trigger.AfterDelay(DateTime.Seconds(1), function() Media.PlaySpeechNotification(allies, "MissionTimerInitialised") end)