public bool IsStoryCollectionReadyToCharge(StoryCollectionData collection)
        {
            bool hasCollectables = true;

            RavenhillResourceService resourceService = engine.GetService <IResourceService>().Cast <RavenhillResourceService>();
            PlayerService            playerService   = engine.GetService <IPlayerService>().Cast <PlayerService>();

            foreach (string collectableId in collection.collectables)
            {
                StoryCollectableData collectableData = resourceService.GetStoryCollectable(collectableId);
                int playerCount = playerService.GetItemCount(collectableData);
                if (playerCount <= 0)
                {
                    hasCollectables = false;
                    break;
                }
            }

            bool             hasCharger  = true;
            StoryChargerData chargerData = resourceService.GetStoryCharger(collection.chargerId);
            int playerChargerCount       = playerService.GetItemCount(chargerData);

            if (playerChargerCount <= 0)
            {
                hasCharger = false;
            }

            return(hasCollectables && hasCharger);
        }
        public bool IsCollectionReadyToCharge(CollectionData collection)
        {
            bool collectablesReady = true;

            RavenhillResourceService resourceService = engine.GetService <IResourceService>().Cast <RavenhillResourceService>();
            PlayerService            playerService   = engine.GetService <IPlayerService>().Cast <PlayerService>();

            foreach (string collectableId in collection.collectableIds)
            {
                CollectableData data        = resourceService.GetCollectable(collectableId);
                int             playerCount = playerService.GetItemCount(data);
                if (playerCount <= 0)
                {
                    collectablesReady = false;
                    break;
                }
            }

            bool chargersReady = true;

            foreach (var info in collection.chargers)
            {
                ChargerData data        = resourceService.GetCharger(info.id);
                int         playerCount = playerService.GetItemCount(data);
                if (playerCount < info.count)
                {
                    chargersReady = false;
                    break;
                }
            }

            return(collectablesReady && chargersReady);
        }
        //Algorithm of generation room drop...
        public List <InventoryItem> GenerateRoomDrop(RoomData roomData, RoomLevel roomLevel)
        {
            RavenhillResourceService resourceService = engine.GetService <IResourceService>() as RavenhillResourceService;
            List <InventoryItem>     result          = new List <InventoryItem>();

            List <CollectableData> collectables = resourceService.GetCollectables(roomData.id).FindAll((item) => {
                return(((int)roomLevel >= (int)item.roomLevel) &&
                       (UnityEngine.Random.value < GetCollectableProb(item)));
            });

            result.AddRange(collectables.Select(c => new InventoryItem(c, 1)).ToList());

            List <WeaponData> weapons = resourceService.weaponList.FindAll((w) => UnityEngine.Random.value < w.prob);

            result.AddRange(weapons.Select(w => new InventoryItem(w, 1)).ToList());

            List <IngredientData> ingredients = resourceService.GetIngredients(roomData.id).FindAll(item => {
                return(UnityEngine.Random.value < GetIngredientProb(item));
            });

            result.AddRange(ingredients.Select(i => new InventoryItem(i, 1)).ToList());

            List <ChargerData> chargers = resourceService.chargerList.FindAll(item => UnityEngine.Random.value < item.prob);

            result.AddRange(chargers.Select(c => new InventoryItem(c, 1)).ToList());

            return(result);
        }
        public List <InventoryItem> FilterCollectableForRoom(RoomInfo roomInfo)
        {
            RavenhillResourceService resourceService = engine.GetService <IResourceService>() as RavenhillResourceService;

            return(resourceService.GetCollectables(roomInfo.roomData.id).Where(collectable => {
                return ((int)collectable.roomLevel <= (int)roomInfo.roomLevel);
            }).Select(collectable => new InventoryItem(collectable, 1)).ToList());
        }
        public void ChargeStoryCollection(StoryCollectionData collectionData)
        {
            PlayerService            playerService   = engine.GetService <IPlayerService>().Cast <PlayerService>();
            RavenhillResourceService resourceService = engine.GetService <IResourceService>().Cast <RavenhillResourceService>();

            StoryChargerData chargerData = resourceService.GetStoryCharger(collectionData.chargerId);

            if (playerService.GetItemCount(chargerData) > 0)
            {
                playerService.RemoveItem(InventoryItemType.StoryCharger, chargerData.id, 1);
                playerService.AddItem(new InventoryItem(collectionData, 1));
                RavenhillEvents.OnStoryCollectionCharged(collectionData);
            }
        }
 private void OnInventoryItemAdded(InventoryItemType type, string itemId, int count)
 {
     if (type == InventoryItemType.Collectable)
     {
         RavenhillResourceService resourceService = engine.GetService <IResourceService>().Cast <RavenhillResourceService>();
         CollectableData          data            = resourceService.GetCollectable(itemId);
         if (data != null)
         {
             receivedCollectables.Enqueue(data);
             //StopCoroutine("CorShowReceivedCollectables");
             //StartCoroutine(CorShowReceivedCollectables(data));
         }
     }
 }
        public void ChargeAlchemy(BonusData bonus)
        {
            RavenhillResourceService resourceService = engine.GetService <IResourceService>().Cast <RavenhillResourceService>();
            PlayerService            playerService   = engine.GetService <IPlayerService>().Cast <PlayerService>();

            foreach (var pair in bonus.ingredients)
            {
                IngredientData ingredientData = resourceService.GetIngredient(pair.Key);
                playerService.RemoveItem(ingredientData.type, ingredientData.id, pair.Value);
            }

            playerService.AddItem(new InventoryItem(bonus, 1));
            //engine.Cast<RavenhillEngine>().DropItems(new List<DropItem> { new DropItem(DropType.item, 1, bonus )});
            RavenhillEvents.OnAlchemyCharged(bonus);
        }
        public bool IsAlchemyReadyToCharge(BonusData bonus)
        {
            bool alchemyReady = true;

            RavenhillResourceService resourceService = engine.GetService <IResourceService>().Cast <RavenhillResourceService>();
            PlayerService            playerService   = engine.GetService <IPlayerService>().Cast <PlayerService>();

            foreach (var pair in bonus.ingredients)
            {
                int playerCount = playerService.GetItemCount(resourceService.GetIngredient(pair.Key));
                if (playerCount < pair.Value)
                {
                    alchemyReady = false;
                    break;
                }
            }
            return(alchemyReady);
        }