private static GachaContent HandleSmartGender(GachaMetadata gacha, Gender playerGender) { Random random = Random.Shared; int index = random.Next(gacha.Contents.Count); GachaContent contents = gacha.Contents[index]; if (!contents.SmartGender) { return(contents); } Gender itemGender = ItemMetadataStorage.GetLimitMetadata(contents.ItemId).Gender; if (playerGender != itemGender || itemGender != Gender.Neutral) // 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]; Gender rerollContentsGender = ItemMetadataStorage.GetLimitMetadata(rerollContents.ItemId).Gender; if (rerollContentsGender == playerGender || rerollContentsGender == Gender.Neutral) { return(rerollContents); } } while (!sameGender); } return(contents); }
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); }
private static void HandleOpenGachaBox(GameSession session, PacketReader packet, Item capsule) { string amount = packet.ReadUnicodeString(); int rollCount = 0; GachaMetadata gacha = GachaMetadataStorage.GetMetadata(capsule.Function.Id); Random random = new Random(); List <Item> items = new List <Item>() { }; if (amount == "single") { rollCount = 1; } else if (amount == "multi") { rollCount = 10; } for (int i = 0; i < rollCount; i++) { GachaContent contents = HandleSmartGender(gacha, session.Player.Gender); int itemAmount = random.Next(contents.MinAmount, contents.MaxAmount); Item gachaItem = new Item(contents.ItemId) { Rarity = contents.Rarity, Amount = itemAmount, GachaDismantleId = gacha.GachaId }; items.Add(gachaItem); InventoryController.Consume(session, capsule.Uid, 1); } session.Send(FireWorksPacket.Gacha(items)); foreach (Item item in items) { InventoryController.Add(session, item, true); } }