Log in

View Full Version : Timer based aggro


blackdragonsdg
03-06-2010, 05:50 AM
I have been looking at this script for two hours and I can not figure out why it will not work. Could someone please help me?

The script gets to quest::emote("lets loose a blood curdling howl(calling for help)"); and starts looping that emote but I have no idea why it is doing that.

sub EVENT_AGGRO {
quest::emote("starts chasing after you");
quest::settimer("countdown",8);
}

sub EVENT_TIMER {
quest::emote("lets loose a blood curdling howl(calling for help)");
my $ravenous1_mob = $entity_list->GetMobByNpcTypeID(700664);
my $ravenous2_mob = $entity_list->GetMobByNpcTypeID(700665);
my $ravenous3_mob = $entity_list->GetMobByNpcTypeID(700666);
my $ravenous4_mob = $entity_list->GetMobByNpcTypeID(700667);
my $ravenous5_mob = $entity_list->GetMobByNpcTypeID(700668);
my $ravenous6_mob = $entity_list->GetMobByNpcTypeID(700669);
my $ravenous7_mob = $entity_list->GetMobByNpcTypeID(700670);
my $ravenous8_mob = $entity_list->GetMobByNpcTypeID(700671);
my $ravenous9_mob = $entity_list->GetMobByNpcTypeID(700672);
my $ravenous10_mob = $entity_list->GetMobByNpcTypeID(700673);
my $ravenous11_mob = $entity_list->GetMobByNpcTypeID(700674);
my $ravenous12_mob = $entity_list->GetMobByNpcTypeID(700675);
my $ravenous13_mob = $entity_list->GetMobByNpcTypeID(700676);
my $ravenous14_mob = $entity_list->GetMobByNpcTypeID(700677);
my $ravenous15_mob = $entity_list->GetMobByNpcTypeID(700678);
my $ravenous16_mob = $entity_list->GetMobByNpcTypeID(700679);
my $ravenous17_mob = $entity_list->GetMobByNpcTypeID(700680);
my $ravenous18_mob = $entity_list->GetMobByNpcTypeID(700681);
my $ravenous19_mob = $entity_list->GetMobByNpcTypeID(700682);
my $ravenous20_mob = $entity_list->GetMobByNpcTypeID(700683);

if ($ravenous1_mob) {
my $ravenous1_mobnpc = $ravenous1_mob->CastToNPC();
$ravenous1_mobnpc->AddToHateList($client, 1);
}
if ($ravenous2_mob) {
my $ravenous2_mobnpc = $ravenous2_mob->CastToNPC();
$ravenous2_mobnpc->AddToHateList($client, 1);
}
if ($ravenous3_mob) {
my $ravenous3_mobnpc = $ravenous3_mob->CastToNPC();
$ravenous3_mobnpc->AddToHateList($client, 1);
}
if ($ravenous4_mob) {
my $ravenous4_mobnpc = $ravenous4_mob->CastToNPC();
$ravenous4_mobnpc->AddToHateList($client, 1);
}
if ($ravenous5_mob) {
my $ravenous5_mobnpc = $ravenous5_mob->CastToNPC();
$ravenous5_mobnpc->AddToHateList($client, 1);
}
if ($ravenous6_mob) {
my $ravenous6_mobnpc = $ravenous6_mob->CastToNPC();
$ravenous6_mobnpc->AddToHateList($client, 1);
}
if ($ravenous7_mob) {
my $ravenous7_mobnpc = $ravenous7_mob->CastToNPC();
$ravenous7_mobnpc->AddToHateList($client, 1);
}
if ($ravenous8_mob) {
my $ravenous8_mobnpc = $ravenous8_mob->CastToNPC();
$ravenous8_mobnpc->AddToHateList($client, 1);
}
if ($ravenous9_mob) {
my $ravenous9_mobnpc = $ravenous9_mob->CastToNPC();
$ravenous9_mobnpc->AddToHateList($client, 1);
}
if ($ravenous10_mob) {
my $ravenous10_mobnpc = $ravenous10_mob->CastToNPC();
$ravenous10_mobnpc->AddToHateList($client, 1);
}
if ($ravenous11_mob) {
my $ravenous11_mobnpc = $ravenous11_mob->CastToNPC();
$ravenous11_mobnpc->AddToHateList($client, 1);
}
if ($ravenous12_mob) {
my $ravenous12_mobnpc = $ravenous12_mob->CastToNPC();
$ravenous12_mobnpc->AddToHateList($client, 1);
}
if ($ravenous13_mob) {
my $ravenous13_mobnpc = $ravenous13_mob->CastToNPC();
$ravenous13_mobnpc->AddToHateList($client, 1);
}
if ($ravenous14_mob) {
my $ravenous14_mobnpc = $ravenous14_mob->CastToNPC();
$ravenous14_mobnpc->AddToHateList($client, 1);
}
if ($ravenous15_mob) {
my $ravenous15_mobnpc = $ravenous15_mob->CastToNPC();
$ravenous15_mobnpc->AddToHateList($client, 1);
}
if ($ravenous16_mob) {
my $ravenous16_mobnpc = $ravenous16_mob->CastToNPC();
$ravenous16_mobnpc->AddToHateList($client, 1);
}
if ($ravenous17_mob) {
my $ravenous17_mobnpc = $ravenous17_mob->CastToNPC();
$ravenous17_mobnpc->AddToHateList($client, 1);
}
if ($ravenous18_mob) {
my $ravenous18_mobnpc = $ravenous18_mob->CastToNPC();
$ravenous18_mobnpc->AddToHateList($client, 1);
}
if ($ravenous19_mob) {
my $ravenous19_mobnpc = $ravenous19_mob->CastToNPC();
$ravenous19_mobnpc->AddToHateList($client, 1);
}
if ($ravenous20_mob) {
my $ravenous20_mobnpc = $ravenous20_mob->CastToNPC();
$ravenous20_mobnpc->AddToHateList($client, 1);
}
quest::stoptimer("countdown");
}

Derision
03-06-2010, 06:59 AM
$client isn't exported to EVENT_TIMER.

I'm not the quest expert, but this works for me. What you can do is make a note of the name of the player who aggroed the mob in EVENT_AGGRO, then in EVENT_TIMER, lookup the Client object using the name you stored, i.e. this works:


sub EVENT_AGGRO {
quest::emote("starts chasing after you");
quest::settimer("countdown",8);
$AggroOn = $name;
}

sub EVENT_TIMER {
quest::stoptimer("countdown");
quest::emote("lets loose a blood curdling howl(calling for help)");

# Check if the person who aggroed us is still here
#
$client = $entity_list->GetClientByName($AggroOn);

if(!$client)
{
return;
}

my $ravenous1_mob = $entity_list->GetMobByNpcTypeID(700664);
my $ravenous2_mob = $entity_list->GetMobByNpcTypeID(700665);
my $ravenous3_mob = $entity_list->GetMobByNpcTypeID(700666);
my $ravenous4_mob = $entity_list->GetMobByNpcTypeID(700667);
my $ravenous5_mob = $entity_list->GetMobByNpcTypeID(700668);
my $ravenous6_mob = $entity_list->GetMobByNpcTypeID(700669);
my $ravenous7_mob = $entity_list->GetMobByNpcTypeID(700670);
my $ravenous8_mob = $entity_list->GetMobByNpcTypeID(700671);
my $ravenous9_mob = $entity_list->GetMobByNpcTypeID(700672);
my $ravenous10_mob = $entity_list->GetMobByNpcTypeID(700673);
my $ravenous11_mob = $entity_list->GetMobByNpcTypeID(700674);
my $ravenous12_mob = $entity_list->GetMobByNpcTypeID(700675);
my $ravenous13_mob = $entity_list->GetMobByNpcTypeID(700676);
my $ravenous14_mob = $entity_list->GetMobByNpcTypeID(700677);
my $ravenous15_mob = $entity_list->GetMobByNpcTypeID(700678);
my $ravenous16_mob = $entity_list->GetMobByNpcTypeID(700679);
my $ravenous17_mob = $entity_list->GetMobByNpcTypeID(700680);
my $ravenous18_mob = $entity_list->GetMobByNpcTypeID(700681);
my $ravenous19_mob = $entity_list->GetMobByNpcTypeID(700682);
my $ravenous20_mob = $entity_list->GetMobByNpcTypeID(700683);

if ($ravenous1_mob) {
my $ravenous1_mobnpc = $ravenous1_mob->CastToNPC();
$ravenous1_mob->AddToHateList($client, 1);
}
if ($ravenous2_mob) {
my $ravenous2_mobnpc = $ravenous2_mob->CastToNPC();
$ravenous2_mobnpc->AddToHateList($client, 1);
}
if ($ravenous3_mob) {
my $ravenous3_mobnpc = $ravenous3_mob->CastToNPC();
$ravenous3_mobnpc->AddToHateList($client, 1);
}
if ($ravenous4_mob) {
my $ravenous4_mobnpc = $ravenous4_mob->CastToNPC();
$ravenous4_mobnpc->AddToHateList($client, 1);
}
if ($ravenous5_mob) {
my $ravenous5_mobnpc = $ravenous5_mob->CastToNPC();
$ravenous5_mobnpc->AddToHateList($client, 1);
}
if ($ravenous6_mob) {
my $ravenous6_mobnpc = $ravenous6_mob->CastToNPC();
$ravenous6_mobnpc->AddToHateList($client, 1);
}
if ($ravenous7_mob) {
my $ravenous7_mobnpc = $ravenous7_mob->CastToNPC();
$ravenous7_mobnpc->AddToHateList($client, 1);
}
if ($ravenous8_mob) {
my $ravenous8_mobnpc = $ravenous8_mob->CastToNPC();
$ravenous8_mobnpc->AddToHateList($client, 1);
}
if ($ravenous9_mob) {
my $ravenous9_mobnpc = $ravenous9_mob->CastToNPC();
$ravenous9_mobnpc->AddToHateList($client, 1);
}
if ($ravenous10_mob) {
my $ravenous10_mobnpc = $ravenous10_mob->CastToNPC();
$ravenous10_mobnpc->AddToHateList($client, 1);
}
if ($ravenous11_mob) {
my $ravenous11_mobnpc = $ravenous11_mob->CastToNPC();
$ravenous11_mobnpc->AddToHateList($client, 1);
}
if ($ravenous12_mob) {
my $ravenous12_mobnpc = $ravenous12_mob->CastToNPC();
$ravenous12_mobnpc->AddToHateList($client, 1);
}
if ($ravenous13_mob) {
my $ravenous13_mobnpc = $ravenous13_mob->CastToNPC();
$ravenous13_mobnpc->AddToHateList($client, 1);
}
if ($ravenous14_mob) {
my $ravenous14_mobnpc = $ravenous14_mob->CastToNPC();
$ravenous14_mobnpc->AddToHateList($client, 1);
}
if ($ravenous15_mob) {
my $ravenous15_mobnpc = $ravenous15_mob->CastToNPC();
$ravenous15_mobnpc->AddToHateList($client, 1);
}
if ($ravenous16_mob) {
my $ravenous16_mobnpc = $ravenous16_mob->CastToNPC();
$ravenous16_mobnpc->AddToHateList($client, 1);
}
if ($ravenous17_mob) {
my $ravenous17_mobnpc = $ravenous17_mob->CastToNPC();
$ravenous17_mobnpc->AddToHateList($client, 1);
}
if ($ravenous18_mob) {
my $ravenous18_mobnpc = $ravenous18_mob->CastToNPC();
$ravenous18_mobnpc->AddToHateList($client, 1);
}
if ($ravenous19_mob) {
my $ravenous19_mobnpc = $ravenous19_mob->CastToNPC();
$ravenous19_mobnpc->AddToHateList($client, 1);
}
if ($ravenous20_mob) {
my $ravenous20_mobnpc = $ravenous20_mob->CastToNPC();
$ravenous20_mobnpc->AddToHateList($client, 1);
}
}


I'm sure one of the resident quest experts will chime in if there is a better way to do it.

nenelan
03-06-2010, 09:37 AM
Only way I can see for anything improvement wise is make a foreach loop to shrink that down to much less lines of code. Other than that looks fine.

blackdragonsdg
03-06-2010, 04:34 PM
Derision, that worked perfectly. Thanks!

trevius
03-07-2010, 05:57 AM
Although, it isn't really required if you are only using 1 timer for a script like this, it is normally common to put all of that stuff inside an IF statement to check that the timer matches the timer name you set. So, you would do something like this:

sub EVENT_TIMER {

if($timer eq "countdown") {

#Put your timer stuff inside here...

}

}

That way, you can have multiple timers with different names within the same script. Otherwise, if you try to use other timers, it will be running everything from your other timers every time as well. For the script you have now, you don't really need it, but it is good practice to use it.