示例#1
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
 }
示例#2
0
 public Item(int id)
 {
     Id               = 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);
     PlayCount        = ItemMetadataStorage.GetPlayCount(id);
     FileName         = ItemMetadataStorage.GetFileName(id);
     SkillId          = ItemMetadataStorage.GetSkillID(id);
     RecommendJobs    = ItemMetadataStorage.GetRecommendJobs(id);
     Content          = ItemMetadataStorage.GetContent(id);
     FunctionName     = ItemMetadataStorage.GetFunctionName(id);
     FunctionId       = ItemMetadataStorage.GetFunctionId(id);
     FunctionDuration = ItemMetadataStorage.GetFunctionDuration(id);
     FunctionFieldId  = ItemMetadataStorage.GetFunctionFieldId(id);
     FunctionCapacity = ItemMetadataStorage.GetFunctionCapacity(id);
     Slot             = -1;
     Amount           = 1;
     Stats            = new ItemStats(id, Rarity);
     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 static void GiveItemFromSelectBox(GameSession session, Item sourceItem, int index)
    {
        SelectItemBox    box      = sourceItem.Function.SelectItemBox;
        ItemDropMetadata metadata = ItemDropMetadataStorage.GetItemDropMetadata(box.BoxId);

        if (metadata == null)
        {
            session.Send(NoticePacket.Notice("No items found", NoticeType.Chat));
            return;
        }

        Inventory inventory = session.Player.Inventory;

        inventory.ConsumeItem(session, sourceItem.Uid, 1);

        // Select boxes disregards group ID. Adding these all to a filtered list
        List <DropGroupContent> dropContentsList = new();

        foreach (DropGroup group in metadata.DropGroups)
        {
            foreach (DropGroupContent dropGroupContent in group.Contents)
            {
                if (dropGroupContent.SmartDropRate == 100)
                {
                    List <Job> recommendJobs = ItemMetadataStorage.GetRecommendJobs(dropGroupContent.ItemIds.First());
                    if (recommendJobs.Contains(session.Player.Job) || recommendJobs.Contains(Job.None))
                    {
                        dropContentsList.Add(dropGroupContent);
                    }
                    continue;
                }
                dropContentsList.Add(dropGroupContent);
            }
        }

        DropGroupContent dropContents = dropContentsList[index];

        Random rng    = RandomProvider.Get();
        int    amount = rng.Next((int)dropContents.MinAmount, (int)dropContents.MaxAmount);

        foreach (int id in dropContents.ItemIds)
        {
            Item newItem = new(id)
            {
                Enchants = dropContents.EnchantLevel,
                Amount   = amount,
                Rarity   = dropContents.Rarity
            };
            inventory.AddItem(session, newItem, true);
        }
    }
        public override void Handle(GameSession session, PacketReader packet)
        {
            // [bow] Henesys 47 Bow - 15100216
            // [staff] Modded Student Staff - 15200223
            // [longsword] Sword of tria - 13200220
            // [shield] Shield of tria - 14100190
            // [greatsword] Riena - 15000224
            // [scepter] Saint Mushliel Mace - 13300219
            // [codex] Words of Saint mushliel - 14000181
            // [cannon] Cannon of beginnings - 15300199
            // [dagger] Walker knife - 13100225
            // [star] Rook's Star - 13400218
            // [blade] Runesteel Blade - 15400274
            // [knuckles] Pugilist knuckles - 15500514
            // [orb] Guidance training orb - 15600514

            Job job = session.Player.Job;

            if (job == Job.Striker)
            {
                InventoryController.Add(session, new Item(15500514), true);
            }
            else if (job == Job.Runeblade)
            {
                InventoryController.Add(session, new Item(15400274), true);
            }
            else if (job == Job.SoulBinder)
            {
                InventoryController.Add(session, new Item(15600514), true);
            }
            else
            {
                int[] itemIds = new int[] { 15100216, 15200223, 13200220, 14100190, 15000224, 13300219, 14000181, 15300199, 13100225, 13400218 };
                foreach (int id in itemIds)
                {
                    List <Job> recommendJobs = ItemMetadataStorage.GetRecommendJobs(id);

                    if (!recommendJobs.Contains(job))
                    {
                        continue;
                    }

                    InventoryController.Add(session, new Item(id), true);
                    if (job == Job.Thief || job == Job.Assassin)
                    {
                        InventoryController.Add(session, new Item(id), true);
                    }
                }
            }
        }
    public IEnumerable <PremiumMarketItem> FindAllByCategory(MeretMarketSection section, MeretMarketCategory category, GenderFlag gender, JobFlag jobFlag, string searchString)
    {
        List <PremiumMarketItem> items   = new();
        IEnumerable <dynamic>    results = QueryFactory.Query(TableName).Get();

        if (section != MeretMarketSection.All)
        {
            results = QueryFactory.Query(TableName).Where("section", (int)section).Get();
        }

        foreach (dynamic data in results)
        {
            if (category != MeretMarketCategory.None && (MeretMarketCategory)data.category != category)
            {
                continue;
            }

            if (data.parent_market_id != 0)
            {
                continue;
            }
            PremiumMarketItem meretMarketItem = ReadMeretMarketItem(data);

            if (!meretMarketItem.ItemName.ToLower().Contains(searchString.ToLower()))
            {
                continue;
            }

            List <Job> jobs = ItemMetadataStorage.GetRecommendJobs(meretMarketItem.ItemId);
            if (!JobHelper.CheckJobFlagForJob(jobs, jobFlag))
            {
                continue;
            }

            if (!MeretMarketHelper.CheckGender(gender, meretMarketItem.ItemId))
            {
                continue;
            }

            if (meretMarketItem.BannerId != 0)
            {
                meretMarketItem.Banner = DatabaseManager.Banners.FindById(meretMarketItem.BannerId);
            }

            items.Add(meretMarketItem);
        }

        return(items);
    }
示例#7
0
 public Item(int id)
 {
     this.Id            = id;
     this.Uid           = GuidGenerator.Long();
     this.InventoryTab  = ItemMetadataStorage.GetTab(id);
     this.ItemSlot      = ItemMetadataStorage.GetSlot(id);
     this.GemSlot       = ItemMetadataStorage.GetGem(id);
     this.Rarity        = ItemMetadataStorage.GetRarity(id);
     this.SlotMax       = ItemMetadataStorage.GetSlotMax(id);
     this.IsTemplate    = ItemMetadataStorage.GetIsTemplate(id);
     this.PlayCount     = ItemMetadataStorage.GetPlayCount(id);
     this.RecommendJobs = ItemMetadataStorage.GetRecommendJobs(id);
     this.Content       = ItemMetadataStorage.GetContent(id);
     this.Slot          = -1;
     this.Amount        = 1;
     this.Stats         = new ItemStats();
     this.CanRepackage  = true; // If false, item becomes untradable
 }
示例#8
0
    public static List <Item> GetItemsFromDropGroup(DropGroupContent dropContent, Player player, Item sourceItem)
    {
        List <Item> items  = new();
        Random      rng    = Random.Shared;
        int         amount = rng.Next((int)dropContent.MinAmount, (int)dropContent.MaxAmount);

        foreach (int id in dropContent.ItemIds)
        {
            if (dropContent.SmartDropRate == 100)
            {
                List <Job> recommendJobs = ItemMetadataStorage.GetRecommendJobs(id);
                if (!recommendJobs.Contains(player.Job) && !recommendJobs.Contains(Job.None))
                {
                    continue;
                }
            }

            if (dropContent.SmartGender)
            {
                Gender itemGender = ItemMetadataStorage.GetLimitMetadata(id).Gender;
                if (itemGender != player.Gender && itemGender is not Gender.Neutral)
                {
                    continue;
                }
            }


            int rarity   = dropContent.Rarity;
            int constant = ItemMetadataStorage.GetOptionMetadata(sourceItem.Id).Constant;
            if (rarity == 0 && constant is > 0 and < 7)
            {
                rarity = constant;
            }

            Item newItem = new(id, amount, rarity, saveToDatabase : false)
            {
                EnchantLevel = dropContent.EnchantLevel
            };
            newItem.Stats = new(newItem);
            items.Add(newItem);
        }

        return(items);
    }
示例#9
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);
 }
示例#10
0
 public Item(int id)
 {
     Id            = id;
     Uid           = GuidGenerator.Long();
     InventoryTab  = ItemMetadataStorage.GetTab(id);
     ItemSlot      = ItemMetadataStorage.GetSlot(id);
     GemSlot       = ItemMetadataStorage.GetGem(id);
     Rarity        = ItemMetadataStorage.GetRarity(id);
     StackLimit    = ItemMetadataStorage.GetStackLimit(id);
     IsTwoHand     = ItemMetadataStorage.GetIsTwoHand(id);
     IsDress       = ItemMetadataStorage.GetIsDress(id);
     IsTemplate    = ItemMetadataStorage.GetIsTemplate(id);
     PlayCount     = ItemMetadataStorage.GetPlayCount(id);
     RecommendJobs = ItemMetadataStorage.GetRecommendJobs(id);
     Content       = ItemMetadataStorage.GetContent(id);
     Slot          = -1;
     Amount        = 1;
     Stats         = new ItemStats(id, Rarity);
     CanRepackage  = true; // If false, item becomes untradable
 }
示例#11
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);
 }
示例#12
0
        public static void OpenBox(GameSession session, List <ItemContent> content)
        {
            Random rng      = new Random();
            bool   oneGroup = true;

            foreach (ItemContent item in content)
            {
                if (item.DropGroup != content[0].DropGroup)
                {
                    oneGroup = false;
                    break;
                }
            }

            if (oneGroup)
            {
                int smartDropRate = content[0].SmartDropRate;

                if (smartDropRate == 0)
                {
                    int rand = rng.Next(0, content.Count);
                    GiveItem(session, content[rand]);
                }
                else if (smartDropRate == 100)
                {
                    foreach (ItemContent item in content)
                    {
                        List <Job> recommendJobs = ItemMetadataStorage.GetRecommendJobs(item.Id);
                        if (recommendJobs.Contains(session.Player.Job) || recommendJobs.Contains(0)) // recommendJob 0 means the item don't have a recommended job
                        {
                            GiveItem(session, item);
                        }
                    }
                }
                else
                {
                    bool success = rng.Next(0, 100) > smartDropRate;
                    List <ItemContent> filteredList = new List <ItemContent>();
                    foreach (ItemContent item in content)
                    {
                        List <Job> recommendJobs = ItemMetadataStorage.GetRecommendJobs(item.Id);
                        if (success)
                        {
                            if (recommendJobs.Contains(session.Player.Job))
                            {
                                filteredList.Add(item);
                            }
                        }
                        else
                        {
                            if (!recommendJobs.Contains(session.Player.Job))
                            {
                                filteredList.Add(item);
                            }
                        }
                    }

                    int rand = rng.Next(0, filteredList.Count);
                    GiveItem(session, filteredList[rand]);
                }
            }
            else
            {
                foreach (ItemContent item in content)
                {
                    List <Job> recommendJobs = ItemMetadataStorage.GetRecommendJobs(item.Id);
                    if (recommendJobs.Contains(session.Player.Job) || recommendJobs.Contains(0))
                    {
                        GiveItem(session, item);
                    }
                }
            }
        }
示例#13
0
    public static bool GiveItemFromSelectBox(GameSession session, Item sourceItem, int index, out OpenBoxResult result)
    {
        result = OpenBoxResult.Success;

        SelectItemBox    box      = sourceItem.Function.SelectItemBox;
        ItemDropMetadata metadata = ItemDropMetadataStorage.GetItemDropMetadata(box.BoxId);

        if (metadata == null)
        {
            result = OpenBoxResult.UnableToOpen;
            return(false);
        }

        IInventory inventory = session.Player.Inventory;

        // Select boxes disregards group ID. Adding these all to a filtered list
        List <DropGroupContent> dropContentsList = new();

        foreach (DropGroup group in metadata.DropGroups)
        {
            foreach (DropGroupContent dropGroupContent in group.Contents)
            {
                if (dropGroupContent.SmartDropRate == 100)
                {
                    List <Job> recommendJobs = ItemMetadataStorage.GetRecommendJobs(dropGroupContent.ItemIds.First());
                    if (recommendJobs.Contains(session.Player.Job) || recommendJobs.Contains(Job.None))
                    {
                        dropContentsList.Add(dropGroupContent);
                    }

                    continue;
                }

                dropContentsList.Add(dropGroupContent);
            }
        }

        DropGroupContent dropContents = dropContentsList[index];
        int amount = Random.Shared.Next((int)dropContents.MinAmount, (int)dropContents.MaxAmount);

        foreach (int id in dropContents.ItemIds)
        {
            if (inventory.CanHold(id, amount))
            {
                continue;
            }

            result = OpenBoxResult.InventoryFull;
            return(false);
        }

        inventory.ConsumeItem(session, sourceItem.Uid, 1);

        foreach (int id in dropContents.ItemIds)
        {
            Item newItem = new(id, amount, dropContents.Rarity)
            {
                EnchantLevel = dropContents.EnchantLevel
            };
            newItem.Stats = new(newItem);
            if (inventory.CanHold(newItem))
            {
                inventory.AddItem(session, newItem, true);
                continue;
            }

            result = OpenBoxResult.InventoryFull;
            MailHelper.InventoryWasFull(newItem, session.Player.CharacterId);
        }

        return(true);
    }