Example #1
0
        private bool IsScrollOfType(DataModels.UserBankItem item, ScrollType scrollType)
        {
            if (scrollType == ScrollType.Experience)
            {
                return(item.ItemId == expScrollId);
            }

            if (scrollType == ScrollType.Raid)
            {
                return(item.ItemId == raidScrollId);
            }

            return(item.ItemId == dungeonScrollId);
        }
Example #2
0
        public int UseExpScroll(SessionToken sessionToken, Guid characterId, int count)
        {
            if (count <= 0)
            {
                return(-1);
            }

            var session = gameData.GetSession(sessionToken.SessionId);

            if (session == null)
            {
                return(-1);
            }

            var character = gameData.GetCharacter(characterId);
            var inventory = inventoryProvider.Get(characterId);

            DataModels.UserBankItem bankItemScroll = null;

            var scrolls = inventory.GetUnequippedItems(DataModels.ItemCategory.Scroll);
            var scroll  = scrolls.FirstOrDefault(x => x.Item.Name.Contains("exp", StringComparison.OrdinalIgnoreCase));

            if (scroll.IsNull() || scroll.Amount <= 0)
            {
                var bankItems = gameData.GetUserBankItems(character.UserId);
                bankItemScroll = bankItems.FirstOrDefault(x => IsScrollOfType(x, ScrollType.Experience));
                if (bankItemScroll == null)
                {
                    return(-2);
                }
            }

            int left       = serverManager.GetIncreasableGlobalExpAmount();
            int usageCount = count;

            if (bankItemScroll != null)
            {
                usageCount = (int)bankItemScroll.Amount;
            }
            else
            {
                usageCount = (int)scroll.Amount;
            }

            usageCount = (int)Math.Min(count, Math.Min(usageCount, left));
            if (left <= 0 || usageCount <= 0)
            {
                return(0);
            }

            var user = gameData.GetUser(character.UserId);

            if (serverManager.IncreaseGlobalExpMultiplier(user, usageCount))
            {
                if (bankItemScroll != null)
                {
                    gameData.RemoveFromStash(bankItemScroll, usageCount);
                }
                else
                {
                    inventory.RemoveItem(scroll, usageCount);
                }

                return(usageCount);
            }

            return(0);
        }
Example #3
0
        public ScrollUseResult UseScroll(SessionToken sessionToken, Guid characterId, ScrollType scrollType)
        {
            var session = gameData.GetSession(sessionToken.SessionId);

            if (session == null)
            {
                return(ScrollUseResult.Error);
            }

            var character = gameData.GetCharacter(characterId);
            //if (session.UserId != character.UserIdLock)
            //    return ScrollUseResult.Error;

            var inventory = inventoryProvider.Get(characterId);
            var scrolls   = inventory.GetUnequippedItems(DataModels.ItemCategory.Scroll);


            DataModels.UserBankItem bankItemScroll = null;
            var scroll = scrolls.FirstOrDefault(x => IsScrollOfType(x, scrollType));

            if (scroll.IsNull())
            {
                var bankItems = gameData.GetUserBankItems(character.UserId);
                bankItemScroll = bankItems.FirstOrDefault(x => IsScrollOfType(x, scrollType));
                if (bankItemScroll == null)
                {
                    return(ScrollUseResult.InsufficientScrolls);
                }
            }
            var result      = ScrollUseResult.Error;
            var isExpScroll = scrollType == ScrollType.Experience;//scroll.Item.Name.Contains("exp", StringComparison.OrdinalIgnoreCase);

            if (isExpScroll)
            {
                if (!serverManager.CanIncreaseGlobalExpMultiplier())
                {
                    return(ScrollUseResult.Error);
                }

                var user = gameData.GetUser(character.UserId);
                if (serverManager.IncreaseGlobalExpMultiplier(user))
                {
                    if (bankItemScroll != null)
                    {
                        // Remove Scroll from Stash
                        gameData.RemoveFromStash(bankItemScroll, 1);
                    }
                    else
                    {
                        inventory.RemoveItem(scroll, 1);
                    }

                    return(ScrollUseResult.Success);
                }
            }
            else
            {
                if (bankItemScroll != null)
                {
                    // Remove Scroll from Stash
                    if (gameData.RemoveFromStash(bankItemScroll, 1))
                    {
                        return(ScrollUseResult.Success);
                    }
                }
                else
                {
                    if (inventory.RemoveItem(scroll, 1))
                    {
                        return(ScrollUseResult.Success);
                    }
                }
            }

            return(ScrollUseResult.Error);
        }