private void AddClick(object sender, EventArgs e) { var tempRoom = loadedFile.Rooms[this.roomComboBox.SelectedIndex]; var spawn = tempRoom.FindSpawn(this.selectedX, this.selectedY); if (spawn.X != -1) { var temp = EntityStore.findByID(int.Parse(TextboxType.Text), int.Parse(TextboxVariant.Text), int.Parse(TextboxSubType.Text)); spawn.AddEntity(temp); this.refreshRooms(); } else { var tempspawn = new StageBinaryFile.Spawn { X = (short)this.selectedX, Y = (short)this.selectedY }; var tempEnt = EntityStore.findByID(int.Parse(TextboxType.Text), int.Parse(TextboxVariant.Text), int.Parse(TextboxSubType.Text)); if (tempEnt.name != null) { tempspawn.AddEntity(tempEnt); } tempRoom.AddSpawn(tempspawn); this.refreshRooms(); } }
public static void Main(string[] args) { var mode = Mode.Unknown; bool showHelp = false; var options = new OptionSet() { { "stb", "convert XML to STB", v => mode = v != null ? Mode.ToStb : mode }, { "xml", "convert STB to XML", v => mode = v != null ? Mode.ToXml : mode }, { "h|help", "show this message and exit", v => showHelp = v != null }, }; List <string> extras; try { extras = options.Parse(args); } catch (OptionException e) { Console.Write("{0}: ", GetExecutableName()); Console.WriteLine(e.Message); Console.WriteLine("Try `{0} --help' for more information.", GetExecutableName()); return; } if (mode == Mode.Unknown && extras.Count >= 1) { var extension = Path.GetExtension(extras[0]); if (extension == ".stb") { mode = Mode.ToXml; } else if (extension == ".xml") { mode = Mode.ToStb; } } if (showHelp == true || mode == Mode.Unknown || extras.Count < 1 || extras.Count > 2) { Console.WriteLine("Usage: {0} [OPTIONS]+ input [output]", GetExecutableName()); Console.WriteLine(); Console.WriteLine("Options:"); options.WriteOptionDescriptions(Console.Out); return; } if (mode == Mode.ToStb) { string inputPath = extras[0]; string outputPath = extras.Count > 1 ? extras[1] : Path.ChangeExtension(inputPath, null) + "_converted.stb"; var culture = CultureInfo.InvariantCulture; var stb = new StageBinaryFile(); using (var input = File.OpenRead(inputPath)) { var doc = new XPathDocument(input); var nav = doc.CreateNavigator(); var root = nav.SelectSingleNode("/stage"); if (root == null) { throw new InvalidOperationException(); } var rawRooms = root.Select("room"); var rooms = new List <StageBinaryFile.Room>(); while (rawRooms.MoveNext() == true) { var rawRoom = rawRooms.Current; var room = new StageBinaryFile.Room(); ParseAttribute(rawRoom, "type", out room.Type, culture); ParseAttribute(rawRoom, "variant", out room.Variant, culture); ParseAttribute(rawRoom, "name", out room.Name); ParseAttribute(rawRoom, "difficulty", out room.Difficulty, culture); ParseAttribute(rawRoom, "weight", out room.Weight, culture); ParseAttribute(rawRoom, "width", out room.Width, culture); ParseAttribute(rawRoom, "height", out room.Height, culture); var rawDoors = rawRoom.Select("door"); var doors = new List <StageBinaryFile.Door>(); while (rawDoors.MoveNext() == true) { var rawDoor = rawDoors.Current; var door = new StageBinaryFile.Door(); ParseAttribute(rawDoor, "x", out door.X, culture); ParseAttribute(rawDoor, "y", out door.Y, culture); ParseAttribute(rawDoor, "exists", out door.Exists); doors.Add(door); } room.Doors = doors.ToArray(); var rawSpawns = rawRoom.Select("spawn"); var spawns = new List <StageBinaryFile.Spawn>(); while (rawSpawns.MoveNext() == true) { var rawSpawn = rawSpawns.Current; var spawn = new StageBinaryFile.Spawn(); ParseAttribute(rawSpawn, "x", out spawn.X, culture); ParseAttribute(rawSpawn, "y", out spawn.Y, culture); var rawEntities = rawSpawn.Select("entity"); var entities = new List <StageBinaryFile.Entity>(); while (rawEntities.MoveNext() == true) { var rawEntity = rawEntities.Current; var entity = new StageBinaryFile.Entity(); ParseAttribute(rawEntity, "type", out entity.Type, culture); ParseAttribute(rawEntity, "variant", out entity.Variant, culture); ParseAttribute(rawEntity, "subtype", out entity.Subtype, culture); ParseAttribute(rawEntity, "weight", out entity.Weight, culture); entities.Add(entity); } spawn.Entities = entities.ToArray(); spawns.Add(spawn); } room.Spawns = spawns.ToArray(); rooms.Add(room); } stb.Rooms.Clear(); stb.Rooms.AddRange(rooms); } using (var output = File.Create(outputPath)) { stb.Serialize(output); output.Flush(); } } else if (mode == Mode.ToXml) { string inputPath = extras[0]; string outputPath = extras.Count > 1 ? extras[1] : Path.ChangeExtension(inputPath, null) + "_converted.xml"; var stb = new StageBinaryFile(); using (var input = File.OpenRead(inputPath)) { stb.Deserialize(input); } var settings = new XmlWriterSettings { Encoding = Encoding.UTF8, Indent = true, OmitXmlDeclaration = true }; var culture = CultureInfo.InvariantCulture; using (var writer = XmlWriter.Create(outputPath, settings)) { writer.WriteStartDocument(); writer.WriteComment("Converted to ANM2 by Gibbed.Rebirth.ConvertStage"); writer.WriteStartElement("stage"); foreach (var room in stb.Rooms) { writer.WriteStartElement("room"); writer.WriteAttributeString("type", room.Type.ToString(culture)); writer.WriteAttributeString("variant", room.Variant.ToString(culture)); writer.WriteAttributeString("name", room.Name); writer.WriteAttributeString("difficulty", room.Difficulty.ToString(culture)); writer.WriteAttributeString("weight", room.Weight.ToString(culture)); writer.WriteAttributeString("width", room.Width.ToString(culture)); writer.WriteAttributeString("height", room.Height.ToString(culture)); foreach (var door in room.Doors) { writer.WriteStartElement("door"); writer.WriteAttributeString("x", door.X.ToString(culture)); writer.WriteAttributeString("y", door.Y.ToString(culture)); if (door.Exists == true) { writer.WriteAttributeString("exists", door.Exists.ToString(culture)); } writer.WriteEndElement(); } foreach (var spawn in room.Spawns) { writer.WriteStartElement("spawn"); writer.WriteAttributeString("x", spawn.X.ToString(culture)); writer.WriteAttributeString("y", spawn.Y.ToString(culture)); foreach (var entity in spawn.Entities) { writer.WriteStartElement("entity"); writer.WriteAttributeString("type", entity.Type.ToString(culture)); writer.WriteAttributeString("variant", entity.Variant.ToString(culture)); writer.WriteAttributeString("subtype", entity.Subtype.ToString(culture)); writer.WriteAttributeString("weight", entity.Weight.ToString(culture)); writer.WriteEndElement(); } writer.WriteEndElement(); } writer.WriteEndElement(); } writer.WriteEndElement(); writer.WriteEndDocument(); } } else { throw new InvalidOperationException(); } }