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-13-2015, 12:11 PM
Bohbo
Hill Giant
 
Join Date: Dec 2012
Posts: 116
Default quest::attack($name) on signaled mob (passing target)

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

Code:
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

Code:
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

Code:
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.
Reply With Quote
  #2  
Old 01-13-2015, 01:13 PM
trevius's Avatar
trevius
Developer
 
Join Date: Aug 2006
Location: USA
Posts: 5,946
Default

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.
__________________
Trevazar/Trevius Owner of: Storm Haven
Everquest Emulator FAQ (Frequently Asked Questions) - Read It!
Reply With Quote
  #3  
Old 01-13-2015, 02:11 PM
Bohbo
Hill Giant
 
Join Date: Dec 2012
Posts: 116
Default

Quote:
Originally Posted by trevius View Post
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.

Code:
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.
Code:
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...
Code:
$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);
Reply With Quote
  #4  
Old 01-13-2015, 04:54 PM
Bohbo
Hill Giant
 
Join Date: Dec 2012
Posts: 116
Default

Maybe if I understood why this doesn't work I could get a better handle on it.

Code:
	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.
Reply With Quote
  #5  
Old 01-13-2015, 05:34 PM
Uleat's Avatar
Uleat
Developer
 
Join Date: Apr 2012
Location: North Carolina
Posts: 2,815
Default

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.
__________________
Uleat of Bertoxxulous

Compilin' Dirty
Reply With Quote
  #6  
Old 01-13-2015, 05:43 PM
Bohbo
Hill Giant
 
Join Date: Dec 2012
Posts: 116
Default

Quote:
Originally Posted by Uleat View Post
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.
Reply With Quote
  #7  
Old 01-13-2015, 07:25 PM
joligario's Avatar
joligario
Developer
 
Join Date: Mar 2003
Posts: 1,497
Default

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?
Reply With Quote
  #8  
Old 01-13-2015, 07:29 PM
Bohbo
Hill Giant
 
Join Date: Dec 2012
Posts: 116
Default

Quote:
Originally Posted by joligario View Post
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)

Code:
#Boss 
sub EVENT_ATTACK {
	my @threats = $npc->GetHateList();
	foreach $threat (@threats) {
		quest::emote("Die " . $threat->GetEnt()->GetCleanName() . "!");
	}
}
Code:
#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());
			}
		}

	}
}
Reply With Quote
Reply


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 09:15 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 - 2024, Jelsoft Enterprises Ltd.
Template by Bluepearl Design and vBulletin Templates - Ver3.3