public void AddItemTypes(Dictionary <string, ItemTypesServer.ItemTypeRaw> itemTypes)
        {
            var i = 0;
            Dictionary <string, ICSType> loadedItems = new Dictionary <string, ICSType>();

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

                        var permutations = ConnectedBlockCalculator.GetPermutations(itemType);

                        foreach (var permutation in permutations)
                        {
                            loadedItems[permutation.name] = permutation;
                        }
                    }
                }
                catch (Exception ex)
                {
                    PandaLogger.LogError(ex);
                }
            }

            var settings = GameLoader.GetJSONSettingPaths(GameLoader.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>();
                                    loadedItems[ma.name] = ma;
                                }
                                else if (item.Value.TryGetAs("WepDurability", out bool wepDurability))
                                {
                                    var mw = item.Value.JsonDeerialize <MagicWeapon>();
                                    loadedItems[mw.name] = mw;
                                }
                                else if (item.Value.TryGetAs("IsMagical", out bool isMagic))
                                {
                                    var mi = item.Value.JsonDeerialize <PlayerMagicItem>();
                                    loadedItems[mi.name] = mi;
                                }
                                else
                                {
                                    var newItem = item.Value.JsonDeerialize <CSType>();
                                    loadedItems[newItem.name] = newItem;
                                    var permutations = ConnectedBlockCalculator.GetPermutations(newItem);

                                    foreach (var permutation in permutations)
                                    {
                                        loadedItems[permutation.name] = permutation;
                                    }
                                }
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        PandaLogger.LogError(ex);
                    }
                }
            }

            foreach (var itemType in loadedItems.Values)
            {
                ConnectedBlockSystem.AddConnectedBlock(itemType);

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

                if (itemTypes.ContainsKey(itemType.name))
                {
                    PandaLogger.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 IPlayerMagicItem pmi)
                {
                    MagicItemsCache.PlayerMagicItems[pmi.name] = pmi;
                }

                if (itemType.OpensMenuSettings != null && !string.IsNullOrEmpty(itemType.OpensMenuSettings.ItemName))
                {
                    Help.UIManager.OpenMenuItems.Add(itemType.OpensMenuSettings);
                }

                _sb.Append($"{itemType.name}, ");
                i++;

                if (i > 5)
                {
                    _sb.Append("</color>");
                    i = 0;
                    _sb.AppendLine();
                    _sb.Append("<color=lime>");
                }
            }
        }
Esempio n. 2
0
        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);
                }