Go Back   EQEmulator Home > EQEmulator Forums > Quests > Quests::Q&A

Quests::Q&A This is the quest support section

Reply
 
Thread Tools Display Modes
  #1  
Old 01-06-2009, 08:06 AM
trevius's Avatar
trevius
Developer
 
Join Date: Aug 2006
Location: USA
Posts: 5,946
Default

Something like this should work. If it doesn't, lemme know.
Code:
my $max_hps = $npc->GetMaxHP();
my $set_hps = ($max_hps * 0.85);
$npc->SetHP($set_hps);
__________________
Trevazar/Trevius Owner of: Storm Haven
Everquest Emulator FAQ (Frequently Asked Questions) - Read It!
Reply With Quote
  #2  
Old 01-06-2009, 01:39 PM
Joetuul
Sarnak
 
Join Date: Oct 2008
Location: AZ
Posts: 58
Default Trev, you are awesome.

Ya that worked perfectly. Thanks a ton for the help. Ill post the full script here, and in the custom quests for all who would like it have it.

This is how it works. Give the furious sentry an item. This spawns Yar`lir's first form and sets the qglobal.

at 85% health the this will depop the first form and choose another 1 of 4 forms of the same mob randomly, then 5% health lower (80% health) adds will spawn based off of which form was previously chosen.

This will repeat at 70/65%, then at 55/50%, then 40/35%, then 25/20% and finally at 10/9%. upon death adds will despawn and a chest will appear with loot inside.

I tested this script 3 times all with different amounts of HP of the main mobs, just to make sure it worked.

I have trevius to thank for help on completing the script. Thanks alot!!

Code:
#Furious Sentry
sub EVENT_SAY
{
  if($text =~/Hail/i)
  {
  quest::say ("?"); #can make this say what ever you want.
  }
}

sub EVENT_ITEM
{
  if  (plugin::check_handin(\%itemcount, 57206 => 1))
    {
    quest::say("Yar = 1");
    quest::delglobal("yar");
    quest::setglobal("yar", 1, 3, "F");
    quest::spawn2(999483, 0, 0, -3491, 3142, 302, 58);
    }
}


Code:
#Yar`lir encounter


sub EVENT_SPAWN
{

	if(defined($qglobals{yar})){    #spawn at lower % of health

                if ($qglobals{yar} == 1)
                        {
                        quest::shout ("RAWR 1");
                        }

                elsif ($qglobals{yar} == 2)
                        {
                        my $max_hps = $npc->GetMaxHP();
			my $set_hps = ($max_hps * 0.85);
			$npc->SetHP($set_hps);
                        }

                elsif ($qglobals{yar} == 3)
                        {
                        my $max_hps = $npc->GetMaxHP();
			my $set_hps = ($max_hps * 0.70);
			$npc->SetHP($set_hps);                        }

                elsif ($qglobals{yar} == 4)
                        {
                        my $max_hps = $npc->GetMaxHP();
			my $set_hps = ($max_hps * 0.55);
			$npc->SetHP($set_hps);                        }

                elsif ($qglobals{yar} == 5)
                        {
                        my $max_hps = $npc->GetMaxHP();
			my $set_hps = ($max_hps * 0.40);
			$npc->SetHP($set_hps);                        }

                elsif ($qglobals{yar} == 6)
                        {
                        my $max_hps = $npc->GetMaxHP();
			my $set_hps = ($max_hps * 0.25);
			$npc->SetHP($set_hps);                        }

                elsif ($qglobals{yar} == 7)
                        {
                        my $max_hps = $npc->GetMaxHP();
			my $set_hps = ($max_hps * 0.10);
			$npc->SetHP($set_hps);
                        }
               }
}

sub EVENT_COMBAT
{

if($combat_state == 1)
 {
        if(defined($qglobals{yar})){

                if ($qglobals{yar} == 1)
                        {
                        quest::setnexthpevent(85);
			}
                elsif ($qglobals{yar} == 2)
                        {
                        quest::setnexthpevent(80);
                        }
                elsif ($qglobals{yar} == 3)
                        {
                        quest::setnexthpevent(65);
                        }
                elsif ($qglobals{yar} == 4)
                        {
                        quest::setnexthpevent(50);
                        }
                elsif ($qglobals{yar} == 5)
                        {
                        quest::setnexthpevent(35);
                        }
                elsif ($qglobals{yar} == 6)
                        {
                        quest::setnexthpevent(20);
                        }
                elsif ($qglobals{yar} == 7)
                        {
                        quest::setnexthpevent(9);
                        }
               }
 }

if($combat_state == 0)       #depop adds if all players die
 {
quest::signalwith(999488, 2, 0);
quest::signalwith(999489, 2, 0);
quest::signalwith(999021, 2, 0);
 }

}


sub EVENT_HP
{
if($hpevent == 85)     # change form randomly
    {

    my $x;
    my $y;
    my $z;
    my $h;
    my $a = int(rand(4)+1);
    if ($a == 1) {        #matriarch
    quest::spawn2(1242,0,0,-3491,3142,302,58);
    quest::delglobal("yaradds");
    quest::setglobal("yaradds", 1, 3, "F");
    }

    elsif ($a == 2) {       #winds
    quest::spawn2(1244,0,0,-3491,3142,302,58);
    quest::delglobal("yaradds");
    quest::setglobal("yaradds", 2, 3, "F");
    }

    elsif ($a == 3) {        #hurricane
    quest::spawn2(1245,0,0,-3491,3142,302,58);
    quest::delglobal("yaradds");
    quest::setglobal("yaradds", 3, 3, "F");
    }

    elsif ($a == 4) {      #storm   NO ADDS
    quest::spawn2(999483,0,0,-3491,3142,302,58);
    quest::delglobal("yaradds");
    quest::setglobal("yaradds", 4, 3, "F");
    }
    quest::delglobal("yar");
    quest::setglobal("yar", 2, 3, "F");
    quest::depop();
    }

elsif($hpevent == 80)   #spawn adds
    {
    quest::setnexthpevent(70);
        if(defined($qglobals{yaradds})){

                if ($qglobals{yaradds} == 1)     # Drake Adds
                        {
                        quest::spawn2(999021,0,0,-3467,3197,302,77);
                        quest::spawn2(999021,0,0,-3500,3198,302,116);
                        quest::spawn2(999021,0,0,-3537,3158,302,74);
                        quest::spawn2(999021,0,0,-3539,3128,302,56);
                        quest::spawn2(999021,0,0,-3502,3091,302,10);
                        quest::spawn2(999021,0,0,-3470,3090,302,50);
			}
                elsif ($qglobals{yaradds} == 2)  # Wind Dervish Adds
                        {
                        quest::spawn2(999488,0,0,-3484,3089,302,0);
                        quest::spawn2(999488,0,0,-3484,3198,302,129);
                        }
                elsif ($qglobals{yaradds} == 3)  # Water Dervish Adds
                        {
                        quest::spawn2(999489,0,0,-3484,3089,302,0);
                        quest::spawn2(999489,0,0,-3484,3198,302,129);
                        quest::spawn2(999489,0,0,-3541,3145,302,65);
                        quest::spawn2(999489,0,0,-3427,3144,302,192);
                        }
                }
    }

elsif($hpevent == 70)    #change form randomly
     {

    my $x;
    my $y;
    my $z;
    my $h;
    my $a = int(rand(4)+1);
    if ($a == 1) {        #matriarch
    quest::spawn2(1242,0,0,-3491,3142,302,58);
    quest::delglobal("yaradds");
    quest::setglobal("yaradds", 1, 3, "F");
    }

    elsif ($a == 2) {       #winds
    quest::spawn2(1244,0,0,-3491,3142,302,58);
    quest::delglobal("yaradds");
    quest::setglobal("yaradds", 2, 3, "F");
    }

    elsif ($a == 3) {        #hurricane
    quest::spawn2(1245,0,0,-3491,3142,302,58);
    quest::delglobal("yaradds");
    quest::setglobal("yaradds", 3, 3, "F");
    }

    elsif ($a == 4) {      #storm   NO ADDS
    quest::spawn2(999483,0,0,-3491,3142,302,58);
    quest::delglobal("yaradds");
    quest::setglobal("yaradds", 4, 3, "F");
    }
    quest::delglobal("yar");
    quest::setglobal("yar", 3, 3, "F");
    quest::depop();
    }

elsif($hpevent == 65)           #spawn adds
    {
    quest::setnexthpevent(55);
        if(defined($qglobals{yaradds})){

                if ($qglobals{yaradds} == 1)     # Drake Adds
                        {
                        quest::spawn2(999021,0,0,-3467,3197,302,77);
                        quest::spawn2(999021,0,0,-3500,3198,302,116);
                        quest::spawn2(999021,0,0,-3537,3158,302,74);
                        quest::spawn2(999021,0,0,-3539,3128,302,56);
                        quest::spawn2(999021,0,0,-3502,3091,302,10);
                        quest::spawn2(999021,0,0,-3470,3090,302,50);
			}
                elsif ($qglobals{yaradds} == 2)  # Wind Dervish Adds
                        {
                        quest::spawn2(999488,0,0,-3484,3089,302,0);
                        quest::spawn2(999488,0,0,-3484,3198,302,129);
                        }
                elsif ($qglobals{yaradds} == 3)  # Water Dervish Adds
                        {
                        quest::spawn2(999489,0,0,-3484,3089,302,0);
                        quest::spawn2(999489,0,0,-3484,3198,302,129);
                        quest::spawn2(999489,0,0,-3541,3145,302,65);
                        quest::spawn2(999489,0,0,-3427,3144,302,192);
                        }
                }
    }

elsif($hpevent == 55)   #change form randomly
    {

    my $x;
    my $y;
    my $z;
    my $h;
    my $a = int(rand(4)+1);
    if ($a == 1) {        #matriarch
    quest::spawn2(1242,0,0,-3491,3142,302,58);
    quest::delglobal("yaradds");
    quest::setglobal("yaradds", 1, 3, "F");
    }

    elsif ($a == 2) {       #winds
    quest::spawn2(1244,0,0,-3491,3142,302,58);
    quest::delglobal("yaradds");
    quest::setglobal("yaradds", 2, 3, "F");
    }

    elsif ($a == 3) {        #hurricane
    quest::spawn2(1245,0,0,-3491,3142,302,58);
    quest::delglobal("yaradds");
    quest::setglobal("yaradds", 3, 3, "F");
    }

    elsif ($a == 4) {      #storm   NO ADDS
    quest::spawn2(999483,0,0,-3491,3142,302,58);
    quest::delglobal("yaradds");
    quest::setglobal("yaradds", 4, 3, "F");
    }
    quest::delglobal("yar");
    quest::setglobal("yar", 4, 3, "F");
    quest::depop();
    }

elsif($hpevent == 50)     #spawn adds
    {
    quest::setnexthpevent(40);
        if(defined($qglobals{yaradds})){

                if ($qglobals{yaradds} == 1)     # Drake Adds
                        {
                        quest::spawn2(999021,0,0,-3467,3197,302,77);
                        quest::spawn2(999021,0,0,-3500,3198,302,116);
                        quest::spawn2(999021,0,0,-3537,3158,302,74);
                        quest::spawn2(999021,0,0,-3539,3128,302,56);
                        quest::spawn2(999021,0,0,-3502,3091,302,10);
                        quest::spawn2(999021,0,0,-3470,3090,302,50);
			}
                elsif ($qglobals{yaradds} == 2)  # Wind Dervish Adds
                        {
                        quest::spawn2(999488,0,0,-3484,3089,302,0);
                        quest::spawn2(999488,0,0,-3484,3198,302,129);
                        }
                elsif ($qglobals{yaradds} == 3)  # Water Dervish Adds
                        {
                        quest::spawn2(999489,0,0,-3484,3089,302,0);
                        quest::spawn2(999489,0,0,-3484,3198,302,129);
                        quest::spawn2(999489,0,0,-3541,3145,302,65);
                        quest::spawn2(999489,0,0,-3427,3144,302,192);
                        }
                }
    }

elsif($hpevent == 40)      #change form randomly
    {

    my $x;
    my $y;
    my $z;
    my $h;
    my $a = int(rand(4)+1);
    if ($a == 1) {        #matriarch
    quest::spawn2(1242,0,0,-3491,3142,302,58);
    quest::delglobal("yaradds");
    quest::setglobal("yaradds", 1, 3, "F");
    }

    elsif ($a == 2) {       #winds
    quest::spawn2(1244,0,0,-3491,3142,302,58);
    quest::delglobal("yaradds");
    quest::setglobal("yaradds", 2, 3, "F");
    }

    elsif ($a == 3) {        #hurricane
    quest::spawn2(1245,0,0,-3491,3142,302,58);
    quest::delglobal("yaradds");
    quest::setglobal("yaradds", 3, 3, "F");
    }

    elsif ($a == 4) {      #storm   NO ADDS
    quest::spawn2(999483,0,0,-3491,3142,302,58);
    quest::delglobal("yaradds");
    quest::setglobal("yaradds", 4, 3, "F");
    }
    quest::delglobal("yar");
    quest::setglobal("yar", 5, 3, "F");
    quest::depop();
    }

elsif($hpevent == 35)        #spawn adds
    {
    quest::setnexthpevent(25);
        if(defined($qglobals{yaradds})){

                if ($qglobals{yaradds} == 1)     # Drake Adds
                        {
                        quest::spawn2(999021,0,0,-3467,3197,302,77);
                        quest::spawn2(999021,0,0,-3500,3198,302,116);
                        quest::spawn2(999021,0,0,-3537,3158,302,74);
                        quest::spawn2(999021,0,0,-3539,3128,302,56);
                        quest::spawn2(999021,0,0,-3502,3091,302,10);
                        quest::spawn2(999021,0,0,-3470,3090,302,50);
			}
                elsif ($qglobals{yaradds} == 2)  # Wind Dervish Adds
                        {
                        quest::spawn2(999488,0,0,-3484,3089,302,0);
                        quest::spawn2(999488,0,0,-3484,3198,302,129);
                        }
                elsif ($qglobals{yaradds} == 3)  # Water Dervish Adds
                        {
                        quest::spawn2(999489,0,0,-3484,3089,302,0);
                        quest::spawn2(999489,0,0,-3484,3198,302,129);
                        quest::spawn2(999489,0,0,-3541,3145,302,65);
                        quest::spawn2(999489,0,0,-3427,3144,302,192);
                        }
                }
    }

elsif($hpevent == 25)       #change form randomly
    {

    my $x;
    my $y;
    my $z;
    my $h;
    my $a = int(rand(4)+1);
    if ($a == 1) {        #matriarch
    quest::spawn2(1242,0,0,-3491,3142,302,58);
    quest::delglobal("yaradds");
    quest::setglobal("yaradds", 1, 3, "F");
    }

    elsif ($a == 2) {       #winds
    quest::spawn2(1244,0,0,-3491,3142,302,58);
    quest::delglobal("yaradds");
    quest::setglobal("yaradds", 2, 3, "F");
    }

    elsif ($a == 3) {        #hurricane
    quest::spawn2(1245,0,0,-3491,3142,302,58);
    quest::delglobal("yaradds");
    quest::setglobal("yaradds", 3, 3, "F");
    }

    elsif ($a == 4) {      #storm   NO ADDS
    quest::spawn2(999483,0,0,-3491,3142,302,58);
    quest::delglobal("yaradds");
    quest::setglobal("yaradds", 4, 3, "F");
    }
    quest::delglobal("yar");
    quest::setglobal("yar", 6, 3, "F");
    quest::depop();
    }

elsif($hpevent == 20)  #spawn adds
    {
    quest::setnexthpevent(10);
        if(defined($qglobals{yaradds})){

                if ($qglobals{yaradds} == 1)     # Drake Adds
                        {
                        quest::spawn2(999021,0,0,-3467,3197,302,77);
                        quest::spawn2(999021,0,0,-3500,3198,302,116);
                        quest::spawn2(999021,0,0,-3537,3158,302,74);
                        quest::spawn2(999021,0,0,-3539,3128,302,56);
                        quest::spawn2(999021,0,0,-3502,3091,302,10);
                        quest::spawn2(999021,0,0,-3470,3090,302,50);
			}
                elsif ($qglobals{yaradds} == 2)  # Wind Dervish Adds
                        {
                        quest::spawn2(999488,0,0,-3484,3089,302,0);
                        quest::spawn2(999488,0,0,-3484,3198,302,129);
                        }
                elsif ($qglobals{yaradds} == 3)  # Water Dervish Adds
                        {
                        quest::spawn2(999489,0,0,-3484,3089,302,0);
                        quest::spawn2(999489,0,0,-3484,3198,302,129);
                        quest::spawn2(999489,0,0,-3541,3145,302,65);
                        quest::spawn2(999489,0,0,-3427,3144,302,192);
                        }
                }
    }

elsif($hpevent == 10)   #change form randomly
    {

    my $x;
    my $y;
    my $z;
    my $h;
    my $a = int(rand(4)+1);
    if ($a == 1) {        #matriarch
    quest::spawn2(1242,0,0,-3491,3142,302,58);
    quest::delglobal("yaradds");
    quest::setglobal("yaradds", 1, 3, "F");
    }

    elsif ($a == 2) {       #winds
    quest::spawn2(1244,0,0,-3491,3142,302,58);
    quest::delglobal("yaradds");
    quest::setglobal("yaradds", 2, 3, "F");
    }

    elsif ($a == 3) {        #hurricane
    quest::spawn2(1245,0,0,-3491,3142,302,58);
    quest::delglobal("yaradds");
    quest::setglobal("yaradds", 3, 3, "F");
    }

    elsif ($a == 4) {      #storm   NO ADDS
    quest::spawn2(999483,0,0,-3491,3142,302,58);
    quest::delglobal("yaradds");
    quest::setglobal("yaradds", 4, 3, "F");
    }
    quest::delglobal("yar");
    quest::setglobal("yar", 7, 3, "F");
    quest::depop();
    }

elsif($hpevent == 9)   #spawn adds
    {
        if(defined($qglobals{yaradds})){

                if ($qglobals{yaradds} == 1)     # Drake Adds
                        {
                        quest::spawn2(999021,0,0,-3467,3197,302,77);
                        quest::spawn2(999021,0,0,-3500,3198,302,116);
                        quest::spawn2(999021,0,0,-3537,3158,302,74);
                        quest::spawn2(999021,0,0,-3539,3128,302,56);
                        quest::spawn2(999021,0,0,-3502,3091,302,10);
                        quest::spawn2(999021,0,0,-3470,3090,302,50);
			}
                elsif ($qglobals{yaradds} == 2)  # Wind Dervish Adds
                        {
                        quest::spawn2(999488,0,0,-3484,3089,302,0);
                        quest::spawn2(999488,0,0,-3484,3198,302,129);
                        }
                elsif ($qglobals{yaradds} == 3)  # Water Dervish Adds
                        {
                        quest::spawn2(999489,0,0,-3484,3089,302,0);
                        quest::spawn2(999489,0,0,-3484,3198,302,129);
                        quest::spawn2(999489,0,0,-3541,3145,302,65);
                        quest::spawn2(999489,0,0,-3427,3144,302,192);
                        }
                }
    }

}

sub EVENT_DEATH       #depop adds and spawn chest with loot
{
quest::delglobal("yar");
quest::signalwith(999488, 1, 0);
quest::signalwith(999489, 1, 0);
quest::signalwith(999021, 1, 0);
quest::spawn2(999480,0,0,$x-20,$y+20,$z+10,$h);
}
__________________
~Tuul
Mithaniel Marr
http://mithmarr.power-rpg.com/
Reply With Quote
  #3  
Old 01-06-2009, 05:24 PM
trevius's Avatar
trevius
Developer
 
Join Date: Aug 2006
Location: USA
Posts: 5,946
Default

Unless you needed to respawn the quest mob through the fight as part of the effect, you probably could have saved yourself some time by using some of the new quest commands that let you adjust an NPC in almost any way you could want. Using quest::modifynpcstat(), you can adjust almost any NPC stat, which means very dynamic events are possible from a single boss that doesn't have to repop to change forms. You can also use quest::npcrace/gender/size/texture() to modify the looks to any look you want. The only thing I think that can't be changed on the fly now that is important is the name of the NPC.

Here is the wiki explaining those commands. You may already know about this, but if not, it is very helpful and more current than any of the other stuff like the Lexicon or the sticky post in the quest sections:

http://www.eqemulator.net/wiki/wikka...=QuestTutorial

BTW, your script looks like fun. We have a couple similar ones on Storm Haven. Some of them are pretty complex.
__________________
Trevazar/Trevius Owner of: Storm Haven
Everquest Emulator FAQ (Frequently Asked Questions) - Read It!
Reply With Quote
  #4  
Old 01-06-2009, 07:41 PM
Joetuul
Sarnak
 
Join Date: Oct 2008
Location: AZ
Posts: 58
Default

I figured the name couldn't be changed, so thats why I did it the way I did, I have 4 mobs, they all have a different name and spells, but they all look the same, just with a different surname title.

I already looked over quest tutorial page, that's why I posted about the $mob->HP thing, just couldn't get it working right.

I hope my players like the encounter, been working on it for a few days now, the only snag is what you helped me fix. that was a wonderful thing you showed me, I will prolly end up using that again, just in a different manner. Im still pretty new at using perl. I learned HTML and Javascript about 8 years ago, I use it every know and than, but nothing major.

Thanks again. I really appreciated your help.
__________________
~Tuul
Mithaniel Marr
http://mithmarr.power-rpg.com/
Reply With Quote
  #5  
Old 01-06-2009, 10:24 PM
Neiv
Hill Giant
 
Join Date: May 2008
Location: Colorado
Posts: 238
Default

Quote:
you probably could have saved yourself some time by using some of the new quest commands that let you adjust an NPC in almost any way you could want
Question on this: Do these new commands automatically work, or do I need to download a new build of perl? The reason I ask is because I tried the quest::we("Text") function and it does not work for me.
Reply With Quote
Reply

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump

   

All times are GMT -4. The time now is 07:06 PM.


 

Everquest is a registered trademark of Daybreak Game Company LLC.
EQEmulator is not associated or affiliated in any way with Daybreak Game Company LLC.
Except where otherwise noted, this site is licensed under a Creative Commons License.
       
Powered by vBulletin®, Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Template by Bluepearl Design and vBulletin Templates - Ver3.3