perf: Migrate Quest gumps to DynamicGump (#2416)
## Summary Migrates the Quest system gumps from legacy `Gump` to `DynamicGump` / `StaticGump<T>`. **Renames** `Engines/ML Quests/Gumps/BaseQuestGump` to **`BaseMLQuestGump`** to disambiguate from the Core quest abstract (`Engines/Quests/Core/QuestSystem.cs`). Both abstracts now extend `DynamicGump`. **Abstract bases**: - `Server.Engines.Quests.BaseQuestGump` (Core) - now `abstract DynamicGump`. Holds constants and a static `AddHtmlObject(ref DynamicGumpBuilder, ...)` helper. Concrete subclasses each provide their own `BuildLayout`. - `Server.Engines.MLQuests.Gumps.BaseMLQuestGump` (ML, renamed) - now `abstract DynamicGump` with a `protected abstract BuildContent(ref DynamicGumpBuilder)` hook. The base's `BuildLayout` draws shared chrome (background art, frame, label header) and then invokes `BuildContent`; subclasses use `BuildPage`, `SetTitle`, `RegisterButton`, `SetPageCount`, and content helpers (`AddDescription`, `AddObjectives`, `AddObjectivesProgress`, `AddRewardsPage`, `AddRewards`, `AddConversation`). **Concrete Core gumps** migrated to `DynamicGump`: - `QuestCancelGump`, `QuestOfferGump` (Core), `QuestObjectivesGump`, `QuestConversationsGump`, `QuestLogUpdatedGump`, `QuestItemInfoGump`, `SheetMusicOfferGump` (Impresario), `PaintedImageGump` (renamed from `PaintedImage.InternalGump`). **Concrete ML gumps** migrated to `DynamicGump` (extending `BaseMLQuestGump` or directly): - `InfoNPCGump`, `QuestConversationGump`, `QuestLogDetailedGump`, `QuestLogGump`, `QuestOfferGump` (ML), `QuestReportBackGump`, `QuestRewardGump`, `QuestCancelConfirmGump`, `RaceChangeConfirmGump`. **`StaticGump<T>` migrations**: - `ScrollOfAbraxusGump` (Dark Tides). Its layout is a single hard-coded cliloc (1060116) with no per-instance dynamic content - safe to cache. **Cliloc rule**: Every other quest dialog bakes per-instance cliloc IDs into its layout (quest titles, NPC names, race-specific prompts, era-conditional progress messages, escort destinations). Per the cliloc rule, baking different cliloc numbers into a cached layout would defeat `StaticGump<T>` caching - so all of these are `DynamicGump`. **Signature changes** to support the migration: - `QuestObjective.RenderMessage`/`RenderProgress` now take `ref DynamicGumpBuilder builder` (15 overrides updated across Collector, Solen Matriarch, Ambitious Solen Queen, Study of the Solen Hive, Terrible Hatchlings, The Summoning, Uzeraan Turmoil, Witch Apprentice, Emino's Undertaking). - ML `BaseObjective.WriteToGump` / `BaseObjectiveInstance.WriteToGump` / `BaseReward.WriteToGump` now take `ref DynamicGumpBuilder` (KillObjective, GainSkillObjective, EscortObjective, CollectObjective, DeliverObjective, BaseReward). **Empty-gump and `Singleton` rules**: All concrete gumps now have private constructors with static `DisplayTo` entry points that null-check the player NetState before allocation. All gumps that shouldn't stack are `Singleton => true`. **External callers updated**: `MLQuest.SendOffer`/`OnRefuse`, `MLQuestEntry.SendProgressGump`/`SendRewardGump`/`SendReportBackGump`, `MLQuestSystem.QuestGumpRequest` and `ViewQuestsCommand`, `BoonCollector` (Darius/Nedrick), `SirHelper.OnDoubleClick` (no longer caches a single shared `InfoNPCGump` instance - `DisplayTo` constructs one per click and the gump's `Singleton => true` handles deduplication), `RaceChangeDeed.OnDoubleClick`, `PaintedImage.OnDoubleClick`, `ScrollOfAbraxus.OnDoubleClick`, `Impresario.OnTalk`, and `PlayerMobile`'s `BaseQuestGump` alias is now `BaseMLQuestGump`. **Concrete subclasses found beyond the listed entry points**: `SheetMusicOfferGump` (in Impresario.cs), `PaintedImageGump` (was `PaintedImage.InternalGump`), `QuestObjectivesGump`, `QuestConversationsGump`, `QuestLogUpdatedGump`, `QuestItemInfoGump` (the Core base has these embedded across `QuestSystem.cs`/`QuestObjective.cs`/`QuestConversation.cs`/`QuestItemInfo.cs`). **Code-standards cleanup**: Renamed legacy `m_X` private fields to `_x` in rewritten files; braces on all control flow.
This commit is contained in:
parent
ab5f615840
commit
b90ac0d481
39 changed files with 1023 additions and 706 deletions
|
|
@ -1,3 +1,4 @@
|
|||
using Server.Gumps;
|
||||
using Server.Items;
|
||||
using Server.Mobiles;
|
||||
|
||||
|
|
@ -9,12 +10,12 @@ namespace Server.Engines.Quests.Ambitious
|
|||
|
||||
public override int MaxProgress => 5;
|
||||
|
||||
public override void RenderProgress(BaseQuestGump gump)
|
||||
public override void RenderProgress(ref DynamicGumpBuilder builder)
|
||||
{
|
||||
if (!Completed)
|
||||
{
|
||||
// Red/Black Solen Queens killed:
|
||||
gump.AddHtmlLocalized(
|
||||
builder.AddHtmlLocalized(
|
||||
70,
|
||||
260,
|
||||
270,
|
||||
|
|
@ -22,13 +23,13 @@ namespace Server.Engines.Quests.Ambitious
|
|||
((AmbitiousQueenQuest)System).RedSolen ? 1054064 : 1054065,
|
||||
BaseQuestGump.Blue
|
||||
);
|
||||
gump.AddLabel(70, 280, 0x64, CurProgress.ToString());
|
||||
gump.AddLabel(100, 280, 0x64, "/");
|
||||
gump.AddLabel(130, 280, 0x64, MaxProgress.ToString());
|
||||
builder.AddLabel(70, 280, 0x64, $"{CurProgress}");
|
||||
builder.AddLabel(100, 280, 0x64, "/");
|
||||
builder.AddLabel(130, 280, 0x64, $"{MaxProgress}");
|
||||
}
|
||||
else
|
||||
{
|
||||
base.RenderProgress(gump);
|
||||
base.RenderProgress(ref builder);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -40,19 +40,37 @@ public partial class PaintedImage : Item
|
|||
return;
|
||||
}
|
||||
|
||||
from.SendGump(new InternalGump(_image));
|
||||
}
|
||||
|
||||
private class InternalGump : Gump
|
||||
{
|
||||
public InternalGump(ImageType image) : base(75, 25)
|
||||
{
|
||||
var info = ImageTypeInfo.Get(image);
|
||||
|
||||
AddBackground(45, 20, 100, 100, 0xA3C);
|
||||
AddBackground(52, 29, 86, 82, 0xBB8);
|
||||
|
||||
AddItem(info.X, info.Y, info.Figurine);
|
||||
}
|
||||
PaintedImageGump.DisplayTo(from, _image);
|
||||
}
|
||||
}
|
||||
|
||||
public class PaintedImageGump : DynamicGump
|
||||
{
|
||||
private readonly ImageType _image;
|
||||
|
||||
public override bool Singleton => true;
|
||||
|
||||
private PaintedImageGump(ImageType image) : base(75, 25) => _image = image;
|
||||
|
||||
public static void DisplayTo(Mobile from, ImageType image)
|
||||
{
|
||||
if (from?.NetState == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
from.SendGump(new PaintedImageGump(image));
|
||||
}
|
||||
|
||||
protected override void BuildLayout(ref DynamicGumpBuilder builder)
|
||||
{
|
||||
builder.AddPage();
|
||||
|
||||
var info = ImageTypeInfo.Get(_image);
|
||||
|
||||
builder.AddBackground(45, 20, 100, 100, 0xA3C);
|
||||
builder.AddBackground(52, 29, 86, 82, 0xBB8);
|
||||
|
||||
builder.AddItem(info.X, info.Y, info.Figurine);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -55,7 +55,7 @@ public partial class Impresario : BaseQuester
|
|||
|
||||
if (obj.IsInRightTheater())
|
||||
{
|
||||
player.SendGump(new SheetMusicOfferGump());
|
||||
SheetMusicOfferGump.DisplayTo(player);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -69,44 +69,60 @@ public class SheetMusicOfferGump : BaseQuestGump
|
|||
{
|
||||
public override bool Singleton => true;
|
||||
|
||||
public SheetMusicOfferGump() : base(75, 25)
|
||||
private SheetMusicOfferGump() : base(75, 25)
|
||||
{
|
||||
Closable = false;
|
||||
}
|
||||
|
||||
AddImage(349, 10, 0x24B0);
|
||||
AddImageTiled(349, 130, 100, 120, 0x24B3);
|
||||
AddImageTiled(149, 10, 200, 140, 0x24AF);
|
||||
AddImageTiled(149, 300, 200, 140, 0x24B5);
|
||||
AddImage(349, 300, 0x24B6);
|
||||
AddImage(35, 10, 0x24AE);
|
||||
AddImageTiled(35, 150, 120, 100, 0x24B1);
|
||||
AddImage(35, 300, 0x24B4);
|
||||
public static void DisplayTo(Mobile from)
|
||||
{
|
||||
if (from?.NetState == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
AddHtmlLocalized(110, 60, 200, 20, 1049069, White); // <STRONG>Conversation Event</STRONG>
|
||||
from.SendGump(new SheetMusicOfferGump());
|
||||
}
|
||||
|
||||
AddImage(65, 14, 0x2776);
|
||||
AddImageTiled(81, 14, 349, 17, 0x2775);
|
||||
AddImage(426, 14, 0x2778);
|
||||
protected override void BuildLayout(ref DynamicGumpBuilder builder)
|
||||
{
|
||||
builder.SetNoClose();
|
||||
|
||||
AddImageTiled(50, 37, 400, 376, 0xA40);
|
||||
AddAlphaRegion(50, 37, 400, 376);
|
||||
builder.AddPage();
|
||||
|
||||
AddImage(0, 0, 0x28C8);
|
||||
builder.AddImage(349, 10, 0x24B0);
|
||||
builder.AddImageTiled(349, 130, 100, 120, 0x24B3);
|
||||
builder.AddImageTiled(149, 10, 200, 140, 0x24AF);
|
||||
builder.AddImageTiled(149, 300, 200, 140, 0x24B5);
|
||||
builder.AddImage(349, 300, 0x24B6);
|
||||
builder.AddImage(35, 10, 0x24AE);
|
||||
builder.AddImageTiled(35, 150, 120, 100, 0x24B1);
|
||||
builder.AddImage(35, 300, 0x24B4);
|
||||
|
||||
AddImageTiled(75, 90, 200, 1, 0x238D);
|
||||
AddImage(75, 58, 0x2635);
|
||||
AddImage(380, 45, 0xDF);
|
||||
builder.AddHtmlLocalized(110, 60, 200, 20, 1049069, White); // <STRONG>Conversation Event</STRONG>
|
||||
|
||||
builder.AddImage(65, 14, 0x2776);
|
||||
builder.AddImageTiled(81, 14, 349, 17, 0x2775);
|
||||
builder.AddImage(426, 14, 0x2778);
|
||||
|
||||
builder.AddImageTiled(50, 37, 400, 376, 0xA40);
|
||||
builder.AddAlphaRegion(50, 37, 400, 376);
|
||||
|
||||
builder.AddImage(0, 0, 0x28C8);
|
||||
|
||||
builder.AddImageTiled(75, 90, 200, 1, 0x238D);
|
||||
builder.AddImage(75, 58, 0x2635);
|
||||
builder.AddImage(380, 45, 0xDF);
|
||||
|
||||
// Sure, I have some sheet music for a Gabriel Piete song. I'd be happy to sell you a copy for 10 gold.
|
||||
AddHtmlLocalized(98, 140, 312, 200, 1055107, LightGreen, false, true);
|
||||
builder.AddHtmlLocalized(98, 140, 312, 200, 1055107, LightGreen, false, true);
|
||||
|
||||
AddRadio(85, 350, 0x25F8, 0x25FB, true, 1);
|
||||
AddHtmlLocalized(120, 356, 280, 20, 1014088, White); // I accept.
|
||||
builder.AddRadio(85, 350, 0x25F8, 0x25FB, true, 1);
|
||||
builder.AddHtmlLocalized(120, 356, 280, 20, 1014088, White); // I accept.
|
||||
|
||||
AddRadio(85, 385, 0x25F8, 0x25FB, false, 0);
|
||||
AddHtmlLocalized(120, 391, 280, 20, 1049012, White); // No thanks, I decline.
|
||||
builder.AddRadio(85, 385, 0x25F8, 0x25FB, false, 0);
|
||||
builder.AddHtmlLocalized(120, 391, 280, 20, 1049012, White); // No thanks, I decline.
|
||||
|
||||
AddButton(340, 390, 0xF7, 0xF8, 1);
|
||||
builder.AddButton(340, 390, 0xF7, 0xF8, 1);
|
||||
}
|
||||
|
||||
public override void OnResponse(NetState sender, in RelayInfo info)
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
using System;
|
||||
using Server.Gumps;
|
||||
|
||||
namespace Server.Engines.Quests.Collector
|
||||
{
|
||||
|
|
@ -8,20 +9,20 @@ namespace Server.Engines.Quests.Collector
|
|||
|
||||
public override int MaxProgress => 6;
|
||||
|
||||
public override void RenderProgress(BaseQuestGump gump)
|
||||
public override void RenderProgress(ref DynamicGumpBuilder builder)
|
||||
{
|
||||
if (!Completed)
|
||||
{
|
||||
// Rainbow pearls collected:
|
||||
gump.AddHtmlObject(70, 260, 270, 100, 1055085, BaseQuestGump.Blue, false, false);
|
||||
BaseQuestGump.AddHtmlObject(ref builder, 70, 260, 270, 100, 1055085, BaseQuestGump.Blue, false, false);
|
||||
|
||||
gump.AddLabel(70, 280, 0x64, CurProgress.ToString());
|
||||
gump.AddLabel(100, 280, 0x64, "/");
|
||||
gump.AddLabel(130, 280, 0x64, MaxProgress.ToString());
|
||||
builder.AddLabel(70, 280, 0x64, $"{CurProgress}");
|
||||
builder.AddLabel(100, 280, 0x64, "/");
|
||||
builder.AddLabel(130, 280, 0x64, $"{MaxProgress}");
|
||||
}
|
||||
else
|
||||
{
|
||||
base.RenderProgress(gump);
|
||||
base.RenderProgress(ref builder);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -311,7 +312,7 @@ namespace Server.Engines.Quests.Collector
|
|||
return CaptureResponse.Invalid;
|
||||
}
|
||||
|
||||
public override void RenderProgress(BaseQuestGump gump)
|
||||
public override void RenderProgress(ref DynamicGumpBuilder builder)
|
||||
{
|
||||
if (!Completed)
|
||||
{
|
||||
|
|
@ -319,9 +320,10 @@ namespace Server.Engines.Quests.Collector
|
|||
{
|
||||
var info = ImageTypeInfo.Get(m_Images[i]);
|
||||
|
||||
gump.AddHtmlObject(70, 260 + 20 * i, 200, 100, info.Name, BaseQuestGump.Blue, false, false);
|
||||
gump.AddLabel(200, 260 + 20 * i, 0x64, " : ");
|
||||
gump.AddHtmlObject(
|
||||
BaseQuestGump.AddHtmlObject(ref builder, 70, 260 + 20 * i, 200, 100, info.Name, BaseQuestGump.Blue, false, false);
|
||||
builder.AddLabel(200, 260 + 20 * i, 0x64, " : ");
|
||||
BaseQuestGump.AddHtmlObject(
|
||||
ref builder,
|
||||
220,
|
||||
260 + 20 * i,
|
||||
100,
|
||||
|
|
@ -335,7 +337,7 @@ namespace Server.Engines.Quests.Collector
|
|||
}
|
||||
else
|
||||
{
|
||||
base.RenderProgress(gump);
|
||||
base.RenderProgress(ref builder);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -58,74 +58,91 @@ namespace Server.Engines.Quests
|
|||
|
||||
public class QuestConversationsGump : BaseQuestGump
|
||||
{
|
||||
private readonly List<QuestConversation> m_Conversations;
|
||||
private readonly List<QuestConversation> _conversations;
|
||||
|
||||
public QuestConversationsGump(QuestConversation conv) : this(new List<QuestConversation> { conv })
|
||||
private QuestConversationsGump(List<QuestConversation> conversations) : base(30, 50) =>
|
||||
_conversations = conversations;
|
||||
|
||||
public static void DisplayTo(Mobile from, QuestConversation conv)
|
||||
{
|
||||
if (from?.NetState == null || conv == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
from.SendGump(new QuestConversationsGump(new List<QuestConversation> { conv }));
|
||||
}
|
||||
|
||||
public QuestConversationsGump(List<QuestConversation> conversations) : base(30, 50)
|
||||
public static void DisplayTo(Mobile from, List<QuestConversation> conversations)
|
||||
{
|
||||
m_Conversations = conversations;
|
||||
|
||||
Closable = false;
|
||||
|
||||
AddPage(0);
|
||||
|
||||
AddImage(349, 10, 9392);
|
||||
AddImageTiled(349, 130, 100, 120, 9395);
|
||||
AddImageTiled(149, 10, 200, 140, 9391);
|
||||
AddImageTiled(149, 250, 200, 140, 9397);
|
||||
AddImage(349, 250, 9398);
|
||||
AddImage(35, 10, 9390);
|
||||
AddImageTiled(35, 150, 120, 100, 9393);
|
||||
AddImage(35, 250, 9396);
|
||||
|
||||
AddHtmlLocalized(110, 60, 200, 20, 1049069, White); // <STRONG>Conversation Event</STRONG>
|
||||
|
||||
AddImage(65, 14, 10102);
|
||||
AddImageTiled(81, 14, 349, 17, 10101);
|
||||
AddImage(426, 14, 10104);
|
||||
|
||||
AddImageTiled(55, 40, 388, 323, 2624);
|
||||
AddAlphaRegion(55, 40, 388, 323);
|
||||
|
||||
AddImageTiled(75, 90, 200, 1, 9101);
|
||||
AddImage(75, 58, 9781);
|
||||
AddImage(380, 45, 223);
|
||||
|
||||
AddButton(220, 335, 2313, 2312, 1);
|
||||
AddImage(0, 0, 10440);
|
||||
|
||||
AddPage(1);
|
||||
|
||||
for (var i = 0; i < conversations.Count; ++i)
|
||||
if (from?.NetState == null || conversations == null || conversations.Count == 0)
|
||||
{
|
||||
var conv = conversations[conversations.Count - 1 - i];
|
||||
return;
|
||||
}
|
||||
|
||||
from.SendGump(new QuestConversationsGump(conversations));
|
||||
}
|
||||
|
||||
protected override void BuildLayout(ref DynamicGumpBuilder builder)
|
||||
{
|
||||
builder.SetNoClose();
|
||||
|
||||
builder.AddPage();
|
||||
|
||||
builder.AddImage(349, 10, 9392);
|
||||
builder.AddImageTiled(349, 130, 100, 120, 9395);
|
||||
builder.AddImageTiled(149, 10, 200, 140, 9391);
|
||||
builder.AddImageTiled(149, 250, 200, 140, 9397);
|
||||
builder.AddImage(349, 250, 9398);
|
||||
builder.AddImage(35, 10, 9390);
|
||||
builder.AddImageTiled(35, 150, 120, 100, 9393);
|
||||
builder.AddImage(35, 250, 9396);
|
||||
|
||||
builder.AddHtmlLocalized(110, 60, 200, 20, 1049069, White); // <STRONG>Conversation Event</STRONG>
|
||||
|
||||
builder.AddImage(65, 14, 10102);
|
||||
builder.AddImageTiled(81, 14, 349, 17, 10101);
|
||||
builder.AddImage(426, 14, 10104);
|
||||
|
||||
builder.AddImageTiled(55, 40, 388, 323, 2624);
|
||||
builder.AddAlphaRegion(55, 40, 388, 323);
|
||||
|
||||
builder.AddImageTiled(75, 90, 200, 1, 9101);
|
||||
builder.AddImage(75, 58, 9781);
|
||||
builder.AddImage(380, 45, 223);
|
||||
|
||||
builder.AddButton(220, 335, 2313, 2312, 1);
|
||||
builder.AddImage(0, 0, 10440);
|
||||
|
||||
builder.AddPage(1);
|
||||
|
||||
for (var i = 0; i < _conversations.Count; ++i)
|
||||
{
|
||||
var conv = _conversations[_conversations.Count - 1 - i];
|
||||
|
||||
if (i > 0)
|
||||
{
|
||||
AddButton(65, 366, 9909, 9911, 0, GumpButtonType.Page, 1 + i);
|
||||
AddHtmlLocalized(90, 367, 50, 20, 1043354, Black); // Previous
|
||||
builder.AddButton(65, 366, 9909, 9911, 0, GumpButtonType.Page, 1 + i);
|
||||
builder.AddHtmlLocalized(90, 367, 50, 20, 1043354, Black); // Previous
|
||||
|
||||
AddPage(1 + i);
|
||||
builder.AddPage(1 + i);
|
||||
}
|
||||
|
||||
AddHtmlObject(70, 110, 365, 220, conv.Message, LightGreen, false, true);
|
||||
AddHtmlObject(ref builder, 70, 110, 365, 220, conv.Message, LightGreen, false, true);
|
||||
|
||||
if (i > 0)
|
||||
{
|
||||
AddButton(420, 366, 9903, 9905, 0, GumpButtonType.Page, i);
|
||||
AddHtmlLocalized(370, 367, 50, 20, 1043353, Black); // Next
|
||||
builder.AddButton(420, 366, 9903, 9905, 0, GumpButtonType.Page, i);
|
||||
builder.AddHtmlLocalized(370, 367, 50, 20, 1043353, Black); // Next
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public override void OnResponse(NetState sender, in RelayInfo info)
|
||||
{
|
||||
for (var i = m_Conversations.Count - 1; i >= 0; --i)
|
||||
for (var i = _conversations.Count - 1; i >= 0; --i)
|
||||
{
|
||||
var qc = m_Conversations[i];
|
||||
var qc = _conversations[i];
|
||||
|
||||
if (!qc.HasBeenRead)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1,3 +1,5 @@
|
|||
using Server.Gumps;
|
||||
|
||||
namespace Server.Engines.Quests
|
||||
{
|
||||
public class QuestItemInfo
|
||||
|
|
@ -15,42 +17,56 @@ namespace Server.Engines.Quests
|
|||
|
||||
public class QuestItemInfoGump : BaseQuestGump
|
||||
{
|
||||
public QuestItemInfoGump(QuestItemInfo[] info) : base(485, 75)
|
||||
private readonly QuestItemInfo[] _info;
|
||||
|
||||
private QuestItemInfoGump(QuestItemInfo[] info) : base(485, 75) => _info = info;
|
||||
|
||||
public static void DisplayTo(Mobile from, QuestItemInfo[] info)
|
||||
{
|
||||
var height = 100 + info.Length * 75;
|
||||
|
||||
AddPage(0);
|
||||
|
||||
AddBackground(5, 10, 145, height, 5054);
|
||||
|
||||
AddImageTiled(13, 20, 125, 10, 2624);
|
||||
AddAlphaRegion(13, 20, 125, 10);
|
||||
|
||||
AddImageTiled(13, height - 10, 128, 10, 2624);
|
||||
AddAlphaRegion(13, height - 10, 128, 10);
|
||||
|
||||
AddImageTiled(13, 20, 10, height - 30, 2624);
|
||||
AddAlphaRegion(13, 20, 10, height - 30);
|
||||
|
||||
AddImageTiled(131, 20, 10, height - 30, 2624);
|
||||
AddAlphaRegion(131, 20, 10, height - 30);
|
||||
|
||||
AddHtmlLocalized(67, 35, 120, 20, 1011233, White); // INFO
|
||||
|
||||
AddImage(62, 52, 9157);
|
||||
AddImage(72, 52, 9157);
|
||||
AddImage(82, 52, 9157);
|
||||
|
||||
AddButton(25, 31, 1209, 1210, 777);
|
||||
|
||||
AddPage(1);
|
||||
|
||||
for (var i = 0; i < info.Length; ++i)
|
||||
if (from?.NetState == null || info == null || info.Length == 0)
|
||||
{
|
||||
var cur = info[i];
|
||||
return;
|
||||
}
|
||||
|
||||
AddHtmlObject(25, 65 + i * 75, 110, 20, cur.Name, 1153, false, false);
|
||||
AddItem(45, 85 + i * 75, cur.ItemID);
|
||||
from.SendGump(new QuestItemInfoGump(info));
|
||||
}
|
||||
|
||||
protected override void BuildLayout(ref DynamicGumpBuilder builder)
|
||||
{
|
||||
var height = 100 + _info.Length * 75;
|
||||
|
||||
builder.AddPage();
|
||||
|
||||
builder.AddBackground(5, 10, 145, height, 5054);
|
||||
|
||||
builder.AddImageTiled(13, 20, 125, 10, 2624);
|
||||
builder.AddAlphaRegion(13, 20, 125, 10);
|
||||
|
||||
builder.AddImageTiled(13, height - 10, 128, 10, 2624);
|
||||
builder.AddAlphaRegion(13, height - 10, 128, 10);
|
||||
|
||||
builder.AddImageTiled(13, 20, 10, height - 30, 2624);
|
||||
builder.AddAlphaRegion(13, 20, 10, height - 30);
|
||||
|
||||
builder.AddImageTiled(131, 20, 10, height - 30, 2624);
|
||||
builder.AddAlphaRegion(131, 20, 10, height - 30);
|
||||
|
||||
builder.AddHtmlLocalized(67, 35, 120, 20, 1011233, White); // INFO
|
||||
|
||||
builder.AddImage(62, 52, 9157);
|
||||
builder.AddImage(72, 52, 9157);
|
||||
builder.AddImage(82, 52, 9157);
|
||||
|
||||
builder.AddButton(25, 31, 1209, 1210, 777);
|
||||
|
||||
builder.AddPage(1);
|
||||
|
||||
for (var i = 0; i < _info.Length; ++i)
|
||||
{
|
||||
var cur = _info[i];
|
||||
|
||||
AddHtmlObject(ref builder, 25, 65 + i * 75, 110, 20, cur.Name, 1153, false, false);
|
||||
builder.AddItem(45, 85 + i * 75, cur.ItemID);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -84,14 +84,24 @@ namespace Server.Engines.Quests
|
|||
CurProgress = MaxProgress;
|
||||
}
|
||||
|
||||
public virtual void RenderMessage(BaseQuestGump gump)
|
||||
public virtual void RenderMessage(ref DynamicGumpBuilder builder)
|
||||
{
|
||||
gump.AddHtmlObject(70, 130, 300, 100, Message, BaseQuestGump.Blue, false, false);
|
||||
BaseQuestGump.AddHtmlObject(ref builder, 70, 130, 300, 100, Message, BaseQuestGump.Blue, false, false);
|
||||
}
|
||||
|
||||
public virtual void RenderProgress(BaseQuestGump gump)
|
||||
public virtual void RenderProgress(ref DynamicGumpBuilder builder)
|
||||
{
|
||||
gump.AddHtmlObject(70, 260, 270, 100, Completed ? 1049077 : 1049078, BaseQuestGump.Blue, false, false);
|
||||
BaseQuestGump.AddHtmlObject(
|
||||
ref builder,
|
||||
70,
|
||||
260,
|
||||
270,
|
||||
100,
|
||||
Completed ? 1049077 : 1049078,
|
||||
BaseQuestGump.Blue,
|
||||
false,
|
||||
false
|
||||
);
|
||||
}
|
||||
|
||||
public virtual void CheckCompletionStatus()
|
||||
|
|
@ -128,116 +138,142 @@ namespace Server.Engines.Quests
|
|||
|
||||
public class QuestLogUpdatedGump : BaseQuestGump
|
||||
{
|
||||
private readonly QuestSystem m_System;
|
||||
private readonly QuestSystem _system;
|
||||
|
||||
public override bool Singleton => true;
|
||||
|
||||
public QuestLogUpdatedGump(QuestSystem system) : base(3, 30)
|
||||
private QuestLogUpdatedGump(QuestSystem system) : base(3, 30) => _system = system;
|
||||
|
||||
public static void DisplayTo(Mobile from, QuestSystem system)
|
||||
{
|
||||
m_System = system;
|
||||
if (from?.NetState == null || system == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
AddPage(0);
|
||||
from.SendGump(new QuestLogUpdatedGump(system));
|
||||
}
|
||||
|
||||
AddImage(20, 5, 1417);
|
||||
protected override void BuildLayout(ref DynamicGumpBuilder builder)
|
||||
{
|
||||
builder.AddPage();
|
||||
|
||||
AddHtmlLocalized(0, 78, 120, 40, 1049079, White); // Quest Log Updated
|
||||
builder.AddImage(20, 5, 1417);
|
||||
|
||||
AddImageTiled(0, 78, 120, 40, 2624);
|
||||
AddAlphaRegion(0, 78, 120, 40);
|
||||
builder.AddHtmlLocalized(0, 78, 120, 40, 1049079, White); // Quest Log Updated
|
||||
|
||||
AddButton(30, 15, 5575, 5576, 1);
|
||||
builder.AddImageTiled(0, 78, 120, 40, 2624);
|
||||
builder.AddAlphaRegion(0, 78, 120, 40);
|
||||
|
||||
builder.AddButton(30, 15, 5575, 5576, 1);
|
||||
}
|
||||
|
||||
public override void OnResponse(NetState sender, in RelayInfo info)
|
||||
{
|
||||
if (info.ButtonID == 1)
|
||||
{
|
||||
m_System.ShowQuestLog();
|
||||
_system.ShowQuestLog();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class QuestObjectivesGump : BaseQuestGump
|
||||
{
|
||||
private readonly List<QuestObjective> m_Objectives;
|
||||
private readonly List<QuestObjective> _objectives;
|
||||
|
||||
public QuestObjectivesGump(QuestObjective obj) : this(new List<QuestObjective> { obj })
|
||||
private QuestObjectivesGump(List<QuestObjective> objectives) : base(90, 50) => _objectives = objectives;
|
||||
|
||||
public static void DisplayTo(Mobile from, QuestObjective obj)
|
||||
{
|
||||
if (from?.NetState == null || obj == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
from.SendGump(new QuestObjectivesGump(new List<QuestObjective> { obj }));
|
||||
}
|
||||
|
||||
public QuestObjectivesGump(List<QuestObjective> objectives) : base(90, 50)
|
||||
public static void DisplayTo(Mobile from, List<QuestObjective> objectives)
|
||||
{
|
||||
m_Objectives = objectives;
|
||||
|
||||
Closable = false;
|
||||
|
||||
AddPage(0);
|
||||
|
||||
AddImage(0, 0, 3600);
|
||||
AddImageTiled(0, 14, 15, 375, 3603);
|
||||
AddImageTiled(380, 14, 14, 375, 3605);
|
||||
AddImage(0, 376, 3606);
|
||||
AddImageTiled(15, 376, 370, 16, 3607);
|
||||
AddImageTiled(15, 0, 370, 16, 3601);
|
||||
AddImage(380, 0, 3602);
|
||||
AddImage(380, 376, 3608);
|
||||
|
||||
AddImageTiled(15, 15, 365, 365, 2624);
|
||||
AddAlphaRegion(15, 15, 365, 365);
|
||||
|
||||
AddImage(20, 87, 1231);
|
||||
AddImage(75, 62, 9307);
|
||||
|
||||
AddHtmlLocalized(117, 35, 230, 20, 1046026, Blue); // Quest Log
|
||||
|
||||
AddImage(77, 33, 9781);
|
||||
AddImage(65, 110, 2104);
|
||||
|
||||
AddHtmlLocalized(79, 106, 230, 20, 1049073, Blue); // Objective:
|
||||
|
||||
AddImageTiled(68, 125, 120, 1, 9101);
|
||||
AddImage(65, 240, 2104);
|
||||
|
||||
AddHtmlLocalized(79, 237, 230, 20, 1049076, Blue); // Progress details:
|
||||
|
||||
AddImageTiled(68, 255, 120, 1, 9101);
|
||||
AddButton(175, 355, 2313, 2312, 1);
|
||||
|
||||
AddImage(341, 15, 10450);
|
||||
AddImage(341, 330, 10450);
|
||||
AddImage(15, 330, 10450);
|
||||
AddImage(15, 15, 10450);
|
||||
|
||||
AddPage(1);
|
||||
|
||||
for (var i = 0; i < objectives.Count; ++i)
|
||||
if (from?.NetState == null || objectives == null || objectives.Count == 0)
|
||||
{
|
||||
var obj = objectives[objectives.Count - 1 - i];
|
||||
return;
|
||||
}
|
||||
|
||||
from.SendGump(new QuestObjectivesGump(objectives));
|
||||
}
|
||||
|
||||
protected override void BuildLayout(ref DynamicGumpBuilder builder)
|
||||
{
|
||||
builder.SetNoClose();
|
||||
|
||||
builder.AddPage();
|
||||
|
||||
builder.AddImage(0, 0, 3600);
|
||||
builder.AddImageTiled(0, 14, 15, 375, 3603);
|
||||
builder.AddImageTiled(380, 14, 14, 375, 3605);
|
||||
builder.AddImage(0, 376, 3606);
|
||||
builder.AddImageTiled(15, 376, 370, 16, 3607);
|
||||
builder.AddImageTiled(15, 0, 370, 16, 3601);
|
||||
builder.AddImage(380, 0, 3602);
|
||||
builder.AddImage(380, 376, 3608);
|
||||
|
||||
builder.AddImageTiled(15, 15, 365, 365, 2624);
|
||||
builder.AddAlphaRegion(15, 15, 365, 365);
|
||||
|
||||
builder.AddImage(20, 87, 1231);
|
||||
builder.AddImage(75, 62, 9307);
|
||||
|
||||
builder.AddHtmlLocalized(117, 35, 230, 20, 1046026, Blue); // Quest Log
|
||||
|
||||
builder.AddImage(77, 33, 9781);
|
||||
builder.AddImage(65, 110, 2104);
|
||||
|
||||
builder.AddHtmlLocalized(79, 106, 230, 20, 1049073, Blue); // Objective:
|
||||
|
||||
builder.AddImageTiled(68, 125, 120, 1, 9101);
|
||||
builder.AddImage(65, 240, 2104);
|
||||
|
||||
builder.AddHtmlLocalized(79, 237, 230, 20, 1049076, Blue); // Progress details:
|
||||
|
||||
builder.AddImageTiled(68, 255, 120, 1, 9101);
|
||||
builder.AddButton(175, 355, 2313, 2312, 1);
|
||||
|
||||
builder.AddImage(341, 15, 10450);
|
||||
builder.AddImage(341, 330, 10450);
|
||||
builder.AddImage(15, 330, 10450);
|
||||
builder.AddImage(15, 15, 10450);
|
||||
|
||||
builder.AddPage(1);
|
||||
|
||||
for (var i = 0; i < _objectives.Count; ++i)
|
||||
{
|
||||
var obj = _objectives[_objectives.Count - 1 - i];
|
||||
|
||||
if (i > 0)
|
||||
{
|
||||
AddButton(55, 346, 9909, 9911, 0, GumpButtonType.Page, 1 + i);
|
||||
AddHtmlLocalized(82, 347, 50, 20, 1043354, White); // Previous
|
||||
builder.AddButton(55, 346, 9909, 9911, 0, GumpButtonType.Page, 1 + i);
|
||||
builder.AddHtmlLocalized(82, 347, 50, 20, 1043354, White); // Previous
|
||||
|
||||
AddPage(1 + i);
|
||||
builder.AddPage(1 + i);
|
||||
}
|
||||
|
||||
obj.RenderMessage(this);
|
||||
obj.RenderProgress(this);
|
||||
obj.RenderMessage(ref builder);
|
||||
obj.RenderProgress(ref builder);
|
||||
|
||||
if (i > 0)
|
||||
{
|
||||
AddButton(317, 346, 9903, 9905, 0, GumpButtonType.Page, i);
|
||||
AddHtmlLocalized(278, 347, 50, 20, 1043353, White); // Next
|
||||
builder.AddButton(317, 346, 9903, 9905, 0, GumpButtonType.Page, i);
|
||||
builder.AddHtmlLocalized(278, 347, 50, 20, 1043353, White); // Next
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public override void OnResponse(NetState sender, in RelayInfo info)
|
||||
{
|
||||
for (var i = m_Objectives.Count - 1; i >= 0; --i)
|
||||
for (var i = _objectives.Count - 1; i >= 0; --i)
|
||||
{
|
||||
var obj = m_Objectives[i];
|
||||
var obj = _objectives[i];
|
||||
|
||||
if (!obj.HasBeenRead)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -244,7 +244,7 @@ namespace Server.Engines.Quests
|
|||
|
||||
public virtual void SendOffer()
|
||||
{
|
||||
From.SendGump(new QuestOfferGump(this));
|
||||
QuestOfferGump.DisplayTo(From, this);
|
||||
}
|
||||
|
||||
public virtual void GetContextMenuEntries(ref PooledRefList<ContextMenuEntry> list)
|
||||
|
|
@ -264,7 +264,7 @@ namespace Server.Engines.Quests
|
|||
|
||||
public virtual void ShowQuestLogUpdated()
|
||||
{
|
||||
From.SendGump(new QuestLogUpdatedGump(this));
|
||||
QuestLogUpdatedGump.DisplayTo(From, this);
|
||||
}
|
||||
|
||||
public virtual void ShowQuestLog()
|
||||
|
|
@ -277,13 +277,13 @@ namespace Server.Engines.Quests
|
|||
gumps.Close<QuestConversationsGump>();
|
||||
gumps.Close<QuestObjectivesGump>();
|
||||
|
||||
gumps.Send(new QuestObjectivesGump(Objectives));
|
||||
QuestObjectivesGump.DisplayTo(From, Objectives);
|
||||
|
||||
var last = Objectives[^1];
|
||||
|
||||
if (last.Info != null)
|
||||
{
|
||||
gumps.Send(new QuestItemInfoGump(last.Info));
|
||||
QuestItemInfoGump.DisplayTo(From, last.Info);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -298,20 +298,20 @@ namespace Server.Engines.Quests
|
|||
gumps.Close<QuestObjectivesGump>();
|
||||
gumps.Close<QuestConversationsGump>();
|
||||
|
||||
gumps.Send(new QuestConversationsGump(Conversations));
|
||||
QuestConversationsGump.DisplayTo(From, Conversations);
|
||||
|
||||
var last = Conversations[^1];
|
||||
|
||||
if (last.Info != null)
|
||||
{
|
||||
From.SendGump(new QuestItemInfoGump(last.Info));
|
||||
QuestItemInfoGump.DisplayTo(From, last.Info);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public virtual void BeginCancelQuest()
|
||||
{
|
||||
From.SendGump(new QuestCancelGump(this));
|
||||
QuestCancelGump.DisplayTo(From, this);
|
||||
}
|
||||
|
||||
public virtual void EndCancelQuest(bool shouldCancel)
|
||||
|
|
@ -394,11 +394,19 @@ namespace Server.Engines.Quests
|
|||
var gumps = From.GetGumps();
|
||||
gumps.Close<QuestItemInfoGump>();
|
||||
gumps.Close<QuestObjectivesGump>();
|
||||
gumps.Send(conv.Logged ? new QuestConversationsGump(Conversations) : new QuestConversationsGump(conv));
|
||||
|
||||
if (conv.Logged)
|
||||
{
|
||||
QuestConversationsGump.DisplayTo(From, Conversations);
|
||||
}
|
||||
else
|
||||
{
|
||||
QuestConversationsGump.DisplayTo(From, conv);
|
||||
}
|
||||
|
||||
if (conv.Info != null)
|
||||
{
|
||||
From.SendGump(new QuestItemInfoGump(conv.Info));
|
||||
QuestItemInfoGump.DisplayTo(From, conv.Info);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -519,142 +527,166 @@ namespace Server.Engines.Quests
|
|||
|
||||
public class QuestCancelGump : BaseQuestGump
|
||||
{
|
||||
private readonly QuestSystem m_System;
|
||||
private readonly QuestSystem _system;
|
||||
|
||||
public QuestCancelGump(QuestSystem system) : base(120, 50)
|
||||
public override bool Singleton => true;
|
||||
|
||||
private QuestCancelGump(QuestSystem system) : base(120, 50) => _system = system;
|
||||
|
||||
public static void DisplayTo(Mobile from, QuestSystem system)
|
||||
{
|
||||
m_System = system;
|
||||
|
||||
Closable = false;
|
||||
|
||||
AddPage(0);
|
||||
|
||||
AddImageTiled(0, 0, 348, 262, 2702);
|
||||
AddAlphaRegion(0, 0, 348, 262);
|
||||
|
||||
AddImage(0, 15, 10152);
|
||||
AddImageTiled(0, 30, 17, 200, 10151);
|
||||
AddImage(0, 230, 10154);
|
||||
|
||||
AddImage(15, 0, 10252);
|
||||
AddImageTiled(30, 0, 300, 17, 10250);
|
||||
AddImage(315, 0, 10254);
|
||||
|
||||
AddImage(15, 244, 10252);
|
||||
AddImageTiled(30, 244, 300, 17, 10250);
|
||||
AddImage(315, 244, 10254);
|
||||
|
||||
AddImage(330, 15, 10152);
|
||||
AddImageTiled(330, 30, 17, 200, 10151);
|
||||
AddImage(330, 230, 10154);
|
||||
|
||||
AddImage(333, 2, 10006);
|
||||
AddImage(333, 248, 10006);
|
||||
AddImage(2, 248, 10006);
|
||||
AddImage(2, 2, 10006);
|
||||
|
||||
AddHtmlLocalized(25, 22, 200, 20, 1049000, 32000); // Confirm Quest Cancellation
|
||||
AddImage(25, 40, 3007);
|
||||
|
||||
if (system.IsTutorial)
|
||||
if (from?.NetState == null || system == null)
|
||||
{
|
||||
AddHtmlLocalized(
|
||||
return;
|
||||
}
|
||||
|
||||
from.SendGump(new QuestCancelGump(system));
|
||||
}
|
||||
|
||||
protected override void BuildLayout(ref DynamicGumpBuilder builder)
|
||||
{
|
||||
builder.SetNoClose();
|
||||
|
||||
builder.AddPage();
|
||||
|
||||
builder.AddImageTiled(0, 0, 348, 262, 2702);
|
||||
builder.AddAlphaRegion(0, 0, 348, 262);
|
||||
|
||||
builder.AddImage(0, 15, 10152);
|
||||
builder.AddImageTiled(0, 30, 17, 200, 10151);
|
||||
builder.AddImage(0, 230, 10154);
|
||||
|
||||
builder.AddImage(15, 0, 10252);
|
||||
builder.AddImageTiled(30, 0, 300, 17, 10250);
|
||||
builder.AddImage(315, 0, 10254);
|
||||
|
||||
builder.AddImage(15, 244, 10252);
|
||||
builder.AddImageTiled(30, 244, 300, 17, 10250);
|
||||
builder.AddImage(315, 244, 10254);
|
||||
|
||||
builder.AddImage(330, 15, 10152);
|
||||
builder.AddImageTiled(330, 30, 17, 200, 10151);
|
||||
builder.AddImage(330, 230, 10154);
|
||||
|
||||
builder.AddImage(333, 2, 10006);
|
||||
builder.AddImage(333, 248, 10006);
|
||||
builder.AddImage(2, 248, 10006);
|
||||
builder.AddImage(2, 2, 10006);
|
||||
|
||||
builder.AddHtmlLocalized(25, 22, 200, 20, 1049000, 32000); // Confirm Quest Cancellation
|
||||
builder.AddImage(25, 40, 3007);
|
||||
|
||||
if (_system.IsTutorial)
|
||||
{
|
||||
builder.AddHtmlLocalized(
|
||||
25,
|
||||
55,
|
||||
300,
|
||||
120,
|
||||
1060836,
|
||||
White
|
||||
BaseQuestGump.White
|
||||
); // 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?
|
||||
}
|
||||
else
|
||||
{
|
||||
AddHtmlLocalized(25, 60, 300, 20, 1049001, White); // You have chosen to abort your quest:
|
||||
AddImage(25, 81, 0x25E7);
|
||||
AddHtmlObject(48, 80, 280, 20, system.Name, DarkGreen, false, false);
|
||||
builder.AddHtmlLocalized(25, 60, 300, 20, 1049001, BaseQuestGump.White); // You have chosen to abort your quest:
|
||||
builder.AddImage(25, 81, 0x25E7);
|
||||
BaseQuestGump.AddHtmlObject(ref builder, 48, 80, 280, 20, _system.Name, BaseQuestGump.DarkGreen, false, false);
|
||||
|
||||
AddHtmlLocalized(25, 120, 280, 20, 1049002, White); // Can this quest be restarted after quitting?
|
||||
AddImage(25, 141, 0x25E7);
|
||||
AddHtmlLocalized(
|
||||
builder.AddHtmlLocalized(25, 120, 280, 20, 1049002, BaseQuestGump.White); // Can this quest be restarted after quitting?
|
||||
builder.AddImage(25, 141, 0x25E7);
|
||||
builder.AddHtmlLocalized(
|
||||
48,
|
||||
140,
|
||||
280,
|
||||
20,
|
||||
system.RestartDelay < TimeSpan.MaxValue ? 1049016 : 1049017,
|
||||
DarkGreen
|
||||
_system.RestartDelay < TimeSpan.MaxValue ? 1049016 : 1049017,
|
||||
BaseQuestGump.DarkGreen
|
||||
); // Yes/No
|
||||
}
|
||||
|
||||
AddRadio(25, 175, 9720, 9723, true, 1);
|
||||
AddHtmlLocalized(60, 180, 280, 20, 1049005, White); // Yes, I really want to quit!
|
||||
builder.AddRadio(25, 175, 9720, 9723, true, 1);
|
||||
builder.AddHtmlLocalized(60, 180, 280, 20, 1049005, BaseQuestGump.White); // Yes, I really want to quit!
|
||||
|
||||
AddRadio(25, 210, 9720, 9723, false, 0);
|
||||
AddHtmlLocalized(60, 215, 280, 20, 1049006, White); // No, I don't want to quit.
|
||||
builder.AddRadio(25, 210, 9720, 9723, false, 0);
|
||||
builder.AddHtmlLocalized(60, 215, 280, 20, 1049006, BaseQuestGump.White); // No, I don't want to quit.
|
||||
|
||||
AddButton(265, 220, 247, 248, 1);
|
||||
builder.AddButton(265, 220, 247, 248, 1);
|
||||
}
|
||||
|
||||
public override void OnResponse(NetState sender, in RelayInfo info)
|
||||
{
|
||||
if (info.ButtonID == 1)
|
||||
{
|
||||
m_System.EndCancelQuest(info.IsSwitched(1));
|
||||
_system.EndCancelQuest(info.IsSwitched(1));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class QuestOfferGump : BaseQuestGump
|
||||
{
|
||||
private readonly QuestSystem m_System;
|
||||
private readonly QuestSystem _system;
|
||||
|
||||
public QuestOfferGump(QuestSystem system) : base(75, 25)
|
||||
public override bool Singleton => true;
|
||||
|
||||
private QuestOfferGump(QuestSystem system) : base(75, 25) => _system = system;
|
||||
|
||||
public static void DisplayTo(Mobile from, QuestSystem system)
|
||||
{
|
||||
m_System = system;
|
||||
if (from?.NetState == null || system == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Closable = false;
|
||||
from.SendGump(new QuestOfferGump(system));
|
||||
}
|
||||
|
||||
AddPage(0);
|
||||
protected override void BuildLayout(ref DynamicGumpBuilder builder)
|
||||
{
|
||||
builder.SetNoClose();
|
||||
|
||||
AddImageTiled(50, 20, 400, 400, 2624);
|
||||
AddAlphaRegion(50, 20, 400, 400);
|
||||
builder.AddPage();
|
||||
|
||||
AddImage(90, 33, 9005);
|
||||
AddHtmlLocalized(130, 45, 270, 20, 1049010, White); // Quest Offer
|
||||
AddImageTiled(130, 65, 175, 1, 9101);
|
||||
builder.AddImageTiled(50, 20, 400, 400, 2624);
|
||||
builder.AddAlphaRegion(50, 20, 400, 400);
|
||||
|
||||
AddImage(140, 110, 1209);
|
||||
AddHtmlObject(160, 108, 250, 20, system.Name, DarkGreen, false, false);
|
||||
builder.AddImage(90, 33, 9005);
|
||||
builder.AddHtmlLocalized(130, 45, 270, 20, 1049010, BaseQuestGump.White); // Quest Offer
|
||||
builder.AddImageTiled(130, 65, 175, 1, 9101);
|
||||
|
||||
AddHtmlObject(98, 140, 312, 200, system.OfferMessage, LightGreen, false, true);
|
||||
builder.AddImage(140, 110, 1209);
|
||||
BaseQuestGump.AddHtmlObject(ref builder, 160, 108, 250, 20, _system.Name, BaseQuestGump.DarkGreen, false, false);
|
||||
|
||||
AddRadio(85, 350, 9720, 9723, true, 1);
|
||||
AddHtmlLocalized(120, 356, 280, 20, 1049011, White); // I accept!
|
||||
BaseQuestGump.AddHtmlObject(ref builder, 98, 140, 312, 200, _system.OfferMessage, BaseQuestGump.LightGreen, false, true);
|
||||
|
||||
AddRadio(85, 385, 9720, 9723, false, 0);
|
||||
AddHtmlLocalized(120, 391, 280, 20, 1049012, White); // No thanks, I decline.
|
||||
builder.AddRadio(85, 350, 9720, 9723, true, 1);
|
||||
builder.AddHtmlLocalized(120, 356, 280, 20, 1049011, BaseQuestGump.White); // I accept!
|
||||
|
||||
AddButton(340, 390, 247, 248, 1);
|
||||
builder.AddRadio(85, 385, 9720, 9723, false, 0);
|
||||
builder.AddHtmlLocalized(120, 391, 280, 20, 1049012, BaseQuestGump.White); // No thanks, I decline.
|
||||
|
||||
AddImageTiled(50, 29, 30, 390, 10460);
|
||||
AddImageTiled(34, 140, 17, 279, 9263);
|
||||
builder.AddButton(340, 390, 247, 248, 1);
|
||||
|
||||
AddImage(48, 135, 10411);
|
||||
AddImage(-16, 285, 10402);
|
||||
AddImage(0, 10, 10421);
|
||||
AddImage(25, 0, 10420);
|
||||
builder.AddImageTiled(50, 29, 30, 390, 10460);
|
||||
builder.AddImageTiled(34, 140, 17, 279, 9263);
|
||||
|
||||
AddImageTiled(83, 15, 350, 15, 10250);
|
||||
builder.AddImage(48, 135, 10411);
|
||||
builder.AddImage(-16, 285, 10402);
|
||||
builder.AddImage(0, 10, 10421);
|
||||
builder.AddImage(25, 0, 10420);
|
||||
|
||||
AddImage(34, 419, 10306);
|
||||
AddImage(442, 419, 10304);
|
||||
AddImageTiled(51, 419, 392, 17, 10101);
|
||||
builder.AddImageTiled(83, 15, 350, 15, 10250);
|
||||
|
||||
AddImageTiled(415, 29, 44, 390, 2605);
|
||||
AddImageTiled(415, 29, 30, 390, 10460);
|
||||
AddImage(425, 0, 10441);
|
||||
builder.AddImage(34, 419, 10306);
|
||||
builder.AddImage(442, 419, 10304);
|
||||
builder.AddImageTiled(51, 419, 392, 17, 10101);
|
||||
|
||||
AddImage(370, 50, 1417);
|
||||
AddImage(379, 60, system.Picture);
|
||||
builder.AddImageTiled(415, 29, 44, 390, 2605);
|
||||
builder.AddImageTiled(415, 29, 30, 390, 10460);
|
||||
builder.AddImage(425, 0, 10441);
|
||||
|
||||
builder.AddImage(370, 50, 1417);
|
||||
builder.AddImage(379, 60, _system.Picture);
|
||||
}
|
||||
|
||||
public override void OnResponse(NetState sender, in RelayInfo info)
|
||||
|
|
@ -663,17 +695,17 @@ namespace Server.Engines.Quests
|
|||
{
|
||||
if (info.IsSwitched(1))
|
||||
{
|
||||
m_System.Accept();
|
||||
_system.Accept();
|
||||
}
|
||||
else
|
||||
{
|
||||
m_System.Decline();
|
||||
_system.Decline();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public abstract class BaseQuestGump : Gump
|
||||
public abstract class BaseQuestGump : DynamicGump
|
||||
{
|
||||
public const int Black = 0x0000;
|
||||
public const int White = 0x7FFF;
|
||||
|
|
@ -681,19 +713,29 @@ namespace Server.Engines.Quests
|
|||
public const int LightGreen = 90000;
|
||||
public const int Blue = 19777215;
|
||||
|
||||
public BaseQuestGump(int x, int y) : base(x, y)
|
||||
protected BaseQuestGump(int x, int y) : base(x, y)
|
||||
{
|
||||
}
|
||||
|
||||
public void AddHtmlObject(int x, int y, int width, int height, object message, int color, bool back, bool scroll)
|
||||
public static void AddHtmlObject(
|
||||
ref DynamicGumpBuilder builder,
|
||||
int x,
|
||||
int y,
|
||||
int width,
|
||||
int height,
|
||||
object message,
|
||||
int color,
|
||||
bool back,
|
||||
bool scroll
|
||||
)
|
||||
{
|
||||
if (message is int html)
|
||||
{
|
||||
AddHtmlLocalized(x, y, width, height, html, color.C16216(), back, scroll);
|
||||
builder.AddHtmlLocalized(x, y, width, height, html, color.C16216(), back, scroll);
|
||||
}
|
||||
else
|
||||
{
|
||||
AddHtml(x, y, width, height, Html.Color($"{message}", color.C16216()), back, scroll);
|
||||
builder.AddHtml(x, y, width, height, Html.Color($"{message}", color.C16216()), background: back, scrollbar: scroll);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -42,7 +42,7 @@ public partial class ScrollOfAbraxus : QuestItem
|
|||
{
|
||||
if (IsChildOf(from.Backpack))
|
||||
{
|
||||
from.SendGump(new ScrollOfAbraxusGump());
|
||||
ScrollOfAbraxusGump.DisplayTo(from);
|
||||
|
||||
if (from is PlayerMobile pm)
|
||||
{
|
||||
|
|
@ -66,14 +66,30 @@ public partial class ScrollOfAbraxus : QuestItem
|
|||
}
|
||||
}
|
||||
|
||||
public class ScrollOfAbraxusGump : Gump
|
||||
public class ScrollOfAbraxusGump : StaticGump<ScrollOfAbraxusGump>
|
||||
{
|
||||
public ScrollOfAbraxusGump() : base(150, 50)
|
||||
{
|
||||
AddPage(0);
|
||||
public override bool Singleton => true;
|
||||
|
||||
AddImage(0, 0, 1228);
|
||||
AddImage(340, 255, 9005);
|
||||
private ScrollOfAbraxusGump() : base(150, 50)
|
||||
{
|
||||
}
|
||||
|
||||
public static void DisplayTo(Mobile from)
|
||||
{
|
||||
if (from?.NetState == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
from.SendGump(new ScrollOfAbraxusGump());
|
||||
}
|
||||
|
||||
protected override void BuildLayout(ref StaticGumpBuilder builder)
|
||||
{
|
||||
builder.AddPage();
|
||||
|
||||
builder.AddImage(0, 0, 1228);
|
||||
builder.AddImage(340, 255, 9005);
|
||||
|
||||
/* Security at the Crystal Cave<BR><BR>
|
||||
*
|
||||
|
|
@ -111,6 +127,6 @@ public class ScrollOfAbraxusGump : Gump
|
|||
*
|
||||
* <I>- Frater Melkeer</I>
|
||||
*/
|
||||
AddHtmlLocalized(25, 36, 350, 210, 1060116, 1, false, true);
|
||||
builder.AddHtmlLocalized(25, 36, 350, 210, 1060116, 1, false, true);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,3 +1,4 @@
|
|||
using Server.Gumps;
|
||||
using Server.Items;
|
||||
using Server.Mobiles;
|
||||
|
||||
|
|
@ -187,19 +188,19 @@ namespace Server.Engines.Quests.Ninja
|
|||
|
||||
public override int MaxProgress => 3;
|
||||
|
||||
public override void RenderProgress(BaseQuestGump gump)
|
||||
public override void RenderProgress(ref DynamicGumpBuilder builder)
|
||||
{
|
||||
if (!Completed)
|
||||
{
|
||||
// Henchmen killed:
|
||||
gump.AddHtmlLocalized(70, 260, 270, 100, 1063207, BaseQuestGump.Blue);
|
||||
gump.AddLabel(70, 280, 0x64, CurProgress.ToString());
|
||||
gump.AddLabel(100, 280, 0x64, "/");
|
||||
gump.AddLabel(130, 280, 0x64, MaxProgress.ToString());
|
||||
builder.AddHtmlLocalized(70, 260, 270, 100, 1063207, BaseQuestGump.Blue);
|
||||
builder.AddLabel(70, 280, 0x64, $"{CurProgress}");
|
||||
builder.AddLabel(100, 280, 0x64, "/");
|
||||
builder.AddLabel(130, 280, 0x64, $"{MaxProgress}");
|
||||
}
|
||||
else
|
||||
{
|
||||
base.RenderProgress(gump);
|
||||
base.RenderProgress(ref builder);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,3 +1,4 @@
|
|||
using Server.Gumps;
|
||||
using Server.Items;
|
||||
using Server.Mobiles;
|
||||
|
||||
|
|
@ -9,12 +10,12 @@ namespace Server.Engines.Quests.Matriarch
|
|||
|
||||
public override int MaxProgress => 7;
|
||||
|
||||
public override void RenderProgress(BaseQuestGump gump)
|
||||
public override void RenderProgress(ref DynamicGumpBuilder builder)
|
||||
{
|
||||
if (!Completed)
|
||||
{
|
||||
// Black/Red Solen Infiltrators killed:
|
||||
gump.AddHtmlLocalized(
|
||||
builder.AddHtmlLocalized(
|
||||
70,
|
||||
260,
|
||||
270,
|
||||
|
|
@ -22,13 +23,13 @@ namespace Server.Engines.Quests.Matriarch
|
|||
((SolenMatriarchQuest)System).RedSolen ? 1054088 : 1054087,
|
||||
BaseQuestGump.Blue
|
||||
);
|
||||
gump.AddLabel(70, 280, 0x64, CurProgress.ToString());
|
||||
gump.AddLabel(100, 280, 0x64, "/");
|
||||
gump.AddLabel(130, 280, 0x64, MaxProgress.ToString());
|
||||
builder.AddLabel(70, 280, 0x64, $"{CurProgress}");
|
||||
builder.AddLabel(100, 280, 0x64, "/");
|
||||
builder.AddLabel(130, 280, 0x64, $"{MaxProgress}");
|
||||
}
|
||||
else
|
||||
{
|
||||
base.RenderProgress(gump);
|
||||
base.RenderProgress(ref builder);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -91,18 +92,18 @@ namespace Server.Engines.Quests.Matriarch
|
|||
|
||||
public override int MaxProgress => 40;
|
||||
|
||||
public override void RenderProgress(BaseQuestGump gump)
|
||||
public override void RenderProgress(ref DynamicGumpBuilder builder)
|
||||
{
|
||||
if (!Completed)
|
||||
{
|
||||
gump.AddHtmlLocalized(70, 260, 270, 100, 1054093, BaseQuestGump.Blue); // Gallons of Water gathered:
|
||||
gump.AddLabel(70, 280, 0x64, (CurProgress / 5).ToString());
|
||||
gump.AddLabel(100, 280, 0x64, "/");
|
||||
gump.AddLabel(130, 280, 0x64, (MaxProgress / 5).ToString());
|
||||
builder.AddHtmlLocalized(70, 260, 270, 100, 1054093, BaseQuestGump.Blue); // Gallons of Water gathered:
|
||||
builder.AddLabel(70, 280, 0x64, (CurProgress / 5).ToString());
|
||||
builder.AddLabel(100, 280, 0x64, "/");
|
||||
builder.AddLabel(130, 280, 0x64, (MaxProgress / 5).ToString());
|
||||
}
|
||||
else
|
||||
{
|
||||
base.RenderProgress(gump);
|
||||
base.RenderProgress(ref builder);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Server.Gumps;
|
||||
|
||||
namespace Server.Engines.Quests.Naturalist
|
||||
{
|
||||
|
|
@ -117,18 +118,18 @@ namespace Server.Engines.Quests.Naturalist
|
|||
}
|
||||
}
|
||||
|
||||
public override void RenderProgress(BaseQuestGump gump)
|
||||
public override void RenderProgress(ref DynamicGumpBuilder builder)
|
||||
{
|
||||
if (!Completed)
|
||||
{
|
||||
gump.AddHtmlLocalized(70, 260, 270, 100, 1054055, BaseQuestGump.Blue); // Solen Nests Studied :
|
||||
gump.AddLabel(70, 280, 0x64, CurProgress.ToString());
|
||||
gump.AddLabel(100, 280, 0x64, "/");
|
||||
gump.AddLabel(130, 280, 0x64, MaxProgress.ToString());
|
||||
builder.AddHtmlLocalized(70, 260, 270, 100, 1054055, BaseQuestGump.Blue); // Solen Nests Studied :
|
||||
builder.AddLabel(70, 280, 0x64, $"{CurProgress}");
|
||||
builder.AddLabel(100, 280, 0x64, "/");
|
||||
builder.AddLabel(130, 280, 0x64, $"{MaxProgress}");
|
||||
}
|
||||
else
|
||||
{
|
||||
base.RenderProgress(gump);
|
||||
base.RenderProgress(ref builder);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -176,14 +177,12 @@ namespace Server.Engines.Quests.Naturalist
|
|||
{
|
||||
public override int Message => 1054048;
|
||||
|
||||
public override void RenderProgress(BaseQuestGump gump)
|
||||
public override void RenderProgress(ref DynamicGumpBuilder builder)
|
||||
{
|
||||
var count = NestArea.NonSpecialCount.ToString();
|
||||
|
||||
gump.AddHtmlLocalized(70, 260, 270, 100, 1054055, BaseQuestGump.Blue); // Solen Nests Studied :
|
||||
gump.AddLabel(70, 280, 0x64, count);
|
||||
gump.AddLabel(100, 280, 0x64, "/");
|
||||
gump.AddLabel(130, 280, 0x64, count);
|
||||
builder.AddHtmlLocalized(70, 260, 270, 100, 1054055, BaseQuestGump.Blue); // Solen Nests Studied :
|
||||
builder.AddLabel(70, 280, 0x64, $"{NestArea.NonSpecialCount}");
|
||||
builder.AddLabel(100, 280, 0x64, "/");
|
||||
builder.AddLabel(130, 280, 0x64, $"{NestArea.NonSpecialCount}");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,3 +1,4 @@
|
|||
using Server.Gumps;
|
||||
using Server.Items;
|
||||
using Server.Mobiles;
|
||||
|
||||
|
|
@ -7,20 +8,20 @@ namespace Server.Engines.Quests.Zento
|
|||
{
|
||||
public override int Message => 1063316;
|
||||
|
||||
public override void RenderProgress(BaseQuestGump gump)
|
||||
public override void RenderProgress(ref DynamicGumpBuilder builder)
|
||||
{
|
||||
if (!Completed)
|
||||
{
|
||||
// Deathwatch Beetle Hatchlings killed:
|
||||
gump.AddHtmlLocalized(70, 260, 270, 100, 1063318, 0xC6BF);
|
||||
builder.AddHtmlLocalized(70, 260, 270, 100, 1063318, 0xC6BF);
|
||||
|
||||
gump.AddLabel(70, 280, 0x64, "0");
|
||||
gump.AddLabel(100, 280, 0x64, "/");
|
||||
gump.AddLabel(130, 280, 0x64, "10");
|
||||
builder.AddLabel(70, 280, 0x64, "0");
|
||||
builder.AddLabel(100, 280, 0x64, "/");
|
||||
builder.AddLabel(130, 280, 0x64, "10");
|
||||
}
|
||||
else
|
||||
{
|
||||
base.RenderProgress(gump);
|
||||
base.RenderProgress(ref builder);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -42,20 +43,20 @@ namespace Server.Engines.Quests.Zento
|
|||
{
|
||||
public override int Message => 1063320;
|
||||
|
||||
public override void RenderProgress(BaseQuestGump gump)
|
||||
public override void RenderProgress(ref DynamicGumpBuilder builder)
|
||||
{
|
||||
if (!Completed)
|
||||
{
|
||||
// Deathwatch Beetle Hatchlings killed:
|
||||
gump.AddHtmlLocalized(70, 260, 270, 100, 1063318, 0xC6BF);
|
||||
builder.AddHtmlLocalized(70, 260, 270, 100, 1063318, 0xC6BF);
|
||||
|
||||
gump.AddLabel(70, 280, 0x64, "1");
|
||||
gump.AddLabel(100, 280, 0x64, "/");
|
||||
gump.AddLabel(130, 280, 0x64, "10");
|
||||
builder.AddLabel(70, 280, 0x64, "1");
|
||||
builder.AddLabel(100, 280, 0x64, "/");
|
||||
builder.AddLabel(130, 280, 0x64, "10");
|
||||
}
|
||||
else
|
||||
{
|
||||
base.RenderProgress(gump);
|
||||
base.RenderProgress(ref builder);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -90,20 +91,20 @@ namespace Server.Engines.Quests.Zento
|
|||
|
||||
public override int MaxProgress => 10;
|
||||
|
||||
public override void RenderProgress(BaseQuestGump gump)
|
||||
public override void RenderProgress(ref DynamicGumpBuilder builder)
|
||||
{
|
||||
if (!Completed)
|
||||
{
|
||||
// Deathwatch Beetle Hatchlings killed:
|
||||
gump.AddHtmlLocalized(70, 260, 270, 100, 1063318, 0xC6BF);
|
||||
builder.AddHtmlLocalized(70, 260, 270, 100, 1063318, 0xC6BF);
|
||||
|
||||
gump.AddLabel(70, 280, 0x64, CurProgress.ToString());
|
||||
gump.AddLabel(100, 280, 0x64, "/");
|
||||
gump.AddLabel(130, 280, 0x64, "10");
|
||||
builder.AddLabel(70, 280, 0x64, $"{CurProgress}");
|
||||
builder.AddLabel(100, 280, 0x64, "/");
|
||||
builder.AddLabel(130, 280, 0x64, "10");
|
||||
}
|
||||
else
|
||||
{
|
||||
base.RenderProgress(gump);
|
||||
base.RenderProgress(ref builder);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,3 +1,4 @@
|
|||
using Server.Gumps;
|
||||
using Server.Items;
|
||||
using Server.Mobiles;
|
||||
|
||||
|
|
@ -42,33 +43,33 @@ namespace Server.Engines.Quests.Doom
|
|||
}
|
||||
}
|
||||
|
||||
public override void RenderMessage(BaseQuestGump gump)
|
||||
public override void RenderMessage(ref DynamicGumpBuilder builder)
|
||||
{
|
||||
if (CurProgress > 0 && CurProgress < MaxProgress)
|
||||
{
|
||||
// Victoria has accepted the Daemon bones, but the requirement is not yet met.
|
||||
gump.AddHtmlObject(70, 130, 300, 100, 1050028, BaseQuestGump.Blue, false, false);
|
||||
BaseQuestGump.AddHtmlObject(ref builder, 70, 130, 300, 100, 1050028, BaseQuestGump.Blue, false, false);
|
||||
}
|
||||
else
|
||||
{
|
||||
base.RenderMessage(gump);
|
||||
base.RenderMessage(ref builder);
|
||||
}
|
||||
}
|
||||
|
||||
public override void RenderProgress(BaseQuestGump gump)
|
||||
public override void RenderProgress(ref DynamicGumpBuilder builder)
|
||||
{
|
||||
if (CurProgress > 0 && CurProgress < MaxProgress)
|
||||
{
|
||||
// Number of bones collected:
|
||||
gump.AddHtmlObject(70, 260, 270, 100, 1050019, BaseQuestGump.Blue, false, false);
|
||||
BaseQuestGump.AddHtmlObject(ref builder, 70, 260, 270, 100, 1050019, BaseQuestGump.Blue, false, false);
|
||||
|
||||
gump.AddLabel(70, 280, 100, CurProgress.ToString());
|
||||
gump.AddLabel(100, 280, 100, "/");
|
||||
gump.AddLabel(130, 280, 100, MaxProgress.ToString());
|
||||
builder.AddLabel(70, 280, 100, $"{CurProgress}");
|
||||
builder.AddLabel(100, 280, 100, "/");
|
||||
builder.AddLabel(130, 280, 100, $"{MaxProgress}");
|
||||
}
|
||||
else
|
||||
{
|
||||
base.RenderProgress(gump);
|
||||
base.RenderProgress(ref builder);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
using Server.Engines.Help;
|
||||
using Server.Gumps;
|
||||
using Server.Items;
|
||||
using Server.Mobiles;
|
||||
|
||||
|
|
@ -138,16 +139,16 @@ namespace Server.Engines.Quests.Haven
|
|||
}
|
||||
}
|
||||
|
||||
public override void RenderProgress(BaseQuestGump gump)
|
||||
public override void RenderProgress(ref DynamicGumpBuilder builder)
|
||||
{
|
||||
if (!Completed)
|
||||
{
|
||||
gump.AddHtmlObject(70, 260, 270, 100, 1049090, BaseQuestGump.Blue, false, false); // Horde Minions killed:
|
||||
gump.AddLabel(70, 280, 0x64, CurProgress.ToString());
|
||||
BaseQuestGump.AddHtmlObject(ref builder, 70, 260, 270, 100, 1049090, BaseQuestGump.Blue, false, false); // Horde Minions killed:
|
||||
builder.AddLabel(70, 280, 0x64, $"{CurProgress}");
|
||||
}
|
||||
else
|
||||
{
|
||||
base.RenderProgress(gump);
|
||||
base.RenderProgress(ref builder);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
using System;
|
||||
using Server.Gumps;
|
||||
using Server.Items;
|
||||
using Server.Mobiles;
|
||||
|
||||
|
|
@ -343,20 +344,20 @@ namespace Server.Engines.Quests.Hag
|
|||
public int Step => Ingredients.Length;
|
||||
public bool BlackheartMet { get; private set; }
|
||||
|
||||
public override void RenderProgress(BaseQuestGump gump)
|
||||
public override void RenderProgress(ref DynamicGumpBuilder builder)
|
||||
{
|
||||
if (!Completed)
|
||||
{
|
||||
var info = IngredientInfo.Get(Ingredient);
|
||||
|
||||
gump.AddHtmlLocalized(70, 260, 270, 100, info.Name, BaseQuestGump.Blue);
|
||||
gump.AddLabel(70, 280, 0x64, CurProgress.ToString());
|
||||
gump.AddLabel(100, 280, 0x64, "/");
|
||||
gump.AddLabel(130, 280, 0x64, info.Quantity.ToString());
|
||||
builder.AddHtmlLocalized(70, 260, 270, 100, info.Name, BaseQuestGump.Blue);
|
||||
builder.AddLabel(70, 280, 0x64, $"{CurProgress}");
|
||||
builder.AddLabel(100, 280, 0x64, "/");
|
||||
builder.AddLabel(130, 280, 0x64, $"{info.Quantity}");
|
||||
}
|
||||
else
|
||||
{
|
||||
base.RenderProgress(gump);
|
||||
base.RenderProgress(ref builder);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue