diff --git a/apps/openmw-mp/Networking.cpp b/apps/openmw-mp/Networking.cpp index 2c1bc5a45..65b73c1b1 100644 --- a/apps/openmw-mp/Networking.cpp +++ b/apps/openmw-mp/Networking.cpp @@ -247,6 +247,8 @@ void Networking::processPlayerPacket(RakNet::Packet *packet) DEBUG_PRINTF("ID_GAME_JOURNAL\n"); myPacket->Read(player); + Script::Call(player->getId(), player->packetSpells.action); + break; } diff --git a/apps/openmw-mp/Script/ScriptFunctions.hpp b/apps/openmw-mp/Script/ScriptFunctions.hpp index 3021d18b7..c3428e7f4 100644 --- a/apps/openmw-mp/Script/ScriptFunctions.hpp +++ b/apps/openmw-mp/Script/ScriptFunctions.hpp @@ -111,6 +111,7 @@ public: {"OnPlayerChangeEquipment", Function()}, {"OnPlayerChangeInventory", Function()}, {"OnPlayerChangeSpellbook", Function()}, + {"OnPlayerChangeJournal", Function()}, {"OnPlayerSendMessage", Function()}, {"OnPlayerEndCharGen", Function()}, {"OnGUIAction", Function()} diff --git a/apps/openmw/mwmp/LocalPlayer.cpp b/apps/openmw/mwmp/LocalPlayer.cpp index 4876613a4..66683d8f6 100644 --- a/apps/openmw/mwmp/LocalPlayer.cpp +++ b/apps/openmw/mwmp/LocalPlayer.cpp @@ -998,6 +998,16 @@ void LocalPlayer::sendSpellRemoval(const ESM::Spell &spell) LOG_MESSAGE_SIMPLE(Log::LOG_INFO, "Not implemented."); } +void LocalPlayer::sendJournalEntry(const std::string& id, int index, const MWWorld::Ptr& actor) +{ + Main::get().getNetworking()->getPlayerPacket(ID_GAME_JOURNAL)->Send(this); +} + +void LocalPlayer::sendJournalIndex(const std::string& id, int index) +{ + Main::get().getNetworking()->getPlayerPacket(ID_GAME_JOURNAL)->Send(this); +} + void LocalPlayer::sendAttack(Attack::TYPE type) { MWMechanics::DrawState_ state = getPlayerPtr().getClass().getNpcStats(getPlayerPtr()).getDrawState(); diff --git a/apps/openmw/mwmp/LocalPlayer.hpp b/apps/openmw/mwmp/LocalPlayer.hpp index 155d37819..a25ee76f1 100644 --- a/apps/openmw/mwmp/LocalPlayer.hpp +++ b/apps/openmw/mwmp/LocalPlayer.hpp @@ -60,6 +60,8 @@ namespace mwmp void sendSpellAddition(const ESM::Spell &spell); void sendSpellRemoval(std::string id); void sendSpellRemoval(const ESM::Spell &spell); + void sendJournalEntry(const std::string& id, int index, const MWWorld::Ptr& actor); + void sendJournalIndex(const std::string& id, int index); void sendAttack(Attack::TYPE type); void prepareAttack(Attack::TYPE type, bool state); diff --git a/apps/openmw/mwmp/Networking.cpp b/apps/openmw/mwmp/Networking.cpp index f557622ad..d449e3583 100644 --- a/apps/openmw/mwmp/Networking.cpp +++ b/apps/openmw/mwmp/Networking.cpp @@ -323,7 +323,7 @@ void Networking::processPlayerPacket(RakNet::Packet *packet) { if (packet->length == myPacket->headerSize()) { - + getLocalPlayer()->sendSpellbook(); } else { diff --git a/apps/openmw/mwscript/dialogueextensions.cpp b/apps/openmw/mwscript/dialogueextensions.cpp index fcb7e8f3b..b52b95508 100644 --- a/apps/openmw/mwscript/dialogueextensions.cpp +++ b/apps/openmw/mwscript/dialogueextensions.cpp @@ -1,5 +1,8 @@ #include "dialogueextensions.hpp" +#include "../mwmp/Main.hpp" +#include "../mwmp/LocalPlayer.hpp" + #include #include @@ -43,6 +46,11 @@ namespace MWScript try { MWBase::Environment::get().getJournal()->addEntry (quest, index, ptr); + + // Added by tes3mp + // + // LocalPlayer has gained a journal entry, so send a packet with it + mwmp::Main::get().getLocalPlayer()->sendJournalEntry(quest, index, ptr); } catch (...) { @@ -65,6 +73,11 @@ namespace MWScript runtime.pop(); MWBase::Environment::get().getJournal()->setJournalIndex (quest, index); + + // Added by tes3mp + // + // LocalPlayer has gained a journal index, so send a packet with it + mwmp::Main::get().getLocalPlayer()->sendJournalIndex(quest, index); } }; diff --git a/components/openmw-mp/Base/BasePlayer.hpp b/components/openmw-mp/Base/BasePlayer.hpp index 04abac476..1163bcca1 100644 --- a/components/openmw-mp/Base/BasePlayer.hpp +++ b/components/openmw-mp/Base/BasePlayer.hpp @@ -46,6 +46,24 @@ namespace mwmp } }; + struct JournalItem + { + std::string quest; + int index; + enum JOURNAL_ITEM_TYPE + { + ENTRY = 0, + INDEX = 1 + }; + int type; // 0 - An entire entry, 1 - An index + }; + + struct JournalChanges + { + std::vector journalItems; + unsigned int count; + }; + struct PacketItems { std::vector items;