Merge pull request #9515 from Biofreak1987/soviet03

Add soviet03
This commit is contained in:
Matthias Mailänder
2015-10-17 17:05:20 +02:00
6 changed files with 1693 additions and 0 deletions

View File

@@ -57,6 +57,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Red Alert Lua scripts", "Re
mods\ra\maps\allies-05a\AI.lua = mods\ra\maps\allies-05a\AI.lua
mods\ra\maps\soviet-01\soviet01.lua = mods\ra\maps\soviet-01\soviet01.lua
mods\ra\maps\soviet-02a\soviet02a.lua = mods\ra\maps\soviet-02a\soviet02a.lua
mods\ra\maps\soviet-03\soviet03.lua = mods\ra\maps\soviet-03\soviet03.lua
mods\ra\maps\soviet-07\soviet07.lua = mods\ra\maps\soviet-07\soviet07.lua
mods\ra\maps\survival01\survival01.lua = mods\ra\maps\survival01\survival01.lua
mods\ra\maps\survival02\survival02.lua = mods\ra\maps\survival02\survival02.lua

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,387 @@
if Map.Difficulty == "Easy" then
remainingTime = DateTime.Minutes(7)
elseif Map.Difficulty == "Normal" then
remainingTime = DateTime.Minutes(6)
elseif Map.Difficulty == "Hard" then
remainingTime = DateTime.Minutes(5)
end
USSRReinforcements1 = { "dog", "dog", "dog", "dog", "dog" }
USSRReinforcements2 = { "e1", "e2", "e2" }
USSRReinforcementsFarm = { "e1", "e1", "e1", "e2", "e2" }
EnemyReinforcements1SpyHideout2 = { "e1", "e3" }
EnemyReinforcements2SpyHideout2 = { "e3", "e3" }
ExtractionHeliType = "tran"
ExtractionPath = { HelicopterSpawn.Location, HelicopterGoal.Location }
Farmers = { Farmer1, Farmer2, Farmer3 }
BarrierSoldiers = { BarrierSoldier1, BarrierSoldier2, BarrierSoldier3, BarrierSoldier4, BarrierSoldier5, BarrierSoldier6 }
RedBuildings = { RedBuildung1, RedBuilding2, RedBuilding3 }
BaseBuildings1 = { BaseBarrel1, BaseBarrel2, BaseBuilding1, BaseBuilding2 }
BaseBuildings2 = { BaseBuilding3, BaseBuilding4, BaseBuilding5, BaseBuilding6 }
SpyHideout1Trigger = { CPos.New(84, 45), CPos.New(85, 45), CPos.New(86, 45), CPos.New(87, 45), CPos.New(88, 45), CPos.New(89, 45), CPos.New(90, 45) }
SpyHideout2PathTrigger = { CPos.New(70, 61), CPos.New(70, 62), CPos.New(70, 63), CPos.New(70, 64), CPos.New(70, 65) }
SpyHideout2Trigger = { CPos.New(50, 63), CPos.New(50, 64), CPos.New(50, 65), CPos.New(50, 66), CPos.New(50, 67), CPos.New(50, 68), CPos.New(50, 69) }
SpyTransport1CheckpointTrigger = { CPos.New(31, 65) }
SpyTransport2CheckpointTrigger = { CPos.New(47, 51) }
Barrier1Trigger = { CPos.New(59,57), CPos.New(60,57), CPos.New(61,57), CPos.New(62,57), CPos.New(63,57), CPos.New(64,57), CPos.New(65,57), CPos.New(66,57), CPos.New(67,57), CPos.New(68,57) }
Barrier2Trigger = { CPos.New(63, 47), CPos.New(64, 47), CPos.New(65, 47), CPos.New(66, 47), CPos.New(67, 47), CPos.New(68, 47) }
SpyHideout3Trigger = { CPos.New(58, 45), CPos.New(58, 46), CPos.New(58, 47) }
RTrapTrigger = { CPos.New(46, 34), CPos.New(47, 35), CPos.New(48, 36), CPos.New(48, 37), CPos.New(48, 38), CPos.New(48, 39) }
SpyHideout4Trigger = { CPos.New(41, 34), CPos.New(41, 35), CPos.New(41, 36), CPos.New(41, 37), CPos.New(41, 38) }
IntroSequence = function()
TheSpy.DisguiseAsType("e1", player)
Actor.Create("camera", true, { Owner = player, Location = Playerbase.Location })
Actor.Create("camera", true, { Owner = player, Location = IntroCamera.Location })
Actor.Create("camera", true, { Owner = player, Location = FarmArea.Location })
if not TheSpy.IsDead then
TheSpy.Move(SpyWaypoint1.Location)
TheSpy.Move(SpyWaypoint2.Location)
end
Trigger.AfterDelay(DateTime.Seconds(1), function()
Media.PlaySoundNotification(player, "sking")
end)
Trigger.AfterDelay(DateTime.Seconds(2), function()
Media.PlaySpeechNotification(player, "ExplosiveChargePlaced")
end)
Trigger.AfterDelay(DateTime.Seconds(4), function()
if not RSoldier1.IsDead and not BaseBarrel1.IsDead then
RSoldier1.Attack(BaseBarrel1)
end
if not RSoldier2.IsDead and not BaseBarrel2.IsDead then
RSoldier2.Attack(BaseBarrel2)
end
end)
Trigger.AfterDelay(DateTime.Seconds(5), function()
Utils.Do(BaseBuildings1, function(actor)
if not actor.IsDead then
actor.Kill()
end
end)
end)
Trigger.AfterDelay(DateTime.Seconds(6), function()
Utils.Do(BaseBuildings2, function(actor)
if not actor.IsDead then
actor.Kill()
end
end)
if not RSoldier1.IsDead then
RSoldier1.Move(SpyWaypoint2.Location)
end
if not RSoldier2.IsDead then
RSoldier2.Move(SpyWaypoint2.Location)
end
end)
Trigger.AfterDelay(DateTime.Seconds(8), function()
Dogs = Reinforcements.Reinforce(player, USSRReinforcements1, { ReinforcementSpawn.Location, ReinforcementGoal.Location }, 0)
Media.PlaySpeechNotification(player, "ReinforcementsArrived")
timerstarted = true
end)
Trigger.AfterDelay(DateTime.Seconds(9), function()
Media.PlaySoundNotification(player, "AlertBleep")
end)
Trigger.AfterDelay(DateTime.Seconds(10), function()
Media.PlaySpeechNotification(player, "TimerStarted")
end)
end
SendUSSRParadrops = function()
paraproxy = Actor.Create("powerproxy.paratroopers", false, { Owner = player })
paraproxy.SendParatroopers(ReinforcementDropOff.CenterPosition, false, 0)
paraproxy.Destroy()
end
SpyFinalSequency = function()
if not SpyHideout4.IsDead then
SpyHideout4.UnloadPassengers()
Trigger.AfterDelay(DateTime.Seconds(1), function()
if not TheSpy.IsDead then
TheSpy.Move(SpyGoal.Location)
end
end)
end
end
SpyHelicopterEscape = function()
if not spyHelicopterEscape then
spyHelicopterEscape = true
SpyFinalSequency()
Actor.Create("camera", true, { Owner = player, Location = CameraFinalArea.Location })
ExtractionHeli = Reinforcements.ReinforceWithTransport(germany, ExtractionHeliType, nil, ExtractionPath)[1]
local exitPos = CPos.New(ExtractionPath[1].X, ExtractionPath[2].Y)
Trigger.AfterDelay(DateTime.Seconds(5), function()
if not TheSpy.IsDead and not ExtractionHeli.IsDead then
TheSpy.EnterTransport(ExtractionHeli)
end
end)
Trigger.AfterDelay(DateTime.Seconds(7), function()
if not ExtractionHeli.IsDead then
ExtractionHeli.Move(HelicopterEscape.Location)
end
end)
Trigger.AfterDelay(DateTime.Seconds(12), function()
enemy.MarkCompletedObjective(alliedObjective)
end)
end
end
Trigger.OnAllKilled(Farmers, function()
Reinforcements.Reinforce(player, USSRReinforcementsFarm, { FarmSpawn.Location, FarmArea.Location }, 0)
player.MarkCompletedObjective(sovietObjective2)
end)
Trigger.OnAllKilled(RedBuildings, function()
player.MarkCompletedObjective(sovietObjective3)
end)
Trigger.OnAnyKilled(BarrierSoldiers, function()
if barrier1Trigger then
Utils.Do(BarrierSoldiers, function(actor)
if not actor.IsDead then
Trigger.OnIdle(actor, actor.Hunt)
end
end)
end
end)
Trigger.OnEnteredFootprint(SpyHideout1Trigger, function(a, id)
if not spyHideout1Trigger and a.Owner == player then
spyHideout1Trigger = true
Trigger.RemoveFootprintTrigger(id)
Actor.Create("camera", true, { Owner = player, Location = SpyHideout1.Location })
if not TheSpy.IsDead and SpyHideout1.IsDead then
TheSpy.EnterTransport(SpyHideout1)
end
end
end)
Trigger.OnEnteredFootprint(SpyHideout2PathTrigger, function(a, id)
if not spyHideout2PathTrigger and a.Owner == player then
spyHideout2PathTrigger = true
Trigger.RemoveFootprintTrigger(id)
Actor.Create("camera", true, { Owner = player, Location = CameraSpyVillage.Location })
Actor.Create("camera", true, { Owner = player, Location = CameraVillage.Location })
if not TheSpy.IsDead and not SpyHideout2.IsDead then
TheSpy.EnterTransport(SpyHideout2)
end
end
end)
Trigger.OnEnteredFootprint(SpyHideout2Trigger, function(a, id)
if not spyHideout2Trigger and a.Owner == player then
spyHideout2Trigger = true
SpyGuards1 = Reinforcements.Reinforce(germany, EnemyReinforcements1SpyHideout2, { EnemyReinforcements1.Location, EnemyReinforcements1Goal.Location }, 0)
SpyGuards2 = Reinforcements.Reinforce(germany, EnemyReinforcements2SpyHideout2, { EnemyReinforcements2.Location, EnemyReinforcements2Goal.Location }, 0)
Utils.Do(SpyGuards1, function(actor)
if not actor.IsDead then
Trigger.OnIdle(actor, actor.Hunt)
end
end)
Utils.Do(SpyGuards2, function(actor)
if not actor.IsDead then
Trigger.OnIdle(actor, actor.Hunt)
end
end)
if not SpyHideout2.IsDead and not Transport.IsDead then
SpyHideout2.UnloadPassengers()
Transport.Move(TransportPath1Water.Location)
end
Trigger.AfterDelay(DateTime.Seconds(1), function()
if not TheSpy.IsDead then
TheSpy.Move(TransportPath1.Location)
TheSpy.EnterTransport(Transport)
end
end)
Trigger.AfterDelay(DateTime.Seconds(7), function()
SendUSSRParadrops()
Media.PlaySpeechNotification(player, "ReinforcementsArrived")
end)
end
end)
Trigger.OnEnteredFootprint(SpyTransport1CheckpointTrigger, function(a, id)
if not spyTransport1CheckpointTrigger and a.Owner == enemy then
spyTransport1CheckpointTrigger = true
Trigger.AfterDelay(DateTime.Seconds(2), function()
Actor.Create("camera", true, { Owner = player, Location = CameraWater1.Location })
Actor.Create("camera", true, { Owner = player, Location = CameraWater2.Location })
Actor.Create("camera", true, { Owner = player, Location = CameraWater3.Location })
Actor.Create("camera", true, { Owner = player, Location = CameraWater4.Location })
Actor.Create("camera", true, { Owner = player, Location = CameraWater5.Location })
Actor.Create("camera", true, { Owner = player, Location = CameraWater6.Location })
Actor.Create("camera", true, { Owner = player, Location = TransportPath2.Location })
if not Transport.IsDead then
Transport.Wait(25)
Transport.Move(TransportPath2Water.Location)
end
end)
end
end)
Trigger.OnEnteredFootprint(SpyTransport2CheckpointTrigger, function(a, id)
if not spyTransport2CheckpointTrigger and a.Owner == germany then
spyTransport2CheckpointTrigger = true
Transport.UnloadPassengers()
Trigger.AfterDelay(DateTime.Seconds(1), function()
if not TheSpy.IsDead then
if not Hideout3Barrel.IsDead then
TheSpy.EnterTransport(SpyHideout3)
elseif not SpyHideout4.IsDead then
TheSpy.EnterTransport(SpyHideout4)
else
TheSpy.Move(SpyGoal.Location)
end
end
end)
end
end)
Trigger.OnEnteredFootprint(Barrier1Trigger, function(a, id)
if not barrier1Trigger and a.Owner == player then
barrier1Trigger = true
Actor.Create("camera", true, { Owner = player, Location = CameraBarrier.Location })
end
end)
Trigger.OnEnteredFootprint(Barrier2Trigger, function(a, id)
if not barrier2Trigger and a.Owner == player then
barrier2Trigger = true
Actor.Create("camera", true, { Owner = player, Location = CameraSpyHideout31.Location })
Actor.Create("camera", true, { Owner = player, Location = CameraSpyHideout32.Location })
Actor.Create("camera", true, { Owner = player, Location = CameraSpyHideout33.Location })
end
end)
Trigger.OnEnteredFootprint(SpyHideout3Trigger, function(a, id)
if not spyHideout3Trigger and a.Owner == player then
spyHideout3Trigger = true
if Map.Difficulty ~= "Hard" then
Reinforcements.Reinforce(player, USSRReinforcements2, { ReinforcementSpawn.Location, CameraSpyHideout33.Location }, 0)
Media.PlaySpeechNotification(player, "ReinforcementsArrived")
end
end
end)
Trigger.OnEnteredFootprint(RTrapTrigger, function(a, id)
if not rTrapTrigger and a.Owner == player then
rTrapTrigger = true
Actor.Create("camera", true, { Owner = player, Location = CameraFinalArea.Location })
if not RSoldier3.IsDead and not RSoldierTrap.IsDead then
RSoldier3.Attack(RSoldierTrap)
end
if not RSoldier4.IsDead and not RSoldierTrap.IsDead then
RSoldier4.Attack(RSoldierTrap)
end
end
end)
Trigger.OnEnteredFootprint(SpyHideout4Trigger, function(a, id)
if not spyHideout4Trigger and a.Owner == player then
spyHideout4Trigger = true
SpyFinalSequency()
Actor.Create("camera", true, { Owner = player, Location = HelicopterGoal.Location })
end
end)
Trigger.OnKilled(Hideout1Barrel, function()
if not Hideout1PBox.IsDead then
Hideout1PBox.Kill()
end
Trigger.AfterDelay(DateTime.Seconds(1), function()
if not SpyHideout1.IsDead then
SpyHideout1.UnloadPassengers()
end
end)
Trigger.AfterDelay(DateTime.Seconds(2), function()
if not TheSpy.IsDead then
TheSpy.Move(SpyWaypoint3.Location)
TheSpy.Move(SpyWaypoint4.Location)
end
end)
if not RSoldier1.IsDead then
RSoldier1.Move(RStandoff.Location)
end
if not RSoldier2.IsDead then
RSoldier2.Move(RStandoff.Location)
end
end)
Trigger.OnKilled(Hideout3Barrel, function()
if not SpyHideout3.IsDead then
SpyHideout3.UnloadPassengers()
end
Trigger.AfterDelay(DateTime.Seconds(1), function()
if not TheSpy.IsDead then
TheSpy.Move(SpyGoal.Location)
end
end)
Trigger.AfterDelay(DateTime.Seconds(7), function()
if not TheSpy.IsDead and not SpyHideout4.IsDead then
TheSpy.EnterTransport(SpyHideout4)
end
end)
end)
WorldLoaded = function()
player = Player.GetPlayer("USSR")
enemy = Player.GetPlayer("England")
germany = Player.GetPlayer("Germany")
Camera.Position = Playerbase.CenterPosition
IntroSequence()
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.OnPlayerWon(player, function()
Media.PlaySpeechNotification(player, "Win")
end)
Trigger.OnPlayerLost(player, function()
Media.PlaySpeechNotification(player, "Lose")
end)
alliedObjective = enemy.AddPrimaryObjective("Destroy all Soviet troops.")
sovietObjective1 = player.AddPrimaryObjective("Kill the enemy spy.")
sovietObjective2 = player.AddSecondaryObjective("Clear the nearby farm for reinforcements.")
sovietObjective3 = player.AddSecondaryObjective("Scavenge the civilian buildings for supplies.")
end
Trigger.OnKilled(TheSpy, function()
player.MarkCompletedObjective(sovietObjective1)
end)
Tick = function()
Trigger.AfterDelay(DateTime.Seconds(12), function()
if player.HasNoRequiredUnits() then
enemy.MarkCompletedObjective(alliedObjective)
end
end)
if not SpyHideout4.IsDead and SpyHideout4.HasPassengers then
spyReachedHideout4 = true
end
if remainingTime == DateTime.Minutes(5) and Map.Difficulty ~= "Hard" then
Media.PlaySpeechNotification(player, "WarningFiveMinutesRemaining")
elseif remainingTime == DateTime.Minutes(4) then
Media.PlaySpeechNotification(player, "WarningFourMinutesRemaining")
elseif remainingTime == DateTime.Minutes(3) then
Media.PlaySpeechNotification(player, "WarningThreeMinutesRemaining")
elseif remainingTime == DateTime.Minutes(2) then
Media.PlaySpeechNotification(player, "WarningTwoMinutesRemaining")
elseif remainingTime == DateTime.Minutes(1) then
Media.PlaySpeechNotification(player, "WarningOneMinuteRemaining")
end
if remainingTime > 0 and timerstarted then
UserInterface.SetMissionText("Time Remaining: " .. Utils.FormatTime(remainingTime), player.Color)
remainingTime = remainingTime - 1
elseif remainingTime == 0 and not spyReachedHideout4 then
UserInterface.SetMissionText("")
enemy.MarkCompletedObjective(alliedObjective)
elseif remainingTime == 0 and spyReachedHideout4 then
UserInterface.SetMissionText("")
SpyHelicopterEscape()
end
end

View File

@@ -7,6 +7,7 @@ Allied Campaign:
Soviet Campaign:
./mods/ra/maps/soviet-01
./mods/ra/maps/soviet-02a
./mods/ra/maps/soviet-03
./mods/ra/maps/soviet-04a
./mods/ra/maps/soviet-04b
./mods/ra/maps/soviet-05