Построение миньенов, при появлении

Fern

Бессмертный
Местный
Сообщения
233
Розыгрыши
0
Решения
2
Репутация
288
Реакции
1 128
Баллы
1 683
Хроники
  1. Interlude
Исходники
Присутствуют
Сборка
aCis
Есть ли какая-нибудь сборка (желательно с исходами), любых хроник, в которой бы при появлении миньенов они были бы выстроены кругом, квадратом или как-то иначе (не появлялись друг в друге и между ними было одинаковое расстояние) возле рб? (Если знаете такую, скажите плз название или поделитесь ссылкой на нее)
Или можете, если знаете и вам не сложно, подсказать как сделать такое в aCis?
 
Есть ли какая-нибудь сборка (желательно с исходами), любых хроник, в которой бы при появлении миньенов они были бы выстроены кругом, квадратом или как-то иначе (не появлялись друг в друге и между ними было одинаковое расстояние) возле рб? (Если знаете такую, скажите плз название или поделитесь ссылкой на нее)
Или можете, если знаете и вам не сложно, подсказать как сделать такое в aCis?
Код:
    /**
     * вычислить курс // направление
     * @param fromX
     * @param fromY
     * @param toX
     * @param toY
     * @return
     */
    public static final int calculateHeadingFrom(int fromX, int fromY, int toX, int toY)
    {
        double angleTarget = Math.toDegrees(Math.atan2(toY - fromY, toX - fromX));
        if (angleTarget < 0)
        {
            angleTarget = 360 + angleTarget;
        }
        return (int) (angleTarget * 182.044444444);
    }
    
    /**
     * Список точек на окружности<br>
     * Hаправление от центра к окружности<br>
     * @param loc начало центр
     * @param radius радиус
     * @param count количество точек
     * @return список точек на окружности
     */
    public static final List<Location> getPointCircle(ILocational loc, int radius, int count)
    {
        return getPointCircle(loc.getX(), loc.getY(), loc.getZ(), loc.getInstanceId(), radius, count);
    }
    
       /**
     * Список точек на окружности<br>
     * Hаправление от центра к окружности<br>
     * @param x начало центр
     * @param y начало центр
     * @param z
     * @param instanceId
     * @param radius радиус
     * @param count количество точек
     * @return список точек на окружности
     */
    public static final List<Location> getPointCircle(int x, int y, int z, int instanceId, int radius, int count)
    {
        List<Location> list = new ArrayList<>();
        
        int angle = 360 / count;
        
        for (int i = 0; i < 360; i += angle)
        {
            double rad = ((double) i / 180) * 3.14;
            int xn = (int) (radius * Math.cos(rad));
            int yn = (int) (radius * Math.sin(rad));
            
            Location loc = new Location(xn + x, y + yn, z, calculateHeadingFrom(x, y, xn + x, y + yn), instanceId);
            
            list.add(loc);
        }
        
        return list;
    }
 
Есть ли какая-нибудь сборка (желательно с исходами), любых хроник, в которой бы при появлении миньенов они были бы выстроены кругом, квадратом или как-то иначе (не появлялись друг в друге и между ними было одинаковое расстояние) возле рб? (Если знаете такую, скажите плз название или поделитесь ссылкой на нее)
Или можете, если знаете и вам не сложно, подсказать как сделать такое в aCis?
Смотрите мобов в лабиринте бездны, камалока. Там первая комната с мобами. У данных мобов должен быть AI для построения. Так как насколько я помню, там спавнится 1 моб, остальные доспавнивает AI.
 
Обратите внимание, что данный пользователь заблокирован! Не совершайте с ним никаких сделок! Перейдите в его профиль, чтобы узнать причину блокировки.
Смотрите мобов в лабиринте бездны, камалока. Там первая комната с мобами. У данных мобов должен быть AI для построения. Так как насколько я помню, там спавнится 1 моб, остальные доспавнивает AI.
Или школа полномочий та много примеров)
 
В Лабиринте, как и в Школе, спавн происходит с координат в скрипте или xml, по крайне мере в тех сборках которые я смотрел.
 
Смотрите мобов в лабиринте бездны, камалока. Там первая комната с мобами. У данных мобов должен быть AI для построения. Так как насколько я помню, там спавнится 1 моб, остальные доспавнивает AI.
То, о чем ты говоришь, имея ввиду лабиринт бездны, это в AI ПТС-ки. И там тупо каждому мобу прописано примитивно типа такого:

Java:
@Override
protected void onEvtSpawn()
{
    if (!is_private && !spawnActivated)
    {
        spawnActivated = true;
        final L2NpcInstance actor = getActor();
        final Location spawnLoc = actor.getSpawnedLoc().correctGeoZ();
        final int i0 = Rnd.get(9);

        if (i0 == 0)
        {
            //actor.teleToLocation(actor.getLoc());
            //InstantTeleport(myself.sm, spawnLoc.x, spawnLoc.y, spawnLoc.z);
            CreateOnePrivateEx(actor, silhouette, spawnLoc.x - 85, spawnLoc.y - 60, spawnLoc.z);
            CreateOnePrivateEx(actor, silhouette, spawnLoc.x, spawnLoc.y - 120, spawnLoc.z);
            CreateOnePrivateEx(actor, silhouette, spawnLoc.x + 85, spawnLoc.y - 60, spawnLoc.z);
            CreateOnePrivateEx(actor, silhouette, spawnLoc.x - 120, spawnLoc.y, spawnLoc.z);
            CreateOnePrivateEx(actor, silhouette, spawnLoc.x + 120, spawnLoc.y, spawnLoc.z);
            CreateOnePrivateEx(actor, silhouette, spawnLoc.x - 85, spawnLoc.y + 60, spawnLoc.z);
            CreateOnePrivateEx(actor, silhouette, spawnLoc.x, spawnLoc.y + 120, spawnLoc.z);
            CreateOnePrivateEx(actor, silhouette, spawnLoc.x + 85, spawnLoc.y + 60, spawnLoc.z);
        }
        else if (i0 == 1)
        {
            actor.teleToLocation(spawnLoc.x - 85, spawnLoc.y - 60, spawnLoc.z);
            actor.setSpawnedLoc(actor.getLoc());
            CreateOnePrivateEx(actor, silhouette, spawnLoc.x, spawnLoc.y - 120, spawnLoc.z);
            CreateOnePrivateEx(actor, silhouette, spawnLoc.x + 85, spawnLoc.y - 60, spawnLoc.z);
            CreateOnePrivateEx(actor, silhouette, spawnLoc.x - 120, spawnLoc.y, spawnLoc.z);
            CreateOnePrivateEx(actor, silhouette, spawnLoc.x, spawnLoc.y, spawnLoc.z);
            CreateOnePrivateEx(actor, silhouette, spawnLoc.x + 120, spawnLoc.y, spawnLoc.z);
            CreateOnePrivateEx(actor, silhouette, spawnLoc.x - 85, spawnLoc.y + 60, spawnLoc.z);
            CreateOnePrivateEx(actor, silhouette, spawnLoc.x, spawnLoc.y + 120, spawnLoc.z);
            CreateOnePrivateEx(actor, silhouette, spawnLoc.x + 85, spawnLoc.y + 60, spawnLoc.z);
        }
        else if (i0 == 2)
        {
            actor.teleToLocation(spawnLoc.x, spawnLoc.y - 120, spawnLoc.z);
            actor.setSpawnedLoc(actor.getLoc());
            CreateOnePrivateEx(actor, silhouette, spawnLoc.x - 85, spawnLoc.y - 60, spawnLoc.z);
            CreateOnePrivateEx(actor, silhouette, spawnLoc.x + 85, spawnLoc.y - 60, spawnLoc.z);
            CreateOnePrivateEx(actor, silhouette, spawnLoc.x - 120, spawnLoc.y, spawnLoc.z);
            CreateOnePrivateEx(actor, silhouette, spawnLoc.x, spawnLoc.y, spawnLoc.z);
            CreateOnePrivateEx(actor, silhouette, spawnLoc.x + 120, spawnLoc.y, spawnLoc.z);
            CreateOnePrivateEx(actor, silhouette, spawnLoc.x - 85, spawnLoc.y + 60, spawnLoc.z);
            CreateOnePrivateEx(actor, silhouette, spawnLoc.x, spawnLoc.y + 120, spawnLoc.z);
            CreateOnePrivateEx(actor, silhouette, spawnLoc.x + 85, spawnLoc.y + 60, spawnLoc.z);
        }
        else if (i0 == 3)
        {
            actor.teleToLocation(spawnLoc.x + 85, spawnLoc.y - 60, spawnLoc.z);
            actor.setSpawnedLoc(actor.getLoc());
            CreateOnePrivateEx(actor, silhouette, spawnLoc.x - 85, spawnLoc.y - 60, spawnLoc.z);
            CreateOnePrivateEx(actor, silhouette, spawnLoc.x, spawnLoc.y - 120, spawnLoc.z);
            CreateOnePrivateEx(actor, silhouette, spawnLoc.x - 120, spawnLoc.y, spawnLoc.z);
            CreateOnePrivateEx(actor, silhouette, spawnLoc.x, spawnLoc.y, spawnLoc.z);
            CreateOnePrivateEx(actor, silhouette, spawnLoc.x + 120, spawnLoc.y, spawnLoc.z);
            CreateOnePrivateEx(actor, silhouette, spawnLoc.x - 85, spawnLoc.y + 60, spawnLoc.z);
            CreateOnePrivateEx(actor, silhouette, spawnLoc.x, spawnLoc.y + 120, spawnLoc.z);
            CreateOnePrivateEx(actor, silhouette, spawnLoc.x + 85, spawnLoc.y + 60, spawnLoc.z);
        }
        else if (i0 == 4)
        {
            actor.teleToLocation(spawnLoc.x - 120, spawnLoc.y, spawnLoc.z);
            actor.setSpawnedLoc(actor.getLoc());
            CreateOnePrivateEx(actor, silhouette, spawnLoc.x - 85, spawnLoc.y - 60, spawnLoc.z);
            CreateOnePrivateEx(actor, silhouette, spawnLoc.x, spawnLoc.y - 120, spawnLoc.z);
            CreateOnePrivateEx(actor, silhouette, spawnLoc.x + 85, spawnLoc.y - 60, spawnLoc.z);
            CreateOnePrivateEx(actor, silhouette, spawnLoc.x, spawnLoc.y, spawnLoc.z);
            CreateOnePrivateEx(actor, silhouette, spawnLoc.x + 120, spawnLoc.y, spawnLoc.z);
            CreateOnePrivateEx(actor, silhouette, spawnLoc.x - 85, spawnLoc.y + 60, spawnLoc.z);
            CreateOnePrivateEx(actor, silhouette, spawnLoc.x, spawnLoc.y + 120, spawnLoc.z);
            CreateOnePrivateEx(actor, silhouette, spawnLoc.x + 85, spawnLoc.y + 60, spawnLoc.z);
        }
        else if (i0 == 5)
        {
            actor.teleToLocation(spawnLoc.x + 120, spawnLoc.y, spawnLoc.z);
            actor.setSpawnedLoc(actor.getLoc());
            CreateOnePrivateEx(actor, silhouette, spawnLoc.x - 85, spawnLoc.y - 60, spawnLoc.z);
            CreateOnePrivateEx(actor, silhouette, spawnLoc.x, spawnLoc.y - 120, spawnLoc.z);
            CreateOnePrivateEx(actor, silhouette, spawnLoc.x + 85, spawnLoc.y - 60, spawnLoc.z);
            CreateOnePrivateEx(actor, silhouette, spawnLoc.x - 120, spawnLoc.y, spawnLoc.z);
            CreateOnePrivateEx(actor, silhouette, spawnLoc.x, spawnLoc.y, spawnLoc.z);
            CreateOnePrivateEx(actor, silhouette, spawnLoc.x - 85, spawnLoc.y + 60, spawnLoc.z);
            CreateOnePrivateEx(actor, silhouette, spawnLoc.x, spawnLoc.y + 120, spawnLoc.z);
            CreateOnePrivateEx(actor, silhouette, spawnLoc.x + 85, spawnLoc.y + 60, spawnLoc.z);
        }
        else if (i0 == 6)
        {
            actor.teleToLocation(spawnLoc.x - 85, spawnLoc.y + 60, spawnLoc.z);
            actor.setSpawnedLoc(actor.getLoc());
            CreateOnePrivateEx(actor, silhouette, spawnLoc.x - 85, spawnLoc.y - 60, spawnLoc.z);
            CreateOnePrivateEx(actor, silhouette, spawnLoc.x, spawnLoc.y - 120, spawnLoc.z);
            CreateOnePrivateEx(actor, silhouette, spawnLoc.x + 85, spawnLoc.y - 60, spawnLoc.z);
            CreateOnePrivateEx(actor, silhouette, spawnLoc.x - 120, spawnLoc.y, spawnLoc.z);
            CreateOnePrivateEx(actor, silhouette, spawnLoc.x, spawnLoc.y, spawnLoc.z);
            CreateOnePrivateEx(actor, silhouette, spawnLoc.x + 120, spawnLoc.y, spawnLoc.z);
            CreateOnePrivateEx(actor, silhouette, spawnLoc.x, spawnLoc.y + 120, spawnLoc.z);
            CreateOnePrivateEx(actor, silhouette, spawnLoc.x + 85, spawnLoc.y + 60, spawnLoc.z);
        }
        else if (i0 == 7)
        {
            actor.teleToLocation(spawnLoc.x, spawnLoc.y + 120, spawnLoc.z);
            actor.setSpawnedLoc(actor.getLoc());
            CreateOnePrivateEx(actor, silhouette, spawnLoc.x - 85, spawnLoc.y - 60, spawnLoc.z);
            CreateOnePrivateEx(actor, silhouette, spawnLoc.x, spawnLoc.y - 120, spawnLoc.z);
            CreateOnePrivateEx(actor, silhouette, spawnLoc.x + 85, spawnLoc.y - 60, spawnLoc.z);
            CreateOnePrivateEx(actor, silhouette, spawnLoc.x - 120, spawnLoc.y, spawnLoc.z);
            CreateOnePrivateEx(actor, silhouette, spawnLoc.x, spawnLoc.y, spawnLoc.z);
            CreateOnePrivateEx(actor, silhouette, spawnLoc.x + 120, spawnLoc.y, spawnLoc.z);
            CreateOnePrivateEx(actor, silhouette, spawnLoc.x - 85, spawnLoc.y + 60, spawnLoc.z);
            CreateOnePrivateEx(actor, silhouette, spawnLoc.x + 85, spawnLoc.y + 60, spawnLoc.z);
        }
        else
        {
            actor.teleToLocation(spawnLoc.x + 85, spawnLoc.y + 60, spawnLoc.z);
            actor.setSpawnedLoc(actor.getLoc());
            CreateOnePrivateEx(actor, silhouette, spawnLoc.x - 85, spawnLoc.y - 60, spawnLoc.z);
            CreateOnePrivateEx(actor, silhouette, spawnLoc.x, spawnLoc.y - 120, spawnLoc.z);
            CreateOnePrivateEx(actor, silhouette, spawnLoc.x + 85, spawnLoc.y - 60, spawnLoc.z);
            CreateOnePrivateEx(actor, silhouette, spawnLoc.x - 120, spawnLoc.y, spawnLoc.z);
            CreateOnePrivateEx(actor, silhouette, spawnLoc.x, spawnLoc.y, spawnLoc.z);
            CreateOnePrivateEx(actor, silhouette, spawnLoc.x + 120, spawnLoc.y, spawnLoc.z);
            CreateOnePrivateEx(actor, silhouette, spawnLoc.x - 85, spawnLoc.y + 60, spawnLoc.z);
            CreateOnePrivateEx(actor, silhouette, spawnLoc.x, spawnLoc.y + 120, spawnLoc.z);
        }
    }
    super.onEvtSpawn();
}
Но это вариант так себе. Он точечный. Тут нужно писать универсальный вариант построения миньонов при спавне, когда ты не знаешь заранее количества этих самых миньонов и где именно заспавнился босс(это я к тому, что нужны проверки на невозможность заспавниться в непроходимой области геодаты). В какой сборке они строятся нужным образом - не подскажу, ибо не знаю.
 
Назад
Сверху Снизу