Merge pull request #11316 from obrakmann/mp-allies02

Add Scott's Allies02 multiplayer mission as "Evacuation"
This commit is contained in:
Matthias Mailänder
2016-05-30 19:49:07 +02:00
14 changed files with 2422 additions and 3 deletions

View File

@@ -55,7 +55,7 @@ namespace OpenRA.Mods.Common.Effects
}
if (duration > 0)
owner.World.Add(new DelayedAction(duration, () => owner.World.Remove(this)));
owner.World.AddFrameEndTask(w => w.Add(new DelayedAction(duration, () => owner.World.Remove(this))));
}
// Support power beacons are expected to clean themselves up

View File

@@ -245,6 +245,7 @@
<Compile Include="Scripting\Properties\MobileProperties.cs" />
<Compile Include="Scripting\Properties\DemolitionProperties.cs" />
<Compile Include="Scripting\Properties\PlayerProperties.cs" />
<Compile Include="Scripting\Properties\PlayerStatsProperties.cs" />
<Compile Include="Scripting\Properties\PowerProperties.cs" />
<Compile Include="Scripting\Properties\ProductionProperties.cs" />
<Compile Include="Scripting\Properties\RepairableBuildingProperties.cs" />

View File

@@ -93,6 +93,12 @@ namespace OpenRA.Mods.Common.Scripting
return collection.Random(Context.World.SharedRandom).CopyReference();
}
[Desc("Returns the collection in a random order.")]
public LuaValue[] Shuffle(LuaValue[] collection)
{
return collection.Shuffle(Context.World.SharedRandom).ToArray();
}
[Desc("Expands the given footprint one step along the coordinate axes, and (if requested) diagonals.")]
public CPos[] ExpandFootprint(CPos[] footprint, bool allowDiagonal)
{

View File

@@ -32,5 +32,14 @@ namespace OpenRA.Mods.Common.Scripting
{
ap.SendAirstrike(Self, target, randomize, facing);
}
[Desc("Activate the actor's Airstrike Power.")]
public void SendAirstrikeFrom(CPos from, CPos to)
{
var i = Self.World.Map.CenterOfCell(from);
var j = Self.World.Map.CenterOfCell(to);
ap.SendAirstrike(Self, j, false, (i - j).Yaw.Facing);
}
}
}

View File

@@ -12,11 +12,12 @@
using Eluant;
using OpenRA.Mods.Common.Traits;
using OpenRA.Scripting;
using OpenRA.Traits;
namespace OpenRA.Mods.Common.Scripting
{
[ScriptPropertyGroup("MissionObjectives")]
public class MissionObjectiveProperties : ScriptPlayerProperties
public class MissionObjectiveProperties : ScriptPlayerProperties, Requires<MissionObjectivesInfo>
{
readonly MissionObjectives mo;

View File

@@ -0,0 +1,48 @@
#region Copyright & License Information
/*
* Copyright 2007-2016 The OpenRA Developers (see AUTHORS)
* This file is part of OpenRA, which is free software. It is made
* available to you under the terms of the GNU General Public License
* as published by the Free Software Foundation, either version 3 of
* the License, or (at your option) any later version. For more
* information, see COPYING.
*/
#endregion
using Eluant;
using OpenRA.Mods.Common.Traits;
using OpenRA.Scripting;
using OpenRA.Traits;
namespace OpenRA.Mods.Common.Scripting
{
[ScriptPropertyGroup("Player")]
public class PlayerStatsProperties : ScriptPlayerProperties, Requires<PlayerStatisticsInfo>
{
readonly PlayerStatistics stats;
public PlayerStatsProperties(ScriptContext context, Player player)
: base(context, player)
{
stats = player.PlayerActor.Trait<PlayerStatistics>();
}
[Desc("The combined value of units killed by this player.")]
public int KillsCost { get { return stats.KillsCost; } }
[Desc("The combined value of all units lost by this player.")]
public int DeathsCost { get { return stats.DeathsCost; } }
[Desc("The total number of units killed by this player.")]
public int UnitsKilled { get { return stats.UnitsKilled; } }
[Desc("The total number of units lost by this player.")]
public int UnitsLost { get { return stats.UnitsDead; } }
[Desc("The total number of buildings killed by this player.")]
public int BuildingsKilled { get { return stats.BuildingsKilled; } }
[Desc("The total number of buildings lost by this player.")]
public int BuildingsLost { get { return stats.BuildingsDead; } }
}
}

View File

@@ -214,8 +214,13 @@ namespace OpenRA.Mods.Common.Traits
}
if (Info.EarlyGameOver)
{
foreach (var p in enemies)
p.PlayerActor.Trait<MissionObjectives>().ForceDefeat(p);
{
p.WinState = WinState.Won;
p.World.OnPlayerWinStateChanged(p);
}
}
}
}
else
@@ -224,11 +229,13 @@ namespace OpenRA.Mods.Common.Traits
player.World.OnPlayerWinStateChanged(player);
if (Info.EarlyGameOver)
{
foreach (var p in enemies)
{
p.WinState = WinState.Won;
p.World.OnPlayerWinStateChanged(p);
}
}
}
CheckIfGameIsOver(player);