DarkBOY | Дата: Вторник, 12.06.2012, 18:27 | Сообщение # 1 |
Бывалый
Группа: Модераторы
Сообщений: 32
Статус: Offline
| [Гайд]Все о НПС
Сегодня я Вам расскажу все о НПС.
Небольшой план: 1.Ставим НПС на карту 2.Изучаем скрипты диалогов
1.Ставим НПС на карту
Предисловие: Захотелось Вам поставить НПС. Сразу вопрос "Как это сделать?" Вот в этом гайде я Вам объясню как это делать.
Во первых определимся на какую карту будем ставить. Я к примеру поставлю НПС в Аргент.
Открываем ServerPiratia/resorce/карта(в моем случае garner)/картаnpc.txt(в моем случае garnernpc.txt).
Далее видим это:
Code 1 Портальщик Аргента - Джовиал 1 11 7 218700,277600 218700,277600 180 Аргент 1 0 GoToWhere 0
Я взял пример портальщика Аргента. Сейчас объясню что и как.
1 )1 - это id НПС'а (всего может быть около 180 НПС). 2 )Портальщик Аргента - Джовиал - Название НПС. 3 )1 - Тип НПС( всегда ставим 1). 4 )11 - Вид НПС(вид можно узнать через CharacterInfo.txt). 5 )7 - Картинка на мини-карте. 6 )218700,277600 218700,277600 - координаты НПС на карте 218700,277600. 2187 - это координаты в игре. 00 - так и оставить.
7 )180 - поворот НПС'а (в градусах) до 360. 8 )Аргент - карта. 9 )1 - неизвестно. 10 )0 - неизвестно. 11 )GoToWhere - функция НПС (функция в картаnpc.txt должна соответствовать с функцией в NPCScipts, но об этом позже). 12 )0 - неизвестно
Вот мы разобрали как поставить НПС на карту.
2.Изучаем скрипты диалогов
Самое первое что мы узнаем, это структура диалога НПС.
Диалог состоит из начала, тела функции и конца.
Выглядит это примерно так:
function Название функции () Тело функции end
Теперь разберем по подробнее:
function - с этого начинается любая функция. Название функции - это Ваше название функции. Называть можете как хотите, но на английском языке.(Например: ololo - название функции). () - это вставляете после названия функции.
Тело функции - это блок описания функции
end - конец функции.
Теперь разберем Тело функции:
Создадим наглядного НПС:
Code function dialog()
Talk( 1,"Привет! Сегодня хорошая погода, не правда ли? ") Text( 1,"Да. ", JumpPage, 2) Text( 1,"Нет. ", CloseTalk)
Talk( 2,"Ладно я занят делами. Пока. ") Text( 2,"Пока. ",CloseTalk)
end
Разбираем все по полочкам:
"Talk" - Диалог НПС'а. "Text" - Ответ игрока. "( 1," - № стр. диалога (между НПС и игроком). JumpPage, 2) - функция перехода на др стр., номер стр. куда нам надо перейти. "CloseTalk" - закрыть разговор. "Привет! Сегодня хорошая погода, не правда ли? " - это текст диалога который будет выводится в игре.(всегда в кавычках, если вы пишите русскими буквами то в конц всегда делайте пробел).
Теперь мы можем перейти к более сложным функциям.
Вот пример: Code function torgovec() Talk( 1, "Привет! Я торгую рефами. Хочешь заглянуть? ") Text( 1, "Да! ", BuyPage)
InitTrade() Weapon (0885) Defence (0855) Other (0855) end
Это функция торговли.
BuyPage - это функция перехода к торговли. InitTrade() - функция торговли.
"Weapon" - вещи будут показываться во вкладке с оружием. "Defence" - вещи будут показываться во вкладке с доспехами. "Other" - вещи будут показываться во вкладке с прочими товарами.
"Weapon (0885)" - Вкладка с оружием, итем с id 0885 (id нужного Вам итема смотрим в ItemInfo.txt)
Список часто используемых функций: Code JumpPage, № - Открывает диалог с указанным № стр. CloseTalk - Закрывает диалог BuyPage - Открывает окно продажи товара OpenRepair - Ремонт OpenForge - Ковка OpenMilling - Плавка OpenFusion - Декоративная плавка OpenUpgrade - Украшающее улучшение (заточка) OpenUnite - Комбинирование самоцветов SendExchangeData - Обменник
Теперь мы рассмотрим функцию обмена.
Quote function blablabla()
Talk( 1, " Привет я обменник 99 Пачкули на НЯ. " ) Text(1,"Хочу обменять!. ",MultiTrigger,GetMultiTrigger(),1) -- данная строка запускает триггер
InitTrigger() -- объявляем скрипту что дальше начнется триггер TriggerCondition( 1, HasItem,1000,99 ) -- Проверка на наличие предмета ( Чертеж Пачкули - id 1000 ), с определенным кол-вом( 99шт. ). TriggerCondition( 1, HasLeaveBagGrid, 1 ) -- Проверяем наличие 1 свободной ячейки TriggerCondition( 1, KitbagLock, 0 ) -- Проверка на блокировку инвентаря ( 0 - разблокирован, 1 - заблокирован) TriggerAction( 1, TakeItem, 1000,99 ) -- Забираем определенный предмет ( Чертеж Пачкули - id 1000 ), с определенным кол-вом( 99шт. ). TriggerAction( 1, GiveItem, 3844,1,4 ) -- Отдаем определенный предмет ( Небесное Яблоко - id 3844 ), с определенным кол-вом ( 1 шт. ) ( 4 не трогаем! ) TriggerFailure( 1, JumpPage, 2)
Talk( 2, "Ты не выполнил мои требования! " ) Text( 2, "Хорошо, в следующий раз все принесу... " )
end
Хочется отметить, что количество триггеров в функции диалога может быть большое количество (вспомните распечатку силов у исследователей в Шайтане).
Code InitTrigger() - объявляем скрипту что дальше начнется триггер TriggerCondition() - функция проверки на определенное условие TriggerAction() - функция-действие, то есть выполнение определенных действий в случае, если проверка успешна TriggerFailure() - данная функция выполняется, если условие проверки не выполнено Text( 1, "", MultiTrigger, GetMultiTrigger(), 1) - данная строка запускает триггер
Часто используемые функции в TriggerCondition():
Code HasItem, ID, КОЛИЧЕСТВО - Наличие предмета с указаным ID и в указанном количестве HasMoney, КОЛИЧЕСТВО - Наличие указанного количества денег HasLeaveBagGrid, КОЛИЧЕСТВО - Наличие указанного количества свободных ячеек в рюкзаке KitbagLock, 0 - Блокировка инвентаря, 0 означает что не должен быть заблокирован LvCheck, "ПРОВЕРКА", УРОВЕНЬ - Проверка на уровень персонажа Параметр ПРОВЕРКА может быть следующий: ">" Уровень персонажа больше указанного "<" Уровень персонажа меньше указанного "=" Уровень персонажа равен указанному HasRecord, ID - Наличие записи с указанным ID NoRecord, ID - Отсутствие записи с указанным ID HasCredit, КОЛИЧЕСТВО - Наличие Репутации в указанном количестве IsCategory, ID - Проверяет расу персонажа 1 - Ланс 2 - Карцыз 3 - Филлис 4 - Ами
Часто используемые функции в TriggerAction():
Code TakeMoney, КОЛИЧЕСТВО - Забирает деньги в указанном количестве TakeItem, ID, КОЛИЧЕСТВО - Забирает указанное количество предметов с указанным ID GiveItem, ID, КОЛИЧЕСТВО, 4 - Выдает предмет с указанным ID в указанном количестве JumpPage, ID - Открывает диалог с указанным ID SystemNotice, "ТЕКСТ" - Выводит сообщение в окно с Системный чат DelRoleCredit, КОЛИЧЕСТВО - Забирает репутацию в указанном количестве SetRecord, ID - Ставит запись с указанным ID SetProfession, ID - Устанавливает профессию 0 - новичок 1 - мечник 2 - охотник 4 - мореплаватель 5 - знахарка 8 - чемпион 9 - воитель 12 - стрелок 13 - целительница 14 - колдунья 16 - покоритель морей AddMoney, КОЛИЧЕСТВО - выдает определенное количество золота
Теперь я рассмотрю функцию обменника, как Черный Рынок или Обменник Древесиной:
Code function leo_talkaa() Talk( 1, "Торговец древесиной: Возьмусь за любую работу. Качество гарантирую!" ) Text( 1, "Посмотреть ассортимент.", SendExchangeData) InitExchange()
ExchangeData( 3989 , 99 , 3999 , 20 , 1) ExchangeData( 3990 , 99 , 4000 , 20 , 1) ExchangeData( 3991 , 99 , 4001 , 20 , 1) ExchangeData( 3992 , 99 , 4002 , 20 , 1) ExchangeData( 3993 , 99 , 4003 , 20 , 1) ExchangeData( 3994 , 99 , 4004 , 20 , 1) ExchangeData( 3995 , 99 , 4005 , 20 , 1) ExchangeData( 3996 , 99 , 4006 , 20 , 1) ExchangeData( 3997 , 99 , 4007 , 20 , 1) ExchangeData( 3998 , 99 , 4008 , 20 , 1)
end
При выборе ответа в диалоге, запускается функция SendExchangeData и в окно размещается товар. Давайте рассмотрим подробно строку с товаром:
Code ExchangeData( 3989 , 99 , 3999 , 20 , 1)
3989 - ID предмета, который необходимо продавцу отдать 99 - количество отдаваемых предметов 3999 - ID предмета, который вы получите 20 - количество получаемых предметов
Помог?) ставь +1)
|
|
| |