Merge pull request #6325 from obrakmann/gdi04c

Port gdi04c to New Lua
This commit is contained in:
Paul Chote
2014-09-06 10:55:17 +12:00
2 changed files with 77 additions and 58 deletions

View File

@@ -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

View File

@@ -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: