public MapleItem Search(int id, Func <int, int[]> getDroppedBy) { WZProperty stringWz = WZ.Resolve("String"); string idString = id.ToString(); MapleItem result = null; WZProperty item = (stringWz.Resolve("Eqp/Eqp") ?? stringWz.Resolve("Item/Eqp")).Children.FirstOrDefault(c => c.Children.Any(b => b.NameWithoutExtension.Equals(idString)))?.Resolve(idString); if (item != null) { result = Equip.Parse(item); } if (result == null) { item = (stringWz.Resolve("Etc/Etc") ?? stringWz.Resolve("Item/Etc"))?.Resolve(idString); if (item != null) { result = Etc.Parse(item); } } if (result == null) { item = (stringWz.Resolve("Ins") ?? stringWz.Resolve("Item/Ins")).Resolve(idString); if (item != null) { result = Install.Parse(item); } } if (result == null) { item = (stringWz.Resolve("Cash") ?? stringWz.Resolve("Item/Cash")).Resolve(idString); if (item != null) { result = Cash.Parse(item); } } if (result == null) { item = (stringWz.Resolve("Consume") ?? stringWz.Resolve("Item/Con")).Resolve(idString); if (item != null) { result = Consume.Parse(item); } } if (result == null) { item = (stringWz.Resolve("Pet") ?? stringWz.Resolve("Item/Pet")).Resolve(idString); if (item != null) { result = Pet.Parse(item); } } MobFactory mobs = new MobFactory(); mobs.CloneWZFrom(this); if (result != null && result.MetaInfo != null) { result.MetaInfo.DroppedBy = getDroppedBy(id)?.Join(mobs.GetMobs().Where(c => c != null), c => c, c => c.Id, (a, b) => b)?.ToArray(); } return(result); }