Exemple #1
0
        private static void HandleNebulae(byte[] data)
        {
            var buffer = new PacketBuffer();

            buffer.AddBytes(data);
            buffer.GetInteger();
            GameLogic.Nebulae = buffer.GetList <Nebula>();
            buffer.Dispose();
        }
Exemple #2
0
        private static void HandleItems(byte[] data)
        {
            InterfaceGUI.AddChats(@"Item dictionary downloaded.", Color.DarkOliveGreen);
            var buffer = new PacketBuffer();

            buffer.AddBytes(data);
            buffer.GetInteger();
            GameLogic.Items = buffer.GetList <Item>();
            buffer.Dispose();
        }
Exemple #3
0
        private static void HandleInventory(byte[] data)
        {
            var buffer = new PacketBuffer();

            buffer.AddBytes(data);
            buffer.GetInteger();
            Types.Player[GameLogic.PlayerIndex].Inventory = buffer.GetList <Inventory>();
            Types.Player[GameLogic.PlayerIndex].Credits   = buffer.GetInteger();
            Globals.newInventory = true;
            buffer.Dispose();
        }
Exemple #4
0
        public void PreparePulseBroadcast()
        {
            var mobRange = 2000;

            _combatService.CycleArrays();
            for (var i = 1; i < Constants.MAX_PLAYERS; i++)
            {
                if (ServerTCP.Clients[i].Socket != null && ServerTCP.tempPlayer[i].inGame && ServerTCP.tempPlayer[i].receiving)
                {
                    var buffer = new PacketBuffer();
                    buffer.AddInteger((int)SPulse);
                    buffer.AddInteger(_userService.ActiveUsers.Count);
                    buffer.AddBytes(BitConverter.GetBytes(DateTime.UtcNow.ToBinary()));
                    _userService.ActiveUsers.ForEach(p =>
                    {
                        var ndx = Array.IndexOf(Types.PlayerIds, p.Id);
                        buffer.AddInteger(ndx);
                        buffer.AddString(p.Id);
                        buffer.AddFloat(p.X);
                        buffer.AddFloat(p.Y);
                        buffer.AddFloat(p.Rotation);
                        buffer.AddInteger(p.Health);
                        buffer.AddInteger(p.MaxHealth);
                        buffer.AddInteger(p.Shield);
                        buffer.AddInteger(p.MaxShield);
                        buffer.AddBytes(BitConverter.GetBytes(ServerTCP.tempPlayer[ndx].inGame));
                    });
                    var player = _userService.ActiveUsers.Find(p => p.Id == Types.PlayerIds[i]);
                    var minX   = (int)player.X - mobRange;
                    var minY   = (int)player.Y - mobRange;
                    var maxX   = (int)player.X + mobRange;
                    var maxY   = (int)player.Y + mobRange;
                    buffer.AddArray(_mobService.GetMobs(minX, maxX, minY, maxY).ToArray());
                    buffer.AddArray(_combatService.GetCombats((int)player.X, (int)player.Y).ToArray());
                    buffer.AddArray(Globals.Inventory.Where(m => m.X >= minX && m.X <= maxX && m.Y >= minY && m.Y <= maxY).ToArray());
                    buffer.AddArray(Globals.Loot.Where(L => L.X >= minX && L.X <= maxX && L.Y >= minY && L.Y <= maxY && L.Owner == player.Id).ToArray());
                    SendData(i, buffer.ToArray());
                    buffer.Dispose();
                }
            }
        }
Exemple #5
0
        private void GoodRegister(byte[] data)
        {
            var buffer = new PacketBuffer();

            buffer.AddBytes(data);
            buffer.GetInteger();
            GameLogic.PlayerIndex = buffer.GetInteger(); // Index on server side
            buffer.Dispose();
            ctcp.SendLogin();
            MenuManager.Clear(2);
            InterfaceGUI.AddChats(@"Registration successful.", Color.DarkOliveGreen);
        }
Exemple #6
0
        void HandleServerFull(byte[] data)
        {
            int          longueur;
            PacketBuffer _buffer = new PacketBuffer();

            _buffer.AddBytes(data);
            longueur = _buffer.GetInteger();
            longueur = BitConverter.GetBytes(longueur).Length;
            string login = _buffer.GetString(data.Length - longueur);

            Console.WriteLine(login);
        }
Exemple #7
0
        private static void HandleGalaxy(byte[] data)
        {
            InterfaceGUI.AddChats(@"Galaxy downloaded.", Color.DarkOliveGreen);
            var buffer = new PacketBuffer();

            buffer.AddBytes(data);
            buffer.GetInteger();
            GameLogic.Galaxy = buffer.GetList <Star>();
            GameLogic.CollectPlanets();
            InterfaceGUI.PopulateMap();
            buffer.Dispose();
        }
Exemple #8
0
        public void HandleNetworkMessages(byte[] data)
        {
            var buffer = new PacketBuffer();

            buffer.AddBytes(data);
            var packetNum = buffer.GetInteger();

            buffer.Dispose();

            if (packets.TryGetValue(packetNum, out var Packet))
            {
                Packet.Invoke(data);
            }
        }
Exemple #9
0
        private void RecvPlayer(int index, byte[] data)
        {
            var buffer = new PacketBuffer();

            buffer.AddBytes(data);
            buffer.GetInteger();
            var posX   = buffer.GetFloat();
            var posY   = buffer.GetFloat();
            var rot    = buffer.GetFloat();
            var player = _userService.ActiveUsers.Find(p => p.Id == Types.PlayerIds[index]);

            player.Rotation = rot;
            player.X        = posX;
            player.Y        = posY;
        }
Exemple #10
0
        public void HandleNetworkMessages(byte[] data)
        {
            int          packetNum;
            PacketBuffer _buffer;

            _buffer = new PacketBuffer();

            _buffer.AddBytes(data);
            packetNum = _buffer.GetInteger();
            _buffer.Dispose();

            if (packets.TryGetValue(packetNum, out Packet_ packet))
            {
                packet.Invoke(data);
            }
        }
Exemple #11
0
        private static void GetStaticPulse(byte[] data)
        {
            InterfaceGUI.AddChats(@"Existing connections downloaded.", Color.DarkOliveGreen);
            // Someone new connected so this is all the data we don't need updating every 100ms
            var buffer = new PacketBuffer();

            buffer.AddBytes(data);
            buffer.GetInteger();
            var numPlayers = buffer.GetInteger();

            for (var i = 0; i != numPlayers; i++)
            {
                var index = buffer.GetInteger();
                Types.Player[index].Name = buffer.GetString();
            }
            buffer.Dispose();
        }
Exemple #12
0
        public void SendData(int index, byte[] data)
        {
            var buffer     = new PacketBuffer();
            var compressed = Compress(data);

            buffer.AddInteger(compressed.Length);
            buffer.AddBytes(compressed);
            try
            {
                ServerTCP.Clients[index].Stream.Write(buffer.ToArray(), 0, buffer.ToArray().Length);
            }
            catch
            {
                // Console.WriteLine(@"Unable to send packet- client disconnected");
            }

            buffer.Dispose();
        }
Exemple #13
0
        public void HandleStack(int index, byte[] data)
        {
            var buffer = new PacketBuffer();

            buffer.AddBytes(data);
            buffer.GetInteger();
            var from = buffer.GetString();
            var to   = buffer.GetString();

            buffer.Dispose();
            var player = _userService.ActiveUsers.Find(p => p.Id == Types.PlayerIds[index]);

            if (Transactions.StackItems(from, to, player) == -1)
            {
                SendMessage(index, "Invalid item, item cannot stack, or stack is full.", Warning);
            }
            ;
            SendInventory(index);
        }
Exemple #14
0
        private static void HandleServerPulse(byte[] data)
        {
            var buffer = new PacketBuffer();

            buffer.AddBytes(data);
            buffer.GetInteger(); // Packet Type
            var numPlayers = buffer.GetInteger();

            Globals.serverTime = BitConverter.ToInt64(buffer.GetBytes(8), 0);
            for (var i = 0; i != numPlayers; i++)
            {
                var index     = buffer.GetInteger();
                var Id        = buffer.GetString();
                var X         = buffer.GetFloat();
                var Y         = buffer.GetFloat();
                var Rotation  = buffer.GetFloat();
                var Health    = buffer.GetInteger();
                var MaxHealth = buffer.GetInteger();
                var Shield    = buffer.GetInteger();
                var MaxShield = buffer.GetInteger();
                var inGame    = BitConverter.ToBoolean(buffer.GetBytes(1), 0);
                // If the buffer is not ourselves, skip the update - need to do not in game characters to remove logged out users
                if (index == GameLogic.PlayerIndex)
                {
                    continue;
                }
                Types.Player[index].Id        = Id;
                Types.Player[index].X         = X;
                Types.Player[index].Y         = Y;
                Types.Player[index].Rotation  = Rotation;
                Types.Player[index].Health    = Health;
                Types.Player[index].MaxHealth = MaxHealth;
                Types.Player[index].Shield    = Shield;
                Types.Player[index].MaxShield = MaxShield;
            }
            GameLogic.LocalMobs   = buffer.GetList <Mob>();
            GameLogic.LocalCombat = buffer.GetList <Combat>();
            GameLogic.LocalLoot   = buffer.GetList <Inventory>();
            GameLogic.RealLoot    = buffer.GetList <Loot>();
            GameLogic.WatchCombat();
            buffer.Dispose();
        }
Exemple #15
0
        public void ParseChat(int index, byte[] data)
        {
            var buffer = new PacketBuffer();
            var player = _userService.ActiveUsers.Find(p => p.Id == Types.PlayerIds[index]);

            buffer.AddBytes(data);
            buffer.GetInteger();
            var str = buffer.GetString();

            if (str.ToLower().StartsWith("/c"))
            {
                RelayChat(index, str.Substring(3));
            }
            if (str.ToLower().StartsWith(">>"))
            {
                var result = Transactions.AdminCommand(index, player, str.Substring(2).TrimStart());
                SendMessage(index, result, Notification);
                XFerLoad(index, 1);
            }
        }
Exemple #16
0
        private static void DownloadData(byte[] data)
        {
            var buffer = new PacketBuffer();

            buffer.AddBytes(data);
            buffer.GetInteger();
            GameLogic.PlayerIndex = buffer.GetInteger(); // Index on server side
            var suppress = buffer.GetInteger();
            var i        = GameLogic.PlayerIndex;

            Types.Player[i] = new User
            {
                Id          = buffer.GetString(),
                Name        = buffer.GetString(),
                X           = buffer.GetFloat(),
                Y           = buffer.GetFloat(),
                Rotation    = buffer.GetFloat(),
                Health      = buffer.GetInteger(),
                MaxHealth   = buffer.GetInteger(),
                Shield      = buffer.GetInteger(),
                MaxShield   = buffer.GetInteger(),
                Rank        = buffer.GetString(),
                Credits     = buffer.GetInteger(),
                Exp         = buffer.GetInteger(),
                Level       = buffer.GetInteger(),
                Weap1Charge = buffer.GetInteger(),
                Weap2Charge = buffer.GetInteger(),
                Weap3Charge = buffer.GetInteger(),
                Weap4Charge = buffer.GetInteger(),
                Weap5Charge = buffer.GetInteger(),
                Inventory   = buffer.GetList <Inventory>()
            };
            buffer.Dispose();
            if (suppress == 1)
            {
                return;
            }
            MenuManager.Clear(1);
            Globals.graphicsChange = Globals.Fullscreen;
            InterfaceGUI.AddChats(@"User data downloaded.", Color.DarkOliveGreen);
        }
Exemple #17
0
        private static void HandleExperience(byte[] data)
        {
            var random = new Random();
            var buffer = new PacketBuffer();

            buffer.AddBytes(data);
            buffer.GetInteger();
            var tempLevel = buffer.GetInteger();
            var tempXP    = buffer.GetInteger();
            var increase  = tempXP - Types.Player[GameLogic.PlayerIndex].Exp;

            if (tempLevel > Types.Player[GameLogic.PlayerIndex].Level)
            {
                Game1.LevelUp.Create(new Vector2(Types.Player[GameLogic.PlayerIndex].X - 20 + random.Next(40), Types.Player[GameLogic.PlayerIndex].Y - 20 + random.Next(40)));
            }
            Types.Player[GameLogic.PlayerIndex].Level = tempLevel;
            Types.Player[GameLogic.PlayerIndex].Exp   = tempXP;
            var tempDamage = new DamageText(increase.ToString(), new Vector2(Types.Player[GameLogic.PlayerIndex].X - 20 + random.Next(40), Types.Player[GameLogic.PlayerIndex].Y - 20 + random.Next(40)), 2);

            Game1.DamageTexts.Add(tempDamage);
        }
Exemple #18
0
        public void HandleItemTransaction(int index, byte[] data)
        {
            var buffer = new PacketBuffer();

            buffer.AddBytes(data);
            buffer.GetInteger();
            var id          = buffer.GetString();
            var recipientId = buffer.GetString();

            buffer.Dispose();
            var player = _userService.ActiveUsers.Find(p => p.Id == Types.PlayerIds[index]);

            if (recipientId == player.Id)
            {
                if (Transactions.ReceiveFromGlobal(id, player))
                {
                    SendInventory(index);
                }
                else
                {
                    SendMessage(index, "The object no longer exists", Minor);
                }
            }
            else
            {
                var recipient = _userService.ActiveUsers.Find(p => p.Id == recipientId);
                if (!Transactions.TransferItem(id, player, recipient))
                {
                    return;
                }
                SendInventory(index);
                if (recipientId == "X")
                {
                    return;
                }
                var recipientIndex = Array.IndexOf(Types.PlayerIds, recipient);
                SendInventory(recipientIndex);
            }
        }
Exemple #19
0
        public void HandleLoot(int index, byte[] data)
        {
            var buffer = new PacketBuffer();

            buffer.AddBytes(data);
            buffer.GetInteger();
            var type      = buffer.GetInteger();
            var lootId    = buffer.GetString();
            var itemIndex = buffer.GetInteger();

            if (type == 1)
            {
                Globals.Loot.Remove(Globals.Loot.FirstOrDefault(l => l.Id == lootId));
            }
            else
            {
                var player = _userService.ActiveUsers.Find(p => p.Id == Types.PlayerIds[index]);
                if (Transactions.CollectLoot(lootId, itemIndex, player))
                {
                    SendInventory(index, true);
                }
            }
        }
Exemple #20
0
        private static void UpdateData(byte[] data)
        {
            if (GameLogic.PlayerIndex < 0)
            {
                return;
            }
            var buffer = new PacketBuffer();

            buffer.AddBytes(data);
            buffer.GetInteger();
            Types.Player[GameLogic.PlayerIndex].Health      = buffer.GetInteger();
            Types.Player[GameLogic.PlayerIndex].MaxHealth   = buffer.GetInteger();
            Types.Player[GameLogic.PlayerIndex].Shield      = buffer.GetInteger();
            Types.Player[GameLogic.PlayerIndex].MaxShield   = buffer.GetInteger();
            Types.Player[GameLogic.PlayerIndex].Exp         = buffer.GetInteger();
            Types.Player[GameLogic.PlayerIndex].Level       = buffer.GetInteger();
            Types.Player[GameLogic.PlayerIndex].Weap1Charge = buffer.GetInteger();
            Types.Player[GameLogic.PlayerIndex].Weap2Charge = buffer.GetInteger();
            Types.Player[GameLogic.PlayerIndex].Weap3Charge = buffer.GetInteger();
            Types.Player[GameLogic.PlayerIndex].Weap4Charge = buffer.GetInteger();
            Types.Player[GameLogic.PlayerIndex].Weap5Charge = buffer.GetInteger();
            buffer.Dispose();
        }
Exemple #21
0
        private void HandleRegister(int index, byte[] data)
        {
            Console.WriteLine(@"Received register packet");
            var buffer = new PacketBuffer();

            buffer.AddBytes(data);
            buffer.GetInteger();
            var username = buffer.GetString();
            var password = buffer.GetString();
            var exists   = _userService.AccountExists(username);

            if (!exists)
            {
                var player = _userService.RegisterUser(username, password);
                Types.PlayerIds[index] = player.Id;
                _userService.ActiveUsers.Add(player);
                AcknowledgeRegister(index);
            }
            else
            {
                SendMessage(index, "That username already exists!", Warning);
            }
        }
Exemple #22
0
        private void HandleLogin(int index, byte[] data)
        {
            Console.WriteLine(@"Received login packet");
            var buffer = new PacketBuffer();

            buffer.AddBytes(data);
            buffer.GetInteger();
            var username = buffer.GetString();
            var password = buffer.GetString();

            if (!_userService.AccountExists(username))
            {
                SendMessage(index, "Username does not exist!", Warning);
                return;
            }

            if (!_userService.PasswordOK(username, password))
            {
                SendMessage(index, "Password incorrect!", Warning);
                return;
            }

            var player = _userService.LoadPlayer(username);

            Types.PlayerIds[index] = player.Id;
            _userService.ActiveUsers.Add(player);
            ServerTCP.tempPlayer[index].inGame = true;
            XFerLoad(index);
            SendGalaxy(index);
            SendItems(index);
            SendNebulae(index);
            SendMessage(-1, player.Name + " has connected.", Notification);
            Globals.FullData = true;
            Console.WriteLine(username + @" logged in successfully.");
            ServerTCP.tempPlayer[index].receiving = true;
        }
Exemple #23
0
        public void HandleCombat(int index, byte[] data)
        {
            var buffer = new PacketBuffer();

            buffer.AddBytes(data);
            buffer.GetInteger();
            var targetId = buffer.GetString();
            var weapon   = buffer.GetInteger();
            var player   = _userService.ActiveUsers.Find(p => p.Id == Types.PlayerIds[index]);
            var weaponId = player.Inventory.FirstOrDefault(i => i.Slot == weapon);

            if (weaponId == null)
            {
                return;
            }
            var WEAPON = Globals.Items.FirstOrDefault(w => w.Id == weaponId?.ItemId);

            if (WEAPON == null)
            {
                return;
            }
            switch (weaponId.Slot)
            {
            case 7:
                player.Weap1Charge = 0;
                break;

            case 8:
                player.Weap2Charge = 0;
                break;

            case 9:
                player.Weap3Charge = 0;
                break;

            case 10:
                player.Weap4Charge = 0;
                break;

            case 11:
                player.Weap5Charge = 0;
                break;
            }
            var combat       = _combatService.DoAttack(targetId, player.Id, WEAPON);
            var targetPlayer = _userService.ActiveUsers.FirstOrDefault(p => p?.Id == combat.TargetId);

            if (combat.TargetId == "dead")
            {
                Transactions.CreateLoot(player, new Vector2(combat.TargetX, combat.TargetY));
                var newLevel = Transactions.GiveXP(player, 1000);

                if (newLevel == -1)
                {
                    SendMessage(index, "You have already reached the maximum level!", Announcement);
                }
                if (newLevel > 0)
                {
                    SendMessage(index, "Congratulations, you have reached level " + player.Level + "!", Announcement);
                }
                SendXP(index);
            }

            if (targetPlayer == null)
            {
                return;
            }
            targetPlayer.Shield -= combat.WeaponDamage;
            if (targetPlayer.Shield >= 0)
            {
                return;
            }
            targetPlayer.Health += targetPlayer.Shield;
            targetPlayer.Shield  = 0;
        }