diff --git a/apps/openmw-mp/Script/Functions/Actors.cpp b/apps/openmw-mp/Script/Functions/Actors.cpp index 09d00b88a..64e10a8a4 100644 --- a/apps/openmw-mp/Script/Functions/Actors.cpp +++ b/apps/openmw-mp/Script/Functions/Actors.cpp @@ -133,6 +133,21 @@ double ActorFunctions::GetActorFatigueCurrent(unsigned int i) noexcept return readActorList->baseActors.at(i).creatureStats.mDynamic[2].mCurrent; } +const char *ActorFunctions::GetActorEquipmentItemRefId(unsigned int i, unsigned short slot) noexcept +{ + return readActorList->baseActors.at(i).equipedItems[slot].refId.c_str(); +} + +int ActorFunctions::GetActorEquipmentItemCount(unsigned int i, unsigned short slot) noexcept +{ + return readActorList->baseActors.at(i).equipedItems[slot].count; +} + +int ActorFunctions::GetActorEquipmentItemCharge(unsigned int i, unsigned short slot) noexcept +{ + return readActorList->baseActors.at(i).equipedItems[slot].charge; +} + bool ActorFunctions::DoesActorHavePosition(unsigned int i) noexcept { return readActorList->baseActors.at(i).hasPositionData; diff --git a/apps/openmw-mp/Script/Functions/Actors.hpp b/apps/openmw-mp/Script/Functions/Actors.hpp index b57c78826..d5ce91cd3 100644 --- a/apps/openmw-mp/Script/Functions/Actors.hpp +++ b/apps/openmw-mp/Script/Functions/Actors.hpp @@ -2,60 +2,64 @@ #define OPENMW_ACTORAPI_HPP #define ACTORAPI \ - {"ReadLastActorList", ActorFunctions::ReadLastActorList},\ - {"ReadCellActorList", ActorFunctions::ReadCellActorList},\ - {"InitializeActorList", ActorFunctions::InitializeActorList},\ + {"ReadLastActorList", ActorFunctions::ReadLastActorList},\ + {"ReadCellActorList", ActorFunctions::ReadCellActorList},\ + {"InitializeActorList", ActorFunctions::InitializeActorList},\ \ - {"GetActorListSize", ActorFunctions::GetActorListSize},\ - {"GetActorListAction", ActorFunctions::GetActorListAction},\ + {"GetActorListSize", ActorFunctions::GetActorListSize},\ + {"GetActorListAction", ActorFunctions::GetActorListAction},\ \ - {"GetActorCell", ActorFunctions::GetActorCell},\ - {"GetActorRefId", ActorFunctions::GetActorRefId},\ - {"GetActorRefNumIndex", ActorFunctions::GetActorRefNumIndex},\ - {"GetActorMpNum", ActorFunctions::GetActorMpNum},\ + {"GetActorCell", ActorFunctions::GetActorCell},\ + {"GetActorRefId", ActorFunctions::GetActorRefId},\ + {"GetActorRefNumIndex", ActorFunctions::GetActorRefNumIndex},\ + {"GetActorMpNum", ActorFunctions::GetActorMpNum},\ \ - {"GetActorPosX", ActorFunctions::GetActorPosX},\ - {"GetActorPosY", ActorFunctions::GetActorPosY},\ - {"GetActorPosZ", ActorFunctions::GetActorPosZ},\ - {"GetActorRotX", ActorFunctions::GetActorRotX},\ - {"GetActorRotY", ActorFunctions::GetActorRotY},\ - {"GetActorRotZ", ActorFunctions::GetActorRotZ},\ + {"GetActorPosX", ActorFunctions::GetActorPosX},\ + {"GetActorPosY", ActorFunctions::GetActorPosY},\ + {"GetActorPosZ", ActorFunctions::GetActorPosZ},\ + {"GetActorRotX", ActorFunctions::GetActorRotX},\ + {"GetActorRotY", ActorFunctions::GetActorRotY},\ + {"GetActorRotZ", ActorFunctions::GetActorRotZ},\ \ - {"GetActorHealthBase", ActorFunctions::GetActorHealthBase},\ - {"GetActorHealthCurrent", ActorFunctions::GetActorHealthCurrent},\ - {"GetActorMagickaBase", ActorFunctions::GetActorMagickaBase},\ - {"GetActorMagickaCurrent", ActorFunctions::GetActorMagickaCurrent},\ - {"GetActorFatigueBase", ActorFunctions::GetActorFatigueBase},\ - {"GetActorFatigueCurrent", ActorFunctions::GetActorFatigueCurrent},\ + {"GetActorHealthBase", ActorFunctions::GetActorHealthBase},\ + {"GetActorHealthCurrent", ActorFunctions::GetActorHealthCurrent},\ + {"GetActorMagickaBase", ActorFunctions::GetActorMagickaBase},\ + {"GetActorMagickaCurrent", ActorFunctions::GetActorMagickaCurrent},\ + {"GetActorFatigueBase", ActorFunctions::GetActorFatigueBase},\ + {"GetActorFatigueCurrent", ActorFunctions::GetActorFatigueCurrent},\ \ - {"DoesActorHavePosition", ActorFunctions::DoesActorHavePosition},\ - {"DoesActorHaveStatsDynamic", ActorFunctions::DoesActorHaveStatsDynamic},\ + {"GetActorEquipmentItemRefId", ActorFunctions::GetActorEquipmentItemRefId},\ + {"GetActorEquipmentItemCount", ActorFunctions::GetActorEquipmentItemCount},\ + {"GetActorEquipmentItemCharge", ActorFunctions::GetActorEquipmentItemCharge},\ \ - {"SetActorListCell", ActorFunctions::SetActorListCell},\ - {"SetActorListAction", ActorFunctions::SetActorListAction},\ + {"DoesActorHavePosition", ActorFunctions::DoesActorHavePosition},\ + {"DoesActorHaveStatsDynamic", ActorFunctions::DoesActorHaveStatsDynamic},\ \ - {"SetActorCell", ActorFunctions::SetActorCell},\ - {"SetActorRefId", ActorFunctions::SetActorRefId},\ - {"SetActorRefNumIndex", ActorFunctions::SetActorRefNumIndex},\ - {"SetActorMpNum", ActorFunctions::SetActorMpNum},\ + {"SetActorListCell", ActorFunctions::SetActorListCell},\ + {"SetActorListAction", ActorFunctions::SetActorListAction},\ \ - {"SetActorPosition", ActorFunctions::SetActorPosition},\ - {"SetActorRotation", ActorFunctions::SetActorRotation},\ + {"SetActorCell", ActorFunctions::SetActorCell},\ + {"SetActorRefId", ActorFunctions::SetActorRefId},\ + {"SetActorRefNumIndex", ActorFunctions::SetActorRefNumIndex},\ + {"SetActorMpNum", ActorFunctions::SetActorMpNum},\ \ - {"SetActorHealthBase", ActorFunctions::SetActorHealthBase},\ - {"SetActorHealthCurrent", ActorFunctions::SetActorHealthCurrent},\ - {"SetActorMagickaBase", ActorFunctions::SetActorMagickaBase},\ - {"SetActorMagickaCurrent", ActorFunctions::SetActorMagickaCurrent},\ - {"SetActorFatigueBase", ActorFunctions::SetActorFatigueBase},\ - {"SetActorFatigueCurrent", ActorFunctions::SetActorFatigueCurrent},\ + {"SetActorPosition", ActorFunctions::SetActorPosition},\ + {"SetActorRotation", ActorFunctions::SetActorRotation},\ \ - {"AddActor", ActorFunctions::AddActor},\ + {"SetActorHealthBase", ActorFunctions::SetActorHealthBase},\ + {"SetActorHealthCurrent", ActorFunctions::SetActorHealthCurrent},\ + {"SetActorMagickaBase", ActorFunctions::SetActorMagickaBase},\ + {"SetActorMagickaCurrent", ActorFunctions::SetActorMagickaCurrent},\ + {"SetActorFatigueBase", ActorFunctions::SetActorFatigueBase},\ + {"SetActorFatigueCurrent", ActorFunctions::SetActorFatigueCurrent},\ \ - {"SendActorList", ActorFunctions::SendActorList},\ - {"SendActorAuthority", ActorFunctions::SendActorAuthority},\ - {"SendActorPosition", ActorFunctions::SendActorPosition},\ - {"SendActorStatsDynamic", ActorFunctions::SendActorStatsDynamic},\ - {"SendActorCellChange", ActorFunctions::SendActorCellChange} + {"AddActor", ActorFunctions::AddActor},\ + \ + {"SendActorList", ActorFunctions::SendActorList},\ + {"SendActorAuthority", ActorFunctions::SendActorAuthority},\ + {"SendActorPosition", ActorFunctions::SendActorPosition},\ + {"SendActorStatsDynamic", ActorFunctions::SendActorStatsDynamic},\ + {"SendActorCellChange", ActorFunctions::SendActorCellChange} class ActorFunctions { @@ -87,6 +91,10 @@ public: static double GetActorFatigueBase(unsigned int i) noexcept; static double GetActorFatigueCurrent(unsigned int i) noexcept; + static const char *GetActorEquipmentItemRefId(unsigned int i, unsigned short slot) noexcept; + static int GetActorEquipmentItemCount(unsigned int i, unsigned short slot) noexcept; + static int GetActorEquipmentItemCharge(unsigned int i, unsigned short slot) noexcept; + static bool DoesActorHavePosition(unsigned int i) noexcept; static bool DoesActorHaveStatsDynamic(unsigned int i) noexcept; diff --git a/apps/openmw-mp/Script/ScriptFunctions.hpp b/apps/openmw-mp/Script/ScriptFunctions.hpp index f700298ce..32035e8b2 100644 --- a/apps/openmw-mp/Script/ScriptFunctions.hpp +++ b/apps/openmw-mp/Script/ScriptFunctions.hpp @@ -145,6 +145,7 @@ public: {"OnObjectScale", Function()}, {"OnObjectTrap", Function()}, {"OnActorList", Function()}, + {"OnActorEquipment", Function()}, {"OnActorCellChange", Function()}, {"OnActorTest", Function()}, {"OnPlayerSendMessage", Function()}, diff --git a/apps/openmw-mp/processors/actor/ProcessorActorEquipment.hpp b/apps/openmw-mp/processors/actor/ProcessorActorEquipment.hpp index eb7f7e757..0200b65ad 100644 --- a/apps/openmw-mp/processors/actor/ProcessorActorEquipment.hpp +++ b/apps/openmw-mp/processors/actor/ProcessorActorEquipment.hpp @@ -19,7 +19,11 @@ namespace mwmp Cell *serverCell = CellController::get()->getCell(&actorList.cell); if (serverCell != nullptr) + { + Script::Call(player.getId(), actorList.cell.getDescription().c_str()); + serverCell->sendToLoaded(&packet, &actorList); + } } }; }