From 80f15ed04a4eee5470ecbd4761ec62c13294d45a Mon Sep 17 00:00:00 2001 From: Kinglykrab <89047260+Kinglykrab@users.noreply.github.com> Date: Sun, 21 Nov 2021 10:11:29 -0500 Subject: [PATCH] [Commands] Cleanup #myskills Command. (#1796) - Cleanup popup window display and logic. --- zone/client.cpp | 97 +++++++++++++++++++++++++++++++++++++------------ 1 file changed, 74 insertions(+), 23 deletions(-) diff --git a/zone/client.cpp b/zone/client.cpp index 3d7b0e89c..274a99bb4 100644 --- a/zone/client.cpp +++ b/zone/client.cpp @@ -5321,31 +5321,82 @@ uint32 Client::GetStartZone() void Client::ShowSkillsWindow() { - const char *WindowTitle = "Skills"; - std::string WindowText; - std::map Skills = EQ::skills::GetSkillTypeMap(); + std::string popup_text; + std::map skills_map = EQ::skills::GetSkillTypeMap(); - if (ClientVersion() < EQ::versions::ClientVersion::RoF2) - Skills[EQ::skills::Skill1HPiercing] = "Piercing"; - - // print out all available skills - for (auto skills_iter : Skills) { - if (skills_iter.first == EQ::skills::Skill2HPiercing && ClientVersion() < EQ::versions::ClientVersion::RoF2) - continue; - if (!GetSkill(skills_iter.first) && !MaxSkill(skills_iter.first)) - continue; - - WindowText += skills_iter.second; - // line up the values - WindowText += "      "; - WindowText += itoa(this->GetSkill(skills_iter.first)); - if (MaxSkill(skills_iter.first) > 0) { - WindowText += "/"; - WindowText += itoa(this->GetMaxSkillAfterSpecializationRules(skills_iter.first, this->MaxSkill(skills_iter.first))); - } - WindowText += "
"; + if (ClientVersion() < EQ::versions::ClientVersion::RoF2) { + skills_map[EQ::skills::Skill1HPiercing] = "Piercing"; } - this->SendPopupToClient(WindowTitle, WindowText.c_str()); + + // Table Start + popup_text += ""; + + for (const auto& skill : skills_map) { + auto skill_id = skill.first; + auto skill_name = skill.second; + auto can_have_skill = CanHaveSkill(skill_id); + auto current_skill = GetSkill(skill_id); + auto max_skill = MaxSkill(skill_id); + auto skill_maxed = current_skill >= max_skill; + if ( + skill_id == EQ::skills::Skill2HPiercing && + ClientVersion() < EQ::versions::ClientVersion::RoF2 + ) { + continue; + } + + if ( + !can_have_skill || + !current_skill || + !max_skill + ) { + continue; + } + + // Row Start + popup_text += ""; + + // Skill Name + popup_text += fmt::format( + "", + skill_name + ); + + // Current Skill Level out of Max Skill Level or a Check Mark for Maxed + popup_text += fmt::format( + "", + ( + skill_maxed ? + "" : + "" + ), + ( + skill_maxed ? + "✔" : + fmt::format( + "{}/{}", + current_skill, + max_skill + ) + ), + ( + skill_maxed ? + "" : + "" + ) + ); + + // Row End + popup_text += ""; + } + + // Table End + popup_text += "
{}{}{}{}
"; + + SendPopupToClient( + "Skills", + popup_text.c_str() + ); } void Client::Signal(uint32 data)