Exemplo n.º 1
0
    public BagData GetBagDataFromBag(Bag bag, BagData bagData)
    {
        for (int i = 0; i < bag.Slots.Count; i++)
        {
            if (!bag.Slots[i].IsEmpty)
            {
                Item     item     = bag.Slots[i].Item;
                ItemData itemData = new ItemData();

                itemData.Set(item.Name, item.Count, i);         //名子數量位置

                if (item is Bag)
                {
                    Bag itemBag = item as Bag;
                    itemData.SetBagData(new BagData(itemBag.Name, 0, new List <ItemData>()));

                    BagData itemBagData = GetBagDataFromBag(itemBag, itemData.BagData);
                }

                bagData.ItemDatas.Add(itemData);
            }
        }

        return(bagData);
    }
Exemplo n.º 2
0
        static public void UpdateBag(ArrayList list)
        {
            datas = new ArrayList();
            datas = list;

            BagData.SaveData("BagDatas.sav");
        }
Exemplo n.º 3
0
    /// <summary>
    /// 拾取道具,向背包内添加物品
    /// </summary>
    /// <param name="item">新增物品的数据</param>
    public static void AddItem(BagData item)
    {
        //如果背包已经满了
        if (BagCtrl.bagItemAcount <= BagsList.FindAll(e => e.GetComponent <ItemCtrl>().BagData.ItemPositon == TagType.BagTag && e.GetComponent <ItemCtrl>().BagData.ResourceID != null).Count)
        {
            return;
        }
        //指定物品添加的位置
        if (item.ItemPositon == null)
        {
            item.ItemPositon = TagType.BagTag;
        }
        //从背包中找到第一个空格进行赋值
        int i = 0;

        foreach (var lastitem in BagsList)
        {
            if (lastitem.GetComponent <ItemCtrl>().BagData.ItemPositon == TagType.BagTag && lastitem.GetComponent <ItemCtrl>().BagData.ResourceID == null)//找到数据层背包里第一个空白的物体进行赋值
            {
                BagData[i] = item;
                lastitem.GetComponent <ItemCtrl>().BagData = BagData[i];
                lastitem.GetComponent <ItemCtrl>().LoadTextrue();
                break;
            }
            i++;
        }
    }
Exemplo n.º 4
0
    public Bag GetBagFromBagData(Bag bag, BagData bagData)
    {
        Inventory  inventory  = Inventory.Instance;
        BagSetting bagSetting = bag.ItemSetting as BagSetting;

        for (int i = 0; i < bagSetting.SlotCount; i++)
        {
            Slot slot = Instantiate(inventory.slotItmePrefab, bag.transform).GetComponent <Slot>();
            bag.Slots.Add(slot);
        }

        foreach (ItemData itemData in bagData.ItemDatas)
        {
            ItemSetting itemSetting = GetItemFromDataBase(itemData.Name);

            if (itemSetting is BagSetting)
            {
                Bag itemBag = Instantiate(inventory.bagItemPrefab).GetComponent <Bag>();
                itemBag.ItemSetting            = GetItemFromDataBase(itemData.BagData.Name);
                itemBag                        = GetBagFromBagData(itemBag, itemData.BagData);
                bag.Slots[itemData.Index].Item = itemBag;
                itemBag.transform.SetParent(bag.Slots[itemData.Index].transform);
            }
            else
            {
                Item item = Instantiate(inventory.itemPrefab).GetComponent <Item>();
                item.ItemSetting = itemSetting;
                item.Count       = itemData.Count;
                bag.Slots[itemData.Index].Item = item;
                item.transform.SetParent(bag.Slots[itemData.Index].transform);
            }
        }

        return(bag);
    }
Exemplo n.º 5
0
    static public BagData Create()
    {
        BagData data = new BagData();

        data.InitDefault();
        return(data);
    }
Exemplo n.º 6
0
 public void PopDetritusZoom(BagData bag, bool show)
 {
     Debug.Log("Popup");
     bubbleZoom.gameObject.SetActive(show);
     bagContent.gameObject.SetActive(show);
     bagContent.sprite = bag.sprite;
     AcceptButton.gameObject.SetActive(show);
     RefuseButton.gameObject.SetActive(show);
 }
Exemplo n.º 7
0
    /// <summary>
    /// 互换物品的真正方法
    /// </summary>
    /// <param name="item1">最终被换的物品</param>
    /// <param name="item2">开始换的物品</param>
    /// <returns></returns>
    public static bool ExchangeItemFunc(GameObject item1, GameObject item2)
    {
        try
        {
            //装备栏原则上不会更换
            if (item1.GetComponent <ItemCtrl>().BagData.ItemPositon == TagType.EquipTag && item1.GetComponent <ItemCtrl>().BagData.ItemPositon == TagType.EquipTag)
            {
                if (item1.GetComponent <ItemCtrl>().BagData.ItemType == item2.GetComponent <ItemCtrl>().BagData.ItemType)
                {
                    //不做任何操作,继续交换逻辑
                }
                else
                {
                    return(false);
                }
            }

            int i = BagsList.FindIndex(e => e.Equals(item1));
            int j = BagsList.FindIndex(e => e.Equals(item2));


            if (item1.GetComponent <ItemCtrl>().BagData == BagData[i] && item2.GetComponent <ItemCtrl>().BagData == BagData[j]) //防止中间赋值导致不一致
            {
                if (item1.GetComponent <ItemCtrl>().BagData.ItemPositon != item2.GetComponent <ItemCtrl>().BagData.ItemPositon) //如果是不一样的位置互换物品
                {
                    if (item1.GetComponent <ItemCtrl>().BagData.ItemType != item2.GetComponent <ItemCtrl>().BagData.ItemType)   //如果物品的类型不一致就不能互换
                    {
                        return(false);
                    }
                }
                //开始互换物品
                BagData tempItem = BagData[i];

                BagData[i] = BagData[j];
                BagData[j] = tempItem;

                if (BagData[i].ItemPositon != BagData[j].ItemPositon)
                {
                    string tempItemPositon = BagData[i].ItemPositon;
                    BagData[i].ItemPositon = BagData[j].ItemPositon;
                    BagData[j].ItemPositon = tempItemPositon;
                }

                item1.GetComponent <ItemCtrl>().BagData = BagData[i];
                item2.GetComponent <ItemCtrl>().BagData = BagData[j];
                item1.GetComponent <ItemCtrl>().LoadTextrue();
                item2.GetComponent <ItemCtrl>().LoadTextrue();
            }
            return(true);
        }
        catch (System.Exception)
        {
            return(false);
        }
    }
Exemplo n.º 8
0
 /// <summary>
 /// Switchs the bag item.交换物品位置
 /// </summary>
 public void switchBagItem(BagData bagData1, BagData bagData2, ItemUI itemUI1, ItemUI itemUI2)
 {
     if (switchBagItemData != null)
     {
         switchBagItemData(bagData1, bagData2);
     }
     if (switchBagItemUI != null)
     {
         switchBagItemUI(itemUI1, itemUI2);
     }
 }
Exemplo n.º 9
0
    public void SetActiveBag(BagData Bag)
    {
        if (ActiveBag != Bag)
        {
            ActiveBag = Bag;

            UpdateActiveList();

            Selection.GetComponent<Inventory_Selector>().BagSwitch(Bag);
        }
    }
 //Return inventory that can take item (main one first, then bag)
 public InventoryData GetValidInventory(ItemData item, int quantity)
 {
     if (InventoryData.CanTakeItem(item.id, quantity))
     {
         return(InventoryData);
     }
     else if (BagData != null && BagData.CanTakeItem(item.id, quantity))
     {
         return(BagData);
     }
     return(null);
 }
Exemplo n.º 11
0
 /// <summary>
 /// 删除相应位置的物品,在移除背包时使用该方法
 /// </summary>
 /// <param name="Gameobj"></param>
 public static void DeleteItem(GameObject Gameobj)
 {
     for (int i = 0; i < BagData.Count; i++)
     {
         if (Gameobj.GetComponent <ItemCtrl>().BagData.Equals(BagData[i]))
         {
             BagData[i]             = new BagData();
             BagData[i].ItemPositon = Gameobj.GetComponent <ItemCtrl>().BagData.ItemPositon;
             Gameobj.GetComponent <ItemCtrl>().BagData = BagData[i];
             Gameobj.GetComponent <ItemCtrl>().LoadTextrue();
         }
     }
 }
Exemplo n.º 12
0
    static public void FavItem(Item_Item Item)
    {
        ItemData ItemData = ItemData.GetData(Item);
        BagData  BagData  = BagData.GetBag(Item_Category.none);

        if (BagData.List.Contains(ItemData))
        {
            BagData.List.Remove(ItemData);
        }
        else
        {
            BagData.List.Add(ItemData);
        }
    }
Exemplo n.º 13
0
    /// <summary>
    /// 初始化数据
    /// </summary>
    public void InitData()
    {
        //初始化人物的数据
        PlayerData playerData = DataBase.Instance.GetPlayerData();

        PlayerData.InitForSerialize(playerData);

        //初始化背包数据
        BagData bagData = DataBase.Instance.GetBagData();

        BagData.InitForSerialize(bagData);

        //初始化商店数据,暂时使用所有装备模板代替(实际上应该只有一部分,不可能商店能卖所有的装备)
        ShopData.Instance.Items = DataBase.Instance.GetEquipmentTemplate();
    }
        public void UnequipItem(EquipSlot eslot)
        {
            InventoryItemData invdata = EquipData.GetEquippedItem(eslot);

            if (invdata != null && InventoryData.CanTakeItem(invdata.item_id, 1))
            {
                EquipData.UnequipItem(eslot);
                InventoryData.AddItem(invdata.item_id, 1, invdata.durability, invdata.uid);
            }
            else if (invdata != null && BagData != null && BagData.CanTakeItem(invdata.item_id, 1))
            {
                EquipData.UnequipItem(eslot);
                BagData.AddItem(invdata.item_id, 1, invdata.durability, invdata.uid);
            }
        }
 public InventoryItemData GetFirstItemInGroup(GroupData group)
 {
     if (InventoryData.HasItemInGroup(group))
     {
         return(InventoryData.GetFirstItemInGroup(group));
     }
     if (EquipData.HasItemInGroup(group))
     {
         return(EquipData.GetFirstItemInGroup(group));
     }
     if (BagData != null && BagData.HasItemInGroup(group))
     {
         return(BagData.GetFirstItemInGroup(group));
     }
     return(null);
 }
Exemplo n.º 16
0
    public void SaveInventory(int index)
    {
        Inventory      inventory = Inventory.Instance;
        List <BagData> bagDatas  = new List <BagData>();

        for (int i = 0; i < inventory.BagButtons.Length; i++)
        {
            if (inventory.BagButtons[i].Bag != null)
            {
                Bag     bag     = inventory.BagButtons[i].Bag;
                BagData bagData = new BagData(bag.Name, i, new List <ItemData>());

                bagDatas.Add(GetBagDataFromBag(bag, bagData));
            }
        }

        saveData.GameDatas[index].InventoryData.SetBagDatas(bagDatas);
    }
Exemplo n.º 17
0
    public void UpdateActiveList()
    {
        for (int i = 0; i < ContentList.transform.FindObjectsWithTag("ItemSlot").Count; i++)
        {
            Destroy(ContentList.transform.FindObjectsWithTag("ItemSlot")[i]);
        }

        if (ActiveBag == null)
        {
            ActiveBag = BagData.GetBag(Item_Category.Medicine);
        }

        //Spawn ItemSlots + add Items
        for (int i = 0; i < ActiveBag.List.Count; i++)
        {
            GameObject newInvSlot = Instantiate(InventorySlotPreFab, new Vector3(0, 0, 0), Quaternion.identity) as GameObject;
            newInvSlot.transform.SetParent(ContentList.transform);
            newInvSlot.GetComponent<InventorySlot>().AddItem(ActiveBag.List[i]);
        }
    }
Exemplo n.º 18
0
        // load data
        void LoadData()
        {
            bool dirty = false;

            Config.Settings.NullValueHandling = NullValueHandling.Include;
            try
            {
                data = Config.ReadObject <BagData>();
            }
            catch (Exception) { }
            dirty = CheckConfig();
            if (data.sharedBags == null)
            {
                dirty |= LoadDefaultConfig();
            }
            if (dirty)
            {
                SaveData();
            }
        }
 //Remove item directly from inventory, keeping its container
 public void UseItem(ItemData item, int quantity = 1)
 {
     if (item != null)
     {
         for (int i = 0; i < quantity; i++)
         {
             if (InventoryData.HasItem(item.id, 1))
             {
                 UseItem(InventoryData, item, 1);
             }
             else if (EquipData.HasItem(item.id, 1))
             {
                 UseItem(EquipData, item, 1);
             }
             else if (BagData != null && BagData.HasItem(item.id, 1))
             {
                 UseItem(BagData, item, 1);
             }
         }
     }
 }
 //Remove items of group directly from inventory, keeping its container
 public void UseItemInGroup(GroupData group, int quantity = 1)
 {
     if (group != null)
     {
         for (int i = 0; i < quantity; i++)
         {
             if (InventoryData.HasItemInGroup(group, 1))
             {
                 UseItemInGroup(InventoryData, group, 1);
             }
             else if (EquipData.HasItemInGroup(group, 1))
             {
                 UseItemInGroup(EquipData, group, 1);
             }
             else if (BagData != null && BagData.HasItemInGroup(group, 1))
             {
                 UseItemInGroup(BagData, group, 1);
             }
         }
     }
 }
Exemplo n.º 21
0
    public void BagSwitch(BagData BagData)
    {
        if (BagData.Category != ItemData.GetData(ActiveItem).Category)
        {
            int Index = Inventory.ReturnIntFromCategory(BagData.Category);

            if (CachedItems[Index] != Item_Item.none && Inventory.ContainsItem(CachedItems[Index]))
            {
                SelectItem(CachedItems[Index]);
            }

            else if (BagData.List.Count > 0)
            {
                SelectItem(BagData.List[0].Item);
            }

            else
            {
                ClearSelection();
            }
        }
    }
Exemplo n.º 22
0
 /// <summary>
 /// 是否是背包表
 /// </summary>
 /// <param 表名="tbName"></param>
 /// <param 数据阅读器="reader"></param>
 private void IsBag(SqliteDataReader reader)
 {
     while (reader.Read())
     {
         //获取读到内容中的字段,来保存对应的值
         int Bag_Grid       = reader.GetInt32(reader.GetOrdinal("Bag_Grid"));
         int Bag_Weapon     = reader.GetInt32(reader.GetOrdinal("Bag_Weapon"));
         int Bag_Equipment  = reader.GetInt32(reader.GetOrdinal("Bag_Equipment"));
         int Bag_Consumable = reader.GetInt32(reader.GetOrdinal("Bag_Consumable"));
         int Bag_Material   = reader.GetInt32(reader.GetOrdinal("Bag_Material"));
         //创建模型
         BagData bagData = new BagData
         {
             Bag_Grid       = Bag_Grid,
             Bag_Weapon     = Bag_Weapon,
             Bag_Equipment  = Bag_Equipment,
             Bag_Consumable = Bag_Consumable,
             Bag_Material   = Bag_Material,
         };
         //加入到数据库
         SQLiteManager.Instance.bagDataSource.Add(bagData.Bag_Grid, bagData);
     }
 }
Exemplo n.º 23
0
    public void ChooseRandomBag()
    {
        int bagIndex = Random.Range(0, availableBags.Count);

        bag = availableBags[bagIndex];
    }
Exemplo n.º 24
0
 public void SetBagData(BagData bagData)
 {
     this.bagData = bagData;
 }
 public int CountItemInGroup(GroupData group)
 {
     return(InventoryData.CountItemInGroup(group)
            + EquipData.CountItemInGroup(group)
            + (BagData != null ? BagData.CountItemInGroup(group) : 0));
 }
Exemplo n.º 26
0
 // Use this for initialization
 void Start()
 {
     BagData.LoadData("BagDatas.sav");
 }
 //Check both bag and inventory
 public bool CanTakeItem(ItemData item, int quantity = 1)
 {
     return(item != null && (InventoryData.CanTakeItem(item.id, quantity) ||
                             (BagData != null && BagData.CanTakeItem(item.id, quantity))));
 }
Exemplo n.º 28
0
 //虽然是单例,但是还是可以序列化创建到一个对象,提供一个方法使用序列化出来的对象对单例进行初始化
 public static void InitForSerialize(BagData bagData)
 {
     BagData.Instance = bagData;
     BagData.Instance.UpdatePanel();
 }
 public int CountItem(ItemData item)
 {
     return(InventoryData.CountItem(item.id)
            + EquipData.CountItem(item.id)
            + (BagData != null ? BagData.CountItem(item.id) : 0));
 }
 //Check inventory / bag
 public bool HasEmptySlot()
 {
     return(InventoryData.HasEmptySlot() ||
            (BagData != null && BagData.HasEmptySlot()));
 }