Пример #1
0
    private static void HandleRepackage(GameSession session, PacketReader packet)
    {
        long ribbonUid        = packet.ReadLong();
        long repackingItemUid = packet.ReadLong();

        Item ribbon        = session.Player.Inventory.Items.Values.FirstOrDefault(x => x.Uid == ribbonUid);
        Item repackingItem = session.Player.Inventory.Items.Values.FirstOrDefault(x => x.Uid == repackingItemUid);

        if (repackingItem == null || ribbon == null)
        {
            session.Send(ItemRepackagePacket.Notice((int)ItemRepackageNotice.ItemInvalid));
            return;
        }

        if (repackingItem.RemainingTrades != 0)
        {
            session.Send(ItemRepackagePacket.Notice((int)ItemRepackageNotice.CannotBePackaged));
        }

        int ribbonRequirementAmount = ItemMetadataStorage.GetRepackageConsumeCount(ribbon.Id);

        if (ribbonRequirementAmount > ribbon.Amount)
        {
            session.Send(ItemRepackagePacket.Notice((int)ItemRepackageNotice.CannotBePackaged));
            return;
        }

        if (!ItemRepackageMetadataStorage.ItemCanRepackage(ribbon.Function.Id, repackingItem.Level, repackingItem.Rarity))
        {
            session.Send(ItemRepackagePacket.Notice((int)ItemRepackageNotice.ItemInvalid));
            return;
        }

        repackingItem.RepackageCount -= 1;
        repackingItem.RemainingTrades++;

        session.Player.Inventory.ConsumeItem(session, ribbon.Uid, ribbonRequirementAmount);

        session.Send(ItemRepackagePacket.Repackage(repackingItem));
    }