From ca9599eb7405d97a4c9b05b673053d04319f77ba Mon Sep 17 00:00:00 2001 From: Ethan Moffat Date: Tue, 5 Apr 2022 20:45:14 -0700 Subject: [PATCH] Reimplement quest dialog --- EOLib/Domain/Interact/Quest/QuestActions.cs | 2 +- EndlessClient/Content/ContentProvider.cs | 1 + .../Controllers/NPCInteractionController.cs | 4 + .../Dialogs/Actions/InGameDialogActions.cs | 28 +- .../Dialogs/ActiveDialogRepository.cs | 8 + .../Dialogs/Factories/QuestDialogFactory.cs | 52 ++++ EndlessClient/Dialogs/Old/QuestDialog.cs | 266 ------------------ EndlessClient/Dialogs/QuestDialog.cs | 184 ++++++++++++ EndlessClient/Dialogs/ScrollingListDialog.cs | 9 +- EndlessClient/Old/OldWorld.cs | 1 - 10 files changed, 283 insertions(+), 272 deletions(-) create mode 100644 EndlessClient/Dialogs/Factories/QuestDialogFactory.cs delete mode 100644 EndlessClient/Dialogs/Old/QuestDialog.cs create mode 100644 EndlessClient/Dialogs/QuestDialog.cs diff --git a/EOLib/Domain/Interact/Quest/QuestActions.cs b/EOLib/Domain/Interact/Quest/QuestActions.cs index 5c9e6ef81..0be5b3df5 100644 --- a/EOLib/Domain/Interact/Quest/QuestActions.cs +++ b/EOLib/Domain/Interact/Quest/QuestActions.cs @@ -39,6 +39,6 @@ public void RespondToQuestDialog(DialogReply reply, byte linkId = 0) public interface IQuestActions { - void RespondToQuestDialog(DialogReply reply, byte linkId); + void RespondToQuestDialog(DialogReply reply, byte linkId = 0); } } diff --git a/EndlessClient/Content/ContentProvider.cs b/EndlessClient/Content/ContentProvider.cs index 7994ee752..99080f5fd 100644 --- a/EndlessClient/Content/ContentProvider.cs +++ b/EndlessClient/Content/ContentProvider.cs @@ -89,6 +89,7 @@ private void RefreshTextures() private void RefreshFonts() { _fonts[Constants.FontSize08] = _content.Load(Constants.FontSize08); + _fonts[Constants.FontSize09] = _content.Load(Constants.FontSize09); } } } diff --git a/EndlessClient/Controllers/NPCInteractionController.cs b/EndlessClient/Controllers/NPCInteractionController.cs index 86c96e295..c100374ba 100644 --- a/EndlessClient/Controllers/NPCInteractionController.cs +++ b/EndlessClient/Controllers/NPCInteractionController.cs @@ -32,6 +32,10 @@ public void ShowNPCDialog(INPC npc) _mapNpcActions.RequestShop(npc.Index); _inGameDialogActions.ShowShopDialog(); break; + case EOLib.IO.NPCType.Quest: + _mapNpcActions.RequestQuest(npc.Index, data.VendorID); + _inGameDialogActions.ShowQuestDialog(npc); + break; } } } diff --git a/EndlessClient/Dialogs/Actions/InGameDialogActions.cs b/EndlessClient/Dialogs/Actions/InGameDialogActions.cs index c0d4e9d4e..cbc26599d 100644 --- a/EndlessClient/Dialogs/Actions/InGameDialogActions.cs +++ b/EndlessClient/Dialogs/Actions/InGameDialogActions.cs @@ -1,7 +1,9 @@ using AutomaticTypeMapper; using EndlessClient.Dialogs.Factories; using EOLib.Domain.Character; +using EOLib.Domain.Interact.Quest; using EOLib.Domain.Interact.Shop; +using EOLib.Domain.NPC; using Optional; namespace EndlessClient.Dialogs.Actions @@ -13,19 +15,25 @@ public class InGameDialogActions : IInGameDialogActions private readonly IPaperdollDialogFactory _paperdollDialogFactory; private readonly IActiveDialogRepository _activeDialogRepository; private readonly IShopDataRepository _shopDataRepository; + private readonly IQuestDataRepository _questDataRepository; private readonly IShopDialogFactory _shopDialogFactory; + private readonly IQuestDialogFactory _questDialogFactory; public InGameDialogActions(IFriendIgnoreListDialogFactory friendIgnoreListDialogFactory, IPaperdollDialogFactory paperdollDialogFactory, IActiveDialogRepository activeDialogRepository, IShopDataRepository shopDataRepository, - IShopDialogFactory shopDialogFactory) + IQuestDataRepository questDataRepository, + IShopDialogFactory shopDialogFactory, + IQuestDialogFactory questDialogFactory) { _friendIgnoreListDialogFactory = friendIgnoreListDialogFactory; _paperdollDialogFactory = paperdollDialogFactory; _activeDialogRepository = activeDialogRepository; _shopDataRepository = shopDataRepository; + _questDataRepository = questDataRepository; _shopDialogFactory = shopDialogFactory; + _questDialogFactory = questDialogFactory; } public void ShowFriendListDialog() @@ -79,6 +87,22 @@ public void ShowShopDialog() dlg.Show(); }); } + + public void ShowQuestDialog(INPC npc) + { + _activeDialogRepository.QuestDialog.MatchNone(() => + { + var dlg = _questDialogFactory.Create(npc); + dlg.DialogClosed += (_, _) => + { + _activeDialogRepository.QuestDialog = Option.None(); + _questDataRepository.ResetState(); + }; + _activeDialogRepository.QuestDialog = Option.Some(dlg); + + dlg.Show(); + }); + } } public interface IInGameDialogActions @@ -90,5 +114,7 @@ public interface IInGameDialogActions void ShowPaperdollDialog(ICharacter character, bool isMainCharacter); void ShowShopDialog(); + + void ShowQuestDialog(INPC npc); } } diff --git a/EndlessClient/Dialogs/ActiveDialogRepository.cs b/EndlessClient/Dialogs/ActiveDialogRepository.cs index 97da40ac4..bab7fc4ec 100644 --- a/EndlessClient/Dialogs/ActiveDialogRepository.cs +++ b/EndlessClient/Dialogs/ActiveDialogRepository.cs @@ -15,6 +15,8 @@ public interface IActiveDialogProvider : IDisposable Option ShopDialog { get; } + Option QuestDialog { get; } + IReadOnlyList> ActiveDialogs { get; } } @@ -26,6 +28,8 @@ public interface IActiveDialogRepository : IDisposable Option ShopDialog { get; set; } + Option QuestDialog { get; set; } + IReadOnlyList> ActiveDialogs { get; } } @@ -38,6 +42,8 @@ public class ActiveDialogRepository : IActiveDialogRepository, IActiveDialogProv public Option ShopDialog { get; set; } + public Option QuestDialog { get; set; } + IReadOnlyList> ActiveDialogs { get @@ -47,6 +53,7 @@ IReadOnlyList> ActiveDialogs FriendIgnoreDialog.Map(d => (IXNADialog)d), PaperdollDialog.Map(d => (IXNADialog)d), ShopDialog.Map(d => (IXNADialog)d), + QuestDialog.Map(d => (IXNADialog)d), }.ToList(); } } @@ -63,6 +70,7 @@ public void Dispose() FriendIgnoreDialog = Option.None(); PaperdollDialog = Option.None(); ShopDialog = Option.None(); + QuestDialog = Option.None(); } } } diff --git a/EndlessClient/Dialogs/Factories/QuestDialogFactory.cs b/EndlessClient/Dialogs/Factories/QuestDialogFactory.cs new file mode 100644 index 000000000..b07fab734 --- /dev/null +++ b/EndlessClient/Dialogs/Factories/QuestDialogFactory.cs @@ -0,0 +1,52 @@ +using AutomaticTypeMapper; +using EndlessClient.Content; +using EndlessClient.Dialogs.Services; +using EOLib.Domain.Interact.Quest; +using EOLib.Domain.NPC; +using EOLib.Graphics; +using EOLib.IO.Repositories; + +namespace EndlessClient.Dialogs.Factories +{ + [AutoMappedType] + public class QuestDialogFactory : IQuestDialogFactory + { + private readonly INativeGraphicsManager _nativeGraphicsManager; + private readonly IQuestActions _questActions; + private readonly IEODialogButtonService _dialogButtonService; + private readonly IQuestDataProvider _questDataProvider; + private readonly IENFFileProvider _enfFileProvider; + private readonly IContentProvider _contentProvider; + + public QuestDialogFactory(INativeGraphicsManager nativeGraphicsManager, + IQuestActions questActions, + IEODialogButtonService dialogButtonService, + IQuestDataProvider questDataProvider, + IENFFileProvider enfFileProvider, + IContentProvider contentProvider) + { + _nativeGraphicsManager = nativeGraphicsManager; + _questActions = questActions; + _dialogButtonService = dialogButtonService; + _questDataProvider = questDataProvider; + _enfFileProvider = enfFileProvider; + _contentProvider = contentProvider; + } + + public QuestDialog Create(INPC npc) + { + return new QuestDialog(_nativeGraphicsManager, + _questActions, + _dialogButtonService, + _questDataProvider, + _enfFileProvider, + _contentProvider, + npc); + } + } + + public interface IQuestDialogFactory + { + QuestDialog Create(INPC npc); + } +} diff --git a/EndlessClient/Dialogs/Old/QuestDialog.cs b/EndlessClient/Dialogs/Old/QuestDialog.cs deleted file mode 100644 index 51b7c235c..000000000 --- a/EndlessClient/Dialogs/Old/QuestDialog.cs +++ /dev/null @@ -1,266 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using EndlessClient.Dialogs.Services; -using EndlessClient.Old; -using EndlessClient.UIControls; -using EOLib; -using EOLib.Graphics; -using EOLib.Net.API; -using Microsoft.Xna.Framework; -using Microsoft.Xna.Framework.Graphics; -using XNAControls; -using LabelAlignment = XNAControls.Old.LabelAlignment; -using XNAButton = XNAControls.Old.XNAButton; -using XNADialogResult = XNAControls.Old.XNADialogResult; -using XNALabel = XNAControls.Old.XNALabel; - -namespace EndlessClient.Dialogs.Old -{ - public class QuestDialog : OldScrollingListDialog - { - //public static QuestDialog Instance { get; private set; } - - //public static void Show(PacketAPI api, short npcIndex, short questID, string name) - //{ - // NPCName = name; - - // //note: dialog is created in packet callback! sometimes talking to the quest NPC does nothing (if you already completed)! - - // if (!api.TalkToQuestNPC(npcIndex, questID)) - // EOGame.Instance.DoShowLostConnectionDialogAndReturnToMainMenu(); - //} - - //public static void SetupInstance(PacketAPI api) - //{ - // if(Instance != null) - // Instance.Close(null, XNADialogResult.NO_BUTTON_PRESSED); - - // Instance = new QuestDialog(api); - //} - - private QuestState _stateInfo; - private Dictionary _dialogNames, _links; - private List _pages; - private short _pageIndex; - - private static string NPCName { get; set; } - - private QuestDialog(PacketAPI api) - : base(api) - { - DialogClosing += (o, e) => - { - if (e.Result == XNADialogResult.OK) - { - //if (!m_api.RespondToQuestDialog(_stateInfo, DialogReply.Ok)) - // ((EOGame) Game).DoShowLostConnectionDialogAndReturnToMainMenu(); - } - //Instance = null; - }; - - _dialogNames = new Dictionary(); - _links = new Dictionary(); - _pages = new List(); - - _setBackgroundTexture(((EOGame)Game).GFXManager.TextureFromResource(GFXTypes.PostLoginUI, 67)); - - caption = new XNALabel(new Rectangle(16, 16, 255, 18), Constants.FontSize08pt5) - { - AutoSize = false, - TextAlign = LabelAlignment.MiddleLeft, - ForeColor = ColorConstants.LightGrayText - }; - caption.SetParent(this); - - m_scrollBar.SetParent(null); - m_scrollBar.Close(); - - m_scrollBar = new OldScrollBar(this, new Vector2(252, 44), new Vector2(16, 99), ScrollBarColors.LightOnMed); - m_scrollBar.SetParent(this); - SmallItemStyleMaxItemDisplay = 6; - } - - public override void Update(GameTime gt) - { - try - { - base.Update(gt); - } - catch - { - //Running up against weird thread synchronization error. The call to base XNAControl.Update throws an exception because - // the draw area is 0, but the debugger has the correct values. This is a temporary workaround. Basically re-throws - // the exception when the draw area is ACTUALLY invalid. - if (DrawArea.Width*DrawArea.Height == 0 || children.Any(x => x.DrawArea.Width*x.DrawArea.Height == 0)) - throw; - - base.Update(gt); - } - } - - public void SetDisplayData(QuestState stateinfo, Dictionary dialognames, List pages, Dictionary links) - { - if(dialognames.Count == 0) - throw new ArgumentException("Invalid quest dialog data received from server", nameof(dialognames)); - - _stateInfo = stateinfo; - _dialogNames = dialognames; - _pages = pages; - _links = links; - - _pageIndex = 0; - - _setDialogTitle(); - _setDialogText(); - _setDialogButtons(); - } - - private void _setDialogTitle() - { - string title = NPCName; - if (!_dialogNames.ContainsKey(_stateInfo.VendorID) && _dialogNames.Count == 1) - title += " - " + _dialogNames.First(); - else if(_dialogNames.ContainsKey(_stateInfo.VendorID)) - title += " - " + _dialogNames[_stateInfo.VendorID]; - - caption.Text = title; - caption.ResizeBasedOnText(); - } - - private void _setDialogText() - { - ClearItemList(); - - List rows = new List(); - - TextSplitter ts = new TextSplitter(_pages[_pageIndex], Game.Content.Load(Constants.FontSize08pt5)); - if (!ts.NeedsProcessing) - rows.Add(_pages[_pageIndex]); - else - rows.AddRange(ts.SplitIntoLines()); - - int index = 0; - foreach (var row in rows) - { - var rowItem = new OldListDialogItem(this, OldListDialogItem.ListItemStyle.Small, index++) - { - Text = row - }; - AddItemToList(rowItem, false); - } - - if (_pageIndex < _pages.Count - 1) - return; - - OldListDialogItem item = new OldListDialogItem(this, OldListDialogItem.ListItemStyle.Small, index++) { Text = " " }; - AddItemToList(item, false); - - foreach (var link in _links) - { - OldListDialogItem linkItem = new OldListDialogItem(this, OldListDialogItem.ListItemStyle.Small, index++) - { - Text = link.Value - }; - - var linkIndex = (byte)link.Key; - linkItem.SetPrimaryTextLink(() => _clickLink(linkIndex)); - AddItemToList(linkItem, false); - } - } - - private void _setDialogButtons() - { - dlgButtons.ForEach(btn => - { - btn.SetParent(null); - btn.Close(); - }); - dlgButtons.Clear(); - - bool morePages = _pageIndex < _pages.Count - 1; - bool firstPage = _pageIndex == 0; - - Vector2 firstLoc = new Vector2(89, 153), secondLoc = new Vector2(183, 153); - - if (firstPage && morePages) - { - //show cancel/next - XNAButton cancel = new XNAButton(smallButtonSheet, firstLoc, _getSmallButtonOut(SmallButton.Cancel), _getSmallButtonOver(SmallButton.Cancel)); - cancel.OnClick += (o, e) => Close(cancel, XNADialogResult.Cancel); - cancel.SetParent(this); - dlgButtons.Add(cancel); - - XNAButton next = new XNAButton(smallButtonSheet, secondLoc, _getSmallButtonOut(SmallButton.Next), _getSmallButtonOver(SmallButton.Next)); - next.OnClick += (o, e) => _nextPage(); - next.SetParent(this); - dlgButtons.Add(next); - } - else if (!firstPage && morePages) - { - //show back/next - XNAButton back = new XNAButton(smallButtonSheet, firstLoc, _getSmallButtonOut(SmallButton.Back), _getSmallButtonOver(SmallButton.Back)); - back.OnClick += (o, e) => _prevPage(); - back.SetParent(this); - dlgButtons.Add(back); - - XNAButton next = new XNAButton(smallButtonSheet, secondLoc, _getSmallButtonOut(SmallButton.Next), _getSmallButtonOver(SmallButton.Next)); - next.OnClick += (o, e) => _nextPage(); - next.SetParent(this); - dlgButtons.Add(next); - } - else if (firstPage) - { - //show cancel/ok - XNAButton cancel = new XNAButton(smallButtonSheet, firstLoc, _getSmallButtonOut(SmallButton.Cancel), _getSmallButtonOver(SmallButton.Cancel)); - cancel.OnClick += (o, e) => Close(cancel, XNADialogResult.Cancel); - cancel.SetParent(this); - dlgButtons.Add(cancel); - - XNAButton ok = new XNAButton(smallButtonSheet, secondLoc, _getSmallButtonOut(SmallButton.Ok), _getSmallButtonOver(SmallButton.Ok)); - ok.OnClick += (o, e) => Close(ok, XNADialogResult.OK); - ok.SetParent(this); - dlgButtons.Add(ok); - } - else - { - //show back/ok - XNAButton back = new XNAButton(smallButtonSheet, firstLoc, _getSmallButtonOut(SmallButton.Back), _getSmallButtonOver(SmallButton.Back)); - back.OnClick += (o, e) => _prevPage(); - back.SetParent(this); - dlgButtons.Add(back); - - XNAButton ok = new XNAButton(smallButtonSheet, secondLoc, _getSmallButtonOut(SmallButton.Ok), _getSmallButtonOver(SmallButton.Ok)); - ok.OnClick += (o, e) => Close(ok, XNADialogResult.OK); - ok.SetParent(this); - dlgButtons.Add(ok); - } - } - - private void _clickLink(byte linkID) - { - //send to server with linkID - //if (!m_api.RespondToQuestDialog(_stateInfo, DialogReply.Link, linkID)) - //{ - // Close(null, XNADialogResult.NO_BUTTON_PRESSED); - // ((EOGame)Game).DoShowLostConnectionDialogAndReturnToMainMenu(); - //} - - Close(null, XNADialogResult.Cancel); - } - - private void _nextPage() - { - _pageIndex++; - _setDialogText(); - _setDialogButtons(); - } - - private void _prevPage() - { - _pageIndex--; - _setDialogText(); - _setDialogButtons(); - } - } -} diff --git a/EndlessClient/Dialogs/QuestDialog.cs b/EndlessClient/Dialogs/QuestDialog.cs new file mode 100644 index 000000000..6b178d147 --- /dev/null +++ b/EndlessClient/Dialogs/QuestDialog.cs @@ -0,0 +1,184 @@ +using EndlessClient.Content; +using EndlessClient.Dialogs.Services; +using EOLib; +using EOLib.Domain.Interact.Quest; +using EOLib.Domain.NPC; +using EOLib.Graphics; +using EOLib.IO.Repositories; +using Microsoft.Xna.Framework; +using Optional; +using System; +using System.Collections.Generic; +using XNAControls; + +namespace EndlessClient.Dialogs +{ + public class QuestDialog : ScrollingListDialog + { + private readonly IQuestActions _questActions; + private readonly IQuestDataProvider _questDataProvider; + private readonly IENFFileProvider _enfFileProvider; + private readonly IContentProvider _contentProvider; + private readonly INPC _questNpc; + + private Option _cachedData; + + private int _pageIndex = 0; + private bool _actionClicked = false; + + public QuestDialog(INativeGraphicsManager nativeGraphicsManager, + IQuestActions questActions, + IEODialogButtonService dialogButtonService, + IQuestDataProvider questDataProvider, + IENFFileProvider enfFileProvider, + IContentProvider contentProvider, + INPC questNpc) + : base(nativeGraphicsManager, dialogButtonService, dialogSize: ScrollingListDialogSize.SmallDialog) + { + _questActions = questActions; + _questDataProvider = questDataProvider; + _enfFileProvider = enfFileProvider; + _contentProvider = contentProvider; + _questNpc = questNpc; + + _cachedData = Option.None(); + + ListItemType = ListDialogItem.ListItemStyle.Small; + + NextAction += NextPage; + BackAction += PreviousPage; + DialogClosing += (_, e) => + { + if (e.Result == XNADialogResult.OK) + _questActions.RespondToQuestDialog(DialogReply.Ok); + }; + } + + protected override void OnUpdateControl(GameTime gameTime) + { + _questDataProvider.QuestDialogData.MatchSome(data => UpdateCachedDataIfNeeded(_cachedData, data)); + base.OnUpdateControl(gameTime); + } + + private void UpdateCachedDataIfNeeded(Option cachedData, IQuestDialogData repoData) + { + cachedData.Match( + some: cached => + { + _cachedData = Option.Some(repoData); + if (!cached.Equals(repoData)) + UpdateDialogControls(repoData); + }, + none: () => + { + _cachedData = Option.Some(repoData); + UpdateDialogControls(repoData); + }); + } + + private void UpdateDialogControls(IQuestDialogData repoData) + { + _pageIndex = 0; + + UpdateTitle(repoData); + UpdateDialogDisplayText(repoData); + UpdateButtons(repoData); + } + + private void UpdateTitle(IQuestDialogData repoData) + { + var npcName = _enfFileProvider.ENFFile[_questNpc.ID].Name; + var titleText = npcName; + if (!repoData.DialogTitles.ContainsKey(repoData.VendorID) && repoData.DialogTitles.Count == 1) + titleText += $" - {repoData.DialogTitles[0]}"; + else if (repoData.DialogTitles.ContainsKey(repoData.VendorID)) + titleText += $" - {repoData.DialogTitles[repoData.VendorID]}"; + + _titleText.Text = titleText; + _titleText.ResizeBasedOnText(); + } + + private void UpdateDialogDisplayText(IQuestDialogData repoData) + { + ClearItemList(); + + var rows = new List(); + + var ts = new TextSplitter(repoData.PageText[_pageIndex], _contentProvider.Fonts[Constants.FontSize09]); + if (!ts.NeedsProcessing) + rows.Add(repoData.PageText[_pageIndex]); + else + rows.AddRange(ts.SplitIntoLines()); + + int index = 0; + foreach (var row in rows) + { + var rowItem = new ListDialogItem(this, ListDialogItem.ListItemStyle.Small, index++) + { + PrimaryText = row, + }; + + AddItemToList(rowItem, sortList: false); + } + + // The links are only shown on the last page of the quest dialog + if (_pageIndex < repoData.PageText.Count - 1) + return; + + var item = new ListDialogItem(this, ListDialogItem.ListItemStyle.Small, index++) { PrimaryText = " " }; + AddItemToList(item, sortList: false); + + foreach (var action in repoData.Actions) + { + var actionItem = new ListDialogItem(this, ListDialogItem.ListItemStyle.Small, index++) + { + PrimaryText = action.DisplayText + }; + + var linkIndex = (byte)action.ActionID; + actionItem.SetPrimaryClickAction((_, _) => + { + _questActions.RespondToQuestDialog(DialogReply.Link, linkIndex); + Close(XNADialogResult.Cancel); + }); + + AddItemToList(actionItem, sortList: false); + } + } + + private void UpdateButtons(IQuestDialogData repoData) + { + bool morePages = _pageIndex < repoData.PageText.Count - 1; + bool firstPage = _pageIndex == 0; + + if (firstPage && morePages) + Buttons = ScrollingListDialogButtons.CancelNext; + else if (!firstPage && morePages) + Buttons = ScrollingListDialogButtons.BackNext; + else if (firstPage) + Buttons = ScrollingListDialogButtons.CancelOk; + else + Buttons = ScrollingListDialogButtons.BackOk; + } + + private void NextPage(object sender, EventArgs e) + { + _cachedData.MatchSome(data => + { + _pageIndex++; + UpdateDialogDisplayText(data); + UpdateButtons(data); + }); + } + + private void PreviousPage(object sender, EventArgs e) + { + _cachedData.MatchSome(data => + { + _pageIndex--; + UpdateDialogDisplayText(data); + UpdateButtons(data); + }); + } + } +} diff --git a/EndlessClient/Dialogs/ScrollingListDialog.cs b/EndlessClient/Dialogs/ScrollingListDialog.cs index e9a1a8afa..2d8c34f5b 100644 --- a/EndlessClient/Dialogs/ScrollingListDialog.cs +++ b/EndlessClient/Dialogs/ScrollingListDialog.cs @@ -67,8 +67,11 @@ public ListDialogItem.ListItemStyle ListItemType get => _listItemType; set { + if (value == ListDialogItem.ListItemStyle.Large && DialogSize == ScrollingListDialogSize.SmallDialog) + throw new InvalidOperationException("Can't use large ListDialogItem with small scrolling dialog"); + _listItemType = value; - ItemsToShow = _listItemType == ListDialogItem.ListItemStyle.Large ? 5 : 12; + ItemsToShow = _listItemType == ListDialogItem.ListItemStyle.Large ? 5 : DialogSize == ScrollingListDialogSize.SmallDialog ? 6 : 12; _scrollBar.LinesToRender = ItemsToShow; } } @@ -140,7 +143,7 @@ public ScrollingListDialogButtons Buttons _titleText = new XNALabel(Constants.FontSize09) { - DrawArea = new Rectangle(16, 13, 253, 19), // todo: might need to use (16, 16, 255, 18) for SmallDialog + DrawArea = isLargeDialog ? new Rectangle(16, 13, 253, 19) : new Rectangle(16, 16, 255, 18), AutoSize = false, TextAlign = LabelAlignment.MiddleLeft, ForeColor = ColorConstants.LightGrayText @@ -207,7 +210,7 @@ public ScrollingListDialogButtons Buttons _cancel.SetParentControl(this); _cancel.OnClick += (_, _) => { if (!_otherClicked) { Close(XNADialogResult.Cancel); } }; - ItemsToShow = ListItemType == ListDialogItem.ListItemStyle.Large ? 5 : 12; + ItemsToShow = ListItemType == ListDialogItem.ListItemStyle.Large ? 5 : DialogSize == ScrollingListDialogSize.SmallDialog ? 6 : 12; _button1Position = new Vector2(isLargeDialog ? 48 : 89, yCoord); _button2Position = new Vector2(isLargeDialog ? 144 : 183, yCoord); diff --git a/EndlessClient/Old/OldWorld.cs b/EndlessClient/Old/OldWorld.cs index 2a4ff2a59..e03dd4850 100644 --- a/EndlessClient/Old/OldWorld.cs +++ b/EndlessClient/Old/OldWorld.cs @@ -288,7 +288,6 @@ public static void IgnoreDialogs(XNAControl control) control.IgnoreDialog(typeof(LockerDialog)); control.IgnoreDialog(typeof(TradeDialog)); control.IgnoreDialog(typeof(SkillmasterDialog)); - control.IgnoreDialog(typeof(QuestDialog)); control.IgnoreDialog(typeof(QuestProgressDialog)); }