Files
Unstable Kitsune b918192e4e Overwrite
Complete Overwrite of the Folder with the free shard. ServUO 57.3 has been added.
2023-11-28 23:20:26 -05:00

342 lines
12 KiB
C#

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