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); }
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); }
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); }