Fix nonworking attack code in Allies 01

This commit is contained in:
Scott_NZ
2013-01-27 22:43:16 +13:00
parent 63a72c5d28
commit de208e7a2f
3 changed files with 24 additions and 14 deletions

View File

@@ -110,9 +110,8 @@ namespace OpenRA.Mods.RA.Missions
if (difficulty != "Easy") if (difficulty != "Easy")
{ {
ManageSovietUnits(); ManageSovietUnits();
if (world.FrameNumber >= currentAttackWaveFrameNumber + 600) if (world.FrameNumber >= currentAttackWaveFrameNumber + 400)
{ {
Sound.Play("enmyapp1.aud");
SpawnSovietUnits(AttackWave); SpawnSovietUnits(AttackWave);
currentAttackWave++; currentAttackWave++;
currentAttackWaveFrameNumber = world.FrameNumber; currentAttackWaveFrameNumber = world.FrameNumber;
@@ -190,15 +189,27 @@ namespace OpenRA.Mods.RA.Missions
void ManageSovietUnits() void ManageSovietUnits()
{ {
foreach (var unit in world.Actors.Where(a => a.IsInWorld && a.Owner == soviets && !a.IsDead() && a.IsIdle foreach (var unit in world.Actors.Where(u => u.IsInWorld && u.Owner == soviets && !u.IsDead() && u.IsIdle
&& a.HasTrait<Mobile>() && a.HasTrait<AttackBase>())) && u.HasTrait<Mobile>() && u.HasTrait<AttackBase>()))
{ {
Activity inner; Activity innerActivity;
if (einstein != null && einstein.IsInWorld) if (einstein != null)
inner = new Attack(Target.FromActor(einstein), 3); {
else if (einstein.IsInWorld)
inner = new Move.Move(extractionLZ.Location, 3); innerActivity = new Move.Move(Target.FromActor(einstein), 3);
unit.QueueActivity(new AttackMove.AttackMoveActivity(unit, inner));
else
{
var container = world.UnitContaining(einstein);
if (container != null && !container.HasTrait<Aircraft>() && container.HasTrait<Mobile>())
innerActivity = new Move.Move(Target.FromActor(container), 3);
else
innerActivity = new Move.Move(extractionLZ.Location, 3);
}
unit.QueueActivity(new AttackMove.AttackMoveActivity(unit, innerActivity));
}
} }
} }

View File

@@ -311,7 +311,7 @@ namespace OpenRA.Mods.RA.Missions
foreach (var rallyPoint in sovietRallyPoints) foreach (var rallyPoint in sovietRallyPoints)
{ {
var units = world.FindAliveCombatantActorsInCircle(Util.CenterOfCell(rallyPoint), 10) var units = world.FindAliveCombatantActorsInCircle(Util.CenterOfCell(rallyPoint), 10)
.Where(u => u.IsIdle && u.HasTrait<Mobile>() && u.Owner == soviets); .Where(u => u.IsIdle && u.HasTrait<Mobile>() && u.HasTrait<AttackBase>() && u.Owner == soviets);
if (units.Count() >= SovietGroupSize) if (units.Count() >= SovietGroupSize)
{ {
foreach (var unit in units) foreach (var unit in units)

View File

@@ -148,11 +148,10 @@ namespace OpenRA.Mods.RA.Missions
if (attackingTown) if (attackingTown)
{ {
foreach (var attacker in townAttackers.Where(a => a.IsIdle && !a.IsDead() && a.IsInWorld)) foreach (var attacker in townAttackers.Where(u => u.IsIdle && !u.IsDead() && u.IsInWorld))
{ {
var enemies = world.Actors.Where(u => u.Owner == neutral var enemies = world.Actors.Where(u => u.Owner == neutral
&& ((u.HasTrait<Building>() && !u.HasTrait<Wall>() && !u.HasTrait<Bridge>()) || u.HasTrait<Mobile>()) && ((u.HasTrait<Building>() && !u.HasTrait<Wall>() && !u.HasTrait<Bridge>()) || u.HasTrait<Mobile>()) && !u.IsDead() && u.IsInWorld);
&& u.HasTrait<ITargetable>() && u.HasTrait<Health>() && !u.Trait<Health>().IsDead && u.IsInWorld);
var enemy = enemies.OrderBy(u => (attacker.CenterLocation - u.CenterLocation).LengthSquared).FirstOrDefault(); var enemy = enemies.OrderBy(u => (attacker.CenterLocation - u.CenterLocation).LengthSquared).FirstOrDefault();
if (enemy != null) if (enemy != null)