1
0
Fork 1
mirror of https://github.com/TES3MP/openmw-tes3mp.git synced 2025-07-13 05:51:46 +00:00

[Client] Make ActiveSpells::removeSpellByTimestamp() return a boolean

Add logging to LocalPlayer::removeSpellsActive() to track when a player's active spell hasn't been removed due to an invalid timestamp.
This commit is contained in:
David Cernat 2022-02-12 14:00:47 +02:00
parent ed9a85f13b
commit f2d95dc84d
3 changed files with 15 additions and 4 deletions

View file

@ -308,8 +308,10 @@ namespace MWMechanics
Remove the spell with a certain ID and a certain timestamp, useful Remove the spell with a certain ID and a certain timestamp, useful
when there are stacked spells with the same ID when there are stacked spells with the same ID
Returns a boolean that indicates whether the corresponding spell was found
*/ */
void ActiveSpells::removeSpellByTimestamp(const std::string& id, MWWorld::TimeStamp timestamp) bool ActiveSpells::removeSpellByTimestamp(const std::string& id, MWWorld::TimeStamp timestamp)
{ {
for (TContainer::iterator spell = mSpells.begin(); spell != mSpells.end(); ++spell) for (TContainer::iterator spell = mSpells.begin(); spell != mSpells.end(); ++spell)
{ {
@ -319,10 +321,12 @@ namespace MWMechanics
{ {
spell->second.mEffects.clear(); spell->second.mEffects.clear();
mSpellsChanged = true; mSpellsChanged = true;
break; return true;
} }
} }
} }
return false;
} }
/* /*
End of tes3mp addition End of tes3mp addition

View file

@ -107,7 +107,7 @@ namespace MWMechanics
Remove the spell with a certain ID and a certain timestamp, useful Remove the spell with a certain ID and a certain timestamp, useful
when there are stacked spells with the same ID when there are stacked spells with the same ID
*/ */
void removeSpellByTimestamp(const std::string& id, MWWorld::TimeStamp timestamp); bool removeSpellByTimestamp(const std::string& id, MWWorld::TimeStamp timestamp);
/* /*
End of tes3mp addition End of tes3mp addition
*/ */

View file

@ -824,11 +824,18 @@ void LocalPlayer::removeSpellsActive()
for (const auto& activeSpell : spellsActiveChanges.activeSpells) for (const auto& activeSpell : spellsActiveChanges.activeSpells)
{ {
LOG_APPEND(TimedLog::LOG_INFO, "- removing %sstacking active spell %s", activeSpell.isStackingSpell ? "" : "non-", activeSpell.id.c_str());
// Remove stacking spells based on their timestamps // Remove stacking spells based on their timestamps
if (activeSpell.isStackingSpell) if (activeSpell.isStackingSpell)
{ {
MWWorld::TimeStamp timestamp = MWWorld::TimeStamp(activeSpell.timestampHour, activeSpell.timestampDay); MWWorld::TimeStamp timestamp = MWWorld::TimeStamp(activeSpell.timestampHour, activeSpell.timestampDay);
activeSpells.removeSpellByTimestamp(activeSpell.id, timestamp); bool foundSpell = activeSpells.removeSpellByTimestamp(activeSpell.id, timestamp);
if (!foundSpell)
{
LOG_APPEND(TimedLog::LOG_INFO, "-- spell with this ID and timestamp could not be found!");
}
} }
else else
{ {