[Client] Prevent ObjectState packet spam

This commit is contained in:
David Cernat 2017-07-20 17:01:04 +03:00
parent b8b3856c73
commit 7173a48f4b

View file

@ -582,47 +582,57 @@ namespace MWScript
void InterpreterContext::enable (const std::string& id) void InterpreterContext::enable (const std::string& id)
{ {
MWWorld::Ptr ref = getReferenceImp (id, false); MWWorld::Ptr ref = getReferenceImp (id, false);
MWBase::Environment::get().getWorld()->enable (ref);
/* /*
Start of tes3mp addition Start of tes3mp addition
Send an ID_OBJECT_STATE packet whenever an object is enabled, as long as Send an ID_OBJECT_STATE packet whenever an object is enabled, as long as
the player has finished character generation the player has finished character generation and the object wasn't already
enabled previously
*/ */
if (mwmp::Main::get().getLocalPlayer()->hasFinishedCharGen()) if (mwmp::Main::get().getLocalPlayer()->hasFinishedCharGen())
{ {
mwmp::WorldEvent *worldEvent = mwmp::Main::get().getNetworking()->getWorldEvent(); if (!ref.getRefData().isEnabled())
worldEvent->reset(); {
worldEvent->addObjectState(ref, true); mwmp::WorldEvent *worldEvent = mwmp::Main::get().getNetworking()->getWorldEvent();
worldEvent->sendObjectState(); worldEvent->reset();
worldEvent->addObjectState(ref, true);
worldEvent->sendObjectState();
}
} }
/* /*
End of tes3mp addition End of tes3mp addition
*/ */
MWBase::Environment::get().getWorld()->enable (ref);
} }
void InterpreterContext::disable (const std::string& id) void InterpreterContext::disable (const std::string& id)
{ {
MWWorld::Ptr ref = getReferenceImp (id, false); MWWorld::Ptr ref = getReferenceImp (id, false);
MWBase::Environment::get().getWorld()->disable (ref);
/* /*
Start of tes3mp addition Start of tes3mp addition
Send an ID_OBJECT_STATE packet whenever an object is disabled, as long as Send an ID_OBJECT_STATE packet whenever an object is disabled, as long as
the player has finished character generation the player has finished character generation and the object wasn't already
disabled previously
*/ */
if (mwmp::Main::get().getLocalPlayer()->hasFinishedCharGen()) if (mwmp::Main::get().getLocalPlayer()->hasFinishedCharGen())
{ {
mwmp::WorldEvent *worldEvent = mwmp::Main::get().getNetworking()->getWorldEvent(); if (ref.getRefData().isEnabled())
worldEvent->reset(); {
worldEvent->addObjectState(ref, false); mwmp::WorldEvent *worldEvent = mwmp::Main::get().getNetworking()->getWorldEvent();
worldEvent->sendObjectState(); worldEvent->reset();
worldEvent->addObjectState(ref, false);
worldEvent->sendObjectState();
}
} }
/* /*
End of tes3mp addition End of tes3mp addition
*/ */
MWBase::Environment::get().getWorld()->disable (ref);
} }
int InterpreterContext::getMemberShort (const std::string& id, const std::string& name, int InterpreterContext::getMemberShort (const std::string& id, const std::string& name,