Overwrite

Complete Overwrite of the Folder with the free shard. ServUO 57.3 has been added.
This commit is contained in:
Unstable Kitsune
2023-11-28 23:20:26 -05:00
parent 3cd54811de
commit b918192e4e
11608 changed files with 2644205 additions and 47 deletions

View File

@@ -0,0 +1,73 @@
using System;
using Server.Gumps;
namespace Server.Engines.Quests
{
public class ConfirmHeritageGump : Gump
{
private readonly HeritageQuester m_Quester;
public ConfirmHeritageGump(HeritageQuester quester)
: base(50, 50)
{
m_Quester = quester;
Closable = true;
Disposable = true;
Dragable = true;
Resizable = false;
AddPage(0);
AddBackground(0, 0, 240, 135, 0x2422);
object message = m_Quester.ConfirmMessage;
if (message is int)
AddHtmlLocalized(15, 15, 210, 75, (int)message, 0x0, false, false);
else if (message is string)
AddHtml(15, 15, 210, 75, (string)message, false, false);
AddButton(160, 95, 0xF7, 0xF8, (int)Buttons.Okay, GumpButtonType.Reply, 0);
AddButton(90, 95, 0xF2, 0xF1, (int)Buttons.Close, GumpButtonType.Reply, 0);
}
private enum Buttons
{
Close,
Okay,
}
public override void OnResponse(Server.Network.NetState state, RelayInfo info)
{
if (m_Quester == null)
return;
if (info.ButtonID == (int)Buttons.Okay)
{
Mobile m = state.Mobile;
if (HeritageQuester.Check(m))
{
HeritageQuester.AddPending(m, m_Quester);
Timer.DelayCall(TimeSpan.FromMinutes(1), new TimerStateCallback(CloseHeritageGump), m);
state.Mobile.Send(new HeritagePacket(m.Female, (short)(m_Quester.Race.RaceID + 1)));
}
}
}
private void CloseHeritageGump(object args)
{
if (args is Mobile)
{
Mobile m = (Mobile)args;
if (HeritageQuester.IsPending(m))
{
m.Send(HeritagePacket.Close);
HeritageQuester.RemovePending(m);
}
}
}
}
}

View File

@@ -0,0 +1,719 @@
using System;
using Server.Gumps;
using Server.Mobiles;
namespace Server.Engines.Quests
{
public enum Buttons
{
Close,
CloseQuest,
RefuseQuest,
ResignQuest,
AcceptQuest,
AcceptReward,
PreviousPage,
NextPage,
Complete,
CompleteQuest,
RefuseReward
}
public class MondainQuestGump : BaseQuestGump
{
private const int ButtonOffset = 11;
private readonly object m_Quester;
private readonly PlayerMobile m_From;
private readonly BaseQuest m_Quest;
private readonly bool m_Offer;
private readonly bool m_Completed;
private Section m_Section;
public MondainQuestGump(PlayerMobile from)
: this(from, null, Section.Main, false, false)
{
}
public MondainQuestGump(BaseQuest quest)
: this(quest, Section.Description, true)
{
}
public MondainQuestGump(BaseQuest quest, Section section, bool offer)
: this(null, quest, section, offer, false)
{
}
public MondainQuestGump(BaseQuest quest, Section section, bool offer, bool completed)
: this(null, quest, section, offer, completed)
{
}
public MondainQuestGump(PlayerMobile owner, BaseQuest quest, Section section, bool offer, bool completed)
: this(owner, quest, section, offer, completed, null)
{
}
public MondainQuestGump(PlayerMobile owner, BaseQuest quest, Section section, bool offer, bool completed, object quester)
: base(75, 25)
{
m_Quester = quester;
m_Quest = quest;
m_Section = section;
m_Offer = offer;
m_Completed = completed;
if (quest != null)
m_From = quest.Owner;
else
m_From = owner;
Closable = false;
Disposable = true;
Dragable = true;
Resizable = false;
AddPage(0);
AddImageTiled(50, 20, 400, 460, 0x1404);
AddImageTiled(50, 29, 30, 450, 0x28DC);
AddImageTiled(34, 140, 17, 339, 0x242F);
AddImage(48, 135, 0x28AB);
AddImage(-16, 285, 0x28A2);
AddImage(0, 10, 0x28B5);
AddImage(25, 0, 0x28B4);
AddImageTiled(83, 15, 350, 15, 0x280A);
AddImage(34, 479, 0x2842);
AddImage(442, 479, 0x2840);
AddImageTiled(51, 479, 392, 17, 0x2775);
AddImageTiled(415, 29, 44, 450, 0xA2D);
AddImageTiled(415, 29, 30, 450, 0x28DC);
AddImage(370, 50, 0x589);
if ((int)m_From.AccessLevel > (int)AccessLevel.Counselor && quest != null)
{
AddButton(379, 60, 0x15A9, 0x15A9, (int)Buttons.CompleteQuest, GumpButtonType.Reply, 0);
}
else
{
if (m_Quest == null)
{
AddImage(379, 60, 0x15A9);
}
else
{
AddImage(379, 60, 0x1580);
}
}
AddImage(425, 0, 0x28C9);
AddImage(90, 33, 0x232D);
AddImageTiled(130, 65, 175, 1, 0x238D);
switch ( m_Section )
{
case Section.Main:
SecMain();
break;
case Section.Description:
SecDescription();
break;
case Section.Objectives:
SecObjectives();
break;
case Section.Rewards:
SecRewards();
break;
case Section.Refuse:
SecRefuse();
break;
case Section.Complete:
SecComplete();
break;
case Section.InProgress:
SecInProgress();
break;
case Section.Failed:
SecFailed();
break;
}
}
public enum Section
{
Main,
Description,
Objectives,
Rewards,
Refuse,
Complete,
InProgress,
Failed
}
public virtual void SecMain()
{
if (m_From == null)
return;
AddHtmlLocalized(130, 45, 270, 16, 1046026, 0xFFFFFF, false, false); // Quest Log
int offset = 140;
for (int i = m_From.Quests.Count - 1; i >= 0; i--)
{
BaseQuest quest = m_From.Quests[i];
AddHtmlObject(98, offset, 270, 21, quest.Title, quest.Failed ? 0x3C00 : White, false, false);
AddButton(368, offset, 0x26B0, 0x26B1, ButtonOffset + i, GumpButtonType.Reply, 0);
offset += 21;
}
AddButton(313, 455, 0x2EEC, 0x2EEE, (int)Buttons.Close, GumpButtonType.Reply, 0);
}
public virtual void SecDescription()
{
if (m_Quest == null)
return;
if (!m_Quest.RenderDescription(this, m_Offer))
{
if (m_Offer)
AddHtmlLocalized(130, 45, 270, 16, 1049010, 0xFFFFFF, false, false); // Quest Offer
else
AddHtmlLocalized(130, 45, 270, 16, 1046026, 0xFFFFFF, false, false); // Quest Log
if (m_Quest.Failed)
AddHtmlLocalized(160, 80, 200, 32, 500039, 0x3C00, false, false); // Failed!
AddHtmlObject(160, 70, 200, 40, m_Quest.Title, DarkGreen, false, false);
if (m_Quest.ChainID != QuestChain.None)
AddHtmlLocalized(98, 140, 312, 16, 1075024, 0x2710, false, false); // Description (quest chain)
else
AddHtmlLocalized(98, 140, 312, 16, 1072202, 0x2710, false, false); // Description
AddHtmlObject(98, 156, 312, 180, m_Quest.Description, LightGreen, false, true);
if (m_Offer)
{
AddButton(95, 455, 0x2EE0, 0x2EE2, (int)Buttons.AcceptQuest, GumpButtonType.Reply, 0);
AddButton(313, 455, 0x2EF2, 0x2EF4, (int)Buttons.RefuseQuest, GumpButtonType.Reply, 0);
}
else
{
AddButton(95, 455, 0x2EF5, 0x2EF7, (int)Buttons.ResignQuest, GumpButtonType.Reply, 0);
AddButton(313, 455, 0x2EEC, 0x2EEE, (int)Buttons.CloseQuest, GumpButtonType.Reply, 0);
}
if (m_Quest.ShowDescription)
AddButton(275, 430, 0x2EE9, 0x2EEB, (int)Buttons.NextPage, GumpButtonType.Reply, 0);
}
}
public virtual void SecObjectives()
{
if (m_Quest == null)
return;
if (m_Offer)
{
AddButton(95, 455, 0x2EE0, 0x2EE2, (int)Buttons.AcceptQuest, GumpButtonType.Reply, 0);
AddButton(313, 455, 0x2EF2, 0x2EF4, (int)Buttons.RefuseQuest, GumpButtonType.Reply, 0);
}
else
{
AddButton(95, 455, 0x2EF5, 0x2EF7, (int)Buttons.ResignQuest, GumpButtonType.Reply, 0);
AddButton(313, 455, 0x2EEC, 0x2EEE, (int)Buttons.CloseQuest, GumpButtonType.Reply, 0);
}
if (!m_Quest.RenderObjective(this, m_Offer))
{
if (m_Offer)
AddHtmlLocalized(130, 45, 270, 16, 1049010, 0xFFFFFF, false, false); // Quest Offer
else
AddHtmlLocalized(130, 45, 270, 16, 1046026, 0xFFFFFF, false, false); // Quest Log
AddHtmlObject(160, 70, 200, 40, m_Quest.Title, DarkGreen, false, false);
AddHtmlLocalized(98, 140, 312, 16, 1049073, 0x2710, false, false); // Objective:
if (m_Quest.AllObjectives)
AddHtmlLocalized(98, 156, 312, 16, 1072208, 0x2710, false, false); // All of the following
else
AddHtmlLocalized(98, 156, 312, 16, 1072209, 0x2710, false, false); // Only one of the following
int offset = 172;
for (int i = 0; i < m_Quest.Objectives.Count; i++)
{
BaseObjective objective = m_Quest.Objectives[i];
if (objective is SlayObjective)
{
SlayObjective slay = (SlayObjective)objective;
if (slay != null)
{
AddHtmlLocalized(98, offset, 30, 16, 1072204, 0x15F90, false, false); // Slay
AddLabel(133, offset, 0x481, slay.MaxProgress + " " + slay.Name); // %count% + %name%
offset += 16;
if (m_Offer)
{
if (slay.Timed)
{
AddHtmlLocalized(103, offset, 120, 16, 1062379, 0x15F90, false, false); // Est. time remaining:
AddLabel(223, offset, 0x481, FormatSeconds(slay.Seconds)); // %est. time remaining%
offset += 16;
}
continue;
}
if (slay.Region != null)
{
AddHtmlLocalized(103, offset, 312, 20, 1018327, 0x15F90, false, false); // Location
AddHtmlObject(223, offset, 312, 20, slay.Region.Name, White, false, false); // %location%
offset += 16;
}
AddHtmlLocalized(103, offset, 120, 16, 3000087, 0x15F90, false, false); // Total
AddLabel(223, offset, 0x481, slay.CurProgress.ToString()); // %current progress%
offset += 16;
if (ReturnTo() != null)
{
AddHtmlLocalized(103, offset, 120, 16, 1074782, 0x15F90, false, false); // Return to
AddLabel(223, offset, 0x481, ReturnTo()); // %return to%
offset += 16;
}
if (slay.Timed)
{
AddHtmlLocalized(103, offset, 120, 16, 1062379, 0x15F90, false, false); // Est. time remaining:
AddLabel(223, offset, 0x481, FormatSeconds(slay.Seconds)); // %est. time remaining%
offset += 16;
}
}
}
else if (objective is ObtainObjective)
{
ObtainObjective obtain = (ObtainObjective)objective;
if (obtain != null)
{
AddHtmlLocalized(98, offset, 40, 16, 1072205, 0x15F90, false, false); // Obtain
AddLabel(143, offset, 0x481, obtain.MaxProgress + " " + obtain.Name); // %count% + %name%
if (obtain.Image > 0)
AddItem(350, offset, obtain.Image, obtain.Hue); // Image
offset += 16;
if (m_Offer)
{
if (obtain.Timed)
{
AddHtmlLocalized(103, offset, 120, 16, 1062379, 0x15F90, false, false); // Est. time remaining:
AddLabel(223, offset, 0x481, FormatSeconds(obtain.Seconds)); // %est. time remaining%
offset += 16;
}
else if (obtain.Image > 0)
offset += 16;
continue;
}
AddHtmlLocalized(103, offset, 120, 16, 3000087, 0x15F90, false, false); // Total
AddLabel(223, offset, 0x481, obtain.CurProgress.ToString()); // %current progress%
offset += 16;
if (ReturnTo() != null)
{
AddHtmlLocalized(103, offset, 120, 16, 1074782, 0x15F90, false, false); // Return to
AddLabel(223, offset, 0x481, ReturnTo()); // %return to%
offset += 16;
}
if (obtain.Timed)
{
AddHtmlLocalized(103, offset, 120, 16, 1062379, 0x15F90, false, false); // Est. time remaining:
AddLabel(223, offset, 0x481, FormatSeconds(obtain.Seconds)); // %est. time remaining%
offset += 16;
}
}
}
else if (objective is DeliverObjective)
{
DeliverObjective deliver = (DeliverObjective)objective;
if (deliver != null)
{
AddHtmlLocalized(98, offset, 40, 16, 1072207, 0x15F90, false, false); // Deliver
AddLabel(143, offset, 0x481, deliver.MaxProgress + " " + deliver.DeliveryName); // %name%
offset += 16;
AddHtmlLocalized(103, offset, 120, 16, 1072379, 0x15F90, false, false); // Deliver to
AddLabel(223, offset, 0x481, deliver.DestName); // %deliver to%
offset += 16;
if (deliver.Timed)
{
AddHtmlLocalized(103, offset, 120, 16, 1062379, 0x15F90, false, false); // Est. time remaining:
AddLabel(223, offset, 0x481, FormatSeconds(deliver.Seconds)); // %est. time remaining%
offset += 16;
}
}
}
else if (objective is EscortObjective)
{
EscortObjective escort = (EscortObjective)objective;
if (escort != null)
{
AddHtmlLocalized(98, offset, 312, 16, 1072206, 0x15F90, false, false); // Escort to
if (escort.Label == 0)
{
AddHtmlObject(173, offset, 200, 16, escort.Region.Name, White, false, false);
}
else
{
AddHtmlLocalized(173, offset, 200, 16, escort.Label, 0xFFFFFF, false, false);
}
offset += 16;
if (escort.Timed)
{
AddHtmlLocalized(103, offset, 120, 16, 1062379, 0x15F90, false, false); // Est. time remaining:
AddLabel(223, offset, 0x481, FormatSeconds(escort.Seconds)); // %est. time remaining%
offset += 16;
}
}
}
else if (objective is ApprenticeObjective)
{
ApprenticeObjective apprentice = (ApprenticeObjective)objective;
if (apprentice != null)
{
AddHtmlLocalized(98, offset, 200, 16, 1077485, "#" + (1044060 + (int)apprentice.Skill) + "\t" + apprentice.MaxProgress, 0x15F90, false, false); // Increase ~1_SKILL~ to ~2_VALUE~
offset += 16;
}
}
else if (objective is SimpleObjective && ((SimpleObjective)objective).Descriptions != null)
{
SimpleObjective obj = (SimpleObjective)objective;
for (int j = 0; j < obj.Descriptions.Count; j++)
{
offset += 16;
AddLabel(98, offset, 0x481, obj.Descriptions[j]);
}
if (obj.Timed)
{
offset += 16;
AddHtmlLocalized(103, offset, 120, 16, 1062379, 0x15F90, false, false); // Est. time remaining:
AddLabel(223, offset, 0x481, FormatSeconds(obj.Seconds)); // %est. time remaining%
}
}
else if (objective.ObjectiveDescription != null)
{
if (objective.ObjectiveDescription is int)
{
AddHtmlLocalized(98, offset, 310, 300, (int)objective.ObjectiveDescription, 0x15F90, false, false);
}
else if (objective.ObjectiveDescription is string)
{
AddHtmlObject(98, offset, 310, 300, (string)objective.ObjectiveDescription, LightGreen, false, false);
}
}
}
AddButton(130, 430, 0x2EEF, 0x2EF1, (int)Buttons.PreviousPage, GumpButtonType.Reply, 0);
AddButton(275, 430, 0x2EE9, 0x2EEB, (int)Buttons.NextPage, GumpButtonType.Reply, 0);
}
}
public virtual void SecRewards()
{
if (m_Quest == null)
return;
if (m_Offer)
AddHtmlLocalized(130, 45, 270, 16, 1049010, 0xFFFFFF, false, false); // Quest Offer
else
AddHtmlLocalized(130, 45, 270, 16, 1046026, 0xFFFFFF, false, false); // Quest Log
AddHtmlObject(160, 70, 200, 40, m_Quest.Title, DarkGreen, false, false);
AddHtmlLocalized(98, 140, 312, 16, 1072201, 0x2710, false, false); // Reward
int offset = 163;
for (int i = 0; i < m_Quest.Rewards.Count; i++)
{
BaseReward reward = m_Quest.Rewards[i];
if (reward != null)
{
AddImage(105, offset, 0x4B9);
AddHtmlObject(133, offset, 280, m_Quest.Rewards.Count == 1 ? 100 : 16, reward.Name, LightGreen, false, false);
offset += 16;
}
}
if (m_Completed)
{
AddButton(95, 455, 0x2EE0, 0x2EE2, (int)Buttons.AcceptReward, GumpButtonType.Reply, 0);
if (m_Quest.CanRefuseReward)
AddButton(313, 430, 0x2EF2, 0x2EF4, (int)Buttons.RefuseReward, GumpButtonType.Reply, 0);
else
AddButton(313, 455, 0x2EE6, 0x2EE8, (int)Buttons.Close, GumpButtonType.Reply, 0);
}
else if (m_Offer)
{
AddButton(95, 455, 0x2EE0, 0x2EE2, (int)Buttons.AcceptQuest, GumpButtonType.Reply, 0);
AddButton(313, 455, 0x2EF2, 0x2EF4, (int)Buttons.RefuseQuest, GumpButtonType.Reply, 0);
AddButton(130, 430, 0x2EEF, 0x2EF1, (int)Buttons.PreviousPage, GumpButtonType.Reply, 0);
}
else
{
AddButton(95, 455, 0x2EF5, 0x2EF7, (int)Buttons.ResignQuest, GumpButtonType.Reply, 0);
AddButton(313, 455, 0x2EEC, 0x2EEE, (int)Buttons.CloseQuest, GumpButtonType.Reply, 0);
AddButton(130, 430, 0x2EEF, 0x2EF1, (int)Buttons.PreviousPage, GumpButtonType.Reply, 0);
}
}
public virtual void SecRefuse()
{
if (m_Quest == null)
return;
if (m_Offer)
{
AddHtmlLocalized(130, 45, 270, 16, 3006156, 0xFFFFFF, false, false); // Quest Conversation
AddImage(140, 110, 0x4B9);
AddHtmlObject(160, 70, 200, 40, m_Quest.Title, DarkGreen, false, false);
AddHtmlObject(98, 140, 312, 180, m_Quest.Refuse, LightGreen, false, true);
AddButton(313, 455, 0x2EE6, 0x2EE8, (int)Buttons.Close, GumpButtonType.Reply, 0);
}
}
public virtual void SecInProgress()
{
if (m_Quest == null)
return;
AddHtmlLocalized(130, 45, 270, 16, 3006156, 0xFFFFFF, false, false); // Quest Conversation
AddImage(140, 110, 0x4B9);
AddHtmlObject(160, 70, 200, 40, m_Quest.Title, DarkGreen, false, false);
AddHtmlObject(98, 140, 312, 180, m_Quest.Uncomplete, LightGreen, false, true);
AddButton(313, 455, 0x2EE6, 0x2EE8, (int)Buttons.Close, GumpButtonType.Reply, 0);
}
public virtual void SecComplete()
{
if (m_Quest == null)
return;
if (m_Quest.Complete == null)
{
if (QuestHelper.TryDeleteItems(m_Quest))
{
if (QuestHelper.AnyRewards(m_Quest))
{
m_Section = Section.Rewards;
SecRewards();
}
else
m_Quest.GiveRewards();
}
return;
}
AddHtmlLocalized(130, 45, 270, 16, 3006156, 0xFFFFFF, false, false); // Quest Conversation
AddImage(140, 110, 0x4B9);
AddHtmlObject(160, 70, 200, 40, m_Quest.Title, DarkGreen, false, false);
AddHtmlObject(98, 140, 312, 180, m_Quest.Complete, LightGreen, false, true);
AddButton(313, 455, 0x2EE6, 0x2EE8, (int)Buttons.Close, GumpButtonType.Reply, 0);
AddButton(95, 455, 0x2EE9, 0x2EEB, (int)Buttons.Complete, GumpButtonType.Reply, 0);
}
public virtual void SecFailed()
{
if (m_Quest == null)
return;
object fail = m_Quest.FailedMsg;
if (fail == null)
fail = "You have failed to meet the conditions of the quest.";
AddHtmlLocalized(130, 45, 270, 16, 3006156, 0xFFFFFF, false, false); // Quest Conversation
AddImage(140, 110, 0x4B9);
AddHtmlObject(160, 70, 200, 40, m_Quest.Title, DarkGreen, false, false);
AddHtmlObject(98, 140, 312, 240, fail, LightGreen, false, true);
AddButton(313, 455, 0x2EE6, 0x2EE8, (int)Buttons.Close, GumpButtonType.Reply, 0);
}
public virtual string FormatSeconds(int seconds)
{
int hours = seconds / 3600;
seconds -= hours * 3600;
int minutes = seconds / 60;
seconds -= minutes * 60;
if (hours > 0 && minutes > 0)
return hours + ":" + minutes + ":" + seconds;
else if (minutes > 0)
return minutes + ":" + seconds;
else
return seconds.ToString();
}
public virtual string ReturnTo()
{
if (m_Quest == null)
return null;
if (m_Quest.StartingMobile != null)
{
string returnTo = m_Quest.StartingMobile.Name;
if (m_Quest.StartingMobile.Region != null)
returnTo = String.Format("{0} ({1})", returnTo, m_Quest.StartingMobile.Region.Name);
else
returnTo = String.Format("{0}", returnTo);
return returnTo;
}
return null;
}
public override void OnResponse(Server.Network.NetState state, RelayInfo info)
{
if (m_From != null)
m_From.CloseGump(typeof(MondainQuestGump));
switch ( info.ButtonID )
{
// close quest list
case (int)Buttons.Close:
break;
// close quest
case (int)Buttons.CloseQuest:
m_From.SendGump(new MondainQuestGump(m_From));
break;
// accept quest
case (int)Buttons.AcceptQuest:
if (m_Offer)
m_Quest.OnAccept();
break;
// refuse quest
case (int)Buttons.RefuseQuest:
if (m_Offer)
{
m_Quest.OnRefuse();
m_From.SendGump(new MondainQuestGump(m_Quest, Section.Refuse, true));
}
break;
// resign quest
case (int)Buttons.ResignQuest:
if (!m_Offer)
m_From.SendGump(new MondainResignGump(m_Quest));
break;
// accept reward
case (int)Buttons.AcceptReward:
if (!m_Offer && m_Section == Section.Rewards && m_Completed)
m_Quest.GiveRewards();
break;
// refuse reward
case (int)Buttons.RefuseReward:
if (!m_Offer && m_Section == Section.Rewards && m_Completed)
m_Quest.RefuseRewards();
break;
// previous page
case (int)Buttons.PreviousPage:
if (m_Section == Section.Objectives || (m_Section == Section.Rewards && !m_Completed))
{
m_Section = (Section)((int)m_Section - 1);
m_From.SendGump(new MondainQuestGump(m_Quest, m_Section, m_Offer));
}
break;
// next page
case (int)Buttons.NextPage:
if (m_Section == Section.Description || m_Section == Section.Objectives)
{
m_Section = (Section)((int)m_Section + 1);
m_From.SendGump(new MondainQuestGump(m_Quest, m_Section, m_Offer));
}
break;
// player complete quest
case (int)Buttons.Complete:
if (!m_Offer && m_Section == Section.Complete)
{
if (!m_Quest.Completed)
m_From.SendLocalizedMessage(1074861); // You do not have everything you need!
else
{
if (QuestHelper.TryDeleteItems(m_Quest))
{
if (m_Quester != null)
m_Quest.Quester = m_Quester;
if (!QuestHelper.AnyRewards(m_Quest))
m_Quest.GiveRewards();
else
m_From.SendGump(new MondainQuestGump(m_Quest, Section.Rewards, false, true));
}
else
{
m_From.SendLocalizedMessage(1074861); // You do not have everything you need!
}
}
}
break;
// admin complete quest
case (int)Buttons.CompleteQuest:
if ((int)m_From.AccessLevel > (int)AccessLevel.Counselor && m_Quest != null)
QuestHelper.CompleteQuest(m_From, m_Quest);
break;
// show quest
default:
if (m_Section != Section.Main || info.ButtonID >= m_From.Quests.Count + ButtonOffset || info.ButtonID < ButtonOffset)
break;
m_From.SendGump(new MondainQuestGump(m_From.Quests[(int)info.ButtonID - ButtonOffset], Section.Description, false));
break;
}
}
}
}

View File

@@ -0,0 +1,91 @@
using System;
using Server.Gumps;
namespace Server.Engines.Quests
{
public class MondainResignGump : Gump
{
private readonly BaseQuest m_Quest;
public MondainResignGump(BaseQuest quest)
: base(120, 50)
{
if (quest == null)
return;
this.m_Quest = quest;
this.Closable = false;
this.Disposable = true;
this.Dragable = true;
this.Resizable = false;
this.AddPage(0);
this.AddImageTiled(0, 0, 348, 262, 0xA8E);
this.AddAlphaRegion(0, 0, 348, 262);
this.AddImage(0, 15, 0x27A8);
this.AddImageTiled(0, 30, 17, 200, 0x27A7);
this.AddImage(0, 230, 0x27AA);
this.AddImage(15, 0, 0x280C);
this.AddImageTiled(30, 0, 300, 17, 0x280A);
this.AddImage(315, 0, 0x280E);
this.AddImage(15, 244, 0x280C);
this.AddImageTiled(30, 244, 300, 17, 0x280A);
this.AddImage(315, 244, 0x280E);
this.AddImage(330, 15, 0x27A8);
this.AddImageTiled(330, 30, 17, 200, 0x27A7);
this.AddImage(330, 230, 0x27AA);
this.AddImage(333, 2, 0x2716);
this.AddImage(333, 248, 0x2716);
this.AddImage(2, 248, 0x216);
this.AddImage(2, 2, 0x2716);
this.AddHtmlLocalized(25, 22, 200, 20, 1049000, 0x7D00, false, false); // Confirm Quest Cancellation
this.AddImage(25, 40, 0xBBF);
this.AddHtmlLocalized(25, 55, 300, 120, 1060836, 0xFFFFFF, false, false); // This quest will give you valuable information, skills and equipment that will help you advance in the game at a quicker pace.<BR><BR>Are you certain you wish to cancel at this time?
if (quest.ChainID != QuestChain.None)
{
this.AddRadio(25, 145, 0x25F8, 0x25FB, false, (int)Radios.Chain);
this.AddHtmlLocalized(60, 150, 280, 20, 1075023, 0xFFFFFF, false, false); // Yes, I want to quit this entire chain!
}
this.AddRadio(25, 180, 0x25F8, 0x25FB, true, (int)Radios.Quest);
this.AddHtmlLocalized(60, 185, 280, 20, 1049005, 0xFFFFFF, false, false); // Yes, I really want to quit this quest!
this.AddRadio(25, 215, 0x25F8, 0x25FB, false, (int)Radios.None);
this.AddHtmlLocalized(60, 220, 280, 20, 1049006, 0xFFFFFF, false, false); // No, I don't want to quit.
this.AddButton(265, 220, 0xF7, 0xF8, (int)Buttons.Okay, GumpButtonType.Reply, 0); // okay
}
private enum Buttons
{
Close,
Okay,
}
private enum Radios
{
Chain,
Quest,
None,
}
public override void OnResponse(Server.Network.NetState state, RelayInfo info)
{
if (info.ButtonID != (int)Buttons.Okay || this.m_Quest == null)
return;
if (this.m_Quest.ChainID != QuestChain.None && info.IsSwitched((int)Radios.Chain))
{
this.m_Quest.OnResign(true);
}
if (info.IsSwitched((int)Radios.Quest))
{
this.m_Quest.OnResign(false);
}
if (info.IsSwitched((int)Radios.None) && this.m_Quest.Owner != null)
this.m_Quest.Owner.SendGump(new MondainQuestGump(this.m_Quest.Owner));
}
}
}

View File

@@ -0,0 +1,93 @@
using System;
using Server.Commands;
using Server.Network;
using Server.Engines.Quests;
using System.Collections.Generic;
using Server.Items;
namespace Server.Gumps
{
public class QAndAGump : Gump
{
private const int FontColor = 0x000008;
private Mobile m_From;
private QuestionAndAnswerObjective m_Objective;
private BaseQuest m_Quest;
private int m_Index;
public QAndAGump(Mobile owner, BaseQuest quest) : base(0, 0)
{
m_From = owner;
m_Quest = quest;
Closable = false;
Disposable = false;
foreach (BaseObjective objective in quest.Objectives)
{
if (objective is QuestionAndAnswerObjective)
{
m_Objective = (QuestionAndAnswerObjective)objective;
break;
}
}
if (m_Objective == null)
return;
QuestionAndAnswerEntry entry = m_Objective.GetRandomQandA();
if (entry == null)
return;
AddPage(0);
AddImage(0, 0, 1228);
AddImage(40, 78, 95);
AddImageTiled(49, 87, 301, 3, 96);
AddImage(350, 78, 97);
object answer = entry.Answers[Utility.Random(entry.Answers.Length)];
List<object> selections = new List<object>(entry.WrongAnswers);
m_Index = Utility.Random(selections.Count); //Gets correct answer
selections.Insert(m_Index, answer);
AddHtmlLocalized(40, 40, 320, 40, entry.Question, FontColor, false, false); //question
for (int i = 0; i < selections.Count; i++)
{
object selection = selections[i];
AddButton(49, 104 + (i * 40), 2224, 2224, selection == answer ? 1 : 0, GumpButtonType.Reply, 0);
if (selection is int)
AddHtmlLocalized(80, 102 + (i * 40), 200, 18, (int)selection, 0x0, false, false);
else
AddHtml(80, 102 + (i * 40), 200, 18, String.Format( "<BASEFONT COLOR=#{0:X6}>{1}</BASEFONT>", FontColor, selection), false, false);
}
}
public override void OnResponse(NetState state, RelayInfo info)
{
if (info.ButtonID == 1) //correct answer
{
m_Objective.Update(null);
if (m_Quest.Completed)
{
m_Quest.OnCompleted();
m_From.SendGump(new MondainQuestGump(m_Quest, MondainQuestGump.Section.Complete, false, true));
}
else
{
m_From.SendGump(new QAndAGump(m_From, m_Quest));
}
}
else
{
m_From.SendGump(new MondainQuestGump(m_Quest, MondainQuestGump.Section.Failed, false, true));
m_Quest.OnResign(false);
}
}
}
}