public override bool OnChatMessage(Client sender, string message) { Account account = sender.GetAccount(); if (message.StartsWith("/tp")) { if (account == null || (int)account.Level < 1) { Program.ServerInstance.SendChatMessageToPlayer(sender, "ACCESS DENIED", "Insufficent privileges."); return false; } var args = message.Split(); if (args.Length <= 1) { Program.ServerInstance.SendChatMessageToPlayer(sender, "USAGE", "/tp [Player Name]"); return false; } Client target = null; lock (Program.ServerInstance.Clients) target = Program.ServerInstance.Clients.FirstOrDefault(c => c.DisplayName.ToLower().StartsWith(args[1].ToLower())); if (target == null) { Program.ServerInstance.SendChatMessageToPlayer(sender, "ERROR", "No such player found: " + args[1]); return false; } Program.ServerInstance.GetPlayerPosition(target, o => { var newPos = (Vector3)o; Program.ServerInstance.SetPlayerPosition(sender, newPos); }); Console.WriteLine(string.Format("ADMINTOOLS: {0} has teleported to player {1}", account.Name + " (" + sender.DisplayName + ")", target.Name + " (" + target.DisplayName + ")")); return false; } if (message.StartsWith("/godmode")) { var args = message.Split(); if (args.Length <= 1) { Program.ServerInstance.SendChatMessageToPlayer(sender, "USAGE", "/godmode [Player Name]"); return false; } Client target = null; lock (Program.ServerInstance.Clients) target = Program.ServerInstance.Clients.FirstOrDefault(c => c.DisplayName.ToLower().StartsWith(args[1].ToLower())); if (target == null) { Program.ServerInstance.SendChatMessageToPlayer(sender, "ERROR", "No such player found: " + args[1]); return false; } string salt = "inv+" + target.NetConnection.RemoteUniqueIdentifier; Program.ServerInstance.GetNativeCallFromPlayer(target, salt, 0xB721981B2B939E07, new BooleanArgument(), (o) => { bool isInvincible = (bool) o; Program.ServerInstance.SendChatMessageToPlayer(sender, string.Format("Player {0} is {1}", target.DisplayName, isInvincible ? "~g~invincible." : "~r~mortal.")); }, new LocalGamePlayerArgument()); return false; } if (message.StartsWith("/weather")) { if (account == null || (int)account.Level < 1) { Program.ServerInstance.SendChatMessageToPlayer(sender, "ACCESS DENIED", "Insufficent privileges."); return false; } var args = message.Split(); if (args.Length <= 1) { Program.ServerInstance.SendChatMessageToPlayer(sender, "USAGE", "/weather [Weather ID]"); return false; } int newWeather; if (!int.TryParse(args[1], out newWeather)) { Program.ServerInstance.SendChatMessageToPlayer(sender, "USAGE", "/weather [Weather ID]"); return false; } if (newWeather < 0 || newWeather >= _weatherNames.Length) { Program.ServerInstance.SendChatMessageToPlayer(sender, "USAGE", "Weather ID must be between 0 and " + (_weatherNames.Length-1)); return false; } ServerWeather = newWeather; Program.ServerInstance.SendNativeCallToAllPlayers(0x29B487C359E19889, _weatherNames[ServerWeather]); Console.WriteLine(string.Format("ADMINTOOLS: {0} has changed the weather to {1}", account.Name + " (" + sender.DisplayName + ")", ServerWeather)); return false; } if (message.StartsWith("/time")) { if (account == null || (int)account.Level < 1) { Program.ServerInstance.SendChatMessageToPlayer(sender, "ACCESS DENIED", "Insufficent privileges."); return false; } var args = message.Split(); if (args.Length <= 1) { Program.ServerInstance.SendChatMessageToPlayer(sender, "USAGE", "/time [hours]:[minutes]"); return false; } int hours; int minutes; var timeSplit = args[1].Split(':'); if (timeSplit.Length < 2 || !int.TryParse(timeSplit[0], out hours) || !int.TryParse(timeSplit[1], out minutes)) { Program.ServerInstance.SendChatMessageToPlayer(sender, "USAGE", "/time [hours]:[minutes]"); return false; } if (hours < 0 || hours > 24 || minutes < 0 || minutes > 60) { Program.ServerInstance.SendChatMessageToPlayer(sender, "USAGE", "/time [hours]:[minutes]"); return false; } ServerTime = new TimeSpan(hours, minutes, 0); Program.ServerInstance.SendNativeCallToAllPlayers(0x47C3B5848C3E45D8, ServerTime.Hours, ServerTime.Minutes, ServerTime.Seconds); Program.ServerInstance.SendNativeCallToAllPlayers(0x4055E40BD2DBEC1D, true); Console.WriteLine(string.Format("ADMINTOOLS: {0} has changed the time to {1}", account.Name + " (" + sender.DisplayName + ")", ServerTime)); return false; } if (message.StartsWith("/kill")) { if (account == null || (int)account.Level < 1) { Program.ServerInstance.SendChatMessageToPlayer(sender, "ACCESS DENIED", "Insufficent privileges."); return false; } var args = message.Split(); if (args.Length <= 1) { Program.ServerInstance.SendChatMessageToPlayer(sender, "USAGE", "/kill [Player Name]"); return false; } Client target = null; lock (Program.ServerInstance.Clients) target = Program.ServerInstance.Clients.FirstOrDefault(c => c.DisplayName.ToLower().StartsWith(args[1].ToLower())); if (target == null) { Program.ServerInstance.SendChatMessageToPlayer(sender, "ERROR", "No such player found: " + args[1]); return false; } Program.ServerInstance.SetPlayerHealth(target, -1); Console.WriteLine(string.Format("ADMINTOOLS: {0} has killed player {1}", account.Name + " (" + sender.DisplayName + ")", target.Name + " (" + target.DisplayName + ")")); return false; } if (message.StartsWith("/ban")) { if (account == null || (int)account.Level < 2) { Program.ServerInstance.SendChatMessageToPlayer(sender, "ACCESS DENIED", "Insufficent privileges."); return false; } var args = message.Split(); if (args.Length <= 2) { Program.ServerInstance.SendChatMessageToPlayer(sender, "USAGE", "/ban [Player Name] [Reason]"); return false; } Client target = null; lock (Program.ServerInstance.Clients) target = Program.ServerInstance.Clients.FirstOrDefault(c => c.DisplayName.ToLower().StartsWith(args[1].ToLower())); if (target == null) { Program.ServerInstance.SendChatMessageToPlayer(sender, "ERROR", "No such player found: " + args[1]); return false; } target.Ban(args[2], sender); SaveBanlist(Location + "Banlist.xml"); Console.WriteLine(string.Format("ADMINTOOLS: {0} has banned player {1} with reason: {2}", account.Name + " (" + sender.DisplayName + ")", target.Name + " (" + target.DisplayName + ")", args[2])); Program.ServerInstance.KickPlayer(target, "You have been banned: " + args[2]); return false; } if (message.StartsWith("/kick")) { if (account == null || (int)account.Level < 1) { Program.ServerInstance.SendChatMessageToPlayer(sender, "ACCESS DENIED", "Insufficent privileges."); return false; } var args = message.Split(); if (args.Length <= 2) { Program.ServerInstance.SendChatMessageToPlayer(sender, "USAGE", "/kick [Player Name] [Reason]"); return false; } Client target = null; lock (Program.ServerInstance.Clients) target = Program.ServerInstance.Clients.FirstOrDefault(c => c.DisplayName.ToLower().StartsWith(args[1].ToLower())); if (target == null) { Program.ServerInstance.SendChatMessageToPlayer(sender, "ERROR", "No such player found: " + args[1]); return false; } Program.ServerInstance.KickPlayer(target, args[2]); Console.WriteLine(string.Format("ADMINTOOLS: {0} has kicked player {1}", account.Name + " (" + sender.DisplayName + ")", target.Name + " (" + target.DisplayName + ")")); return false; } if (message.StartsWith("/register")) { account = sender.GetAccount(false); if (account != null) { Program.ServerInstance.SendChatMessageToPlayer(sender, "ERROR", "You already have an account."); return false; } var args = message.Split(); if (args.Length <= 1) { Program.ServerInstance.SendChatMessageToPlayer(sender, "USAGE", "/register [Password]"); return false; } var password = GetHashSha256(args[1]); var accObject = new Account() { Level = Privilege.User, Name = sender.DisplayName, Password = password, Ban = null }; lock (Lists._accounts.Accounts) Lists._accounts.Accounts.Add(accObject); SaveAccounts(Location + "Accounts.xml"); lock (Lists._authenticatedUsers) Lists._authenticatedUsers.Add(sender.NetConnection.RemoteUniqueIdentifier); Program.ServerInstance.SendChatMessageToPlayer(sender, "ACCOUNT", "Your account has been created!"); Console.WriteLine(string.Format("ADMINTOOLS: New player registered: {0}", accObject.Name)); return false; } if (message.StartsWith("/login")) { if (account != null) { Program.ServerInstance.SendChatMessageToPlayer(sender, "ERROR", "You are already authenticated."); return false; } account = sender.GetAccount(false); if (account == null) { Program.ServerInstance.SendChatMessageToPlayer(sender, "ERROR", "No accounts have been found with your name."); return false; } var args = message.Split(); if (args.Length <= 1) { Program.ServerInstance.SendChatMessageToPlayer(sender, "USAGE", "/login [Password]"); return false; } var password = GetHashSha256(args[1]); if (password != account.Password) { Program.ServerInstance.SendChatMessageToPlayer(sender, "ERROR", "Wrong password."); return false; } lock (Lists._authenticatedUsers) if (!Lists._authenticatedUsers.Contains(sender.NetConnection.RemoteUniqueIdentifier)) Lists._authenticatedUsers.Add(sender.NetConnection.RemoteUniqueIdentifier); Program.ServerInstance.SendChatMessageToPlayer(sender, "ACCOUNT", "Authentication successful!"); Console.WriteLine(string.Format("ADMINTOOLS: New player logged in: {0}", account.Name + " (" + sender.DisplayName + ")")); return false; } if (message == "/logout") { if (sender.IsAuthenticated()) { Console.WriteLine(string.Format("ADMINTOOLS: Player has logged out: {0}", sender.Name)); Program.ServerInstance.SendChatMessageToPlayer(sender, "ACCOUNT", "You have been logged out."); lock (Lists._authenticatedUsers) if (Lists._authenticatedUsers.Contains(sender.NetConnection.RemoteUniqueIdentifier)) Lists._authenticatedUsers.Remove(sender.NetConnection.RemoteUniqueIdentifier); } else { Program.ServerInstance.SendChatMessageToPlayer(sender, "ACCOUNT", "You are not logged in."); } return false; } if (message == "/countdown") { if (DateTime.Now.Subtract(_lastCountdown).TotalSeconds < 30) { Program.ServerInstance.SendChatMessageToPlayer(sender, "COUNTDOWN", "Please wait 30 seconds before starting another countdown."); return false; } _lastCountdown = DateTime.Now; var cdThread = new Thread((ThreadStart) delegate { for (int i = 3; i >= 0; i--) { Program.ServerInstance.SendChatMessageToAll("COUNTDOWN", i == 0 ? "Go!" : i.ToString()); Thread.Sleep(1000); } }); cdThread.Start(); return false; } return true; }
public override bool OnChatMessage(Client sender, string message) { Account account = sender.GetAccount(); if (message == "/q") { Program.ServerInstance.KickPlayer(sender, "You left the server."); } if (message == "/help") { Program.ServerInstance.SendChatMessageToPlayer(sender, "SERVER", "Available commands: /help, /info, /stop, /restart, /tp, /godmode, /weather, /time, /kill, /kick, /ban, /register, /login, /logout"); return false; } if (message == "/afk") { if (account == null || (int)account.Level < 1) { Program.ServerInstance.SendChatMessageToPlayer(sender, "SERVER", "Register to use this command."); return false; } if (sender.afk) { Program.ServerInstance.SendChatMessageToPlayer(sender, "SERVER", "You are already AFK."); return false; } sender.afk = true; Program.ServerInstance.SendChatMessageToAll(sender.DisplayName, "has gone AFK.");return false; } if (message == "/back") { if (account == null || (int)account.Level < 1) { Program.ServerInstance.SendChatMessageToPlayer(sender, "SERVER", "Register to use this command."); return false; } if (!sender.afk) { Program.ServerInstance.SendChatMessageToPlayer(sender, "SERVER", "You are not AFK."); return false; } Program.ServerInstance.SendChatMessageToAll(sender.DisplayName, "is now back.");sender.afk = false; return false; } if (message == "/l") { if (account == null || (int)account.Level < 3) { Program.ServerInstance.SendChatMessageToPlayer(sender, "SERVER", "Insufficent privileges."); return false; } for (var i = 0; i < Program.ServerInstance.Clients.Count; i++) { try { Client target = Program.ServerInstance.Clients[i]; Console.WriteLine(string.Format("" + "Nickname: {0} | " + "Realname: {1} |" + "Ping: {2}ms | " + "IP: {3} | " + "Game Version: {4} | " + "Script Version: {5} | " + "Vehicle Health: {6} | " + "Last Position: {7} | ", target.DisplayName.ToString(), target.Name.ToString(), Math.Round(target.Latency * 1000, MidpointRounding.AwayFromZero).ToString(), target.NetConnection.RemoteEndPoint.Address.ToString(), target.GameVersion.ToString(), target.RemoteScriptVersion.ToString(), target.VehicleHealth.ToString(), target.LastKnownPosition.ToString())); }catch {} } Program.ServerInstance.SendChatMessageToPlayer(sender, "SERVER", "Printed playerlist to console."); return false; return false; } if (message.StartsWith("/info")) { if (account == null || (int)account.Level < 2) { Program.ServerInstance.SendChatMessageToPlayer(sender, "SERVER", "Insufficent privileges."); return false; } var args = message.Split(); if (args.Length <= 1) { Program.ServerInstance.SendChatMessageToPlayer(sender, "USAGE", "/info [Player Name]"); return false; } Client target = null; lock (Program.ServerInstance.Clients) target = Program.ServerInstance.Clients.FirstOrDefault(c => c.DisplayName.ToLower().StartsWith(args[1].ToLower())); if (target == null) { Program.ServerInstance.SendChatMessageToPlayer(sender, "ERROR", "No such player found: " + args[1]); return false; } Program.ServerInstance.SendChatMessageToPlayer(sender, "1/2", string.Format("" + "Nickname: {0}\n" + "Realname: {1}\n" + "Ping: {2}ms\n" + "IP: {3}", target.DisplayName.ToString(), target.Name.ToString(), Math.Round(target.Latency * 1000, MidpointRounding.AwayFromZero).ToString(), target.NetConnection.RemoteEndPoint.Address.ToString())); Program.ServerInstance.SendChatMessageToPlayer(sender, "2/2", string.Format("" + "Game Version: {0}\n" + "Script Version: {1}\n" + "Vehicle Health: {2}\n" + "Last Position: {3}\n", target.GameVersion.ToString(), target.RemoteScriptVersion.ToString(), target.VehicleHealth.ToString(), target.LastKnownPosition.ToString())); return false; } if (message.StartsWith("/nick")) { if (account == null || (int)account.Level < 2) { Program.ServerInstance.SendChatMessageToPlayer(sender, "SERVER", "Insufficent privileges."); return false; } var args = message.Split(); if (args.Length <= 1) { Program.ServerInstance.SendChatMessageToPlayer(sender, "USAGE", "/tp [Player Name]"); return false; } sender.DisplayName = args[1];return false; } if (message.StartsWith("/stop")) { if (account == null || (int)account.Level < 2) { Program.ServerInstance.SendChatMessageToPlayer(sender, "SERVER", "Insufficent privileges."); return false; } Program.ServerInstance.SendChatMessageToAll("SERVER", "This server will stop now!"); Environment.Exit(-1);return false; } if (message.StartsWith("/restart")) { if (account == null || (int)account.Level < 2) { Program.ServerInstance.SendChatMessageToPlayer(sender, "SERVER", "Insufficent privileges."); return false; } Program.ServerInstance.SendChatMessageToAll("SERVER", "~p~This server will restart now. Please reconnect!~p~"); /*try { //process = System.Diagnostics.Process[] GetProcessesByName("GTAServer.exe"; //Process[] processes = Process.GetProcessesByName("GTAServer.exe"); //processes[0].WaitForExit(1000); Environment.Exit(-1); } catch (ArgumentException ex) { Program.ServerInstance.SendChatMessageToPlayer(sender, "SERVER", "Could not restart."); } Process.Start("GTAServer.exe", "");*/ return false; } if (message.StartsWith("/tp")) { if (account == null || (int)account.Level < 1) { Program.ServerInstance.SendChatMessageToPlayer(sender, "SERVER", "Insufficent privileges."); return false; } var args = message.Split(); if (args.Length <= 1) { Program.ServerInstance.SendChatMessageToPlayer(sender, "USAGE", "/tp [Player Name]"); return false; } Client target = null; lock (Program.ServerInstance.Clients) target = Program.ServerInstance.Clients.FirstOrDefault(c => c.DisplayName.ToLower().StartsWith(args[1].ToLower())); if (target == null) { Program.ServerInstance.SendChatMessageToPlayer(sender, "ERROR", "No such player found: " + args[1]); return false; } Program.ServerInstance.GetPlayerPosition(target, o => { var newPos = (Vector3)o; Program.ServerInstance.SetPlayerPosition(sender, newPos); }); Console.WriteLine(string.Format("ADMINTOOLS: {0} has teleported to player {1}", account.Name + " (" + sender.DisplayName + ")", target.Name + " (" + target.DisplayName + ")")); return false; } if (message.StartsWith("/godmode")) { var args = message.Split(); if (args.Length <= 1) { Program.ServerInstance.SendChatMessageToPlayer(sender, "USAGE", "/godmode [Player Name]"); return false; } Client target = null; lock (Program.ServerInstance.Clients) target = Program.ServerInstance.Clients.FirstOrDefault(c => c.DisplayName.ToLower().StartsWith(args[1].ToLower())); if (target == null) { Program.ServerInstance.SendChatMessageToPlayer(sender, "ERROR", "No such player found: " + args[1]); return false; } string salt = "inv+" + target.NetConnection.RemoteUniqueIdentifier; Program.ServerInstance.GetNativeCallFromPlayer(target, salt, 0xB721981B2B939E07, new BooleanArgument(), (o) => { bool isInvincible = (bool) o; Program.ServerInstance.SendChatMessageToPlayer(sender, string.Format("Player {0} is {1}", target.DisplayName, isInvincible ? "~g~invincible." : "~r~mortal.")); }, new LocalGamePlayerArgument()); return false; } if (message.StartsWith("/weather")) { if (account == null || (int)account.Level < 1) { Program.ServerInstance.SendChatMessageToPlayer(sender, "SERVER", "Insufficent privileges."); return false; } var args = message.Split(); if (args.Length <= 1) { Program.ServerInstance.SendChatMessageToPlayer(sender, "USAGE", "/weather [Weather ID]"); return false; } int newWeather; if (!int.TryParse(args[1], out newWeather)) { Program.ServerInstance.SendChatMessageToPlayer(sender, "USAGE", "/weather [Weather ID]"); return false; } if (newWeather < 0 || newWeather >= _weatherNames.Length) { Program.ServerInstance.SendChatMessageToPlayer(sender, "USAGE", "Weather ID must be between 0 and " + (_weatherNames.Length-1)); return false; } ServerWeather = newWeather; Program.ServerInstance.SendNativeCallToAllPlayers(0x29B487C359E19889, _weatherNames[ServerWeather]); Console.WriteLine(string.Format("ADMINTOOLS: {0} has changed the weather to {1}", account.Name + " (" + sender.DisplayName + ")", ServerWeather)); return false; } if (message.StartsWith("/time")) { if (account == null || (int)account.Level < 1) { Program.ServerInstance.SendChatMessageToPlayer(sender, "SERVER", "Insufficent privileges."); return false; } var args = message.Split(); if (args.Length <= 1) { Program.ServerInstance.SendChatMessageToPlayer(sender, "USAGE", "/time [hours]:[minutes]"); return false; } int hours; int minutes; var timeSplit = args[1].Split(':'); if (timeSplit.Length < 2 || !int.TryParse(timeSplit[0], out hours) || !int.TryParse(timeSplit[1], out minutes)) { Program.ServerInstance.SendChatMessageToPlayer(sender, "USAGE", "/time [hours]:[minutes]"); return false; } if (hours < 0 || hours > 24 || minutes < 0 || minutes > 60) { Program.ServerInstance.SendChatMessageToPlayer(sender, "USAGE", "/time [hours]:[minutes]"); return false; } ServerTime = new TimeSpan(hours, minutes, 0); Program.ServerInstance.SendNativeCallToAllPlayers(0x47C3B5848C3E45D8, ServerTime.Hours, ServerTime.Minutes, ServerTime.Seconds); Program.ServerInstance.SendNativeCallToAllPlayers(0x4055E40BD2DBEC1D, true); Console.WriteLine(string.Format("ADMINTOOLS: {0} has changed the time to {1}", account.Name + " (" + sender.DisplayName + ")", ServerTime)); return false; } if (message.StartsWith("/kill")) { if (account == null || (int)account.Level < 1) { Program.ServerInstance.SendChatMessageToPlayer(sender, "SERVER", "Insufficent privileges."); return false; } var args = message.Split(); if (args.Length <= 1) { Program.ServerInstance.SendChatMessageToPlayer(sender, "USAGE", "/kill [Player Name]"); return false; } Client target = null; lock (Program.ServerInstance.Clients) target = Program.ServerInstance.Clients.FirstOrDefault(c => c.DisplayName.ToLower().StartsWith(args[1].ToLower())); if (target == null) { Program.ServerInstance.SendChatMessageToPlayer(sender, "ERROR", "No such player found: " + args[1]); return false; } Program.ServerInstance.SetPlayerHealth(target, -1); Console.WriteLine(string.Format("ADMINTOOLS: {0} has killed player {1}", account.Name + " (" + sender.DisplayName + ")", target.Name + " (" + target.DisplayName + ")")); return false; } if (message.StartsWith("/ban")) { if (account == null || (int)account.Level < 2) { Program.ServerInstance.SendChatMessageToPlayer(sender, "SERVER", "Insufficent privileges."); return false; } var args = message.Split(); if (args.Length <= 2) { Program.ServerInstance.SendChatMessageToPlayer(sender, "USAGE", "/ban [Player Name] [Reason]"); return false; } Client target = null; lock (Program.ServerInstance.Clients) target = Program.ServerInstance.Clients.FirstOrDefault(c => c.DisplayName.ToLower().StartsWith(args[1].ToLower())); if (target == null) { Program.ServerInstance.SendChatMessageToPlayer(sender, "ERROR", "No such player found: " + args[1]); return false; } target.Ban(args[2], sender); SaveBanlist(Location + "Banlist.xml"); Console.WriteLine(string.Format("ADMINTOOLS: {0} has banned player {1} with reason: {2}", account.Name + " (" + sender.DisplayName + ")", target.Name + " (" + target.DisplayName + ")", args[2])); Program.ServerInstance.KickPlayer(target, "You have been banned: " + args[2]); return false; } if (message.StartsWith("/kick")) { if (account == null || (int)account.Level < 1) { Program.ServerInstance.SendChatMessageToPlayer(sender, "SERVER", "Insufficent privileges."); return false; } var args = message.Split(); if (args.Length <= 2) { Program.ServerInstance.SendChatMessageToPlayer(sender, "USAGE", "/kick [Player Name] [Reason]"); return false; } Client target = null; lock (Program.ServerInstance.Clients) target = Program.ServerInstance.Clients.FirstOrDefault(c => c.DisplayName.ToLower().StartsWith(args[1].ToLower())); if (target == null) { Program.ServerInstance.SendChatMessageToPlayer(sender, "ERROR", "No such player found: " + args[1]); return false; } Program.ServerInstance.KickPlayer(target, args[2]); Console.WriteLine(string.Format("SERVER: {0} has kicked player {1}", account.Name + " (" + sender.DisplayName + ")", target.Name + " (" + target.DisplayName + ")")); return false; } if (message.StartsWith("/register")) { account = sender.GetAccount(false); if (account != null) { Program.ServerInstance.SendChatMessageToPlayer(sender, "SERVER", "You already have an account."); return false; } var args = message.Split(); if (args.Length <= 1) { Program.ServerInstance.SendChatMessageToPlayer(sender, "USAGE", "/register [Password]"); return false; } var password = GetHashSha256(args[1]); var accObject = new Account() { Level = Privilege.User, Name = sender.DisplayName, Password = password, Ban = null }; lock (Lists._accounts.Accounts) Lists._accounts.Accounts.Add(accObject); SaveAccounts(Location + "Accounts.xml"); lock (Lists._authenticatedUsers) Lists._authenticatedUsers.Add(sender.NetConnection.RemoteUniqueIdentifier); Program.ServerInstance.SendChatMessageToPlayer(sender, "SERVER", "Your account has been created!"); Console.WriteLine(string.Format("SERVER: New player registered: {0}", accObject.Name)); return false; } if (message.StartsWith("/login")) { if (account != null) { Program.ServerInstance.SendChatMessageToPlayer(sender, "SERVER", "You are already authenticated."); return false; } account = sender.GetAccount(false); if (account == null) { Program.ServerInstance.SendChatMessageToPlayer(sender, "SERVER", "No accounts have been found with your name."); return false; } var args = message.Split(); if (args.Length <= 1) { Program.ServerInstance.SendChatMessageToPlayer(sender, "USAGE", "/login [Password]"); return false; } var password = GetHashSha256(args[1]); if (password != account.Password) { Program.ServerInstance.SendChatMessageToPlayer(sender, "SERVER", "Wrong password."); return false; } lock (Lists._authenticatedUsers) if (!Lists._authenticatedUsers.Contains(sender.NetConnection.RemoteUniqueIdentifier)) Lists._authenticatedUsers.Add(sender.NetConnection.RemoteUniqueIdentifier); Program.ServerInstance.SendChatMessageToPlayer(sender, "SERVER", "Authentication successful!"); if ((int)account.Level == 0) { Console.WriteLine(string.Format("User \"{0}\" logged in.", account.Name + " (" + sender.DisplayName + ")")); return false; } else if((int)account.Level == 1) { Console.WriteLine(string.Format("Moderator \"{0}\" logged in.", account.Name + " (" + sender.DisplayName + ")")); return false; }else if ((int)account.Level == 2) { Console.WriteLine(string.Format("Administrator \"{0}\" logged in.", account.Name + " (" + sender.DisplayName + ")")); return false; } else if ((int)account.Level == 3) { Console.WriteLine(string.Format("Owner \"{0}\" logged in.", account.Name + " (" + sender.DisplayName + ")")); return false; } } if (message == "/logout") { if (sender.IsAuthenticated()) { Console.WriteLine(string.Format("SERVER: Player has logged out: {0}", sender.Name)); Program.ServerInstance.SendChatMessageToPlayer(sender, "SERVER", "You have been logged out."); lock (Lists._authenticatedUsers) if (Lists._authenticatedUsers.Contains(sender.NetConnection.RemoteUniqueIdentifier)) Lists._authenticatedUsers.Remove(sender.NetConnection.RemoteUniqueIdentifier); } else { Program.ServerInstance.SendChatMessageToPlayer(sender, "SERVER", "You are not logged in."); } return false; } if (message == "/countdown") { if (DateTime.Now.Subtract(_lastCountdown).TotalSeconds < 30) { Program.ServerInstance.SendChatMessageToPlayer(sender, "COUNTDOWN", "Please wait 30 seconds before starting another countdown."); return false; } _lastCountdown = DateTime.Now; var cdThread = new Thread((ThreadStart) delegate { for (int i = 3; i >= 0; i--) { Program.ServerInstance.SendChatMessageToAll("COUNTDOWN", i == 0 ? "Go!" : i.ToString()); Thread.Sleep(1000); } }); cdThread.Start(); return false; } if (message.Contains("login") || message.Contains("register")) { return false; } return true; }
public override bool OnChatMessage(NetConnection sender, string message) { var account = _authenticatedUsers.ContainsKey(sender.RemoteUniqueIdentifier) ? _authenticatedUsers[sender.RemoteUniqueIdentifier] : null; if (message.StartsWith("/tp")) { if (account == null || (int)account.Level < 1) { Program.ServerInstance.SendChatMessageToPlayer(sender, "ACCESS DENIED", "Insufficent privileges."); return false; } var args = message.Split(); if (args.Length <= 1) { Program.ServerInstance.SendChatMessageToPlayer(sender, "USAGE", "/tp [Player Name]"); return false; } var target = Program.ServerInstance.Clients.FirstOrDefault( c => c.RemoteUniqueIdentifier == Program.ServerInstance.NickNames.FirstOrDefault(pair => pair.Value.ToLower().StartsWith(args[1].ToLower())).Key); if (target == null) { Program.ServerInstance.SendChatMessageToPlayer(sender, "ERROR", "No such player found: " + args[1]); return false; } Program.ServerInstance.GetPlayerPosition(target, o => { var newPos = (Vector3)o; Program.ServerInstance.TeleportPlayer(sender, newPos); }); Console.WriteLine("ADMINTOOLS: {account.Name} has teleported to player {Program.ServerInstance.NickNames[target.RemoteUniqueIdentifier]}"); return false; } if (message.StartsWith("/kill")) { if (account == null || (int)account.Level < 1) { Program.ServerInstance.SendChatMessageToPlayer(sender, "ACCESS DENIED", "Insufficent privileges."); return false; } var args = message.Split(); if (args.Length <= 1) { Program.ServerInstance.SendChatMessageToPlayer(sender, "USAGE", "/kill [Player Name]"); return false; } var target = Program.ServerInstance.Clients.FirstOrDefault( c => c.RemoteUniqueIdentifier == Program.ServerInstance.NickNames.FirstOrDefault(pair => pair.Value.ToLower().StartsWith(args[1].ToLower())).Key); if (target == null) { Program.ServerInstance.SendChatMessageToPlayer(sender, "ERROR", "No such player found: " + args[1]); return false; } Program.ServerInstance.SetPlayerHealth(target, -1); Console.WriteLine("ADMINTOOLS: {account.Name} has killed player {Program.ServerInstance.NickNames[target.RemoteUniqueIdentifier]}"); return false; } if (message.StartsWith("/ban")) { if (account == null || (int)account.Level < 2) { Program.ServerInstance.SendChatMessageToPlayer(sender, "ACCESS DENIED", "Insufficent privileges."); return false; } var args = message.Split(); if (args.Length <= 2) { Program.ServerInstance.SendChatMessageToPlayer(sender, "USAGE", "/ban [Player Name] [Reason]"); return false; } var target = Program.ServerInstance.Clients.FirstOrDefault( c => c.RemoteUniqueIdentifier == Program.ServerInstance.NickNames.FirstOrDefault(pair => pair.Value.ToLower().StartsWith(args[1].ToLower())).Key); if (target == null) { Program.ServerInstance.SendChatMessageToPlayer(sender, "ERROR", "No such player found: " + args[1]); return false; } _banned.BannedIps.Add(new Ban() { Address = target.RemoteEndPoint.Address.ToString(), BannedBy = account.Name, Reason = args[2], TimeIssued = DateTime.Now, Name = Program.ServerInstance.NickNames[target.RemoteUniqueIdentifier], }); SaveBanlist(Location + "Banlist.xml"); Console.WriteLine("ADMINTOOLS: {account.Name} has banned player {Program.ServerInstance.NickNames[target.RemoteUniqueIdentifier]} with reason: {args[2]}"); Program.ServerInstance.KickPlayer(target, "You have been banned: " + args[2]); return false; } if (message.StartsWith("/kick")) { if (account == null || (int)account.Level < 1) { Program.ServerInstance.SendChatMessageToPlayer(sender, "ACCESS DENIED", "Insufficent privileges."); return false; } var args = message.Split(); if (args.Length <= 2) { Program.ServerInstance.SendChatMessageToPlayer(sender, "USAGE", "/kick [Player Name] [Reason]"); return false; } var target = Program.ServerInstance.Clients.FirstOrDefault( c => c.RemoteUniqueIdentifier == Program.ServerInstance.NickNames.FirstOrDefault(pair => pair.Value.ToLower().StartsWith(args[1].ToLower())).Key); if (target == null) { Program.ServerInstance.SendChatMessageToPlayer(sender, "ERROR", "No such player found: " + args[1]); return false; } Program.ServerInstance.KickPlayer(target, args[2]); Console.WriteLine("ADMINTOOLS: {account.Name} has kickd player {Program.ServerInstance.NickNames[target.RemoteUniqueIdentifier]}"); return false; } if (message.StartsWith("/register")) { account = _accounts.Accounts.FirstOrDefault(acc => acc.Name == Program.ServerInstance.NickNames[sender.RemoteUniqueIdentifier]); if (account != null) { Program.ServerInstance.SendChatMessageToPlayer(sender, "ERROR", "You already have an account."); return false; } var args = message.Split(); if (args.Length <= 1) { Program.ServerInstance.SendChatMessageToPlayer(sender, "USAGE", "/register [Password]"); return false; } var password = GetHashSha256(args[1]); var accObject = new Account() { Level = Privilege.User, Name = Program.ServerInstance.NickNames[sender.RemoteUniqueIdentifier], Password = password, }; _accounts.Accounts.Add(accObject); SaveAccounts(Location + "Accounts.xml"); _authenticatedUsers.Add(sender.RemoteUniqueIdentifier, accObject); Program.ServerInstance.SendChatMessageToPlayer(sender, "ACCOUNT", "Your account has been created!"); Console.WriteLine("ADMINTOOLS: New player registered: {accObject.Name}"); return false; } if (message.StartsWith("/login")) { if (account != null) { Program.ServerInstance.SendChatMessageToPlayer(sender, "ERROR", "You are already authenticated."); return false; } account = _accounts.Accounts.FirstOrDefault(acc => acc.Name == Program.ServerInstance.NickNames[sender.RemoteUniqueIdentifier]); if (account == null) { Program.ServerInstance.SendChatMessageToPlayer(sender, "ERROR", "No accounts have been found with your name."); return false; } var args = message.Split(); if (args.Length <= 1) { Program.ServerInstance.SendChatMessageToPlayer(sender, "USAGE", "/login [Password]"); return false; } var password = GetHashSha256(args[1]); if (password != account.Password) { Program.ServerInstance.SendChatMessageToPlayer(sender, "ERROR", "Wrong password."); return false; } _authenticatedUsers.Add(sender.RemoteUniqueIdentifier, account); Program.ServerInstance.SendChatMessageToPlayer(sender, "ACCOUNT", "Authentication successful!"); Console.WriteLine("ADMINTOOLS: New player logged in: {account.Name}"); return false; } if (message == "/logout") { if (_authenticatedUsers.ContainsKey(sender.RemoteUniqueIdentifier)) { Console.WriteLine("ADMINTOOLS: Player has logged out: {_authenticatedUsers[sender.RemoteUniqueIdentifier].Name}"); Program.ServerInstance.SendChatMessageToPlayer(sender, "ACCOUNT", "You have been logged out."); _authenticatedUsers.Remove(sender.RemoteUniqueIdentifier); } else { Program.ServerInstance.SendChatMessageToPlayer(sender, "ACCOUNT", "You are not logged in."); } return false; } return true; }