Рейтинг темы:
  • 0 Голос(ов) - 0 в среднем
  • 1
  • 2
  • 3
  • 4
  • 5
[Мануал] Делаем бегающего NPC на L2Phoenix
#1
Всем Привет!
Помнится мне, раньше я пользовался сборками L2J и там был прекрасный NPC, который бегал по гирану и просил голосовать за сервер, покапавшись в инете не видел ни одного такого дополнения на l2phoenix.
Так что делаем такое дополнение сами по этому мануалу)

И так начнем!

В игре уже есть парочку NPC которые бегают, поэтому возьмем за основу уже существующего, я выбрал "Remy"
(server\game\data\scripts\ai\Remy.java)

Копируем его и переименовываем в GAGA.java

Открываем его через notepad++ (для удобной смены кодировки)
GAGA.java

И так, приступим к редактированию.
ВАЖНО! ПРОВЕРЯЙТЕ КАЖДУЮ ЗАПЕТУЮ И ПРОЧИЕ!НЕ СТИРАЙТЕ ЛИШНИЕ ЗНАКИ!ИНАЧЕ СЕРВАК ПРОСТО НАПРОСТО НЕ ЗАПУСТИТСЯ!

1) ( public class Remy extends DefaultAI )
Тут заменяем Remy на GAGA

2) ( public Remy(L2Character actor) )
Также переименовываем Remy на GAGA

Файл подготовлен, к запуску, но запускать его пока не стоит, теперь его редактируем под себя,

Траектория хотьбы:
Нам нужно указать координаты для NPC по которым он будет ходить.
(Чтоб узнать координаты где находится ваш персонаж напишите "/loc")
Важно чтоб цепочка была без преград:
из пункта 1 в пункт 2 => 3 => 4
NPC должен свободно перемещаться к точке 1 из точки 4
И нигде не должно быть преград (камни, деревья, дома)
Иначе он будет врезаться в них, и телепортироваться к следующей точке.

Можно использовать и другую схему:
1=> 2 => 3 => 4 => 3=> 2 => 1
NPC будет бежать по заданной траектории и возвращаться тем же путем по которому пришел...

Думаю суть понятна)

Теперь текст который будет вылазить в чат:

PHP код:
<?php 
case 0:
wait_timeout = System.currentTimeMillis() + 15000;
Functions.npcSay(actor, "Новая поставка для Mr. Lector? Очень хорошо!");
wait = true;
return
true;

case 0 - это пункт в котором будет исполнено действие (0 это самая первая точка)

15000 - Время в миллисекундах (1 секунда равна 1000 миллисекунд)
То есть NPC будет стоять на этой точке 15 секунд.

Functions.npcSay(actor, "------"); Заменить ------ на свой текст

Вот вроде и все по данному скрипту, мы его настроили и он готов к работе, нам осталось создать NPC.


Создаем NPC
Создаем NPC по данному МАНУАЛУ (если у вас есть в таблице NPC, столбик DisplayID, то в него вписываем ID моба у которого хотим взять скин, в этом случае нам не нужно редактировать DAT файл )

И так мы создали NPC, теперь его нужно настроить.
Значение type (L2Npc)
Значение ai_type (GAGA)

Настройка диалога с NPC
Создадим файл с названием *****.htm , где ***** Id Нашего NPC.
и поместим его в ( server\game\data\html\default\*****.htm )
Теперь мы можем с ним говорить)


SPAWN
И самое главное, SPAWN
Наш NPC должен появиться радом или в самой точке (1), что NPC смог дойти без преград до стартовой точки и начать выполнять скрипт.
______________________________________________

Примечание: я не пробовал делать монстра, возможно моб не будет ходить, но попробывать стоит)

Если NPC стоит на месте, и долго не бежит,то не перезагружайте скрипты в игре из админ панели, это не срабатывает,
Перезагружайте сам сервер, если скрипт всеравно не правильно работает во время его правки, то перезапускайте Java.
После перезагрузки скрипт будет работать нормально.

Естественно при условии что вы не напортачили в коде!
Если вы допустите хоть одну синтаксическую ошибку в редактировании java, то серв не запустится.

Вот теперь все) Плюсуйте если пригодилось)
Ответ
#2
Возможно не втой теме, но.....
Как я понял, для каждого НПЦ создается свой екзепляр класса.
Идея:
Сделать звязку з БД, что бы все нпц прогружались з БД во время загрузки сервера.
Вопрос: (с джавой не очень, потому и спрашиваю)
1. Теоретически со стороны сервера это возможно?
2. Как в Джава можно на лету создать класс (если возможно), возможно есть что-то типа eval()

На PHP создать такой класс просто Smile
PHP код:
<?php
$name_class
="NewClass";
$text = "class $name_class {}";
eval(
$text);
$t = new $name_class;
Ответ
#3
Так и есть, каждому НПЦ можно присвоить свой AI(класс). Все они загружаются из базы во время загрузки сервера.
Web программист\разработчик

— Есть только один способ проделать большую работу — полюбить ее. Если вы к этому не пришли, подождите. Не беритесь за дело.
Ответ
#4
[STIGMATED], Я имел введу бегающих нпс, и так чтобы координаты можна было задавать в БД.
Ответ
#5
А, думаю можно, точкам присвоить переменные, переменные вынести в базу и вперёд.
Web программист\разработчик

— Есть только один способ проделать большую работу — полюбить ее. Если вы к этому не пришли, подождите. Не беритесь за дело.
Ответ
#6
ZhukV
загрузка точек возможна хоть из базы, хоть из блокнота, хоть из хмл, да хоть из чего
[Изображение: 2ewe.jpg][Изображение: 1.gif]
Ответ
#7
PaInKiLlEr;120066 Написал:загрузка точек возможна хоть из базы, хоть из блокнота, хоть из хмл, да хоть из чего

Наверное не верно поняли вопрос Smile

Есть огромная идея интеграции системы Друпал 7 (она найболее подходит) с сервером линяги. Тоесть, все жуткие действия можно делать через сайт.
ПХП найлучше работает с БД, ХМЛ, а не с чем то другим.
Прогрузить точки для какого-то нпц можна спокойно, а вот можно ли динамически создать бегающий нпц, и присвоить ему точки, которые есть в БД.
К примеру, в БД есть две таблицы
1. `id`, `name_npc`, `description`, `other_vars`
2. `nid`, `number_point`, `point_x`, `point_y`, `point_x`, `other_vars`

При старте серва, читается первая таблица, откуда грузит имя нпц, описание, другие переменные. По имени нпц создает новый екземпляр класса (как я понял, для каждого бегающего нпц нужно свой екземпляр класса). Класс имеет одну статическую переменную, где хранится ид нпц. При инициализации класса, опять коннект к БД на вторую таблицу и достаем все точки (сортировка по number_point, виборка по nid [npc_id])

Вопрос так и остается: Возможно ли такое организовать, и можно ли динамически создавать классы в Java
Ответ
#8
ZhukV, вы, случайно, не собираетесь делать браузерную ла2? Big Grin
Всё что вы хотите сделать, так и говорит о том, двигать персами с сайта=)
Web программист\разработчик

— Есть только один способ проделать большую работу — полюбить ее. Если вы к этому не пришли, подождите. Не беритесь за дело.
Ответ
#9
[STIGMATED];120146 Написал:ZhukV, вы, случайно, не собираетесь делать браузерную ла2?
Всё что вы хотите сделать, так и говорит о том, двигать персами с сайта=)

=) =)

Нет, поскольку на флеше таких анимаций не сделаеш, либо нагрузка будет сумашедшая, а на флеше ограничена вирт память Sad

Идея заключается в том, чтобы все, что касается административных целей в ла2, можно было сделать тупо через сайт. Простой пример -- ISP, CPanel, WebMail, SquareMail и множество других. Они полностью интегрированы с оболочкой своего программного комплекса, который находится в системе.

По теории, интегрировать можно, если все данные звести в одну точку, к примеру в БД. Сайт в БД пишет, перезаписывает, а сервер уже оттуда читает.
Ответ
#10
Господа, подскажите - как подобное реализовать на L2j Freya ?
Просто проблемма в том, что нет папки "data\scripts\ai\".
Ответ


Возможно похожие темы ...
Тема Автор Ответы Просмотры Последний пост
  мануал по редактированию .dat из любых хроник. MsKira 10 9,779 02-15-2013, 01:59 PM
Последний пост: gorodetskiy
  [мануал]Добавление новых предметов на сервер. leva290791 0 14,751 08-23-2011, 12:22 PM
Последний пост: leva290791
  [мануал] изменению статов с уровнем игрока hard_root 4 4,148 07-25-2011, 11:13 PM
Последний пост: hard_root
  [Мануал]Выборка всех мобов в локации. DreamCast 3 4,293 06-02-2011, 12:17 PM
Последний пост: DreamCast
  [Мануал] Локация со своими МОБАМИ для L2Phoenix Шайтановской сборки FreeGoth 5 6,100 06-02-2011, 10:06 AM
Последний пост: DreamCast
  [Мануал] Создаем NPC на l2phoenix FreeGoth 12 11,272 03-25-2011, 02:02 PM
Последний пост: weTr1k
  Мануал по фарм зоне MUSTANGpp 2 4,721 09-27-2010, 06:54 PM
Последний пост: Casper

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


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