public static void Load(string file) { ConfigUpdater.SourceFile = file; if (File.Exists(file)) { using (var sr = new StreamReader(file)) { string line; while (!sr.EndOfStream) { line = sr.ReadLine(); if (line != null) { var ix = line.IndexOf("="); if (ix > -1) { var key = line.Substring(0, ix).Trim(); var value = line.Substring(ix + 1, line.Length - (ix + 1)); #if Full_API switch (key.ToLower()) { case "world": Main.ActiveWorldFileData = WorldFile.GetAllMetadata(value, false); break; case "port": int port; if (!Int32.TryParse(value, out port)) { ProgramLog.Log("Failed to parse config option {0}", key); } else { Terraria.Netplay.ListenPort = port; } break; case "maxplayers": int maxplayers; if (!Int32.TryParse(value, out maxplayers)) { ProgramLog.Log("Failed to parse config option {0}", key); } else { Terraria.Main.maxNetPlayers = maxplayers; } break; case "priority": if (!Program.LaunchParameters.ContainsKey("-forcepriority")) { if (Tools.RuntimePlatform != RuntimePlatform.Mono) { try { int priority = Convert.ToInt32(value); if (priority >= 0 && priority <= 5) { Process currentProcess = Process.GetCurrentProcess(); if (priority == 0) { currentProcess.PriorityClass = ProcessPriorityClass.RealTime; } else if (priority == 1) { currentProcess.PriorityClass = ProcessPriorityClass.High; } else if (priority == 2) { currentProcess.PriorityClass = ProcessPriorityClass.AboveNormal; } else if (priority == 3) { currentProcess.PriorityClass = ProcessPriorityClass.Normal; } else if (priority == 4) { currentProcess.PriorityClass = ProcessPriorityClass.BelowNormal; } else if (priority == 5) { currentProcess.PriorityClass = ProcessPriorityClass.Idle; } } else { ProgramLog.Log("Invalid priority value: " + priority); } } catch { } } else { ProgramLog.Log("Skipped setting process priority on mono"); } } break; case "password": Terraria.Netplay.ServerPassword = value; break; case "motd": Terraria.Main.motd = value; break; case "lang": int lang; if (!Int32.TryParse(value, out lang)) { ProgramLog.Log("Failed to parse config option {0}", key); } else { Lang.lang = lang; } break; case "worldpath": Terraria.Main.WorldPath = value; break; case "worldname": Terraria.Main.worldName = value; break; case "banlist": Netplay.BanFilePath = value; break; case "difficulty": Main.expertMode = value == "1"; break; case "autocreate": int autocreate; if (!Int32.TryParse(value, out autocreate)) { ProgramLog.Log("Failed to parse config option {0}", key); } else { switch (autocreate) { case 0: Terraria.Main.autoGen = false; break; case 1: Terraria.Main.maxTilesX = 4200; Terraria.Main.maxTilesY = 1200; Terraria.Main.autoGen = true; break; case 2: Terraria.Main.maxTilesX = 6300; Terraria.Main.maxTilesY = 1800; Terraria.Main.autoGen = true; break; case 3: Terraria.Main.maxTilesX = 8400; Terraria.Main.maxTilesY = 2400; Terraria.Main.autoGen = true; break; } } break; case "secure": Terraria.Netplay.spamCheck = value == "1"; break; case "upnp": Terraria.Netplay.UseUPNP = value == "1"; if (Terraria.Netplay.UseUPNP && Tools.RuntimePlatform == RuntimePlatform.Mono) { ProgramLog.Log("[Warning] uPNP is only available on Windows platforms."); } break; case "npcstream": int npcstream; if (!Int32.TryParse(value, out npcstream)) { ProgramLog.Log("Failed to parse config option {0}", key); } else { Terraria.Main.npcStreamSpeed = npcstream; } break; default: var ctx = new HookContext() { Sender = HookContext.ConsoleSender }; var args = new HookArgs.ConfigurationLine() { Key = key, Value = value }; HookPoints.ConfigurationLine.Invoke(ref ctx, ref args); break; } #endif } } else { break; } } } } else { ProgramLog.Log("Configuration was specified but does not exist."); } }