using System; using Server; using Server.Network; using Server.Items; using Server.Mobiles; using Server.Prompts; using Server.Targeting; using Server.Engines.XmlSpawner2; // // XmlPlayerQuestGump // namespace Server.Gumps { public class XmlPlayerQuestGump : Gump { private PlayerMobile m_From; private IXmlQuest m_QuestItem; public override void OnResponse( Server.Network.NetState sender, RelayInfo info ) { if(info == null || sender == null || sender.Mobile == null) return; // read the text entries for the search criteria TextRelay tr = info.GetTextEntry( 100 ); // quest name if(tr != null) m_QuestItem.Name = tr.Text.Trim(); tr = info.GetTextEntry( 102 ); // title if(tr != null) m_QuestItem.TitleString = tr.Text.Trim(); tr = info.GetTextEntry( 103 ); // notestring if(tr != null) m_QuestItem.NoteString = tr.Text; tr = info.GetTextEntry( 200 ); // objectives if(tr != null) m_QuestItem.Objective1 = tr.Text.Trim(); tr = info.GetTextEntry( 201 ); if(tr != null) m_QuestItem.Objective2 = tr.Text.Trim(); tr = info.GetTextEntry( 202 ); if(tr != null) m_QuestItem.Objective3 = tr.Text.Trim(); tr = info.GetTextEntry( 203 ); if (tr != null) m_QuestItem.Objective4 = tr.Text.Trim(); tr = info.GetTextEntry( 204 ); if(tr != null) m_QuestItem.Objective5 = tr.Text.Trim(); tr = info.GetTextEntry( 205 ); if(tr != null && tr.Text != null && tr.Text.Length > 0) // descriptions m_QuestItem.Description1 = tr.Text.Trim(); else m_QuestItem.Description1 = null; tr = info.GetTextEntry( 206 ); if(tr != null && tr.Text != null && tr.Text.Length > 0) m_QuestItem.Description2 = tr.Text.Trim(); else m_QuestItem.Description2 = null; tr = info.GetTextEntry( 207 ); if(tr != null && tr.Text != null && tr.Text.Length > 0) m_QuestItem.Description3 = tr.Text.Trim(); else m_QuestItem.Description3 = null; tr = info.GetTextEntry( 208 ); if(tr != null && tr.Text != null && tr.Text.Length > 0) m_QuestItem.Description4 = tr.Text.Trim(); else m_QuestItem.Description4 = null; tr = info.GetTextEntry( 209 ); if(tr != null && tr.Text != null && tr.Text.Length > 0) m_QuestItem.Description5 = tr.Text.Trim(); else m_QuestItem.Description5 = null; tr = info.GetTextEntry( 210 ); // expiration if(tr != null && tr.Text != null && tr.Text.Length > 0){ try{m_QuestItem.Expiration = double.Parse(tr.Text.Trim());} catch{} } // check all of the check boxes m_QuestItem.PartyEnabled = info.IsSwitched(300); m_QuestItem.CanSeeReward = info.IsSwitched(301); // refresh the time created m_QuestItem.TimeCreated = DateTime.UtcNow; switch ( info.ButtonID ) { case 0: // Okay { break; } case 1: // Select Reward { sender.Mobile.Target = new RewardTarget(m_QuestItem); break; } case 2: // Select Reward Return { sender.Mobile.Target = new ReturnTarget(m_QuestItem); break; } } } public XmlPlayerQuestGump( PlayerMobile from, IXmlQuest questitem ) : base( 12, 140 ) { from.CloseGump( typeof( XmlPlayerQuestGump ) ); if(from == null || from.Deleted || questitem == null || questitem.Deleted) return; m_From = from; m_QuestItem = questitem; int width = 600; //width = 516; X = (624 - width) / 2; AddPage( 0 ); AddBackground( 10, 10, width, 439, 5054 ); AddImageTiled( 18, 20, width - 17, 420, 2624 ); AddAlphaRegion( 18, 20, width - 17, 420 ); AddImage( 5, 5, 10460 ); AddImage( width - 15, 5, 10460 ); AddImage( 5, 424, 10460 ); AddImage( width - 15, 424, 10460 ); // add the Quest Title AddLabel( width/2 - 50, 15, 0x384, "Player Quest Maker" ); int y = 35; // add the Quest Name AddLabel( 28, y, 0x384, "Quest Name" ); string name = questitem.Name; if(name != null) { name = name.Substring(4); } AddImageTiled( 26, y + 20, 232, 20, 0xBBC ); AddTextEntry( 26, y + 20, 250, 20, 0, 100, name ); // add the Quest Title AddLabel( 328, y, 0x384, "Quest Title" ); AddImageTiled( 306, y + 20, 232, 20, 0xBBC ); AddTextEntry( 306, y + 20, 230, 20, 0, 102, questitem.TitleString ); y += 50; // add the Quest Text AddLabel( 28, y, 0x384, "Quest Text" ); AddImageTiled( 26, y + 20, 532, 80, 0xBBC ); AddTextEntry( 26, y + 20, 530, 80, 0, 103, questitem.NoteString ); y += 110; // add the Quest Expiration AddLabel( 28, y, 0x384, "Expiration" ); AddLabel( 98, y + 20, 0x384, "Hours" ); AddImageTiled( 26, y + 20, 52, 20, 0xBBC ); AddTextEntry( 26, y + 20, 50, 20, 0, 210, questitem.Expiration.ToString() ); y += 50; // add the Quest Objectives AddLabel( 28, y, 0x384, "Quest Objectives" ); AddImageTiled( 26, y + 20, 252, 19, 0xBBC ); AddTextEntry( 26, y + 20, 250, 19, 0, 200, questitem.Objective1 ); AddImageTiled( 26, y + 40, 252, 19, 0xBBC ); AddTextEntry( 26, y + 40, 250, 19, 0, 201, questitem.Objective2 ); AddImageTiled( 26, y + 60, 252, 19, 0xBBC ); AddTextEntry( 26, y + 60, 250, 19, 0, 202, questitem.Objective3 ); AddImageTiled( 26, y + 80, 252, 19, 0xBBC ); AddTextEntry( 26, y + 80, 250, 19, 0, 203, questitem.Objective4 ); AddImageTiled( 26, y + 100, 252, 19, 0xBBC ); AddTextEntry( 26, y + 100, 250, 19, 0, 204, questitem.Objective5 ); // add the Quest Objectives AddLabel( 328, y, 0x384, "Objective Descriptions" ); AddImageTiled( 306, y + 20, 252, 19, 0xBBC ); AddTextEntry( 306, y + 20, 250, 19, 0, 205, questitem.Description1 ); AddImageTiled( 306, y + 40, 252, 19, 0xBBC ); AddTextEntry( 306, y + 40, 250, 19, 0, 206, questitem.Description2 ); AddImageTiled( 306, y + 60, 252, 19, 0xBBC ); AddTextEntry( 306, y + 60, 250, 19, 0, 207, questitem.Description3 ); AddImageTiled( 306, y + 80, 252, 19, 0xBBC ); AddTextEntry( 306, y + 80, 250, 19, 0, 208, questitem.Description4 ); AddImageTiled( 306, y + 100, 252, 19, 0xBBC ); AddTextEntry( 306, y + 100, 250, 19, 0, 209, questitem.Description5 ); y += 130; // party enable toggle AddCheck( 25, y, 0xD2, 0xD3, questitem.PartyEnabled, 300); AddLabel( 48, y, 0x384, "PartyEnabled" ); y += 20; // can see toggle AddCheck( 25, y, 0xD2, 0xD3, questitem.CanSeeReward, 301); AddLabel( 48, y, 0x384, "CanSeeReward" ); // select reward button AddButton( 225, y+3, 2103, 2103, 1, GumpButtonType.Reply, 0 ); AddLabel( 245, y, 0x384, "Select Reward" ); // select reward button AddButton( 375, y+3, 2103, 2103, 2, GumpButtonType.Reply, 0 ); AddLabel( 395, y, 0x384, "Select Return Container" ); AddButton( 45, 416, 2130, 2129, 0, GumpButtonType.Reply, 0 ); // Okay button //AddButton( 375 - xoffset, 416, 4017, 4018, 0, GumpButtonType.Reply, 0 ); //AddHtmlLocalized( 410 - xoffset, 416, 120, 20, 1011441, LabelColor, false, false ); // EXIT } private class RewardTarget : Target { IXmlQuest m_QuestItem; public RewardTarget(IXmlQuest questitem) : base ( 30, true, TargetFlags.None ) { m_QuestItem = questitem; } protected override void OnTarget( Mobile from, object targeted ) { if(m_QuestItem == null || m_QuestItem.Deleted) return; // first check to see if you are too far from the return container. This is to avoid exploits involving targeting a container // then using the return reward feature as a free transport of items back to that container if(m_QuestItem.ReturnContainer != null && !m_QuestItem.ReturnContainer.Deleted) { Point3D returnloc; if(m_QuestItem.ReturnContainer.Parent == null) { returnloc = m_QuestItem.ReturnContainer.Location; } else if(m_QuestItem.ReturnContainer.RootParent != null) { returnloc = ((IEntity)m_QuestItem.ReturnContainer.RootParent).Location; } else { from.SendMessage("Invalid container location"); return; } if(!Utility.InRange( returnloc, from.Location, 10)) { // out of range from.SendMessage("Too far away from the reward return container"); return; } } // try to add the item as the reward item if(m_QuestItem.PlayerMade && (from != null) && !from.Deleted && (from is PlayerMobile) && (from == m_QuestItem.Creator) && (from == m_QuestItem.Owner) && (targeted is Item) && !(targeted is IXmlQuest)) { Item i = targeted as Item; // make sure the target item is in the oweners backpack if(i != null && !i.Deleted && i.RootParent == m_QuestItem.Owner) { m_QuestItem.RewardItem = i; m_QuestItem.AutoReward = true; } else { from.SendMessage("Targeted item must be in the owners pack"); } } } } private class ReturnTarget : Target { IXmlQuest m_QuestItem; public ReturnTarget(IXmlQuest questitem) : base ( 30, true, TargetFlags.None ) { m_QuestItem = questitem; } protected override void OnTarget( Mobile from, object targeted ) { if(m_QuestItem == null || m_QuestItem.Deleted) return; // try to add the item as the reward item if(m_QuestItem.PlayerMade && (from != null) && !from.Deleted && (from is PlayerMobile) && (from == m_QuestItem.Creator) && (from == m_QuestItem.Owner) && targeted is Container) { Container i = targeted as Container; // make sure the target item is in the oweners backpack if(i != null && !i.Deleted ) { m_QuestItem.ReturnContainer = i; from.SendMessage("Reward return container set"); } else { from.SendMessage("Targeted item must be a valid container"); } } } } } }