From 4492a7a768500b734248a63c4cd2f6a14c2d3639 Mon Sep 17 00:00:00 2001 From: David Cernat Date: Wed, 21 Jul 2021 14:57:55 +0200 Subject: [PATCH] [Client] Add MechanicsHelper method to get actorId of an mwmp::Target Also clean up MechanicsHelper::getPlayerPtr() slightly. --- apps/openmw/mwmp/MechanicsHelper.cpp | 43 ++++++++++++++++++++++++++-- apps/openmw/mwmp/MechanicsHelper.hpp | 1 + 2 files changed, 42 insertions(+), 2 deletions(-) diff --git a/apps/openmw/mwmp/MechanicsHelper.cpp b/apps/openmw/mwmp/MechanicsHelper.cpp index d9c2568a8..d99310992 100644 --- a/apps/openmw/mwmp/MechanicsHelper.cpp +++ b/apps/openmw/mwmp/MechanicsHelper.cpp @@ -143,13 +143,52 @@ Cast *MechanicsHelper::getDedicatedCast(const MWWorld::Ptr& ptr) MWWorld::Ptr MechanicsHelper::getPlayerPtr(const Target& target) { if (target.guid == mwmp::Main::get().getLocalPlayer()->guid) + { return MWMechanics::getPlayer(); - else if (PlayerList::getPlayer(target.guid) != nullptr) - return PlayerList::getPlayer(target.guid)->getPtr(); + } + else + { + mwmp::DedicatedPlayer* dedicatedPlayer = mwmp::PlayerList::getPlayer(target.guid); + + if (dedicatedPlayer != nullptr) + { + return dedicatedPlayer->getPtr(); + } + } return nullptr; } +unsigned int MechanicsHelper::getActorId(const mwmp::Target& target) +{ + int actorId = -1; + MWWorld::Ptr targetPtr; + + if (target.isPlayer) + { + targetPtr = getPlayerPtr(target); + } + else + { + auto controller = mwmp::Main::get().getCellController(); + if (controller->isLocalActor(target.refNum, target.mpNum)) + { + targetPtr = controller->getLocalActor(target.refNum, target.mpNum)->getPtr(); + } + else if (controller->isDedicatedActor(target.refNum, target.mpNum)) + { + targetPtr = controller->getDedicatedActor(target.refNum, target.mpNum)->getPtr(); + } + } + + if (targetPtr) + { + actorId = targetPtr.getClass().getCreatureStats(targetPtr).getActorId(); + } + + return actorId; +} + mwmp::Item MechanicsHelper::getItem(const MWWorld::Ptr& itemPtr, int count) { mwmp::Item item; diff --git a/apps/openmw/mwmp/MechanicsHelper.hpp b/apps/openmw/mwmp/MechanicsHelper.hpp index 1f2ff0720..e497930f1 100644 --- a/apps/openmw/mwmp/MechanicsHelper.hpp +++ b/apps/openmw/mwmp/MechanicsHelper.hpp @@ -24,6 +24,7 @@ namespace MechanicsHelper mwmp::Cast *getDedicatedCast(const MWWorld::Ptr& ptr); MWWorld::Ptr getPlayerPtr(const mwmp::Target& target); + unsigned int getActorId(const mwmp::Target& target); mwmp::Item getItem(const MWWorld::Ptr& itemPtr, int count); mwmp::Target getTarget(const MWWorld::Ptr& ptr);