mirror of
https://github.com/mangosfour/server.git
synced 2025-12-15 01:37:00 +00:00
Not store dependent spells in character_spell
* Mark spells learned in result character creating, another spell learning, skill grow, quest reward as dependent and not store its in `character_spell`. * Prevent re-learning known spell in expected state * Prevent re-learning low rank spell as active if higher rank known. * New type of non-stacked ranked spells check: skill dependent spell bonuses. * Activate (show propetly and cast if need) lesser spell rank for non-stackable in spellbooks spells at unlearn high rank
This commit is contained in:
parent
4b5aba18f8
commit
bbf8fd0742
10 changed files with 222 additions and 85 deletions
|
|
@ -1016,28 +1016,38 @@ bool SpellMgr::IsRankSpellDueToSpell(SpellEntry const *spellInfo_1,uint32 spellI
|
|||
|
||||
bool SpellMgr::canStackSpellRanks(SpellEntry const *spellInfo)
|
||||
{
|
||||
if(IsPassiveSpell(spellInfo->Id)) // ranked passive spell
|
||||
return false;
|
||||
if(spellInfo->powerType != POWER_MANA && spellInfo->powerType != POWER_HEALTH)
|
||||
return false;
|
||||
if(IsProfessionOrRidingSpell(spellInfo->Id))
|
||||
return false;
|
||||
|
||||
if(spellmgr.IsSkillBonusSpell(spellInfo->Id))
|
||||
return false;
|
||||
|
||||
// All stance spells. if any better way, change it.
|
||||
for (int i = 0; i < 3; i++)
|
||||
{
|
||||
// Paladin aura Spell
|
||||
if(spellInfo->SpellFamilyName == SPELLFAMILY_PALADIN
|
||||
&& spellInfo->Effect[i]==SPELL_EFFECT_APPLY_AREA_AURA_RAID)
|
||||
return false;
|
||||
// Druid form Spell
|
||||
if(spellInfo->SpellFamilyName == SPELLFAMILY_DRUID
|
||||
&& spellInfo->Effect[i]==SPELL_EFFECT_APPLY_AURA
|
||||
&& spellInfo->EffectApplyAuraName[i] == SPELL_AURA_MOD_SHAPESHIFT)
|
||||
return false;
|
||||
// Rogue Stealth
|
||||
if(spellInfo->SpellFamilyName == SPELLFAMILY_ROGUE
|
||||
&& spellInfo->Effect[i]==SPELL_EFFECT_APPLY_AURA
|
||||
&& spellInfo->EffectApplyAuraName[i] == SPELL_AURA_MOD_SHAPESHIFT)
|
||||
return false;
|
||||
switch(spellInfo->SpellFamilyName)
|
||||
{
|
||||
case SPELLFAMILY_PALADIN:
|
||||
// Paladin aura Spell
|
||||
if (spellInfo->Effect[i]==SPELL_EFFECT_APPLY_AREA_AURA_RAID)
|
||||
return false;
|
||||
break;
|
||||
case SPELLFAMILY_DRUID:
|
||||
// Druid form Spell
|
||||
if (spellInfo->Effect[i]==SPELL_EFFECT_APPLY_AURA &&
|
||||
spellInfo->EffectApplyAuraName[i] == SPELL_AURA_MOD_SHAPESHIFT)
|
||||
return false;
|
||||
break;
|
||||
case SPELLFAMILY_ROGUE:
|
||||
// Rogue Stealth
|
||||
if (spellInfo->Effect[i]==SPELL_EFFECT_APPLY_AURA &&
|
||||
spellInfo->EffectApplyAuraName[i] == SPELL_AURA_MOD_SHAPESHIFT)
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
|
@ -1450,6 +1460,24 @@ bool SpellMgr::IsPrimaryProfessionFirstRankSpell(uint32 spellId) const
|
|||
return IsPrimaryProfessionSpell(spellId) && GetSpellRank(spellId)==1;
|
||||
}
|
||||
|
||||
bool SpellMgr::IsSkillBonusSpell(uint32 spellId) const
|
||||
{
|
||||
SkillLineAbilityMap::const_iterator lower = GetBeginSkillLineAbilityMap(spellId);
|
||||
SkillLineAbilityMap::const_iterator upper = GetEndSkillLineAbilityMap(spellId);
|
||||
|
||||
for(SkillLineAbilityMap::const_iterator _spell_idx = lower; _spell_idx != upper; ++_spell_idx)
|
||||
{
|
||||
SkillLineAbilityEntry const *pAbility = _spell_idx->second;
|
||||
if (!pAbility || pAbility->learnOnGetSkill != ABILITY_LEARNED_ON_GET_PROFESSION_SKILL)
|
||||
continue;
|
||||
|
||||
if(pAbility->req_skill_value > 0)
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
SpellEntry const* SpellMgr::SelectAuraRankForPlayerLevel(SpellEntry const* spellInfo, uint32 playerLevel) const
|
||||
{
|
||||
// ignore passive spells
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue