diff --git a/apps/openmw/mwgui/dialogue.cpp b/apps/openmw/mwgui/dialogue.cpp index bc7f3a2f1..c6c91b39f 100644 --- a/apps/openmw/mwgui/dialogue.cpp +++ b/apps/openmw/mwgui/dialogue.cpp @@ -381,12 +381,7 @@ namespace MWGui Instead of activating a list item here, send an ObjectDialogueChoice packet to the server and let it decide whether the list item gets activated */ - mwmp::ObjectList* objectList = mwmp::Main::get().getNetworking()->getObjectList(); - objectList->reset(); - objectList->packetOrigin = mwmp::CLIENT_GAMEPLAY; - objectList->addObjectDialogueChoice(mPtr, topic, id); - objectList->sendObjectDialogueChoice(); - + sendDialogueChoicePacket(topic); return; /* End of tes3mp change (major) @@ -442,6 +437,25 @@ namespace MWGui updateTopics(); } + /* + Start of tes3mp addition + + A different event that should be used in multiplayer when clicking on choices + in the dialogue screen, sending DialogueChoice packets to the server so they can + be approved or denied + */ + void DialogueWindow::sendDialogueChoicePacket(const std::string& topic) + { + mwmp::ObjectList* objectList = mwmp::Main::get().getNetworking()->getObjectList(); + objectList->reset(); + objectList->packetOrigin = mwmp::CLIENT_GAMEPLAY; + objectList->addObjectDialogueChoice(mPtr, topic); + objectList->sendObjectDialogueChoice(); + } + /* + End of tes3mp addition + */ + /* Start of tes3mp addition @@ -650,7 +664,18 @@ namespace MWGui mTopicsList->addItem(keyword); Topic* t = new Topic(keyword); - t->eventTopicActivated += MyGUI::newDelegate(this, &DialogueWindow::onTopicActivated); + /* + Start of tes3mp change (major) + + Instead of running DialogueWindow::onSelectListItem() when clicking a highlighted topic, run + onSendDialoguePacket() so the server can approve or deny a dialogue choice + */ + //t->eventTopicActivated += MyGUI::newDelegate(this, &DialogueWindow::onTopicActivated); + t->eventTopicActivated += MyGUI::newDelegate(this, &DialogueWindow::sendDialogueChoicePacket); + /* + End of tes3mp change (major) + */ + mTopicLinks[topicId] = t; mKeywordSearch.seed(topicId, intptr_t(t)); diff --git a/apps/openmw/mwgui/dialogue.hpp b/apps/openmw/mwgui/dialogue.hpp index a6a444a19..6a31e8b7a 100644 --- a/apps/openmw/mwgui/dialogue.hpp +++ b/apps/openmw/mwgui/dialogue.hpp @@ -160,6 +160,18 @@ namespace MWGui bool isCompanion(const MWWorld::Ptr& actor); bool isCompanion(); + /* + Start of tes3mp addition + + A different event that should be used in multiplayer when clicking on choices + in the dialogue screen, sending DialogueChoice packets to the server so they can + be approved or denied + */ + void sendDialogueChoicePacket(const std::string& topic); + /* + End of tes3mp addition + */ + void onSelectListItem(const std::string& topic, int id); void onByeClicked(MyGUI::Widget* _sender); void onMouseWheel(MyGUI::Widget* _sender, int _rel); diff --git a/apps/openmw/mwmp/ObjectList.cpp b/apps/openmw/mwmp/ObjectList.cpp index 483118f4a..b75c20d04 100644 --- a/apps/openmw/mwmp/ObjectList.cpp +++ b/apps/openmw/mwmp/ObjectList.cpp @@ -1009,6 +1009,12 @@ void ObjectList::makeDialogueChoices(MWWorld::CellStore* cellStore) } LOG_APPEND(TimedLog::LOG_VERBOSE, "-- Making dialogue choice of type %i", baseObject.dialogueChoiceType); + + if (baseObject.dialogueChoiceType == DialogueChoiceType::TOPIC) + { + LOG_APPEND(TimedLog::LOG_VERBOSE, "-- topic was %s", baseObject.topicId.c_str()); + } + MWBase::Environment::get().getWindowManager()->getDialogueWindow()->activateDialogueChoice(baseObject.dialogueChoiceType, baseObject.topicId); } else @@ -1268,7 +1274,7 @@ void ObjectList::addObjectLock(const MWWorld::Ptr& ptr, int lockLevel) addBaseObject(baseObject); } -void ObjectList::addObjectDialogueChoice(const MWWorld::Ptr& ptr, std::string dialogueChoice, int guiId) +void ObjectList::addObjectDialogueChoice(const MWWorld::Ptr& ptr, std::string dialogueChoice) { cell = *ptr.getCell()->getCell(); @@ -1307,7 +1313,6 @@ void ObjectList::addObjectDialogueChoice(const MWWorld::Ptr& ptr, std::string di baseObject.topicId = dialogueChoice; } - baseObject.guiId = guiId; addBaseObject(baseObject); } diff --git a/apps/openmw/mwmp/ObjectList.hpp b/apps/openmw/mwmp/ObjectList.hpp index a1c2ade42..8ccf1be88 100644 --- a/apps/openmw/mwmp/ObjectList.hpp +++ b/apps/openmw/mwmp/ObjectList.hpp @@ -61,7 +61,7 @@ namespace mwmp void addObjectSpawn(const MWWorld::Ptr& ptr); void addObjectSpawn(const MWWorld::Ptr& ptr, const MWWorld::Ptr& master, std::string spellId, int effectId, float duration); void addObjectLock(const MWWorld::Ptr& ptr, int lockLevel); - void addObjectDialogueChoice(const MWWorld::Ptr& ptr, std::string dialogueChoice, int guiId); + void addObjectDialogueChoice(const MWWorld::Ptr& ptr, std::string dialogueChoice); void addObjectMiscellaneous(const MWWorld::Ptr& ptr, unsigned int goldPool, float lastGoldRestockHour, int lastGoldRestockDay); void addObjectTrap(const MWWorld::Ptr& ptr, const ESM::Position& pos, bool isDisarmed); void addObjectScale(const MWWorld::Ptr& ptr, float scale);