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)); }
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); } }
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); }