示例#1
0
        public static void OnAssemblyLoaded(string path)
        {
            var     settings = GameInitializer.GetJSONSettingPaths(GameInitializer.NAMESPACE + ".MenuFile");
            JObject jObject  = new JObject();

            foreach (var info in settings)
            {
                try
                {
                    foreach (var jsonNode in info.Value)
                    {
                        try
                        {
                            jObject.Merge(JsonConvert.DeserializeObject <JObject>(File.ReadAllText(info.Key + "/" + jsonNode)), new JsonMergeSettings()
                            {
                                MergeArrayHandling = MergeArrayHandling.Union, MergeNullValueHandling = MergeNullValueHandling.Ignore, PropertyNameComparison = StringComparison.InvariantCultureIgnoreCase
                            });
                        }
                        catch (Exception ex)
                        {
                            APILogger.LogError(ex, "Error loading settings node " + jsonNode);
                        }
                    }
                }
                catch (Exception ex)
                {
                    APILogger.LogError(ex, "Error loading settings file " + info.Key + " values " + string.Join(", ", info.Value.ToArray()));
                }
            }

            LoadedMenus = JSON.DeserializeString(JsonConvert.SerializeObject(jObject));
        }
示例#2
0
        public static void AddOres()
        {
            var settings = GameInitializer.GetJSONSettingPaths(GameInitializer.NAMESPACE + ".OreLayers");

            if (settings.Count == 0)
            {
                APILogger.Log("No Ore layers loaded.");
                return;
            }

            foreach (var modInfo in settings)
            {
                foreach (var path in modInfo.Value)
                {
                    var newMenu = JSON.Deserialize(modInfo.Key + "/" + path);

                    if (LoadedOres == null)
                    {
                        LoadedOres = newMenu;
                    }
                    else
                    {
                        LoadedOres.Merge(newMenu);
                    }
                }
            }

            try
            {
                var terrainGen = ServerManager.TerrainGenerator as TerrainGenerator;
                var stoneGen   = terrainGen.FinalChunkModifier as TerrainGenerator.InfiniteStoneLayerGenerator;
                var oreGen     = stoneGen.InnerGenerator as TerrainGenerator.OreLayersGenerator;

                foreach (var ore in LoadedOres.LoopArray())
                {
                    if (ore.TryGetAs("Chance", out byte chance) && ore.TryGetAs("Type", out string type) && ore.TryGetAs("Depth", out byte depth))
                    {
                        try
                        {
                            var item = ItemTypes.GetType(type);

                            ore.TryGetAsOrDefault("ScienceBiome", out string scienceBiome, null);

                            if (item != null && item.ItemIndex != ColonyBuiltIn.ItemTypes.AIR.Id)
                            {
                                oreGen.AddLayer(new TerrainGenerator.Settings.OreLayer()
                                {
                                    Depth = depth, Type = item.Name, Chance = chance, ScienceBiome = scienceBiome
                                });
                            }
                            else
                            {
                                APILogger.Log(ChatColor.yellow, "Unable to find item {0}", type);
                            }
                        }
                        catch (Exception ex)
                        {
                            APILogger.LogError(ex);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                APILogger.LogError(ex);
            }
        }
示例#3
0
        public void AfterWorldLoad()
        {
            StringBuilder sb = new StringBuilder();

            APILogger.LogToFile("-------------------Armor Loaded----------------------");
            var           i      = 0;
            List <IArmor> armors = new List <IArmor>();


            foreach (var item in LoadedAssembalies)
            {
                if (Activator.CreateInstance(item) is IArmor armor &&
                    !string.IsNullOrEmpty(armor.name))
                {
                    armors.Add(armor);
                }
            }

            var settings = GameInitializer.GetJSONSettingPaths(GameInitializer.NAMESPACE + ".CSItems");

            foreach (var modInfo in settings)
            {
                foreach (var path in modInfo.Value)
                {
                    try
                    {
                        var jsonFile = JSON.Deserialize(modInfo.Key + "/" + path);

                        if (jsonFile.NodeType == NodeType.Array && jsonFile.ChildCount > 0)
                        {
                            foreach (var item in jsonFile.LoopArray())
                            {
                                if (item.TryGetAs("Durability", out int durability))
                                {
                                    armors.Add(item.JsonDeerialize <MagicArmor>());
                                }
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        APILogger.LogError(ex);
                    }
                }
            }

            foreach (var armor in armors)
            {
                if (ItemTypes.IndexLookup.TryGetIndex(armor.name, out var index))
                {
                    ArmorFactory.ArmorLookup[index] = armor;
                    sb.Append($"{armor.name}, ");
                    i++;

                    if (i > 5)
                    {
                        i = 0;
                        sb.AppendLine();
                    }
                }
            }

            APILogger.LogToFile(sb.ToString());
            APILogger.LogToFile("---------------------------------------------------------");
        }
        public void AddItemTypes(Dictionary <string, ItemTypesServer.ItemTypeRaw> itemTypes)
        {
            var i = 0;

            foreach (var item in LoadedAssembalies)
            {
                try
                {
                    if (Activator.CreateInstance(item) is ICSType itemType &&
                        !string.IsNullOrEmpty(itemType.name))
                    {
                        ItemCache.CSItems[itemType.name] = itemType;

                        var permutations = ConnectedBlockCalculator.GetPermutations(itemType);

                        foreach (var permutation in permutations)
                        {
                            ItemCache.CSItems[permutation.name] = permutation;
                        }
                    }
                }
                catch (Exception ex)
                {
                    APILogger.LogError(ex);
                }
            }

            var settings = GameInitializer.GetJSONSettingPaths(GameInitializer.NAMESPACE + ".CSItems");

            foreach (var modInfo in settings)
            {
                foreach (var path in modInfo.Value)
                {
                    try
                    {
                        var jsonFile = JSON.Deserialize(modInfo.Key + "/" + path);

                        if (jsonFile.NodeType == NodeType.Object && jsonFile.ChildCount > 0)
                        {
                            foreach (var item in jsonFile.LoopObject())
                            {
                                foreach (var property in _fixRelativePaths)
                                {
                                    if (item.Value.TryGetAs(property, out string propertyPath) && propertyPath.StartsWith("./"))
                                    {
                                        item.Value[property] = new JSONNode(modInfo.Key + "/" + propertyPath.Substring(2));
                                    }
                                }

                                if (item.Value.TryGetAs("Durability", out int durability))
                                {
                                    var ma = item.Value.JsonDeerialize <MagicArmor>();
                                    ItemCache.CSItems[ma.name] = ma;
                                }
                                else if (item.Value.TryGetAs("WepDurability", out bool wepDurability))
                                {
                                    var mw = item.Value.JsonDeerialize <MagicWeapon>();
                                    ItemCache.CSItems[mw.name] = mw;
                                }
                                else if (item.Value.TryGetAs("IsMagical", out bool isMagic))
                                {
                                    var mi = item.Value.JsonDeerialize <PlayerMagicItem>();
                                    ItemCache.CSItems[mi.name] = mi;
                                }
                                else
                                {
                                    var newItem = item.Value.JsonDeerialize <CSType>();
                                    ItemCache.CSItems[newItem.name] = newItem;

                                    var permutations = ConnectedBlockCalculator.GetPermutations(newItem);

                                    foreach (var permutation in permutations)
                                    {
                                        ItemCache.CSItems[permutation.name] = permutation;
                                    }
                                }
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        APILogger.LogError(ex);
                    }
                }
            }

            foreach (var itemType in ItemCache.CSItems.Values)
            {
                if (itemType.TrainConfiguration != null && itemType.TrainConfiguration.playerSeatOffset != null)
                {
                    Transportation.Train.TrainTypes[itemType.name] = itemType;
                }

                ConnectedBlockSystem.AddConnectedBlock(itemType);

                var rawItem = new ItemTypesServer.ItemTypeRaw(itemType.name, itemType.JsonSerialize());

                if (itemTypes.ContainsKey(itemType.name))
                {
                    APILogger.Log(ChatColor.yellow, "Item {0} already loaded...Overriding item.", itemType.name);
                    itemTypes[itemType.name] = rawItem;
                }
                else
                {
                    itemTypes.Add(itemType.name, rawItem);
                }

                if (itemType.StaticItemSettings != null && !string.IsNullOrWhiteSpace(itemType.StaticItemSettings.Name))
                {
                    StaticItems.List.Add(itemType.StaticItemSettings);
                }

                if (itemType is IArmor ma && ma.Durability > 0)
                {
                    ArmorFactory.ArmorLookup.Add(rawItem.ItemIndex, ma);
                }