diff --git a/apps/openmw-mp/CMakeLists.txt b/apps/openmw-mp/CMakeLists.txt index 0021e0936..3ed42cda3 100644 --- a/apps/openmw-mp/CMakeLists.txt +++ b/apps/openmw-mp/CMakeLists.txt @@ -78,9 +78,9 @@ set(SERVER Script/Functions/Actors.cpp Script/Functions/World.cpp Script/Functions/Miscellaneous.cpp Script/Functions/Cells.cpp Script/Functions/CharClass.cpp Script/Functions/Chat.cpp - Script/Functions/Factions.cpp Script/Functions/GUI.cpp Script/Functions/Items.cpp - Script/Functions/Positions.cpp Script/Functions/Quests.cpp Script/Functions/Spells.cpp - Script/Functions/Stats.cpp Script/Functions/Timer.cpp + Script/Functions/Dialogue.cpp Script/Functions/Factions.cpp Script/Functions/GUI.cpp + Script/Functions/Items.cpp Script/Functions/Positions.cpp Script/Functions/Quests.cpp + Script/Functions/Spells.cpp Script/Functions/Stats.cpp Script/Functions/Timer.cpp ProcessorInitializer.cpp PlayerProcessor.cpp ActorProcessor.cpp WorldProcessor.cpp diff --git a/apps/openmw-mp/Player.hpp b/apps/openmw-mp/Player.hpp index e6fb95146..c6bdc43d8 100644 --- a/apps/openmw-mp/Player.hpp +++ b/apps/openmw-mp/Player.hpp @@ -75,6 +75,7 @@ public: mwmp::SpellbookChanges spellbookChangesBuffer; mwmp::JournalChanges journalChangesBuffer; mwmp::FactionChanges factionChangesBuffer; + mwmp::TopicChanges topicChangesBuffer; private: CellController::TContainer cells; diff --git a/apps/openmw-mp/Script/Functions/Dialogue.cpp b/apps/openmw-mp/Script/Functions/Dialogue.cpp new file mode 100644 index 000000000..b467640fe --- /dev/null +++ b/apps/openmw-mp/Script/Functions/Dialogue.cpp @@ -0,0 +1,49 @@ +#include "Dialogue.hpp" +#include +#include +#include +#include + +using namespace mwmp; + +unsigned int DialogueFunctions::GetTopicChangesSize(unsigned short pid) noexcept +{ + Player *player; + GET_PLAYER(pid, player, 0); + + return player->topicChanges.count; +} + +void DialogueFunctions::AddTopic(unsigned short pid, const char* topicId) noexcept +{ + Player *player; + GET_PLAYER(pid, player, ); + + mwmp::Topic topic; + topic.topicId = topicId; + + player->topicChangesBuffer.topics.push_back(topic); +} + +const char *DialogueFunctions::GetTopicId(unsigned short pid, unsigned int i) noexcept +{ + Player *player; + GET_PLAYER(pid, player, ""); + + if (i >= player->topicChanges.count) + return "invalid"; + + return player->topicChanges.topics.at(i).topicId.c_str(); +} + +void DialogueFunctions::SendTopicChanges(unsigned short pid) noexcept +{ + Player *player; + GET_PLAYER(pid, player, ); + + std::swap(player->topicChanges, player->topicChangesBuffer); + mwmp::Networking::get().getPlayerPacketController()->GetPacket(ID_PLAYER_TOPIC)->setPlayer(player); + mwmp::Networking::get().getPlayerPacketController()->GetPacket(ID_PLAYER_TOPIC)->Send(false); + player->topicChanges = std::move(player->topicChangesBuffer); + player->topicChangesBuffer.topics.clear(); +} diff --git a/apps/openmw-mp/Script/Functions/Dialogue.hpp b/apps/openmw-mp/Script/Functions/Dialogue.hpp new file mode 100644 index 000000000..db16fe201 --- /dev/null +++ b/apps/openmw-mp/Script/Functions/Dialogue.hpp @@ -0,0 +1,28 @@ +#ifndef OPENMW_DIALOGUEAPI_HPP +#define OPENMW_DIALOGUEAPI_HPP + +#define DIALOGUEAPI \ + {"GetTopicChangesSize", DialogueFunctions::GetTopicChangesSize},\ + \ + {"AddTopic", DialogueFunctions::AddTopic},\ + \ + {"GetTopicId", DialogueFunctions::GetTopicId},\ + \ + {"SendTopicChanges", DialogueFunctions::SendTopicChanges} + +class DialogueFunctions +{ +public: + + static unsigned int GetTopicChangesSize(unsigned short pid) noexcept; + + static void AddTopic(unsigned short pid, const char* topicId) noexcept; + + static const char *GetTopicId(unsigned short pid, unsigned int i) noexcept; + + static void SendTopicChanges(unsigned short pid) noexcept; +private: + +}; + +#endif //OPENMW_DIALOGUEAPI_HPP diff --git a/apps/openmw-mp/Script/ScriptFunctions.hpp b/apps/openmw-mp/Script/ScriptFunctions.hpp index 7a0f7e47c..f700298ce 100644 --- a/apps/openmw-mp/Script/ScriptFunctions.hpp +++ b/apps/openmw-mp/Script/ScriptFunctions.hpp @@ -5,18 +5,19 @@ #ifndef SCRIPTFUNCTIONS_HPP #define SCRIPTFUNCTIONS_HPP -#include