mirror of
https://github.com/azerothcore/mod-learn-spells.git
synced 2026-02-07 20:51:13 +00:00
feat(cpp/conf): Add option to teach all spells on first login (#9)
- Adds a `LearnAllOnFirstLogin` (default: false) option to teach the player all the spells when he first logs in, - Disabled by default because of performance concerns, - Slight optimizations have been added to mitigate this issue - However enabling this on a more populous server could cause issues due to the current design of the module
This commit is contained in:
@@ -12,6 +12,12 @@ LearnSpells.Enable = 1
|
|||||||
|
|
||||||
LearnSpells.Announce = 1
|
LearnSpells.Announce = 1
|
||||||
|
|
||||||
|
# Should the player receive all spells on first login?
|
||||||
|
# Useful for instant leveling type of servers
|
||||||
|
# (1: true | 0: false)
|
||||||
|
|
||||||
|
LearnSpells.LearnAllOnFirstLogin = 0
|
||||||
|
|
||||||
# Max level Limit the player will learn spells
|
# Max level Limit the player will learn spells
|
||||||
# Default: = 80
|
# Default: = 80
|
||||||
|
|
||||||
|
|||||||
@@ -10,12 +10,7 @@ uint32 MaxLevel;
|
|||||||
class LearnSpellsOnLevelUp : public PlayerScript
|
class LearnSpellsOnLevelUp : public PlayerScript
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
std::vector<uint32> ignoreSpells;
|
std::unordered_set<uint32> ignoreSpells = {
|
||||||
|
|
||||||
LearnSpellsOnLevelUp() : PlayerScript("LearnSpellsOnLevelUp")
|
|
||||||
{
|
|
||||||
uint32 temp[] =
|
|
||||||
{
|
|
||||||
64380, 23885, 23880, 44461, 25346, 10274, 10273, 8418,
|
64380, 23885, 23880, 44461, 25346, 10274, 10273, 8418,
|
||||||
8419, 7270, 7269, 7268, 54648, 12536, 24530, 70909,
|
8419, 7270, 7269, 7268, 54648, 12536, 24530, 70909,
|
||||||
12494, 57933, 24224, 27095, 27096, 27097, 27099, 32841,
|
12494, 57933, 24224, 27095, 27096, 27097, 27099, 32841,
|
||||||
@@ -52,10 +47,11 @@ public:
|
|||||||
18848, 16979, 49376, 54055, 20647, 42243, 24131
|
18848, 16979, 49376, 54055, 20647, 42243, 24131
|
||||||
};
|
};
|
||||||
|
|
||||||
ignoreSpells = std::vector<uint32>(temp, temp + sizeof(temp) / sizeof(temp[0]));
|
LearnSpellsOnLevelUp() : PlayerScript("LearnSpellsOnLevelUp")
|
||||||
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
void OnLogin(Player *player)
|
void OnLogin(Player *player) override
|
||||||
{
|
{
|
||||||
if (sConfigMgr->GetBoolDefault("LearnSpells.Enable", true))
|
if (sConfigMgr->GetBoolDefault("LearnSpells.Enable", true))
|
||||||
{
|
{
|
||||||
@@ -66,7 +62,15 @@ public:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void OnLevelChanged(Player* player, uint8 oldLevel)
|
void OnFirstLogin(Player *player) override
|
||||||
|
{
|
||||||
|
if (sConfigMgr->GetBoolDefault("LearnSpells.LearnAllOnFirstLogin", false))
|
||||||
|
{
|
||||||
|
LearnSpellsForNewLevel(player, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void OnLevelChanged(Player *player, uint8 oldLevel) override
|
||||||
{
|
{
|
||||||
if (sConfigMgr->GetBoolDefault("LearnSpells.Enable", true))
|
if (sConfigMgr->GetBoolDefault("LearnSpells.Enable", true))
|
||||||
{
|
{
|
||||||
@@ -80,13 +84,11 @@ public:
|
|||||||
|
|
||||||
bool IsIgnoredSpell(uint32 spellID)
|
bool IsIgnoredSpell(uint32 spellID)
|
||||||
{
|
{
|
||||||
for (std::vector<uint32>::const_iterator itr = ignoreSpells.begin(); itr != ignoreSpells.end(); ++itr)
|
auto spellIt = ignoreSpells.find(spellID);
|
||||||
if (spellID == (*itr))
|
return spellIt != ignoreSpells.end();
|
||||||
return true;
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void LearnSpellsForNewLevel(Player* player, uint8 level)
|
void LearnSpellsForNewLevel(Player *player, uint8 level)
|
||||||
{
|
{
|
||||||
if (level == player->getLevel() + 1)
|
if (level == player->getLevel() + 1)
|
||||||
return;
|
return;
|
||||||
@@ -126,18 +128,18 @@ public:
|
|||||||
}
|
}
|
||||||
for (uint32 i = 0; i < sSpellMgr->GetSpellInfoStoreSize(); ++i)
|
for (uint32 i = 0; i < sSpellMgr->GetSpellInfoStoreSize(); ++i)
|
||||||
{
|
{
|
||||||
SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(i);
|
SpellInfo const *spellInfo = sSpellMgr->GetSpellInfo(i);
|
||||||
if (!spellInfo)
|
if (!spellInfo)
|
||||||
continue;
|
continue;
|
||||||
if (spellInfo->SpellFamilyName != family)
|
if (spellInfo->SpellFamilyName != family)
|
||||||
continue;
|
continue;
|
||||||
if (IsIgnoredSpell(spellInfo->Id))
|
if ((spellInfo->AttributesEx7 & SPELL_ATTR7_ALLIANCE_ONLY && player->GetTeamId() != TEAM_ALLIANCE) || (spellInfo->AttributesEx7 & SPELL_ATTR7_HORDE_ONLY && player->GetTeamId() != TEAM_HORDE))
|
||||||
continue;
|
continue;
|
||||||
if (spellInfo->PowerType == POWER_FOCUS)
|
if (spellInfo->PowerType == POWER_FOCUS)
|
||||||
continue;
|
continue;
|
||||||
if (DisableMgr::IsDisabledFor(DISABLE_TYPE_SPELL, spellInfo->Id, player))
|
if (IsIgnoredSpell(spellInfo->Id))
|
||||||
continue;
|
continue;
|
||||||
if ((spellInfo->AttributesEx7 & SPELL_ATTR7_ALLIANCE_ONLY && player->GetTeamId() != TEAM_ALLIANCE) || (spellInfo->AttributesEx7 & SPELL_ATTR7_HORDE_ONLY && player->GetTeamId() != TEAM_HORDE))
|
if (DisableMgr::IsDisabledFor(DISABLE_TYPE_SPELL, spellInfo->Id, player))
|
||||||
continue;
|
continue;
|
||||||
if (spellInfo->BaseLevel != level && sSpellMgr->IsSpellValid(spellInfo))
|
if (spellInfo->BaseLevel != level && sSpellMgr->IsSpellValid(spellInfo))
|
||||||
continue;
|
continue;
|
||||||
@@ -150,7 +152,7 @@ public:
|
|||||||
if (itr->second->spellId == spellInfo->Id && itr->second->racemask == 0 && itr->second->learnOnGetSkill == 0)
|
if (itr->second->spellId == spellInfo->Id && itr->second->racemask == 0 && itr->second->learnOnGetSkill == 0)
|
||||||
{
|
{
|
||||||
valid = true;
|
valid = true;
|
||||||
SpellInfo const* prevSpell = spellInfo->GetPrevRankSpell();
|
SpellInfo const *prevSpell = spellInfo->GetPrevRankSpell();
|
||||||
if (prevSpell && !player->HasSpell(prevSpell->Id))
|
if (prevSpell && !player->HasSpell(prevSpell->Id))
|
||||||
{
|
{
|
||||||
valid = false;
|
valid = false;
|
||||||
@@ -173,11 +175,12 @@ public:
|
|||||||
class LearnAllSpellsWorld : public WorldScript
|
class LearnAllSpellsWorld : public WorldScript
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
LearnAllSpellsWorld() : WorldScript("LearnAllSpellsWorld") { }
|
LearnAllSpellsWorld() : WorldScript("LearnAllSpellsWorld") {}
|
||||||
|
|
||||||
void OnBeforeConfigLoad(bool reload) override
|
void OnBeforeConfigLoad(bool reload) override
|
||||||
{
|
{
|
||||||
if (!reload) {
|
if (!reload)
|
||||||
|
{
|
||||||
std::string conf_path = _CONF_DIR;
|
std::string conf_path = _CONF_DIR;
|
||||||
std::string cfg_file = conf_path + "/mod_learnspells.conf";
|
std::string cfg_file = conf_path + "/mod_learnspells.conf";
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
|
|||||||
Reference in New Issue
Block a user