mirror of
https://github.com/TES3MP/openmw-tes3mp.git
synced 2025-03-03 12:49:40 +00:00
Add and implement ID_SCRIPT_MEMBER_SHORT
This commit is contained in:
parent
c91e240664
commit
c205e793cb
10 changed files with 97 additions and 11 deletions
|
@ -596,6 +596,21 @@ void Networking::ProcessWorldPacket(RakNet::Packet *packet)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case ID_SCRIPT_MEMBER_SHORT:
|
||||||
|
{
|
||||||
|
LOG_MESSAGE_SIMPLE(Log::LOG_WARN, "Received ID_SCRIPT_MEMBER_SHORT from %s",
|
||||||
|
player->Npc()->mName.c_str());
|
||||||
|
|
||||||
|
myPacket->Read(event);
|
||||||
|
|
||||||
|
LOG_APPEND(Log::LOG_WARN, "- cellRef: %s",
|
||||||
|
event->cellRef.mRefID.c_str());
|
||||||
|
|
||||||
|
myPacket->Send(event, true);
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
case ID_SCRIPT_GLOBAL_SHORT:
|
case ID_SCRIPT_GLOBAL_SHORT:
|
||||||
{
|
{
|
||||||
LOG_MESSAGE_SIMPLE(Log::LOG_WARN, "Received ID_SCRIPT_GLOBAL_SHORT from %s",
|
LOG_MESSAGE_SIMPLE(Log::LOG_WARN, "Received ID_SCRIPT_GLOBAL_SHORT from %s",
|
||||||
|
@ -603,8 +618,8 @@ void Networking::ProcessWorldPacket(RakNet::Packet *packet)
|
||||||
|
|
||||||
myPacket->Read(event);
|
myPacket->Read(event);
|
||||||
|
|
||||||
LOG_APPEND(Log::LOG_WARN, "- globalName: %s\n- shortVal: %i",
|
LOG_APPEND(Log::LOG_WARN, "- varName: %s\n- shortVal: %i",
|
||||||
event->globalName.c_str(),
|
event->varName.c_str(),
|
||||||
event->shortVal);
|
event->shortVal);
|
||||||
|
|
||||||
myPacket->Send(event, true);
|
myPacket->Send(event, true);
|
||||||
|
|
|
@ -230,7 +230,7 @@ void Main::PressedKey(int key)
|
||||||
// should be ignored because of their potential for spam
|
// should be ignored because of their potential for spam
|
||||||
bool Main::isValidPacketScript(std::string script)
|
bool Main::isValidPacketScript(std::string script)
|
||||||
{
|
{
|
||||||
static const int invalidPacketScriptsCount = 16;
|
static const int invalidPacketScriptsCount = 17;
|
||||||
static const std::string invalidPacketScripts[invalidPacketScriptsCount] = {
|
static const std::string invalidPacketScripts[invalidPacketScriptsCount] = {
|
||||||
// Spammy shorts
|
// Spammy shorts
|
||||||
"OutsideBanner",
|
"OutsideBanner",
|
||||||
|
@ -238,11 +238,12 @@ bool Main::isValidPacketScript(std::string script)
|
||||||
"dreamer_talkerEnable",
|
"dreamer_talkerEnable",
|
||||||
"drenSlaveOwners",
|
"drenSlaveOwners",
|
||||||
"ahnassiScript",
|
"ahnassiScript",
|
||||||
"FaluraScript",
|
|
||||||
"hlormarScript",
|
"hlormarScript",
|
||||||
// Spammy floats
|
// Spammy floats
|
||||||
"Float",
|
"Float",
|
||||||
"SignRotate",
|
"SignRotate",
|
||||||
|
"FaluraScript",
|
||||||
|
"jsaddhaScript",
|
||||||
// Spammy globals
|
// Spammy globals
|
||||||
"wraithguardScript",
|
"wraithguardScript",
|
||||||
// Spammy globals leading to crashes
|
// Spammy globals leading to crashes
|
||||||
|
|
|
@ -12,9 +12,11 @@
|
||||||
#include <apps/openmw/mwbase/windowmanager.hpp>
|
#include <apps/openmw/mwbase/windowmanager.hpp>
|
||||||
|
|
||||||
#include <apps/openmw/mwworld/cellstore.hpp>
|
#include <apps/openmw/mwworld/cellstore.hpp>
|
||||||
|
#include <apps/openmw/mwworld/esmstore.hpp>
|
||||||
|
#include <apps/openmw/mwworld/inventorystore.hpp>
|
||||||
|
|
||||||
#include <apps/openmw/mwclass/npc.hpp>
|
#include <apps/openmw/mwclass/npc.hpp>
|
||||||
#include <apps/openmw/mwmechanics/npcstats.hpp>
|
#include <apps/openmw/mwmechanics/npcstats.hpp>
|
||||||
#include <apps/openmw/mwworld/inventorystore.hpp>
|
|
||||||
#include <apps/openmw/mwmechanics/combat.hpp>
|
#include <apps/openmw/mwmechanics/combat.hpp>
|
||||||
|
|
||||||
#include <SDL_messagebox.h>
|
#include <SDL_messagebox.h>
|
||||||
|
@ -914,14 +916,42 @@ void Networking::ProcessWorldPacket(RakNet::Packet *packet)
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case ID_SCRIPT_MEMBER_SHORT:
|
||||||
|
{
|
||||||
|
LOG_MESSAGE_SIMPLE(Log::LOG_WARN, "%s", "Received ID_SCRIPT_MEMBER_SHORT");
|
||||||
|
LOG_APPEND(Log::LOG_WARN, "- cellRef: %s\n- index: %i\n- shortVal: %i\n",
|
||||||
|
event->cellRef.mRefID.c_str(),
|
||||||
|
event->index,
|
||||||
|
event->shortVal);
|
||||||
|
|
||||||
|
// Mimic the way a Ptr is fetched in InterpreterContext for similar situations
|
||||||
|
MWWorld::Ptr ptrFound = MWBase::Environment::get().getWorld()->getPtr(event->cellRef.mRefID, false);
|
||||||
|
|
||||||
|
if (ptrFound)
|
||||||
|
{
|
||||||
|
LOG_MESSAGE_SIMPLE(Log::LOG_WARN, "Found %s, %i",
|
||||||
|
ptrFound.getCellRef().getRefId().c_str(),
|
||||||
|
ptrFound.getCellRef().getRefNum());
|
||||||
|
|
||||||
|
ptrFound.getRefData().getLocals().mShorts.at(event->index) = event->shortVal;
|
||||||
|
std::string scriptId = ptrFound.getClass().getScript(ptrFound);
|
||||||
|
|
||||||
|
ptrFound.getRefData().setLocals(
|
||||||
|
*MWBase::Environment::get().getWorld()->getStore().get<ESM::Script>().find(scriptId));
|
||||||
|
|
||||||
|
ptrFound.getRefData().getLocals().mShorts[event->index] = event->shortVal;;
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
case ID_SCRIPT_GLOBAL_SHORT:
|
case ID_SCRIPT_GLOBAL_SHORT:
|
||||||
{
|
{
|
||||||
LOG_MESSAGE_SIMPLE(Log::LOG_WARN, "%s", "Received ID_SCRIPT_GLOBAL_SHORT");
|
LOG_MESSAGE_SIMPLE(Log::LOG_WARN, "%s", "Received ID_SCRIPT_GLOBAL_SHORT");
|
||||||
LOG_APPEND(Log::LOG_WARN, "- globalName: %s\n- shortVal: %i",
|
LOG_APPEND(Log::LOG_WARN, "- varName: %s\n- shortVal: %i",
|
||||||
event->globalName.c_str(),
|
event->varName.c_str(),
|
||||||
event->shortVal);
|
event->shortVal);
|
||||||
|
|
||||||
MWBase::Environment::get().getWorld()->setGlobalInt(event->globalName, event->shortVal);
|
MWBase::Environment::get().getWorld()->setGlobalInt(event->varName, event->shortVal);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -164,7 +164,8 @@ add_component_dir (openmw-mp
|
||||||
Packets/World/PacketContainerAdd Packets/World/PacketContainerRemove Packets/World/PacketDoorActivate
|
Packets/World/PacketContainerAdd Packets/World/PacketContainerRemove Packets/World/PacketDoorActivate
|
||||||
Packets/World/PacketVideoPlay
|
Packets/World/PacketVideoPlay
|
||||||
|
|
||||||
Packets/World/PacketScriptLocalShort Packets/World/PacketScriptLocalFloat Packets/World/PacketScriptGlobalShort)
|
Packets/World/PacketScriptLocalShort Packets/World/PacketScriptLocalFloat Packets/World/PacketScriptMemberShort
|
||||||
|
Packets/World/PacketScriptGlobalShort)
|
||||||
|
|
||||||
add_component_dir (fallback
|
add_component_dir (fallback
|
||||||
fallback validate
|
fallback validate
|
||||||
|
|
|
@ -38,7 +38,7 @@ namespace mwmp
|
||||||
int index;
|
int index;
|
||||||
int shortVal;
|
int shortVal;
|
||||||
float floatVal;
|
float floatVal;
|
||||||
std::string globalName;
|
std::string varName;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -17,6 +17,7 @@
|
||||||
|
|
||||||
#include "../Packets/World/PacketScriptLocalShort.hpp"
|
#include "../Packets/World/PacketScriptLocalShort.hpp"
|
||||||
#include "../Packets/World/PacketScriptLocalFloat.hpp"
|
#include "../Packets/World/PacketScriptLocalFloat.hpp"
|
||||||
|
#include "../Packets/World/PacketScriptMemberShort.hpp"
|
||||||
#include "../Packets/World/PacketScriptGlobalShort.hpp"
|
#include "../Packets/World/PacketScriptGlobalShort.hpp"
|
||||||
|
|
||||||
#include "WorldPacketController.hpp"
|
#include "WorldPacketController.hpp"
|
||||||
|
@ -46,6 +47,7 @@ mwmp::WorldPacketController::WorldPacketController(RakNet::RakPeerInterface *pee
|
||||||
|
|
||||||
AddPacket<PacketScriptLocalShort>(&packets, peer);
|
AddPacket<PacketScriptLocalShort>(&packets, peer);
|
||||||
AddPacket<PacketScriptLocalFloat>(&packets, peer);
|
AddPacket<PacketScriptLocalFloat>(&packets, peer);
|
||||||
|
AddPacket<PacketScriptMemberShort>(&packets, peer);
|
||||||
AddPacket<PacketScriptGlobalShort>(&packets, peer);
|
AddPacket<PacketScriptGlobalShort>(&packets, peer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -48,6 +48,7 @@ enum GameMessages
|
||||||
|
|
||||||
ID_SCRIPT_LOCAL_SHORT,
|
ID_SCRIPT_LOCAL_SHORT,
|
||||||
ID_SCRIPT_LOCAL_FLOAT,
|
ID_SCRIPT_LOCAL_FLOAT,
|
||||||
|
ID_SCRIPT_MEMBER_SHORT,
|
||||||
ID_SCRIPT_GLOBAL_SHORT
|
ID_SCRIPT_GLOBAL_SHORT
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -12,6 +12,6 @@ void PacketScriptGlobalShort::Packet(RakNet::BitStream *bs, WorldEvent *event, b
|
||||||
{
|
{
|
||||||
WorldPacket::Packet(bs, event, send);
|
WorldPacket::Packet(bs, event, send);
|
||||||
|
|
||||||
RW(event->globalName, send);
|
RW(event->varName, send);
|
||||||
RW(event->shortVal, send);
|
RW(event->shortVal, send);
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,19 @@
|
||||||
|
#include <components/openmw-mp/NetworkMessages.hpp>
|
||||||
|
#include "PacketScriptMemberShort.hpp"
|
||||||
|
|
||||||
|
using namespace mwmp;
|
||||||
|
|
||||||
|
PacketScriptMemberShort::PacketScriptMemberShort(RakNet::RakPeerInterface *peer) : WorldPacket(peer)
|
||||||
|
{
|
||||||
|
packetID = ID_SCRIPT_MEMBER_SHORT;
|
||||||
|
}
|
||||||
|
|
||||||
|
void PacketScriptMemberShort::Packet(RakNet::BitStream *bs, WorldEvent *event, bool send)
|
||||||
|
{
|
||||||
|
WorldPacket::Packet(bs, event, send);
|
||||||
|
|
||||||
|
RW(event->cellRef.mRefID, send);
|
||||||
|
|
||||||
|
RW(event->index, send);
|
||||||
|
RW(event->shortVal, send);
|
||||||
|
}
|
|
@ -0,0 +1,17 @@
|
||||||
|
#ifndef OPENMW_PACKETSCRIPTMEMBERSHORT_HPP
|
||||||
|
#define OPENMW_PACKETSCRIPTMEMBERSHORT_HPP
|
||||||
|
|
||||||
|
#include <components/openmw-mp/Packets/World/WorldPacket.hpp>
|
||||||
|
|
||||||
|
namespace mwmp
|
||||||
|
{
|
||||||
|
class PacketScriptMemberShort : public WorldPacket
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
PacketScriptMemberShort(RakNet::RakPeerInterface *peer);
|
||||||
|
|
||||||
|
virtual void Packet(RakNet::BitStream *bs, WorldEvent *event, bool send);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif //OPENMW_PACKETSCRIPTMEMBERSHORT_HPP
|
Loading…
Reference in a new issue