EQEmulator Forums

EQEmulator Forums (https://www.eqemulator.org/forums/index.php)
-   Archive::Quests (https://www.eqemulator.org/forums/forumdisplay.php?f=624)
-   -   EVENT_HP (https://www.eqemulator.org/forums/showthread.php?t=12807)

sandy 04-02-2004 10:05 PM

EVENT_HP
 
Here's an example on how you can use it :

Code:

sub EVENT_SPAWN
{
  quest::setnexthpevent(80);
}

sub EVENT_HP
{
  if ( $hpevent == 80 ) {
  quest::say("I have $hpratio % HP!");
  quest::setnexthpevent(45);
  }
  if ( $hpevent == 45 ) {
  quest::say("I have $hpratio % HP!");
  }
}

you have at first to initialize the hp event in an EVENT_SPAWN fonction

setnexthpevent(hp) is a command to fix at which hp ratio of the npc the next HP_EVENT will be triggered, in the example it is 80%

and there is 2 variables : $hpevent and $hpratio

$hpevent identifies the event

to implement this you have to change all this :

in mob.h : in the class Mob, just before the protected word : ~line 623 :
Code:

        // HP Event
        inline int& GetNextHPEvent() { return nexthpevent; }
        void SetNextHPEvent( int hpevent );

and in mob.h again : in the class Mob, after the protected word where you want :
Code:

        // HP Event
        int nexthpevent;

in mob.cpp now :
in the constructor :
~line 320
add this before the end '}' :
Code:

        //HP Event
        nexthpevent = 0;

in mob.cpp again :
in the function : void Mob::CreateHPPacket(APPLAYER* app, bool sendself)
where you see :
Quote:

// they don't need to know the real hp
ds->cur_hp = (int)GetHPRatio();
ds->max_hp = 100;
add this in the else : after line "ds->max_hp=100;" for example
Quote:

// hp event
if ( IsNPC() && ( GetNextHPEvent() > 0 ) ) {
if ( ds->cur_hp < GetNextHPEvent() ) {
int lasthpevent = GetNextHPEvent();
parse->Event(EVENT_HP, GetNPCTypeID(), 0, this, 0);
if ( lasthpevent == GetNextHPEvent() )
SetNextHPEvent(0);
}
}
in mob.cpp again :
at the end of the file add this :
Quote:

// HP Event
void Mob::SetNextHPEvent( int hpevent ) {
nexthpevent = hpevent;
if ( nexthpevent < 0 ) {
nexthpevent = 0;
}
}
now in parser.cpp :
at the end of the function :
void Parser::ExCommands(string command, string parms, int argnums, int32 npcid, Mob* other, Mob* mob )
~ line 1257 after :
Code:

                        else if (!strcmp(strlwr(command),"rebind")) {
                                if(mob->IsClient()){
                                        if (mob) mob->CastToClient()->SetBindPoint( atoi(arglist[0]), atof(arglist[1]), atof(arglist[2]), atof(arglist[3]));
                                }
                        }

add this :
Code:

                        // HP Event
                        else if (!strcmp(strlwr(command),"setnexthpevent")) {
                                if (other) other->SetNextHPEvent( atoi(arglist[0]) );
                        }

that's not finished =)

now in embparser.cpp :
in the function : void PerlembParser::Event(int event, int32 npcid, const char * data, Mob* npcmob, Mob* mob)
~ line 271 after the case EVENT_SIGNAL for example :
add this :
Code:

// HP_Event
                case EVENT_HP: {
                        if (npcmob) {
                                ExportVar(packagename.c_str(), "hpevent", itoa(npcmob->GetNextHPEvent()));
                                ExportVar(packagename.c_str(), "hpratio", itoa(npcmob->GetHPRatio()));
                                SendCommands(packagename.c_str(), "EVENT_HP", npcid, npcmob, mob);
                        }
                        break;
                }

in embarser.cpp again :
in function : void PerlembParser::map_funs(void) const
add this after scop2k global commands ~line 440:
Code:

// HP Event
"sub setnexthpevent{push(@cmd_queue,{func=>'setnexthpevent',args=>join(',',@_)});}"

and finally in event_codes.h :
add this at the end :
Quote:

#define EVENT_HP 10

sandy 04-03-2004 10:06 AM

forgot the initialisation in mob.cpp ' s constructor line 318
nexthpevent = 0;

Shadow-Wolf 04-03-2004 11:22 AM

looks to be correct, id do it but ive been having some problems with my compiler. could you maybe send me binaries with your functions enabled?

sandy 04-22-2004 09:44 PM

did someone try it ???

Cripp 04-30-2004 08:30 AM

ill try it as soon as i get my world codes the way i want them hehehe. for some reason im getting that item bug and im at still running 5.6 :(

t7x53 05-20-2004 08:26 AM

I know the post is almost a month old but has it been added to any of the more recent source releases?

sandy 05-21-2004 07:04 AM

not added =)

t7x53 05-21-2004 05:47 PM

I tested this and the events themselves seem to work fine, but if I use a quest::spawn() inside any of the events I get a casttoclient mob error maybe 15 times at which point the zone crashes. Any ideas if I'm doing something wrong or if it's the code? I can still use quest::spawn outside of the Hp events and it works.

sandy 05-24-2004 01:50 AM

no idea, for me it is working

only bug i have is when I give a spawn event script to a monster that i spawned with quest::spawn


All times are GMT -4. The time now is 11:12 PM.

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