From 3e7230e89d12637f0357a4b191eb81b8e397458d Mon Sep 17 00:00:00 2001 From: uramer Date: Wed, 18 Mar 2020 22:28:00 +0100 Subject: [PATCH 1/2] [Client] Assign summoned creatures' actorId correctly, skipping those already assigned --- apps/openmw/mwmechanics/creaturestats.cpp | 2 +- components/openmw-mp/Base/BasePacketProcessor.hpp | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/openmw/mwmechanics/creaturestats.cpp b/apps/openmw/mwmechanics/creaturestats.cpp index 6d9f53831..2480e329e 100644 --- a/apps/openmw/mwmechanics/creaturestats.cpp +++ b/apps/openmw/mwmechanics/creaturestats.cpp @@ -751,7 +751,7 @@ namespace MWMechanics { for (std::map::iterator it = mSummonedCreatures.begin(); it != mSummonedCreatures.end(); ) { - if (Misc::StringUtils::ciEqual(getSummonedCreature(it->first.first), refId)) + if (Misc::StringUtils::ciEqual(getSummonedCreature(it->first.first), refId) && it->second == -1) { it->second = actorId; break; diff --git a/components/openmw-mp/Base/BasePacketProcessor.hpp b/components/openmw-mp/Base/BasePacketProcessor.hpp index 634de91e2..6020afc22 100644 --- a/components/openmw-mp/Base/BasePacketProcessor.hpp +++ b/components/openmw-mp/Base/BasePacketProcessor.hpp @@ -4,6 +4,7 @@ #include #include #include +#include #define BPP_INIT(packet_id) packetID = packet_id; strPacketID = #packet_id; className = typeid(this).name(); avoidReading = false; From ee84868b7da7f261e18201b62a4a1b1d7f2f790e Mon Sep 17 00:00:00 2001 From: uramer Date: Fri, 20 Mar 2020 22:28:00 +0100 Subject: [PATCH 2/2] [Client] Fix double summoning magical effects --- apps/openmw/mwmp/ObjectList.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/apps/openmw/mwmp/ObjectList.cpp b/apps/openmw/mwmp/ObjectList.cpp index c917afcc7..9993be3a0 100644 --- a/apps/openmw/mwmp/ObjectList.cpp +++ b/apps/openmw/mwmp/ObjectList.cpp @@ -495,7 +495,9 @@ void ObjectList::spawnObjects(MWWorld::CellStore* cellStore) LOG_APPEND(TimedLog::LOG_INFO, "-- adding active spell to master with id %s, effect %i, duration %f", baseObject.summonSpellId.c_str(), baseObject.summonEffectId, baseObject.summonDuration); - masterCreatureStats.getActiveSpells().addSpell(baseObject.summonSpellId, false, activeEffects, "", masterCreatureStats.getActorId()); + auto activeSpells = masterCreatureStats.getActiveSpells(); + if (!activeSpells.isSpellActive(baseObject.summonSpellId)) + activeSpells.addSpell(baseObject.summonSpellId, false, activeEffects, "", masterCreatureStats.getActorId()); LOG_APPEND(TimedLog::LOG_INFO, "-- setting summoned creatureActorId for %i-%i to %i", newPtr.getCellRef().getRefNum(), newPtr.getCellRef().getMpNum(), creatureActorId);