There is a post on here for an awsome buff bot
http://www.eqemulator.org/forums/showthread.php?t=29401
I am trying to take this a step further but my still growing limit script knowledge is leaving me in the dust.
I have a spawngroup cycle that spawns my buff bot. Sometimes it spawns as different classes, so when It spawns I want it to be able to only cast spells from the class it spawned as and with a player(not npc) level check so a level 1 player cannot get clarity 2 because he is too low lvl. I am posting what I have done so far and hoping im on the right track lol.
Code:
#Credit goes to Sylaei for the original creation of this buff bot! Thank you Sylaei 08-31-2009
#Edited by Fig to suit VCR server needs. 02-02-2013
sub EVENT_SPAWN {
my $Ench = ($npc->GetClass() == 'Enchanter');
my $Necro = ($npc->GetClass() == 'Necromancer');
if ($npc->GetClass() == 'Enchanter') {
@SpellList = ("Bind Affinity","Breeze","Clarity","Clarity II","Alacrity","Augment","Aanya's Quickening","Rune I");
@SpellCost = ("10","25","50","200","10","30","100","5");
@SpellID = ("35","697","174","1693","170","1729","1708","481");
}
else ($npc->GetClass == 'Necromancer') {
@SpellList = ("Dead Men Floating");
@SpellCost = ("10");
@SpellID = ("1391");
}
}
sub EVENT_SAY {
my $buffs = quest::saylink("buffs", 1);
my $NPCName = $npc->GetCleanName();
if ($text =~/Hail/i) {
$client->Message(315, "Chip Chip $name, Do you need some $buffs?'");
}
#Counts each row for the While
my $count = 1;
#Counts each element in the Array for the While
my $n = 0;
if ($text !~ /Hail/i) && $Ench {
while ($SpellList[$n]) {
#This searches the list to find possible matches. The lc() command makes all text lowercase.
#It is easier to make all text lower case for comparison, if the user types uppercase it will still match.
if ((lc($SpellList[$n]) =~ lc($text) && lc($SpellList[$n]) ne lc($text)) || ($text =~ /^buffs$/i)) {
my $SpellList = quest::saylink($SpellList[$n]);
$client->Message(315, "These are your choices, $SpellList");
}
#This is the command that is executed when a the user enters a spell.
if (lc($SpellList[$n]) eq lc($text) && $text !~ /^buffs$/i) {
#Creates a global variable. You must set the qgolbal field in the npc_types table to 1 for each npc you wish to handle global variables.
#buff is the name, $text is what the varible should be eq too, 0 only this npc, char, and zone apply to the variable, M5 is 5 minutes.
quest::setglobal("buffs", $text, 0, "M5");
$client->Message(315, "That's going to cost $SpellCost[$n]pp for the $qglobals{buffs} buff.");
}
$n++;
$count++;
}
}
elsif ($text !~ /Hail/i) && $Necro {
while ($SpellList[$n]) {
#This searches the list to find possible matches. The lc() command makes all text lowercase.
#It is easier to make all text lower case for comparison, if the user types uppercase it will still match.
if ((lc($SpellList[$n]) =~ lc($text) && lc($SpellList[$n]) ne lc($text)) || ($text =~ /^buffs$/i)) {
my $SpellList = quest::saylink($SpellList[$n]);
$client->Message(315, "These are your choices, $SpellList");
}
#This is the command that is executed when a the user enters a spell.
if (lc($SpellList[$n]) eq lc($text) && $text !~ /^buffs$/i) {
#Creates a global variable. You must set the qgolbal field in the npc_types table to 1 for each npc you wish to handle global variables.
#buff is the name, $text is what the varible should be eq too, 0 only this npc, char, and zone apply to the variable, M5 is 5 minutes.
quest::setglobal("buffs", $text, 0, "M5");
$client->Message(315, "That's going to cost $SpellCost[$n]pp for the $qglobals{buffs} buff.");
}
$n++;
$count++;
}
}
}
I do not have the level checks placed anywhere because honestly i have no clue where to put the check lol.
As always any and all feedback and suggestions appreciated
Edit: Its having a problem calling the correct spell list. I am pretty sure I cannot call
Code:
my $Ench = ($npc->GetClass() == 'Enchanter');
from sub EVENT_SPAWN to sub EVENT_SAY. Also I think my IF statement under EVENT_SAY could be changed to something like if
Code:
If ($npc->GetClass() == 'Enchanter') || ($npc->GetClass() == 'Enchanter')
brain hurts