Приветствую Вас ГостьВоскресенье, 01.12.2024, 14:37

Сообщество Робот-ZX6


[Гайд]Все о НПС - Форум

[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: DarkBOY  
[Гайд]Все о НПС
DarkBOYДата: Вторник, 12.06.2012, 18:27 | Сообщение # 1
Бывалый
Группа: Модераторы
Сообщений: 32
Награды: 3
Репутация: 42
Статус: 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 - неизвестно

Вот мы разобрали как поставить НПС на карту. cool

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)
 
  • Страница 1 из 1
  • 1
Поиск:

Чат
Показатель Времени
Статистика
Опрос
Вы верите в светлое будущие?
Всего ответов: 16