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 05-24-2009, 11:06 PM
Congdar
Developer
 
Join Date: Jul 2007
Location: my own little world
Posts: 751
Default

If you use integers, change eq to ==
Code:
sub EVENT_SPAWN {
	quest::settimer(1, 10);
}

sub EVENT_TIMER {

	if ($timer == 1){
		quest::say("text1");
		quest::stoptimer(1);
		quest::settimer(2, 10);
	}

	if ($timer == 2){
		quest::say("text2");
		quest::stoptimer(2);
		quest::settimer(3, 10);
	}

	if ($timer == 3){
		quest::say("text3");
		quest::stoptimer(3);
		quest::settimer(4, 10);
	}

	if ($timer == 4){
		quest::say("text4");
		quest::stoptimer(4);
		quest::settimer(1, 10);
	}

}
__________________
The Realm
Reply With Quote
  #2  
Old 06-18-2009, 11:47 PM
Yeormom
Discordant
 
Join Date: Apr 2004
Location: 127.0.0.1
Posts: 402
Default

I was messing around with event timers the other night and it appeared that the timer could not get the player that triggered the event. Things like quest::movepc() didn't function and $client wasn't exported for the timer event.
__________________
Yeorwned
Bane of Life [Custom Classic/PvP]
Reply With Quote
  #3  
Old 06-19-2009, 10:17 AM
Capheus
Hill Giant
 
Join Date: Apr 2008
Location: Milwaukee
Posts: 141
Default

Getting $client in a timer in most cases will not happen cause a timer is not triggered by the client. Is these cases you have to store the client in another variable or qglobal. I have the common types below, but there are many other ways of doing this too.


Code:
sub EVENT_SPAWN {
     	$x = $npc->GetX();
   	$y = $npc->GetY();
   	quest::set_proximity($x - 20, $x + 20, $y - 20, $y + 20);
   	quest::settimer("testclient",5);
}


sub EVENT_SAY {
	if($text=~/hail/i)
	{$firstclient = $client;}
}


sub EVENT_AGGRO	{ 
	$secondclient = $client;

} 


sub EVENT_COMBAT {
	$thirdclient = $client;

} 


sub EVENT_ENTER {
	$fourthclient = $client;
}


sub EVENT_ENTERZONE {
	$fifthclient = $client;
}


sub EVENT_TIMER {
	if ($timer eq "testclient") {
	
		if ($firstclient != 0)
		{$cone = $firstclient->GetName();}

		if ($secondclient != 0)
		{$ctwo = $secondclient->GetName();}

		if ($thirdclient != 0)
		{$cthree = $thirdclient->GetName();}

		if ($fourthclient != 0)
		{$cfour = $fourthclient->GetName();}

		if ($fifthclient != 0)
		{$cfive = $fifthclient->GetName();}

	quest::say("$cone");
	quest::say("$ctwo");
	quest::say("$cthree");
	quest::say("$cfour");
	quest::say("$cfive");
	}
}
Reply With Quote
  #4  
Old 06-19-2009, 10:43 AM
Yeormom
Discordant
 
Join Date: Apr 2004
Location: 127.0.0.1
Posts: 402
Default

Some of the data is sent to the timer event, such as $name of player and $entity_list for the zone. I was specifically trying to functions for the client but those seemed to fail as well, strangely enough.
Code:
sub EVENT_TIMER
{
     quest::say("Hello $name");
     $c = $entity_list->GetClientByName($name);
     $charname = $c->GetName();
     quest::say("Hi $charname");
     $c->MovePC(1,1,1,1);
     $c->CastSpell(1,1);
}
Output:
Code:
NPC says, 'Hello JohnDoe'
NPC says, 'Hi JohnDoe'
*crickets*
*more crickets*
Not an actual script but prefect representation if all function input had valid data.
__________________
Yeorwned
Bane of Life [Custom Classic/PvP]
Reply With Quote
  #5  
Old 06-19-2009, 05:58 PM
Congdar
Developer
 
Join Date: Jul 2007
Location: my own little world
Posts: 751
Default

not sure if this will fix it, but the client movepc function takes 5 parameters... zoneid, x, y, z, heading

and since movepc failed, castspell probably didn't even get called.
__________________
The Realm
Reply With Quote
  #6  
Old 06-19-2009, 06:10 PM
Yeormom
Discordant
 
Join Date: Apr 2004
Location: 127.0.0.1
Posts: 402
Default

Well that was just a sample of what would happen and would produce the same results each time, even if only one line per event_timer. The heading parameter is optional. The perl parser checks to see if there are 4 or 5 parameters, and a default is used if only 4 are present.

I just rewrote the quest functions to get the client by entity_list if initiator was not defined for my solution, as it appears not all data is exported when an event timer is triggered. Not sure how some people are reporting they are successfully using quest functions like selfcast and movepc in the EVENT_TIMER call.
__________________
Yeorwned
Bane of Life [Custom Classic/PvP]
Reply With Quote
  #7  
Old 06-20-2009, 09:34 AM
Capheus
Hill Giant
 
Join Date: Apr 2008
Location: Milwaukee
Posts: 141
Default

Ok, trying to figure out what you are looking for. Here is another script that will allow you to use the client in sub EVENT_TIMER.

Code:
sub EVENT_SAY {

	if($text=~/hail/i) {
		
		quest::say("Would you like a [buff] or would you like to [goto] Crushbone?");
	}

	if($text=~/buff/i) {
		quest::say("Ok hold on while I get you the spell in my book.....");
		$theclienteid = $client->GetID();  #store client id
		$thename = $name;		   #store client name
		$theclient = $client;		   #store client
		quest::settimer("heal",10);
	}

	if($text=~/goto/i) {
		quest::say("Ok hold on while I find the right coordinates.....");
		quest::settimer("goto",10);
		$thename = $name;		   #store client name
		$theclient = $client;		   #store client
	}

}





sub EVENT_TIMER {

	if ($timer eq "heal") {
		quest::say("Found it! This should help $thename.");
		quest::stoptimer("heal");
		$theclient->CastSpell(26,$theclienteid); 	#casts skin like wood on self
	}
	
	if ($timer eq "goto") {
		quest::say("Off you go $thename!");
		quest::stoptimer("goto");
		$theclient->MovePC(58,143.4,-595.8,3.1,62.4);   #MovePC(zoneID, x, y, z, h)
	}
		
}
Reply With Quote
Reply


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 09:24 PM.


 

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