mirror of
https://github.com/TES3MP/openmw-tes3mp.git
synced 2025-04-01 18:36: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);
|
MWWorld::Ptr ptr = MWBase::Environment::get().getWorld()->searchPtrViaActorId(creatureActorId);
|
||||||
if (!ptr.isEmpty())
|
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
|
Send an ID_OBJECT_DELETE packet every time a summoned creature despawns
|
||||||
*/
|
*/
|
||||||
mwmp::ObjectList *objectList = mwmp::Main::get().getNetworking()->getObjectList();
|
if (mwmp::Main::get().getCellController()->hasLocalAuthority(*ptr.getCell()->getCell()))
|
||||||
objectList->reset();
|
{
|
||||||
objectList->packetOrigin = mwmp::CLIENT_GAMEPLAY;
|
mwmp::ObjectList *objectList = mwmp::Main::get().getNetworking()->getObjectList();
|
||||||
objectList->addObjectDelete(ptr);
|
objectList->reset();
|
||||||
objectList->sendObjectDelete();
|
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>()
|
const ESM::Static* fx = MWBase::Environment::get().getWorld()->getStore().get<ESM::Static>()
|
||||||
|
@ -2111,13 +2112,6 @@ namespace MWMechanics
|
||||||
cleanupSummonedCreature(stats, creature.second);
|
cleanupSummonedCreature(stats, creature.second);
|
||||||
creatureMap.clear();
|
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)
|
else if (creatureActorId != -1)
|
||||||
{
|
{
|
||||||
// We didn't find the creature. It's probably in an inactive cell.
|
// 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();
|
std::vector<int>& graveyard = casterStats.getSummonedCreatureGraveyard();
|
||||||
graveyard.push_back(creatureActorId);
|
graveyard.push_back(creatureActorId);
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
/*
|
|
||||||
End of tes3mp change (major)
|
|
||||||
*/
|
|
||||||
|
|
||||||
purgeSpellEffects(creatureActorId);
|
purgeSpellEffects(creatureActorId);
|
||||||
}
|
}
|
||||||
|
|
|
@ -148,22 +148,11 @@ namespace MWMechanics
|
||||||
++it;
|
++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();
|
std::vector<int> graveyard = creatureStats.getSummonedCreatureGraveyard();
|
||||||
creatureStats.getSummonedCreatureGraveyard().clear();
|
creatureStats.getSummonedCreatureGraveyard().clear();
|
||||||
|
|
||||||
for (const int creature : graveyard)
|
for (const int creature : graveyard)
|
||||||
MWBase::Environment::get().getMechanicsManager()->cleanupSummonedCreature(mActor, creature);
|
MWBase::Environment::get().getMechanicsManager()->cleanupSummonedCreature(mActor, creature);
|
||||||
*/
|
|
||||||
/*
|
|
||||||
End of tes3mp change (major)
|
|
||||||
*/
|
|
||||||
|
|
||||||
if (!cleanup)
|
if (!cleanup)
|
||||||
return;
|
return;
|
||||||
|
|
Loading…
Reference in a new issue