From 735cebf7a39a531a148c811fcaff322d29da4dee Mon Sep 17 00:00:00 2001 From: Discover- Date: Sat, 18 Jan 2014 01:05:03 +0100 Subject: Core/Commands: The .setskill command is now usable even if the player doesn't already have the skill learned. --- src/server/scripts/Commands/cs_misc.cpp | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) (limited to 'src/server/scripts/Commands') diff --git a/src/server/scripts/Commands/cs_misc.cpp b/src/server/scripts/Commands/cs_misc.cpp index 1b8f50b5eab..eb45e8f49f5 100644 --- a/src/server/scripts/Commands/cs_misc.cpp +++ b/src/server/scripts/Commands/cs_misc.cpp @@ -1337,23 +1337,20 @@ public: return false; } - std::string tNameLink = handler->GetNameLink(target); + bool targetHasSkill = target->GetSkillValue(skill); - if (!target->GetSkillValue(skill)) - { - handler->PSendSysMessage(LANG_SET_SKILL_ERROR, tNameLink.c_str(), skill, skillLine->name[handler->GetSessionDbcLocale()]); - handler->SetSentErrorMessage(true); - return false; - } - - uint16 max = maxPureSkill ? atol (maxPureSkill) : target->GetPureMaxSkillValue(skill); + // If our target does not yet have the skill they are trying to add to them, the chosen level also becomes + // the max level of the new profession. + uint16 max = maxPureSkill ? atol (maxPureSkill) : targetHasSkill ? target->GetPureMaxSkillValue(skill) : uint16(level); if (level <= 0 || level > max || max <= 0) return false; - target->SetSkill(skill, target->GetSkillStep(skill), level, max); - handler->PSendSysMessage(LANG_SET_SKILL, skill, skillLine->name[handler->GetSessionDbcLocale()], tNameLink.c_str(), level, max); - + // If the player has the skill, we get the current skill step. If they don't have the skill, we + // add the skill to the player's book with step 1 (which is the first rank, in most cases something + // like 'Apprentice '. + target->SetSkill(skill, targetHasSkill ? target->GetSkillStep(skill) : 1, level, max); + handler->PSendSysMessage(LANG_SET_SKILL, skill, skillLine->name[handler->GetSessionDbcLocale()], handler->GetNameLink(target).c_str(), level, max); return true; } -- cgit v1.2.3