Code:
use 5.012;
no strict 'vars';
use warnings;
### IGNORE EVERYTHING BELOW HERE ###
package NPC;
sub new {
my ( $class, %param ) = ( shift, @_ );
$param{_class} = 14;
return bless \%param, $class;
}
sub GetClass {
shift->{_class};
}
package main;
my $npc = NPC->new();
sub quest::saylink {
shift;
}
sub quest::say {
say shift;
}
# this is what the client said (used to search available buffs)
my $text = "Clarity II";
### IGNORE EVERYTHING ABOVE HERE ###
# array of playable class long names
use constant CLASS_L => qw(
Unknown Warrior Cleric Paladin Ranger Shadowknight Druid Monk Bard Rogue
Shaman Necromancer Wizard Magician Enchanter Beastlord Berserker
);
# saylink
my $buffs = quest::saylink( "buffs", 1 );
# hashref containing buffs offered depening on the class of the npc
my $data = {
Enchanter => {
greet => "I have the $buffs for your mind.",
buffs => [
[ "Bind Affinity", 35, 10 ],
[ "Breeze", 697, 25 ],
[ "Clarity", 174, 50 ],
[ "Clarity II", 1693, 200 ],
[ "Alacrity", 170, 10 ],
[ "Augment", 1729, 30 ],
[ "Aanya's Quickening", 1708, 100 ],
[ "Rune I", 481, 5 ],
],
},
Necromancer => {
greet => "Souls and $buffs.",
buffs => [
[ "Bind Affinity", 35, 10 ],
[ "Dead Men Floating", 1391, 10 ],
],
},
};
# get class-specific stuff for this npc
my $npcClass = (CLASS_L)[ $npc->GetClass() ];
my $greeting = $data->{$npcClass}->{greet};
my $buffList = $data->{$npcClass}->{buffs};
sub EVENT_SAY {
if ( $text =~ /hail/i ) {
quest::say($greeting);
return;
}
given ( [ grep { ${$_}[0] =~ /$text/i } @{$buffList} ] ) {
# one exact match (probably clicked on saylink in list)
when ( @{$_} == 1 && $text eq ${$_}[0][0] ) {
say "That will be ${$_}[0][2]pp for ${$_}[0][0].";
}
# client typed targeted text that did not match hail and
# more than one available spell name matched recieved text
# TODO: create saylinks
when ( @{$_} > 1 ) {
foreach my $spell ( @{$_} ) {
my ( $spellName, $spellID, $spellCost ) = @{$spell};
say "I can cast $spellName on you for ${spellCost}pp.";
}
}
}
}
### IGNORE EVERYTHING BELOW HERE ###
EVENT_SAY();
you can change the value of $text in this and run it outside of the emulator to see the results.
change $param{_class} to whatever class you want the npc to be.
nyquil is kicking in. you're on your own for a bit...