View Full Version : quest::attack($name) on signaled mob
Bohbo
01-13-2015, 12:11 PM
I can start an encounter and the primary NPC (boss) can use $name just fine.
at say 90% HP I have him signal other NPCs (minions) to change bodytype to 1 from 11 and then
quest::emote("die $name");
quest::attack($name);
I seem to always get a response from the NPCs that they cant attack and they leave the emote blank. So they obviously aren't pulling $name (associated with player that started event). Since another NPC is really starting event.
Here is what an NPC sees on the Signal side
sub EVENT_SIGNAL{
if ($signal == 99) {
quest::emote("Let's go this is what we get paid for, all hands attack $name!");
#$mob -> SetTarget($name);
quest::emote($name); #I also tried using $name
quest::attack($name); #I also tried using $name
$npc->ModifyNPCStat("runspeed",2);
$npc->SetBodyType(1);
$npc->ModifyNPCStat("special_abilities","21,1^5,1^6,1");
}
}
And here is what the Boss Does
sub EVENT_HP {
if ($hpevent == 80) {
quest::emote("Guardsman, your master calls!");
quest::signalwith(9900031,99);
quest::setnexthpevent(50);
}
I am not sure how to pass the player variable on to another NPC. Would entity list solve this? I have yet to be successful with entity list so far.
trevius
01-13-2015, 01:13 PM
You can probably just set an entity variable on the client that attacks the boss. Then, have the minions iterate through the client list to find the one that attached the boss and get their name. You would want to get their entity ID and verify they are still in zone by getting them before trying to make an NPC attack them or whatever. Otherwise, if the client that attached the boss is dead already, it might crash your zone depending on what you try to do to them.
Set the entity variable "SetEntityVariable()" on the $client from EVENT_COMBAT if $combat_state == 1.
Bohbo
01-13-2015, 02:11 PM
You can probably just set an entity variable on the client that attacks the boss. Then, have the minions iterate through the client list to find the one that attached the boss and get their name. You would want to get their entity ID and verify they are still in zone by getting them before trying to make an NPC attack them or whatever. Otherwise, if the client that attached the boss is dead already, it might crash your zone depending on what you try to do to them.
Set the entity variable "SetEntityVariable()" on the $client from EVENT_COMBAT if $combat_state == 1.
Not 100% sure i am on the right track here.
I made boss part look like this.
if ($combat_state == 1){
$mob->SetEntityVariable($client,$attacker);
}
and the minion part look like this in the signal event:
EDIT::: I think the problem is here not searching entity list, trying to figure that out.
quest::emote($attacker);
quest::attack($attacker);
quest::attacknpc($attacker);
Neither the emote or the regular atack() work but the attacknpc at least returns an entity of 0, so either its not working because of npcsttack or because its not storing the entity?
Sorry I am such a newb at this, really trying to learn.
EDIT: I tried a few variations below cant seem to get this...
$mob->SetEntityVariable($client,$threat);
$threat = $entity_list->GetClientByName();
$threat = $entity_list->GetClientByName($name);
with boss i was doing this to try and pull the name variable
$attacker = GetEntityVariable($threat);
Bohbo
01-13-2015, 04:54 PM
Maybe if I understood why this doesn't work I could get a better handle on it.
sub EVENT_COMBAT{
my @threats = $entity_list->GetClientByName();
foreach $threat (@threats){
quest::emote("Die $threat");
}
}
I woould expect that to return the name of the client or clients of anyone on agrolist/incombat or at the VERY least the person who started combat.
EDIT:: It was implied but it doesn't return anything.
Uleat
01-13-2015, 05:34 PM
Make sure that your source code is up to date.
I pushed a change that killed 'OP_FormattedMessage'-type messages last night.
It was fixed shortly thereafter..but, if you happened to grab the source code in-between, you might have issues.
Bohbo
01-13-2015, 05:43 PM
Make sure that your source code is up to date.
I pushed a change that killed 'OP_FormattedMessage'-type messages last night.
It was fixed shortly thereafter..but, if you happened to grab the source code in-between, you might have issues.
I haven't updated source in a few days i don't think that would be it. But that code should return something then?
I can recompile if so.
joligario
01-13-2015, 07:25 PM
GetClientByName... Not able to look at the moment, but based off the name of that function, it should return a client object based upon the name you give it. What name did you pass it?
Bohbo
01-13-2015, 07:29 PM
GetClientByName... Not able to look at the moment, but based off the name of that function, it should return a client object based upon the name you give it. What name did you pass it?
This is what ended up working (thanks to some help by KinglyKrab)
#Boss
sub EVENT_ATTACK {
my @threats = $npc->GetHateList();
foreach $threat (@threats) {
quest::emote("Die " . $threat->GetEnt()->GetCleanName() . "!");
}
}
#Minion
sub EVENT_SIGNAL {
if ($signal == 99) {
my @threats = $entity_list->GetNPCByNPCTypeID(9900023)->GetHateList();
foreach my $threat (@threats){
quest::emote("Die " . $threat->GetEnt()->GetCleanName() . "!");
if ($threat->GetEnt()->IsClient()) {
quest::attack($threat->GetEnt()->GetCleanName());
} elsif ($threat->GetEnt()->IsNPC()) {
quest::attacknpc($threat->GetEnt()->GetID());
}
}
}
}
vBulletin® v3.8.11, Copyright ©2000-2025, vBulletin Solutions Inc.