1
0
Fork 1
mirror of https://github.com/TES3MP/openmw-tes3mp.git synced 2025-03-30 02:06:43 +00:00

[General] Use different compromise for summoning

Revert 9502d84a9cb99028f76f7fd2e05f9193ca66561 because the creature graveyard solves more problems than it causes. Only have the authority of a cell send deletion packets when a summon despawns.

Summoning is one of the least multiplayer-friendly systems in OpenMW and really needs to be redone serverside.
This commit is contained in:
David Cernat 2019-12-02 20:48:52 +02:00
parent 753e310dd4
commit 9792a5256f
2 changed files with 10 additions and 31 deletions

View file

@ -2082,20 +2082,21 @@ namespace MWMechanics
MWWorld::Ptr ptr = MWBase::Environment::get().getWorld()->searchPtrViaActorId(creatureActorId);
if (!ptr.isEmpty())
{
MWBase::Environment::get().getWorld()->deleteObject(ptr);
/*
Start of tes3mp addition
Start of tes3mp change (major)
Send an ID_OBJECT_DELETE packet every time a summoned creature despawns
*/
mwmp::ObjectList *objectList = mwmp::Main::get().getNetworking()->getObjectList();
objectList->reset();
objectList->packetOrigin = mwmp::CLIENT_GAMEPLAY;
objectList->addObjectDelete(ptr);
objectList->sendObjectDelete();
if (mwmp::Main::get().getCellController()->hasLocalAuthority(*ptr.getCell()->getCell()))
{
mwmp::ObjectList *objectList = mwmp::Main::get().getNetworking()->getObjectList();
objectList->reset();
objectList->packetOrigin = mwmp::CLIENT_GAMEPLAY;
objectList->addObjectDelete(ptr);
objectList->sendObjectDelete();
}
/*
End of tes3mp addition
End of tes3mp change (major)
*/
const ESM::Static* fx = MWBase::Environment::get().getWorld()->getStore().get<ESM::Static>()
@ -2111,13 +2112,6 @@ namespace MWMechanics
cleanupSummonedCreature(stats, creature.second);
creatureMap.clear();
}
/*
Start of tes3mp change (major)
Don't use a clientside creature graveyard in multiplayer and expect the server
to handle summon deletions instead
*/
/*
else if (creatureActorId != -1)
{
// We didn't find the creature. It's probably in an inactive cell.
@ -2125,10 +2119,6 @@ namespace MWMechanics
std::vector<int>& graveyard = casterStats.getSummonedCreatureGraveyard();
graveyard.push_back(creatureActorId);
}
*/
/*
End of tes3mp change (major)
*/
purgeSpellEffects(creatureActorId);
}

View file

@ -148,22 +148,11 @@ namespace MWMechanics
++it;
}
/*
Start of tes3mp change (major)
Don't use a clientside creature graveyard in multiplayer and expect the server
to handle summon deletions instead
*/
/*
std::vector<int> graveyard = creatureStats.getSummonedCreatureGraveyard();
creatureStats.getSummonedCreatureGraveyard().clear();
for (const int creature : graveyard)
MWBase::Environment::get().getMechanicsManager()->cleanupSummonedCreature(mActor, creature);
*/
/*
End of tes3mp change (major)
*/
if (!cleanup)
return;