Exemple #1
0
        internal static void Add(ModConfig config)
        {
            ConfigManager.Load(config);

            if (!Configs.TryGetValue(config.Mod, out List <ModConfig> configList))
            {
                Configs.Add(config.Mod, configList = new List <ModConfig>());
            }
            configList.Add(config);

            FieldInfo instance = config.GetType().GetField("Instance", BindingFlags.Static | BindingFlags.Public);

            if (instance != null)
            {
                instance.SetValue(null, config);
            }
            config.OnLoaded();
            config.OnChanged();

            // Maintain a backup of LoadTime Configs.
            if (!LoadTimeConfigs.TryGetValue(config.Mod, out List <ModConfig> configList2))
            {
                LoadTimeConfigs.Add(config.Mod, configList2 = new List <ModConfig>());
            }
            configList2.Add(GeneratePopulatedClone(config));
        }
Exemple #2
0
        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.OnLoaded();
            config.OnChanged();

            // 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());
        }
Exemple #3
0
        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;
        }