PDA

View Full Version : Question about making a quest.


ryder911
12-10-2004, 01:12 AM
Im new to perl just trying to learn, can anyone tell me if its possible to make a npc that zones players to the zone that they say. Like a translocator, but instead if you say lguk it ports you to lguk. Im not sure if there would be a way to take what the persn says and turn it into a variable, then put that variable into the zone command.

Cisyouc
12-10-2004, 01:51 AM
sub EVENT_SAY
{
if($text=~/hail/i)
{
quest::say("[Lguk]?");
}
if($text=~/lguk/i)
{
quest::movepc(zoneid,dest_x,dest_y,dest_z);
}
}
(You must change the parameters for movepc())

ryder911
12-10-2004, 03:10 AM
no, not like that. I mean like ike say theres a NPCcalled Zone Porter. You hail him, then he says, "Whatzone would you like to be ported to.?" And say you repsonde with katta, it ports you to katta, or you say veeshan, it ports you to veeshan, get what I'm saying. Instead of making it like a million if's for each zone, would there be a way to set it up with a variable?

Scorpx725
12-10-2004, 07:32 AM
Dont think so.

Cisyouc
12-10-2004, 08:39 AM
You could make a quest command that retrieves the zoneid and save coords and then implement it, like:
sub EVENT_SAY
{
$zoneid = quest::GetZoneID($text);
$zonex = quest::GetZoneX($zoneid);
$zoney = quest::GetZoneY($zoneid);
$zonez = quest::GetZoneZ($zoneid);
$client->MovePC($zoneid, $zonex, $zoney, $zonez);
}

However you'd have to write the C++ implementation for it (too busy to write it myself atm, if I have time and you havent written it though i might get to it)

Scorpx725
12-11-2004, 05:49 AM
If anything, FNW should put this into his quest system.

ryder911
12-11-2004, 06:14 AM
ok, well I dont no C++ so I guess ill just have to wait until someone gets too it. Thanks for your help guys=)

Dave987
12-11-2004, 03:54 PM
Would this work?

sub EVENT_SAY
{
if ($text =~ /hail/i){
quest::say("Greetings $name! Where can I take you to?");}

if($text != "acrylia" || "airplane" || "akanon" || "akheva" || "arena" || "bazaar" || "befallen" || "beholder" || "blackburrow" || "bothunder" || "burningwood" || "butcher" || "cabeast" || "cabwest" || "cauldron" || "cazicthule" || "charasis" || "chardok" || "citymist" || "cobaltscar" || "commons" || "crushbone" || "crystal" || "cshome" || "dalnir" || "dawnshroud" || "dreadlands" || "droga" || "eastkarana" || "eastwastes" || "echo" || "ecommons" || "emeraldjungle" || "erudnext" || "erudnint" || "erudsxing" || "everfrost" || "fearplane" || "feerrott" || "felwithea" || "felwitheb" || "fieldofbone" || "firiona" || "freporte" || "freportn" || "freportw" || "frontiermtns" || "frozenshadow" || "fungusgrove" || "gfaydark" || "greatdivide" || "griegsend" || "grimling" || "grobb" || "growthplane" || "gukbottom" || "guktop" || "halas" || "hateplane" || "highkeep" || "highpass" || "hohonora" || "hole" || "hollowshade" || "iceclad" || "innothule" || "kael" || "kaesora" || "kaladima" || "kaladimb" || "karnor" || "katta" || "kedge" || "kerraridge" || "kithicor" || "kurn" || "lakeofillomen" || "lakerathe" || "lavastorm" || "letalis" || "lfaydark" || "load" || "maiden" || "mischiefplane" || "mistmoore" || "misty" || "mseru" || "najena" || "necropolis" || "nektulos" || "neriaka" || "neriakb" || "neriakc" || "netherbian" || "nexus" || "northkarana" || "nurga" || "oasis" || "oggok" || "oot" || "overthere" || "paineel" || "paludal" || "paw" || "permafrost" || "powar" || "poearth" || "pofire" || "powater" || "poinnovation" || "podisease" || "pojustice" || "ponightmare" || "potranquility" || "potimea" || "potimeb" || "povalor" || "postorms" || "poknowledge" || "potorment" || "qcat" || "qey2hh1" || "qeynos" || "qeynos2" || "qeytoqrg" || "qrg" || "rathemtn" || "rivervale" || "runnyeye" || "scarlet" || "sebilis" || "shadeweaver" || "shadowhaven" || "sharvahl" || "sirens" || "skyfire" || "skyshrine" || "sleeper" || "soldunga" || "soldungb" || "solrotower" || "soltemple" || "southkarana" || "sro" || "sseru" || "ssratemple" || "steamfont" || "stonebrunt" || "swampofnohope" || "templeveeshan" || "tenebrous" || "thedeep" || "thegrey" || "thurgadina" || "thurgadinb" || "timorous" || "tox" || "trakanon" || "tutorial" || "twilight" || "umbral" || "unrest" || "veeshan" || "velketor" || "vexthal" || "wakening" || "warrens" || "warslikswood" || "westwastes" || arena2")
{
quest::say("Sorry $name, I do not recognise that zone.");}
else{
quest::movepc($text,0,0,0);
}

if($text=~ /!list/i){
quest::say(" acrylia , airplane , akanon , akheva , arena , bazaar , befallen , beholder , blackburrow , bothunder , burningwood , butcher , cabeast , cabwest , cauldron , cazicthule , charasis , chardok , citymist , cobaltscar , commons , crushbone , crystal , cshome , dalnir , dawnshroud , dreadlands , droga , eastkarana , eastwastes , echo , ecommons , emeraldjungle , erudnext , erudnint , erudsxing , everfrost , fearplane , feerrott , felwithea , felwitheb , fieldofbone , firiona , freporte , freportn , freportw , frontiermtns , frozenshadow , fungusgrove , gfaydark , greatdivide , griegsend , grimling , grobb , growthplane , gukbottom , guktop , halas , hateplane , highkeep , highpass , hohonora , hole , hollowshade , iceclad , innothule , kael , kaesora , kaladima , kaladimb , karnor , katta , kedge , kerraridge , kithicor , kurn , lakeofillomen , lakerathe , lavastorm , letalis , lfaydark , load , maiden , mischiefplane , mistmoore , misty , mseru , najena , necropolis , nektulos , neriaka , neriakb , neriakc , netherbian , nexus , northkarana , nurga , oasis , oggok , oot , overthere , paineel , paludal , paw , permafrost , powar , poearth , pofire , powater , poinnovation , podisease , pojustice , ponightmare , potranquility , potimea , potimeb , povalor , postorms , poknowledge , potorment , qcat , qey2hh1 , qeynos , qeynos2 , qeytoqrg , qrg , rathemtn , rivervale , runnyeye , scarlet , sebilis , shadeweaver , shadowhaven , sharvahl , sirens , skyfire , skyshrine , sleeper , soldunga , soldungb , solrotower , soltemple , southkarana , sro , sseru , ssratemple , steamfont , stonebrunt , swampofnohope , templeveeshan , tenebrous , thedeep , thegrey , thurgadina , thurgadinb , timorous , tox , trakanon , tutorial , twilight , umbral , unrest , veeshan , velketor , vexthal , wakening , warrens , warslikswood , westwastes , arena2");
}
}

## Coded by Scary. - Please do not remove this! ##



If not, you can just do what Cisc did, but do it for every single zone -- that WOULD work - I was just trying a shorter way ;)

Alternatively, you could give them the #zone command -- though a quest is customisable (eg. if $level > 20 && $text =~ /la/ etc. etc.)

Cisyouc
12-11-2004, 03:57 PM
First,
|| "westwastes" || ") Should be || "westwastes").

And Second, Its a great zonename parser but movepc() works by zoneid, not zone name :(

Dave987
12-11-2004, 03:59 PM
I knew there was a mistake somewhere :P

And if the $zoneid is said in the $text ( $text = $zoneid ) , it should work? If the $text isn't a $zoneid , then the NPC would say something different.

Cisyouc
12-11-2004, 04:03 PM
Yeah if i said
/say 202

theoretically.. sub EVENT_SAY
{
quest::movepc($text,0,0,0);
}will zone you to 0,0,0 of the zoneid you /say.

Dave987
12-11-2004, 04:05 PM
Which is why " if ($text !=) " any of the zone shortnames, the mob will respond with "Sorry $name, I do not recognise that zone." - ELSE, if it IS recognised, he will move you.

I'm not too sure , as I said in #perl just now, I'm rusty with my perl, I've not used || before , have been away for a while , so will take your word that it's wrong.

But if anybody tests it .... :P

animepimp
12-12-2004, 03:22 PM
Its wrong because movepc looks for a number to move them to. Giving it text will fail because it won't be a number.

Dave987
12-13-2004, 04:15 AM
In Visual Basic (yes, I know....) you are able to define things as things.
For example


Dim Akheva as String
Akheva = 1
Sub End


Is there something like this in PERL, allowing you to define something as something?
I would have thought it would be something like
sub EVENT_SAY{

"Akheva" = 1
etc. = etc.

if($text =~ /hail/i){
quest ..... etc. etc.}
}

Cisyouc
12-13-2004, 07:50 AM
I dont think so, because i dont think you can take the contents of one variable and look for another variable with the name of the text.

m0oni9
12-13-2004, 08:39 AM
Dim Akheva as String
Akheva = 1
Sub End

Is there something like this in PERL, allowing you to define something as something?
Sure, you could make a hash. This is a poor way to do it, though, since everything is already defined in the database. Cisyouc's original suggestion is probably preferable. After finals week I will see if I can't go back to coding for a week or two and adding some of these little things, unless FNW gets to them first.