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 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 }
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 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); }
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 }
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); }
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); }
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 }
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); }
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); } } } }
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); }