EQEmulator Forums

EQEmulator Forums (https://www.eqemulator.org/forums/index.php)
-   Quests::Q&A (https://www.eqemulator.org/forums/forumdisplay.php?f=599)
-   -   Timer based aggro (https://www.eqemulator.org/forums/showthread.php?t=30745)

blackdragonsdg 03-06-2010 05:50 AM

Timer based aggro
 
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.

Code:

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:

Code:

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:

Code:

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.


All times are GMT -4. The time now is 06:58 AM.

Powered by vBulletin®, Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.