Hateborne
04-12-2011, 10:59 PM
Evening gents, I've gone and broken something again!
I am experiencing a weird issue with CastSpell. If I use it to cast on a player, it works fine. If I use it on the npc that is casting (as in self buffing) it is always interrupted.
A few previous posts I've found say to use $npc-GetID() for self targetting, but that just end in the script refusing to run certain parts.
Enclosed are relevant portions of the script:
This is the 'header' to the subroutine. Note @groupMembers is not listed here as it is filled in at the start of the fight on agro (which is relevant, but isn't broken).
sub doDiscord
{
my $victim = "";
my $randy = int(rand(1000));
my @moblist = $entity_list->GetMobList();
foreach $ent (@moblist)
{
if($ent->GetID() == 999173)
{
$selfEnt = $ent;
}
}
This next part fails to set $victim to the top threat target. Gives an unknown variable error in logs. Both spells always give Interrupted (guessing due to lack of legitimate target). The spell referenced is a targetted AoE with snare component.
if($randy > 875)
{
quest::say("Slow down friend. No need to be in such a hurry.");
$victim = $npc->GetHateTop();
$npc->CastSpell(9895, $victim, 10, 0, 0); ## cast druid 4.0 vines on top threat
$npc->CastSpell(9895, $victim, 10, 0, 0); ## cast druid 4.0 vines on top threat
}
This bit was me trying 3 different ways of getting it to work. The spells referenced here are spell damage bonus, melee haste, and casting haste (respectively). The error produced is "Perl runetime error: Can't call method "GetID" without a package or object reference at quest/xxx/yyy.pl line 151". Line 151 is the Ancient: Vampiric Thunder line.
elsif($randy > 625)
{
quest::say("Let's play pretend! I pretend to be an Enchanter!");
$npc->CastSpell(9936, $selfEntity->GetID(), 10, 0, 0); ## buff self with Ancient: Vampiric Thunder
$npc->CastSpell(9937, $selfEnt, 10, 0, 0); ## buff self with Ancient: Melee Haste
$npc->CastSpell(9938, $selfEntity, 10, 0, 0); ## buff self with Ancient: Spell Haste
}
This section will randomly mezz a few player but refuses to actually do the heal cast. I am assuming it has something to do with targetting again.
The spell first referenced is unresistable npc mezz, second is incredibly strong Complete Heal v2.
elsif($randy > 125)
{
quest::say("Stop that! I need to heal...");
my $temp = int(rand($size)) - 1; ## random pick a number of players to mezz
if($temp < 1) {$temp = 1}; ## minor catch to ensure no out of bounds
for ($i = 0; $i < $temp; $i++)
{
$npc->CastSpell(9757, $groupMembers[$i], 10, 0, 0); ## cast NPC Mesmerize on target
}
$npc->CastSpell(9712, $selfEntity, 10, 8, 0); ## 8 second cast of Cleric CH 2 (with Amp Healing, should do ~400k)
}
This just produces a massive block of interrupts. Again, targetting I guess :-P
Spell referenced is a 25k x 5 (per cast) wizard nuke.
elsif($randy < 50)
{
quest::say("Hmm...never used this spell before!");
$npc->CastSpell(9746, $selfEntity, 10, 0, 0); ## wiz t3 nuke
$npc->CastSpell(9746, $selfEntity, 10, 0, 0); ## wiz t3 nuke
$npc->CastSpell(9746, $selfEntity, 10, 0, 0); ## wiz t3 nuke
$npc->CastSpell(9746, $selfEntity, 10, 0, 0); ## wiz t3 nuke
$npc->CastSpell(9746, $selfEntity, 10, 0, 0); ## wiz t3 nuke
quest::say("OWW! Now I remember what that does.");
}
}
Thank you in advance!
-Hate
I am experiencing a weird issue with CastSpell. If I use it to cast on a player, it works fine. If I use it on the npc that is casting (as in self buffing) it is always interrupted.
A few previous posts I've found say to use $npc-GetID() for self targetting, but that just end in the script refusing to run certain parts.
Enclosed are relevant portions of the script:
This is the 'header' to the subroutine. Note @groupMembers is not listed here as it is filled in at the start of the fight on agro (which is relevant, but isn't broken).
sub doDiscord
{
my $victim = "";
my $randy = int(rand(1000));
my @moblist = $entity_list->GetMobList();
foreach $ent (@moblist)
{
if($ent->GetID() == 999173)
{
$selfEnt = $ent;
}
}
This next part fails to set $victim to the top threat target. Gives an unknown variable error in logs. Both spells always give Interrupted (guessing due to lack of legitimate target). The spell referenced is a targetted AoE with snare component.
if($randy > 875)
{
quest::say("Slow down friend. No need to be in such a hurry.");
$victim = $npc->GetHateTop();
$npc->CastSpell(9895, $victim, 10, 0, 0); ## cast druid 4.0 vines on top threat
$npc->CastSpell(9895, $victim, 10, 0, 0); ## cast druid 4.0 vines on top threat
}
This bit was me trying 3 different ways of getting it to work. The spells referenced here are spell damage bonus, melee haste, and casting haste (respectively). The error produced is "Perl runetime error: Can't call method "GetID" without a package or object reference at quest/xxx/yyy.pl line 151". Line 151 is the Ancient: Vampiric Thunder line.
elsif($randy > 625)
{
quest::say("Let's play pretend! I pretend to be an Enchanter!");
$npc->CastSpell(9936, $selfEntity->GetID(), 10, 0, 0); ## buff self with Ancient: Vampiric Thunder
$npc->CastSpell(9937, $selfEnt, 10, 0, 0); ## buff self with Ancient: Melee Haste
$npc->CastSpell(9938, $selfEntity, 10, 0, 0); ## buff self with Ancient: Spell Haste
}
This section will randomly mezz a few player but refuses to actually do the heal cast. I am assuming it has something to do with targetting again.
The spell first referenced is unresistable npc mezz, second is incredibly strong Complete Heal v2.
elsif($randy > 125)
{
quest::say("Stop that! I need to heal...");
my $temp = int(rand($size)) - 1; ## random pick a number of players to mezz
if($temp < 1) {$temp = 1}; ## minor catch to ensure no out of bounds
for ($i = 0; $i < $temp; $i++)
{
$npc->CastSpell(9757, $groupMembers[$i], 10, 0, 0); ## cast NPC Mesmerize on target
}
$npc->CastSpell(9712, $selfEntity, 10, 8, 0); ## 8 second cast of Cleric CH 2 (with Amp Healing, should do ~400k)
}
This just produces a massive block of interrupts. Again, targetting I guess :-P
Spell referenced is a 25k x 5 (per cast) wizard nuke.
elsif($randy < 50)
{
quest::say("Hmm...never used this spell before!");
$npc->CastSpell(9746, $selfEntity, 10, 0, 0); ## wiz t3 nuke
$npc->CastSpell(9746, $selfEntity, 10, 0, 0); ## wiz t3 nuke
$npc->CastSpell(9746, $selfEntity, 10, 0, 0); ## wiz t3 nuke
$npc->CastSpell(9746, $selfEntity, 10, 0, 0); ## wiz t3 nuke
$npc->CastSpell(9746, $selfEntity, 10, 0, 0); ## wiz t3 nuke
quest::say("OWW! Now I remember what that does.");
}
}
Thank you in advance!
-Hate