Go Back   EQEmulator Home > EQEmulator Forums > Quests > Quests::Custom

Quests::Custom Custom Quests here

Reply
 
Thread Tools Display Modes
  #1  
Old 12-29-2008, 12:14 PM
djeryv
Hill Giant
 
Join Date: Apr 2008
Posts: 234
Default NPC Skill Trainer

I have been having problems with skills going past 21 (specifically, skills like Blacksmithing, Tailoring...crafting skills basically). Even with the server rules set for Skills:MaxTrainTradeskills set to 250, these skills were not going past 21. Some say that it is a client issue...so...here is what I did to fix this...

I made this perl script (my first quest type script)...

Code:
###################################
#Zone: All (Global)               #
#Short Name:                      #
#Zone ID: 55                      #
###################################
#NPC Name: Teacher_of_Norrath     #
#NPC ID: All                      #
#Quest Status: Complete           #
###################################
sub EVENT_SAY {

$myskills = $client->GetSkillPoints()-1;

if($text=~/hail/i){
quest::say("Greetings, $name. Have you come to me for my [teachings]? I can only teach you more of what you started learning from your Guildmaster and only if it does not exceed your level. Make sure to [zone] after I am done teaching you.");
}

if($text=~/zone/i){
quest::say("Yes, you must leave this zone after learning from me so you will see the results of your lessons. Even your Guildmaster will not recognize your achievements if you do not zone first.");
}

if($text=~/teachings/i){
$pcskills = $client->GetSkillPoints();
quest::say("I can teach you many things with your $pcskills skill points. I can teach you more about [alchemy], [baking], black[smithing], [brewing], [fletching], [jewelry] making, [poison] making, [pottery], [research], [tailoring] and [tinkering].");
}

if($text=~/alchemy/i){
  if ($client->GetRawSkill(59)<$client->MaxSkill(59) && $client->GetSkillPoints()>0 && $client->GetRawSkill(59)>0){
    $skill_from = $client->GetRawSkill(59);
    $client->IncreaseSkill(59);
    $client->SetSkillPoints($myskills);
    $skill_this = $client->GetRawSkill(59);
    quest::say("I have taught you a little more about alchemy from $skill_from to $skill_this.");
  }
  else {
    quest::say("You are not ready to learn more about alchemy.");
  }
}

if($text=~/smithing/i){
  if ($client->GetRawSkill(63)<$client->MaxSkill(63) && $client->GetSkillPoints()>0 && $client->GetRawSkill(63)>0){
    $skill_from = $client->GetRawSkill(63);
    $client->IncreaseSkill(63);
    $client->SetSkillPoints($myskills);
    $skill_this = $client->GetRawSkill(63);
    quest::say("I have taught you a little more about blacksmithing from $skill_from to $skill_this.");
  }
  else {
    quest::say("You are not ready to learn more about blacksmithing.");
  }
}

if($text=~/poison/i){
  if ($client->GetRawSkill(56)<$client->MaxSkill(56) && $client->GetSkillPoints()>0 && $client->GetRawSkill(56)>0){
    $skill_from = $client->GetRawSkill(56);
    $client->IncreaseSkill(56);
    $client->SetSkillPoints($myskills);
    $skill_this = $client->GetRawSkill(56);
    quest::say("I have taught you a little more about making poisons from $skill_from to $skill_this.");
  }
  else {
    quest::say("You are not ready to learn more about making poisons.");
  }
}

if($text=~/tinkering/i){
  if ($client->GetRawSkill(57)<$client->MaxSkill(57) && $client->GetSkillPoints()>0 && $client->GetRawSkill(57)>0){
    $skill_from = $client->GetRawSkill(57);
    $client->IncreaseSkill(57);
    $client->SetSkillPoints($myskills);
    $skill_this = $client->GetRawSkill(57);
    quest::say("I have taught you a little more about tinkering from $skill_from to $skill_this.");
  }
  else {
    quest::say("You are not ready to learn more about tinkering.");
  }
}

if($text=~/research/i){
  if ($client->GetRawSkill(58)<$client->MaxSkill(58) && $client->GetSkillPoints()>0 && $client->GetRawSkill(58)>0){
    $skill_from = $client->GetRawSkill(58);
    $client->IncreaseSkill(58);
    $client->SetSkillPoints($myskills);
    $skill_this = $client->GetRawSkill(58);
    quest::say("I have taught you a little more about research from $skill_from to $skill_this.");
  }
  else {
    quest::say("You are not ready to learn more about research.");
  }
}

if($text=~/baking/i){
  if ($client->GetRawSkill(60)<$client->MaxSkill(60) && $client->GetSkillPoints()>0 && $client->GetRawSkill(60)>0){
    $skill_from = $client->GetRawSkill(60);
    $client->IncreaseSkill(60);
    $client->SetSkillPoints($myskills);
    $skill_this = $client->GetRawSkill(60);
    quest::say("I have taught you a little more about baking from $skill_from to $skill_this.");
  }
  else {
    quest::say("You are not ready to learn more about baking.");
  }
}

if($text=~/tailoring/i){
  if ($client->GetRawSkill(61)<$client->MaxSkill(61) && $client->GetSkillPoints()>0 && $client->GetRawSkill(61)>0){
    $skill_from = $client->GetRawSkill(61);
    $client->IncreaseSkill(61);
    $client->SetSkillPoints($myskills);
    $skill_this = $client->GetRawSkill(61);
    quest::say("I have taught you a little more about tailoring from $skill_from to $skill_this.");
  }
  else {
    quest::say("You are not ready to learn more about tailoring.");
  }
}

if($text=~/fletching/i){
  if ($client->GetRawSkill(64)<$client->MaxSkill(64) && $client->GetSkillPoints()>0 && $client->GetRawSkill(64)>0){
    $skill_from = $client->GetRawSkill(64);
    $client->IncreaseSkill(64);
    $client->SetSkillPoints($myskills);
    $skill_this = $client->GetRawSkill(64);
    quest::say("I have taught you a little more about fletching from $skill_from to $skill_this.");
  }
  else {
    quest::say("You are not ready to learn more about fletching.");
  }
}

if($text=~/brewing/i){
  if ($client->GetRawSkill(65)<$client->MaxSkill(65) && $client->GetSkillPoints()>0 && $client->GetRawSkill(65)>0){
    $skill_from = $client->GetRawSkill(65);
    $client->IncreaseSkill(65);
    $client->SetSkillPoints($myskills);
    $skill_this = $client->GetRawSkill(65);
    quest::say("I have taught you a little more about brewing from $skill_from to $skill_this.");
  }
  else {
    quest::say("You are not ready to learn more about brewing.");
  }
}

if($text=~/jewelry/i){
  if ($client->GetRawSkill(68)<$client->MaxSkill(68) && $client->GetSkillPoints()>0 && $client->GetRawSkill(68)>0){
    $skill_from = $client->GetRawSkill(68);
    $client->IncreaseSkill(68);
    $client->SetSkillPoints($myskills);
    $skill_this = $client->GetRawSkill(68);
    quest::say("I have taught you a little more about jewelry making from $skill_from to $skill_this.");
  }
  else {
    quest::say("You are not ready to learn more about jewelry making .");
  }
}

if($text=~/pottery/i){
  if ($client->GetRawSkill(69)<$client->MaxSkill(69) && $client->GetSkillPoints()>0 && $client->GetRawSkill(69)>0){
    $skill_from = $client->GetRawSkill(69);
    $client->IncreaseSkill(69);
    $client->SetSkillPoints($myskills);
    $skill_this = $client->GetRawSkill(69);
    quest::say("I have taught you a little more about pottery from $skill_from to $skill_this.");
  }
  else {
    quest::say("You are not ready to learn more about pottery.");
  }
}

}
...and named it Teacher_of_Norrath.pl. Then i put it in the templates folder. Now...you can make a brand new NPC for this script but I decided to use something useless on my server...the Priest of Discord. I have a small MiniLogin server with a handful of players and no one does PVP, so by using the Priest of Discord I can take care of this teacher in a more simple way as the Priests are already spawning next to towns. So i ran this query in MySQL...

Code:
UPDATE npc_types SET name='Teacher_of_Norrath' WHERE name='Priest_of_Discord';
...now when I boot up my server...the Priests are now Teachers and they will train your characters past 21 in some select skills. So, whenever I update my PEQ, I simply put my perl script back in the templates folder and rerun the MySQL query above.

Now...he his training is for free but he will keep an eye on your available skill points and will not let you spend more than you have. I hope this is helpful to some.

- Djeryv
Reply With Quote
  #2  
Old 12-30-2008, 04:08 PM
djeryv
Hill Giant
 
Join Date: Apr 2008
Posts: 234
Default Updated

I had to change a couple of things because the teacher was not teaching to the level I wanted...so...

Code:
###################################
#Zone: All (Global)               #
#Short Name:                      #
#Zone ID: 55                      #
###################################
#NPC Name: Teacher_of_Norrath     #
#NPC ID: All                      #
#Quest Status: Complete           #
###################################
sub EVENT_SAY {

$myskills = $client->GetSkillPoints()-1;
$maxskills = $ulevel*5;

if($text=~/hail/i){
quest::say("Greetings, $name. Have you come to me for my [teachings]? I can only teach you more of what you started learning from your Guildmaster and only if it does not exceed your level. Make sure to [zone] after I am done teaching you.");
}

if($text=~/zone/i){
quest::say("Yes, you must leave this zone after learning from me so you will see the results of your lessons. Even your Guildmaster will not recognize your achievements if you do not zone first.");
}

if($text=~/teachings/i){
$pcskills = $client->GetSkillPoints();
quest::say("I can teach you many things with your $pcskills skill points. I can teach you more about [alchemy], [baking], black[smithing], [brewing], [fletching], [jewelry] making, [poison] making, [pottery], [research], [tailoring] and [tinkering].");
}

if($text=~/alchemy/i){
  if ($client->GetRawSkill(59)<$maxskills && $client->GetSkillPoints()>0 && $client->GetRawSkill(59)>0){
    $skill_from = $client->GetRawSkill(59);
    $client->IncreaseSkill(59);
    $client->SetSkillPoints($myskills);
    $skill_this = $client->GetRawSkill(59);
    quest::say("I have taught you a little more about alchemy from $skill_from to $skill_this.");
  }
  else {
    quest::say("You are not ready to learn more about alchemy.");
  }
}

if($text=~/smithing/i){
  if ($client->GetRawSkill(63)<$maxskills && $client->GetSkillPoints()>0 && $client->GetRawSkill(63)>0){
    $skill_from = $client->GetRawSkill(63);
    $client->IncreaseSkill(63);
    $client->SetSkillPoints($myskills);
    $skill_this = $client->GetRawSkill(63);
    quest::say("I have taught you a little more about blacksmithing from $skill_from to $skill_this.");
  }
  else {
    quest::say("You are not ready to learn more about blacksmithing.");
  }
}

if($text=~/poison/i){
  if ($client->GetRawSkill(56)<$maxskills && $client->GetSkillPoints()>0 && $client->GetRawSkill(56)>0){
    $skill_from = $client->GetRawSkill(56);
    $client->IncreaseSkill(56);
    $client->SetSkillPoints($myskills);
    $skill_this = $client->GetRawSkill(56);
    quest::say("I have taught you a little more about making poisons from $skill_from to $skill_this.");
  }
  else {
    quest::say("You are not ready to learn more about making poisons.");
  }
}

if($text=~/tinkering/i){
  if ($client->GetRawSkill(57)<$maxskills && $client->GetSkillPoints()>0 && $client->GetRawSkill(57)>0){
    $skill_from = $client->GetRawSkill(57);
    $client->IncreaseSkill(57);
    $client->SetSkillPoints($myskills);
    $skill_this = $client->GetRawSkill(57);
    quest::say("I have taught you a little more about tinkering from $skill_from to $skill_this.");
  }
  else {
    quest::say("You are not ready to learn more about tinkering.");
  }
}

if($text=~/research/i){
  if ($client->GetRawSkill(58)<$maxskills && $client->GetSkillPoints()>0 && $client->GetRawSkill(58)>0){
    $skill_from = $client->GetRawSkill(58);
    $client->IncreaseSkill(58);
    $client->SetSkillPoints($myskills);
    $skill_this = $client->GetRawSkill(58);
    quest::say("I have taught you a little more about research from $skill_from to $skill_this.");
  }
  else {
    quest::say("You are not ready to learn more about research.");
  }
}

if($text=~/baking/i){
  if ($client->GetRawSkill(60)<$maxskills && $client->GetSkillPoints()>0 && $client->GetRawSkill(60)>0){
    $skill_from = $client->GetRawSkill(60);
    $client->IncreaseSkill(60);
    $client->SetSkillPoints($myskills);
    $skill_this = $client->GetRawSkill(60);
    quest::say("I have taught you a little more about baking from $skill_from to $skill_this.");
  }
  else {
    quest::say("You are not ready to learn more about baking.");
  }
}

if($text=~/tailoring/i){
  if ($client->GetRawSkill(61)<$maxskills && $client->GetSkillPoints()>0 && $client->GetRawSkill(61)>0){
    $skill_from = $client->GetRawSkill(61);
    $client->IncreaseSkill(61);
    $client->SetSkillPoints($myskills);
    $skill_this = $client->GetRawSkill(61);
    quest::say("I have taught you a little more about tailoring from $skill_from to $skill_this.");
  }
  else {
    quest::say("You are not ready to learn more about tailoring.");
  }
}

if($text=~/fletching/i){
  if ($client->GetRawSkill(64)<$maxskills && $client->GetSkillPoints()>0 && $client->GetRawSkill(64)>0){
    $skill_from = $client->GetRawSkill(64);
    $client->IncreaseSkill(64);
    $client->SetSkillPoints($myskills);
    $skill_this = $client->GetRawSkill(64);
    quest::say("I have taught you a little more about fletching from $skill_from to $skill_this.");
  }
  else {
    quest::say("You are not ready to learn more about fletching.");
  }
}

if($text=~/brewing/i){
  if ($client->GetRawSkill(65)<$maxskills && $client->GetSkillPoints()>0 && $client->GetRawSkill(65)>0){
    $skill_from = $client->GetRawSkill(65);
    $client->IncreaseSkill(65);
    $client->SetSkillPoints($myskills);
    $skill_this = $client->GetRawSkill(65);
    quest::say("I have taught you a little more about brewing from $skill_from to $skill_this.");
  }
  else {
    quest::say("You are not ready to learn more about brewing.");
  }
}

if($text=~/jewelry/i){
  if ($client->GetRawSkill(68)<$maxskills && $client->GetSkillPoints()>0 && $client->GetRawSkill(68)>0){
    $skill_from = $client->GetRawSkill(68);
    $client->IncreaseSkill(68);
    $client->SetSkillPoints($myskills);
    $skill_this = $client->GetRawSkill(68);
    quest::say("I have taught you a little more about jewelry making from $skill_from to $skill_this.");
  }
  else {
    quest::say("You are not ready to learn more about jewelry making .");
  }
}

if($text=~/pottery/i){
  if ($client->GetRawSkill(69)<$maxskills && $client->GetSkillPoints()>0 && $client->GetRawSkill(69)>0){
    $skill_from = $client->GetRawSkill(69);
    $client->IncreaseSkill(69);
    $client->SetSkillPoints($myskills);
    $skill_this = $client->GetRawSkill(69);
    quest::say("I have taught you a little more about pottery from $skill_from to $skill_this.");
  }
  else {
    quest::say("You are not ready to learn more about pottery.");
  }
}

}
Reply With Quote
  #3  
Old 12-30-2008, 05:08 PM
Yeormom
Discordant
 
Join Date: Apr 2004
Location: 127.0.0.1
Posts: 402
Default

Thanks for sharing.
__________________
Yeorwned
Bane of Life [Custom Classic/PvP]
Reply With Quote
  #4  
Old 01-02-2009, 04:14 AM
Richardo
Banned
 
Join Date: Oct 2003
Location: Mattmecks Basement
Posts: 546
Default

Very cool submission. Thank you!
Reply With Quote
  #5  
Old 09-30-2011, 07:02 PM
bodi
Hill Giant
 
Join Date: May 2010
Posts: 105
Default

So i created the npc and i put that file in my templates, how do I connect the two?
Reply With Quote
  #6  
Old 09-30-2011, 07:50 PM
Congdar
Developer
 
Join Date: Jul 2007
Location: my own little world
Posts: 751
Default

The templates folder would be for a global npc that appears in multiple zones. That's ok, but if you only put this npc in one zone then the perl file can just be put in that zones folder instead of templates.
The connection works automatically if the perl file is named and matches the exact name as what appears in the npc_types table or if the file is named the id of the npc that is in the npc_types table. So it could be(number made up) 1234353.pl or Teacher_of_Norrath.pl
__________________
The Realm
Reply With Quote
  #7  
Old 09-30-2011, 08:16 PM
lerxst2112
Demi-God
 
Join Date: Aug 2010
Posts: 1,743
Default

One other step you'll need once you get everything in the right place is to #rq or restart your server.
Reply With Quote
Reply

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump

   

All times are GMT -4. The time now is 04:30 AM.


 

Everquest is a registered trademark of Daybreak Game Company LLC.
EQEmulator is not associated or affiliated in any way with Daybreak Game Company LLC.
Except where otherwise noted, this site is licensed under a Creative Commons License.
       
Powered by vBulletin®, Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Template by Bluepearl Design and vBulletin Templates - Ver3.3