示例#1
0
        //아이템 교환 (아이템 <-> 아이템)      //#### 이거 잘 되는지 봐야됨 어렵다
        public void Switch(SlotItem selectedItem, SlotItem targetItem)
        {
            // 스위칭할때 변경사항
            // 1. 내용물(아이템정보) 변경
            // 2. 인덱스 위치 변경
            // 3. Tab 위치 변경

            int originIndex = selectedItem.Index;
            int targetIndex = targetItem.Index;

            // 1. 아이템 정보 스위치 ( Itemtable 변경 )
            // 인덱서 사용 public SlotItem this[int itemIndex]
            selectedItem.Tab[originIndex] = targetItem;
            targetItem.Tab[targetIndex]   = selectedItem;

            // 2. 인덱스 위치 스위치
            selectedItem.Index = targetIndex;
            targetItem.Index   = originIndex;

            // 3. Tab 위치 변경
            InventoryTab originTab = selectedItem.Tab;
            InventoryTab targetTab = targetItem.Tab;

            targetItem.Tab   = originTab;
            selectedItem.Tab = targetTab;

            OnItemSwitched?.Invoke(selectedItem, targetItem);
        }
示例#2
0
 private void UserControl_MouseUp(object sender, MouseButtonEventArgs e)
 {
     if (Keyboard.Modifiers.HasFlag(ModifierKeys.Control) && this.DataContext is InventoryItem ii)
     {
         InventoryTab.RunItemsRoll20Integration(ii);
         e.Handled = true;
     }
 }
示例#3
0
        // Loads a Inventory Tab
        public static void LoadInventoryTab(GameSession session, InventoryTab tab)
        {
            Inventory inventory = session.Player.Inventory;

            session.Send(ItemInventoryPacket.ResetTab(tab));
            session.Send(ItemInventoryPacket.LoadTab(tab, inventory.ExtraSize[tab]));
            session.Send(ItemInventoryPacket.LoadItem(inventory.Items.Values.Where(x => x.InventoryTab == tab).ToList()));
        }
示例#4
0
        public short Search(InventoryTab tab, int ItemID)
        {
            switch (tab)
            {
            case InventoryTab.EQUIP:
                foreach (short key in EquipInventory.Keys)
                {
                    if (EquipInventory[key].Id == ItemID)
                    {
                        return(EquipInventory[key].Slot);
                    }
                }
                return(-1);

            case InventoryTab.USE:
                foreach (short key in UseInventory.Keys)
                {
                    if (UseInventory[key].Id == ItemID)
                    {
                        return(UseInventory[key].Slot);
                    }
                }
                return(-1);

            case InventoryTab.ETC:
                foreach (short key in EtcInventory.Keys)
                {
                    if (EtcInventory[key].Id == ItemID)
                    {
                        return(EtcInventory[key].Slot);
                    }
                }
                return(-1);

            case InventoryTab.SETUP:
                foreach (short key in SetupInventory.Keys)
                {
                    if (SetupInventory[key].Id == ItemID)
                    {
                        return(SetupInventory[key].Slot);
                    }
                }
                return(-1);

            case InventoryTab.CASH:
                foreach (short key in CashInventory.Keys)
                {
                    if (CashInventory[key].Id == ItemID)
                    {
                        return(CashInventory[key].Slot);
                    }
                }
                return(-1);

            default:
                return(-1);
            }
        }
示例#5
0
    public static PacketWriter ResetTab(InventoryTab tab)
    {
        PacketWriter pWriter = PacketWriter.Of(SendOp.ItemInventory);

        pWriter.Write(InventoryMode.ResetTab);
        pWriter.WriteInt((int)tab);  // index

        return(pWriter);
    }
 public void hasClickedTab(InventoryTab tab)
 {
     for (int i = 0; i < tabs.Length; i++)
     {
         tabs[i].GetComponent <Image>().color = Tools.hexColor(0x6CB95D);
     }
     tabs[tab.gameObject.transform.GetSiblingIndex()].GetComponent <Image>().color = Tools.hexColor(0x53A543);
     Inventory.activeCanvas = tab.gameObject.transform.GetSiblingIndex();
 }
        public static Packet ResetTab(InventoryTab tab)
        {
            PacketWriter pWriter = PacketWriter.Of(SendOp.ITEM_INVENTORY);

            pWriter.WriteByte(0x0D);
            pWriter.WriteInt((int)tab);  // index

            return(pWriter);
        }
示例#8
0
 public void hasClickedTab(InventoryTab tab)
 {
     for (int i = 0; i < tabs.Count; i++)
     {
         tabs[i].GetComponent <Image>().color = Tools.hexColor(0x6CB95D);
         Inventory.activeCanvas = i;
     }
     tabs[tabs.IndexOf(tab)].GetComponent <Image>().color = Tools.hexColor(0x53A543);
 }
        private void SetupTab(InventoryTab tab, string tabName)
        {
            UXCheckbox element = base.GetElement <UXCheckbox>(tabName);

            if (element != null)
            {
                this.SetupTab(tab, element);
            }
        }
        public static Packet LoadTab(InventoryTab tab)
        {
            PacketWriter pWriter = PacketWriter.Of(SendOp.ITEM_INVENTORY);

            pWriter.WriteByte(0x0E);
            pWriter.WriteByte((byte)tab);
            pWriter.WriteInt();

            return(pWriter);
        }
示例#11
0
    public static PacketWriter LoadTab(InventoryTab tab, short extraSlots)
    {
        PacketWriter pWriter = PacketWriter.Of(SendOp.ItemInventory);

        pWriter.Write(InventoryMode.LoadTab);
        pWriter.WriteByte((byte)tab);
        pWriter.WriteInt(extraSlots);

        return(pWriter);
    }
示例#12
0
        public static Packet LoadTab(InventoryTab tab, short extraSlots)
        {
            PacketWriter pWriter = PacketWriter.Of(SendOp.ITEM_INVENTORY);

            pWriter.WriteEnum(InventoryMode.LoadTab);
            pWriter.WriteByte((byte)tab);
            pWriter.WriteInt(extraSlots);

            return(pWriter);
        }
示例#13
0
        private bool RemoveInternal(InventoryTab tab, short slot, out Item item)
        {
            if (!GetSlots(tab).TryGetValue(slot, out long uid))
            {
                item = null;
                return(false);
            }

            return(RemoveInternal(uid, out item));
        }
示例#14
0
        public void OpenIfNot(InventoryTab tab)
        {
            Tab foundtab = StupidTabLookup(tab);

            if (foundtab != activeTab)
            {
                //activeTab.HideContent();
                //activeTab.toggle.isOn = false;
                foundtab.toggle.isOn = true;
            }
        }
示例#15
0
        //충동시 아이템 획득
        private void OnTriggerEnter(Collider other)
        {
            InventoryTab inventoryTab = null;

            switch (majorType)
            {
            case MajorTypeEnum.CommonItem:
            {
                // 깊은 복사 & 수정
                SlotItem item = ItemData.CommonItemClone(index);

                int dropCount = UnityEngine.Random.Range((int)dropAmountRange.x, (int)dropAmountRange.y + 1);
                item.Count = dropCount;

                //아이템이 먹어지는 탭 지정
                inventoryTab = TabManager.GetTab(0);
                inventoryTab.Add(item, true);
                break;
            }

            case MajorTypeEnum.ConsumItem:
            {
                SlotItem item = ItemData.ConsumItemClone(index);

                int dropCount = UnityEngine.Random.Range((int)dropAmountRange.x, (int)dropAmountRange.y + 1);
                item.Count = dropCount;

                inventoryTab = TabManager.GetTab(0);
                inventoryTab.Add(item, true);
                break;
            }

            case MajorTypeEnum.EquipmentItem:
            {
                SlotItem item = ItemData.EquipmentItemClone(index);

                inventoryTab = TabManager.GetTab(0);
                inventoryTab.Add(item, true);
                break;
            }

            case MajorTypeEnum.ImmediateItem:
            {
                int           dropAmount = UnityEngine.Random.Range((int)dropAmountRange.x, (int)dropAmountRange.y + 1);
                ImmediateItem item       = ItemData.ImmediateClone(index);
                item.UseEvent.Invoke(dropAmount);
                break;
            }
            }

            SlotManager.RefreshAll();           //#### 아이템 먹을때는 인벤토리 켜져있을때만 새로고침하면됨
            Destroy(this.gameObject);
        }
示例#16
0
        public void AutoAdd(GameSession session, InventoryTab inventoryTab, int rarityType)
        {
            Dictionary <long, Item> items = session.Player.Inventory.Items;

            foreach (KeyValuePair <long, Item> item in items)
            {
                if (item.Value.InventoryTab != inventoryTab || item.Value.Rarity > rarityType || !item.Value.EnableBreak)
                {
                    continue;
                }
                DismantleAdd(session, -1, item.Value.Uid, item.Value.Amount);
            }
        }
示例#17
0
        public static byte[] DropItem(InventoryTab tab, byte slot, short amount)
        {
            var pw = new PacketWriter(SendOps.DROP_ITEM);

            pw.Timestamp();
            pw.WriteByte((byte)tab);
            pw.WriteByte(slot);
            //pw.WriteInt(1);
            pw.WriteZero(3);
            pw.WriteShort(amount);

            return(pw.ToArray());
        }
示例#18
0
        public static void ExpandInventory(GameSession session, InventoryTab tab)
        {
            Inventory inventory       = session.Player.Inventory;
            long      meretPrice      = 390;
            short     expansionAmount = 6;

            if (session.Player.Account.RemoveMerets(meretPrice))
            {
                inventory.ExtraSize[tab] += expansionAmount;
                session.Send(ItemInventoryPacket.LoadTab(tab, inventory.ExtraSize[tab]));
                session.Send(ItemInventoryPacket.Expand());
            }
        }
示例#19
0
    public void AutoAdd(GameSession session, InventoryTab inventoryTab, int rarityType)
    {
        Dictionary <long, Item> items = session.Player.Inventory.Items;

        foreach ((long uid, Item item) in items)
        {
            if (item.InventoryTab != inventoryTab || item.Rarity > rarityType || !item.EnableBreak || Slots.Any(x => x != null && x.Item1 == uid))
            {
                continue;
            }

            DismantleAdd(session, -1, item.Uid, item.Amount);
        }
    }
示例#20
0
        public Dictionary <ItemSlot, Item> GetEquippedInventory(InventoryTab tab)
        {
            switch (tab)
            {
            case InventoryTab.Gear:
                return(Equips);

            case InventoryTab.Outfit:
                return(Cosmetics);

            default:
                break;
            }
            return(null);
        }
示例#21
0
        public void Sort(InventoryTab tab)
        {
            // Get all items in tab and sort by Id
            Dictionary <short, long> slots = GetSlots(tab);
            List <Item> tabItems           = slots.Select(kvp => Items[kvp.Value]).ToList();

            tabItems.Sort((x, y) => x.Id.CompareTo(y.Id));

            // Update the slot mapping
            slots.Clear();
            for (short i = 0; i < tabItems.Count; i++)
            {
                tabItems[i].Slot = i;
                slots[i]         = tabItems[i].Uid;
            }
        }
        private void RunItemR20(object sender, RoutedEventArgs e)
        {
            InventoryItem ii = sender as InventoryItem;

            if (sender is Button && this.Inventory.SelectedItems != null && this.Inventory.SelectedItems.Count > 0)
            {
                ii = (InventoryItem)this.Inventory.SelectedItems[0];
            }

            if (ii == null || !R20WSServer.Connected)
            {
                return;
            }

            InventoryTab.RunItemsRoll20Integration(ii);
        }
        private static void HandleAutoAdd(GameSession session, PacketReader packet)
        {
            InventoryTab            inventoryTab = (InventoryTab)packet.ReadByte();
            byte                    rarityType   = packet.ReadByte();
            Player                  player       = session.Player;
            Dictionary <long, Item> items        = player.Inventory.Items;

            foreach (KeyValuePair <long, Item> item in items)
            {
                if (item.Value.InventoryTab != inventoryTab || item.Value.Rarity > rarityType || !item.Value.EnableBreak)
                {
                    continue;
                }
                DismantleAdd(session, -1, item.Value.Uid, item.Value.Amount);
            }
        }
        private void Inventory_PreviewMouseMove(object sender, MouseEventArgs e)
        {
            Point  mousePos = Mouse.GetPosition(Application.Current.MainWindow);
            Vector diff     = this.startPoint - mousePos;

            if (e.LeftButton == MouseButtonState.Pressed && ((Math.Abs(diff.X) > SystemParameters.MinimumHorizontalDragDistance) || Math.Abs(diff.Y) > SystemParameters.MinimumVerticalDragDistance))
            {
                ListView     listView     = sender as ListView;
                ListViewItem listViewItem = InventoryTab.FindAnchestor <ListViewItem>((DependencyObject)e.OriginalSource);
                if (listViewItem != null && listViewItem.IsSelected)
                {
                    object     contact  = listView.ItemContainerGenerator.ItemFromContainer(listViewItem);
                    DataObject dragData = new DataObject("InventoryItem", new Tuple <object, object, ICollectionView>(contact, this.OwnerItem, this.LocalSource.View));
                    DragDrop.DoDragDrop(listViewItem, dragData, DragDropEffects.Move);
                }
            }
        }
示例#25
0
 protected virtual void Dispose(bool disposing)
 {
     if (!disposedValue)
     {
         if (disposing)
         {
             ConfigTab?.Dispose();
             GemsTab?.Dispose();
             PortalsTab?.Dispose();
             AdvertisementsTab?.Dispose();
             InventoryTab?.Dispose();
             EquipmentTab?.Dispose();
             View?.Dispose();
         }
         disposedValue = true;
     }
 }
示例#26
0
    public static PacketWriter LoadItemsToTab(InventoryTab tab, IReadOnlyCollection <Item> items)
    {
        PacketWriter pWriter = PacketWriter.Of(SendOp.ItemInventory);

        pWriter.Write(InventoryMode.LoadItemsToTab);
        pWriter.WriteInt((int)tab);
        pWriter.WriteShort((short)items.Count);
        foreach (Item item in items)
        {
            pWriter.WriteInt(item.Id);
            pWriter.WriteLong(item.Uid);
            pWriter.WriteShort(item.Slot);
            pWriter.WriteInt(item.Rarity);
            pWriter.WriteItem(item);
        }

        return(pWriter);
    }
示例#27
0
        private bool CanHold(int itemId, int amount, InventoryTab tab)
        {
            if (GetFreeSlots(tab) > 0)
            {
                return(true);
            }

            foreach (Item i in Items.Values.Where(x => x.InventoryTab == tab && x.Id == itemId && x.StackLimit > 0))
            {
                int available = i.StackLimit - i.Amount;
                amount -= available;
                if (amount <= 0)
                {
                    return(true);
                }
            }
            return(false);
        }
        public static Packet LoadItemsToTab(InventoryTab tab, ICollection <Item> items)
        {
            PacketWriter pWriter = PacketWriter.Of(SendOp.ITEM_INVENTORY);

            pWriter.WriteByte(0x0A);
            pWriter.WriteInt((int)tab);
            pWriter.WriteShort((short)items.Count);
            foreach (Item item in items)
            {
                pWriter.WriteInt(item.Id);
                pWriter.WriteLong(item.Uid);
                pWriter.WriteShort(item.Slot);
                pWriter.WriteInt(item.Rarity);
                pWriter.WriteItem(item);
            }

            return(pWriter);
        }
示例#29
0
        public void SetTab(InventoryTab tab)
        {
            this.curTab = tab;
            if (!base.IsLoaded())
            {
                return;
            }
            int i     = 0;
            int count = this.tabs.Count;

            while (i < count)
            {
                UXCheckbox uXCheckbox = this.tabs[i];
                uXCheckbox.Selected = (this.curTab == (InventoryTab)uXCheckbox.Tag);
                i++;
            }
            this.SetupCurTabElements();
        }
示例#30
0
        private void OnTabCheckboxSelected(UXCheckbox checkbox, bool selected)
        {
            InventoryTab inventoryTab = (InventoryTab)checkbox.Tag;

            if (!selected)
            {
                return;
            }
            if (inventoryTab != this.curTab)
            {
                if (this.curTab == InventoryTab.Crate)
                {
                    this.prefs.SetPref("crtInvLastViewed", ServerTime.Time.ToString());
                    this.crateTabLastViewedTime = ServerTime.Time;
                }
                this.SetTab(inventoryTab);
            }
        }