Log in

View Full Version : Zoning to lose aggro vs. Quest ?


DanCanDo
08-21-2016, 03:44 PM
I was curious, with the typical scenario of a player zoning to get rid of aggro
from an npc, is it possible to set up an npc quest script with a proximity and
something like sub EVENT_ENTER that will do the same hate wipe as zoning ?

Just something I am playing around with, if possible, wanting to setup a "safe"
area in a zone, that would enable the player to run to with any aggro from any
npc.

ghanja
08-21-2016, 04:55 PM
NPC + Factions would be the less convoluted method.

Handling this through Perl, while possible, is not without involvement, to do what you wish AND ensure it's not exploited till kingdom come.

DanCanDo
08-21-2016, 05:06 PM
NPC + Factions would be the less convoluted method.


Ya, I can't alter the npc factions. It's all set up with custom npcs which were
meant to aggro and attack the player that may be running.(chuckle)

I didn't get my hopes up to pull this off, but the thought was nice :)

Thanks ghanja

ghanja
08-21-2016, 05:14 PM
Ya, I can't alter the npc factions. It's all set up with custom npcs which were
meant to aggro and attack the player that may be running.(chuckle)

I didn't get my hopes up to pull this off, but the thought was nice :)

Thanks ghanja

Well I mean, its doable, it just wasn't the best way, assuming you were running stock. I don't know all the intricacies of your server to suggest the best method.

You just wish to define a certain area, where a client can run to and the hate lists are wiped? At the very least, I would suggest depopping, killing or at very least, healing the NPC after this is done. Otherwise, you'll have a proverbial line in the sand, where a client can attack the NPC, then if that client gets low on health, cross that line where the NPC says "woops, no no, I cant cross that line, I'll stop hating you now", only for the client to recover then re-engage, all the while slowly works down that NPC.

Unless of course that was the intent?

TL;DR: More information needed.

DanCanDo
08-21-2016, 05:23 PM
Oh definately, it's expected for a player to be able to attack npc, but then make a run for
it. It's not much different than normal play, when we all ran for the zone line to avoid us
all getting wiped. (chuckle)
But to clarify what I am hoping to do, is (virtually) divide an open zone, where one area
is KOS and the "safe" area is not. I did try something only to experiment, using the same
type of faction of the guards in misty, along with opposing noob monster faction (38).
I placed the halfling guards at the safe line and put the 38 faction (with a base of -1000)
on the kos mobs. inking the halflings would grab the mob, just like they do in misty, when
a player brought the mobs to them. But that didn't seem to work, (chuckle)

DanCanDo
08-21-2016, 09:42 PM
Well, I got the alternative option to work using the faction experiment. Just had to
set a little value overlooked in the npc_types table. The npc_aggro value had to be set
to higher than 0 on the planned safe line guards. They will indeed assist with it set to 0,
but won't aggro unless it's set to 1.

NatedogEZ
08-21-2016, 10:13 PM
You could try this...

Setup an invisible NPC in the "Safe Area" and when they enter the proximity it triggers this...

sub EVENT_ENTER {
$entity_list->RemoveFromHateLists($client);
}

DanCanDo
08-21-2016, 10:20 PM
Wow, that's exactly what I had in mind. I hope this works :) Thanks a lot NatedogEZ !
I'll give it a try and see what happens, then let you know.

DanCanDo
08-21-2016, 11:13 PM
Yes, works like a charm Natedog. I shuved it in with this proximity snippet.
I aggro'd 3 different mobs (with dmg), ran back to the prox npc and they
stopped chasing me :) Thank You very much !


my $ProxDist = 50;

sub EVENT_SPAWN {
my $x = $npc->GetX();
my $y = $npc->GetY();
my $z = $npc->GetZ();
quest::set_proximity($x - $ProxDist, $x + $ProxDist, $y - $ProxDist, $y + $ProxDist, $z - $ProxDist, $z + $ProxDist);
}

sub EVENT_ENTER {
$npc->SignalClient($client, 1);
$entity_list->RemoveFromHateLists($client);
}