mirror of
https://github.com/ClassiCube/MCGalaxy.git
synced 2025-09-21 19:42:37 -04:00
Core: Rewrite /lockdown to use a single text file list instead of an empty file for each level. Also start modularising Server.cs
This commit is contained in:
parent
2bbba49106
commit
ced7daffc6
@ -38,19 +38,20 @@ namespace MCGalaxy.Commands {
|
||||
}
|
||||
|
||||
if (args[0].CaselessEq("map")) {
|
||||
args[1] = args[1].ToLower();
|
||||
if (!Formatter.ValidName(p, args[1], "level")) return;
|
||||
|
||||
string path = "text/lockdown/map/" + args[1];
|
||||
if (!File.Exists(path)) {
|
||||
File.Create(path).Dispose();
|
||||
Chat.MessageAll("The map {0} has been locked", args[1]);
|
||||
Chat.MessageOps("Locked by: " + ((p == null) ? "Console" : p.name));
|
||||
bool unlocking = Server.lockdown.Contains(args[1]);
|
||||
Chat.MessageAll("The map {0} has been {0}locked", args[1], unlocking ? "un" : "");
|
||||
string srcName = (p == null) ? "(console)" : p.ColoredName;
|
||||
|
||||
if (unlocking) {
|
||||
Server.lockdown.Remove(args[1]);
|
||||
Chat.MessageOps("Unlocked by: " + srcName);
|
||||
} else {
|
||||
File.Delete(path);
|
||||
Chat.MessageAll("The map {0} has been unlocked", args[1]);
|
||||
Chat.MessageOps("Unlocked by: " + ((p == null) ? "Console" : p.name));
|
||||
Server.lockdown.AddOrReplace(args[1]);
|
||||
Chat.MessageOps("Locked by: " + srcName);
|
||||
}
|
||||
Server.lockdown.Save();
|
||||
} else {
|
||||
Player who = PlayerInfo.FindMatches(p, args[1]);
|
||||
if (who == null) return;
|
||||
@ -67,7 +68,7 @@ namespace MCGalaxy.Commands {
|
||||
Chat.MessageAll("{0} %Shas been locked down!", who.ColoredName);
|
||||
Chat.MessageOps("Locked by: " + ((p == null) ? "Console" : p.name));
|
||||
} else {
|
||||
Chat.MessageAll("{0} %Shas been unlocked.", who.ColoredName);
|
||||
Chat.MessageAll("{0} %Shas been unlocked.", who.ColoredName);
|
||||
Chat.MessageOps("Unlocked by: " + ((p == null) ? "Console" : p.name));
|
||||
}
|
||||
who.jailed = !who.jailed;
|
||||
@ -75,9 +76,9 @@ namespace MCGalaxy.Commands {
|
||||
}
|
||||
|
||||
public override void Help(Player p) {
|
||||
Player.Message(p, "%T/lockdown [map/player] [name]");
|
||||
Player.Message(p, "%H'map' - prevents new players from joining that map.");
|
||||
Player.Message(p, "%H'player' - prevents that player from using commands.");
|
||||
Player.Message(p, "%T/lockdown map/player [name]");
|
||||
Player.Message(p, "%H\"map\" - prevents new players from joining that map.");
|
||||
Player.Message(p, "%H\"player\" - prevents that player from using commands.");
|
||||
Player.Message(p, "%HUsing /lockdown again will unlock that map/player.");
|
||||
}
|
||||
}
|
||||
|
@ -147,7 +147,7 @@ namespace MCGalaxy {
|
||||
public bool CanJoin(Player p, bool ignorePerms = false) {
|
||||
if (p == null) return true;
|
||||
if (!VisitAccess.CheckDetailed(p, ignorePerms)) return false;
|
||||
if (File.Exists("text/lockdown/map/" + name)) {
|
||||
if (Server.lockdown.Contains(name)) {
|
||||
Player.Message(p, "The level " + name + " is locked."); return false;
|
||||
}
|
||||
return true;
|
||||
|
@ -608,6 +608,7 @@
|
||||
<Compile Include="Server\Server.Fields.cs" />
|
||||
<Compile Include="Server\Server.Init.cs" />
|
||||
<Compile Include="Server\Server.Tasks.cs" />
|
||||
<Compile Include="Server\Tasks\UpgradeTasks.cs" />
|
||||
<Compile Include="Server\ThreadSafeCache.cs" />
|
||||
<Compile Include="Server\Updater.cs" />
|
||||
<Compile Include="API\WebServer.cs" />
|
||||
@ -731,6 +732,7 @@
|
||||
<Folder Include="Events" />
|
||||
<Folder Include="Chat" />
|
||||
<Folder Include="CorePlugin" />
|
||||
<Folder Include="Server\Tasks" />
|
||||
<Folder Include="util\Math" />
|
||||
<Folder Include="Player\Group" />
|
||||
<Folder Include="Player\List" />
|
||||
|
@ -79,7 +79,7 @@ namespace MCGalaxy {
|
||||
public static bool ServerSetupFinished = false;
|
||||
public static Auto_CTF ctf = null;
|
||||
public static PlayerList bannedIP, whiteList, ircControllers, muted;
|
||||
public static PlayerList ignored, frozen, hidden, agreed, vip, noEmotes;
|
||||
public static PlayerList ignored, frozen, hidden, agreed, vip, noEmotes, lockdown;
|
||||
public static PlayerExtList jailed, models, skins, reach;
|
||||
|
||||
public static readonly List<string> Devs = new List<string>(), Mods = new List<string>();
|
||||
|
@ -23,6 +23,7 @@ using System.Threading;
|
||||
using MCGalaxy.Commands.World;
|
||||
using MCGalaxy.Games;
|
||||
using MCGalaxy.Generator;
|
||||
using MCGalaxy.Tasks;
|
||||
|
||||
namespace MCGalaxy {
|
||||
|
||||
@ -70,7 +71,7 @@ namespace MCGalaxy {
|
||||
void LoadPlayerLists() {
|
||||
agreed = new PlayerList("ranks/agreed.txt");
|
||||
try {
|
||||
UpgradeOldAgreed();
|
||||
UpgradeTasks.UpgradeOldAgreed();
|
||||
agreed = PlayerList.Load("agreed.txt");
|
||||
} catch (Exception ex) {
|
||||
Server.ErrorLog(ex);
|
||||
@ -83,6 +84,7 @@ namespace MCGalaxy {
|
||||
hidden = PlayerList.Load("hidden.txt");
|
||||
vip = PlayerList.Load("text/vip.txt");
|
||||
noEmotes = PlayerList.Load("text/emotelist.txt");
|
||||
lockdown = PlayerList.Load("text/lockdown.txt");
|
||||
|
||||
jailed = PlayerExtList.Load("ranks/jailed.txt");
|
||||
models = PlayerExtList.Load("extra/models.txt");
|
||||
@ -95,46 +97,6 @@ namespace MCGalaxy {
|
||||
whiteList = PlayerList.Load("whitelist.txt");
|
||||
}
|
||||
|
||||
static void UpgradeOldBlacklist() {
|
||||
if (!Directory.Exists("levels/blacklists")) return;
|
||||
string[] files = Directory.GetFiles("levels/blacklists");
|
||||
for (int i = 0; i < files.Length; i++) {
|
||||
string[] blacklist = File.ReadAllLines(files[i]);
|
||||
List<string> names = new List<string>();
|
||||
|
||||
// Lines are in the format: day.month.year name+
|
||||
foreach (string entry in blacklist) {
|
||||
string[] parts = entry.Split(' ');
|
||||
string name = parts[parts.Length - 1];
|
||||
name = name.Substring(0, name.Length - 1);
|
||||
names.Add(name);
|
||||
}
|
||||
|
||||
if (names.Count > 0) {
|
||||
string lvlName = Path.GetFileNameWithoutExtension(files[i]);
|
||||
string propsPath = LevelInfo.PropertiesPath(lvlName);
|
||||
using (StreamWriter w = new StreamWriter(propsPath, true)) {
|
||||
w.WriteLine("VisitBlacklist = " + names.Join());
|
||||
}
|
||||
}
|
||||
File.Delete(files[i]);
|
||||
}
|
||||
Directory.Delete("levels/blacklists");
|
||||
}
|
||||
|
||||
static void UpgradeOldAgreed() {
|
||||
// agreed.txt format used to be names separated by spaces, we need to fix that up.
|
||||
if (!File.Exists("ranks/agreed.txt")) return;
|
||||
|
||||
string data = null;
|
||||
using (FileStream fs = File.OpenRead("ranks/agreed.txt")) {
|
||||
if (fs.ReadByte() != ' ') return;
|
||||
data = new StreamReader(fs).ReadToEnd();
|
||||
data = data.Replace(" ", Environment.NewLine);
|
||||
}
|
||||
File.WriteAllText("ranks/agreed.txt", data);
|
||||
}
|
||||
|
||||
void LoadAutoloadCommands() {
|
||||
if (File.Exists("text/autoload.txt")) {
|
||||
try {
|
||||
@ -165,69 +127,6 @@ namespace MCGalaxy {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void MovePreviousLevelFiles() {
|
||||
if (!Directory.Exists("levels")) return;
|
||||
try {
|
||||
string[] files = Directory.GetFiles("levels", "*.prev");
|
||||
if (files.Length == 0) return;
|
||||
if (!Directory.Exists("levels/prev"))
|
||||
Directory.CreateDirectory("levels/prev");
|
||||
|
||||
foreach (string file in files) {
|
||||
string name = Path.GetFileName(file);
|
||||
string newFile = "levels/prev/" + name;
|
||||
|
||||
try {
|
||||
File.Move(file, newFile);
|
||||
} catch (Exception ex) {
|
||||
Server.s.Log("Error while trying to move .lvl.prev file");
|
||||
Server.ErrorLog(ex);
|
||||
}
|
||||
}
|
||||
} catch (Exception ex) {
|
||||
Server.ErrorLog(ex);
|
||||
}
|
||||
}
|
||||
|
||||
void CombineEnvFiles() {
|
||||
if (!Directory.Exists("levels/level properties")) return;
|
||||
try {
|
||||
string[] files = Directory.GetFiles("levels/level properties", "*.env");
|
||||
if (files.Length == 0) return;
|
||||
|
||||
Server.s.Log("Combining " + files.Length + " .env and .properties files..");
|
||||
foreach (string envFile in files) {
|
||||
try {
|
||||
Combine(envFile);
|
||||
} catch (Exception ex) {
|
||||
Server.s.Log("Error while trying to combine .env and .properties file");
|
||||
Server.ErrorLog(ex);
|
||||
}
|
||||
}
|
||||
Server.s.Log("Finished combining .env and .properties files.");
|
||||
} catch (Exception ex) {
|
||||
Server.ErrorLog(ex);
|
||||
}
|
||||
}
|
||||
|
||||
static void Combine(string envFile) {
|
||||
string name = Path.GetFileNameWithoutExtension(envFile);
|
||||
string propFile = LevelInfo.FindPropertiesFile(name);
|
||||
List<string> lines = new List<string>();
|
||||
if (propFile != null)
|
||||
lines = CP437Reader.ReadAllLines(propFile);
|
||||
|
||||
using (StreamReader r = new StreamReader(envFile)) {
|
||||
string line = null;
|
||||
while ((line = r.ReadLine()) != null)
|
||||
lines.Add(line);
|
||||
}
|
||||
|
||||
propFile = LevelInfo.PropertiesPath(name);
|
||||
CP437Writer.WriteAllLines(propFile, lines.ToArray());
|
||||
File.Delete(envFile);
|
||||
}
|
||||
|
||||
void SetupSocket() {
|
||||
Log("Creating listening socket on port " + port + "... ");
|
||||
|
@ -20,6 +20,7 @@ using System.IO;
|
||||
using System.Net;
|
||||
using System.Net.Sockets;
|
||||
using MCGalaxy.Games;
|
||||
using MCGalaxy.Tasks;
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace MCGalaxy {
|
||||
@ -99,13 +100,14 @@ namespace MCGalaxy {
|
||||
foreach (Level l in loaded)
|
||||
l.Unload();
|
||||
|
||||
Background.QueueOnce(CombineEnvFiles);
|
||||
Background.QueueOnce(UpgradeTasks.CombineEnvFiles);
|
||||
Background.QueueOnce(LoadMainLevel);
|
||||
Plugin.Load();
|
||||
Background.QueueOnce(UpgradeOldBlacklist);
|
||||
Background.QueueOnce(UpgradeTasks.UpgradeOldBlacklist);
|
||||
Background.QueueOnce(LoadPlayerLists);
|
||||
Background.QueueOnce(LoadAutoloadCommands);
|
||||
Background.QueueOnce(MovePreviousLevelFiles);
|
||||
Background.QueueOnce(UpgradeTasks.MovePreviousLevelFiles);
|
||||
Background.QueueOnce(UpgradeTasks.UpgradeOldLockdown);
|
||||
|
||||
Background.QueueOnce(SetupSocket);
|
||||
Background.QueueOnce(InitTimers);
|
||||
|
147
Server/Tasks/UpgradeTasks.cs
Normal file
147
Server/Tasks/UpgradeTasks.cs
Normal file
@ -0,0 +1,147 @@
|
||||
/*
|
||||
Copyright 2015 MCGalaxy
|
||||
|
||||
Dual-licensed under the Educational Community License, Version 2.0 and
|
||||
the GNU General Public License, Version 3 (the "Licenses"); you may
|
||||
not use this file except in compliance with the Licenses. You may
|
||||
obtain a copy of the Licenses at
|
||||
|
||||
http://www.opensource.org/licenses/ecl2.php
|
||||
http://www.gnu.org/licenses/gpl-3.0.html
|
||||
|
||||
Unless required by applicable law or agreed to in writing,
|
||||
software distributed under the Licenses are distributed on an "AS IS"
|
||||
BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
|
||||
or implied. See the Licenses for the specific language governing
|
||||
permissions and limitations under the Licenses.
|
||||
*/
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Net;
|
||||
using System.Threading;
|
||||
using MCGalaxy.Commands.World;
|
||||
using MCGalaxy.Games;
|
||||
using MCGalaxy.Generator;
|
||||
|
||||
namespace MCGalaxy.Tasks {
|
||||
internal static class UpgradeTasks {
|
||||
|
||||
internal static void UpgradeOldBlacklist() {
|
||||
if (!Directory.Exists("levels/blacklists")) return;
|
||||
string[] files = Directory.GetFiles("levels/blacklists");
|
||||
for (int i = 0; i < files.Length; i++) {
|
||||
string[] blacklist = File.ReadAllLines(files[i]);
|
||||
List<string> names = new List<string>();
|
||||
|
||||
// Lines are in the format: day.month.year name+
|
||||
foreach (string entry in blacklist) {
|
||||
string[] parts = entry.Split(' ');
|
||||
string name = parts[parts.Length - 1];
|
||||
name = name.Substring(0, name.Length - 1);
|
||||
names.Add(name);
|
||||
}
|
||||
|
||||
if (names.Count > 0) {
|
||||
string lvlName = Path.GetFileNameWithoutExtension(files[i]);
|
||||
string propsPath = LevelInfo.PropertiesPath(lvlName);
|
||||
using (StreamWriter w = new StreamWriter(propsPath, true)) {
|
||||
w.WriteLine("VisitBlacklist = " + names.Join());
|
||||
}
|
||||
}
|
||||
File.Delete(files[i]);
|
||||
}
|
||||
Directory.Delete("levels/blacklists");
|
||||
}
|
||||
|
||||
internal static void UpgradeOldAgreed() {
|
||||
// agreed.txt format used to be names separated by spaces, we need to fix that up.
|
||||
if (!File.Exists("ranks/agreed.txt")) return;
|
||||
|
||||
string data = null;
|
||||
using (FileStream fs = File.OpenRead("ranks/agreed.txt")) {
|
||||
if (fs.ReadByte() != ' ') return;
|
||||
data = new StreamReader(fs).ReadToEnd();
|
||||
data = data.Replace(" ", Environment.NewLine);
|
||||
}
|
||||
File.WriteAllText("ranks/agreed.txt", data);
|
||||
}
|
||||
|
||||
internal static void MovePreviousLevelFiles() {
|
||||
if (!Directory.Exists("levels")) return;
|
||||
try {
|
||||
string[] files = Directory.GetFiles("levels", "*.prev");
|
||||
if (files.Length == 0) return;
|
||||
if (!Directory.Exists("levels/prev"))
|
||||
Directory.CreateDirectory("levels/prev");
|
||||
|
||||
foreach (string file in files) {
|
||||
string name = Path.GetFileName(file);
|
||||
string newFile = "levels/prev/" + name;
|
||||
|
||||
try {
|
||||
File.Move(file, newFile);
|
||||
} catch (Exception ex) {
|
||||
Server.s.Log("Error while trying to move .lvl.prev file");
|
||||
Server.ErrorLog(ex);
|
||||
}
|
||||
}
|
||||
} catch (Exception ex) {
|
||||
Server.ErrorLog(ex);
|
||||
}
|
||||
}
|
||||
|
||||
internal static void CombineEnvFiles() {
|
||||
if (!Directory.Exists("levels/level properties")) return;
|
||||
try {
|
||||
string[] files = Directory.GetFiles("levels/level properties", "*.env");
|
||||
if (files.Length == 0) return;
|
||||
|
||||
Server.s.Log("Combining " + files.Length + " .env and .properties files..");
|
||||
foreach (string envFile in files) {
|
||||
try {
|
||||
Combine(envFile);
|
||||
} catch (Exception ex) {
|
||||
Server.s.Log("Error while trying to combine .env and .properties file");
|
||||
Server.ErrorLog(ex);
|
||||
}
|
||||
}
|
||||
Server.s.Log("Finished combining .env and .properties files.");
|
||||
} catch (Exception ex) {
|
||||
Server.ErrorLog(ex);
|
||||
}
|
||||
}
|
||||
|
||||
static void Combine(string envFile) {
|
||||
string name = Path.GetFileNameWithoutExtension(envFile);
|
||||
string propFile = LevelInfo.FindPropertiesFile(name);
|
||||
List<string> lines = new List<string>();
|
||||
if (propFile != null)
|
||||
lines = CP437Reader.ReadAllLines(propFile);
|
||||
|
||||
using (StreamReader r = new StreamReader(envFile)) {
|
||||
string line = null;
|
||||
while ((line = r.ReadLine()) != null)
|
||||
lines.Add(line);
|
||||
}
|
||||
|
||||
propFile = LevelInfo.PropertiesPath(name);
|
||||
CP437Writer.WriteAllLines(propFile, lines.ToArray());
|
||||
File.Delete(envFile);
|
||||
}
|
||||
|
||||
internal static void UpgradeOldLockdown() {
|
||||
if (!Directory.Exists("text/lockdown/map")) return;
|
||||
|
||||
string[] files = Directory.GetFiles("text/lockdown/map");
|
||||
for (int i = 0; i < files.Length; i++) {
|
||||
File.Delete(files[i]);
|
||||
string level = Path.GetFileName(files[i]);
|
||||
Server.lockdown.AddOrReplace(level);
|
||||
}
|
||||
|
||||
Server.lockdown.Save();
|
||||
Directory.Delete("text/lockdown/map");
|
||||
}
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user