Рейтинг темы:
  • 0 Голос(ов) - 0 в среднем
  • 1
  • 2
  • 3
  • 4
  • 5
Как сделать своего НПС ходящим и говорящим..сюда(ребелион)
#1
Для начала смотрим свободного НПС в дат паке в таблице npc - запоминаем ид..
для чего да для того что все нпс у реба синхронизируются с клиентом...Можно конечно и своего сделать но нужно лезть в клиент, а этого нам больше всего не хочется..Итак приступим

Даем нашему нпс в той же таблице npc в поле ai мозг те пишем допустим Taurin2.

идем в папку скриптов папку ai и копируем файлег Taurin.java > потом его редактим (пишу копи пасте тк не все шарят в джаве)

Далее на подобии правим диалоги которые нпс говорит
Замечу что диалоги произносятся по достижении нпс определенной точки по координатам указанным в этом файле.

Заранее нужно определить путь нпс - НПС не должен натыкатся на стены и препятствия..

Все координаты вбили, диалоги добавили - сохраняем файл и называем его Taurin2.java

Все редактирования производим в утф8 дабы избежать проблем..

Запускаем сервер смотрим на консоль если скрипты подгрузились то все ок - нет ищем ошибки в том что написали.

если в базу вашему нпс не добавить ai то по умолчанию нпс ходить и говоритьб не будет нужно админом подойти выделить его и написать //admin_setai Taurin2

теперь все в порядке но опять же нпс пройдет 1 цикл и будет стоять на стартовой точке пока вы не пропишете ему мозги снова поэтому рекомендую дать мозг ему навечно




Код:
package ai;

import l2r.gameserver.ai.DefaultAI;
import l2r.gameserver.model.L2Character;
import l2r.extensions.scripts.Functions;
import l2r.gameserver.serverpackets.MagicSkillUse;
import l2r.util.Location;
import l2r.util.Rnd;

public class Taurin2 extends DefaultAI //здесь тоже добавим 2
{
    private Location[] points = new Location[41];
    private int current_point = -1;
    private long wait_timeout = 0;
    private boolean wait = false;

    public Taurin2(L2Character actor) //меняем на Taurin2
    {
        super(actor);//описание пути НПС points - это точка в скобочках пишем координату
        points[0] = new Location(80752, 146400, -3533);
        points[1] = new Location(80250, 146988, -3559);
        points[2] = new Location(80070, 146942, -3559);
        points[3] = new Location(80048, 146705, -3547);
        points[4] = new Location(79784, 146561, -3546);
        points[5] = new Location(79476, 146800, -3547);
        points[6] = new Location(79490, 147480, -3559);
        points[7] = new Location(79812, 148310, -3559);
        points[8] = new Location(79692, 148564, -3559);
        points[9] = new Location(77569, 148495, -3623);
        points[10] = new Location(77495, 148191, -3622);
        points[11] = new Location(77569, 148495, -3623);
        points[12] = new Location(79819, 148740, -3559);
        points[13] = new Location(79773, 149110, -3559);
        points[14] = new Location(79291, 149523, -3559);
        points[15] = new Location(79569, 150214, -3548);
        points[16] = new Location(79679, 150717, -3543);
        points[17] = new Location(80106, 150630, -3547);
        points[18] = new Location(81207, 150276, -3559);
        points[19] = new Location(81820, 150666, -3559);
        points[20] = new Location(82038, 150589, -3559);
        points[21] = new Location(82394, 149943, -3559);
        points[22] = new Location(82038, 150589, -3559);
        points[23] = new Location(81820, 150666, -3559);
        points[24] = new Location(81582, 150590, -3559);
        points[25] = new Location(81535, 149653, -3495);
        points[26] = new Location(83814, 148630, -3420);
        points[27] = new Location(87001, 148637, -3428);
        points[28] = new Location(83814, 148630, -3420);
        points[29] = new Location(82921, 148467, -3495);
        points[30] = new Location(82060, 148070, -3495);
        points[31] = new Location(82060, 148070, -3495);
        points[32] = new Location(82060, 148070, -3495);
        points[33] = new Location(82060, 148070, -3495);
        points[34] = new Location(81544, 147514, -3491);
        points[35] = new Location(81691, 146578, -3559);
        points[36] = new Location(83190, 146687, -3491);
        points[37] = new Location(81691, 146578, -3559);
        points[38] = new Location(81331, 146915, -3559);
        points[39] = new Location(81067, 146925, -3559);
        points[40] = new Location(80752, 146400, -3533);
    }

    @Override
    public boolean isGlobalAI()
    {
        return true;
    }

    @Override
    protected boolean thinkActive()
    {
        if(_thisActor.isDead())
            return true;

        if(_def_think)
        {
            doTask();
            return true;
        }

        if(System.currentTimeMillis() > wait_timeout && (current_point > -1 || Rnd.chance(5)))
        {
            if(!wait)
                switch(current_point)
                {
                    // Это паузы на определеных точках в милисекундах
                    // (case 3:) Это номер точки на которой делать паузу
                    // npcSayInRange - сказать в Зону
                    // npcSayToAll - Сказать всем
                    // npcSayToPlayer - Сказать определеному игроку
                    // npcShout - просто сказать всем видимым
                    // пользовать вот так например
                    // Functions.npcShout(_thisActor, "Всем лежать, у меня бомба!");
                    // Использывание скиллов //
                    // _thisActor.broadcastPacket(new MagicSkillUse(_thisActor, _thisActor, _skillId, skilllevel, castTime, 0));
                    // На примере 2025 Large Firework //
                    // _thisActor.broadcastPacket(new MagicSkillUse(_thisActor, _thisActor, 2025, 1, 500, 0));
                    // ЗДЕСЬ ОПИСАНЫ ДЕЙСТВИЯ НПС ПО ДОСТИЖЕНИИ ОПРЕДЕЛЕННЫХ КООРДИНАТ CASE ЭТО КЕЙС КОТОРЫЙ СРАБАТЫВАЕТ ПО ДОСТИЖЕНИИ point 4 И ТАК ДАЛЕЕ...
                    case 4:
                        wait_timeout = System.currentTimeMillis() + 10000;//ВРЕМЯ КОТОРОЕ МЫ СТОИМ НА МЕСТЕ
                        wait = true;
                        return true;
                    case 10:
                        wait_timeout = System.currentTimeMillis() + 10000;//ВРЕМЯ КОТОРОЕ МЫ СТОИМ НА МЕСТЕ
                        wait = true;
                        return true;
                    case 14:
                        wait_timeout = System.currentTimeMillis() + 10000;//ВРЕМЯ КОТОРОЕ МЫ СТОИМ НА МЕСТЕ
                        wait = true;
                        return true;
                    case 16:
                        wait_timeout = System.currentTimeMillis() + 10000;//ВРЕМЯ КОТОРОЕ МЫ СТОИМ НА МЕСТЕ
                        wait = true;
                        return true;
                    case 21:
                        wait_timeout = System.currentTimeMillis() + 10000;//ВРЕМЯ КОТОРОЕ МЫ СТОИМ НА МЕСТЕ
                        wait = true;
                        return true;
                    case 27:
                        wait_timeout = System.currentTimeMillis() + 10000;//ВРЕМЯ КОТОРОЕ МЫ СТОИМ НА МЕСТЕ
                        wait = true;
                        return true;
                    case 30:
                        wait_timeout = System.currentTimeMillis() + 10000;//ВРЕМЯ КОТОРОЕ МЫ СТОИМ НА МЕСТЕ
                        Functions.npcShout(_thisActor, "ПРИВЕТ ЛЮДИ");// ПРИМЕРНО ТАК МЕНЯЕМ ДИАЛОГИ
                        wait = true;
                        return true;
                    case 31:
                        wait_timeout = System.currentTimeMillis() + 15000;//ВРЕМЯ КОТОРОЕ МЫ СТОИМ НА МЕСТЕ
                        Functions.npcShout(_thisActor, "ВСЕ КО МНЕ У МЕНЯ РАСПРОДАЖА!!!!");// ПРИМЕРНО ТАК МЕНЯЕМ ДИАЛОГИ
                        wait = true;
                        return true;
                    case 32:
                        wait_timeout = System.currentTimeMillis() + 15000;//ВРЕМЯ КОТОРОЕ МЫ СТОИМ НА МЕСТЕ
                        Functions.npcShout(_thisActor, "ПОЙДУ ДАЛЬШЕ!!!!!");// ПРИМЕРНО ТАК МЕНЯЕМ ДИАЛОГИ
                        wait = true;
                        return true;
                    case 33:
                        _thisActor.broadcastPacket(new MagicSkillUse(_thisActor, _thisActor, 2025, 1, 500, 0));
                        wait_timeout = System.currentTimeMillis() + 1000;//ДЕЙСТВИЕ КОТОРОЕ ПРОИЗВОДИТ НПС ТУТ ПУСКАЕТ ФЕЙРВЕРК
                        wait = true;
                        return true;
                    case 35:
                        wait_timeout = System.currentTimeMillis() + 10000;//ВРЕМЯ КОТОРОЕ МЫ СТОИМ НА МЕСТЕ
                        wait = true;
                        return true;
                    case 37:
                        wait_timeout = System.currentTimeMillis() + 30000000;//ВРЕМЯ КОТОРОЕ МЫ СТОИМ НА МЕСТЕ
                        wait = true;
                        return true;
                }

            wait_timeout = 0;
            wait = false;

            if(current_point >= points.length - 1)
                current_point = -1;

            current_point++;

            // ДОБАВЛЯЕМ ЗАДАНИЕ ТЕ ПРЫГАЕМ ПО ТОЧКАМ
            Task task = new Task();
            task.type = TaskType.MOVE;
            task.loc = points[current_point];
            _task_list.add(task);
            _def_think = true;
            return true;
        }

        if(randomAnimation())
            return true;

        return false;
    }

    @Override
    protected void onEvtAttacked(L2Character attacker, int damage)
    {}

    @Override
    protected void onEvtAggression(L2Character target, int aggro)
    {}
}
Ответ
#2
В спаун лист добавить не забывайте иначе его не будет пока не отспавните вручную.
если спавните вручную то будет он только до первой перезагрузки.
Ответ
#3
Смею возразить - не до первой
нпс останется после реста и шот давн до его удаления из спавн листа либо через админ панель - проверено!!!
Ответ
#4
тогда буду искать где у меня косяк. Мои исчезают. Sad
Ответ
#5
bucha, а какие различия на других сборках ? Smile
Ответ
#6
ну про другие не знаю, с пол года сижу на ребелионе...ранее как мне помнится в папке скрипт небыло открытых ждава файлов в ребе это есть что делает его более гибким по отношению к конечным пользователям.
Ответ
#7
Ах да , ты прав на других сборках такого нету
Ответ
#8
причем все скрипты редактируемые накопировать ид и поменять внутренности труда не составит а так же посмотреть как что работает Одно хочу сказать редактите блокнотом тогда точно работать будет тк у меня на нотпаде ++ проблемы с кодировками были 8
)
Ответ


Возможно похожие темы ...
Тема Автор Ответы Просмотры Последний пост
  Как сделать краски на 3 профе ? knaif 0 1,235 11-22-2017, 05:04 PM
Последний пост: knaif
  Помогите сделать аук 01g 0 1,446 03-20-2017, 01:49 PM
Последний пост: 01g
  как сделать нпс продавающего скилы со всех классов??? aaansideee 3 2,401 10-09-2016, 02:27 AM
Последний пост: JoeSilence
  Добавление своего Айтема virusoflove 14 3,390 09-29-2016, 03:59 PM
Последний пост: pokan81
  Как сделать один сервер много раз Hett 5 1,698 07-20-2016, 09:12 AM
Последний пост: Hett
  Как сделать рестарт на сервере ? PUMAPS 9 25,430 08-14-2015, 08:42 PM
Последний пост: gorodetskiy
  Spawn в Reflection'е . Как сделать? BorlandC 1 1,458 07-25-2015, 06:09 PM
Последний пост: Gaikotsu
  Нужна помощь!Как сделать статус дворянина при страте? BRODYAGGA 4 1,753 01-23-2015, 06:55 PM
Последний пост: Influence
  Как сделать перерождения? AS_YAMMY 3 1,765 11-07-2014, 07:37 PM
Последний пост: AS_YAMMY
  Как сделать вайп PTS сборки meromax2010 15 4,124 02-22-2014, 06:05 PM
Последний пост: holocaust

Перейти к форуму:


Пользователи, просматривающие эту тему: 3 Гость(ей)