private void InitSimulation() { v = new Visualization(dimX, canvas, polytope); v.DrawPoints = drawPts; switch (polytope) { case Polytope.Simplex: d0 = Simplex.GenerateDistanceMatrix(dimX); minimalization = new GradientDescent(d0, alpha, Simplex.GetVerticesCount(dimX)); //minimalization = new SimulatedAnnealing(1000, Simplex.GetVerticesCount(dimX), d0, dimY); break; case Polytope.Hypercube: d0 = Hypercube.GenerateDistanceMatrix(dimX); minimalization = new GradientDescent(d0, alpha, Hypercube.GetVerticesCount(dimX)); //minimalization = new SimulatedAnnealing(1000, Hypercube.GetVerticesCount(dimX), d0, dimY); break; default: break; } mds = new MDS(MDS.EuclideanDistance, MDS.KruskalStress, minimalization); s = mds.InitPos(); stressDisplay.Text = s.GetValue().ToString(); DrawSolution(s, zoom); iterationDisplay.Text = "0"; }
/// <summary> /// Triggers when the ranks file is reloaded. This will reload all ranks into the database. /// </summary> public void LoadRanks(Hypercube Core) { Ranks.Clear(); var dt = Core.Database.GetDataTable("SELECT * FROM RankDB"); foreach (DataRow c in dt.Rows) { var NewRank = new Rank(); NewRank.ID = Convert.ToInt32(c["Number"]); NewRank.Name = (string)c["Name"]; NewRank.Group = (string)c["RGroup"]; NewRank.Prefix = (string)c["Prefix"]; if (c["Op"].GetType() == typeof(string)) { NewRank.Suffix = (string)c["Suffix"]; } NewRank.Op = ((long)c["Op"] > 0); NewRank.PointsInRank = Convert.ToInt32(c["Points"]); if (c["Next"].GetType() == typeof(string)) { NewRank.NextRank = (string)c["Next"]; } Ranks.Add(NewRank); } }
public void HandleCommand(Hypercube Core, NetworkClient Client, string Message) { if (!Message.Contains(" ")) { Message += " "; } var command = Message.Substring(0, Message.IndexOf(" ")); var splits = Message.Substring(Message.IndexOf(" ") + 1, Message.Length - (Message.IndexOf(" ") + 1)).Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries); var text = Message.Substring(Message.IndexOf(" ") + 1, Message.Length - (Message.IndexOf(" ") + 1)); var text2 = text.Substring(text.IndexOf(" ") + 1, text.Length - (text.IndexOf(" ") + 1)); Core.Logger._Log("Info", "Commands", "Player '" + Client.CS.LoginName + "' used command " + command); if (!CommandDict.ContainsKey(command.ToLower())) { Chat.SendClientChat(Client, "&4Error:&f Command '" + command + "' not found."); } else { var thisCommand = CommandDict[command.ToLower()]; var Ranks = RankContainer.SplitRanks(Core, thisCommand.UseRanks); if (Ranks.Contains(Client.CS.PlayerRank)) { thisCommand.Run(command, splits, text, text2, Core, Client); } else { Chat.SendClientChat(Client, "&4Error:&f You do not have permission to use this command."); } } }
/// <summary> /// Sends a chat message to all players across all maps. /// </summary> /// <param name="Core"></param> public static void SendGlobalChat(Hypercube Core, string Message, sbyte MessageType = 0, bool Log = false) { var Chat = new Message(); Chat.PlayerID = MessageType; Message = Text.CleanseString(Message); if (Log) { Core.Logger._Log("Chat", "Global", Message); } //TODO: Emote Replace string[] Sending = SplitLines(Message); for (int i = 0; i < Core.nh.Clients.Count; i++) { foreach (string b in Sending) { Chat.Text = b; Chat.Write(Core.nh.Clients[i]); } } //foreach (NetworkClient c in Core.nh.Clients) { // foreach (string b in Sending) { // Chat.Text = b; // Chat.Write(c); // } //} }
/// <summary> /// Sends a message to all clients on a certain map. /// </summary> public static void SendMapChat(HypercubeMap Map, Hypercube Core, string Message, sbyte MessageType = 0, bool Log = false) { var Chat = new Message(); Chat.PlayerID = MessageType; Message = Text.CleanseString(Message); if (Log) { Core.Logger._Log("Chat", "Global", Message); } //TODO: Emote Replace string[] Sending = SplitLines(Message); foreach (NetworkClient c in Map.Clients) { foreach (string b in Sending) { Chat.Text = b; Chat.Write(c); } } }
public void Run(string Command, string[] args, string Text1, string Text2, Hypercube Core, NetworkClient Client) { if (args.Length == 0) { return; } if (!Core.Database.ContainsPlayer(args[0])) { Chat.SendClientChat(Client, "&4Error:&f Could not find a user with the name '" + args[0] + "'."); return; } Core.Logger._Log("Info", "Command", "Player " + args[0] + " was unstopped by " + Client.CS.LoginName + "."); Chat.SendGlobalChat(Core, "&ePlayer " + args[0] + "&e was unstopped by " + Client.CS.FormattedName + "&e."); Core.Database.UnstopPlayer(args[0]); foreach (NetworkClient c in Core.nh.Clients) { if (c.CS.LoginName.ToLower() == args[0].ToLower()) { c.CS.Stopped = false; break; } } }
public void setBasis(Vector3[] newBasis) { Basis = Cylinder.Basis = Sphere.Basis = Triangle.Basis = Hypercube.Basis = newBasis; axises = new Axises(Constants.axisPosition, device); axises.paint(Constants.AxisColor); Hypercube.setCamera = true; cube = new Hypercube(Constants.SphereColor, Constants.CylinderColor, device); Invalidate(); }
public void Handle(NetworkClient Client, Hypercube Core) { Client.CS.CPEExtensions.Add(ExtName, Version); if (Client.CS.CPEExtensions.Keys.Count == Client.CS.Extensions) { CPE.CPEPackets(Client); } }
/// <summary> /// Creates a new blank map. /// </summary> public HypercubeMap(Hypercube Core, string Filename, string MapName, short SizeX, short SizeY, short SizeZ) { ServerCore = Core; Map = new ClassicWorld(SizeX, SizeZ, SizeY); HCSettings = new HypercubeMetadata(); // -- Hypercube specific settings, woo. HCSettings.Building = true; // -- Enable building and physics by default. HCSettings.Physics = true; HCSettings.History = new int[Map.BlockData.Length]; foreach (Rank r in Core.Rankholder.Ranks) // -- Allow all ranks to access this map by default. { JoinRanks.Add(r); BuildRanks.Add(r); ShowRanks.Add(r); } Map.MetadataParsers.Add("Hypercube", HCSettings); // -- Add the parser so it will save with the map :) Map.MapName = MapName; Path = Filename; Map.GeneratingSoftware = "Hypercube"; Map.GeneratorName = "Blank"; Map.CreatingService = "Classicube"; Map.CreatingUsername = "******"; var myRef = (CPEMetadata)Map.MetadataParsers["CPE"]; if (myRef.CustomBlocksFallback == null) { myRef.CustomBlocksLevel = 1; myRef.CustomBlocksVersion = 1; myRef.CustomBlocksFallback = new byte[256]; for (int i = 50; i < 66; i++) { myRef.CustomBlocksFallback[i] = (byte)Core.Blockholder.GetBlock(i).CPEReplace; } Map.MetadataParsers["CPE"] = myRef; } Map.Save(Path); LastClient = DateTime.UtcNow; Clients = new List <NetworkClient>(); Entities = new List <Entity>(); ClientThread = new Thread(MapMain); ClientThread.Start(); EntityThread = new Thread(MapEntities); EntityThread.Start(); }
public void Run(string command, string[] args, string Text1, string Text2, Hypercube Core, NetworkClient Client) { if (Plugin.StartsWith("Lua:")) { Core.LuaHandler.RunLuaFunction(Plugin.Substring(4, Plugin.Length - 4), new Object[] { command, args, Text1, Core, Client }); } else { Activator.CreateInstance(Type.GetType(Plugin), command, args, Text1, Core, Client); } }
/// <summary> /// Splits a comma delimited string of rank IDs into a list of ranks. /// </summary> /// <param name="RankString"></param> /// <returns></returns> public static List <Rank> SplitRanks(Hypercube ServerCore, string RankString) { var result = new List <Rank>(); var splitRanks = RankString.Split(','); foreach (string s in splitRanks) { result.Add(ServerCore.Rankholder.GetRank(int.Parse(s))); } return(result); }
Thread HeartbeatThread; //, MinecraftThread; /// <summary> /// Generates a new salt and starts heartbeating. /// </summary> /// <param name="Core"></param> public Heartbeat(Hypercube Core) { ServerCore = Core; CreateSalt(); //if (Core.nh.DualHeartbeat) { // MinecraftThread = new Thread(DoHeartbeatMinecraft); // MinecraftThread.Start(); //} HeartbeatThread = new Thread(DoHeartbeatClassicube); HeartbeatThread.Start(); }
public void Run(string Command, string[] args, string Text1, string Text2, Hypercube Core, NetworkClient Client) { if (Core.Commandholder.CommandDict.ContainsKey("/" + args[0].ToLower()) == false) { Chat.SendClientChat(Client, "&4Error: &fCommand not found."); return; } var thisCommand = Core.Commandholder.CommandDict["/" + args[0].ToLower()]; Chat.SendClientChat(Client, "&e/" + args[0]); Chat.SendClientChat(Client, thisCommand.Help); }
public void Run(string Command, string[] args, string Text1, string Text2, Hypercube Core, NetworkClient Client) { string MapString = "&eMaps:<br>"; foreach (HypercubeMap m in Core.Maps) { if (m.ShowRanks.Contains(Client.CS.PlayerRank)) { MapString += "&e" + m.Map.MapName + " &f| "; } } Chat.SendClientChat(Client, MapString); }
/// <summary> /// Creates a new entry in the PlayerDB for a player. /// </summary> /// <param name="Name"></param> /// <param name="IP"></param> public void CreatePlayer(string Name, string IP, Hypercube Core) { var myValues = new Dictionary <string, string>(); myValues.Add("Name", Name); myValues.Add("IP", IP); myValues.Add("Rank", Core.DefaultRank.ID.ToString()); myValues.Add("RankStep", "0"); myValues.Add("Global", "1"); myValues.Add("Banned", "0"); myValues.Add("Stopped", "0"); myValues.Add("Vanished", "0"); Insert("PlayerDB", myValues); }
public void CourtesyNode_ReturnsDoctorInfoFromName() { LuxFoundationLibrary luxFoundationLibrary = new LuxFoundationLibrary(); TestLambdaContext context = new TestLambdaContext(); const string doctorName = "Paul McGann"; Hypercube testRequest = new Hypercube() { Operation = OperationType.GetDoctorByName, OperationInput = doctorName }; string requestOutput = luxFoundationLibrary.CourtesyNode(testRequest, context); Assert.Contains(doctorName, requestOutput); }
public void CourtesyNode_ReturnsDoctorsForGivenYear() { LuxFoundationLibrary luxFoundationLibrary = new LuxFoundationLibrary(); TestLambdaContext context = new TestLambdaContext(); const string year = "1996"; const string expectedDoctor = "Paul McGann"; Hypercube testRequest = new Hypercube() { Operation = OperationType.GetDoctorsForYear, OperationInput = year }; string requestOutput = luxFoundationLibrary.CourtesyNode(testRequest, context); Assert.Contains(expectedDoctor, requestOutput); }
public void Run(string Command, string[] args, string Text1, string Text2, Hypercube Core, NetworkClient Client) { if (args.Length == 0) { return; } if (!Core.Database.ContainsPlayer(args[0])) { Chat.SendClientChat(Client, "&4Error:&f Could not find a user with the name '" + args[0] + "'."); return; } int MuteDuration; string muteReason = "You have been muted"; if (args.Length == 1) { MuteDuration = 999999; } else if (args.Length == 2) { MuteDuration = int.Parse(Text2); } else { MuteDuration = int.Parse(args[1]); muteReason = Text2.Substring(Text2.IndexOf(" ") + 1, Text2.Length - (Text2.IndexOf(" ") + 1)); } Core.Logger._Log("Info", "Command", "Player " + args[0] + " was muted for " + MuteDuration.ToString() + " Minutes. (" + muteReason + ")"); Chat.SendGlobalChat(Core, "&ePlayer " + args[0] + "&e was muted for " + MuteDuration.ToString() + " minutes. (&f" + muteReason + "&e)"); var MutedUntil = DateTime.UtcNow.AddMinutes((double)MuteDuration) - Hypercube.UnixEpoch; Core.Database.MutePlayer(args[0], (int)MutedUntil.TotalSeconds, muteReason); foreach (NetworkClient c in Core.nh.Clients) { if (c.CS.LoginName.ToLower() == args[0].ToLower() && c.CS.LoggedIn) { c.CS.MuteTime = (int)MutedUntil.TotalSeconds; break; } } }
public void Run(string Command, string[] args, string Text1, string Text2, Hypercube Core, NetworkClient Client) { string OnlineString = "&eOnline Players: " + Core.nh.Clients.Count.ToString() + "<br>"; foreach (HypercubeMap hm in Core.Maps) { OnlineString += "&e" + hm.Map.MapName + "&f: "; foreach (NetworkClient c in hm.Clients) { OnlineString += c.CS.FormattedName + " "; } OnlineString += "<br>"; } Chat.SendClientChat(Client, OnlineString); }
public void Handle(NetworkClient Client, Hypercube Core) { if (X != Client.CS.MyEntity.X || Y != Client.CS.MyEntity.Y || Z != Client.CS.MyEntity.Z || yaw != Client.CS.MyEntity.Rot || pitch != Client.CS.MyEntity.Look) { Client.CS.MyEntity.X = X; Client.CS.MyEntity.Y = Y; Client.CS.MyEntity.Z = Z; Client.CS.MyEntity.Rot = yaw; Client.CS.MyEntity.Look = pitch; Client.CS.MyEntity.Changed = true; } if (Client.CS.CPEExtensions.ContainsKey("HeldBlock")) { //TODO: Heldblock. } }
public void Run(string Command, string[] args, string Text1, string Text2, Hypercube Core, NetworkClient Client) { if (args.Length == 0) { return; } if (!Core.Database.ContainsPlayer(args[0])) { Chat.SendClientChat(Client, "&4Error:&f Could not find a user with the name '" + args[0] + "'."); return; } Core.Logger._Log("Info", "Command", "Player " + args[0] + " was unbanned by " + Client.CS.LoginName + "."); Chat.SendGlobalChat(Core, "&ePlayer " + args[0] + "&e was unbanned by " + Client.CS.FormattedName + "&e."); Core.Database.UnbanPlayer(args[0]); }
public void Run(string Command, string[] args, string Text1, string Text2, Hypercube Core, NetworkClient Client) { if (args.Length == 0) { Chat.SendClientChat(Client, "&4Error:&f Usage: /pinfo [name]"); return; } args[0] = Core.Database.GetPlayerName(args[0]); if (args[0] == "") { Chat.SendClientChat(Client, "&4Error:&f Could not find player."); return; } string PlayerInfo = "&ePlayerinfo:<br>"; var dt = Core.Database.GetDataTable("SELECT * FROM PlayerDB WHERE Name='" + args[0] + "' LIMIT 1"); PlayerInfo += "&eNumber: " + Core.Database.GetDatabaseInt(args[0], "PlayerDB", "Number").ToString() + "<br>"; PlayerInfo += "&eName: " + args[0] + "<br>"; PlayerInfo += "&eRank: " + Core.Rankholder.GetRank(Core.Database.GetDatabaseInt(args[0], "PlayerDB", "Rank")).Name + "<br>"; PlayerInfo += "&eIP: " + Core.Database.GetDatabaseString(args[0], "PlayerDB", "IP") + "<br>"; PlayerInfo += "&eLogins: " + Core.Database.GetDatabaseInt(args[0], "PlayerDB", "LoginCounter").ToString() + "<br>"; PlayerInfo += "&eKicks: " + Core.Database.GetDatabaseInt(args[0], "PlayerDB", "KickCounter").ToString() + ": " + Core.Database.GetDatabaseString(args[0], "PlayerDB", "KickMessage") + "<br>"; if (Core.Database.GetDatabaseInt(args[0], "PlayerDB", "Banned") > 0) { PlayerInfo += "&eBanned: " + Core.Database.GetDatabaseString(args[0], "PlayerDB", "BanMessage") + " (" + Core.Database.GetDatabaseString(args[0], "PlayerDB", "BannedBy") + ")<br>"; } if (Core.Database.GetDatabaseInt(args[0], "PlayerDB", "Stopped") > 0) { PlayerInfo += "&eStopped: " + Core.Database.GetDatabaseString(args[0], "PlayerDB", "StopMessage") + " (" + Core.Database.GetDatabaseString(args[0], "PlayerDB", "StoppedBy") + ")<br>"; } if (Core.Database.GetDatabaseInt(args[0], "PlayerDB", "Time_Muted") > Hypercube.GetCurrentUnixTime()) { PlayerInfo += "&eMuted: " + Core.Database.GetDatabaseString(args[0], "PlayerDB", "MuteMessage") + "<br>"; } Chat.SendClientChat(Client, PlayerInfo); }
/// <summary> /// Loads all maps in the Maps directory. Creates this directory if it does not exist. /// </summary> /// <param name="ServerCore"></param> public static void Watch(Hypercube ServerCore) { if (!Directory.Exists("Maps")) { Directory.CreateDirectory("Maps"); } string[] files = Directory.GetFiles("Maps", "*.cw*", SearchOption.AllDirectories); foreach (string file in files) { try { var NewMap = new HypercubeMap(ServerCore, file); ServerCore.Maps.Add(NewMap); ServerCore.Logger._Log("Info", "MapWatcher", "Loaded map '" + file + "'. (X=" + NewMap.Map.SizeX + " Y=" + NewMap.Map.SizeZ + " Z=" + NewMap.Map.SizeY + ")"); } catch { ServerCore.Logger._Log("Error", "MapWatcher", "Failed to load map '" + file + "'."); } } }
public NetworkClient(TcpClient baseSock, Hypercube Core) { BaseSocket = baseSock; BaseStream = BaseSocket.GetStream(); ServerCore = Core; wSock = new ClassicWrapped.ClassicWrapped(); wSock._Stream = BaseStream; Populate(); CS = new ClientSettings(); CS.CPEExtensions = new Dictionary <string, int>(); CS.SelectionCuboids = new List <byte>(); CS.LoggedIn = false; DataRunner = new Thread(DataHandler); DataRunner.Start(); }
public void Run(string Command, string[] args, string Text1, string Text2, Hypercube Core, NetworkClient Client) { if (args.Length == 0) // -- List command groups { foreach (string a in Core.Commandholder.Groups.Keys) { Chat.SendClientChat(Client, "&e/commands " + a); } } else if (args.Length == 1) // -- list a group. { if (!Core.Commandholder.Groups.ContainsKey(args[0])) { Chat.SendClientChat(Client, "&4Error: &fGroup '" + args[0] + "' not found."); return; } string commandString = "&3| &f"; foreach (string b in Core.Commandholder.Groups[args[0]]) { if (b != Core.Commandholder.Groups[args[0]].Last()) { commandString += b + " | "; } else { commandString += b + " &3|"; } } Chat.SendClientChat(Client, "Group " + args[0]); Chat.SendClientChat(Client, commandString); } else { Chat.SendClientChat(Client, "&4Error: &fWrong number of arguments supplied."); return; } }
public void Run(string Command, string[] args, string Text1, string Text2, Hypercube Core, NetworkClient Client) { foreach (HypercubeMap m in Core.Maps) { if (m.Map.MapName.ToLower() == args[0].ToLower()) { if (m.JoinRanks.Contains(Client.CS.PlayerRank)) { //TODO: Add vanish Chat.SendMapChat(m, Core, "&ePlayer " + Client.CS.FormattedName + " &echanged to map &f" + m.Map.MapName + "."); Chat.SendMapChat(Client.CS.CurrentMap, Core, "&ePlayer " + Client.CS.FormattedName + " &echanged to map &f" + m.Map.MapName + "."); Client.CS.CurrentMap.Clients.Remove(Client); Client.CS.CurrentMap.DeleteEntity(ref Client.CS.MyEntity); Client.CS.CurrentMap = m; m.SendMap(Client); m.Clients.Add(Client); Client.CS.MyEntity.Changed = true; Client.CS.MyEntity.X = m.Map.SpawnX; Client.CS.MyEntity.Y = m.Map.SpawnY; Client.CS.MyEntity.Z = m.Map.SpawnZ; Client.CS.MyEntity.Rot = m.Map.SpawnRotation; Client.CS.MyEntity.Look = m.Map.SpawnLook; Client.CS.MyEntity.SendOwn = true; m.SpawnEntity(Client.CS.MyEntity); m.Entities.Add(Client.CS.MyEntity); m.SendAllEntities(Client); } else { Chat.SendClientChat(Client, "&4Error: &fYou are not allowed to join this map."); return; } } } }
public void Run(string Command, string[] args, string Text1, string Text2, Hypercube Core, NetworkClient Client) { Chat.SendClientChat(Client, "&eGroups&f:"); var GroupDict = new Dictionary <string, string>(); foreach (Rank r in Core.Rankholder.Ranks) { if (GroupDict.Keys.Contains(r.Group)) { GroupDict[r.Group] += "&e| " + r.Prefix + r.Name + r.Suffix + " "; } else { GroupDict.Add(r.Group, "&e" + r.Group + "&f: " + r.Prefix + r.Name + r.Suffix + " "); } } foreach (string b in GroupDict.Keys) { Chat.SendClientChat(Client, GroupDict[b]); } }
public Entity(Hypercube Core, HypercubeMap _Map, string _Name, short _X, short _Y, short _Z, byte _Rot, byte _Look) { Name = _Name; X = _X; Y = _Y; Z = _Z; Rot = _Rot; Look = _Look; Changed = true; SendOwn = true; ID = Core.EFree; BuildMaterial = -1; if (Core.EFree != Core.ENext) { Core.EFree = Core.ENext; } else { Core.EFree += 1; Core.NextID = Core.EFree; } Map = _Map; if (_Map.FreeID != 128) { ClientID = (byte)_Map.FreeID; if (_Map.FreeID != _Map.NextID) { _Map.FreeID = _Map.NextID; } else { _Map.FreeID += 1; _Map.NextID = _Map.FreeID; } } }
public void Run(string Command, string[] args, string Text1, string Text2, Hypercube Core, NetworkClient Client) { if (args.Length == 0) { return; } if (!Core.Database.ContainsPlayer(args[0])) { Chat.SendClientChat(Client, "&4Error:&f Could not find a user with the name '" + args[0] + "'."); return; } string BanReason; if (args.Length == 1) { BanReason = "Banned by staff."; } else { BanReason = Text2; } Core.Logger._Log("Info", "Command", "Player " + args[0] + " was banned by " + Client.CS.LoginName + ". (" + BanReason + ")"); Chat.SendGlobalChat(Core, "&ePlayer " + args[0] + "&e was banned by " + Client.CS.FormattedName + "&e. (&f" + BanReason + "&e)"); Core.Database.BanPlayer(args[0], BanReason, Client.CS.LoginName); foreach (NetworkClient c in Core.nh.Clients) { if (c.CS.LoginName.ToLower() == args[0].ToLower() && c.CS.LoggedIn) { c.KickPlayer("&eBanned: " + BanReason); break; } } }
public void Run(string Command, string[] args, string Text1, string Text2, Hypercube Core, NetworkClient Client) { if (args.Length == 0) { return; } bool kicked = false; string KickReason; if (args.Length == 1) { KickReason = "Kicked by staff."; } else { KickReason = Text2; } foreach (NetworkClient c in Core.nh.Clients) { if (c.CS.LoginName.ToLower() == args[0].ToLower() && c.CS.LoggedIn) { Core.Logger._Log("Info", "Command", "Player " + c.CS.LoginName + " was kicked by " + Client.CS.LoginName + ". (" + KickReason + ")"); Chat.SendGlobalChat(Core, "&ePlayer " + c.CS.FormattedName + "&e was kicked by " + Client.CS.FormattedName + "&e. (&f" + KickReason + "&e)"); c.KickPlayer("&e" + KickReason); kicked = true; break; } } if (!kicked) { Chat.SendClientChat(Client, "&4Error:&f Could not find a user with the name '" + args[0] + "'."); } }