@@ -5614,69 +5614,68 @@ bool Player::UpdateFishingSkill()
56145614 return false;
56155615}
56165616
5617- // levels sync. with spell requirement for skill levels to learn
5618- // bonus abilities in sSkillLineAbilityStore
5619- // Used only to avoid scan DBC at each skill grow
5620- static uint32 bonusSkillLevels[ ] = {75, 150, 225, 300, 375, 450};
5621- static const size_t bonusSkillLevelsSize = sizeof(bonusSkillLevels) / sizeof(uint32);
5622-
5623- bool Player::UpdateSkillPro(uint16 SkillId, int32 Chance, uint32 step)
5617+ bool Player::UpdateSkillPro(uint16 skillId, int32 chance, uint32 step)
56245618{
5619+ // levels sync. with spell requirement for skill levels to learn
5620+ // bonus abilities in sSkillLineAbilityStore
5621+ // Used only to avoid scan DBC at each skill grow
5622+ uint32 const bonusSkillLevels[] = { 75, 150, 225, 300, 375, 450 };
5623+
56255624 TC_LOG_DEBUG("entities.player.skills", "Player::UpdateSkillPro: Player '{}' ({}), SkillID: {}, Chance: {:3.1f}%)",
5626- GetName(), GetGUID().ToString(), SkillId, Chance / 10.0f);
5627- if (!SkillId )
5625+ GetName(), GetGUID().ToString(), skillId, chance / 10.0f);
5626+ if (!skillId )
56285627 return false;
56295628
5630- if (Chance <= 0) // speedup in 0 chance case
5629+ if (chance <= 0) // speedup in 0 chance case
56315630 {
56325631 TC_LOG_DEBUG("entities.player.skills", "Player::UpdateSkillPro: Player '{}' ({}), SkillID: {}, Chance: {:3.1f}% missed",
5633- GetName(), GetGUID().ToString(), SkillId, Chance / 10.0f);
5632+ GetName(), GetGUID().ToString(), skillId, chance / 10.0f);
56345633 return false;
56355634 }
56365635
5637- SkillStatusMap::iterator itr = mSkillStatus.find(SkillId );
5636+ SkillStatusMap::iterator itr = mSkillStatus.find(skillId );
56385637 if (itr == mSkillStatus.end() || itr->second.uState == SKILL_DELETED)
56395638 return false;
56405639
56415640 uint32 valueIndex = PLAYER_SKILL_VALUE_INDEX(itr->second.pos);
56425641
56435642 uint32 data = GetUInt32Value(valueIndex);
5644- uint16 SkillValue = SKILL_VALUE(data);
5645- uint16 MaxValue = SKILL_MAX(data);
5643+ uint16 value = SKILL_VALUE(data);
5644+ uint16 max = SKILL_MAX(data);
56465645
5647- if (!MaxValue || !SkillValue || SkillValue >= MaxValue )
5646+ if (!max || !value || value >= max )
56485647 return false;
56495648
5650- int32 Roll = irand(1, 1000);
5651-
5652- if (Roll <= Chance)
5649+ if (irand(1, 1000) > chance)
56535650 {
5654- uint32 new_value = SkillValue+step;
5655- if (new_value > MaxValue)
5656- new_value = MaxValue;
5651+ TC_LOG_DEBUG("entities.player.skills",
5652+ "Player::UpdateSkillPro: Player '{}' ({}), SkillID: {}, Chance: {:3.1f}% missed",
5653+ GetName(), GetGUID().ToString(), skillId, chance / 10.0f);
5654+ return false;
5655+ }
56575656
5658- SetUInt32Value(valueIndex, MAKE_SKILL_VALUE(new_value, MaxValue));
5659- if (itr->second.uState != SKILL_NEW)
5660- itr->second.uState = SKILL_CHANGED;
5661- for (size_t i = 0; i < bonusSkillLevelsSize; ++i)
5657+ uint16 new_value = value + step;
5658+ if (new_value > max)
5659+ new_value = max;
5660+
5661+ SetUInt32Value(valueIndex, MAKE_SKILL_VALUE(new_value, max));
5662+ if (itr->second.uState != SKILL_NEW)
5663+ itr->second.uState = SKILL_CHANGED;
5664+
5665+ for (uint32 bsl : bonusSkillLevels)
5666+ {
5667+ if (value < bsl && new_value >= bsl)
56625668 {
5663- uint32 bsl = bonusSkillLevels[i];
5664- if (SkillValue < bsl && new_value >= bsl)
5665- {
5666- LearnSkillRewardedSpells(SkillId, new_value);
5667- break;
5668- }
5669+ LearnSkillRewardedSpells(skillId, new_value);
5670+ break;
56695671 }
5670- UpdateSkillEnchantments(SkillId, SkillValue, new_value);
5671- UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_REACH_SKILL_LEVEL, SkillId);
5672- TC_LOG_DEBUG("entities.player.skills", "Player::UpdateSkillPro: Player '{}' ({}), SkillID: {}, Chance: {:3.1f}% taken",
5673- GetName(), GetGUID().ToString(), SkillId, Chance / 10.0f);
5674- return true;
56755672 }
56765673
5677- TC_LOG_DEBUG("entities.player.skills", "Player::UpdateSkillPro: Player '{}' ({}), SkillID: {}, Chance: {:3.1f}% missed",
5678- GetName(), GetGUID().ToString(), SkillId, Chance / 10.0f);
5679- return false;
5674+ UpdateSkillEnchantments(skillId, value, new_value);
5675+ UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_REACH_SKILL_LEVEL, skillId);
5676+ TC_LOG_DEBUG("entities.player.skills", "Player::UpdateSkillPro: Player '{}' ({}), SkillID: {}, Chance: {:3.1f}% taken",
5677+ GetName(), GetGUID().ToString(), skillId, chance / 10.0f);
5678+ return true;
56805679}
56815680
56825681void Player::UpdateWeaponSkill(Unit* victim, WeaponAttackType attType)
@@ -23717,7 +23716,7 @@ uint32 Player::GetResurrectionSpellId()
2371723716}
2371823717
2371923718// Used in triggers for check "Only to targets that grant experience or honor" req
23720- bool Player::isHonorOrXPTarget(Unit* victim) const
23719+ bool Player::isHonorOrXPTarget(Unit const * victim) const
2372123720{
2372223721 uint8 v_level = victim->GetLevel();
2372323722 uint8 k_grey = Trinity::XP::GetGrayLevel(GetLevel());
0 commit comments