#include "zone.h" SkillCapsRepository::SkillCaps Zone::GetSkillCap(uint8 class_id, EQ::skills::SkillType skill_id, uint8 level) { if (!IsPlayerClass(class_id)) { return SkillCapsRepository::NewEntity(); } for (const auto& e : m_skill_caps) { if ( e.class_id == class_id && e.level == level && static_cast(e.skill_id) == skill_id ) { return e; } } return SkillCapsRepository::NewEntity(); } uint8 Zone::GetTrainLevel(uint8 class_id, EQ::skills::SkillType skill_id, uint8 level) { if ( !IsPlayerClass(class_id) || class_id > Class::PLAYER_CLASS_COUNT || static_cast(skill_id) > (EQ::skills::HIGHEST_SKILL + 1) ) { return 0; } const uint8 skill_cap_max_level = ( RuleI(Character, SkillCapMaxLevel) > 0 ? RuleI(Character, SkillCapMaxLevel) : RuleI(Character, MaxLevel) ); const uint8 max_level = level > skill_cap_max_level ? level : skill_cap_max_level; for (const auto& e : m_skill_caps) { for (uint8 current_level = 1; current_level <= max_level; current_level++) { if ( e.class_id == class_id && static_cast(e.skill_id) == skill_id && e.level == current_level ) { return current_level; } } } return 0; } void Zone::LoadSkillCaps() { const auto& l = SkillCapsRepository::All(content_db); m_skill_caps.reserve(l.size()); for (const auto& e : l) { if ( e.level < 1 || !IsPlayerClass(e.class_id) || static_cast(e.skill_id) >= EQ::skills::SkillCount ) { continue; } m_skill_caps.emplace_back(e); } LogInfo( "Loaded [{}] Skill Cap Entr{}", l.size(), l.size() != 1 ? "ies" : "y" ); } void Zone::ReloadSkillCaps() { ClearSkillCaps(); LoadSkillCaps(); }