Go Back   EQEmulator Home > EQEmulator Forums > Quests > Quests::Q&A

Quests::Q&A This is the quest support section

Reply
 
Thread Tools Display Modes
  #1  
Old 08-01-2008, 08:20 PM
Striat
Sarnak
 
Join Date: Aug 2006
Posts: 60
Default

You were calling for the npc to attack a client, but a client is not returned in a timer (does not check for client interaction!). So, you would have needed to add a $client = $npc->GetHateTop(); or something.

That still doesn't account for the other issue. Try this:

Code:
#Nightwhisker Fight

my $adds = undef;

sub EVENT_SPAWN {	#Not really needed.  Was for testing.
	quest::stoptimer("rat_adds");
	my $adds = 0;
	}

sub EVENT_COMBAT {

  if ($combat_state == 0) {
    quest::depopall(2700659);
    quest::depopall(2700660);
    quest::depopall(2700661);
    quest::stoptimer("rat_adds");
    quest::stoptimer("rat_agro");
  }

#Replaced event attack with:
  if ($combat_state == 1) {
  quest::stoptimer("rat_adds");
  quest::shout("Rats of Dreadsire, I call upon you! Come to my aid!");
  quest::settimer("rat_adds",10);
  }

}


sub EVENT_TIMER {

  if ($timer eq "rat_adds") {
    quest::stoptimer("rat_adds");

#the big chunk of change
for($adds = 0; $adds < 10; $adds++) {
   	quest::spawn2(quest::ChooseRandom(2700659,2700660,2700661),0,0, $x, $y, $z, 0);
	sethate();
	}
    	quest::say("Come! Come! Rid these halls of the humaniods!");
	$adds = 0;
    	quest::settimer("rat_adds",10); }
    
}


sub EVENT_DEATH {

$timestamp = localtime(time);

  quest::depopall(2700659);
  quest::depopall(2700660);
  quest::depopall(2700661);
  quest::stoptimer("rat_adds");
  quest::shout2("SQUEEEEEEEK!");
  quest::write("bossdeaths.txt","[$timestamp]:Nightwhisker was killed by $name the $class.");

}		

#added routine to process ALL npcs.
sub sethate {
	my $client = $npc->GetHateTop();

my $tiny_rats = $entity_list->GetMobByNpcTypeID(2700659);
my $albino_rats = $entity_list->GetMobByNpcTypeID(2700660);
my $black_rats = $entity_list->GetMobByNpcTypeID(2700661);

    if ($tiny_rats) {
my $hate_tiny_rats = $tiny_rats->CastToNPC();
$hate_tiny_rats->AddToHateList($client, 1); }

    if ($albino_rats) {
my $hate_albino_rats = $albino_rats->CastToNPC();
$hate_albino_rats->AddToHateList($client, 1); }

    if ($black_rats) {
my $hate_black_rats = $black_rats->CastToNPC();
$hate_black_rats->AddToHateList($client, 1); }

}
Technically, it could still have a problem or two so you could consider using an array and processing a loop for each npcspawn. While it is *technically* possible to run into a problem, you won't run into the potential problem with this script. Let me know if it works for you!
Reply With Quote
  #2  
Old 08-02-2008, 05:09 AM
trevius's Avatar
trevius
Developer
 
Join Date: Aug 2006
Location: USA
Posts: 5,946
Default

I wound up just going a simpler route. I couldn't get any other way to do it exactly the way I wanted it to. Basically I was wanting rats to come pouring into the room from 2 halls near the named. Which I think would look a bit cooler than just having them spawn right in the room.

No matter what I did, I couldn't get more than 3 of them to take the hate and come running. And even when they did, they were running through the walls instead of pathing like they are supposed to. So, the effect was lost.

Finally, I just decided to spawn them and then have each spawn use a quest to quest::moveto(); and head to the named. Once they are there, they will agro on the players instead of pathing back like they normally would using the command. Though, I wish quest::pathto() was actually working, cause then I could have them do exactly what I have been wanting. With the moveto, I wound up making it similar, but they pop closer by so they have a straight shot to the named and don't go through walls.

Code:
#Nightwhisker Fight

sub EVENT_SPAWN {

quest::stoptimer("rat_adds");

}

sub EVENT_TIMER {

  if ($timer eq "rat_adds") {
    quest::stoptimer("rat_adds");

    quest::spawn2(quest::ChooseRandom(2700659,2700660,2700661),0,0, 16.2, 3287.8, 18.1,62);
    quest::spawn2(quest::ChooseRandom(2700659,2700660,2700661),0,0, 15.7, 3301.6, 18.1,64);
    quest::spawn2(quest::ChooseRandom(2700659,2700660,2700661),0,0, 40.4, 3287.9, 18.1,62);
    quest::spawn2(quest::ChooseRandom(2700659,2700660,2700661),0,0, 38.4, 3301.8, 18.1,63);
    quest::spawn2(quest::ChooseRandom(2700659,2700660,2700661),0,0, 51.0, 3295.6, 18.1,64);
    
    quest::spawn2(quest::ChooseRandom(2700659,2700660,2700661),0,0, 166.1, 3428.4, 24.1,128);
    quest::spawn2(quest::ChooseRandom(2700659,2700660,2700661),0,0, 149.7, 3428.4, 24.1,124);
    quest::spawn2(quest::ChooseRandom(2700659,2700660,2700661),0,0, 151.5, 3398.2, 24.1,125);
    quest::spawn2(quest::ChooseRandom(2700659,2700660,2700661),0,0, 166.0, 3395.6, 24.1,128);
    quest::spawn2(quest::ChooseRandom(2700659,2700660,2700661),0,0, 159.3, 3371.6, 24.1,129);

    quest::say("Come! Come! Rid these halls of the humaniods!");
    quest::settimer("rat_adds",10); }
    
}

sub EVENT_COMBAT {

  if ($combat_state == 0) {
    quest::depopall(2700659);
    quest::depopall(2700660);
    quest::depopall(2700661);
    quest::stoptimer("rat_adds"); }
  
  if ($combat_state == 1) {
  quest::stoptimer("rat_adds");
  quest::shout("Rats of Dreadsire, I call upon you! Come to my aid!");
  quest::settimer("rat_adds",10); }
  
}

sub EVENT_DEATH {

$timestamp = localtime(time);

  quest::depopall(2700659);
  quest::depopall(2700660);
  quest::depopall(2700661);
  quest::stoptimer("rat_adds");
  quest::shout2("SQUEEEEEEEK!");
  quest::write("bossdeaths.txt","[$timestamp]:Nightwhisker was killed by $name the $class.");

}

Code:
#Nightwhisker Rat Adds

sub EVENT_SPAWN {
  
quest::moveto(158.7,3294.2,19.2)

}
__________________
Trevazar/Trevius Owner of: Storm Haven
Everquest Emulator FAQ (Frequently Asked Questions) - Read It!
Reply With Quote
  #3  
Old 08-09-2008, 07:49 PM
Neiv
Hill Giant
 
Join Date: May 2008
Location: Colorado
Posts: 238
Default

My opinion on this is worth less than nothing, but for the little it's worth:
Quote:
if ($timer eq "rat_agro")
Interestingly, when I tried "eq" in one of my $timer functions, it broke. But when I use "==" it works fine. Not saying this was the problem in your script; just that my script does not work when using "eq."
Reply With Quote
  #4  
Old 08-09-2008, 08:47 PM
trevius's Avatar
trevius
Developer
 
Join Date: Aug 2006
Location: USA
Posts: 5,946
Default

== is for numerical values and eq is for everything else.
__________________
Trevazar/Trevius Owner of: Storm Haven
Everquest Emulator FAQ (Frequently Asked Questions) - Read It!
Reply With Quote
  #5  
Old 08-09-2008, 09:36 PM
Neiv
Hill Giant
 
Join Date: May 2008
Location: Colorado
Posts: 238
Default

This is what I have on my player.pl
Quote:
if($timername == "aggro")
I tried eq and it does not work on this.
Reply With Quote
Reply

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump

   

All times are GMT -4. The time now is 08:52 AM.


 

Everquest is a registered trademark of Daybreak Game Company LLC.
EQEmulator is not associated or affiliated in any way with Daybreak Game Company LLC.
Except where otherwise noted, this site is licensed under a Creative Commons License.
       
Powered by vBulletin®, Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Template by Bluepearl Design and vBulletin Templates - Ver3.3