예제 #1
0
        public static void AddToInventory(User player, string itemId, int qty)
        {
            var item = Globals.Items.FirstOrDefault(it => it.Id == itemId);

            if (item == null)
            {
                return;
            }
            // Check if user already has it
            var slot = player.Inventory.FirstOrDefault(s => s.ItemId == itemId);

            if (slot != null)
            {
                if (item.Stack)
                {
                    AddExisting(slot, player, itemId, qty);
                }
                else
                {
                    AddNew(player, itemId, qty);
                }
            }
            else
            {
                AddNew(player, itemId, qty);
            }
            ServerTcp.SendInventory(Globals.PlayerIDs.First(p => p.Value == player.Id).Key);
        }
예제 #2
0
        public static void SellItem(int connectionId, int slot, int qty)
        {
            var player = Program._userService.ActiveUsers.FirstOrDefault(p => p.Id == Globals.PlayerIDs[connectionId]);
            var inv    = player?.Inventory.FirstOrDefault(i => i.Slot == slot);

            if (inv == null)
            {
                return;
            }
            var itm = Globals.Items.FirstOrDefault(i => i.Id == inv.ItemId);

            if (itm == null)
            {
                return;
            }
            if (inv.Quantity > qty)
            {
                player.Credits += itm.Cost * qty;
                inv.Quantity   -= qty;
            }
            else if (inv.Quantity <= qty)
            {
                player.Credits += itm.Cost * inv.Quantity;
                player.Inventory.Remove(inv);
            }
            ServerTcp.SendInventory(Globals.PlayerIDs.First(p => p.Value == player.Id).Key);
        }
        private static void PACKET_LOGIN(int connectionId, byte[] data)
        {
            var buffer = new ByteBuffer();

            buffer.WriteBytes(data);
            buffer.ReadLong();
            var user     = buffer.ReadString();
            var pass     = buffer.ReadString();
            var validate = Program._userService.PasswordOK(user, pass);

            if (!validate)
            {
                ServerTcp.SendSystemByte(connectionId, SystemBytes.SysInvPass);
                return;
            }
            buffer.Dispose();

            var player = Program._userService.LoadPlayer(user);

            player.inGame       = true;
            player.connectionID = connectionId;
            Globals.PlayerIDs.Add(connectionId, player.Id);
            Program._userService.ActiveUsers.Add(player);
            ServerTcp.SendGlobals(connectionId);
            System.Threading.Thread.Sleep(250);
            ServerTcp.SendItems(connectionId);
            System.Threading.Thread.Sleep(250);
            ServerTcp.SendToGalaxy(connectionId);
            System.Threading.Thread.Sleep(250);
            ServerTcp.SendIngame(connectionId);
            System.Threading.Thread.Sleep(250);
            ServerTcp.SendInventory(connectionId);
            //ServerTCP.SendNebulae(connectionID);
            ServerTcp.SendMessage(-1, player.Name + " has connected.", (int)ChatPackets.Notification);
            System.Threading.Thread.Sleep(250);
            ServerTcp.SendGalaxy(connectionId);
            System.Threading.Thread.Sleep(250);
            ServerTcp.SendRecipes(connectionId);
            Globals.FullData = true;
            Cnsl.Log(user + @" logged in successfully.");
            player.receiving = true;
        }
예제 #4
0
        public static void Equip(int connectionId, int from, int to)
        {
            var player = Program._userService.ActiveUsers.FirstOrDefault(p => p.Id == Globals.PlayerIDs[connectionId]);

            if (player == null)
            {
                return;
            }
            var inv    = player.Inventory.First(i => i.Slot == from);
            var newInv = player.Inventory.FirstOrDefault(i => i.Slot == to);

            if (to >= 100)
            {
                if (newInv == null)
                {
                    inv.Slot = to;
                }
                else
                {
                    if (inv.ItemId == newInv.ItemId)
                    {
                        AddExisting(newInv, player, inv.ItemId, inv.Quantity);
                    }
                }
            }
            else
            {
                var item = Globals.Items.First(i => i.Id == inv.ItemId);
                if (item.Slot == to)
                {
                    inv.Slot = to;
                }
                // Check special cases
                // Check for weapon
                if (to >= 4 && to <= 8 && item.Slot == 22)
                {
                    inv.Slot = to;
                    switch (to)
                    {
                    case 4:
                        player.Weap1ChargeRate = item.Recharge;
                        break;

                    case 5:
                        player.Weap2ChargeRate = item.Recharge;
                        break;

                    case 6:
                        player.Weap3ChargeRate = item.Recharge;
                        break;

                    case 7:
                        player.Weap4ChargeRate = item.Recharge;
                        break;

                    case 8:
                        player.Weap5ChargeRate = item.Recharge;
                        break;
                    }
                }
                // Check for muns
                if (to >= 9 && to <= 11 && item.Slot == 23)
                {
                    inv.Slot = to;
                }
                // Check for armor
                if (to >= 13 && to <= 20 && item.Slot == 21)
                {
                    inv.Slot = to;
                }
            }
            ServerTcp.SendInventory(connectionId);
        }