ну возможно кто то реализовал так как идея была изложена на форумах l2jfree l2jserver и на сайте балансера тоже
Добавлено через 1 час 54 минуты
Вот вобщем то почти доделаный мозг для охраны главного перса те ведущего каравана...проверил работает единственное нужно переопределить действия при атаке и агре на персов.
Думаю при агре сделать чтоб говорили типа отойдите и прочее а при попытке атачить нападали 8)
они те охранники для кого этот мозг следуют толпой за НПС который ведущий.
Код:
package ai;
import l3b.gs.ai.DefaultAI;
import l3b.gs.model.L2Character;
import l3b.gs.model.L2World;
import l3b.gs.model.instances.L2NpcInstance;
import l3b.util.Rnd;
public class karavan extends DefaultAI
{
private static int EDWIN_ID = 13112;
private static int DRIFT_DISTANCE = 350;
private L2NpcInstance _edwin;
private long wait_timeout = 5000;
public karavan(L2Character actor)
{
super(actor);
}
@Override
public boolean isGlobalAI()
{
return true;
}
@Override
protected boolean randomAnimation()
{
return false;
}
@Override
protected boolean randomWalk()
{
return false;
}
@Override
protected boolean thinkActive()
{
if(_edwin == null)
{
// Р˜С‰РµРј преследуемого РЅРµ чаще, чем раз РІ 15 секунд, если РїРѕ каким-то причинам его нету
if(System.currentTimeMillis() > wait_timeout)
for(L2NpcInstance npc : L2World.getAroundNpc(_thisActor))
if(npc.getNpcId() == EDWIN_ID)
{
_edwin = npc;
return true;
}
}
else if(!_thisActor.isMoving)
{
int x = _edwin.getX() + Rnd.get(2 * DRIFT_DISTANCE) - DRIFT_DISTANCE;
int y = _edwin.getY() + Rnd.get(2 * DRIFT_DISTANCE) - DRIFT_DISTANCE;
int z = _edwin.getZ();
_thisActor.setRunning(); // всегда бегают
_thisActor.moveToLocation(x, y, z, 0, true);
return true;
}
return false;
}
@Override
protected void onEvtAttacked(L2Character attacker, int damage)
{}
@Override
protected void onEvtAggression(L2Character target, int aggro)
{}
}