|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Quests::Q&A This is the quest support section |
09-09-2018, 03:24 PM
|
Fire Beetle
|
|
Join Date: Sep 2012
Posts: 25
|
|
Quote:
Originally Posted by Huppy
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.
|
09-09-2018, 03:26 PM
|
Fire Beetle
|
|
Join Date: Sep 2012
Posts: 25
|
|
Quote:
Originally Posted by Huppy
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.
|
09-09-2018, 03:43 PM
|
|
Demi-God
|
|
Join Date: Oct 2010
Posts: 1,332
|
|
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.
|
09-09-2018, 03:47 PM
|
Fire Beetle
|
|
Join Date: Sep 2012
Posts: 25
|
|
Quote:
Originally Posted by Huppy
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.
|
09-09-2018, 04:05 PM
|
|
Demi-God
|
|
Join Date: Oct 2010
Posts: 1,332
|
|
Quote:
Originally Posted by Almusious
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.
|
10-26-2018, 11:40 AM
|
Sarnak
|
|
Join Date: Mar 2013
Location: Springfield MO
Posts: 66
|
|
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.
__________________
"We are all on the same team, and I think not enough people realize this."
- Leetsauce
|
10-26-2018, 12:15 PM
|
|
Demi-God
|
|
Join Date: May 2007
Location: b
Posts: 1,447
|
|
Quote:
Originally Posted by JimB_1958
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.
|
10-29-2018, 09:50 AM
|
Sarnak
|
|
Join Date: Jul 2018
Location: Tennessee
Posts: 33
|
|
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.
|
10-29-2018, 10:00 AM
|
Administrator
|
|
Join Date: May 2013
Location: United States
Posts: 1,594
|
|
Code:
quest::gmsay(message, color_id, send_to_world?, guild_id, min_status);
|
10-29-2018, 10:18 AM
|
Sarnak
|
|
Join Date: Jul 2018
Location: Tennessee
Posts: 33
|
|
Quote:
Originally Posted by Kingly_Krab
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?
|
10-29-2018, 12:08 PM
|
Administrator
|
|
Join Date: May 2013
Location: United States
Posts: 1,594
|
|
You can use a loop and iterate through group members if necessary. I’m at work, otherwise I’d give you an example.
|
10-29-2018, 06:32 PM
|
Sarnak
|
|
Join Date: Jul 2018
Location: Tennessee
Posts: 33
|
|
gotcha, thankyou sir.
|
|
|
|
01-15-2019, 02:04 PM
|
Fire Beetle
|
|
Join Date: Dec 2009
Posts: 6
|
|
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.
|
|
|
|
|
|
|
01-15-2019, 02:54 PM
|
Fire Beetle
|
|
Join Date: Sep 2012
Posts: 25
|
|
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).
|
|
|
|
|
|
|
01-15-2019, 07:28 PM
|
Fire Beetle
|
|
Join Date: Dec 2009
Posts: 6
|
|
Quote:
Originally Posted by Almusious
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.
|
|
|
|
Posting Rules
|
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts
HTML code is Off
|
|
|
All times are GMT -4. The time now is 01:27 PM.
|
|
|
|
|
|
|
|
|
|
|
|
|