EQEmulator Forums

EQEmulator Forums (https://www.eqemulator.org/forums/index.php)
-   Quests::Q&A (https://www.eqemulator.org/forums/forumdisplay.php?f=599)
-   -   Question about making a quest. (https://www.eqemulator.org/forums/showthread.php?t=17318)

ryder911 12-10-2004 01:12 AM

Question about making a quest.
 
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

Code:

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:
Code:

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?

Code:

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,
Code:

|| "westwastes" || ")
Should be
Code:

|| "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..
Code:

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

Code:

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

Quote:

Originally Posted by Dave987
Code:

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.


All times are GMT -4. The time now is 03:21 AM.

Powered by vBulletin®, Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.