EQEmulator Forums

EQEmulator Forums (https://www.eqemulator.org/forums/index.php)
-   Quests::Q&A (https://www.eqemulator.org/forums/forumdisplay.php?f=599)
-   -   Q&A Thread (https://www.eqemulator.org/forums/showthread.php?t=41932)

Almusious 09-09-2018 03:24 PM

Quote:

Originally Posted by Huppy (Post 260074)
Hey Almusious, I just got around to testing this out, this morning. I couldn't get any response out of the NPC with it.

The initial hail>follow script will serve it's purpose, but thinking ahead, would open up an exploit with conflicting players.

Could end up with 2 players (or more) spamming the npc with "Hail's" to steal it away. Would be funny to watch, lol

The code is all fubared, wasn't paying much attention, for that I'm sorry. $entity should be just that, so $npc or $client, I would probably put the entity variable on the $npc, since it's getting depoped. Speaking of which that is off too, quest::depop($npc->GetNPCTypeID()) is how that line should be, according to the wiki.

Heck those conditionals look off as well, mustve been the ambien, sorry.

Almusious 09-09-2018 03:26 PM

Quote:

Originally Posted by Huppy (Post 260086)
I almost forgot about another question I had regarding this follow thing and wondering if an idea I had was possible.

For example, NPC starts following player, but then the player is moving too fast, creating a big distance between them.

Is there a way to set an "sfollow" when a certain distance happens ? Like if the player gets too far away, the NPC quits ?

I didn't immediately see a means to sever a follow. Is why either depop'ing it or maybe repopping with timer. Now without setting a "master" (owner), it could be a bit of an NPC hot potato type of quest heh.

Huppy 09-09-2018 03:43 PM

Thanks for your reply. Just to clarify what I have in mind, the NPC won't be depopping. Upon the destination, it will be killed by another NPC, lol.

I've already been testing that with with an EVENT_ENTER, on arrival, an NPC immediately attacks the following one. Works great so far.

I also added in an if(plugin::check_hasitem(xxxx)) to the quest::follow which also worked out good.

Almusious 09-09-2018 03:47 PM

Quote:

Originally Posted by Huppy (Post 260086)
I almost forgot about another question I had regarding this follow thing and wondering if an idea I had was possible.

For example, NPC starts following player, but then the player is moving too fast, creating a big distance between them.

Is there a way to set an "sfollow" when a certain distance happens ? Like if the player gets too far away, the NPC quits ?

You could set a timer when you initiate the follow, then use an event timer like:

Code:

sub EVENT_TIMER
{
        if ($npc->CalculateDistance($entity_list->GetClientByCharID($npc->GetEntityVariable("master"))->GetX(),
                                                                $entity_list->GetClientByCharID($npc->GetEntityVariable("master"))->GetY(),
                                                                $entity_list->GetClientByCharID($npc->GetEntityVariable("master"))->GetZ()) > 20)
        {
                quest::sfollow();
        }
}

This assumes you replaced $entity in the code earlier posted with $npc.

Huppy 09-09-2018 04:05 PM

Quote:

Originally Posted by Almusious (Post 260092)
You could set a timer when you initiate the follow, then use an event timer like:

That could be something that may help with my intentions here. You see, I am looking at a possible exploit with the follow event.

A player could end up using /warp and then wait for the NPC to arrive. That's why I thought a distance limit would help with that.

JimB_1958 10-26-2018 11:40 AM

Weird thing:

I want to fire an event in player.pl when the player takes damage from a mob.

Kind of like damage shields work.

I would prefer to get the id of the mob that did the damage, but that is not 100% needed.

Thank you for any assistance.

Secrets 10-26-2018 12:15 PM

Quote:

Originally Posted by JimB_1958 (Post 260590)
Weird thing:

I want to fire an event in player.pl when the player takes damage from a mob.

Kind of like damage shields work.

I would prefer to get the id of the mob that did the damage, but that is not 100% needed.

Thank you for any assistance.

If you're doing that, do it in LUA. There are serious performance indications to doing this.

superpally1 10-29-2018 09:50 AM

Hey guys, I've got a quick question to. I have searched and been unsuccessful in finding a way to do this. Is there a way to script a say link into guild chat and/or raid chat? I think I can do group chat with message group but I can not find a function for guild/raid. I've been working on an instancing script and I want to be able to send the say link to enter the instances to group,guild, and raid chat. Message 258 for example says group but it doesn't actually say it in group for the other group members.

Kingly_Krab 10-29-2018 10:00 AM

Code:

quest::gmsay(message, color_id, send_to_world?, guild_id, min_status);

superpally1 10-29-2018 10:18 AM

Quote:

Originally Posted by Kingly_Krab (Post 260608)
Code:

quest::gmsay(message, color_id, send_to_world?, guild_id, min_status);

I didn't think about that. Thank you. I can see how to use this in guild chat now but how could I use it with raid chat?

Kingly_Krab 10-29-2018 12:08 PM

You can use a loop and iterate through group members if necessary. I’m at work, otherwise I’d give you an example.

superpally1 10-29-2018 06:32 PM

gotcha, thankyou sir.

Ydiss 01-15-2019 02:04 PM

Hey, I think this is my fourth post here. Been a member since 2009 hah.

I've started developing for THF recently and have been enjoying it loads. I'm just hitting a brick wall with this one particular (apparently non-existent) function.

I'm attempting to get the NPC's hp_regen value (I know I can modify it easily enough) but can't find the command for this anywhere on the ultimate perl reference (or anywhere else).

I checked the perl source and searched for "hp" but couldn't find it. It seems this is also the case for mana_regen, though I don't currently need that.

I want to make changes to npc regen but without a way to read/get the current value, that severely limits my ability to do anything clever with it (i.e. I can pretty much just hard code it).

What I want to do is reduce the hp_regen when players do something. Without the ability to read what it is currently, I imagine I'd need to use qglobals to track each npc's status (from spawn) and then hard code a sequence of conditions for it and that's just horrid.

I'd rather not do that. It seems literally every other editable stat for NPCs can be read except regen :) Am I missing something?

Any help would be amazing. Thanks.

Almusious 01-15-2019 02:54 PM

Code:

https://github.com/EQEmu/Server/blob/0ad43977bf94e3a2ca83966f7fc9ba5592bb2a54/zone/npc.cpp#L2307
Code:

quest::modifynpcstat("hp_regen",xxx);
or

Code:

$npc->ModifyNPCStat("hp_regen",xxx);
Sorry, I just re-read what you had written. You wish to know how to "get". I too cannot find something in place for that, but:

Code:

sub PrepareEntityVariables
{
        my @zone_npcs = $entity_list->GetNPCList();
        my $dbh = plugin::LoadMysql();
        foreach $individual_npc (@zone_npcs)
        {
                if (not $individual_npc->GetEntityVariable("regenset"))
                {
                        my $sth = $dbh->prepare("
                                                                        SELECT `hp_regen_rate`, `mana_regen_rate`
                                                                        FROM npc_types
                                                                        WHERE (`id` = ?) LIMIT 1
                                                                        ");
                        $sth->bind_param(1,$individual_npc->GetNPCType());
                        $sth->execute();
                        @row = $sth->fetchrow_array();
                        $individual_npc->SetEntityVariable("hpregen", $row[0]);
                        $individual_npc->SetEntityVariable("manaregen", $row[1]);
                        $individual_npc->SetEntityVariable("regenset",1);
                }
        }
}

Try the above, it may have a syntax error or two, I'm not in a position to compile it, but should give you an idea just the same. The reason for actually setting an entity variable of "regenset" is in the case of either hpregen or manaregen equaling zero (legitimately).

Ydiss 01-15-2019 07:28 PM

Quote:

Originally Posted by Almusious (Post 261302)
Code:

https://github.com/EQEmu/Server/blob/0ad43977bf94e3a2ca83966f7fc9ba5592bb2a54/zone/npc.cpp#L2307
Code:

quest::modifynpcstat("hp_regen",xxx);
or

Code:

$npc->ModifyNPCStat("hp_regen",xxx);
Sorry, I just re-read what you had written. You wish to know how to "get". I too cannot find something in place for that, but:

Code:

sub PrepareEntityVariables
{
        my @zone_npcs = $entity_list->GetNPCList();
        my $dbh = plugin::LoadMysql();
        foreach $individual_npc (@zone_npcs)
        {
                if (not $individual_npc->GetEntityVariable("regenset"))
                {
                        my $sth = $dbh->prepare("
                                                                        SELECT `hp_regen_rate`, `mana_regen_rate`
                                                                        FROM npc_types
                                                                        WHERE (`id` = ?) LIMIT 1
                                                                        ");
                        $sth->bind_param(1,$individual_npc->GetNPCType());
                        $sth->execute();
                        @row = $sth->fetchrow_array();
                        $individual_npc->SetEntityVariable("hpregen", $row[0]);
                        $individual_npc->SetEntityVariable("manaregen", $row[1]);
                        $individual_npc->SetEntityVariable("regenset",1);
                }
        }
}

Try the above, it may have a syntax error or two, I'm not in a position to compile it, but should give you an idea just the same. The reason for actually setting an entity variable of "regenset" is in the case of either hpregen or manaregen equaling zero (legitimately).

Thanks, that's really helpful. Yes, I'd need to check for zero anyway.

Will see if I can get it to work.


All times are GMT -4. The time now is 05:50 PM.

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