1
0
Fork 1
mirror of https://github.com/TES3MP/openmw-tes3mp.git synced 2025-10-10 07:26:33 +00:00

[Client] Fix cleanup of summoned creatures

Previously, summoned creatures weren't being deleted in certain situations because they were encountered again before the cell they were in had a local authority.
This commit is contained in:
David Cernat 2022-04-21 23:58:50 +03:00
parent 4e2860f578
commit 1a000bc0a8

View file

@ -2479,24 +2479,24 @@ namespace MWMechanics
void Actors::cleanupSummonedCreature (MWMechanics::CreatureStats& casterStats, int creatureActorId) void Actors::cleanupSummonedCreature (MWMechanics::CreatureStats& casterStats, int creatureActorId)
{ {
MWWorld::Ptr ptr = MWBase::Environment::get().getWorld()->searchPtrViaActorId(creatureActorId); MWWorld::Ptr ptr = MWBase::Environment::get().getWorld()->searchPtrViaActorId(creatureActorId);
if (!ptr.isEmpty())
{
/*
Start of tes3mp change (major)
Send an ID_OBJECT_DELETE packet every time a summoned creature despawns /*
*/ Start of tes3mp change (major)
if (mwmp::Main::get().getCellController()->hasLocalAuthority(*ptr.getCell()->getCell()))
{ Do a cleanup here and send an ID_OBJECT_DELETE packet every time a summoned creature
mwmp::ObjectList *objectList = mwmp::Main::get().getNetworking()->getObjectList(); despawns for the local player or for a local actor
objectList->reset(); */
objectList->packetOrigin = mwmp::CLIENT_GAMEPLAY; if (!ptr.isEmpty() &&
objectList->addObjectGeneric(ptr); (casterStats.getActorId() == getPlayer().getClass().getCreatureStats(getPlayer()).getActorId() || mwmp::Main::get().getCellController()->hasLocalAuthority(*ptr.getCell()->getCell())))
objectList->sendObjectDelete(); {
} mwmp::ObjectList *objectList = mwmp::Main::get().getNetworking()->getObjectList();
/* objectList->reset();
End of tes3mp change (major) objectList->packetOrigin = mwmp::CLIENT_GAMEPLAY;
*/ objectList->addObjectGeneric(ptr);
objectList->sendObjectDelete();
/*
End of tes3mp change (major)
*/
const ESM::Static* fx = MWBase::Environment::get().getWorld()->getStore().get<ESM::Static>() const ESM::Static* fx = MWBase::Environment::get().getWorld()->getStore().get<ESM::Static>()
.search("VFX_Summon_End"); .search("VFX_Summon_End");