Merge pull request #81 from H0zen/develop21
Fix displaying the right ranks of spells in spellbook
This commit is contained in:
commit
d721f96076
@ -2845,15 +2845,7 @@ bool Player::addSpell(uint32 spell_id, bool active, bool learning, bool dependen
|
|||||||
}
|
}
|
||||||
else if (IsInWorld())
|
else if (IsInWorld())
|
||||||
{
|
{
|
||||||
if (next_active_spell_id)
|
if (!next_active_spell_id)
|
||||||
{
|
|
||||||
// update spell ranks in spellbook and action bar
|
|
||||||
WorldPacket data(SMSG_SUPERCEDED_SPELL, (4));
|
|
||||||
data << uint16(spell_id);
|
|
||||||
data << uint16(next_active_spell_id);
|
|
||||||
GetSession()->SendPacket(&data);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
WorldPacket data(SMSG_REMOVED_SPELL, 4);
|
WorldPacket data(SMSG_REMOVED_SPELL, 4);
|
||||||
data << uint16(spell_id);
|
data << uint16(spell_id);
|
||||||
@ -2931,8 +2923,10 @@ bool Player::addSpell(uint32 spell_id, bool active, bool learning, bool dependen
|
|||||||
newspell.dependent = dependent;
|
newspell.dependent = dependent;
|
||||||
newspell.disabled = disabled;
|
newspell.disabled = disabled;
|
||||||
|
|
||||||
|
bool canAddToSpellBook = true;
|
||||||
|
|
||||||
// replace spells in action bars and spellbook to bigger rank if only one spell rank must be accessible
|
// replace spells in action bars and spellbook to bigger rank if only one spell rank must be accessible
|
||||||
if (newspell.active && !newspell.disabled && sSpellMgr.IsRankedSpellNonStackableInSpellBook(spellInfo))
|
if (newspell.active && !newspell.disabled)
|
||||||
{
|
{
|
||||||
for (PlayerSpellMap::iterator itr2 = m_spells.begin(); itr2 != m_spells.end(); ++itr2)
|
for (PlayerSpellMap::iterator itr2 = m_spells.begin(); itr2 != m_spells.end(); ++itr2)
|
||||||
{
|
{
|
||||||
@ -2946,7 +2940,8 @@ bool Player::addSpell(uint32 spell_id, bool active, bool learning, bool dependen
|
|||||||
{
|
{
|
||||||
if (playerSpell2.active)
|
if (playerSpell2.active)
|
||||||
{
|
{
|
||||||
if (sSpellMgr.IsHighRankOfSpell(spell_id, itr2->first))
|
if (sSpellMgr.IsHighRankOfSpell(spell_id, itr2->first) &&
|
||||||
|
sSpellMgr.IsRankedSpellNonStackableInSpellBook(i_spellInfo))
|
||||||
{
|
{
|
||||||
if (IsInWorld()) // not send spell (re-/over-)learn packets at loading
|
if (IsInWorld()) // not send spell (re-/over-)learn packets at loading
|
||||||
{
|
{
|
||||||
@ -2960,8 +2955,11 @@ bool Player::addSpell(uint32 spell_id, bool active, bool learning, bool dependen
|
|||||||
playerSpell2.active = false;
|
playerSpell2.active = false;
|
||||||
if (playerSpell2.state != PLAYERSPELL_NEW)
|
if (playerSpell2.state != PLAYERSPELL_NEW)
|
||||||
{ playerSpell2.state = PLAYERSPELL_CHANGED; }
|
{ playerSpell2.state = PLAYERSPELL_CHANGED; }
|
||||||
|
|
||||||
|
canAddToSpellBook = false;
|
||||||
}
|
}
|
||||||
else if (sSpellMgr.IsHighRankOfSpell(itr2->first, spell_id))
|
else if (sSpellMgr.IsHighRankOfSpell(itr2->first, spell_id) &&
|
||||||
|
sSpellMgr.IsRankedSpellNonStackableInSpellBook(spellInfo))
|
||||||
{
|
{
|
||||||
if (IsInWorld()) // not send spell (re-/over-)learn packets at loading
|
if (IsInWorld()) // not send spell (re-/over-)learn packets at loading
|
||||||
{
|
{
|
||||||
@ -2975,6 +2973,8 @@ bool Player::addSpell(uint32 spell_id, bool active, bool learning, bool dependen
|
|||||||
newspell.active = false;
|
newspell.active = false;
|
||||||
if (newspell.state != PLAYERSPELL_NEW)
|
if (newspell.state != PLAYERSPELL_NEW)
|
||||||
{ newspell.state = PLAYERSPELL_CHANGED; }
|
{ newspell.state = PLAYERSPELL_CHANGED; }
|
||||||
|
|
||||||
|
canAddToSpellBook = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2983,8 +2983,8 @@ bool Player::addSpell(uint32 spell_id, bool active, bool learning, bool dependen
|
|||||||
|
|
||||||
m_spells[spell_id] = newspell;
|
m_spells[spell_id] = newspell;
|
||||||
|
|
||||||
// return false if spell disabled
|
// return false if spell disabled or spell is non-stackable in spellbook
|
||||||
if (newspell.disabled)
|
if (newspell.disabled || !canAddToSpellBook)
|
||||||
{ return false; }
|
{ return false; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1958,30 +1958,15 @@ bool SpellMgr::canStackSpellRanksInSpellBook(SpellEntry const* spellInfo) const
|
|||||||
if (IsSkillBonusSpell(spellInfo->Id))
|
if (IsSkillBonusSpell(spellInfo->Id))
|
||||||
{ return false; }
|
{ return false; }
|
||||||
|
|
||||||
// All stance spells. if any better way, change it.
|
// Any spell which has skill forward spell
|
||||||
for (int i = 0; i < MAX_EFFECT_INDEX; ++i)
|
// Include party auras from paladins, stealth from rogues, shapeshift spells for druids...and more :)
|
||||||
|
SkillLineAbilityMap::const_iterator itr = mSkillLineAbilityMap.find(spellInfo->Id);
|
||||||
|
if (itr != mSkillLineAbilityMap.end())
|
||||||
{
|
{
|
||||||
switch (spellInfo->SpellFamilyName)
|
if (itr->second->forward_spellid != 0)
|
||||||
{
|
|
||||||
case SPELLFAMILY_PALADIN:
|
|
||||||
// Paladin aura Spell
|
|
||||||
if (spellInfo->Effect[i] == SPELL_EFFECT_APPLY_AREA_AURA_PARTY)
|
|
||||||
{ return false; }
|
{ 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; }
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2274,8 +2274,8 @@ void Spell::EffectLearnSpell(SpellEffectIndex eff_idx)
|
|||||||
}
|
}
|
||||||
|
|
||||||
Player* player = (Player*)unitTarget;
|
Player* player = (Player*)unitTarget;
|
||||||
|
|
||||||
uint32 spellToLearn = m_spellInfo->EffectTriggerSpell[eff_idx];
|
uint32 spellToLearn = m_spellInfo->EffectTriggerSpell[eff_idx];
|
||||||
|
|
||||||
player->learnSpell(spellToLearn, false);
|
player->learnSpell(spellToLearn, false);
|
||||||
|
|
||||||
if (WorldObject const* caster = GetCastingObject())
|
if (WorldObject const* caster = GetCastingObject())
|
||||||
|
@ -706,6 +706,7 @@ SpellAuraProcResult Unit::HandleDummyAuraProc(Unit* pVictim, uint32 damage, Aura
|
|||||||
uint32 spellId;
|
uint32 spellId;
|
||||||
switch (triggeredByAura->GetId())
|
switch (triggeredByAura->GetId())
|
||||||
{
|
{
|
||||||
|
case 20154:
|
||||||
case 21084: spellId = 25742; break; // Rank 1
|
case 21084: spellId = 25742; break; // Rank 1
|
||||||
case 20287: spellId = 25740; break; // Rank 2
|
case 20287: spellId = 25740; break; // Rank 2
|
||||||
case 20288: spellId = 25739; break; // Rank 3
|
case 20288: spellId = 25739; break; // Rank 3
|
||||||
|
@ -32,12 +32,12 @@
|
|||||||
#define REALMD_DB_UPDATE_DESCRIPTION "dbdocs update"
|
#define REALMD_DB_UPDATE_DESCRIPTION "dbdocs update"
|
||||||
|
|
||||||
#define CHAR_DB_VERSION_NR 21
|
#define CHAR_DB_VERSION_NR 21
|
||||||
#define CHAR_DB_STRUCTURE_NR 2
|
#define CHAR_DB_STRUCTURE_NR 3
|
||||||
#define CHAR_DB_CONTENT_NR 1
|
#define CHAR_DB_CONTENT_NR 1
|
||||||
#define CHAR_DB_UPDATE_DESCRIPTION "Characters dbdocs update"
|
#define CHAR_DB_UPDATE_DESCRIPTION "Fix SoR paladin"
|
||||||
|
|
||||||
#define WORLD_DB_VERSION_NR 21
|
#define WORLD_DB_VERSION_NR 21
|
||||||
#define WORLD_DB_STRUCTURE_NR 2
|
#define WORLD_DB_STRUCTURE_NR 3
|
||||||
#define WORLD_DB_CONTENT_NR 3
|
#define WORLD_DB_CONTENT_NR 1
|
||||||
#define WORLD_DB_UPDATE_DESCRIPTION "NPC 15213 event_ai fix"
|
#define WORLD_DB_UPDATE_DESCRIPTION "Fix SoR paladin"
|
||||||
#endif // __REVISION_H__
|
#endif // __REVISION_H__
|
||||||
|
Loading…
x
Reference in New Issue
Block a user