#pragma once #include "qt-config/ConfigBase.hpp" #include "GreetingSetting.hpp" class CRSMConfig : public ConfigBase { public: struct { Port ManagementPort = 9372; String ListFolder = "ScenarioLists"; List(String) CommandSigns = {"!"}; String StatsFile = "CrServerManager.stats"; String SessionFile = "CrServerManager.session"; String PacksFile = "CrServerManager.packs"; Map(String, String) CommandAlias; List(String) CommandSuffixes; List(GreetingSetting) Greeting = {GreetingSetting::clonk(), GreetingSetting::irc()}; } CRSM; struct { String Folder = "CrServerManager.logs"; String MainLog = "CRSM.log"; String TimestampFormat = "dd.MM.yyyy [hh:mm:ss] "; } Logging; struct { struct { String Arguments = "/fullscreen /lobby:300 /nosignup Objects.c4d"; String Config = "config"; String Executable = "clonk-server"; List(String) IgnoreFolders = {"Network", "Records.c4f", "Savegames.c4f"}; Integer EmptyTimer = 60; } Server; struct { struct { Integer Count = 5; Integer Time = 3; } AntiFlood; Map(Integer, String) Moderators; Integer RegainAdminTime = 120; } Chat; } Clonk; struct { Boolean Auto = true; Boolean RandomizeAuto = true; Integer MaxWishesPerScen = 2; Integer MaxWishesPerUser = 2; Integer UserListLength = 5; Integer AfkAdminTime = 180; Integer AfkAdminPreAfkTime = 60; Map(String, String) Alias; } Hosting; struct { Boolean Use = false; String Server = "irc.euirc.net"; String Nick = "CRSM"; String User = ""; Integer Port = 6667; Boolean SSL = false; String Password = ""; String RealName = "Dedicated Clonk server powered by CRSM"; String Channel = "#crsm"; Boolean UseIngameChat = false; String IngameChannel = "#crsm-ingame"; String IngameChannelExtraTopic = ""; String QuitMessage = "Dedicated Clonk server powered by CRSM"; Integer ReconnectDelay = 10; String ScenListMessage = "A list of available scenarios is available over DCC, ingame or in a lobby."; String CtcpVersion = "Dedicated Clonk server powered by CRSM (unversioned)"; Map(String, String) Moderators; } IRC; struct { Boolean Use = true; Port ListenPort = 9373; String Address = "0.0.0.0"; } DCC; struct { struct { String ReattachId = ""; } ProcessManager; struct { struct { String Directory; String ServerNick; String ServerPCName; } Clonk; } Volatile; struct { Map(String, String) AliasWishes; } Hosting; } Auto; struct { Boolean ServerUses = false; Boolean PromptEnabled = false; Integer RereadLimit = 50; } Readline; explicit CRSMConfig() : ConfigBase({ ConfigVal(CRSM.ManagementPort), ConfigVal(CRSM.ListFolder), ConfigVal(CRSM.CommandSigns), ConfigVal(CRSM.StatsFile), ConfigVal(CRSM.SessionFile), ConfigVal(CRSM.PacksFile), ConfigVal(CRSM.CommandAlias), ConfigVal(CRSM.CommandSuffixes), ConfigVal(CRSM.Greeting), ConfigVal(Logging.Folder), ConfigVal(Logging.MainLog), ConfigVal(Logging.TimestampFormat), ConfigVal(Clonk.Server.Arguments), ConfigVal(Clonk.Server.Config), ConfigVal(Clonk.Server.Executable), ConfigVal(Clonk.Server.EmptyTimer), ConfigVal(Clonk.Server.IgnoreFolders), ConfigVal(Clonk.Chat.AntiFlood.Count), ConfigVal(Clonk.Chat.AntiFlood.Time), ConfigVal(Clonk.Chat.Moderators), ConfigVal(Clonk.Chat.RegainAdminTime), ConfigVal(Hosting.Auto), ConfigVal(Hosting.RandomizeAuto), ConfigVal(Hosting.MaxWishesPerScen), ConfigVal(Hosting.MaxWishesPerUser), ConfigVal(Hosting.UserListLength), ConfigVal(Hosting.Alias), ConfigVal(Hosting.AfkAdminTime), ConfigVal(Hosting.AfkAdminPreAfkTime), ConfigVal(IRC.Use), ConfigVal(IRC.Server), ConfigVal(IRC.Nick), ConfigVal(IRC.User), ConfigVal(IRC.Port), ConfigVal(IRC.SSL), ConfigVal(IRC.Password), ConfigVal(IRC.RealName), ConfigVal(IRC.Channel), ConfigVal(IRC.UseIngameChat), ConfigVal(IRC.IngameChannel), ConfigVal(IRC.IngameChannelExtraTopic), ConfigVal(IRC.QuitMessage), ConfigVal(IRC.ReconnectDelay), ConfigVal(IRC.ScenListMessage), ConfigVal(IRC.CtcpVersion), ConfigVal(IRC.Moderators), ConfigVal(DCC.Use), ConfigVal(DCC.Address), ConfigValName(DCC.Port, DCC.ListenPort), ConfigVal(Auto.ProcessManager.ReattachId), ConfigVal(Auto.Hosting.AliasWishes), ConfigVal(Readline.ServerUses), ConfigVal(Readline.PromptEnabled), ConfigVal(Readline.RereadLimit) }) {} void clear() { auto configVals = configValues; *this = CRSMConfig(); configValues = configVals; } };