/* TShock, a server mod for Terraria Copyright (C) 2011 The TShock Team This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ using System; using System.Collections.Generic; using System.ComponentModel; using System.IO; using System.Linq; using System.Text; using Newtonsoft.Json; namespace TShockAPI { public class ConfigFile { [Description("The equation for calculating invasion size is 100 + (multiplier * (number of active players with greater than 200 health))")] public int InvasionMultiplier = 1; [Description("The default maximum mobs that will spawn per wave. Higher means more mobs in that wave.")] public int DefaultMaximumSpawns = 5; [Description("The delay between waves. Shorter values lead to less mobs.")] public int DefaultSpawnRate = 600; [Description("The port the server runs on.")] public int ServerPort = 7777; [Description("Enable or disable the whitelist based on IP addresses in whitelist.txt")] public bool EnableWhitelist; [Description("Enable the ability for invaison size to never decrease. Make sure to run /invade, and note that this adds 2 million+ goblins to the spawn que for the map.")] public bool InfiniteInvasion; [Description("Enable or disable perma pvp.")] public bool AlwaysPvP = false; [Description("Prevents tiles from being placed within SpawnProtectionRadius of the default spawn.")] public bool SpawnProtection = true; [Description("Radius from spawn tile for SpawnProtection.")] public int SpawnProtectionRadius = 10; [Description("Max slots for the server. If you want people to be kicked with \"Server is full\" set this to how many players you want max and then set Terraria max players to 2 higher.")] public int MaxSlots = 8; [Description("Global protection agent for any block distance based anti-grief check.")] public bool RangeChecks = true; [Description("Disables any building; placing of blocks")] public bool DisableBuild; [Description("Kick a player if they exceed this number of tile kills within 1 second.")] public int TileThreshold = 120; [Description("#.#.#. = Red/Blue/Green - RGB Colors for the Admin Chat Color. Max value: 255")] public float[] SuperAdminChatRGB = { 255, 0, 0 }; [Description("The Chat Prefix before an admin speaks. eg. *The prefix was set to \"(Admin) \", so.. (Admin) : Hi! Note: If you put a space after the prefix, it will look like this: (Admin) (sr.ReadToEnd()); if (ConfigRead != null) ConfigRead(cf); return cf; } } public void Write(string path) { using (var fs = new FileStream(path, FileMode.Create, FileAccess.Write, FileShare.Write)) { Write(fs); } } public void Write(Stream stream) { var str = JsonConvert.SerializeObject(this, Formatting.Indented); using (var sw = new StreamWriter(stream)) { sw.Write(str); } } public static Action ConfigRead; static void DumpDescriptions() { var sb = new StringBuilder(); var defaults = new ConfigFile(); foreach (var field in defaults.GetType().GetFields()) { if (field.IsStatic) continue; var name = field.Name; var type = field.FieldType.Name; var descattr = field.GetCustomAttributes(false).FirstOrDefault(o => o is DescriptionAttribute) as DescriptionAttribute; var desc = descattr != null && !string.IsNullOrWhiteSpace(descattr.Description) ? descattr.Description : "None"; var def = field.GetValue(defaults); sb.AppendLine("## {0} ".SFormat(name)); sb.AppendLine("**Type:** {0} ".SFormat(type)); sb.AppendLine("**Description:** {0} ".SFormat(desc)); sb.AppendLine("**Default:** \"{0}\" ".SFormat(def)); sb.AppendLine(); } File.WriteAllText("ConfigDescriptions.txt", sb.ToString()); } } }