private static GachaContent HandleSmartGender(GachaMetadata gacha, byte playerGender) { Random random = RandomProvider.Get(); int index = random.Next(gacha.Contents.Count); GachaContent contents = gacha.Contents[index]; if (!contents.SmartGender) { return(contents); } byte itemGender = ItemMetadataStorage.GetGender(contents.ItemId); if (playerGender != itemGender || itemGender != 2) // if it's not the same gender or unisex, roll again { bool sameGender = false; do { int indexReroll = random.Next(gacha.Contents.Count); GachaContent rerollContents = gacha.Contents[indexReroll]; byte rerollContentsGender = ItemMetadataStorage.GetGender(rerollContents.ItemId); if (rerollContentsGender == playerGender || rerollContentsGender == 2) { return(rerollContents); } } while (!sameGender); } return(contents); }
public Item(int id) { Id = id; Level = ItemMetadataStorage.GetLevel(id); Uid = GuidGenerator.Long(); InventoryTab = ItemMetadataStorage.GetTab(id); ItemSlot = ItemMetadataStorage.GetSlot(id); GemSlot = ItemMetadataStorage.GetGem(id); Rarity = ItemMetadataStorage.GetRarity(id); StackLimit = ItemMetadataStorage.GetStackLimit(id); EnableBreak = ItemMetadataStorage.GetEnableBreak(id); IsTwoHand = ItemMetadataStorage.GetIsTwoHand(id); IsDress = ItemMetadataStorage.GetIsDress(id); IsTemplate = ItemMetadataStorage.GetIsTemplate(id); IsCustomScore = ItemMetadataStorage.GetIsCustomScore(id); Gender = ItemMetadataStorage.GetGender(id); RemainingGlamorForges = ItemExtractionMetadataStorage.GetExtractionCount(id); PlayCount = ItemMetadataStorage.GetPlayCount(id); FileName = ItemMetadataStorage.GetFileName(id); SkillId = ItemMetadataStorage.GetSkillID(id); RecommendJobs = ItemMetadataStorage.GetRecommendJobs(id); Content = ItemMetadataStorage.GetContent(id); Function = ItemMetadataStorage.GetFunction(id); Tag = ItemMetadataStorage.GetTag(id); ShopID = ItemMetadataStorage.GetShopID(id); Slot = -1; Amount = 1; Score = new MusicScore(); Stats = new ItemStats(id, Rarity, Level); Color = ItemMetadataStorage.GetEquipColor(id); CanRepackage = true; // If false, item becomes untradable }
public static List <Item> GetItemsFromDropGroup(DropGroupContent dropContent, Gender playerGender, Job job) { List <Item> items = new(); Random rng = RandomProvider.Get(); int amount = rng.Next((int)dropContent.MinAmount, (int)dropContent.MaxAmount); foreach (int id in dropContent.ItemIds) { if (dropContent.SmartGender) { Gender itemGender = ItemMetadataStorage.GetGender(id); if (itemGender != playerGender && itemGender is not Gender.Neutral) { continue; } } List <Job> recommendJobs = ItemMetadataStorage.GetRecommendJobs(id); if (recommendJobs.Contains(job) || recommendJobs.Contains(Job.None)) { Item newItem = new(id) { Enchants = dropContent.EnchantLevel, Amount = amount, Rarity = dropContent.Rarity }; items.Add(newItem); } } return(items); }
public List <UGCMarketItem> FindItemsByCategory(List <string> categories, GenderFlag genderFlag, JobFlag job, short sort) { List <UGCMarketItem> items = new(); foreach (UGCMarketItem item in Items.Values) { if (!categories.Contains(item.Item.Category) || item.Status != UGCMarketListingStatus.Active) { continue; } // check job if (!JobHelper.CheckJobFlagForJob(item.Item.RecommendJobs, job)) { continue; } // check gender Gender itemGender = ItemMetadataStorage.GetGender(item.Item.Id); if (!genderFlag.HasFlag(GenderFlag.Male) && !genderFlag.HasFlag(GenderFlag.Female)) { Gender gender = genderFlag.HasFlag(GenderFlag.Male) ? Gender.Male : Gender.Female; } items.Add(item); } UGCMarketSort marketSort = (UGCMarketSort)sort; switch (marketSort) { // TODO: Handle Most Popular sorting. case UGCMarketSort.MostPopular: case UGCMarketSort.TopSeller: items = items.OrderByDescending(x => x.SalesCount).ToList(); break; case UGCMarketSort.MostRecent: items = items.OrderByDescending(x => x.CreationTimestamp).ToList(); break; } return(items); }
public void SetMetadataValues(int id) { InventoryTab = ItemMetadataStorage.GetTab(id); GemSlot = ItemMetadataStorage.GetGem(id); StackLimit = ItemMetadataStorage.GetStackLimit(id); EnableBreak = ItemMetadataStorage.GetEnableBreak(id); IsTwoHand = ItemMetadataStorage.GetIsTwoHand(id); IsDress = ItemMetadataStorage.GetIsDress(id); IsCustomScore = ItemMetadataStorage.GetIsCustomScore(id); Gender = ItemMetadataStorage.GetGender(id); FileName = ItemMetadataStorage.GetFileName(id); SkillId = ItemMetadataStorage.GetSkillID(id); RecommendJobs = ItemMetadataStorage.GetRecommendJobs(id); Content = ItemMetadataStorage.GetContent(id); Function = ItemMetadataStorage.GetFunction(id); AdBalloon = ItemMetadataStorage.GetBalloonData(id); Tag = ItemMetadataStorage.GetTag(id); ShopID = ItemMetadataStorage.GetShopID(id); }
private static void GetReward(GameSession session, string type, string id, string value, string count) { switch (type) { case "item": Item item = new(int.Parse(id)) { Rarity = int.Parse(value), Amount = int.Parse(count) }; session.Player.Inventory.AddItem(session, item, true); break; case "genderItem": List <int> ids = id.Split(",").Select(int.Parse).ToList(); List <int> values = value.Split(",").Select(int.Parse).ToList(); List <int> counts = count.Split(",").Select(int.Parse).ToList(); for (int i = 0; i < ids.Count; i++) { Gender gender = ItemMetadataStorage.GetGender(ids[i]); if (gender != session.Player.Gender) { continue; } Item genderItem = new(ids[i]) { Rarity = values[i], Amount = counts[i] }; session.Player.Inventory.AddItem(session, genderItem, true); } break; case "additionalEffect": // TODO: Handle giving player buff break; default: return; } }
public void SetMetadataValues() { InventoryTab = ItemMetadataStorage.GetTab(Id); GemSlot = ItemMetadataStorage.GetGem(Id); StackLimit = ItemMetadataStorage.GetStackLimit(Id); EnableBreak = ItemMetadataStorage.GetEnableBreak(Id); IsTwoHand = ItemMetadataStorage.GetIsTwoHand(Id); IsDress = ItemMetadataStorage.GetIsDress(Id); IsCustomScore = ItemMetadataStorage.GetIsCustomScore(Id); Gender = ItemMetadataStorage.GetGender(Id); FileName = ItemMetadataStorage.GetFileName(Id); SkillId = ItemMetadataStorage.GetSkillID(Id); RecommendJobs = ItemMetadataStorage.GetRecommendJobs(Id); Function = ItemMetadataStorage.GetFunction(Id); Tag = ItemMetadataStorage.GetTag(Id); ShopID = ItemMetadataStorage.GetShopID(Id); RemainingTrades = ItemMetadataStorage.GetTradeableCount(Id); TransferType = ItemMetadataStorage.GetTransferType(Id); RepackageCount = ItemMetadataStorage.GetRepackageCount(Id); }