From 749c6db49e1e574d1d191368ab6a93ebf490ddd5 Mon Sep 17 00:00:00 2001 From: David Cernat Date: Wed, 26 Oct 2016 12:29:32 +0300 Subject: [PATCH] Send WorldPackets with script values from MWScript::InterpreterContext --- apps/openmw/mwscript/interpretercontext.cpp | 56 ++++++++++++++++++++- 1 file changed, 54 insertions(+), 2 deletions(-) diff --git a/apps/openmw/mwscript/interpretercontext.cpp b/apps/openmw/mwscript/interpretercontext.cpp index ab4271c37..69cd0372f 100644 --- a/apps/openmw/mwscript/interpretercontext.cpp +++ b/apps/openmw/mwscript/interpretercontext.cpp @@ -10,6 +10,9 @@ #include +#include +#include "../mwmp/Main.hpp" + #include "../mwworld/esmstore.hpp" #include "../mwbase/environment.hpp" @@ -178,9 +181,24 @@ namespace MWScript mLocals->mShorts.at (index) = value; + // Added by tes3mp if (sendPackets) - printf("Sending ID_SCRIPT_LOCAL_SHORT for %s\n", - this->mReference.getClass().getScript(mReference)); + { + mwmp::WorldEvent *event = mwmp::Main::get().getNetworking()->createWorldEvent(); + event->cell = *mReference.getCell()->getCell(); + event->cellRef.mRefID = mReference.getCellRef().getRefId(); + event->cellRef.mRefNum = mReference.getCellRef().getRefNum(); + event->index = index; + event->shortVal = value; + mwmp::Main::get().getNetworking()->GetWorldPacket(ID_SCRIPT_LOCAL_SHORT)->Send(event); + + printf("Sending ID_SCRIPT_LOCAL_SHORT\n- cellRef: %s, %i\n- cell: %s\n- index: %i\n- shortVal: %i\n", + event->cellRef.mRefID.c_str(), + event->cellRef.mRefNum.mIndex, + event->cell.getDescription().c_str(), + event->index, + event->shortVal); + } } void InterpreterContext::setLocalLong (int index, int value) @@ -197,6 +215,27 @@ namespace MWScript throw std::runtime_error ("local variables not available in this context"); mLocals->mFloats.at (index) = value; + + // Added by tes3mp + // + // Only send a packet if this float has no decimals (to avoid spam) + if (sendPackets && value == (int) value) + { + mwmp::WorldEvent *event = mwmp::Main::get().getNetworking()->createWorldEvent(); + event->cell = *mReference.getCell()->getCell(); + event->cellRef.mRefID = mReference.getCellRef().getRefId(); + event->cellRef.mRefNum = mReference.getCellRef().getRefNum(); + event->index = index; + event->floatVal = value; + mwmp::Main::get().getNetworking()->GetWorldPacket(ID_SCRIPT_LOCAL_FLOAT)->Send(event); + + printf("Sending ID_SCRIPT_LOCAL_FLOAT\n- cellRef: %s, %i\n- cell: %s\n- index: %i\n- floatVal: %f\n", + event->cellRef.mRefID.c_str(), + event->cellRef.mRefNum.mIndex, + event->cell.getDescription().c_str(), + event->index, + event->floatVal); + } } void InterpreterContext::messageBox (const std::string& message, @@ -240,6 +279,19 @@ namespace MWScript void InterpreterContext::setGlobalShort (const std::string& name, int value) { + // Added by tes3mp + if (sendPackets) + { + mwmp::WorldEvent *event = mwmp::Main::get().getNetworking()->createWorldEvent(); + event->globalName = name; + event->shortVal = value; + mwmp::Main::get().getNetworking()->GetWorldPacket(ID_SCRIPT_GLOBAL_SHORT)->Send(event); + + printf("Sending ID_SCRIPT_GLOBAL_SHORT\n- globalName: %s\n- shortVal: %i\n", + event->globalName.c_str(), + event->shortVal); + } + MWBase::Environment::get().getWorld()->setGlobalInt (name, value); }