Log in

View Full Version : If mob is up... Have to fight it


Fridgecritter
08-11-2017, 03:43 PM
I'm trying to make it so when a player enters the sleeper zone, if a certain mob is up, and they do a #zone x y z to get passed the mob, they get summoned to the npc. Like when you enter the zone soldungb and you're over a certain level, if he's up, naggy will banish you.

I toyed with EVENT_ENTER a little but I'm not getting it right. I want the NPC to summon them after 30 seconds or so in the zone. That way they can get a few buffs in, start to aggro something else and BAM! When the mob has been killed, it won't matter and players can zone in. But I'm going to make the respawn timers such that by the time the first few mobs start to respawn, the summoning mob will respawn too.

Maybe there can be a flag put on the player that makes it so it won't summon them if they have the flag? That's just an extra thought.

I've learned a ton over the last few months making this server, and I appreciate all of the help.

Fridgecritter
08-11-2017, 04:58 PM
This is what I've got right now, just so you know I'm not just leeching. I'm trying.

sub EVENT_ENTERZONE {
if (($ulevel < 70) && ($status < 80)) {
quest::ze(0,"You are not worthy!");
$client->MovePC(202,-285,-148,-159.12,71.5);
}
elsif (($ulevel >= 70) && ($status < 80)) {
quest::echo(0, "You must best me before you are deemed worthy!");
$client->MovePC(128,37.29,-7.22,1.98,199.8);
}
}

The_Beast
08-11-2017, 05:26 PM
I've always used quest::

quest::movepc(202,-285,-148,-159.12,71.5);

As for the rest, maybe Kingly will pop around, he's a wiz for more advanced perl :)

The_Beast
08-11-2017, 05:40 PM
Actually, if you want something to practice with timers, check out the player.pl script for the guildlobby EVENT_ENTER section.
(It sets you afk after xx minutes)

Fridgecritter
08-11-2017, 05:41 PM
Actually, if you want something to practice with timers, check out the player.pl script for the guildlobby EVENT_ENTER section.
(It sets you afk after xx minutes)

Thanks! Was looking for something I could rape and pillage from, err I mean use as an example.

The_Beast
08-11-2017, 05:47 PM
Thanks! Was looking for something I could rape and pillage from, err I mean use as an example.

EXACTLY ! lol Everything I've learned in perl so far, I've started with examples like that and went from there.

Fridgecritter
08-11-2017, 06:30 PM
I'm hitting a brick wall. I know it's as simple as a } in the wrong place or something.

Fridgecritter
08-11-2017, 06:48 PM
I don't even need the quest flag part. I just wanna get the level check < 70 = boot to POK and =>70 = move to right in front of him so he'll aggro.

The_Beast
08-11-2017, 07:19 PM
I don't even need the quest flag part. I just wanna get the level check < 70 = boot to POK and =>70 = move to right in front of him so he'll aggro.

Try this. I've always had probs when tryng to specify a heading in x,y,z in a movepc script, so I just don't bother.


sub EVENT_ENTERZONE {
if (($ulevel < 70) && ($status < 80)) {
quest::ze(0,"You are not worthy!");
quest::movepc(202,-285,-148,-159.12);
}
elsif (($ulevel >= 70) && ($status < 80)) {
quest::emote(0, "You must best me before you are deemed worthy!");
quest::movepc(128,37.29,-7.22,1.98);
}
}

The_Beast
08-11-2017, 07:24 PM
Myself, I usually don't call for status in something so simple, I use a level range.

if (($ulevel > 0) && ($ulevel < 70)) {

and this

elsif (($ulevel > 69) && ($ulevel < 80)) {

The_Beast
08-11-2017, 07:50 PM
I just ran a test with this entering Nexus, <70 it sent me to pok, 70+ it sent me to center nexus. I used "ze" for both msg's.


sub EVENT_ENTERZONE {
if (($ulevel > 0) && ($ulevel < 70)) {
quest::ze(0,"You are not worthy!");
quest::movepc(202,-285,-148,-159.12);
}
elsif (($ulevel > 69) && ($ulevel < 76)) {
quest::ze(0, "You must best me before you are deemed worthy!");
quest::movepc(152,-6.17,0.75,-31.81);
}
}

Xzam
08-11-2017, 08:03 PM
I wonder if you could just have the mob summon the player every 6 sec or so?

The_Beast
08-11-2017, 09:08 PM
I wonder if you could just have the mob summon the player every 6 sec or so?

Once the mob is aggro'd you would have to zone to lose it. If it has summoning ability added to special attacks, then
you won't have to worry about being invited back :P

Fridgecritter
08-11-2017, 10:20 PM
Didn't work. Had a level 70 player zone in and it didn't move him. I logged on a regular account and zoned in with a level 69 character and it didn't boot me.

Fridgecritter
08-11-2017, 10:20 PM
This mob will kill most 70s unless they are super geared, let alone anyone else. Once there's aggro you can either kill the mob or you can't. It happens super fast if you can't

Fridgecritter
08-11-2017, 10:37 PM
OK so I changed the script name to player.pl and it works. But it won't work as an NPC script. Super weird.

The_Beast
08-11-2017, 11:03 PM
No, ENTERZONE has to be on a player.pl script. On an NPC, using a sub EVENT_ENTER is for coming within a proximity of an NPC.

Fridgecritter
08-11-2017, 11:31 PM
Ahh ok, well then I need a check to see if the NPC is up, for the summon part. If the NPC isn't up then it doesn't need to move them. So a group of players can kill the guardian for the server for a while until he repops, but it will keep new players from zoning in just to loot corpses still. I'll check naggy's script cause I know it does a check for the NPC.

The_Beast
08-11-2017, 11:47 PM
Something I doing on mine, with a customized zone, players have to be script ported in and they will have the option to
go instance or non-instance version. Some like to be alone, others don't, lol

Fridgecritter
08-12-2017, 12:18 AM
After I get the server migrated to the new machine I can do a lot more with it. That sounds cool.

Kingly_Krab
08-12-2017, 04:32 AM
This isn't the best, but it'll do what you want it to do I believe. When the player zones in the script checks if NPC ID # is spawned. If it is a timer for 30 seconds is set on the player. When the timer expires, the client is moved to the NPC's current co-ordinates.

sub EVENT_ENTERZONE {
if ($entity_list->GetNPCByNPCTypeID(#)) {
quest::settimer("Summon", 30);
}
}

sub EVENT_TIMER {
if ($timer eq "Summon") {
if ($entity_list->GetNPCByNPCTypeID(#)) {
$client->MovePC($zoneid, $entity_list->GetNPCByNPCTypeID(#)->GetX(), $entity_list->GetNPCByNPCTypeID(#)->GetY(), $entity_list->GetNPCByNPCTypeID(#)->GetZ(), $entity_list->GetNPCByNPCTypeID(#)->GetHeading());
}
quest::stoptimer("Summon");
}
}

NatedogEZ
08-12-2017, 05:47 AM
Why not just make the NPC spawn immune until that mob is killed? Have like a 30sec timer that checks if the NPC is dead it sets him attackable.

The_Beast
08-12-2017, 07:10 AM
This isn't the best, but it'll do what you want it to do I believe.

I just checked this out myself. I put it in the player script in nexus for one of the scion ID's and I did indeed get
summoned. I don't need it for FC's purpose, but it gives me other ideas. Thanks to you Kingly :)
I am curious if something like this would be picked up as a "warp" in the db radar system. I'll check it out later.

Scorpious2k
08-12-2017, 09:33 AM
Seems to me the problem is that you give players #zone. Why not just give them #peqzone instead and disable it in any zone where it causes a problem?

Fridgecritter
08-12-2017, 10:24 AM
Yeah it's more of a fun thing than preventing any kind of cheat. I just want them to kill that dragon first as sort of a right of passage.

Fridgecritter
08-12-2017, 10:24 AM
That code looks simple and amazing. Thanks a ton.