public static ModConfig GeneratePopulatedClone(ModConfig original) { string json = JsonConvert.SerializeObject(original, ConfigManager.serializerSettings); ModConfig properClone = original.Clone(); JsonConvert.PopulateObject(json, properClone, ConfigManager.serializerSettings); return(properClone); }
internal static void Add(ModConfig config) { ConfigManager.Load(config); List <ModConfig> configList; if (!Configs.TryGetValue(config.mod, out configList)) { Configs.Add(config.mod, configList = new List <ModConfig>()); } configList.Add(config); config.PostAutoLoad(); // Maintain a backup of LoadTime Configs. List <ModConfig> configList2; if (!LoadTimeConfigs.TryGetValue(config.mod, out configList2)) { LoadTimeConfigs.Add(config.mod, configList2 = new List <ModConfig>()); } configList2.Add(config.Clone()); }
internal static void HandleInGameChangeConfigPacket(BinaryReader reader, int whoAmI) { if (Main.netMode == NetmodeID.MultiplayerClient) { bool success = reader.ReadBoolean(); string message = reader.ReadString(); if (success) { string modname = reader.ReadString(); string configname = reader.ReadString(); string json = reader.ReadString(); ModConfig activeConfig = GetConfig(ModLoader.GetMod(modname), configname); JsonConvert.PopulateObject(json, activeConfig, serializerSettingsCompact); activeConfig.OnChanged(); Main.NewText($"Shared config changed: Message: {message}, Mod: {modname}, Config: {configname}"); if (Main.InGameUI.CurrentState == Interface.modConfig) { Main.InGameUI.SetState(Interface.modConfig); Interface.modConfig.SetMessage("Server response: " + message, Color.Green); } } else { // rejection only sent back to requester. // Update UI with message Main.NewText("Changes Rejected: " + message); if (Main.InGameUI.CurrentState == Interface.modConfig) { Interface.modConfig.SetMessage("Server rejected changes: " + message, Color.Red); //Main.InGameUI.SetState(Interface.modConfig); } } } else { // no bool in request. string modname = reader.ReadString(); string configname = reader.ReadString(); string json = reader.ReadString(); ModConfig config = GetConfig(ModLoader.GetMod(modname), configname); ModConfig loadTimeConfig = GetLoadTimeConfig(ModLoader.GetMod(modname), configname); ModConfig pendingConfig = config.Clone(); JsonConvert.PopulateObject(json, pendingConfig, serializerSettingsCompact); bool success = true; string message = "Accepted"; if (loadTimeConfig.NeedsReload(pendingConfig)) { success = false; message = "Can't save because changes would require a reload."; } if (!config.AcceptClientChanges(pendingConfig, whoAmI, ref message)) { success = false; } if (success) { // Apply to Servers Config JsonConvert.PopulateObject(json, config, ConfigManager.serializerSettingsCompact); config.OnChanged(); // Send new config to all clients var p = new ModPacket(MessageID.InGameChangeConfig); p.Write(true); p.Write(message); p.Write(modname); p.Write(configname); p.Write(json); p.Send(); } else { // Send rejections message back to client who requested change var p = new ModPacket(MessageID.InGameChangeConfig); p.Write(false); p.Write(message); p.Send(whoAmI); } } return; }