mirror of
https://github.com/EQEmu/Server.git
synced 2025-12-13 14:41:28 +00:00
[Performance] Change skill_cap from vector to map (#4252)
* Change skill_cap from vector to map * Fix missed level check * Integer based key * Paren --------- Co-authored-by: Akkadius <akkadius1@gmail.com>
This commit is contained in:
parent
d7d99152ac
commit
a7bfc5ec92
@ -13,16 +13,11 @@ SkillCapsRepository::SkillCaps SkillCaps::GetSkillCap(uint8 class_id, EQ::skills
|
|||||||
return SkillCapsRepository::NewEntity();
|
return SkillCapsRepository::NewEntity();
|
||||||
}
|
}
|
||||||
|
|
||||||
for (const auto &e: m_skill_caps) {
|
uint64_t key = (class_id * 1000000) + (level * 1000) + static_cast<uint32>(skill_id);
|
||||||
if (
|
auto pos = m_skill_caps.find(key);
|
||||||
e.class_id == class_id &&
|
if (pos != m_skill_caps.end()) {
|
||||||
e.level == level &&
|
return pos->second;
|
||||||
static_cast<EQ::skills::SkillType>(e.skill_id) == skill_id
|
|
||||||
) {
|
|
||||||
return e;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return SkillCapsRepository::NewEntity();
|
return SkillCapsRepository::NewEntity();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -46,11 +41,9 @@ uint8 SkillCaps::GetTrainLevel(uint8 class_id, EQ::skills::SkillType skill_id, u
|
|||||||
|
|
||||||
for (const auto &e: m_skill_caps) {
|
for (const auto &e: m_skill_caps) {
|
||||||
for (uint8 current_level = 1; current_level <= max_level; current_level++) {
|
for (uint8 current_level = 1; current_level <= max_level; current_level++) {
|
||||||
if (
|
uint64_t key = (class_id * 1000000) + (level * 1000) + static_cast<uint32>(skill_id);
|
||||||
e.class_id == class_id &&
|
auto pos = m_skill_caps.find(key);
|
||||||
static_cast<EQ::skills::SkillType>(e.skill_id) == skill_id &&
|
if (pos != m_skill_caps.end()) {
|
||||||
e.level == current_level
|
|
||||||
) {
|
|
||||||
return current_level;
|
return current_level;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -63,7 +56,7 @@ void SkillCaps::LoadSkillCaps()
|
|||||||
{
|
{
|
||||||
const auto &l = SkillCapsRepository::All(*m_content_database);
|
const auto &l = SkillCapsRepository::All(*m_content_database);
|
||||||
|
|
||||||
m_skill_caps.reserve(l.size());
|
m_skill_caps.clear();
|
||||||
|
|
||||||
for (const auto &e: l) {
|
for (const auto &e: l) {
|
||||||
if (
|
if (
|
||||||
@ -74,7 +67,8 @@ void SkillCaps::LoadSkillCaps()
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_skill_caps.emplace_back(e);
|
uint64_t key = (e.class_id * 1000000) + (e.level * 1000) + e.skill_id;
|
||||||
|
m_skill_caps[key] = e;
|
||||||
}
|
}
|
||||||
|
|
||||||
LogInfo(
|
LogInfo(
|
||||||
|
|||||||
@ -17,7 +17,7 @@ public:
|
|||||||
SkillCaps *SetContentDatabase(Database *db);
|
SkillCaps *SetContentDatabase(Database *db);
|
||||||
private:
|
private:
|
||||||
Database *m_content_database{};
|
Database *m_content_database{};
|
||||||
std::vector<SkillCapsRepository::SkillCaps> m_skill_caps = {};
|
std::map<uint64, SkillCapsRepository::SkillCaps> m_skill_caps = {};
|
||||||
};
|
};
|
||||||
|
|
||||||
extern SkillCaps skill_caps;
|
extern SkillCaps skill_caps;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user