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

05-26-2009, 08:12 PM
|
 |
Dragon
|
|
Join Date: Nov 2008
Location: GA
Posts: 904
|
|
Limiting players in a room
I want to set up a boss encounter within a dungeon that will only be attemptable by a set number of people/bots. If the boss is aggroed and the number of players/bots is above this limit I want to have the boss kick these people outside of the room.
Is this possible? Something similar to what Nagafen/Vox do, but for quantity of players, instead of level of players.
Here's the quest for reference:
Code:
sub EVENT_SPAWN {
my $x = $npc->GetX();
my $y = $npc->GetY();
quest::set_proximity($x - 100, $x + 100, $y - 100, $y + 100);
}
sub EVENT_ENTER {
if (($ulevel >= 53) && ($status == 0)) {
quest::echo("I will not fight you, but I will banish you!");
quest::movepc(30,-7024,2020,-60.7);
}
}
sub EVENT_AGGRO {
quest::settimer("getloc",15); #mob will get position every 15 seconds if pulled away from spawn point
}
sub EVENT_TIMER {
quest::clear_proximity();
my $x = $npc->GetX();
my $y = $npc->GetY();
quest::set_proximity($x - 100, $x + 100, $y - 100, $y + 100);
}
sub EVENT_DEATH {
quest::stoptimer("getloc");
quest::clear_proximity();
}
|
 |
|
 |
 |
|
 |

05-26-2009, 08:58 PM
|
 |
Developer
|
|
Join Date: Aug 2006
Location: USA
Posts: 5,946
|
|
Depending on exactly how you wanted the event to play out and how to deal with resetting the event and such, it probably wouldn't be to hard to do what you are wanting.
Code:
sub EVENT_SPAWN {
my $x = $npc->GetX();
my $y = $npc->GetY();
quest::set_proximity($x - 100, $x + 100, $y - 100, $y + 100);
$enter_count = 0; #Keep track of how many characters enter the proximity.
}
sub EVENT_ENTER {
$enter_count = $enter_count + 1;
if ($enter_count >= 6) {
quest::echo("No more than 6 at a time may do this encounter.");
quest::movepc(152, 0, 0, -30);
}
}
If you wanted to get more advanced, you could use sub EVENT_COMBAT to handle resetting the enter count variable if people fail the event so it could be restarted. You could also use temporary quest globals to assign to people as they enter and do a check for that temporary qglobal before upping the enter count again. This way, the first 6 chars to get inside the proximity can then leave and come back and still get in, but it won't allow others to come in.
I don't know anything at all about bots, so I don't know if they would be counted properly, or if proximities even take them into account at all.
|
 |
|
 |

05-26-2009, 09:24 PM
|
 |
Demi-God
|
|
Join Date: Mar 2009
Location: Umm
Posts: 1,492
|
|
I have a related quetsion.
Trev - would it be posible to write a perl script which woudl identify a player by some sort of parameter (level above X or class X etc) and somehow mark that player UNABLE to damage the mob?
BTW I was thinking, basing of Nagafen script can we try to emulate Trivial Encounter restriction like on FV server has or eq2:
Could we use perhaps use EVENT_AGGRO to determien player level and ONLY banish him if he actualy agroes the mob (gets on it hate list) rather than just enter its proximity?
|

05-26-2009, 10:24 PM
|
 |
Developer
|
|
Join Date: Aug 2006
Location: USA
Posts: 5,946
|
|
I have tried using EVENT_AGGRO for that, but it didn't work. I think it only runs the check when the mob changes aggro, not for anyone who gets on the hate list. Though, it would be nice to have that as an event type (among the list of quite a few other event types I wouldn't mind seeing).
The only way I can think of to keep particular levels or classes or whatever from damaging a mob would be to cast DA on them repeatedly for the length of the fight. That would be possible, but would require using the client search script code that a few scripts in the custom quest section use.
|

05-26-2009, 10:58 PM
|
 |
Dragon
|
|
Join Date: Nov 2008
Location: GA
Posts: 904
|
|
Thanks for the reply Trev. Think this would work?
Code:
sub EVENT_SPAWN {
my $x = $npc->GetX();
my $y = $npc->GetY();
quest::set_proximity($x - 100, $x + 100, $y - 100, $y + 100);
$enter_count = 0; #Keep track of how many characters enter the proximity.
}
sub EVENT_ENTER {
$enter_count = $enter_count + 1;
if ($enter_count >= 6) {
quest::echo("No more than 6 at a time may do this encounter.");
quest::movepc(152, 0, 0, -30);
}
sub EVENT_EXIT (
$enter_count = $enter_count - 1;
}
sub EVENT_COMBAT (
if ($combat_state == 0) {
$enter_count = 0;
}
}
|

05-26-2009, 11:10 PM
|
 |
Developer
|
|
Join Date: Aug 2006
Location: USA
Posts: 5,946
|
|
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.
|
Posting Rules
|
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts
HTML code is Off
|
|
|
All times are GMT -4. The time now is 04:41 AM.
|
|
 |
|
 |
|
|
|
 |
|
 |
|
 |