diff --git a/common/skills.cpp b/common/skills.cpp index 85c660f6c..987004a2a 100644 --- a/common/skills.cpp +++ b/common/skills.cpp @@ -106,3 +106,89 @@ bool EQEmu::IsBardInstrumentSkill(SkillUseTypes skill) return false; } } + +const std::map& EQEmu::GetSkillUseTypesMap() +{ + static const std::map skill_use_types_map = { + { Skill1HBlunt, "1H Blunt" }, + { Skill1HSlashing, "1H Slashing" }, + { Skill2HBlunt, "2H Blunt" }, + { Skill2HSlashing, "2H Slashing" }, + { SkillAbjuration, "Abjuration" }, + { SkillAlteration, "Alteration" }, + { SkillApplyPoison, "Apply Poison" }, + { SkillArchery, "Archery" }, + { SkillBackstab, "Backstab" }, + { SkillBindWound, "Bind Wound" }, + { SkillBash, "Bash" }, + { SkillBlock, "Block" }, + { SkillBrassInstruments, "Brass Instruments" }, + { SkillChanneling, "Channeling" }, + { SkillConjuration, "Conjuration" }, + { SkillDefense, "Defense" }, + { SkillDisarm, "Disarm" }, + { SkillDisarmTraps, "Disarm Traps" }, + { SkillDivination, "Divination" }, + { SkillDodge, "Dodge" }, + { SkillDoubleAttack, "Double Attack" }, + { SkillDragonPunch, "Dragon Punch" }, + { SkillDualWield, "Dual Wield" }, + { SkillEagleStrike, "Eagle Strike" }, + { SkillEvocation, "Evocation" }, + { SkillFeignDeath, "Feign Death" }, + { SkillFlyingKick, "Flying Kick" }, + { SkillForage, "Forage" }, + { SkillHandtoHand, "Hand to Hand" }, + { SkillHide, "Hide" }, + { SkillKick, "Kick" }, + { SkillMeditate, "Meditate" }, + { SkillMend, "Mend" }, + { SkillOffense, "Offense" }, + { SkillParry, "Parry" }, + { SkillPickLock, "Pick Lock" }, + { Skill1HPiercing, "1H Piercing" }, + { SkillRiposte, "Riposte" }, + { SkillRoundKick, "Round Kick" }, + { SkillSafeFall, "Safe Fall" }, + { SkillSenseHeading, "Sense Heading" }, + { SkillSinging, "Singing" }, + { SkillSneak, "Sneak" }, + { SkillSpecializeAbjure, "Specialize Abjuration" }, + { SkillSpecializeAlteration, "Specialize Alteration" }, + { SkillSpecializeConjuration, "Specialize Conjuration" }, + { SkillSpecializeDivination, "Specialize Divination" }, + { SkillSpecializeEvocation, "Specialize Evocation" }, + { SkillPickPockets, "Pick Pockets" }, + { SkillStringedInstruments, "Stringed Instruments" }, + { SkillSwimming, "Swimming" }, + { SkillThrowing, "Throwing" }, + { SkillTigerClaw, "Tiger Claw" }, + { SkillTracking, "Tracking" }, + { SkillWindInstruments, "Wind Instruments" }, + { SkillFishing, "Fishing" }, + { SkillMakePoison, "Make Poison" }, + { SkillTinkering, "Tinkering" }, + { SkillResearch, "Research" }, + { SkillAlchemy, "Alchemy" }, + { SkillBaking, "Baking" }, + { SkillTailoring, "Tailoring" }, + { SkillSenseTraps, "Sense Traps" }, + { SkillBlacksmithing, "Blacksmithing" }, + { SkillFletching, "Fletching" }, + { SkillBrewing, "Brewing" }, + { SkillAlcoholTolerance, "Alcohol Tolerance" }, + { SkillBegging, "Begging" }, + { SkillJewelryMaking, "Jewelry Making" }, + { SkillPottery, "Pottery" }, + { SkillPercussionInstruments, "Percussion Instruments" }, + { SkillIntimidation, "Intimidation" }, + { SkillBerserking, "Berserking" }, + { SkillTaunt, "Taunt" }, + { SkillFrenzy, "Frenzy" }, + { SkillRemoveTraps, "Remove Traps" }, + { SkillTripleAttack, "Triple Attack" }, + { Skill2HPiercing, "2H Piercing" } + }; + + return skill_use_types_map; +} diff --git a/common/skills.h b/common/skills.h index 4e1e9eb83..a9c5c6095 100644 --- a/common/skills.h +++ b/common/skills.h @@ -18,6 +18,8 @@ #ifndef SKILLS_H #define SKILLS_H +#include + /* ** This is really messed up... Are we using SkillTypes as a pseudo repository? The 76th skill really throws ** things for standardization... @@ -273,6 +275,8 @@ namespace EQEmu { bool IsSpecializedSkill(SkillUseTypes skill); float GetSkillMeleePushForce(SkillUseTypes skill); bool IsBardInstrumentSkill(SkillUseTypes skill); + + const std::map& GetSkillUseTypesMap(); } #endif diff --git a/zone/client.cpp b/zone/client.cpp index 5a9724fa8..f41e35bd2 100644 --- a/zone/client.cpp +++ b/zone/client.cpp @@ -4950,36 +4950,27 @@ void Client::ShowSkillsWindow() { const char *WindowTitle = "Skills"; std::string WindowText; - // using a map for easy alphabetizing of the skills list - std::map Skills; - std::map::iterator it; + std::map Skills = EQEmu::GetSkillUseTypesMap(); - // this list of names must keep the same order as that in common/skills.h - const char* SkillName[] = {"1H Blunt","1H Slashing","2H Blunt","2H Slashing","Abjuration","Alteration","Apply Poison","Archery", - "Backstab","Bind Wound","Bash","Block","Brass Instruments","Channeling","Conjuration","Defense","Disarm","Disarm Traps","Divination", - "Dodge","Double Attack","Dragon Punch","Dual Wield","Eagle Strike","Evocation","Feign Death","Flying Kick","Forage","Hand to Hand", - "Hide","Kick","Meditate","Mend","Offense","Parry","Pick Lock","1H Piercing","Ripost","Round Kick","Safe Fall","Sense Heading", - "Singing","Sneak","Specialize Abjuration","Specialize Alteration","Specialize Conjuration","Specialize Divination","Specialize Evocation","Pick Pockets", - "Stringed Instruments","Swimming","Throwing","Tiger Claw","Tracking","Wind Instruments","Fishing","Make Poison","Tinkering","Research", - "Alchemy","Baking","Tailoring","Sense Traps","Blacksmithing","Fletching","Brewing","Alcohol Tolerance","Begging","Jewelry Making", - "Pottery","Percussion Instruments","Intimidation","Berserking","Taunt","Frenzy","Remove Traps","Triple Attack","2H Piercing"}; - for(int i = 0; i <= (int)HIGHEST_SKILL; i++) - Skills[SkillName[i]] = (SkillUseTypes)i; + if (GetClientVersion() < ClientVersion::RoF2) + Skills[Skill1HPiercing] = "Piercing"; // print out all available skills - for(it = Skills.begin(); it != Skills.end(); ++it) { - if(GetSkill(it->second) > 0 || MaxSkill(it->second) > 0) { - WindowText += it->first; - // line up the values - for (int j = 0; j < EmuConstants::ITEM_COMMON_SIZE; j++) - WindowText += " "; - WindowText += itoa(this->GetSkill(it->second)); - if (MaxSkill(it->second) > 0) { - WindowText += "/"; - WindowText += itoa(this->GetMaxSkillAfterSpecializationRules(it->second,this->MaxSkill(it->second))); - } - WindowText += "
"; + for (auto skills_iter : Skills) { + if (skills_iter.first == Skill2HPiercing && GetClientVersion() < 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 += "
"; } this->SendPopupToClient(WindowTitle, WindowText.c_str()); }