diff --git a/apps/openmw-mp/Script/Functions/Quests.cpp b/apps/openmw-mp/Script/Functions/Quests.cpp index 627fa3047..e19c214ac 100644 --- a/apps/openmw-mp/Script/Functions/Quests.cpp +++ b/apps/openmw-mp/Script/Functions/Quests.cpp @@ -13,7 +13,7 @@ void QuestFunctions::ClearJournalChanges(unsigned short pid) noexcept Player *player; GET_PLAYER(pid, player, ); - player->journalChanges.journalItems.clear(); + player->journalChanges.clear(); } unsigned int QuestFunctions::GetJournalChangesSize(unsigned short pid) noexcept @@ -21,7 +21,7 @@ unsigned int QuestFunctions::GetJournalChangesSize(unsigned short pid) noexcept Player *player; GET_PLAYER(pid, player, 0); - return player->journalChanges.count; + return player->journalChanges.size(); } void QuestFunctions::AddJournalEntry(unsigned short pid, const char* quest, unsigned int index, const char* actorRefId) noexcept @@ -36,7 +36,7 @@ void QuestFunctions::AddJournalEntry(unsigned short pid, const char* quest, unsi journalItem.actorRefId = actorRefId; journalItem.hasTimestamp = false; - player->journalChanges.journalItems.push_back(journalItem); + player->journalChanges.push_back(journalItem); } void QuestFunctions::AddJournalEntryWithTimestamp(unsigned short pid, const char* quest, unsigned int index, const char* actorRefId, @@ -56,7 +56,7 @@ void QuestFunctions::AddJournalEntryWithTimestamp(unsigned short pid, const char journalItem.timestamp.month = month; journalItem.timestamp.day = day; - player->journalChanges.journalItems.push_back(journalItem); + player->journalChanges.push_back(journalItem); } void QuestFunctions::AddJournalIndex(unsigned short pid, const char* quest, unsigned int index) noexcept @@ -69,7 +69,7 @@ void QuestFunctions::AddJournalIndex(unsigned short pid, const char* quest, unsi journalItem.quest = quest; journalItem.index = index; - player->journalChanges.journalItems.push_back(journalItem); + player->journalChanges.push_back(journalItem); } void QuestFunctions::SetReputation(unsigned short pid, int value) noexcept @@ -85,10 +85,10 @@ const char *QuestFunctions::GetJournalItemQuest(unsigned short pid, unsigned int Player *player; GET_PLAYER(pid, player, ""); - if (index >= player->journalChanges.count) + if (index >= player->journalChanges.size()) return "invalid"; - return player->journalChanges.journalItems.at(index).quest.c_str(); + return player->journalChanges.at(index).quest.c_str(); } int QuestFunctions::GetJournalItemIndex(unsigned short pid, unsigned int index) noexcept @@ -96,7 +96,7 @@ int QuestFunctions::GetJournalItemIndex(unsigned short pid, unsigned int index) Player *player; GET_PLAYER(pid, player, 0); - return player->journalChanges.journalItems.at(index).index; + return player->journalChanges.at(index).index; } int QuestFunctions::GetJournalItemType(unsigned short pid, unsigned int index) noexcept @@ -104,7 +104,7 @@ int QuestFunctions::GetJournalItemType(unsigned short pid, unsigned int index) n Player *player; GET_PLAYER(pid, player, 0); - return player->journalChanges.journalItems.at(index).type; + return player->journalChanges.at(index).type; } const char *QuestFunctions::GetJournalItemActorRefId(unsigned short pid, unsigned int index) noexcept @@ -112,7 +112,7 @@ const char *QuestFunctions::GetJournalItemActorRefId(unsigned short pid, unsigne Player *player; GET_PLAYER(pid, player, 0); - return player->journalChanges.journalItems.at(index).actorRefId.c_str(); + return player->journalChanges.at(index).actorRefId.c_str(); } int QuestFunctions::GetReputation(unsigned short pid) noexcept diff --git a/apps/openmw/mwmp/LocalPlayer.cpp b/apps/openmw/mwmp/LocalPlayer.cpp index 96c9b0c6b..676a0ddd0 100644 --- a/apps/openmw/mwmp/LocalPlayer.cpp +++ b/apps/openmw/mwmp/LocalPlayer.cpp @@ -732,17 +732,25 @@ void LocalPlayer::addSpells() void LocalPlayer::addJournalItems() { - for (const auto &journalItem : journalChanges.journalItems) + for (const auto &journalItem : journalChanges) { MWWorld::Ptr ptrFound; if (journalItem.type == JournalItem::ENTRY) { + LOG_APPEND(TimedLog::LOG_VERBOSE, "- type: ENTRY, quest: %s, index: %i, actorRefId: %s", + journalItem.quest.c_str(), journalItem.index, journalItem.actorRefId.c_str()); + ptrFound = MWBase::Environment::get().getWorld()->searchPtr(journalItem.actorRefId, false); if (!ptrFound) ptrFound = getPlayerPtr(); } + else + { + LOG_APPEND(TimedLog::LOG_VERBOSE, "- type: INDEX, quest: %s, index: %i", + journalItem.quest.c_str(), journalItem.index); + } try { @@ -1504,7 +1512,7 @@ void LocalPlayer::sendQuickKey(unsigned short slot, int type, const std::string& void LocalPlayer::sendJournalEntry(const std::string& quest, int index, const MWWorld::Ptr& actor) { - journalChanges.journalItems.clear(); + journalChanges.clear(); mwmp::JournalItem journalItem; journalItem.type = JournalItem::ENTRY; @@ -1513,7 +1521,7 @@ void LocalPlayer::sendJournalEntry(const std::string& quest, int index, const MW journalItem.actorRefId = actor.getCellRef().getRefId(); journalItem.hasTimestamp = false; - journalChanges.journalItems.push_back(journalItem); + journalChanges.push_back(journalItem); getNetworking()->getPlayerPacket(ID_PLAYER_JOURNAL)->setPlayer(this); getNetworking()->getPlayerPacket(ID_PLAYER_JOURNAL)->Send(); @@ -1521,14 +1529,14 @@ void LocalPlayer::sendJournalEntry(const std::string& quest, int index, const MW void LocalPlayer::sendJournalIndex(const std::string& quest, int index) { - journalChanges.journalItems.clear(); + journalChanges.clear(); mwmp::JournalItem journalItem; journalItem.type = JournalItem::INDEX; journalItem.quest = quest; journalItem.index = index; - journalChanges.journalItems.push_back(journalItem); + journalChanges.push_back(journalItem); getNetworking()->getPlayerPacket(ID_PLAYER_JOURNAL)->setPlayer(this); getNetworking()->getPlayerPacket(ID_PLAYER_JOURNAL)->Send(); diff --git a/components/openmw-mp/Base/BasePlayer.hpp b/components/openmw-mp/Base/BasePlayer.hpp index 83b4f73f2..cc5ea02d9 100644 --- a/components/openmw-mp/Base/BasePlayer.hpp +++ b/components/openmw-mp/Base/BasePlayer.hpp @@ -88,12 +88,6 @@ namespace mwmp int type; // 0 - Cell load, 1 - Cell unload }; - struct JournalChanges - { - std::vector journalItems; - unsigned int count; - }; - struct FactionChanges { std::vector factions; @@ -245,7 +239,7 @@ namespace mwmp InventoryChanges inventoryChanges; SpellbookChanges spellbookChanges; QuickKeyChanges quickKeyChanges; - JournalChanges journalChanges; + std::vector journalChanges; FactionChanges factionChanges; TopicChanges topicChanges; BookChanges bookChanges; diff --git a/components/openmw-mp/Packets/Player/PacketPlayerJournal.cpp b/components/openmw-mp/Packets/Player/PacketPlayerJournal.cpp index d8ab43930..a4e9f8221 100644 --- a/components/openmw-mp/Packets/Player/PacketPlayerJournal.cpp +++ b/components/openmw-mp/Packets/Player/PacketPlayerJournal.cpp @@ -13,20 +13,21 @@ void PacketPlayerJournal::Packet(RakNet::BitStream *bs, bool send) { PlayerPacket::Packet(bs, send); + uint32_t count; + if (send) - player->journalChanges.count = (unsigned int)(player->journalChanges.journalItems.size()); - else - player->journalChanges.journalItems.clear(); + count = static_cast(player->journalChanges.size()); - RW(player->journalChanges.count, send); + RW(count, send); - for (unsigned int i = 0; i < player->journalChanges.count; i++) + if (!send) { - JournalItem journalItem; - - if (send) - journalItem = player->journalChanges.journalItems.at(i); + player->journalChanges.clear(); + player->journalChanges.resize(count); + } + for (auto &&journalItem : player->journalChanges) + { RW(journalItem.type, send); RW(journalItem.quest, send, true); RW(journalItem.index, send); @@ -44,8 +45,5 @@ void PacketPlayerJournal::Packet(RakNet::BitStream *bs, bool send) RW(journalItem.timestamp.day, send); } } - - if (!send) - player->journalChanges.journalItems.push_back(journalItem); } }