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:
parent
753e310dd4
commit
9792a5256f
2 changed files with 10 additions and 31 deletions
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in a new issue