diff options
author | Thorbjørn Lindeijer <bjorn@lindeijer.nl> | 2025-05-12 09:28:27 +0200 |
---|---|---|
committer | Thorbjørn Lindeijer <bjorn@lindeijer.nl> | 2025-05-12 09:32:51 +0200 |
commit | b418c02be75bd364aabaae130709a748d23fa42a (patch) | |
tree | 37d155163b2d567b75d0caa181d695726543855e | |
parent | 3f630c76de06a0cbda163342b5ae0bf166aaad9f (diff) | |
download | mana-b418c02be75bd364aabaae130709a748d23fa42a.tar.gz mana-b418c02be75bd364aabaae130709a748d23fa42a.tar.bz2 mana-b418c02be75bd364aabaae130709a748d23fa42a.tar.xz mana-b418c02be75bd364aabaae130709a748d23fa42a.zip |
Fixed handling of "close2" script command
When adding support for SMSG_NPC_COMMAND in d5ebad4e74da011777f9ba1a13f,
I mistakenly assumed the "close dialog" (5) command should just close
the NPC dialog. However, the client is expected to send CMSG_NPC_CLOSE
as well.
Closes #91
Closes #107
Closes #108
-rw-r--r-- | src/event.h | 1 | ||||
-rw-r--r-- | src/gui/npcdialog.cpp | 38 | ||||
-rw-r--r-- | src/net/manaserv/npchandler.cpp | 2 |
3 files changed, 11 insertions, 30 deletions
diff --git a/src/event.h b/src/event.h index 06e38007..d3fdede9 100644 --- a/src/event.h +++ b/src/event.h @@ -76,7 +76,6 @@ public: DoMove, DoUnequip, DoUse, - End, EnginesInitialized, EnginesInitializing, GuiWindowsLoaded, diff --git a/src/gui/npcdialog.cpp b/src/gui/npcdialog.cpp index e2e7b040..16e7db94 100644 --- a/src/gui/npcdialog.cpp +++ b/src/gui/npcdialog.cpp @@ -537,16 +537,11 @@ void NpcEventListener::event(Event::Channel channel, else if (event.getType() == Event::Next) { int id = event.getInt("id"); - NpcDialog *dialog = getDialog(id, false); - if (!dialog) - { - int mNpcId = id; - Net::getNpcHandler()->nextDialog(mNpcId); - return; - } - - dialog->showNextButton(); + if (NpcDialog *dialog = getDialog(id, false)) + dialog->showNextButton(); + else + Net::getNpcHandler()->nextDialog(id); } else if (event.getType() == Event::ClearDialog) { @@ -556,32 +551,19 @@ void NpcEventListener::event(Event::Channel channel, else if (event.getType() == Event::Close) { int id = event.getInt("id"); - NpcDialog *dialog = getDialog(id, false); - if (!dialog) - { - int mNpcId = id; - Net::getNpcHandler()->closeDialog(mNpcId); - return; - } - - dialog->showCloseButton(); - } - else if (event.getType() == Event::CloseDialog) - { - if (NpcDialog *dialog = getDialog(event.getInt("id"), false)) - dialog->setVisible(false); + if (NpcDialog *dialog = getDialog(id, false)) + dialog->showCloseButton(); + else + Net::getNpcHandler()->closeDialog(id); } else if (event.getType() == Event::CloseAll) { NpcDialog::closeAll(); } - else if (event.getType() == Event::End) + else if (event.getType() == Event::CloseDialog) { - int id = event.getInt("id"); - NpcDialog *dialog = getDialog(id, false); - - if (dialog) + if (NpcDialog *dialog = getDialog(event.getInt("id"), false)) dialog->close(); } else if (event.getType() == Event::Post) diff --git a/src/net/manaserv/npchandler.cpp b/src/net/manaserv/npchandler.cpp index 44729654..df139d23 100644 --- a/src/net/manaserv/npchandler.cpp +++ b/src/net/manaserv/npchandler.cpp @@ -101,7 +101,7 @@ void NpcHandler::handleMessage(MessageIn &msg) break; case GPMSG_NPC_ERROR: - event = new Event(Event::End); + event = new Event(Event::CloseDialog); event->setInt("id", npcId); event->trigger(Event::NpcChannel); break; |