Index: Chat.cpp =================================================================== --- Chat.cpp (revision 5647) +++ Chat.cpp (working copy) @@ -334,6 +334,7 @@ { "ticket", SEC_GAMEMASTER, &ChatHandler::HandleTicketCommand, "", NULL }, { "delticket", SEC_GAMEMASTER, &ChatHandler::HandleDelTicketCommand, "", NULL }, { "maxskill", SEC_ADMINISTRATOR, &ChatHandler::HandleMaxSkillCommand, "", NULL }, + { "getskillvalue", SEC_GAMEMASTER, &ChatHandler::HandleGetSkillValueCommand, "", NULL }, { "setskill", SEC_ADMINISTRATOR, &ChatHandler::HandleSetSkillCommand, "", NULL }, { "whispers", SEC_MODERATOR, &ChatHandler::HandleWhispersCommand, "", NULL }, { "say", SEC_MODERATOR, &ChatHandler::HandleSayCommand, "", NULL }, Index: Chat.h =================================================================== --- Chat.h (revision 5647) +++ Chat.h (working copy) @@ -302,6 +302,7 @@ bool HandleTicketCommand(const char* args); bool HandleDelTicketCommand(const char* args); bool HandleMaxSkillCommand(const char* args); + bool HandleGetSkillValueCommand(const char* args); bool HandleSetSkillCommand(const char* args); bool HandleListCreatureCommand(const char* args); bool HandleListItemCommand(const char* args); Index: Level3.cpp =================================================================== --- Level3.cpp (revision 5647) +++ Level3.cpp (working copy) @@ -582,6 +582,53 @@ return true; } +bool ChatHandler::HandleGetSkillValueCommand(const char* args) +{ + Player* target = getSelectedPlayer(); + if(!target) + { + SendSysMessage(LANG_PLAYER_NOT_FOUND); + return true; + } + + if(!*args) + return false; + + std::string namepart = args; + uint32 counter = 0; // Counter for figure out that we found smth. + + // converting string that we try to find to lower case + std::transform( namepart.begin(), namepart.end(), namepart.begin(), ::tolower ); + + // Search in SkillLine.dbc + for (uint32 id = 0; id < sSkillLineStore.GetNumRows(); id++) + { + SkillLineEntry const *skillInfo = sSkillLineStore.LookupEntry(id); + if(skillInfo) + { + // name - is first name field from dbc (English localized) + std::string name = skillInfo->name[sWorld.GetDBClang()]; + + // converting SkillName to lower case + std::transform( name.begin(), name.end(), name.begin(), ::tolower ); + + if (name.find(namepart) != std::string::npos) + { + uint16 skillvalue = target->GetSkillValue(id); + uint16 skillvaluemax = target->GetMaxSkillValue(id); + // send skill in "id - [namedlink] currentskill/maxskill" format + PSendSysMessage(LANG_SKILL_LIST,id,id,skillInfo->name[sWorld.GetDBClang()],skillvalue,skillvaluemax,(target->HasSkill(id) ? GetMangosString(LANG_KNOWN) : "")); + + ++counter; + } + } + } + if (counter == 0) // if counter == 0 then we found nth + SendSysMessage(LANG_COMMAND_NOSKILLFOUND); + return true; +} + + bool ChatHandler::HandleSetSkillCommand(const char* args) { // number or [name] Shift-click form |color|Hskill:skill_id|h[name]|h|r