diff --git a/apps/openmw-mp/CMakeLists.txt b/apps/openmw-mp/CMakeLists.txt index 0daa3ccb6..ca354f37a 100644 --- a/apps/openmw-mp/CMakeLists.txt +++ b/apps/openmw-mp/CMakeLists.txt @@ -113,17 +113,17 @@ set(PROCESSORS_PLAYER source_group(tes3mp-server\\processors\\player FILES ${PROCESSORS_PLAYER}) set(PROCESSORS_OBJECT - processors/object/ProcessorContainer.hpp processors/object/ProcessorDoorState.hpp - processors/object/ProcessorMusicPlay.hpp processors/object/ProcessorObjectActivate.hpp - processors/object/ProcessorObjectAnimPlay.hpp processors/object/ProcessorObjectDelete.hpp - processors/object/ProcessorObjectLock.hpp processors/object/ProcessorObjectMove.hpp - processors/object/ProcessorObjectPlace.hpp processors/object/ProcessorObjectRotate.hpp - processors/object/ProcessorObjectScale.hpp processors/object/ProcessorObjectSpawn.hpp - processors/object/ProcessorObjectState.hpp processors/object/ProcessorObjectTrap.hpp - processors/object/ProcessorScriptLocalShort.hpp processors/object/ProcessorScriptLocalFloat.hpp - processors/object/ProcessorScriptMemberShort.hpp processors/object/ProcessorScriptMemberFloat.hpp - processors/object/ProcessorScriptGlobalShort.hpp processors/object/ProcessorScriptGlobalFloat.hpp - processors/object/ProcessorVideoPlay.hpp + processors/object/ProcessorConsoleCommand.hpp processors/object/ProcessorContainer.hpp + processors/object/ProcessorDoorState.hpp processors/object/ProcessorMusicPlay.hpp + processors/object/ProcessorObjectActivate.hpp processors/object/ProcessorObjectAnimPlay.hpp + processors/object/ProcessorObjectDelete.hpp processors/object/ProcessorObjectLock.hpp + processors/object/ProcessorObjectMove.hpp processors/object/ProcessorObjectPlace.hpp + processors/object/ProcessorObjectRotate.hpp processors/object/ProcessorObjectScale.hpp + processors/object/ProcessorObjectSpawn.hpp processors/object/ProcessorObjectState.hpp + processors/object/ProcessorObjectTrap.hpp processors/object/ProcessorScriptLocalShort.hpp + processors/object/ProcessorScriptLocalFloat.hpp processors/object/ProcessorScriptMemberShort.hpp + processors/object/ProcessorScriptMemberFloat.hpp processors/object/ProcessorScriptGlobalShort.hpp + processors/object/ProcessorScriptGlobalFloat.hpp processors/object/ProcessorVideoPlay.hpp ) source_group(tes3mp-server\\processors\\object FILES ${PROCESSORS_OBJECT}) diff --git a/apps/openmw-mp/Script/Functions/Objects.cpp b/apps/openmw-mp/Script/Functions/Objects.cpp index 36cd8f99b..adf3e4b11 100644 --- a/apps/openmw-mp/Script/Functions/Objects.cpp +++ b/apps/openmw-mp/Script/Functions/Objects.cpp @@ -64,6 +64,11 @@ unsigned char ObjectFunctions::GetObjectListAction() noexcept return readObjectList->action; } +const char *ObjectFunctions::GetObjectListConsoleCommand() noexcept +{ + return readObjectList->consoleCommand.c_str(); +} + unsigned char ObjectFunctions::GetObjectListContainerSubAction() noexcept { return readObjectList->containerSubAction; diff --git a/apps/openmw-mp/Script/Functions/Objects.hpp b/apps/openmw-mp/Script/Functions/Objects.hpp index e006e1980..7d42c3f80 100644 --- a/apps/openmw-mp/Script/Functions/Objects.hpp +++ b/apps/openmw-mp/Script/Functions/Objects.hpp @@ -13,6 +13,7 @@ {"GetObjectListOrigin", ObjectFunctions::GetObjectListOrigin},\ {"GetObjectListClientScript", ObjectFunctions::GetObjectListClientScript},\ {"GetObjectListAction", ObjectFunctions::GetObjectListAction},\ + {"GetObjectListConsoleCommand", ObjectFunctions::GetObjectListConsoleCommand},\ {"GetObjectListContainerSubAction", ObjectFunctions::GetObjectListContainerSubAction},\ \ {"IsObjectPlayer", ObjectFunctions::IsObjectPlayer},\ @@ -218,6 +219,13 @@ public: */ static unsigned char GetObjectListAction() noexcept; + /** + * \brief Get the console command used in the read object list. + * + * \return The console command. + */ + static const char *GetObjectListConsoleCommand() noexcept; + /** * \brief Get the container subaction type used in the read object list. * diff --git a/apps/openmw-mp/Script/ScriptFunctions.hpp b/apps/openmw-mp/Script/ScriptFunctions.hpp index a69c7f5c0..22bcd8927 100644 --- a/apps/openmw-mp/Script/ScriptFunctions.hpp +++ b/apps/openmw-mp/Script/ScriptFunctions.hpp @@ -185,6 +185,7 @@ public: {"OnCellLoad", Callback()}, {"OnCellUnload", Callback()}, {"OnCellDeletion", Callback()}, + {"OnConsoleCommand", Callback()}, {"OnContainer", Callback()}, {"OnDoorState", Callback()}, {"OnObjectActivate", Callback()}, diff --git a/apps/openmw-mp/processors/ProcessorInitializer.cpp b/apps/openmw-mp/processors/ProcessorInitializer.cpp index 42bb49ca2..dfe982983 100644 --- a/apps/openmw-mp/processors/ProcessorInitializer.cpp +++ b/apps/openmw-mp/processors/ProcessorInitializer.cpp @@ -54,6 +54,7 @@ #include "actor/ProcessorActorPosition.hpp" #include "actor/ProcessorActorSpeech.hpp" #include "ObjectProcessor.hpp" +#include "object/ProcessorConsoleCommand.hpp" #include "object/ProcessorContainer.hpp" #include "object/ProcessorDoorState.hpp" #include "object/ProcessorMusicPlay.hpp" @@ -135,6 +136,7 @@ void ProcessorInitializer() ActorProcessor::AddProcessor(new ProcessorActorStatsDynamic()); ActorProcessor::AddProcessor(new ProcessorActorTest()); + ObjectProcessor::AddProcessor(new ProcessorConsoleCommand()); ObjectProcessor::AddProcessor(new ProcessorContainer()); ObjectProcessor::AddProcessor(new ProcessorDoorState()); ObjectProcessor::AddProcessor(new ProcessorMusicPlay()); diff --git a/apps/openmw-mp/processors/object/ProcessorConsoleCommand.hpp b/apps/openmw-mp/processors/object/ProcessorConsoleCommand.hpp new file mode 100644 index 000000000..b22415ca5 --- /dev/null +++ b/apps/openmw-mp/processors/object/ProcessorConsoleCommand.hpp @@ -0,0 +1,25 @@ +#ifndef OPENMW_PROCESSORCONSOLECOMMAND_HPP +#define OPENMW_PROCESSORCONSOLECOMMAND_HPP + +#include "../ObjectProcessor.hpp" + +namespace mwmp +{ + class ProcessorConsoleCommand : public ObjectProcessor + { + public: + ProcessorConsoleCommand() + { + BPP_INIT(ID_CONSOLE_COMMAND) + } + + void Do(ObjectPacket &packet, Player &player, BaseObjectList &objectList) override + { + LOG_MESSAGE_SIMPLE(TimedLog::LOG_INFO, "Received %s from %s", strPacketID.c_str(), player.npc.mName.c_str()); + + Script::Call(player.getId(), objectList.cell.getDescription().c_str()); + } + }; +} + +#endif //OPENMW_PROCESSORCONSOLECOMMAND_HPP