bool AlliesControlLab() { return(MissionUtils.AreaSecuredWithUnits(world, allies, lab.CenterLocation, LabClearRange)); }
public void Tick(Actor self) { if (greece.WinState != WinState.Undefined) { return; } if (world.FrameNumber == 1) { SpawnAndMoveBridgeUnits(info.FirstStartUnits); } else if (world.FrameNumber == 25 * 3) { SpawnAndMoveBridgeUnits(info.SecondStartUnits); } else if (world.FrameNumber == 25 * 8) { SpawnAndMoveBridgeUnits(info.ThirdStartUnits); } MissionUtils.CapOre(ussr); if (!hospitalEvacuated && !hospital.IsDead() && MissionUtils.AreaSecuredWithUnits(world, greece, hospital.CenterLocation, 5)) { EvacuateCivilians(); hospitalEvacuated = true; } if (baseTransferredTick == -1) { var actorsInBase = world.FindUnits(alliedBaseTopLeft.CenterLocation, alliedBaseBottomRight.CenterLocation).Where(a => a != a.Owner.PlayerActor); if (actorsInBase.Any(a => a.Owner == greece)) { SetupAlliedBase(actorsInBase); baseTransferredTick = world.FrameNumber; objectives[FindOutpostID].Status = ObjectiveStatus.Completed; OnObjectivesUpdated(true); } } else if (superTankDomeInfiltratedTick == -1) { if (world.FrameNumber == baseTransferredTick + 25 * 100) { foreach (var tank in superTanks.Where(t => !t.IsDead() && t.IsInWorld)) { tank.QueueActivity(false, new Move.Move(hospitalSuperTankPoint.Location, 2)); } } else if (world.FrameNumber == baseTransferredTick + 25 * 180) { foreach (var tank in superTanks.Where(t => !t.IsDead() && t.IsInWorld)) { tank.QueueActivity(false, new Move.Move(alliedBaseBottomRight.Location, 2)); } } else if (world.FrameNumber == baseTransferredTick + 25 * 280) { foreach (var tank in superTanks.Where(t => !t.IsDead() && t.IsInWorld)) { tank.QueueActivity(false, new Move.Move(demitriTriggerAreaCenter.Location, 2)); } } else if (world.FrameNumber == baseTransferredTick + 25 * 480) { foreach (var tank in superTanks.Where(t => !t.IsDead() && t.IsInWorld)) { tank.QueueActivity(false, new Move.Move(demitriLZ.Location, 4)); } } } else { if (world.FrameNumber % 25 == 0) { foreach (var tank in superTanks.Where(t => !t.IsDead() && t.IsInWorld && t.IsIdle)) { MissionUtils.AttackNearestLandActor(false, tank, ussr); } } if (world.FrameNumber == superTankDomeInfiltratedTick + 25 * 180) { foreach (var actor in world.Actors.Where(a => !a.IsDead() && (a.Owner == ussr || a.Owner == badGuy))) { actor.Kill(actor); } } if (world.FrameNumber == superTankDomeInfiltratedTick + 25 * 181) { foreach (var tank in superTanks.Where(t => !t.IsDead())) { tank.Kill(tank); } superTanksDestroyed = true; } } if (objectives[EvacuateDemitriID].Status != ObjectiveStatus.Completed) { if (demitri == null) { if (demitriChurch.IsDead()) { objectives[EvacuateDemitriID].Status = ObjectiveStatus.Failed; OnObjectivesUpdated(true); MissionFailed("Dr. Demitri was killed."); } else if (MissionUtils.AreaSecuredWithUnits(world, greece, demitriTriggerAreaCenter.CenterLocation, 3)) { demitri = world.CreateActor("demitri", greece, demitriChurchSpawnPoint.Location, null); demitri.QueueActivity(new Move.Move(demitriTriggerAreaCenter.Location, 0)); demitriLZFlare = world.CreateActor("flare", greece, demitriLZ.Location, null); Sound.Play("flaren1.aud"); var chinookEntry = new CPos(demitriLZ.Location.X, 0); demitriChinook = MissionUtils.ExtractUnitWithChinook(world, greece, demitri, chinookEntry, demitriLZ.Location, chinookEntry); } } else if (demitri.IsDead()) { objectives[EvacuateDemitriID].Status = ObjectiveStatus.Failed; OnObjectivesUpdated(true); MissionFailed("Dr. Demitri was killed."); } else if (demitriChinook != null && !demitriChinook.IsDead() && !world.Map.IsInMap(demitriChinook.Location) && demitriChinook.Trait <Cargo>().Passengers.Contains(demitri)) { demitriLZFlare.Destroy(); SpawnAndMoveAlliedBaseUnits(info.FirstBaseUnits); objectives[EvacuateDemitriID].Status = ObjectiveStatus.Completed; OnObjectivesUpdated(true); } } if (!world.Actors.Any(a => a.Owner == greece && a.IsInWorld && !a.IsDead() && ((a.HasTrait <Building>() && !a.HasTrait <Wall>()) || a.HasTrait <BaseBuilding>() || a.HasTrait <Mobile>()))) { MissionFailed("The remaining Allied forces in the area have been wiped out."); } if (superTankDomeInfiltratedTick == -1 && superTankDome.IsDead()) { objectives[InfiltrateRadarDomeID].Status = ObjectiveStatus.Failed; OnObjectivesUpdated(true); MissionFailed("The Soviet radar dome was destroyed."); } if (superTanksDestroyed && objectives[EvacuateDemitriID].Status == ObjectiveStatus.Completed) { MissionAccomplished("Dr. Demitri has been extracted and the super tanks have been dealt with."); } }
bool AlliesControlLab() { return(MissionUtils.AreaSecuredWithUnits(world, allies, lab.CenterPosition, WRange.FromCells(LabClearRange))); }