using Server.ContextMenus; using Server.Gumps; using Server.Items; using Server.Mobiles; using System; using System.Collections.Generic; namespace Server.Engines.HuntsmasterChallenge { public class HuntMaster : BaseVendor { private readonly List m_SBInfos = new List(); protected override List SBInfos => m_SBInfos; public override bool IsActiveVendor => false; public override void InitSBInfo() { } [Constructable] public HuntMaster() : base("the huntmaster") { SpeechHue = 0x3B2; CheckItems(); } public override void OnDoubleClick(Mobile from) { if (from.InRange(Location, 4)) { from.CloseGump(typeof(BasicInfoGump)); from.SendGump(new BasicInfoGump(1155750, 1155726)); /*Greetings! Only the most brave Hunters dare take my challenge! To participate, simply purchase a hunting permit from me for 5,000gp. When you are ready to to hunt seek any species of prey represented by the trophies in this hall. When you have bested your quarry use the deed on the corpse to document your kill. Return to me and hand me the permit and I will process it. If your kill beats or ties the current best record for that species, you will be eligible for rewards when the contest finishes on the first day of the next month! Return and speak to me on the first day of the next month to claim your rewards should your record hold up during the month long contest! You may also use a taxidermy kit, purchasable from a tanner, to create a trophy of your kill like the ones you see here. Happy Hunting!*/ } } public override void AddCustomContextEntries(Mobile from, List list) { if (from is PlayerMobile && HuntingSystem.Instance != null && HuntingSystem.Instance.Active) { list.Add(new BuyPermitEntry(this)); list.Add(new ClaimEntry((PlayerMobile)from, this)); } base.AddCustomContextEntries(from, list); } public override bool OnDragDrop(Mobile from, Item dropped) { if (dropped is HuntingPermit) { HuntingPermit permit = dropped as HuntingPermit; HuntingSystem sys = HuntingSystem.Instance; if (sys == null || !sys.Active) return false; if (!permit.HasDocumentedKill) SayTo(from, "You can't submit a kill you haven't documented yet!"); else if (permit.KillEntry.DateKilled < sys.SeasonBegins) SayTo(from, 1155720); // This permit was documented in a different month or year than the current month and year. I only accept permits documented in the current month and year. else if (permit.HasSubmitted) SayTo(from, 1155719); // This permit has already been submitted. else sys.TrySubmitKill(this, from, permit); } return false; } private class BuyPermitEntry : ContextMenuEntry { private readonly HuntMaster m_HuntMaster; public BuyPermitEntry(HuntMaster master) : base(1155701, 3) // Get Hunting Permit { m_HuntMaster = master; } public override void OnClick() { Mobile from = Owner.From; if (HuntingPermit.HasPermit(from)) from.SendLocalizedMessage(1155702); // You already have a hunting permit. else if (Banker.Withdraw(from, 5000, true)) { HuntingPermit permit = new HuntingPermit(from); if (from.Backpack == null || !from.Backpack.TryDropItem(from, permit, false)) { from.SendLocalizedMessage(1155703); // Your backpack was too full so the permit was deleted. Empty your backpack and try again. permit.Delete(); } //TODO: Message??? } else from.SendLocalizedMessage(500382); // Thou dost not have sufficient funds in thy account to withdraw that much. } } private class ClaimEntry : ContextMenuEntry { private readonly PlayerMobile m_Mobile; private readonly Mobile m_Vendor; public ClaimEntry(PlayerMobile mobile, Mobile vendor) : base(1155593, 2) { m_Mobile = mobile; m_Vendor = vendor; } public override void OnClick() { m_Mobile.SendGump(new HuntmasterRewardGump(m_Vendor, m_Mobile)); } } private void CheckItems() { if (Backpack == null) AddItem(new Backpack()); Item i = Backpack.FindItemByType(typeof(HuntmastersRewardTitleDeed)); if (i == null) Backpack.DropItem(new HuntmastersRewardTitleDeed()); i = Backpack.FindItemByType(typeof(RangersGuildSash)); if (i == null) Backpack.DropItem(new RangersGuildSash()); i = Backpack.FindItemByType(typeof(GargishRangersGuildSash)); if (i == null) Backpack.DropItem(new GargishRangersGuildSash()); } public HuntMaster(Serial serial) : base(serial) { } public override void GetProperties(ObjectPropertyList list) { base.GetProperties(list); list.Add(1155725); // Double Click to Join Huntmaster's Challenge } public override void Serialize(GenericWriter writer) { base.Serialize(writer); writer.Write(0); } public override void Deserialize(GenericReader reader) { base.Deserialize(reader); int v = reader.ReadInt(); Timer.DelayCall(TimeSpan.FromSeconds(10), CheckItems); } } }