mirror of
https://github.com/mangosfour/server.git
synced 2025-12-13 22:37:03 +00:00
[7083] Implement support for cast-spells in trainer lists for riding also.
This commit is contained in:
parent
7b6b0bb816
commit
950df723d7
5 changed files with 32 additions and 7 deletions
|
|
@ -7065,7 +7065,7 @@ void ObjectMgr::LoadTrainerSpell()
|
||||||
if(spellinfo->Effect[i]!=SPELL_EFFECT_LEARN_SPELL)
|
if(spellinfo->Effect[i]!=SPELL_EFFECT_LEARN_SPELL)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if(SpellMgr::IsProfessionSpell(spellinfo->EffectTriggerSpell[i]))
|
if(SpellMgr::IsProfessionOrRidingSpell(spellinfo->EffectTriggerSpell[i]))
|
||||||
{
|
{
|
||||||
pTrainerSpell->learned_spell = spellinfo->EffectTriggerSpell[i];
|
pTrainerSpell->learned_spell = spellinfo->EffectTriggerSpell[i];
|
||||||
break;
|
break;
|
||||||
|
|
|
||||||
|
|
@ -4929,7 +4929,7 @@ void Player::UpdateSkillsToMaxSkillsForLevel()
|
||||||
if (GetUInt32Value(PLAYER_SKILL_INDEX(i)))
|
if (GetUInt32Value(PLAYER_SKILL_INDEX(i)))
|
||||||
{
|
{
|
||||||
uint32 pskill = GetUInt32Value(PLAYER_SKILL_INDEX(i)) & 0x0000FFFF;
|
uint32 pskill = GetUInt32Value(PLAYER_SKILL_INDEX(i)) & 0x0000FFFF;
|
||||||
if( IsProfessionSkill(pskill) || pskill == SKILL_RIDING )
|
if( IsProfessionOrRidingSkill(pskill))
|
||||||
continue;
|
continue;
|
||||||
uint32 data = GetUInt32Value(PLAYER_SKILL_VALUE_INDEX(i));
|
uint32 data = GetUInt32Value(PLAYER_SKILL_VALUE_INDEX(i));
|
||||||
|
|
||||||
|
|
@ -18206,18 +18206,23 @@ bool Player::IsSpellFitByClassAndRace( uint32 spell_id ) const
|
||||||
|
|
||||||
SkillLineAbilityMap::const_iterator lower = spellmgr.GetBeginSkillLineAbilityMap(spell_id);
|
SkillLineAbilityMap::const_iterator lower = spellmgr.GetBeginSkillLineAbilityMap(spell_id);
|
||||||
SkillLineAbilityMap::const_iterator upper = spellmgr.GetEndSkillLineAbilityMap(spell_id);
|
SkillLineAbilityMap::const_iterator upper = spellmgr.GetEndSkillLineAbilityMap(spell_id);
|
||||||
|
if(lower==upper)
|
||||||
|
return true;
|
||||||
|
|
||||||
for(SkillLineAbilityMap::const_iterator _spell_idx = lower; _spell_idx != upper; ++_spell_idx)
|
for(SkillLineAbilityMap::const_iterator _spell_idx = lower; _spell_idx != upper; ++_spell_idx)
|
||||||
{
|
{
|
||||||
// skip wrong race skills
|
// skip wrong race skills
|
||||||
if( _spell_idx->second->racemask && (_spell_idx->second->racemask & racemask) == 0)
|
if( _spell_idx->second->racemask && (_spell_idx->second->racemask & racemask) == 0)
|
||||||
return false;
|
continue;
|
||||||
|
|
||||||
// skip wrong class skills
|
// skip wrong class skills
|
||||||
if( _spell_idx->second->classmask && (_spell_idx->second->classmask & classmask) == 0)
|
if( _spell_idx->second->classmask && (_spell_idx->second->classmask & classmask) == 0)
|
||||||
return false;
|
continue;
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
return true;
|
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Player::HasQuestForGO(int32 GOId)
|
bool Player::HasQuestForGO(int32 GOId)
|
||||||
|
|
|
||||||
|
|
@ -1018,7 +1018,7 @@ bool SpellMgr::canStackSpellRanks(SpellEntry const *spellInfo)
|
||||||
{
|
{
|
||||||
if(spellInfo->powerType != POWER_MANA && spellInfo->powerType != POWER_HEALTH)
|
if(spellInfo->powerType != POWER_MANA && spellInfo->powerType != POWER_HEALTH)
|
||||||
return false;
|
return false;
|
||||||
if(IsProfessionSpell(spellInfo->Id))
|
if(IsProfessionOrRidingSpell(spellInfo->Id))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
// All stance spells. if any better way, change it.
|
// All stance spells. if any better way, change it.
|
||||||
|
|
@ -1399,6 +1399,20 @@ bool SpellMgr::IsNoStackSpellDueToSpell(uint32 spellId_1, uint32 spellId_2) cons
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool SpellMgr::IsProfessionOrRidingSpell(uint32 spellId)
|
||||||
|
{
|
||||||
|
SpellEntry const *spellInfo = sSpellStore.LookupEntry(spellId);
|
||||||
|
if(!spellInfo)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if(spellInfo->Effect[1] != SPELL_EFFECT_SKILL)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
uint32 skill = spellInfo->EffectMiscValue[1];
|
||||||
|
|
||||||
|
return IsProfessionOrRidingSkill(skill);
|
||||||
|
}
|
||||||
|
|
||||||
bool SpellMgr::IsProfessionSpell(uint32 spellId)
|
bool SpellMgr::IsProfessionSpell(uint32 spellId)
|
||||||
{
|
{
|
||||||
SpellEntry const *spellInfo = sSpellStore.LookupEntry(spellId);
|
SpellEntry const *spellInfo = sSpellStore.LookupEntry(spellId);
|
||||||
|
|
|
||||||
|
|
@ -721,6 +721,11 @@ inline bool IsProfessionSkill(uint32 skill)
|
||||||
return IsPrimaryProfessionSkill(skill) || skill == SKILL_FISHING || skill == SKILL_COOKING || skill == SKILL_FIRST_AID;
|
return IsPrimaryProfessionSkill(skill) || skill == SKILL_FISHING || skill == SKILL_COOKING || skill == SKILL_FIRST_AID;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline bool IsProfessionOrRidingSkill(uint32 skill)
|
||||||
|
{
|
||||||
|
return IsProfessionSkill(skill) || skill == SKILL_RIDING;
|
||||||
|
}
|
||||||
|
|
||||||
class SpellMgr
|
class SpellMgr
|
||||||
{
|
{
|
||||||
// Constructors
|
// Constructors
|
||||||
|
|
@ -882,6 +887,7 @@ class SpellMgr
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool IsProfessionOrRidingSpell(uint32 spellId);
|
||||||
static bool IsProfessionSpell(uint32 spellId);
|
static bool IsProfessionSpell(uint32 spellId);
|
||||||
static bool IsPrimaryProfessionSpell(uint32 spellId);
|
static bool IsPrimaryProfessionSpell(uint32 spellId);
|
||||||
bool IsPrimaryProfessionFirstRankSpell(uint32 spellId) const;
|
bool IsPrimaryProfessionFirstRankSpell(uint32 spellId) const;
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
#ifndef __REVISION_NR_H__
|
#ifndef __REVISION_NR_H__
|
||||||
#define __REVISION_NR_H__
|
#define __REVISION_NR_H__
|
||||||
#define REVISION_NR "7082"
|
#define REVISION_NR "7083"
|
||||||
#endif // __REVISION_NR_H__
|
#endif // __REVISION_NR_H__
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue