From fcd5a4365973d5e4e714f0e7fd3a2d83a65f2f2e Mon Sep 17 00:00:00 2001 From: Oliver Brakmann Date: Tue, 19 Aug 2014 21:30:23 +0200 Subject: [PATCH] Port gdi04c to New Lua --- mods/cnc/maps/gdi04c/gdi04c.lua | 129 ++++++++++++++++++-------------- mods/cnc/maps/gdi04c/map.yaml | 6 +- 2 files changed, 77 insertions(+), 58 deletions(-) diff --git a/mods/cnc/maps/gdi04c/gdi04c.lua b/mods/cnc/maps/gdi04c/gdi04c.lua index df75bd136c..ef3a1be051 100644 --- a/mods/cnc/maps/gdi04c/gdi04c.lua +++ b/mods/cnc/maps/gdi04c/gdi04c.lua @@ -12,73 +12,120 @@ Civvie2Wpts = { waypoint26, waypoint3, waypoint9, waypoint4, waypoint5, waypoint FollowCivvieWpts = function(actor, wpts) Utils.Do(wpts, function(wpt) - Actor.MoveNear(actor, wpt.Location, 2) - Actor.Wait(actor, Utils.Seconds(2)) + actor.Move(wpt.Location, 2) + actor.Wait(Utils.Seconds(2)) end) end FollowWaypoints = function(actor, wpts) Utils.Do(wpts, function(wpt) - Actor.AttackMove(actor, wpt.Location, 2) + actor.AttackMove(wpt.Location, 2) end) end TownAttackersIdleAction = function(actor) - Actor.AttackMove(actor, TownAttackWpt.Location, 2) - Actor.Hunt(actor) + actor.AttackMove(TownAttackWpt.Location, 2) + actor.Hunt() end TownAttackAction = function(actor) - Actor.OnIdle(actor, TownAttackersIdleAction) + Trigger.OnIdle(actor, TownAttackersIdleAction) FollowWaypoints(actor, TownAttackWpts) end AttackTown = function() TownAttackTriggered = true - Reinforcements.Reinforce(nod, TownAttackWave1, NodReinfEntry.Location, waypoint0.Location, Utils.Seconds(0.25), TownAttackAction) - OpenRA.RunAfterDelay(Utils.Seconds(2), function() - Reinforcements.Reinforce(nod, TownAttackWave2, NodReinfEntry.Location, waypoint0.Location, Utils.Seconds(1), TownAttackAction) + Reinforcements.Reinforce(nod, TownAttackWave1, { NodReinfEntry.Location, waypoint0.Location }, Utils.Seconds(0.25), TownAttackAction) + Trigger.AfterDelay(Utils.Seconds(2), function() + Reinforcements.Reinforce(nod, TownAttackWave2, { NodReinfEntry.Location, waypoint0.Location }, Utils.Seconds(1), TownAttackAction) end) - OpenRA.RunAfterDelay(Utils.Seconds(4), function() - Reinforcements.Reinforce(nod, TownAttackWave3, NodReinfEntry.Location, waypoint0.Location, Utils.Seconds(1), TownAttackAction) + Trigger.AfterDelay(Utils.Seconds(4), function() + Reinforcements.Reinforce(nod, TownAttackWave3, { NodReinfEntry.Location, waypoint0.Location }, Utils.Seconds(1), TownAttackAction) end) end SendGDIReinforcements = function() GDIReinforcementsTriggered = true - Reinforcements.Reinforce(player, GDIReinforcementsPart1, GDIReinfEntry1.Location, waypoint12.Location, Utils.Seconds(1), function(actor) - Media.PlaySpeechNotification("Reinforce") - Actor.Move(actor, waypoint10.Location) - Actor.SetStance(actor, "Defend") + Reinforcements.Reinforce(player, GDIReinforcementsPart1, { GDIReinfEntry1.Location, waypoint12.Location }, Utils.Seconds(1), function(actor) + Media.PlaySpeechNotification(player, "Reinforce") + actor.Move(waypoint10.Location) + actor.Stance = "Defend" end) - OpenRA.RunAfterDelay(Utils.Seconds(5), function() - Reinforcements.ReinforceWithCargo(player, "apc", { GDIReinfEntry2, waypoint13 }, GDIReinforcementsPart2, function(apc, team) - Media.PlaySpeechNotification("Reinforce") - Actor.Move(apc, GDIUnloadWpt.Location) - Actor.UnloadCargo(apc, true) - Team.Do(team, function(unit) Actor.SetStance(unit, "Defend") end) + Trigger.AfterDelay(Utils.Seconds(5), function() + Reinforcements.ReinforceWithTransport(player, "apc", GDIReinforcementsPart2, { GDIReinfEntry2.Location, waypoint13.Location }, nil, function(apc, team) + Media.PlaySpeechNotification(player, "Reinforce") + apc.Move(GDIUnloadWpt.Location) + apc.UnloadPassengers() + Utils.Do(team, function(unit) unit.Stance = "Defend" end) end) end) end -- FIXME: replace with real cell trigger when available CellTrigger = function(player, trigger, radius, func) - local units = Map.FindUnitsInCircle(player, trigger, radius) + local units = Map.ActorsInCircle(trigger.CenterPosition, WRange.FromCells(radius), function(actor) + return actor.Owner == player and actor.HasProperty("Move") + end) + if #units > 0 then func() end end +WorldLoaded = function() + player = Player.GetPlayer("GDI") + nod = Player.GetPlayer("Nod") + + nodObjective = nod.AddPrimaryObjective("Destroy all GDI troops") + gdiObjective1 = player.AddPrimaryObjective("Defend the town of BiaƂystok") + gdiObjective2 = player.AddPrimaryObjective("Eliminate all Nod forces in the area") + + Trigger.OnObjectiveCompleted(player, function() Media.DisplayMessage("Objective completed") end) + Trigger.OnObjectiveFailed(player, function() Media.DisplayMessage("Objective failed") end) + + Trigger.OnAllKilled(LoseTriggerHouses, function() + player.MarkFailedObjective(gdiObjective1) + end) + + Trigger.OnPlayerWon(player, function() + Media.PlaySpeechNotification(player, "Win") + Trigger.AfterDelay(Utils.Seconds(1), function() + Media.PlayMovieFullscreen("burdet1.vqa") + end) + end) + + Trigger.OnPlayerLost(player, function() + Trigger.AfterDelay(Utils.Seconds(1), function() + Media.PlaySpeechNotification(player, "Lose") + Media.PlayMovieFullscreen("gameover.vqa") + end) + end) + + Utils.Do(player.GetGroundAttackers(), function(unit) + unit.Stance = "Defend" + end) + + Trigger.AfterDelay(1, function() + FollowCivvieWpts(civvie1, Civvie1Wpts) + FollowCivvieWpts(civvie2, Civvie2Wpts) + end) + + Camera.Position = Actor141.CenterPosition + + Media.PlayMovieFullscreen("bkground.vqa", function() Media.PlayMovieFullscreen("gdi4a.vqa", function() Media.PlayMovieFullscreen("nodsweep.vqa") end) end) +end + TownAttackTriggered = false GDIReinforcementsTriggered = false Tick = function() - if Mission.RequiredUnitsAreDestroyed(player) then - OpenRA.RunAfterDelay(Utils.Seconds(1), MissionFailed) + if player.HasNoRequiredUnits() then + nod.MarkCompletedObjective(nodObjective) end - if Mission.RequiredUnitsAreDestroyed(nod) then - OpenRA.RunAfterDelay(Utils.Seconds(1), MissionAccomplished) + if nod.HasNoRequiredUnits() then + player.MarkCompletedObjective(gdiObjective1) + player.MarkCompletedObjective(gdiObjective2) end if not TownAttackTriggered then @@ -87,33 +134,3 @@ Tick = function() CellTrigger(player, GDIReinfTrigger, 2, SendGDIReinforcements) end end - -WorldLoaded = function() - Media.PlayMovieFullscreen("bkground.vqa", function() Media.PlayMovieFullscreen("gdi4a.vqa", function() Media.PlayMovieFullscreen("nodsweep.vqa") end) end) - player = OpenRA.GetPlayer("GDI") - nod = OpenRA.GetPlayer("Nod") - - LoseTriggerTeam = Team.New(LoseTriggerHouses) - Team.AddEventHandler(LoseTriggerTeam.OnAllKilled, MissionFailed) - - Utils.Do(Mission.GetGroundAttackersOf(player), function(unit) - Actor.SetStance(unit, "Defend") - end) - - OpenRA.RunAfterDelay(1, function() - FollowCivvieWpts(civvie1, Civvie1Wpts) - FollowCivvieWpts(civvie2, Civvie2Wpts) - end) - - OpenRA.SetViewportCenterPosition(Actor141.CenterPosition) -end - -MissionAccomplished = function() - Mission.MissionOver({ player }, nil, true) - Media.PlayMovieFullscreen("burdet1.vqa") -end - -MissionFailed = function() - Mission.MissionOver(nil, { player }, true) - Media.PlayMovieFullscreen("gameover.vqa") -end diff --git a/mods/cnc/maps/gdi04c/map.yaml b/mods/cnc/maps/gdi04c/map.yaml index 754402ac53..3e4b197c17 100644 --- a/mods/cnc/maps/gdi04c/map.yaml +++ b/mods/cnc/maps/gdi04c/map.yaml @@ -898,8 +898,8 @@ Rules: -SpawnMPUnits: -MPStartLocations: -CrateSpawner: - LuaScriptInterface: - LuaScripts: gdi04c.lua + LuaScript: + Scripts: gdi04c.lua ObjectivesPanel: PanelName: MISSION_OBJECTIVES Player: @@ -915,6 +915,8 @@ Rules: ^CivInfantry: Health: HP: 125 + ^Bridge: + Invulnerable: Sequences: