Here's a helper Bot I started, but have since run out to finish; It actually follows you around and heals, buffs you at your request. I had it working in Gulf of Gunthark, Infact you can test it on the Rathe server;
First, you talk to Cadale Brohat at the vendors in Gunthak;
Code:
#zone: gunthak NPC: Cadale_Brohat (224209)
#Angelox
sub EVENT_SAY {
if ($text=~/Hail/i){
quest::emote("smiles widely at you. 'Welcome. You are brave to venture to Broken Skull Rock. Don't mind the others. Everyone is a bit touchy around here. If you are interested in dyes, feel free to peruse what I have to offer. Playing with them has given me hours of entertainment! Just be careful on this rock, and watch your back. Oh, before I forget, I'm looking for someone to help me with some [tasks] that I need to get done. All my time with the dyes has kept me from some of the more important things I need to take care of.'");
quest::emote("Gets closer and whispers,'Or perhaps you might be interested in hiring some [help]?");
}
elsif($text=~/help/i){
quest::emote("chuckles, 'I have some mercenary friends interested in making some plat, they've asked me to handle their [pay]");
}
elsif(($text=~/pay/i)&&($class eq 'Warrior')){
quest::emote("Whispers, 'Not so loud! I'm moonlighting here - 50 plat will get you help tell you leave this world'");
}
elsif(($text=~/pay/i)&&($class eq 'Paladin')){
quest::emote("Whispers, 'Not so loud! I'm moonlighting here - 50 plat will get you help tell you leave this world'");
}
elsif(($text=~/pay/i)&&($class eq 'Shadowknight')){
quest::emote("Whispers, 'Not so loud! I'm moonlighting here - 50 plat will get you help tell you leave this world'");
}
elsif(($text=~/pay/i)&&($class eq 'Ranger')){
quest::emote("Whispers, 'Not so loud! I'm moonlighting here - 50 plat will get you help tell you leave this world'");
}
elsif(($text=~/pay/i)&&($class eq 'Monk')){
quest::emote("Whispers, 'Not so loud! I'm moonlighting here - 50 plat will get you help tell you leave this world'");
}
elsif(($text=~/pay/i)&&($class eq 'Bard')){
quest::emote("Whispers, 'Not so loud! I'm moonlighting here - 50 plat will get you help tell you leave this world'");
}
elsif(($text=~/pay/i)&&($class eq 'Rogue')){
quest::emote("Whispers, 'Not so loud! I'm moonlighting here - 50 plat will get you help tell you leave this world'");
}
elsif(($text=~/pay/i)&&($class eq 'Berserker')){
quest::emote("Whispers, 'Not so loud! I'm moonlighting here - 50 plat will get you help tell you leave this world'");
}
elsif($text=~/pay/i){
quest::says("Sorry, this offer is only for melee-types");
}
}
sub EVENT_ITEM{
if ($platinum<=49){
quest::say("Thank you for your donation $name, it wasn't enough though ...");
}
elsif (($platinum>=50)&&($sandee==0)){
quest::emote("summons a mercenary to your side");
quest::spawn2(224236,1,0,-242.0,1521.1,4.1,108.4);
quest::say("Here she is, be careful not to wander too far away from her, else she comes back to me");
quest::delglobal("sandy");
quest::setglobal("sandy",2,3,"F");
$sandy=undef;
$sandee=1;
quest::delglobal("$name");
quest::setglobal("$name",3,3,"F");
}
elsif ($sandy==2){
quest::say("Sorry, all mercenarys are in use.");
}
elsif (${$name}==3){
quest::say("You can only have one at a time.");
}
elsif (($platinum>=50)&&($sandy==3)){
quest::emote("summons a mercenary to your side");
quest::spawn2(224236,1,0,-242.0,1521.1,4.1,108.4);
quest::say("Here she is, be careful not to wander too far away from her, else she comes back to me");
quest::delglobal("sandy");
quest::setglobal("sandy",2,3,"F");
$sandy=undef;
quest::delglobal("$name");
quest::setglobal("$name",3,3,"F");
}else{
quest::say("Oops! I missed a possibilty!");
}
}
Then , if you payed the right amount and are the proper class, Brohat will pop you some help - Merc Sandy ( A cool looking female dark elf);
Code:
# Angelox's EQ Bots
#Gunthak healer
sub EVENT_SAY {
if($class eq 'Cleric'){quest::say("Sorry, I can't help a cleric");
}
elsif($class eq 'Shaman'){
quest::say("Sorry, I can't help a Shaman");
}
elsif($class eq 'Necromancer'){
quest::say("Sorry, I can't help a Necro");
}
elsif($class eq 'Wizard'){
quest::say("Sorry, I can't help a Wizard");
}
elsif($class eq 'Magician'){
quest::say("Sorry, I can't help a Magician");
}
elsif($class eq 'Enchanter'){
quest::say("Sorry, I can't help a Enchanter");
}
elsif($class eq 'Beastlord'){
quest::say("Sorry, I can't help a Beastlord");
}
elsif($text=~/follow/i){
quest::clear_proximity();
quest::say("Following");
quest::follow($userid);
}
elsif($text=~/quit/i){
quest::say("Ok, good-bye!");
quest::delglobal("sandy");
quest::setglobal("sandy","3","3","F");
$sandy=undef;
quest::delglobal("$name");
quest::setglobal("$name","2","3","F");
quest::clear_proximity();
quest::depop();
}
elsif($text=~/hail/i){
quest::say("I'm ready $name, do you need to know the [commands]?");
}
elsif($text=~/commands/i){
quest::say("If you target and say [follow], then I will follow you,");
quest::say("If you target and say [stop], then I will stop, but don't go to far away, else you'll loose me,");
quest::say("If you target and say [quit], I will go away,");
quest::say("I can [heal] you with celestial healing, and I have [temperance] for buffs,");
quest::say("You have to trarget me for my attention.");
quest::say("Don't forget to tell me to [quit] when you're done.");
}
elsif($text=~/heal/i){
quest::say("Casting celestial healing ...");
quest::settimer("cheal1",5);
}
elsif($text=~/temp/i){
quest::say("Casting temperance ...");
quest::settimer("temp1",15);
}
elsif($text=~/stop/i){
quest::clear_proximity();
quest::depop();
my $a = 224236;
my $x = $npc->GetX();
my $y = $npc->GetY();
my $z = $npc->GetZ();
quest::spawn2($a,1,0,$x,$y,$z,$h);
quest::say("Ok, don't stray too far!");
}
}
sub EVENT_SPAWN{
$x = $npc->GetX();
$y = $npc->GetY();
quest::set_proximity($x - 120, $x + 120, $y - 120, $y + 120);
}
sub EVENT_EXIT{
quest::depop();
quest::delglobal("sandy");
quest::setglobal("sandy","3","3","F");
$sandy=undef;
quest::delglobal("$name");
quest::setglobal("$name","2","3","F");
}
sub EVENT_TIMER
{
if ($timer eq "cheal1"){
quest::stoptimer("cheal1");
$npc->CastSpell(1444,$userid);
}
elsif ($timer eq "temp1"){
quest::stoptimer("temp1");
$npc->CastSpell(3692,$userid);
}
}
sub EVENT_DEATH{
quest::delglobal("sandy");
quest::setglobal("sandy","3","3","F");
$sandy=undef;
quest::delglobal("$name");
quest::setglobal("$name","2","3","F");
}
Like I said, this little puppy works - I just need to finish it or maybe you can
- right now I'm having a hell of a time recuperating some lost data from my server death, also am working, and my little bit of spare time goes to database work (Cavedude: Hatesfury is on its way!) .
I also had plans for this npc to cross into other zones with its owner via quest_globals