public static void DisconnectConnection(NetConnection sender, Scene scene) { NetServer server = ServerNetworkSceneComponent.GetNetServer(); LoginManagerServer login = MapContainer.GetLoginByID(sender.RemoteUniqueIdentifier); if (login != null) { CharacterPlayer characterPlayer = login.GetCharacter(); //Saves data to SQL database string characterString = Newtonsoft.Json.JsonConvert.SerializeObject(characterPlayer, new StringEnumConverter()); SQLManager.UpdateToSQL(login.username, characterString); //removes login manager MapContainer.RemoveLoginByID(login.GetUniqueID()); if (characterPlayer != null) { //removes entity CharacterManager.RemoveCharacterFromScene(scene, characterPlayer._name); } } //removes the connection sender.Disconnect("Closed"); Console.WriteLine("Disconnected! Connected: " + ServerNetworkSceneComponent.GetNetServer().ConnectionsCount); MainScene.ConnectedCount.SetText("Current connections: " + server.ConnectionsCount); }
public void MoveLoginToLayer(LoginManagerServer login, MapLayer newLayer) { if (newLayer != null) { LayerLogins.Remove(login); newLayer.AddLoginToLayer(login); } }
public static CharacterPlayer FindCharacterByID(long uniqueID) { LoginManagerServer login = GetLoginByID(uniqueID); if (login != null) { return(login.GetCharacter()); } return(null); }
public void RemoveFromLayer(LoginManagerServer login) { foreach (var layer in MapLayers) { if (layer.LayerLogins.Contains(login)) { layer.RemoveLoginFromLayer(login); } } }
public static void SaveAllToSQL() { foreach (NetConnection Connection in ServerNetworkSceneComponent.GetNetServer().Connections) { LoginManagerServer user = MapContainer.GetLoginByID(Connection.RemoteUniqueIdentifier); if (user != null && user.GetCharacter() != null) { UpdateToSQL(user.username, user.GetCharacter().CreateJsonFromCharacter()); } } }
internal static void MoveLoginToMap(LoginManagerServer login, Map newMap) { PlayerComponent pc = login.GetEntity().GetComponent <PlayerComponent>(); pc.CurrentLayer.RemoveLoginFromLayer(login); newMap.AssignToLayer(Scene, login, pc); login.GetEntity().SetPosition(newMap.GetSpawnpoint() + newMap.Entity.Position); //MessageTemplate temp = new MessageTemplate(, MessageType.MapChange); MessageManager.SendStringToUniqueID(Scene, newMap.MapName, login.GetUniqueID(), MessageType.MapChange); }
public void AssignToLayer(Scene scene, LoginManagerServer login, PlayerComponent pc = null) { MapLayer assignedLayer = null; if (MapType == MapType.Multi) { //find first that isn't full assignedLayer = MapLayers.Find(l => { if (l != null) { return(l.LayerLogins.Count < ConstantValues.MaxConnectionsToLayer); } return(false); }); //if none found then make new layer if (assignedLayer == null) { assignedLayer = CreateNewLayer(-1); } login.GetCharacter().LastMultiLocation = MapName; } else if (MapType == MapType.Single) { assignedLayer = CreateNewLayer(login.GetUniqueID()); } assignedLayer.AddLoginToLayer(login); Entity e = Core.Scene.FindEntity(login.GetCharacter()._name); if (e == null) { FSRigidBody fbody = new FSRigidBody().SetBodyType(BodyType.Dynamic).SetIgnoreGravity(true).SetLinearDamping(15f); e = scene.CreateEntity(login.GetCharacter()._name).SetPosition(login.GetCharacter().physicalPosition); e.AddComponent(fbody) .AddComponent(new FSCollisionCircle(25)) .AddComponent(new PlayerComponent(login) { CurrentLayer = assignedLayer }) .AddComponent(new Mover()) .AddComponent(new CircleCollider(25)) .AddComponent(new StatsComponent()) .AddComponent(new DamageComponent()); fbody.Body.FixedRotation = true; login.SetEntity(e); } if (pc != null) { pc.CurrentLayer = assignedLayer; } }
private void CustomMessage(NetIncomingMessage message) { string s = message.ReadString(); List <MessageTemplate> QueueList = Newtonsoft.Json.JsonConvert.DeserializeObject <List <MessageTemplate> >(s, new StringEnumConverter()); QueueList.ForEach(template => { int index = -1; CharacterPlayer character = null; Entity e = null; switch (template.MessageType) { case MessageType.Movement: Movement(template, message); break; case MessageType.Login: LoginAttempt(message, template); break; case MessageType.Register: LoginManagerServer login = Newtonsoft.Json.JsonConvert.DeserializeObject <LoginManagerServer>(template.JsonMessage, new StringEnumConverter()); RegisterUser(login); break; //send by self made function, not Lidgren case MessageType.Disconnected: //OnDisconnected(message.SenderConnection); break; case MessageType.EquipItem: UnEquipItem(template, message); break; case MessageType.UnEquipItem: UnEquipItem(character, message, template); break; case MessageType.StartChanneling: StartChanneling(template, message); break; case MessageType.Target: TargetPlayer(message, template); break; case MessageType.DamageTarget: DamageTarget(message, template); break; } }); }
private void RegisterUser(LoginManagerServer login) { //TODO: Move register to its own function //TODO: add better character creation later //TODO: Change login.username to requrested character name login.SetCharacter(new CharacterPlayer(0, 0, login.username, new WeaponItem[ConstantValues.EquipmentLength], new WeaponItem[ConstantValues.BaseInventoryLength]) { LastMultiLocation = ConstantValues.DefaultMap }); string tempC = Newtonsoft.Json.JsonConvert.SerializeObject(login.GetCharacter(), new StringEnumConverter()); SQLManager.AddToSQL(login.username, login.password, tempC); }
//for logging in public static void AssignLogin(Scene scene, LoginManagerServer login) { string map = login.GetCharacter().LastMultiLocation; Map foundMap; if (map != null) { foundMap = GetMapByName(map); login.GetCharacter().MoveToPos(foundMap.GetSpawnpoint()); } else { foundMap = GetMapByName(ConstantValues.DefaultMap); } foundMap.AssignToLayer(scene, login); }
private void LoginAttempt(NetIncomingMessage message, MessageTemplate template) { LoginManagerServer LoginManagerServerUser = Newtonsoft.Json.JsonConvert.DeserializeObject <LoginManagerServer>(template.JsonMessage, new StringEnumConverter()); LoginManagerServerUser.SetUniqueID(message.SenderConnection.RemoteUniqueIdentifier); Console.WriteLine("Login attempt by: " + LoginManagerServerUser.username); NetConnection sender = message.SenderConnection; if (SQLManager.CheckIfExistInSQL(LoginManagerServerUser.username)) { //true if logged in bool success = LoginManagerServerUser.SetupLogin(); Entity e = Scene.FindEntity(LoginManagerServerUser.GetCharacter()._name); if (success && e == null) { Console.WriteLine("Logged in with \"" + LoginManagerServerUser.username + "\" to Database"); string characterString = Newtonsoft.Json.JsonConvert.SerializeObject(LoginManagerServerUser.GetCharacter(), new StringEnumConverter()); MessageTemplate TempMessageTemplate = new MessageTemplate(characterString, MessageType.LoginSuccess); //Returns the character to the player NetOutgoingMessage mvmntMessage = ServerNetworkSceneComponent.GetNetServer().CreateMessage(Newtonsoft.Json.JsonConvert.SerializeObject(TempMessageTemplate, new StringEnumConverter())); sender.SendMessage(mvmntMessage, NetDeliveryMethod.ReliableOrdered, 0); MapContainer.AssignLogin(Scene, LoginManagerServerUser); } else { MessageTemplate temp = new MessageTemplate("Failure.", MessageType.LoginFailure); NetOutgoingMessage mvmntMessage = ServerNetworkSceneComponent.GetNetServer().CreateMessage(Newtonsoft.Json.JsonConvert.SerializeObject(temp, new StringEnumConverter())); sender.SendMessage(mvmntMessage, NetDeliveryMethod.ReliableOrdered, 0); } } else { MessageTemplate temp = new MessageTemplate("Failure.", MessageType.LoginFailure); NetOutgoingMessage mvmntMessage = ServerNetworkSceneComponent.GetNetServer().CreateMessage(Newtonsoft.Json.JsonConvert.SerializeObject(temp, new StringEnumConverter())); sender.SendMessage(mvmntMessage, NetDeliveryMethod.ReliableOrdered, 0); } }
public PlayerComponent(LoginManagerServer loginManager) { this.loginManager = loginManager; }
public void RemoveLoginFromLayer(LoginManagerServer login) { RemoveLoginFromLayerID(login.GetUniqueID()); }
public void AddLoginToLayer(LoginManagerServer login) { LayerLogins.Add(login); }
public static bool CalculateMovement(CharacterPlayer character, Keys[] keys, long ID) { if (character == null) { return(false); } float speed = 350; try { IsShiftDown = false; var dir = Vector2.Zero; foreach (var key in keys) { //add proper movement with deltaTime later switch (key) { case Keys.W: //character._pos.Y -= 3f; dir.Y = -1f; break; case Keys.A: //character._pos.X -= 3f; dir.X = -1f; break; case Keys.S: //character._pos.Y += 3f; dir.Y = 1f; break; case Keys.D: //character._pos.X += 3f; dir.X = 1f; break; case Keys.T: character.AddItemToInventory(ItemManager.GenerateItem()); LoginManagerServer login = MapContainer.GetLoginByID(ID); MapContainer.MoveLoginToMap(login, MapContainer.GetMapByName("MapTwo")); break; case Keys.LeftShift: IsShiftDown = true; break; default: break; } } if (dir != Vector2.Zero) { Entity e = Core.Scene.FindEntity(character._name); e.RemoveComponent <ChannelingComponent>(); var movement = dir * speed * Time.DeltaTime; FSRigidBody body = e.GetComponent <FSRigidBody>(); Mover mover = e.GetComponent <Mover>(); if (mover.Move(movement, out CollisionResult collisionResult)) { //Debug.DrawLine(e.Position, e.Position + collisionResult.Normal * 100, Color.Black, 1f); } return(true); } } catch (Exception e) { Console.WriteLine(e.Message); } return(false); }