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 07-02-2008, 05:54 PM
spider661
Discordant
 
Join Date: Oct 2005
Location: michigain
Posts: 260
Default

the problem with that is if the zone despawns how do i tell the npc not to spawn and to spawn..

i know how to dopop the npc but then when the zone goes down and comes back up then the npc will be back again.

thats the problem the zone is dynamic. i could set it to static but then if it crashes it comes back up as dynamic and i have the same problem. and all it takes is for one player to find out how to crash the zone and then they can get into the other zone and wait around for however to do all the work then walk up and hail the npc that flags them.
Reply With Quote
  #2  
Old 07-02-2008, 06:41 PM
trevius's Avatar
trevius
Developer
 
Join Date: Aug 2006
Location: USA
Posts: 5,946
Default

When I want to block players from getting flags that others have earned, I just use a deathguard or a proximity banisher to block anyone some accessing the section of the zone that the flag is attained from. There are many ways to spawn the guards, but I normally use either EVENT_ATTACK, Timers, or an NPC that the players have to speak with to tell the event to start. Once that happens, the NPC or the Boss spawns some NPCs that will block off the path to reach that area of the zone.

You can look at the Vox/Naggy scripts for good proximity quests that will move a player to another zone, or somewhere else in the same zone to prevent them from making it to the flag NPC. You can also spawn guards that hit for 32K with insane attack speeds, good agro ranges, and very high Accuracy and Attack Ratings. Then, just have the guards on the same faction so that they will share agro and have them close enough so that they do. I normally set 1 guard to run very fast and the other to be perma-rooted. That way, people can't just have a monk pull both of the guards out of the way so others can get through. Even if they can make it past the rooted guard, they will get agro from the running one as soon as it gets back to within range of the rooted one for agro to share.

If I really want to make sure players don't pass an area of a zone, I will use both proximity banishers and death guards together and then players don't stand much of a chance in making it through. That is because there is a slim chance that a FD class could make it past the guards and FD without getting killed, but adding the proximity banisher in there will keep that from happening. Make sure the death guards see invis, ITU, as well as hide and improved hide as well to keep rogues out.

If you do that, then you shouldn't have to worry much about locking the zone to keep others out.

If you are making an encounter that only requires a max of 1 single group, you could also use the move group quest command to move the entire group to the flagging area that is blocked off and then you could skip the part of having to spawn the death guards and proximity banisher. You could have it so that the first group to speak with the group teleporting NPC will get moved and then have the teleporter depop for 2 hours

There are quite a few ways you can come up with to keep others from getting flags without having to lock out the whole zone.
__________________
Trevazar/Trevius Owner of: Storm Haven
Everquest Emulator FAQ (Frequently Asked Questions) - Read It!
Reply With Quote
  #3  
Old 07-02-2008, 08:44 PM
spider661
Discordant
 
Join Date: Oct 2005
Location: michigain
Posts: 260
Default

i dont think the death guards or proximities wold work becuase of the zone size. the zone the npc 1 sends you 2 is "loading" so its just a very small room with one boss spawned there.

i did have a thought though
how hard would it be to add a new quest command copy the setglobal and get globals and customize them to write to a new table setting a server wide variable that an npc could read.

would i just have to add a new line to questmgr.cpp copying the old and adding to it or would i have to change 200 other files to get it to work?
Reply With Quote
  #4  
Old 07-03-2008, 04:36 PM
Striat
Sarnak
 
Join Date: Aug 2006
Posts: 60
Default

Quote:
Originally Posted by spider661 View Post
i dont think the death guards or proximities wold work becuase of the zone size. the zone the npc 1 sends you 2 is "loading" so its just a very small room with one boss spawned there.

i did have a thought though
how hard would it be to add a new quest command copy the setglobal and get globals and customize them to write to a new table setting a server wide variable that an npc could read.

would i just have to add a new line to questmgr.cpp copying the old and adding to it or would i have to change 200 other files to get it to work?
To add a command, you'd have to do some edits to questmgr.cpp, questmgr.h, perlparser.cpp. I think questmgr even tells you steps you would need to follow. However, I do not think it is necessary. Just use player quests. Basically, have the npc set a global and then port. Say you want 2 hours. Use kind of what I have written. Get groupID for the group and have it set the groupid as a global. then, in the zone the player zones into, have it check for that global. This may need some editing, but here is an idea that should work.

Event_Giver.pl
Code:
sub EVENT_SAY {
$groupid = undef;
my $group = $client->GetGroup();
$a = $client->GetName();

if($text=~/Hail/i){
	quest::say("Hello, $a.  Are you [interested] in a trial?");
}

if($text=~/interested/i){
if ($group) {
$groupid = $group->GetID();
$groupcount = $group->GroupCount();
quest::say("Very, well, $name.  My records show that you have a total of $groupcount members in your group.  Any attempts to add additional members AFTER entering the event will result in immediate disqualification.  Therefore, make sure your group is completely set up before saying ready.  When you are [ready], we shall begin.");
}
else {
quest::say("My records show you that you are not in a group, $name.  You may enter an event without a group, but I strongly discourage it.  If you still wish to enter, just sat when you are [ready].");
}
}

if($text=~/ready/i){
if ($qglobals{eventready} == 1) {
quest::say("Sorry, there is currently an event occurring.  You will need to wait a few minutes.");
}
else {
if ($group) {
$groupid = $group->GetID();
$groupcount = $group->GroupCount();
quest::say("Then get ready!");
quest::delglobal("eventcontender");
quest::delglobal("eventcontendersize");
quest::delglobal("eventready");
quest::setglobal("eventcontender",$groupid,7,"F");
quest::setglobal("eventcontendersize",$groupcount,7,"F");
quest::setglobal("eventready",1,7,"F");
quest::movegrp();		#ADD YOUR INFO HERE
}
}
}

}
And this script would actually go in the folder where the event is located.

player.pl
Code:
sub EVENT_ENTERZONE {
$a = undef;
$group = $entity_list->GetGroupByClient($client);
$a = $client->GetName();
$client->SetHeading(128);
quest::settimer("checkaccess", 1);
if ($group) {
	$groupid = $group->GetID();
	}
if ($qglobals{eventready}) {
if ($group && $qglobals{eventcontender} == $groupid) {
	$client->Message(15, "Your event will begin in less than a minute!");
	}
elsif ($a eq "$qglobals{eventcontender}") {
	$client->Message(15, "Your event will begin in less than a minute!");
	}
else {
	$client->Message(15, "You are not allowed access to this zone, $a!");
	quest::movepc(202,460,378,-128);
	}
	}
else {
	$client->Message(15, "You are not allowed access to this zone, $a!");
	quest::movepc(202,460,378,-128);
	}
}

sub EVENT_TIMER {
$group = $entity_list->GetGroupByClient($client);
$a = $client->GetName();
if ($group) {
	$groupid = $group->GetID();
	$groupcount = $group->GroupCount();
	}
if ($timer eq "checkaccess") {
	if ($qglobals{eventready}){
	if ($group) {
	if ($groupid != $qglobals{eventcontender}) {
      $client->Message(15, "You are not allowed access to this zone, $a!");
	quest::movepc(202,460,378,-128);
	}
	elsif ($groupcount > $qglobals{eventcontendersize}) {
      $client->Message(15, "You have illegally added members to your group!");
	quest::movepc(202,460,378,-128);
	}
	}
	elsif (!$group && $a ne "$qglobals{eventcontender}") {
	$client->Message(15, "You are not allowed access to this zone, $a!");
	quest::movepc(202,460,378,-128);
	}
      }

	}
 }
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 02:57 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