Port gdi04c to New Lua

This commit is contained in:
Oliver Brakmann
2014-08-19 21:30:23 +02:00
parent f0fc63b15d
commit fcd5a43659
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: