mirror of
https://github.com/mangosfour/server.git
synced 2025-12-14 16:37:01 +00:00
Fiiiiiiiiiiiiiix.
This commit is contained in:
parent
b99f51a984
commit
9a2f04ac9e
2 changed files with 43 additions and 41 deletions
|
|
@ -5461,7 +5461,7 @@ void Player::SetSkill(uint16 id, uint16 step, uint16 currVal, uint16 maxVal)
|
|||
|
||||
SkillStatusMap::iterator itr = mSkillStatus.find(id);
|
||||
|
||||
//has skill
|
||||
// has skill
|
||||
if(itr != mSkillStatus.end() && itr->second.uState != SKILL_DELETED)
|
||||
{
|
||||
if(currVal)
|
||||
|
|
@ -5493,50 +5493,52 @@ void Player::SetSkill(uint16 id, uint16 step, uint16 currVal, uint16 maxVal)
|
|||
removeSpell(sSpellMgr.GetFirstSpellInChain(pAbility->spellId));
|
||||
}
|
||||
}
|
||||
else if(currVal) //add
|
||||
else if(currVal) // add
|
||||
{
|
||||
for (int i=0; i < PLAYER_MAX_SKILLS; ++i)
|
||||
if (!GetUInt32Value(PLAYER_SKILL_INDEX(i)))
|
||||
for (int i = 0; i < PLAYER_MAX_SKILLS; ++i)
|
||||
{
|
||||
SkillLineEntry const *pSkill = sSkillLineStore.LookupEntry(id);
|
||||
if(!pSkill)
|
||||
if (!GetUInt32Value(PLAYER_SKILL_INDEX(i)))
|
||||
{
|
||||
sLog.outError("Skill not found in SkillLineStore: skill #%u", id);
|
||||
SkillLineEntry const *pSkill = sSkillLineStore.LookupEntry(id);
|
||||
if(!pSkill)
|
||||
{
|
||||
sLog.outError("Skill not found in SkillLineStore: skill #%u", id);
|
||||
return;
|
||||
}
|
||||
|
||||
SetUInt32Value(PLAYER_SKILL_INDEX(i), MAKE_PAIR32(id, step));
|
||||
SetUInt32Value(PLAYER_SKILL_VALUE_INDEX(i),MAKE_SKILL_VALUE(currVal, maxVal));
|
||||
GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_REACH_SKILL_LEVEL, id);
|
||||
GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_LEARN_SKILL_LEVEL, id);
|
||||
|
||||
// insert new entry or update if not deleted old entry yet
|
||||
if(itr != mSkillStatus.end())
|
||||
{
|
||||
itr->second.pos = i;
|
||||
itr->second.uState = SKILL_CHANGED;
|
||||
}
|
||||
else
|
||||
mSkillStatus.insert(SkillStatusMap::value_type(id, SkillStatusData(i, SKILL_NEW)));
|
||||
|
||||
// apply skill bonuses
|
||||
SetUInt32Value(PLAYER_SKILL_BONUS_INDEX(i), 0);
|
||||
|
||||
// temporary bonuses
|
||||
AuraList const& mModSkill = GetAurasByType(SPELL_AURA_MOD_SKILL);
|
||||
for(AuraList::const_iterator j = mModSkill.begin(); j != mModSkill.end(); ++j)
|
||||
if ((*j)->GetModifier()->m_miscvalue == int32(id))
|
||||
(*j)->ApplyModifier(true);
|
||||
|
||||
// permanent bonuses
|
||||
AuraList const& mModSkillTalent = GetAurasByType(SPELL_AURA_MOD_SKILL_TALENT);
|
||||
for(AuraList::const_iterator j = mModSkillTalent.begin(); j != mModSkillTalent.end(); ++j)
|
||||
if ((*j)->GetModifier()->m_miscvalue == int32(id))
|
||||
(*j)->ApplyModifier(true);
|
||||
|
||||
// Learn all spells for skill
|
||||
learnSkillRewardedSpells(id, currVal);
|
||||
return;
|
||||
}
|
||||
|
||||
SetUInt32Value(PLAYER_SKILL_INDEX(i), MAKE_PAIR32(id, step));
|
||||
SetUInt32Value(PLAYER_SKILL_VALUE_INDEX(i),MAKE_SKILL_VALUE(currVal, maxVal));
|
||||
GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_REACH_SKILL_LEVEL, id);
|
||||
GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_LEARN_SKILL_LEVEL, id);
|
||||
|
||||
// insert new entry or update if not deleted old entry yet
|
||||
if(itr != mSkillStatus.end())
|
||||
{
|
||||
itr->second.pos = i;
|
||||
itr->second.uState = SKILL_CHANGED;
|
||||
}
|
||||
else
|
||||
mSkillStatus.insert(SkillStatusMap::value_type(id, SkillStatusData(i, SKILL_NEW)));
|
||||
|
||||
// apply skill bonuses
|
||||
SetUInt32Value(PLAYER_SKILL_BONUS_INDEX(i), 0);
|
||||
|
||||
// temporary bonuses
|
||||
AuraList const& mModSkill = GetAurasByType(SPELL_AURA_MOD_SKILL);
|
||||
for(AuraList::const_iterator j = mModSkill.begin(); j != mModSkill.end(); ++j)
|
||||
if ((*j)->GetModifier()->m_miscvalue == int32(id))
|
||||
(*j)->ApplyModifier(true);
|
||||
|
||||
// permanent bonuses
|
||||
AuraList const& mModSkillTalent = GetAurasByType(SPELL_AURA_MOD_SKILL_TALENT);
|
||||
for(AuraList::const_iterator j = mModSkillTalent.begin(); j != mModSkillTalent.end(); ++j)
|
||||
if ((*j)->GetModifier()->m_miscvalue == int32(id))
|
||||
(*j)->ApplyModifier(true);
|
||||
|
||||
// Learn all spells for skill
|
||||
learnSkillRewardedSpells(id, currVal);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue