Esempio n. 1
0
        public static void AddSpawnTypesToDefinition(string[] data, SpawnDefinition def)
        {
            if (!string.IsNullOrEmpty(data[1]))
            {
                if (data[1].Contains(":"))
                {
                    Helpers.AddSubTypes(data[1], def);
                }
                else
                {
                    def.Mobiles.Add(data[1]);
                }
            }

            if (!string.IsNullOrEmpty(data[2]))
            {
                if (data[2].Contains(":"))
                {
                    Helpers.AddSubTypes(data[2], def);
                }
                else
                {
                    def.Mobiles.Add(data[2]);
                }
            }
            if (!string.IsNullOrEmpty(data[3]))
            {
                if (data[3].Contains(":"))
                {
                    Helpers.AddSubTypes(data[3], def);
                }
                else
                {
                    def.Mobiles.Add(data[3]);
                }
            }

            if (!string.IsNullOrEmpty(data[4]))
            {
                if (data[4].Contains(":"))
                {
                    Helpers.AddSubTypes(data[4], def);
                }
                else
                {
                    def.Mobiles.Add(data[4]);
                }
            }

            if (!string.IsNullOrEmpty(data[5]))
            {
                if (data[5].Contains(":"))
                {
                    Helpers.AddSubTypes(data[5], def);
                }
                else
                {
                    def.Mobiles.Add(data[5]);
                }
            }

            if (!string.IsNullOrEmpty(data[6]))
            {
                if (data[6].Contains(":"))
                {
                    Helpers.AddSubTypes(data[6], def);
                }
                else
                {
                    def.Mobiles.Add(data[6]);
                }
            }
        }
Esempio n. 2
0
        /// <summary>
        /// The actual file conversion method.
        /// </summary>
        /// <param name="premiumPath"></param>
        static void ConvertSingleFile(string premiumPath)
        {
            if (File.Exists(premiumPath))
            {
                Console.WriteLine("Now reading from '{0}'...", premiumPath);
                Console.WriteLine();
                using (var streamReader = new StreamReader(premiumPath))
                {
                    var line        = string.Empty;
                    var mapFileInfo = new FileInfo(premiumPath);

                    var spawnDefs = new List <SpawnDefinition>();

                    while ((line = streamReader.ReadLine()) != null)
                    {
                        if (Helpers.IgnoreLine(line))
                        {
                            continue;
                        }
                        Console.WriteLine("Converting '{0}'", line);
                        var splitData = line.Split('|');
                        if (!Helpers.HasObjectsToSpawn(splitData))
                        {
                            Console.WriteLine("WARNING: Line '{0}' has no spawn data, skipping...", line);
                        }
                        else
                        {
                            /*
                             * Here's the rough format of the various .map files across distros, with a couple of sample entries to better visualize.
                             * Array indexes are above the colum names
                             *
                             * 1        2   3  4    5   6   7    8    9    10      11      12       13         14        15      16        17          18          19          20          21
                             *|typename |s1 |s2 |s3 |s4 |s5 | x  | y  | z | map | mindelay maxdelay homerange spawnrange spawnid maxcount | maxcount1 | maxcount2 | maxcount3 | maxcount4 | maxcount5
                             *|Herbalist|   |   |   |   |   |1685|2985|0  |1    |5       |10       |20       |10         |1     |2        |0			 |0			 |0			 |0			 |0
                             *|Ratmanmage|||||			   |5850|219 |-3 |2	   |5	    |10       |20       |10         |1     |1        |0          |0          |0          |0          |0
                             *
                             */


                            var spawnDef = new SpawnDefinition();

                            Helpers.AddSpawnTypesToDefinition(splitData, spawnDef);
                            if (spawnDef.Mobiles.Count > 6)
                            {
                                Console.WriteLine("WARNING: '{0}' currently defines more than 6 mobiles!", line);
                            }

                            spawnDef.SpawnerName = mapFileInfo.Name + "_" + splitData[1];
                            spawnDef.X           = splitData[7];
                            spawnDef.Y           = splitData[8];
                            spawnDef.MapId       = splitData[10];
                            spawnDef.MinTime     = splitData[11];
                            spawnDef.MaxTime     = splitData[12];
                            spawnDef.Team        = "0"; // Hardcoded for now, not sure what this does
                            spawnDef.NPCCount    = splitData[16];
                            spawnDef.HomeRange   = splitData[13];
                            spawnDef.BringToHome = false; // This is a field for Spawn.

                            spawnDefs.Add(spawnDef);
                        }
                    }
                    Console.WriteLine("");
                    Console.WriteLine("Done parsing '{0}', {1} spawners converted.", mapFileInfo.Name, spawnDefs.Count);
                    var convertedMapFile = "converted_" + mapFileInfo.Name;
                    Console.WriteLine("Now generating '{0}'...", convertedMapFile);

                    var spawnWriter = new SpawnWriter();
                    Helpers.Write(spawnDefs, convertedMapFile);
                    Console.WriteLine("'{0}' created successfully!", convertedMapFile);
                }
            }
            else
            {
                Console.WriteLine("Error: file doesn't exist!");
            }
        }
Esempio n. 3
0
        private static void ParseXmlSpawn(Stream reader, string baseFileName)
        {
            List <SpawnDefinition> spawnDefinitions = new List <SpawnDefinition>();

            DataSet ds = new DataSet("Spawns");

            ds.ReadXml(reader);

            if (ds.Tables.Count == 0)
            {
                return;
            }

            foreach (DataRow row in ds.Tables["Points"].Rows)
            {
                SpawnDefinition spawn = new SpawnDefinition {
                    Entries = new List <SpawnEntry>()
                };

                string mapString = (string)row["Map"];

                Map map = Enum.Parse <Map>(mapString);

                spawn.Map = (int)map;

                string objects2;

                if ((objects2 = (string)row["Objects2"]) != null)
                {
                    string[] objectList = SplitString(objects2, ":OBJ=");

                    foreach (string s in objectList)
                    {
                        SpawnEntry spawnEntry = new SpawnEntry();

                        string[] objectDetails = SplitString(s, ":MX=");

                        if (string.IsNullOrEmpty(objectDetails[0]))
                        {
                            continue;
                        }

                        string name = ParseName(objectDetails[0]);

                        // ReSharper disable once ForeachCanBePartlyConvertedToQueryUsingAnotherGetEnumerator
                        foreach (KeyValuePair <string, string> kvp in _replaceRegex)
                        {
                            Match match = Regex.Match(name.ToLower(), kvp.Key);

                            if (match.Length <= 0)
                            {
                                continue;
                            }

                            name = Regex.Replace(name.ToLower(), kvp.Key, kvp.Value);
                            break;
                        }

                        Type typeName = ResolveType(name);

                        if (typeName == null)
                        {
                            Console.WriteLine($"Cannot find type {name}...");
                            continue;
                        }

                        spawnEntry.Name        = typeName.Name;
                        spawnEntry.MaxCount    = int.Parse(GetParm(s, ":MX="));
                        spawnEntry.Probability = 100;

                        spawn.Entries.Add(spawnEntry);
                    }
                }

                if (spawn.Entries.Count == 0)
                {
                    continue;
                }

                spawn.X            = int.Parse((string)row["CentreX"]);
                spawn.Y            = int.Parse((string)row["CentreY"]);
                spawn.Z            = int.Parse((string)row["CentreZ"]);
                spawn.Count        = int.Parse((string)row["MaxCount"]);
                spawn.WalkingRange = int.Parse((string)row["Range"]);
                // Because ModernUO does not support SpawnArea (Rectangle2D), we must calculate a radius for a spawn range
                spawn.HomeRange = CalculateHomeRange(spawn.X, spawn.Y, int.Parse((string)row["X"]),
                                                     int.Parse((string)row["Y"]), int.Parse((string)row["Width"]),
                                                     int.Parse((string)row["Height"]));

                try
                {
                    int minDelay = int.Parse((string)row["MinDelay"]);
                    int maxDelay = int.Parse((string)row["MaxDelay"]);

                    bool isSeconds = bool.Parse((string)row["DelayInSec"]);

                    spawn.MinDelay = isSeconds ? TimeSpan.FromSeconds(minDelay) : TimeSpan.FromMinutes(minDelay);
                    spawn.MaxDelay = isSeconds ? TimeSpan.FromSeconds(maxDelay) : TimeSpan.FromMinutes(maxDelay);
                }
                catch (ArgumentException)
                {
                    spawn.MinDelay = TimeSpan.FromMinutes(5);
                    spawn.MaxDelay = TimeSpan.FromMinutes(10);
                }

                spawnDefinitions.Add(spawn);
            }

            if (spawnDefinitions.Count <= 0)
            {
                return;
            }

            if (!Directory.Exists(OUTPUT_DIRECTORY))
            {
                Directory.CreateDirectory(OUTPUT_DIRECTORY);
            }

            using JsonTextWriter jtw =
                      new JsonTextWriter(
                          new StreamWriter(Path.Combine(OUTPUT_DIRECTORY, $"{baseFileName.ToLower()}.json")));

            JsonSerializer serializer =
                JsonSerializer.Create(new JsonSerializerSettings {
                Formatting = Formatting.Indented
            });

            serializer.Serialize(jtw, spawnDefinitions);
        }