EQEmulator Forums

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

Richardo 01-21-2009 02:45 PM

qglobals
 
I am trying to understand Global Variables. Would this work? If not, why?

Code:

sub EVENT_SAY
my $conversation = $qglobals{remember_conv};
{
if($text=~/hail/i && $conversation = "0")
{
quest::setglobal("remember_conv", $conversation, 5, "F");
quest::say("I will remember you, next time you hail me!");
}
if($text=~/hail/i && $conversation = "1");
{
quest::say("We have talked before!");
}
}


Angelox 01-21-2009 02:52 PM

Make sure you checked the setting for quest globals for the npc in npc_types

Richardo 01-21-2009 02:53 PM

Ah, the npc needs qglobals enabled on them? I see. So as far as that, I got the syntax correct?

Andrew80k 01-21-2009 03:00 PM

Quote:

Originally Posted by Richardo (Post 163207)
Ah, the npc needs qglobals enabled on them? I see. So as far as that, I got the syntax correct?

Close. Make sure you have "==" or "eq" (in the case of string comparison) in your if statements. Which you would probably figure out as soon as you ran it.

cavedude 01-21-2009 03:13 PM

No need to assign a variable to the global, since the global is a variable. This would work better for you, and won't throw up warnings in the logs:

Code:

sub EVENT_SAY {
  if($text=~/hail/i && !defined $qglobals{conversation}){
quest::setglobal("conversation", 1, 0, "F");
quest::say("I will remember you, next time you hail me!");
 }
  elsif($text=~/hail/i && defined $qglobals{conversation}){
quest::say("We have talked before!");
 }
}


Richardo 01-22-2009 06:17 PM

Quote:

Originally Posted by Andrew80k (Post 163208)
Close. Make sure you have "==" or "eq" (in the case of string comparison) in your if statements. Which you would probably figure out as soon as you ran it.

Yeah I understand general things like that. == for intergers eq for strings. Thanks for your help guys! :)

Angelox 01-22-2009 07:22 PM

Quote:

Originally Posted by Richardo (Post 163207)
Ah, the npc needs qglobals enabled on them? I see. So as far as that, I got the syntax correct?

We never had to do this at first (would work anyways), but now we do, so it's always the first thing I forget when I do quests.

Richardo 01-24-2009 07:49 PM

Do you guys know if it's possible to make a quest to where once an npc is hailed, no one else can talk to him until the global variable expires?

cavedude 01-24-2009 08:03 PM

Yep,

Code:

quest::setglobal("name",1,2,"M10");
will be available to the NPC who called it, from the zone they called it in, and to all players for 10 minutes. The second number is the option and what calls this behavior. Here are the proper values, taken from the wiki:

Code:

-----------------------------------------
|  value |  npcid  |  player |  zone  |
-----------------------------------------
|  0    |  this  |  this  |  this  |
|  1    |  all    |  this  |  this  |
|  2    |  this  |  all  |  this  |
|  3    |  all    |  all  |  this  |
|  4    |  this  |  this  |  all    |
|  5    |  all    |  this  |  all    |
|  6    |  this  |  all  |  all    |
|  7    |  all    |  all  |  all    |
-----------------------------------------


Richardo 01-25-2009 03:12 PM

Is there way to make something like this.. But I want it so no one can get the first message once someone has hailed him.


sub EVENT_SAY
{
if($text=~/hail/i && $var1 = 1)
{
quest::say("HI 2 u.");
quest::setglobal("var1",1,2,"H25");
}
if($text=~/hail/i && $var1 = 0)
}
quest::say("I wont talk to u now!");
}
}

sub EVENT_SPAWN
{
quest::delglobal("var1");
}

##this is so the npc can be hailed once he respawns.

cavedude 01-25-2009 03:50 PM

You were real close. When dealing with globals, I do recommend using defined or !defined to avoid filling the log up with warnings. If you use a standard global == 1 check, and the global doesn't exist in the DB, it'll spam your log with warnings since the variable is undefined. Also, the hash version of globals: $globals{name} is preferred, as the non-hash version: $name==1 is depreciated. It also makes it easier to determine what is a user defined variable and what is a global by looking at the file.

Code:

sub EVENT_SAY {
if($text=~/hail/i && !defined $qglobals{var1}){ //Global is not defined, talk to them.
quest::say("HI 2 u.");
quest::setglobal("var1",1,2,"H25");
}
if($text=~/hail/i && defined $qglobals{var1}){ //Global is defined with a value of 1, don't talk to them.
quest::say("I wont talk to u now!");
 }
}
sub EVENT_SPAWN {
quest::delglobal("var1"); //We want the NPC to be hailed when he pops.
}

A bit off topic, but in case you're wondering, if you need to check a global for a value other than 0 or 1 you'd do a:

Code:

if($text=~/hail/i && defined $qglobals{var1} && $qglobals{var1} == 2){

Richardo 01-26-2009 12:10 PM

But will this make it so no one else can hail the mob either?

cavedude 01-26-2009 01:16 PM

Yes, because option 2 for globals makes the global available to all players. If a global exists that the player has access to, they will always use it. Whether they were the one who created it or not originally is irrelevant in this case.

Richardo 01-26-2009 05:41 PM

Ahhh! I get it now. Thanks for pointing that out to me....


All times are GMT -4. The time now is 07:33 PM.

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