diff --git a/common/ruletypes.h b/common/ruletypes.h index 20bdce740..67591d402 100644 --- a/common/ruletypes.h +++ b/common/ruletypes.h @@ -186,6 +186,7 @@ RULE_INT(Skills, MaxTrainSpecializations, 50) // Max level a GM trainer will tra RULE_INT(Skills, SwimmingStartValue, 100) RULE_BOOL(Skills, TrainSenseHeading, false) RULE_INT(Skills, SenseHeadingStartValue, 200) +RULE_BOOL(Skills, SelfLanguageLearning, true) RULE_CATEGORY_END() RULE_CATEGORY(Pets) diff --git a/zone/client.cpp b/zone/client.cpp index da95a0ad7..19dfeb711 100644 --- a/zone/client.cpp +++ b/zone/client.cpp @@ -1225,9 +1225,14 @@ void Client::ChannelMessageSend(const char* from, const char* to, uint8 chan_num strcpy(&cm->message[0], buffer); QueuePacket(&app); - if ((chan_num == 2) && (ListenerSkill < 100)) { // group message in unmastered language, check for skill up - if (m_pp.languages[language] <= lang_skill) - CheckLanguageSkillIncrease(language, lang_skill); + bool senderCanTrainSelf = RuleB(Client, SelfLanguageLearning); + bool weAreNotSender = strcmp(this->GetCleanName(), cm->sender); + + if (senderCanTrainSelf || weAreNotSender) { + if ((chan_num == 2) && (ListenerSkill < 100)) { // group message in unmastered language, check for skill up + if (m_pp.languages[language] <= lang_skill) + CheckLanguageSkillIncrease(language, lang_skill); + } } }