Merge pull request #11402 from Mailaender/sp-utility

Improved map import for singleplayer missions
This commit is contained in:
abcdefg30
2016-06-24 18:02:13 +02:00
committed by GitHub
3 changed files with 36 additions and 4 deletions

View File

@@ -154,10 +154,22 @@ namespace OpenRA.Mods.Cnc.UtilityCommands
public override void ReadPacks(IniFile file, string filename)
{
using (var s = ModData.DefaultFileSystem.Open(filename.Substring(0, filename.Length - 4) + ".bin"))
using (var s = File.OpenRead(filename.Substring(0, filename.Length - 4) + ".bin"))
UnpackTileData(s);
ReadOverlay(file);
}
public override void SaveWaypoint(int waypointNumber, ActorReference waypointReference)
{
var waypointName = "waypoint" + waypointNumber;
if (waypointNumber == 25)
waypointName = "DefaultFlareLocation";
else if (waypointNumber == 26)
waypointName = "DefaultCameraPosition";
else if (waypointNumber == 27)
waypointName = "DefaultChinookTarget";
Map.ActorDefinitions.Add(new MiniYamlNode(waypointName, waypointReference.Save()));
}
}
}

View File

@@ -35,6 +35,7 @@ namespace OpenRA.Mods.Common.UtilityCommands
public Map Map;
public List<string> Players = new List<string>();
public MapPlayers MapPlayers;
bool singlePlayer;
int spawnCount;
public bool ValidateArguments(string[] args)
@@ -51,10 +52,15 @@ namespace OpenRA.Mods.Common.UtilityCommands
Game.ModData = modData;
var filename = args[1];
using (var stream = modData.DefaultFileSystem.Open(filename))
using (var stream = File.OpenRead(filename))
{
var file = new IniFile(stream);
var basic = file.GetSection("Basic");
var player = basic.GetValue("Player", string.Empty);
if (!string.IsNullOrEmpty(player))
singlePlayer = !player.StartsWith("Multi");
var mapSection = file.GetSection("Map");
var format = GetMapFormatVersion(basic);
@@ -252,7 +258,7 @@ namespace OpenRA.Mods.Common.UtilityCommands
// Add waypoint actors
foreach (var kv in wps)
{
if (kv.First <= 7)
if (!singlePlayer && kv.First <= 7)
{
var ar = new ActorReference("mpspawn")
{
@@ -271,11 +277,17 @@ namespace OpenRA.Mods.Common.UtilityCommands
new OwnerInit("Neutral")
};
Map.ActorDefinitions.Add(new MiniYamlNode("waypoint" + kv.First, ar.Save()));
SaveWaypoint(kv.First, ar);
}
}
}
public virtual void SaveWaypoint(int waypointNumber, ActorReference waypointReference)
{
var waypointName = "waypoint" + waypointNumber;
Map.ActorDefinitions.Add(new MiniYamlNode(waypointName, waypointReference.Save()));
}
void LoadSmudges(IniFile file, string section)
{
var scorches = new List<MiniYamlNode>();

View File

@@ -239,5 +239,13 @@ namespace OpenRA.Mods.RA.UtilityCommands
base.ReadActors(file);
LoadActors(file, "SHIPS", Players, MapSize, Map);
}
public override void SaveWaypoint(int waypointNumber, ActorReference waypointReference)
{
var waypointName = "waypoint" + waypointNumber;
if (waypointNumber == 98)
waypointName = "DefaultCameraPosition";
Map.ActorDefinitions.Add(new MiniYamlNode(waypointName, waypointReference.Save()));
}
}
}