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-26-2009, 11:10 PM
trevius's Avatar
trevius
Developer
 
Join Date: Aug 2006
Location: USA
Posts: 5,946
Default

That would work for most cases, but if I was writing something that I wanted to be positive people could not exploit in any way, it would probably take a considerable amount more coding to handle.

My main concern about that is 6 people could enter the proximity and then have 1 person engage and die, and then they would be able to bring 6 more players in. When making special encounters like that, you have to try to think of all possible angles people could use to exploit it. When you get a lot of people trying the same event over time, it is a sure thing that they will eventually find the loopholes if there are any. Trust me, I have had my fair share of them on Storm Haven lol.
__________________
Trevazar/Trevius Owner of: Storm Haven
Everquest Emulator FAQ (Frequently Asked Questions) - Read It!
Reply With Quote
  #2  
Old 05-26-2009, 11:21 PM
chrsschb's Avatar
chrsschb
Dragon
 
Join Date: Nov 2008
Location: GA
Posts: 904
Default

Quote:
Originally Posted by trevius View Post
That would work for most cases, but if I was writing something that I wanted to be positive people could not exploit in any way, it would probably take a considerable amount more coding to handle.

My main concern about that is 6 people could enter the proximity and then have 1 person engage and die, and then they would be able to bring 6 more players in. When making special encounters like that, you have to try to think of all possible angles people could use to exploit it. When you get a lot of people trying the same event over time, it is a sure thing that they will eventually find the loopholes if there are any. Trust me, I have had my fair share of them on Storm Haven lol.
Hmm, nothing that can be written without a ton of work?

Is there a way to lower the count when someone dies?
Reply With Quote
  #3  
Old 05-26-2009, 11:39 PM
chrsschb's Avatar
chrsschb
Dragon
 
Join Date: Nov 2008
Location: GA
Posts: 904
Default

Just tested this script:

Code:
sub EVENT_SPAWN {
  my $x = $npc->GetX();
  my $y = $npc->GetY();
  quest::set_proximity($x - 15, $x + 15, $y - 15, $y + 15);

 $enter_count = 0;  #Keep track of how many characters enter the proximity.
}

sub EVENT_ENTER {

$enter_count = $enter_count + 1;
quest::shout("1");

  if ($enter_count > 1) {
    quest::shout("No more than 1 at a time may do this encounter.");
    quest::movepc(241, 0, 0, 20);
  }
  
sub EVENT_EXIT {

$enter_count = $enter_count - 1;
quest::shout("2");

}

}
The NPC shouts 1 when PC 1 enters. When PC 2 enters he shouts 1, then kicks PC 2 out, then shouts the "No more blahblah."

I also had my PC run up to him and just die. When I died he shouted 2, which means he drops count when a player dies.
Reply With Quote
  #4  
Old 05-27-2009, 01:33 AM
chrsschb's Avatar
chrsschb
Dragon
 
Join Date: Nov 2008
Location: GA
Posts: 904
Default

Ok, now I'm trying to add a timed check because the script fires slowly. I expect if several people rush the proximity at the same time the boss would lose count. Using the following code he still keeps count and tells you he's over his limit, but the second MovePC won't fire. I'm guessing this is because he doesn't know which PC to move? Can I have him move a random PC if this is the case?


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

	$enter_count = 0;
}


sub EVENT_ENTER {

	$enter_count = $enter_count + 1;
	quest::shout("1");

	if ($enter_count > 1) {
	quest::shout("No more than 1 at a time may do this encounter.");
	quest::movepc(241, 0, 0, 20);
	}
}


sub EVENT_TIMER {
	if (($timer eq "count") && ($enter_count > 1)) {
		quest::shout("No more than 1 at a time may do this encounter. Part 2");
		quest::movepc(241, 0, 0, 20);
		quest::stoptimer("count");
		quest::settimer("count",5);
		}
}
  
  
sub EVENT_EXIT {

$enter_count = $enter_count - 1;
quest::shout("2");

}
Reply With Quote
  #5  
Old 05-27-2009, 03:30 AM
trevius's Avatar
trevius
Developer
 
Join Date: Aug 2006
Location: USA
Posts: 5,946
Default

Well, part of the problem is that even though Proximities are useful, they are also very limited and don't handle certain things as well as they should. Really, IMO, the best way to do it would be to run the clientsearch check that you can get from the Rampage script that Kayen posted here:

http://www.eqemulator.net/forums/showthread.php?t=27850

You can do distance checks and even count in real time how many players are in range.

Then, probably what I would do would be to assign temporary qglobals to each person that enters the proximity. And, have it set an incrementing value for the qglobal so that it starts at 1 and goes up just like the enter_count variable does.

Then, you can use the client search code from the Rampage script to look for players and check their qglobals. If their value is greater than 6, it kicks them out.

Though, this would mean that once the limit of people are reached in the proximity, they would be the only chars that could do that event until their qglobal ran out.

You could also use a combination of that script along with the player.pl and have the player.pl do an EVENT_EXIT_ZONE or whatever the event for leaving a zone is called. And, when they leave the zone (die/gate/whatever), it deletes their temporary global and makes it available to the next person to enter.

There really are quite a few options depending on how creative you are about it and exactly what you are trying to accomplish.

If you wanted a simple way to handle it, you could just set the zone in the zones table to only allow a max of how many players you want to limit the encounter to. But, if you are only wanting to limit it for certain NPCs and not the whole zone, that wouldn't really work. Again, it depends on exactly what you are trying to do. I figured I would just give you a few ideas about things to consider. With enough creativity, a ton of stuff is possible that you wouldn't normally think would be possible.
__________________
Trevazar/Trevius Owner of: Storm Haven
Everquest Emulator FAQ (Frequently Asked Questions) - Read It!
Reply With Quote
  #6  
Old 05-27-2009, 12:35 PM
Shendare
Dragon
 
Join Date: Apr 2009
Location: California
Posts: 814
Default

Huh. So EntityList->GetClientByID() actually takes more of an Index as a parameter than an ID. Interesting.
Reply With Quote
  #7  
Old 05-27-2009, 12:48 PM
chrsschb's Avatar
chrsschb
Dragon
 
Join Date: Nov 2008
Location: GA
Posts: 904
Default

Trev, your idea sounds good, but way beyond my skill level.

The encounter is inside of a public zone. The boss is located in a room and I want only X number of people to be able to attempt him at once. If someone dies, or leaves, another person should be able to enter.

The way I have above is really simple, but slow and exploitable.
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 11:41 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