PDA

View Full Version : Deathgates


Krugus
07-22-2009, 08:45 PM
On my small server, I've added Death gates for Necro's and Shadowknights to use. They are located in bone towers across Norrath. When a Necro or Shadowknight approaches one of these towers, a Nethergate Summoner appears and will only converse with only those two classes. It gives a few different locations for them to travel to then once it ports them he disappears.

I use two different quest scripts:

First is the summon_deathgate trigger npc (I use race 240 on this one to make them invisible). This one you will need to place in each zone that you want to have a Nethergate Summoner to appear. You will need to modify the quest to point to the correct NPCID of the Nethergate_Summoner twice which is noted in the .pl

# Event summon death gate
# This will summon up a Deathgate Summoner for Necromancers and Shadowknights
# The Summoner will then offer the Necro//Shadowknight a choice of places to go.
#

sub EVENT_SPAWN
{
$x = $npc->GetX();
$y = $npc->GetY();
quest::set_proximity($x - 20, $x + 20, $y - 20, $y + 20);
}
sub EVENT_ENTER
{

if(($class eq 'Necromancer' || $class eq 'Shadowknight'))
{
quest::me("You feel a chill run down your spine as a vissage of death appears nearby");
quest::spawn2(21159,0,0,476.5,1124.7,-47.0,146.9);# this is the NPCID of the Nethergate Summoner and the loc for it to appear.
}
else
{
quest::me("You feel a chill run down your spine as if death passed by....");
}

}
sub EVENT_EXIT
{
quest::depop(21159);#NPCID of the Nethergate Summoner, death can't wait around all day ya know.
}

This above will call forth the Nethergate_Summoner npc. I place this script in the templates folder. He will depop after porting the player.
The quest script for him is as follows:

# Zone Event for Nethermancers (Necro's and Shadowknights)
# By: Krugus
#
# Place in templates quest folder
#
# NPC: Nethergate_Summoner
#
#

sub EVENT_SAY
{
my $yc = quest::saylink("your command");
my $dgs = quest::saylink("Nether Gate");
my $port = quest::saylink("port");
my $we = quest::saylink("West Commons");
my $rmnt = quest::saylink("North Rathe Mountains");
my $rmst = quest::saylink("South Rathe Mountains");
my $bbm = quest::saylink("Butcherblock");
my $qhills = quest::saylink("Qeynos Hills");
my $tox = quest::saylink("Tox Forest");
my $fob = quest::saylink("Field of Bone");
my $dread = quest::saylink("Dreadlands");
my $gmf = quest::saylink("Grimling Forest");
my $dsp = quest::saylink("Dawnshroud Peaks");
my $grd = quest::saylink("Great Divide");
my $dis = quest::saylink("dismiss");

if($text =~ /Hail/i)
{
if(($class eq 'Necromancer' || $class eq 'Shadowknight'))
{
$client->Message(4, "Nethergate Summoner tells you, I am at $yc $name");
}
else
{
quest::shout("YOU ARE NOT WORTHY TO COMMAND ME $name!");
quest::selfcast(905);
quest::depop();
}
}
if($text =~ /your command/i)
{
if(($class eq 'Necromancer' || $class eq 'Shadowknight'))
{
$client->Message(4, "Nethergate Summoner tells you, I am the Summoner of the $dgs and only those dealing in Nethermancy may command me");
}
else
{
quest::shout("YOU ARE NOT WORTHY TO COMMAND ME $name!");
quest::selfcast(905);
quest::depop();
}
}
if($text =~ /Nether Gate/i)
{
if(($class eq 'Necromancer' || $class eq 'Shadowknight'))
{
$client->Message(4, "Nethergate Summoner tells you, Nether Gates are portals which Nethermancers can travel quickly from one to another. I can $port you to another Nether Gate around Norrath.");
}
else
{
quest::shout("YOU ARE NOT WORTHY TO COMMAND ME $name!");
quest::selfcast(905);
quest::depop();
}
}
if($text =~ /port/i)
{
if(($class eq 'Necromancer' || $class eq 'Shadowknight'))
{
$client->Message(4, "Nethergate Summoner tells you, The other Nether gates are at the following locations: $we, $rmnt, $rmst, $bbm, $qhills, $tox, $fob, $dread, $grd, $gmf and $dsp. Command me to travel or $dis me from service.");
}
else
{
quest::shout("YOU ARE NOT WORTHY TO COMMAND ME $name!");
quest::selfcast(905);
quest::depop();
}
}
if($text =~ /West Commons/i)
{
if(($class eq 'Necromancer' || $class eq 'Shadowknight'))
{
$client->Message(4, "Nethergate Summoner tells you, As you wish $name");
quest::movepc(21,455.4,1085.0,-49.5,146.9);
quest::depop();
}
else
{
quest::shout("YOU ARE NOT WORTHY TO COMMAND ME $name!");
quest::selfcast(905);
quest::depop();
}
}
if($text =~ /North Rathe Mountains/i)
{
if(($class eq 'Necromancer' || $class eq 'Shadowknight'))
{
$client->Message(4, "Nethergate Summoner tells you, As you wish $name");
quest::movepc(50,758.7,2070.8,3.3,6.0);
quest::depop();
}
else
{
quest::shout("YOU ARE NOT WORTHY TO COMMAND ME $name!");
quest::selfcast(905);
quest::depop();
}
}
if($text =~ /South Rathe Mountains/i)
{
if(($class eq 'Necromancer' || $class eq 'Shadowknight'))
{
$client->Message(4, "Nethergate Summoner tells you, As you wish $name");
quest::movepc(50,-2236.4,-462.6,0.4,63.1);
quest::depop();
}
else
{
quest::shout("YOU ARE NOT WORTHY TO COMMAND ME $name!");
quest::selfcast(905);
quest::depop();
}
}
if($text =~ /Butcherblock/i)
{
if(($class eq 'Necromancer' || $class eq 'Shadowknight'))
{
$client->Message(4, "Nethergate Summoner tells you, As you wish $name");
quest::movepc(68,850.8,-1548.5,0.2,112.8);
quest::depop();
}
else
{
quest::shout("YOU ARE NOT WORTHY TO COMMAND ME $name!");
quest::selfcast(905);
quest::depop();
}
}
if($text =~ /Qeynos Hills/i)
{
if(($class eq 'Necromancer' || $class eq 'Shadowknight'))
{
$client->Message(4, "Nethergate Summoner tells you, As you wish $name");
quest::movepc(4,-1014.1,4692.2,42.0,96.3);
quest::depop();
}
else
{
quest::shout("YOU ARE NOT WORTHY TO COMMAND ME $name!");
quest::selfcast(905);
quest::depop();
}
}
if($text =~ /Tox Forest/i)
{
if(($class eq 'Necromancer' || $class eq 'Shadowknight'))
{
$client->Message(4, "Nethergate Summoner tells you, As you wish $name");
quest::movepc(38,-1019.7,435.2,-30.1,63.0);
quest::depop();
}
else
{
quest::shout("YOU ARE NOT WORTHY TO COMMAND ME $name!");
quest::selfcast(905);
quest::depop();
}
}
if($text =~ /Field of Bone/i)
{
if(($class eq 'Necromancer' || $class eq 'Shadowknight'))
{
$client->Message(4, "Nethergate Summoner tells you, As you wish $name");
quest::movepc(78,-468.7,-1714.5,-51.6,96.0);
quest::depop();
}
else
{
quest::shout("YOU ARE NOT WORTHY TO COMMAND ME $name!");
quest::selfcast(905);
quest::depop();
}
}
if($text =~ /Dreadlands/i)
{
if(($class eq 'Necromancer' || $class eq 'Shadowknight'))
{
$client->Message(4, "Nethergate Summoner tells you, As you wish $name");
quest::movepc(86,7550.0,10.3,1050.4,63.4);
quest::depop();
}
else
{
quest::shout("YOU ARE NOT WORTHY TO COMMAND ME $name!");
quest::selfcast(905);
quest::depop();
}
}
if($text =~ /Grimling Forest/i)
{
if(($class eq 'Necromancer' || $class eq 'Shadowknight'))
{
$client->Message(4, "Nethergate Summoner tells you, As you wish $name");
quest::movepc(167,-1281.8,161.8,39.4,126.0);
quest::depop();
}
else
{
quest::shout("YOU ARE NOT WORTHY TO COMMAND ME $name!");
quest::selfcast(905);
quest::depop();
}
}
if($text =~ /Dawnshroud Peaks/i)
{
if(($class eq 'Necromancer' || $class eq 'Shadowknight'))
{
$client->Message(4, "Nethergate Summoner tells you, As you wish $name");
quest::movepc(174,1773.2,1000.0,251.4,127.0);
quest::depop();
}
else
{
quest::shout("YOU ARE NOT WORTHY TO COMMAND ME $name!");
quest::selfcast(905);
quest::depop();
}
}
if($text =~ /Great Divide/i)
{
if(($class eq 'Necromancer' || $class eq 'Shadowknight'))
{
$client->Message(4, "Nethergate Summoner tells you, As you wish $name");
quest::movepc(118,902.2,-481.7,371.4,128.0);
quest::depop();
}
else
{
quest::shout("YOU ARE NOT WORTHY TO COMMAND ME $name!");
quest::selfcast(905);
quest::depop();
}
}
if($text =~ /dismiss/i)
{
if(($class eq 'Necromancer' || $class eq 'Shadowknight'))
{
$client->Message(4, "Nethergate Summoner tells you, As you wish $name");
quest::depop();
}
else
{
quest::shout("YOU ARE NOT WORTHY TO COMMAND ME $name!");
quest::selfcast(905);
quest::depop();
}
}
}


Using Shendare information on adding Scenery Object combined with S3DSpy by Windcatcher, I've extracted a few different obj's and created a custom_obj file that has bone towers in it along with a few other items like druid rings and the like. So I have added bone towers in other zones for this quest.

If you just want a quick fix, you can always just place the summon_deathgate triggers near undead area's instead. ATM I'm toying with the idea to have High level Necro's the ability to summon up their own Nethergate Summoners.... but thats for later down the road :)

Enjoy :)

ChaosSlayerZ
07-22-2009, 09:43 PM
I am pretty sure you can get away with just a single class check and depop message =)

put

if(($class eq 'Necromancer' || $class eq 'Shadowknight'))

right after

sub EVENT_SAY
{

and then check for player hails and text


here is my example of quest where npc FIRST check if she likes the player and only then allows the dialog choices



sub EVENT_SAY
{


if (($faction== 9) || ($faction < 6))

{



if($text=~/Hail/i)
{

quest::say("Hello, welcome to Longgrass Village");

}



}

else
{

quest::say("Umm, why have you come here? I don't like you, and I don't think my father will neither. Please
leave our village.");
}

}

Krugus
07-22-2009, 10:14 PM
Thanks for the info, still a newb learning this stuff :)