Пример #1
0
 private static void UnEquipItem(Player player, ref MsgItem packet)
 {
     if (player.Equipment.Unequip((MsgItemPosition)packet.Param))
     {
         player.Send(packet);
     }
 }
Пример #2
0
        private static void BuyItem(Player player, ref MsgItem packet)
        {
            if (Collections.Items.TryGetValue(packet.Param, out var item))
            {
                if (GameWorld.Find(packet.UnqiueId, out Npc shop))
                {
                    if (shop.Inventory == null)
                    {
                        Output.WriteLine($"Shop {shop.UniqueId} null.");
                        return;
                    }
                    if (!shop.Inventory.HasItem(item.ItemId))
                    {
                        Output.WriteLine($"Item {item.ItemId} not found in Shop {shop.UniqueId}");
                        return;
                    }

                    if (player.Money >= item.PriceBaseline)
                    {
                        if (player.Inventory.Count < 40)
                        {
                            var cloned = CloneChamber.Clone(item);
                            cloned.UniqueId = YiCore.Random.Next(1000, 100000);
                            player.Inventory.Items.AddOrUpdate(cloned.UniqueId, cloned);
                            player.Money -= cloned.PriceBaseline;
                            player.Send(new MsgItemInformation(cloned, MsgItemPosition.Inventory));
                        }
                    }
                }
            }
        }
Пример #3
0
 private static void BuyBoothItem(Player player, ref MsgItem packet)
 {
     if (BoothSystem.Buy(player, packet.Param, packet.UnqiueId))
     {
         player.Send(packet);
     }
 }
Пример #4
0
 private static void DropItem(Player player, ref MsgItem packet)
 {
     if (player.Inventory.Items.TryRemove(packet.UnqiueId, out var found))
     {
         FloorItemSystem.Drop(null, player, found);
         player.Send(packet);
     }
 }
Пример #5
0
 private static void DropGold(Player player, ref MsgItem packet)
 {
     if (player.Money >= packet.UnqiueId)
     {
         FloorItemSystem.DropMoney(null, player, packet.UnqiueId);
     }
     player.Send(packet);
 }
Пример #6
0
        private static void SellItem(Player player, ref MsgItem packet)
        {
            var found = player.Inventory.FindByUID(packet.Param);

            if (found != null)
            {
                if (player.Inventory.Items.TryRemove(found.UniqueId, out found))
                {
                    player.Money += found.PriceBaseline;
                }
            }
            packet.UnqiueId = packet.Param;
            packet.Param    = 0;
            packet.Type     = MsgItemType.RemoveInventory;
            player.Send(packet);
        }
Пример #7
0
        private static void EquipItem(Player player, ref MsgItem packet)
        {
            var found = player.Inventory.FindByUID(packet.UnqiueId);

            if (found != null)
            {
                if (ScriptEngine.Scripts.TryGetValue(ScriptType.ItemUsage, out var sc) && sc.Execute(player, found))
                {
                    return;
                }

                Message.SendTo(player, $"Item {found.ItemId} has no script - Equipping it instead at {(MsgItemPosition)packet.Param}", MsgTextType.Action);

                if (player.Equipment.Equip(found, (MsgItemPosition)packet.Param))
                {
                    packet.Type = MsgItemType.SetEquipPosition;
                    player.Send(packet);
                }
            }
        }
Пример #8
0
        private static void UpgradeItemEnchant(Player player, ref MsgItem packet)
        {
            var mainItem = player.Inventory.FindByUID(packet.UnqiueId);

            var subItem = player.Inventory.FindByUID(packet.Param);

            if (mainItem != null && subItem != null)
            {
                if (subItem.ItemId / 1000 == 700)//gem id const
                {
                    var num = GetGemBlessWorth(subItem.ItemId);
                    if (num > mainItem.Enchant)
                    {
                        mainItem.Enchant = (byte)num;
                    }

                    player.Inventory.RemoveItem(mainItem);                     //remove the item to update
                    player.Inventory.RemoveItem(subItem);                      //remove the db before attempting
                    player.Inventory.AddOrUpdate(mainItem.UniqueId, mainItem); //RETURN THE ITEM TO THE PLAYER REGARDLESS OF UPGRADE
                    player.Send(new MsgItemInformation(mainItem, MsgItemPosition.Inventory));
                }
            }
        }
Пример #9
0
        private static void UpgradeDragonball(Player player, ref MsgItem packet)
        {
            var mainItem = player.Inventory.FindByUID(packet.UnqiueId); //item to upgrade
            var subItem  = player.Inventory.FindByUID(packet.Param);    //db

            if (mainItem != null && subItem != null)
            {
                if (subItem.ItemId == 1088000)
                {
                    var itemQuality = (byte)(mainItem.ItemId % 10);
                    if (itemQuality >= 3 && itemQuality < 9)
                    {
                        player.Inventory.RemoveItem(mainItem); //remove the item to update
                        player.Inventory.RemoveItem(subItem);  //remove the db before attempting
                        var lucky = true;
                        var num   = YiCore.Random.Next(5);
                        if (itemQuality < 6)
                        {
                            lucky = num <= 90;
                        }
                        else if (itemQuality == 6)
                        {
                            lucky = num <= 75;
                        }
                        else if (itemQuality == 7)
                        {
                            lucky = num <= 50;
                        }
                        else if (itemQuality == 8)
                        {
                            lucky = num <= 35;
                        }

                        if (num == 1 && mainItem.Gem1 == 0)
                        {
                            mainItem.Gem1 = 255;
                        }
                        else if (num == 1 && YiCore.Random.Next(3) == 3)
                        {
                            mainItem.Gem2 = 255;
                        }

                        if (lucky)
                        {
                            Message.SendTo(player, "You have successfully upgraded your item\'s quality!", MsgTextType.Action);
                            if (itemQuality < 3)
                            {
                                mainItem.ItemId += 2;                 //so it goes straight to refined
                            }
                            mainItem.ItemId++;
                        }
                        else
                        {
                            Message.SendTo(player, "You have failed to upgrade your item\'s quality.", MsgTextType.Action);
                        }

                        player.Inventory.AddOrUpdate(mainItem.UniqueId, mainItem);//RETURN THE ITEM TO THE PLAYER REGARDLESS OF UPGRADE
                        player.Send(new MsgItemInformation(mainItem, MsgItemPosition.Inventory));
                    }
                    else
                    {
                        Message.SendTo(player, "Invalid items were attempted.", MsgTextType.Action);
                    }
                }
            }
        }
Пример #10
0
        private static void UpgradeMeteor(Player player, ref MsgItem packet)
        {
            var mainItem = player.Inventory.FindByUID(packet.UnqiueId); //item to upgrade
            var subItem  = player.Inventory.FindByUID(packet.Param);    //met

            if (mainItem != null && subItem != null)
            {
                var jmp      = 0;
                var itemId   = mainItem.ItemId;
                var itemType = itemId / 10000;
CheckValidID:
                switch (itemType)
                {
                case 11:     // head
                case 12:     // neck
                case 15:     // ring
                case 13:     // armor
                case 16:     // boots
                    itemId += 10;
                    break;

                default:
                    if (itemType >= 40 && itemType <= 61)         // weapons
                    {
                        itemId += 10;
                    }
                    break;
                }
                if (itemId != mainItem.ItemId)
                {
                    if (Collections.Items.ContainsKey(itemId))
                    {
                        var itemQuality = (byte)(mainItem.ItemId % 10);
                        if (itemQuality >= 3 && itemQuality <= 9)
                        {
                            var lucky = false;
                            var num   = YiCore.Random.Next(1, 1000);
                            if (itemQuality < 6)
                            {
                                lucky = num <= 950;
                            }
                            else if (itemQuality == 6)
                            {
                                lucky = num <= 880;
                            }
                            else if (itemQuality == 7)
                            {
                                lucky = num <= 750;
                            }
                            else if (itemQuality >= 8)
                            {
                                lucky = num <= 670;
                            }

                            if (lucky)
                            {
                                Message.SendTo(player, "You have successfully upgraded your item\'s level!", MsgTextType.Action);
                                if (num < 10 && mainItem.Gem1 == 0)
                                {
                                    mainItem.Gem1 = 255;
                                }
                                else if (num == 1 && mainItem.Gem2 == 0)
                                {
                                    mainItem.Gem2 = 255;
                                }

                                mainItem.ItemId = itemId;
                                player.Inventory.RemoveItem(mainItem);                     //remove the main item
                                player.Inventory.RemoveItem(subItem);                      //remove the met
                                player.Inventory.AddOrUpdate(mainItem.UniqueId, mainItem); //update the new item
                                player.Send(new MsgItemInformation(mainItem, MsgItemPosition.Inventory));
                            }
                            else
                            {
                                Message.SendTo(player, "Your item failed to upgrade.", MsgTextType.Action);
                            }
                        }
                        else
                        {
                            Output.WriteLine("The item quality has recieved an else in MsgItem.cs with a value of " + itemQuality);
                        }
                    }
                    else if (jmp < 3)
                    {
                        jmp++;
                        goto CheckValidID;
                    }
                }
                else
                {
                    Message.SendTo(player, "You can\'t upgrade the level of this item.", MsgTextType.Action);
                }
            }
            else
            {
                Message.SendTo(player, "Invalid items were attempted.", MsgTextType.Action);
            }
        }
Пример #11
0
 private static void Ping(Player player, ref MsgItem packet)
 {
     player.ForceSend(packet, packet.Size);
     player.ForceSend(MsgTick.Create(player), (ushort)sizeof(MsgTick));
 }
Пример #12
0
 private static void AddItemToShop(Player player, ref MsgItem packet)
 {
     BoothSystem.Add(player, packet.UnqiueId, packet.Param);
     ScreenSystem.Send(player, packet, true);
 }
Пример #13
0
 private static void RemoveItemFromShop(Player player, ref MsgItem packet)
 {
     BoothSystem.Remove(player, packet.UnqiueId);
     ScreenSystem.Send(player, packet, true);
 }
Пример #14
0
        private static void RepairItem(Player player, ref MsgItem packet)
        {
            var found = player.Inventory.FindByUID(packet.UnqiueId);

            if (found == null)
            {
                return;
            }

            if (found.CurrentDurability >= found.MaximumDurability)
            {
                return;
            }

            if (Collections.Items.TryGetValue(found.ItemId, out var original))
            {
                var delta = Math.Max(0, found.MaximumDurability - found.CurrentDurability);
                var cost  = (double)original.PriceBaseline * delta / found.MaximumDurability;

                switch (found.ItemId % 10)
                {
                case 9:
                    cost *= 1.125;
                    break;

                case 8:
                    cost *= 0.975;
                    break;

                case 7:
                    cost *= 0.9;
                    break;

                case 6:
                    cost *= 0.825;
                    break;

                default:
                    cost *= 0.75;
                    break;
                }

                cost = Math.Max(0, Math.Round(cost, 0));

                if (player.Money >= cost)
                {
                    player.Money -= (int)cost;
                    Message.SendTo(player, $"You paid: {cost}.", MsgTextType.Action);
                }
                else
                {
                    Message.SendTo(player, $"You don't have enough money (Cost: {cost}).", MsgTextType.Action);
                    return;
                }
            }

            found.CurrentDurability = found.MaximumDurability;
            var pack = new MsgItemInformation(found, MsgItemInfoAction.Update);

            player.ForceSend(pack, pack.Size);
        }