Jump to content
  • 0

(Question)Check if npc is in map


regal
Go to solution Solved by ondry,

Question

Hello, everyone! :) 

I hope you have/had a nice day.

So, I want to spawn a NPC via quest.

I've used the pc.setqf so that after it's spawned when another flag is triggered(kill 100 mobs) the action is stopped.

The problem is that as I've seen, pc.setqf is PID specific, so another player can spawn another NPC because he doesn't have that flag set yet.

So, as a another "safety" action, is there any way to check if a specific npc is in a specific map(at least map index)?

Or.. maybe.. set the flag as general for all PIDS? 

I tried to play with npc.is_available0() but I think that this function is for other means...

P.S.: It is for a normal map, not dungeon.. with dungeon functions I think that I would've found a workaround.

Thank you for taking your time! :D 

Link to post

4 answers to this question

Recommended Posts

  • 0
  • Solution
7 hours ago, regal said:

Or.. maybe.. set the flag as general for all PIDS? 

game.set_event_flag("isSpawned", 1)

if game.get_event_flag("isSpawned") == 1 then return end

  • Love 1
Link to post
  • 0
  • VIP
struct FCountRaceInMap
{
	size_t count;
	uint32_t dwVnum;

	FCountRaceInMap(uint32_t _dwVnum) : dwVnum(_dwVnum), count(0) {}

	void operator() (LPENTITY ent)
	{
		if (!ent->IsType(ENTITY_CHARACTER))
			return;

		LPCHARACTER ch = static_cast<LPCHARACTER>(ent);
		if (ch->IsPC())
			return;

		if (ch->GetRaceNum() == dwVnum)
			++count;
	}
};

size_t SECTREE_MANAGER::GetRaceCountInMap(long lMapIndex, uint32_t dwVnum) {
	LPSECTREE_MAP sectree = SECTREE_MANAGER::instance().GetMap(lMapIndex);
	if (!sectree)
		return 0;

	FCountRaceInMap f(dwVnum);
	sectree->for_each(f);
	return f.count;
}

 

It should work, but I didn't test.

Edited by Endymion (see edit history)
  • Love 1
Link to post
Guest
This topic is now closed to further replies.


×
×
  • Create New...

Important Information

Terms of Use / Privacy Policy / Guidelines / We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.