Beispiel #1
0
void Actor::updateTargetList()
{
  CreatureList::iterator it;
  for(it = friendList.begin(); it != friendList.end();){
    if((*it)->getHealth() <= 0 || !canSee((*it)->getPosition())){
      (*it)->unRef();
      it = friendList.erase(it);
    }
    else
      ++it;
  }

  for(it = targetList.begin(); it != targetList.end();){
    if((*it)->getHealth() <= 0 || !canSee((*it)->getPosition())){
      (*it)->unRef();
      it = targetList.erase(it);
    }
    else
      ++it;
  }

  const SpectatorVec& list = g_game.getSpectators(getPosition());
  for(SpectatorVec::const_iterator it = list.begin(); it != list.end(); ++it){
    if((*it) != this && canSee((*it)->getPosition())){
      onCreatureFound(*it);
    }
  }
}
Beispiel #2
0
void Monster::updateTargetList()
{
	CreatureList::iterator it = friendList.begin();
	while(it != friendList.end())
	{
		if((*it)->getHealth() <= 0 || !canSee((*it)->getPosition()))
		{
			(*it)->releaseThing2();
			it = friendList.erase(it);
		}
		else
			++it;
	}

	it = targetList.begin();
	while(it != targetList.end())
	{
		if((*it)->getHealth() <= 0 || !canSee((*it)->getPosition()))
		{
			(*it)->releaseThing2();
			it = targetList.erase(it);
		}
		else
			++it;
	}

	const SpectatorVec& list = g_game.getSpectators(getPosition());
	for(SpectatorVec::const_iterator list_it = list.begin(), list_end = list.end(); list_it != list_end; ++list_it)
	{
		if((*list_it) != this && canSee((*list_it)->getPosition()))
			onCreatureFound(*list_it);
	}
}
Beispiel #3
0
void Monster::updateTargetList()
{
	auto friendIterator = friendList.begin();
	while (friendIterator != friendList.end()) {
		Creature* creature = *friendIterator;
		if (creature->getHealth() <= 0 || !canSee(creature->getPosition())) {
			creature->decrementReferenceCounter();
			friendIterator = friendList.erase(friendIterator);
		} else {
			++friendIterator;
		}
	}

	auto targetIterator = targetList.begin();
	while (targetIterator != targetList.end()) {
		Creature* creature = *targetIterator;
		if (creature->getHealth() <= 0 || !canSee(creature->getPosition())) {
			creature->decrementReferenceCounter();
			targetIterator = targetList.erase(targetIterator);
		} else {
			++targetIterator;
		}
	}

	SpectatorHashSet spectators;
	g_game.map.getSpectators(spectators, position, true);
	spectators.erase(this);
	for (Creature* spectator : spectators) {
		if (canSee(spectator->getPosition())) {
			onCreatureFound(spectator);
		}
	}
}
Beispiel #4
0
void Monster::onCreatureEnter(Creature* creature)
{
	if(master == creature) //Turn the summon on again
	{
		isMasterInRange = true;
		updateIdleStatus();
	}

	onCreatureFound(creature, true);
}
Beispiel #5
0
void Actor::onCreatureEnter(Creature* creature)
{
  //std::cout << "onCreatureEnter - " << creature->getName() << std::endl;

  if(getMaster() == creature){
    //Turn the summon on again
    isMasterInRange = true;
  }

  onCreatureFound(creature, true);
}
Beispiel #6
0
void Monster::onCreatureEnter(Creature* creature)
{
	// std::cout << "onCreatureEnter - " << creature->getName() << std::endl;

	if (getMaster() == creature) {
		//Follow master again
		isMasterInRange = true;
	}

	onCreatureFound(creature, true);
}