From b1264cca928e3ca27939c027fbbee6e0b9a9649c Mon Sep 17 00:00:00 2001 From: David Cernat Date: Wed, 24 May 2017 16:25:44 +0300 Subject: [PATCH] [Client] Send ObjectLock whenever using spells or keys to unlock objects --- apps/openmw/mwclass/container.cpp | 28 ++++++++++++++++++++++++ apps/openmw/mwclass/door.cpp | 28 ++++++++++++++++++++++++ apps/openmw/mwmechanics/security.cpp | 5 +++-- apps/openmw/mwmechanics/spellcasting.cpp | 15 +++++++++++++ 4 files changed, 74 insertions(+), 2 deletions(-) diff --git a/apps/openmw/mwclass/container.cpp b/apps/openmw/mwclass/container.cpp index fe2899aff..e2c74a312 100644 --- a/apps/openmw/mwclass/container.cpp +++ b/apps/openmw/mwclass/container.cpp @@ -1,5 +1,17 @@ #include "container.hpp" +/* + Start of tes3mp addition + + Include additional headers for multiplayer purposes +*/ +#include "../mwmp/Main.hpp" +#include "../mwmp/Networking.hpp" +#include "../mwmp/WorldEvent.hpp" +/* + End of tes3mp addition +*/ + #include #include @@ -174,6 +186,22 @@ namespace MWClass MWBase::SoundManager::Play_Normal); isTrapped = false; } + + /* + Start of tes3mp addition + + Send an ID_OBJECT_LOCK packet every time a container is unlocked here + */ + if (isLocked) + { + mwmp::WorldEvent *worldEvent = mwmp::Main::get().getNetworking()->getWorldEvent(); + worldEvent->reset(); + worldEvent->addObjectLock(ptr, 0); + worldEvent->sendObjectLock(); + } + /* + End of tes3mp addition + */ } diff --git a/apps/openmw/mwclass/door.cpp b/apps/openmw/mwclass/door.cpp index bc3455c65..7dddc97a8 100644 --- a/apps/openmw/mwclass/door.cpp +++ b/apps/openmw/mwclass/door.cpp @@ -1,5 +1,17 @@ #include "door.hpp" +/* + Start of tes3mp addition + + Include additional headers for multiplayer purposes +*/ +#include "../mwmp/Main.hpp" +#include "../mwmp/Networking.hpp" +#include "../mwmp/WorldEvent.hpp" +/* + End of tes3mp addition +*/ + #include #include @@ -159,6 +171,22 @@ namespace MWClass MWBase::SoundManager::Play_Normal); isTrapped = false; } + + /* + Start of tes3mp addition + + Send an ID_OBJECT_LOCK packet every time a door is unlocked here + */ + if (isLocked) + { + mwmp::WorldEvent *worldEvent = mwmp::Main::get().getNetworking()->getWorldEvent(); + worldEvent->reset(); + worldEvent->addObjectLock(ptr, 0); + worldEvent->sendObjectLock(); + } + /* + End of tes3mp addition + */ } if (!isLocked || hasKey) diff --git a/apps/openmw/mwmechanics/security.cpp b/apps/openmw/mwmechanics/security.cpp index 70a682846..03e6997f0 100644 --- a/apps/openmw/mwmechanics/security.cpp +++ b/apps/openmw/mwmechanics/security.cpp @@ -66,10 +66,12 @@ namespace MWMechanics MWBase::Environment::get().getMechanicsManager()->objectOpened(mActor, lock); if (Misc::Rng::roll0to99() <= x) { + lock.getClass().unlock(lock); + /* Start of tes3mp addition - Send an ID_OBJECT_LOCK packet every time an object is unlocked + Send an ID_OBJECT_LOCK packet every time an object is unlocked here */ mwmp::WorldEvent *worldEvent = mwmp::Main::get().getNetworking()->getWorldEvent(); worldEvent->reset(); @@ -79,7 +81,6 @@ namespace MWMechanics End of tes3mp addition */ - lock.getClass().unlock(lock); resultMessage = "#{sLockSuccess}"; resultSound = "Open Lock"; mActor.getClass().skillUsageSucceeded(mActor, ESM::Skill::Security, 1); diff --git a/apps/openmw/mwmechanics/spellcasting.cpp b/apps/openmw/mwmechanics/spellcasting.cpp index e2d8dea55..087b1ef9b 100644 --- a/apps/openmw/mwmechanics/spellcasting.cpp +++ b/apps/openmw/mwmechanics/spellcasting.cpp @@ -15,8 +15,10 @@ */ #include #include "../mwmp/Main.hpp" +#include "../mwmp/Networking.hpp" #include "../mwmp/PlayerList.hpp" #include "../mwmp/LocalPlayer.hpp" +#include "../mwmp/WorldEvent.hpp" #include "../mwmp/MechanicsHelper.hpp" /* End of tes3mp addition @@ -639,6 +641,19 @@ namespace MWMechanics MWBase::Environment::get().getWindowManager()->messageBox("#{sMagicOpenSuccess}"); } target.getClass().unlock(target); + + /* + Start of tes3mp addition + + Send an ID_OBJECT_LOCK packet every time an object is unlocked here + */ + mwmp::WorldEvent *worldEvent = mwmp::Main::get().getNetworking()->getWorldEvent(); + worldEvent->reset(); + worldEvent->addObjectLock(target, 0); + worldEvent->sendObjectLock(); + /* + End of tes3mp addition + */ } else MWBase::Environment::get().getSoundManager()->playSound3D(target, "Open Lock Fail", 1.f, 1.f);