Added notifications for new objectives to scripted missions

Fixes #6692
This commit is contained in:
Oliver Brakmann
2014-10-06 18:01:24 +02:00
parent d288868ca6
commit 36477ae323
9 changed files with 102 additions and 69 deletions

View File

@@ -97,6 +97,16 @@ namespace OpenRA.Mods.RA.Scripting
return mo.Objectives[id].Description; return mo.Objectives[id].Description;
} }
[ScriptActorPropertyActivity]
[Desc("Returns the type of an objective.")]
public string GetObjectiveType(int id)
{
if (id < 0 || id >= mo.Objectives.Count)
throw new LuaException("Objective ID is out of range.");
return mo.Objectives[id].Type == ObjectiveType.Primary ? "Primary" : "Secondary";
}
[ScriptActorPropertyActivity] [ScriptActorPropertyActivity]
[Desc("Returns true if this player has lost all units/actors that have the MustBeDestroyed trait.")] [Desc("Returns true if this player has lost all units/actors that have the MustBeDestroyed trait.")]
public bool HasNoRequiredUnits() public bool HasNoRequiredUnits()

View File

@@ -44,10 +44,9 @@ WorldLoaded = function()
player = Player.GetPlayer("GDI") player = Player.GetPlayer("GDI")
enemy = Player.GetPlayer("Nod") enemy = Player.GetPlayer("Nod")
nodObjective = enemy.AddPrimaryObjective("Destroy all GDI troops") Trigger.OnObjectiveAdded(player, function(p, id)
gdiObjective1 = player.AddPrimaryObjective("Eliminate all Nod forces in the area") Media.DisplayMessage(p.GetObjectiveDescription(id), "New " .. string.lower(p.GetObjectiveType(id)) .. " objective")
gdiObjective2 = player.AddSecondaryObjective("Establish a beachhead") end)
Trigger.OnObjectiveCompleted(player, function(p, id) Trigger.OnObjectiveCompleted(player, function(p, id)
Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective completed") Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective completed")
end) end)
@@ -69,6 +68,10 @@ WorldLoaded = function()
end) end)
end) end)
nodObjective = enemy.AddPrimaryObjective("Destroy all GDI troops")
gdiObjective1 = player.AddPrimaryObjective("Eliminate all Nod forces in the area")
gdiObjective2 = player.AddSecondaryObjective("Establish a beachhead")
Trigger.OnIdle(Gunboat, function() SetGunboatPath(Gunboat) end) Trigger.OnIdle(Gunboat, function() SetGunboatPath(Gunboat) end)
SendNodPatrol() SendNodPatrol()

View File

@@ -33,10 +33,9 @@ WorldLoaded = function()
player = Player.GetPlayer("GDI") player = Player.GetPlayer("GDI")
enemy = Player.GetPlayer("Nod") enemy = Player.GetPlayer("Nod")
nodObjective = enemy.AddPrimaryObjective("Destroy all GDI troops") Trigger.OnObjectiveAdded(player, function(p, id)
gdiObjective1 = player.AddPrimaryObjective("Eliminate all Nod forces in the area") Media.DisplayMessage(p.GetObjectiveDescription(id), "New " .. string.lower(p.GetObjectiveType(id)) .. " objective")
gdiObjective2 = player.AddSecondaryObjective("Capture the Tiberium Refinery") end)
Trigger.OnObjectiveCompleted(player, function(p, id) Trigger.OnObjectiveCompleted(player, function(p, id)
Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective completed") Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective completed")
end) end)
@@ -58,6 +57,10 @@ WorldLoaded = function()
end) end)
end) end)
nodObjective = enemy.AddPrimaryObjective("Destroy all GDI troops")
gdiObjective1 = player.AddPrimaryObjective("Eliminate all Nod forces in the area")
gdiObjective2 = player.AddSecondaryObjective("Capture the Tiberium Refinery")
Trigger.OnCapture(NodRefinery, function() player.MarkCompletedObjective(gdiObjective2) end) Trigger.OnCapture(NodRefinery, function() player.MarkCompletedObjective(gdiObjective2) end)
Trigger.OnKilled(NodRefinery, function() player.MarkFailedObjective(gdiObjective2) end) Trigger.OnKilled(NodRefinery, function() player.MarkFailedObjective(gdiObjective2) end)

View File

@@ -65,10 +65,9 @@ WorldLoaded = function()
player = Player.GetPlayer("GDI") player = Player.GetPlayer("GDI")
nod = Player.GetPlayer("Nod") nod = Player.GetPlayer("Nod")
nodObjective = nod.AddPrimaryObjective("Destroy all GDI troops") Trigger.OnObjectiveAdded(player, function(p, id)
gdiObjective1 = player.AddPrimaryObjective("Defend the town of Białystok") Media.DisplayMessage(p.GetObjectiveDescription(id), "New " .. string.lower(p.GetObjectiveType(id)) .. " objective")
gdiObjective2 = player.AddPrimaryObjective("Eliminate all Nod forces in the area") end)
Trigger.OnObjectiveCompleted(player, function(p, id) Trigger.OnObjectiveCompleted(player, function(p, id)
Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective completed") Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective completed")
end) end)
@@ -94,6 +93,10 @@ WorldLoaded = function()
end) end)
end) end)
nodObjective = nod.AddPrimaryObjective("Destroy all GDI troops")
gdiObjective1 = player.AddPrimaryObjective("Defend the town of Bialystok")
gdiObjective2 = player.AddPrimaryObjective("Eliminate all Nod forces in the area")
Trigger.OnExitedFootprint(TownAttackTrigger, function(a, id) Trigger.OnExitedFootprint(TownAttackTrigger, function(a, id)
if a.Owner == player then if a.Owner == player then
Trigger.RemoveFootprintTrigger(id) Trigger.RemoveFootprintTrigger(id)

View File

@@ -21,11 +21,9 @@ WorldLoaded = function()
gdi = Player.GetPlayer("GDI") gdi = Player.GetPlayer("GDI")
villagers = Player.GetPlayer("Villagers") villagers = Player.GetPlayer("Villagers")
NodObjective1 = nod.AddPrimaryObjective("Kill Nikoomba") Trigger.OnObjectiveAdded(nod, function(p, id)
NodObjective2 = nod.AddPrimaryObjective("Destroy the village") Media.DisplayMessage(p.GetObjectiveDescription(id), "New " .. string.lower(p.GetObjectiveType(id)) .. " objective")
NodObjective3 = nod.AddSecondaryObjective("Destroy all GDI troops in the area") end)
GDIObjective1 = gdi.AddPrimaryObjective("Eliminate all Nod forces")
Trigger.OnObjectiveCompleted(nod, function(p, id) Trigger.OnObjectiveCompleted(nod, function(p, id)
Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective completed") Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective completed")
end) end)
@@ -44,6 +42,11 @@ WorldLoaded = function()
end) end)
end) end)
NodObjective1 = nod.AddPrimaryObjective("Kill Nikoomba")
NodObjective2 = nod.AddPrimaryObjective("Destroy the village")
NodObjective3 = nod.AddSecondaryObjective("Destroy all GDI troops in the area")
GDIObjective1 = gdi.AddPrimaryObjective("Eliminate all Nod forces")
Trigger.OnKilled(Nikoomba, function() Trigger.OnKilled(Nikoomba, function()
nod.MarkCompletedObjective(NodObjective1) nod.MarkCompletedObjective(NodObjective1)
Trigger.AfterDelay(Utils.Seconds(1), function() Trigger.AfterDelay(Utils.Seconds(1), function()

View File

@@ -19,15 +19,9 @@ WorldLoaded = function()
player = Player.GetPlayer("Nod") player = Player.GetPlayer("Nod")
enemy = Player.GetPlayer("GDI") enemy = Player.GetPlayer("GDI")
gdiObjective = enemy.AddPrimaryObjective("Eliminate all Nod forces in the area") Trigger.OnObjectiveAdded(player, function(p, id)
nodObjective1 = player.AddPrimaryObjective("Capture the prison") Media.DisplayMessage(p.GetObjectiveDescription(id), "New " .. string.lower(p.GetObjectiveType(id)) .. " objective")
nodObjective2 = player.AddSecondaryObjective("Destroy all GDI forces") end)
InsertNodUnits()
Trigger.AfterDelay(Utils.Seconds(20), function() SendAttackWave(FirstAttackWave, AttackWaveSpawnA.Location) end)
Trigger.AfterDelay(Utils.Seconds(50), function() SendAttackWave(SecondThirdAttackWave, AttackWaveSpawnB.Location) end)
Trigger.AfterDelay(Utils.Seconds(100), function() SendAttackWave(SecondThirdAttackWave, AttackWaveSpawnC.Location) end)
Trigger.OnObjectiveCompleted(player, function(p, id) Trigger.OnObjectiveCompleted(player, function(p, id)
Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective completed") Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective completed")
end) end)
@@ -35,16 +29,6 @@ WorldLoaded = function()
Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective failed") Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective failed")
end) end)
Trigger.OnCapture(TechCenter, function()
Trigger.AfterDelay(Utils.Seconds(2), function()
player.MarkCompletedObjective(nodObjective1)
end)
end)
Trigger.OnKilled(TechCenter, function()
player.MarkFailedObjective(nodObjective1)
end)
Trigger.OnPlayerWon(player, function() Trigger.OnPlayerWon(player, function()
Media.PlaySpeechNotification(player, "Win") Media.PlaySpeechNotification(player, "Win")
Trigger.AfterDelay(Utils.Seconds(1), function() Trigger.AfterDelay(Utils.Seconds(1), function()
@@ -59,6 +43,25 @@ WorldLoaded = function()
end) end)
end) end)
gdiObjective = enemy.AddPrimaryObjective("Eliminate all Nod forces in the area")
nodObjective1 = player.AddPrimaryObjective("Capture the prison")
nodObjective2 = player.AddSecondaryObjective("Destroy all GDI forces")
Trigger.OnCapture(TechCenter, function()
Trigger.AfterDelay(Utils.Seconds(2), function()
player.MarkCompletedObjective(nodObjective1)
end)
end)
Trigger.OnKilled(TechCenter, function()
player.MarkFailedObjective(nodObjective1)
end)
InsertNodUnits()
Trigger.AfterDelay(Utils.Seconds(20), function() SendAttackWave(FirstAttackWave, AttackWaveSpawnA.Location) end)
Trigger.AfterDelay(Utils.Seconds(50), function() SendAttackWave(SecondThirdAttackWave, AttackWaveSpawnB.Location) end)
Trigger.AfterDelay(Utils.Seconds(100), function() SendAttackWave(SecondThirdAttackWave, AttackWaveSpawnC.Location) end)
Media.PlayMovieFullscreen("nod3.vqa") Media.PlayMovieFullscreen("nod3.vqa")
end end

View File

@@ -35,11 +35,9 @@ WorldLoaded = function()
player = Player.GetPlayer("Nod") player = Player.GetPlayer("Nod")
enemy = Player.GetPlayer("GDI") enemy = Player.GetPlayer("GDI")
gdiObjective = enemy.AddPrimaryObjective("Eliminate all Nod forces in the area") Trigger.OnObjectiveAdded(player, function(p, id)
nodObjective1 = player.AddPrimaryObjective("Capture the prison") Media.DisplayMessage(p.GetObjectiveDescription(id), "New " .. string.lower(p.GetObjectiveType(id)) .. " objective")
nodObjective2 = player.AddSecondaryObjective("Destroy all GDI forces") end)
InsertNodUnits()
Trigger.OnObjectiveCompleted(player, function(p, id) Trigger.OnObjectiveCompleted(player, function(p, id)
Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective completed") Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective completed")
end) end)
@@ -47,17 +45,6 @@ WorldLoaded = function()
Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective failed") Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective failed")
end) end)
Trigger.AfterDelay(Utils.Seconds(40), function() SendAttackWave(FirstAttackWaveUnits, FirstAttackWave) end)
Trigger.AfterDelay(Utils.Seconds(80), function() SendAttackWave(SecondAttackWaveUnits, SecondAttackWave) end)
Trigger.AfterDelay(Utils.Seconds(140), function() SendAttackWave(ThirdAttackWaveUnits, FirstAttackWave) end)
Trigger.OnKilled(TechCenter, function() player.MarkFailedObjective(nodObjective1) end)
Trigger.OnCapture(TechCenter, function()
Trigger.AfterDelay(Utils.Seconds(2), function()
player.MarkCompletedObjective(nodObjective1)
end)
end)
Trigger.OnPlayerWon(player, function() Trigger.OnPlayerWon(player, function()
Media.PlaySpeechNotification(player, "Win") Media.PlaySpeechNotification(player, "Win")
Trigger.AfterDelay(Utils.Seconds(1), function() Trigger.AfterDelay(Utils.Seconds(1), function()
@@ -72,6 +59,22 @@ WorldLoaded = function()
end) end)
end) end)
gdiObjective = enemy.AddPrimaryObjective("Eliminate all Nod forces in the area")
nodObjective1 = player.AddPrimaryObjective("Capture the prison")
nodObjective2 = player.AddSecondaryObjective("Destroy all GDI forces")
Trigger.OnKilled(TechCenter, function() player.MarkFailedObjective(nodObjective1) end)
Trigger.OnCapture(TechCenter, function()
Trigger.AfterDelay(Utils.Seconds(2), function()
player.MarkCompletedObjective(nodObjective1)
end)
end)
InsertNodUnits()
Trigger.AfterDelay(Utils.Seconds(40), function() SendAttackWave(FirstAttackWaveUnits, FirstAttackWave) end)
Trigger.AfterDelay(Utils.Seconds(80), function() SendAttackWave(SecondAttackWaveUnits, SecondAttackWave) end)
Trigger.AfterDelay(Utils.Seconds(140), function() SendAttackWave(ThirdAttackWaveUnits, FirstAttackWave) end)
Media.PlayMovieFullscreen("nod3.vqa") Media.PlayMovieFullscreen("nod3.vqa")
end end

View File

@@ -162,12 +162,9 @@ WorldLoaded = function()
england = Player.GetPlayer("England") england = Player.GetPlayer("England")
ussr = Player.GetPlayer("USSR") ussr = Player.GetPlayer("USSR")
FindEinsteinObjective = player.AddPrimaryObjective("Find Einstein.") Trigger.OnObjectiveAdded(player, function(p, id)
SurviveObjective = player.AddPrimaryObjective("Tanya and Einstein must survive.") Media.DisplayMessage(p.GetObjectiveDescription(id), "New " .. string.lower(p.GetObjectiveType(id)) .. " objective")
england.AddPrimaryObjective("Destroy the soviet base after a successful rescue.") end)
CivilProtectionObjective = player.AddSecondaryObjective("Protect all civilians.")
DefendObjective = ussr.AddPrimaryObjective("Kill Tanya and keep Einstein hostage.")
Trigger.OnObjectiveCompleted(player, function(p, id) Trigger.OnObjectiveCompleted(player, function(p, id)
Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective completed") Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective completed")
end) end)
@@ -178,6 +175,12 @@ WorldLoaded = function()
Trigger.OnPlayerLost(player, MissionFailed) Trigger.OnPlayerLost(player, MissionFailed)
Trigger.OnPlayerWon(player, MissionAccomplished) Trigger.OnPlayerWon(player, MissionAccomplished)
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.")
Trigger.OnKilled(Lab, LabDestroyed) Trigger.OnKilled(Lab, LabDestroyed)
Trigger.OnKilled(OilPump, OilPumpDestroyed) Trigger.OnKilled(OilPump, OilPumpDestroyed)

View File

@@ -97,6 +97,18 @@ WorldLoaded = function()
ussr = Player.GetPlayer("USSR") ussr = Player.GetPlayer("USSR")
ukraine = Player.GetPlayer("Ukraine") ukraine = Player.GetPlayer("Ukraine")
Trigger.OnObjectiveAdded(player, function(p, id)
Media.DisplayMessage(p.GetObjectiveDescription(id), "New " .. string.lower(p.GetObjectiveType(id)) .. " objective")
end)
Trigger.OnObjectiveCompleted(player, function(p, id)
Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective completed")
end)
Trigger.OnObjectiveFailed(player, function(p, id)
Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective failed")
end)
Trigger.OnPlayerLost(player, MissionFailed)
Trigger.OnPlayerWon(player, MissionAccomplished)
ConquestObjective = player.AddPrimaryObjective("Secure the area.") ConquestObjective = player.AddPrimaryObjective("Secure the area.")
ussr.AddPrimaryObjective("Defend your base.") ussr.AddPrimaryObjective("Defend your base.")
ukraine.AddPrimaryObjective("Destroy the convoy.") ukraine.AddPrimaryObjective("Destroy the convoy.")
@@ -109,16 +121,6 @@ WorldLoaded = function()
Trigger.AfterDelay(Utils.Minutes(10), SendTrucks) Trigger.AfterDelay(Utils.Minutes(10), SendTrucks)
Trigger.OnPlayerLost(player, MissionFailed)
Trigger.OnPlayerWon(player, MissionAccomplished)
Trigger.OnObjectiveCompleted(player, function(p, id)
Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective completed")
end)
Trigger.OnObjectiveFailed(player, function(p, id)
Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective failed")
end)
Camera.Position = ReinforcementsEntryPoint.CenterPosition Camera.Position = ReinforcementsEntryPoint.CenterPosition
Media.PlayMovieFullscreen("ally2.vqa", function() Media.PlayMovieFullscreen("mcv.vqa") end) Media.PlayMovieFullscreen("ally2.vqa", function() Media.PlayMovieFullscreen("mcv.vqa") end)
@@ -129,4 +131,4 @@ WorldLoaded = function()
ConvoyTimer(Utils.Minutes(7), "WarningThreeMinutesRemaining") ConvoyTimer(Utils.Minutes(7), "WarningThreeMinutesRemaining")
ConvoyTimer(Utils.Minutes(8), "WarningTwoMinutesRemaining") ConvoyTimer(Utils.Minutes(8), "WarningTwoMinutesRemaining")
ConvoyTimer(Utils.Minutes(9), "WarningOneMinuteRemaining") ConvoyTimer(Utils.Minutes(9), "WarningOneMinuteRemaining")
end end