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);
        }
Beispiel #3
0
        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);
            }
        }