コード例 #1
0
    private static void HandleMountGem(GameSession session, PacketReader packet)
    {
        long equipItemUid = packet.ReadLong();
        long gemItemUid   = packet.ReadLong();
        byte slot         = packet.ReadByte();

        if (!session.Player.Inventory.Items.ContainsKey(equipItemUid))
        {
            session.Send(ItemSocketSystemPacket.Notice((int)ItemSocketSystemNotice.TargetIsNotInYourInventory));
            return;
        }

        if (!session.Player.Inventory.Items.ContainsKey(gemItemUid))
        {
            session.Send(ItemSocketSystemPacket.Notice((int)ItemSocketSystemNotice.ItemIsNotInYourInventory));
            return;
        }

        Item equipItem = session.Player.Inventory.Items[equipItemUid];
        Item gemItem   = session.Player.Inventory.Items[gemItemUid];

        if (!equipItem.Stats.GemSockets[slot].IsUnlocked)
        {
            return;
        }

        if (equipItem.Stats.GemSockets[slot].Gemstone != null)
        {
            return;
        }

        Gemstone gemstone = new()
        {
            Id         = gemItem.Id,
            IsLocked   = gemItem.IsLocked,
            UnlockTime = gemItem.UnlockTime
        };

        if (gemItem.OwnerCharacterId != 0)
        {
            gemstone.OwnerId   = gemItem.OwnerCharacterId;
            gemstone.OwnerName = gemItem.OwnerCharacterName;
        }

        equipItem.Stats.GemSockets[slot].Gemstone = gemstone;

        session.Player.Inventory.ConsumeItem(session, gemItem.Uid, 1);
        session.Send(ItemSocketSystemPacket.MountGem(equipItemUid, gemstone, slot));
    }