public static void OnAssemblyLoaded(string path) { var settings = GameLoader.GetJSONSettingPaths(GameLoader.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) { PandaLogger.LogError(ex, "Error loading settings node " + jsonNode); } } } catch (Exception ex) { PandaLogger.LogError(ex, "Error loading settings file " + info.Key + " values " + string.Join(", ", info.Value.ToArray())); } } LoadedMenus = JSON.DeserializeString(JsonConvert.SerializeObject(jObject)); }
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>"); } } }
public void AfterWorldLoad() { StringBuilder sb = new StringBuilder(); PandaLogger.Log(ChatColor.lime, "-------------------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 = 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.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) { PandaLogger.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) { sb.Append("</color>"); i = 0; sb.AppendLine(); sb.Append("<color=lime>"); } } } PandaLogger.Log(ChatColor.lime, sb.ToString()); PandaLogger.Log(ChatColor.lime, "---------------------------------------------------------"); }