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) 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); UnpackTileData(s);
ReadOverlay(file); 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 Map Map;
public List<string> Players = new List<string>(); public List<string> Players = new List<string>();
public MapPlayers MapPlayers; public MapPlayers MapPlayers;
bool singlePlayer;
int spawnCount; int spawnCount;
public bool ValidateArguments(string[] args) public bool ValidateArguments(string[] args)
@@ -51,10 +52,15 @@ namespace OpenRA.Mods.Common.UtilityCommands
Game.ModData = modData; Game.ModData = modData;
var filename = args[1]; var filename = args[1];
using (var stream = modData.DefaultFileSystem.Open(filename)) using (var stream = File.OpenRead(filename))
{ {
var file = new IniFile(stream); var file = new IniFile(stream);
var basic = file.GetSection("Basic"); 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 mapSection = file.GetSection("Map");
var format = GetMapFormatVersion(basic); var format = GetMapFormatVersion(basic);
@@ -252,7 +258,7 @@ namespace OpenRA.Mods.Common.UtilityCommands
// Add waypoint actors // Add waypoint actors
foreach (var kv in wps) foreach (var kv in wps)
{ {
if (kv.First <= 7) if (!singlePlayer && kv.First <= 7)
{ {
var ar = new ActorReference("mpspawn") var ar = new ActorReference("mpspawn")
{ {
@@ -271,11 +277,17 @@ namespace OpenRA.Mods.Common.UtilityCommands
new OwnerInit("Neutral") 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) void LoadSmudges(IniFile file, string section)
{ {
var scorches = new List<MiniYamlNode>(); var scorches = new List<MiniYamlNode>();

View File

@@ -239,5 +239,13 @@ namespace OpenRA.Mods.RA.UtilityCommands
base.ReadActors(file); base.ReadActors(file);
LoadActors(file, "SHIPS", Players, MapSize, Map); 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()));
}
} }
} }