[Client] Avoid PlayerSpellbook packet spam in some mods

pull/484/head
David Cernat 6 years ago
parent d9bc1abf48
commit 1baf82db32

@ -470,18 +470,24 @@ namespace MWScript
// make sure a spell with this ID actually exists. // make sure a spell with this ID actually exists.
MWBase::Environment::get().getWorld()->getStore().get<ESM::Spell>().find (id); MWBase::Environment::get().getWorld()->getStore().get<ESM::Spell>().find (id);
ptr.getClass().getCreatureStats (ptr).getSpells().add (id);
/* /*
Start of tes3mp addition Start of tes3mp change (major)
Only add the spell if the target doesn't already have it
Send an ID_PLAYER_SPELLBOOK packet every time a player gains a spell Send an ID_PLAYER_SPELLBOOK packet every time a player gains a spell here
through a script
*/ */
if (ptr == MWMechanics::getPlayer()) MWMechanics::Spells &spells = ptr.getClass().getCreatureStats(ptr).getSpells();
mwmp::Main::get().getLocalPlayer()->sendSpellChange(id, mwmp::SpellbookChanges::ADD);
if (!spells.hasSpell(id))
{
spells.add(id);
if (mwmp::Main::get().getLocalPlayer()->isLoggedIn() && ptr == MWMechanics::getPlayer())
mwmp::Main::get().getLocalPlayer()->sendSpellChange(id, mwmp::SpellbookChanges::ADD);
}
/* /*
End of tes3mp addition End of tes3mp change (major)
*/ */
} }
}; };
@ -498,26 +504,32 @@ namespace MWScript
std::string id = runtime.getStringLiteral (runtime[0].mInteger); std::string id = runtime.getStringLiteral (runtime[0].mInteger);
runtime.pop(); runtime.pop();
ptr.getClass().getCreatureStats (ptr).getSpells().remove (id); /*
Start of tes3mp change (major)
Only remove the spell if the target has it
MWBase::WindowManager *wm = MWBase::Environment::get().getWindowManager(); Send an ID_PLAYER_SPELLBOOK packet every time a player loses a spell here
*/
MWMechanics::Spells &spells = ptr.getClass().getCreatureStats(ptr).getSpells();
if (ptr == MWMechanics::getPlayer() && if (spells.hasSpell(id))
id == wm->getSelectedSpell())
{ {
wm->unsetSelectedSpell(); ptr.getClass().getCreatureStats(ptr).getSpells().remove(id);
}
/* if (ptr == MWMechanics::getPlayer())
Start of tes3mp addition {
MWBase::WindowManager *wm = MWBase::Environment::get().getWindowManager();
Send an ID_PLAYER_SPELLBOOK packet every time a player loses a spell if (id == wm->getSelectedSpell())
through a script wm->unsetSelectedSpell();
*/
if (ptr == MWMechanics::getPlayer()) if (mwmp::Main::get().getLocalPlayer()->isLoggedIn())
mwmp::Main::get().getLocalPlayer()->sendSpellChange(id, mwmp::SpellbookChanges::REMOVE); mwmp::Main::get().getLocalPlayer()->sendSpellChange(id, mwmp::SpellbookChanges::REMOVE);
}
}
/* /*
End of tes3mp addition End of tes3mp change (major)
*/ */
} }
}; };

Loading…
Cancel
Save