示例#1
0
        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);
        }
示例#2
0
 public void MoveLoginToLayer(LoginManagerServer login, MapLayer newLayer)
 {
     if (newLayer != null)
     {
         LayerLogins.Remove(login);
         newLayer.AddLoginToLayer(login);
     }
 }
示例#3
0
        public static CharacterPlayer FindCharacterByID(long uniqueID)
        {
            LoginManagerServer login = GetLoginByID(uniqueID);

            if (login != null)
            {
                return(login.GetCharacter());
            }
            return(null);
        }
示例#4
0
文件: Map.cs 项目: Vanillj/SkyLight
 public void RemoveFromLayer(LoginManagerServer login)
 {
     foreach (var layer in MapLayers)
     {
         if (layer.LayerLogins.Contains(login))
         {
             layer.RemoveLoginFromLayer(login);
         }
     }
 }
示例#5
0
 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());
         }
     }
 }
示例#6
0
        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);
        }
示例#7
0
文件: Map.cs 项目: Vanillj/SkyLight
        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;
            }
        }
示例#8
0
        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;
                }
            });
        }
示例#9
0
        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);
        }
示例#10
0
        //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);
        }
示例#11
0
        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);
            }
        }
示例#12
0
 public PlayerComponent(LoginManagerServer loginManager)
 {
     this.loginManager = loginManager;
 }
示例#13
0
 public void RemoveLoginFromLayer(LoginManagerServer login)
 {
     RemoveLoginFromLayerID(login.GetUniqueID());
 }
示例#14
0
 public void AddLoginToLayer(LoginManagerServer login)
 {
     LayerLogins.Add(login);
 }
示例#15
0
        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);
        }