예제 #1
0
        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);
        }
예제 #2
0
 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
 }
예제 #3
0
    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);
    }
예제 #4
0
    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);
    }
예제 #5
0
 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);
 }
예제 #6
0
    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;
        }
    }
예제 #7
0
 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);
 }