Add 25 min countdown timer for destroying the enemy base.
This commit is contained in:
@@ -19,6 +19,7 @@ using OpenRA.Mods.RA.Buildings;
|
|||||||
using OpenRA.Mods.RA.Render;
|
using OpenRA.Mods.RA.Render;
|
||||||
using OpenRA.Network;
|
using OpenRA.Network;
|
||||||
using OpenRA.Traits;
|
using OpenRA.Traits;
|
||||||
|
using OpenRA.Widgets;
|
||||||
|
|
||||||
namespace OpenRA.Mods.RA.Missions
|
namespace OpenRA.Mods.RA.Missions
|
||||||
{
|
{
|
||||||
@@ -33,12 +34,12 @@ namespace OpenRA.Mods.RA.Missions
|
|||||||
Dictionary<int, Objective> objectives = new Dictionary<int, Objective>
|
Dictionary<int, Objective> objectives = new Dictionary<int, Objective>
|
||||||
{
|
{
|
||||||
{ InfiltrateID, new Objective(ObjectiveType.Primary, "", ObjectiveStatus.InProgress) },
|
{ InfiltrateID, new Objective(ObjectiveType.Primary, "", ObjectiveStatus.InProgress) },
|
||||||
{ DestroyID, new Objective(ObjectiveType.Primary, "Secure the Soviet research laboratory and destroy the rest of the Soviet base.", ObjectiveStatus.Inactive) }
|
{ DestroyID, new Objective(ObjectiveType.Primary, "Secure the Soviet research laboratory and destroy the rest of the Soviet base. Ensure that the Soviet research laboratory is not destroyed.", ObjectiveStatus.Inactive) }
|
||||||
};
|
};
|
||||||
|
|
||||||
const int InfiltrateID = 0;
|
const int InfiltrateID = 0;
|
||||||
const int DestroyID = 1;
|
const int DestroyID = 1;
|
||||||
const string Infiltrate = "The Soviets are currently developing a new defensive system named the \"Iron Curtain\" at their main research laboratories. Get our {0} into the Soviet research laboratories undetected.";
|
const string Infiltrate = "The Soviets are currently developing a new defensive system named the \"Iron Curtain\" at their main research laboratory. Get our {0} into the laboratory undetected.";
|
||||||
|
|
||||||
Actor lstEntryPoint;
|
Actor lstEntryPoint;
|
||||||
Actor lstUnloadPoint;
|
Actor lstUnloadPoint;
|
||||||
@@ -56,6 +57,9 @@ namespace OpenRA.Mods.RA.Missions
|
|||||||
bool allies2SpyInfiltratedLab;
|
bool allies2SpyInfiltratedLab;
|
||||||
int frameInfiltrated = -1;
|
int frameInfiltrated = -1;
|
||||||
|
|
||||||
|
CountdownTimer destroyBaseTimer;
|
||||||
|
CountdownTimerWidget destroyBaseTimerWidget;
|
||||||
|
|
||||||
Player allies;
|
Player allies;
|
||||||
Player allies1;
|
Player allies1;
|
||||||
Player allies2;
|
Player allies2;
|
||||||
@@ -128,10 +132,24 @@ namespace OpenRA.Mods.RA.Missions
|
|||||||
{
|
{
|
||||||
SendHind(hind1EntryPoint, hind1Points, hind1ExitPoint);
|
SendHind(hind1EntryPoint, hind1Points, hind1ExitPoint);
|
||||||
}
|
}
|
||||||
if (frameInfiltrated != -1 && world.FrameNumber == frameInfiltrated + 100)
|
if (frameInfiltrated != -1)
|
||||||
{
|
{
|
||||||
Sound.Play("aarrivs1.aud");
|
if (world.FrameNumber == frameInfiltrated + 100)
|
||||||
world.AddFrameEndTask(w => SendReinforcements());
|
{
|
||||||
|
Sound.Play("aarrivs1.aud");
|
||||||
|
world.AddFrameEndTask(w => SendReinforcements());
|
||||||
|
}
|
||||||
|
else if (world.FrameNumber >= frameInfiltrated + 200)
|
||||||
|
{
|
||||||
|
if (world.FrameNumber == frameInfiltrated + 200)
|
||||||
|
{
|
||||||
|
Sound.Play("timergo1.aud");
|
||||||
|
destroyBaseTimer = new CountdownTimer(1500 * 25, OnDestroyBaseTimerExpired, true);
|
||||||
|
destroyBaseTimerWidget = new CountdownTimerWidget(destroyBaseTimer, "Secure lab: {0}");
|
||||||
|
Ui.Root.AddChild(destroyBaseTimerWidget);
|
||||||
|
}
|
||||||
|
destroyBaseTimer.Tick();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
PatrolTick(ref patrol1, ref currentPatrolPoint1, soviets, DogPatrol, patrolPoints1);
|
PatrolTick(ref patrol1, ref currentPatrolPoint1, soviets, DogPatrol, patrolPoints1);
|
||||||
PatrolTick(ref patrol2, ref currentPatrolPoint2, soviets, InfantryPatrol, patrolPoints2);
|
PatrolTick(ref patrol2, ref currentPatrolPoint2, soviets, InfantryPatrol, patrolPoints2);
|
||||||
@@ -148,7 +166,7 @@ namespace OpenRA.Mods.RA.Missions
|
|||||||
}
|
}
|
||||||
else if (lab.Destroyed)
|
else if (lab.Destroyed)
|
||||||
{
|
{
|
||||||
MissionFailed("The research laboratory was destroyed.");
|
MissionFailed("The Soviet research laboratory was destroyed.");
|
||||||
}
|
}
|
||||||
else if (!world.Actors.Any(a => (a.Owner == allies1 || a.Owner == allies2) && !a.IsDead()
|
else if (!world.Actors.Any(a => (a.Owner == allies1 || a.Owner == allies2) && !a.IsDead()
|
||||||
&& (a.HasTrait<Building>() && !a.HasTrait<Wall>()) || a.HasTrait<BaseBuilding>()))
|
&& (a.HasTrait<Building>() && !a.HasTrait<Wall>()) || a.HasTrait<BaseBuilding>()))
|
||||||
@@ -167,6 +185,19 @@ namespace OpenRA.Mods.RA.Missions
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void OnDestroyBaseTimerExpired(CountdownTimer t)
|
||||||
|
{
|
||||||
|
if (!world.Actors.Any(a => a.Owner == soviets && a.IsInWorld && !a.IsDead()
|
||||||
|
&& a.HasTrait<Building>() && !a.HasTrait<Wall>() && !a.HasTrait<Allies04TrivialBuilding>() && a != lab)
|
||||||
|
&& objectives[InfiltrateID].Status == ObjectiveStatus.Completed)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
objectives[DestroyID].Status = ObjectiveStatus.Failed;
|
||||||
|
OnObjectivesUpdated(true);
|
||||||
|
MissionFailed("The Soviet research laboratory was not secured in time.");
|
||||||
|
}
|
||||||
|
|
||||||
void ManageSovietOre()
|
void ManageSovietOre()
|
||||||
{
|
{
|
||||||
var res = soviets.PlayerActor.Trait<PlayerResources>();
|
var res = soviets.PlayerActor.Trait<PlayerResources>();
|
||||||
|
|||||||
Reference in New Issue
Block a user