mirror of
https://github.com/mangosfour/server.git
synced 2025-12-17 07:37:03 +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);
|
SkillStatusMap::iterator itr = mSkillStatus.find(id);
|
||||||
|
|
||||||
//has skill
|
// has skill
|
||||||
if(itr != mSkillStatus.end() && itr->second.uState != SKILL_DELETED)
|
if(itr != mSkillStatus.end() && itr->second.uState != SKILL_DELETED)
|
||||||
{
|
{
|
||||||
if(currVal)
|
if(currVal)
|
||||||
|
|
@ -5493,50 +5493,52 @@ void Player::SetSkill(uint16 id, uint16 step, uint16 currVal, uint16 maxVal)
|
||||||
removeSpell(sSpellMgr.GetFirstSpellInChain(pAbility->spellId));
|
removeSpell(sSpellMgr.GetFirstSpellInChain(pAbility->spellId));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if(currVal) //add
|
else if(currVal) // add
|
||||||
{
|
{
|
||||||
for (int i=0; i < PLAYER_MAX_SKILLS; ++i)
|
for (int i = 0; i < PLAYER_MAX_SKILLS; ++i)
|
||||||
if (!GetUInt32Value(PLAYER_SKILL_INDEX(i)))
|
|
||||||
{
|
{
|
||||||
SkillLineEntry const *pSkill = sSkillLineStore.LookupEntry(id);
|
if (!GetUInt32Value(PLAYER_SKILL_INDEX(i)))
|
||||||
if(!pSkill)
|
|
||||||
{
|
{
|
||||||
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;
|
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;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -254,7 +254,7 @@ int WorldSocket::open (void *a)
|
||||||
packet.append(seed1.AsByteArray(16), 16); // new encryption seeds
|
packet.append(seed1.AsByteArray(16), 16); // new encryption seeds
|
||||||
|
|
||||||
BigNumber seed2;
|
BigNumber seed2;
|
||||||
seed1.SetRand(16 * 8);
|
seed2.SetRand(16 * 8);
|
||||||
packet.append(seed1.AsByteArray(16), 16); // new encryption seeds
|
packet.append(seed1.AsByteArray(16), 16); // new encryption seeds
|
||||||
|
|
||||||
if (SendPacket (packet) == -1)
|
if (SendPacket (packet) == -1)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue