Перейти к содержанию
Авторизация  
dislike

Проблема С Ai

Рекомендуемые сообщения

Нужна помощь. Хочу реализовать через аи следующее: пока около моба нет живых игроков, он через определённый промежуток времени кричит в чат

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну под овероподобную основу

package ai;
import java.util.ArrayList;
import java.util.List;
import sw.awaken.gameserver.ai.DefaultAI;
import sw.awaken.gameserver.model.Creature;
import sw.awaken.gameserver.model.Player;
import sw.awaken.gameserver.model.World;
import sw.awaken.gameserver.model.instances.NpcInstance;
/**
* @Author AwakenDev
**/
public class Sayer extends DefaultAI
{
public Sayer (NpcInstance actor)
{
super(actor);
AI_TASK_ACTIVE_DELAY = 2000;
AI_TASK_ATTACK_DELAY = 2000;
}

@Override
protected boolean thinkActive()
{
if (!_def_think)
{
NpcInstance npc = getActor();
if (npc == null)
return true;
	 List<Creature> target = new ArrayList<Creature>();
	 for (Player player : World.getAroundPlayers(npc, 300, 300))
{
		 target.add(player);
}
for(Creature giver : target)
{
//посыл текста
}
}
return true;
}
@Override
public boolean isGlobalAI()
{
return true;
}
}

Изменено пользователем AwakenDev
  • Upvote 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Блин спасибо, а я всё пытался через onEvtThink();

Изменено пользователем dislike

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

@Override
protected boolean thinkActive() //контролер флуда
{
if (!_def_think)
{
NpcInstance actor = getActor();
if(actor == null)
return true;
if(!isFind)
{
if(_wait_timeout < System.currentTimeMillis())
{
_wait_timeout = System.currentTimeMillis() + 60000;
executeTask("events.PiratesTreasure.PiratesTreasure", "annoncePointInfo", new Object[0], 60000);
}
}
}
return true;
}

Но после этого моб перестаёт агрессировать

Можно конечно добавить, а без этого никак ?

List<Creature> chars = World.getAroundCharacters(actor);
CollectionUtils.eqSort(chars, _nearestTargetComparator);
for(Creature cha : chars)
{
 if(aggressive || actor.getAggroList().get(cha) != null)
 if(checkAggression(cha))
 return true;
}

P.S. я пишу некое подобие ивента "поисковика"

Изменено пользователем dislike

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Разобрался

 

  Показать контент

 

Изменено пользователем dislike

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Гость
Эта тема закрыта для публикации ответов.
Авторизация  

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...