Будем считать, что уже сделано следующее.
1. Создан интерьер таверны. В данном случае ячейка с ней называется aaaInn7Ways
2. Создан NPC - хозяин таверны. Он должен быть торговцем. В даном случае хозяин - NPC с идентификатором aaaJuli, в самой таверне ему присваиваем имя Juli.
3. Он вставлен в интерьер.
4. Таверна связана с внешним миром.
Далее необходимо настроить NPC для того, чтобы хозяин мог сдавать комнату постояльцу.
Первое - необходимо выбрать комнату, в которую будет селиться постоялец. Дверь в нее обзываем Inn7WaysRentDoor, а кровать - Inn7WaysRentBed. Кровати назначаем хозяина - Juli (на закладке Owenership выбираем из списка NPC - aaaJuli) и отмечаем там же флажок Quest. Для двери - отмечаем там же флажок Quest, на закладке Lock отмечаем флажок Close и выбираем средний уровень замка.
Далее нужно сделать - создать скрипт.
Scriptname Publican_Inn7WaysJuli ;CellName: aaaInn7Ways ;Publican: aaaJuli ;Room: upstairs, last door on the right ;Door Ref: Inn7WaysRentDoor short rent short rentday short rentmonth short cleanup short setup begin gamemode if ( rent == 1 ) if ( setup == 0 ) set rentday to GameDay set rentmonth to GameMonth set setup to 1 Inn7WaysRentDoor.unlock Inn7WaysRentBed.SetOwnership else if ( GameDay != rentday ) set cleanup to 1 elseif ( GameMonth != rentmonth ) set cleanup to 1 endif endif if ( Player.GetInCell WawnetInnTavern == 0 ) if ( Cleanup == 1 ) set Cleanup to 2 endif endif if ( Cleanup == 2 ) set rent to 0 set setup to 0 set rentday to 0 set rentmonth to 0 set cleanup to 0 Inn7WaysRentDoor.SetOpenState 0 Inn7WaysRentDoor.lock 30 Inn7WaysRentBed.SetOwnership aaaJuli endif endif End
Скрипт этот назначаем для aaaJuli.
Следующая стадия - создание диалога. Для этого открываем окно Квестов и выбираем квест BedRental. В нем есть 3 топика - bed, BedNo, BedYes. В каждом из них нужно создать диалоги.
Начнем с bed. Создаем в данном топике новый диалог (нажимаем правую кнопку мыши и выбираем Создать. Давжды щелкаем по заголовку диалога (сейчас Empty) и в верхнем окне вводим текст диалога:
"Конечно, друг, у меня есть комната, которую ты можешь снять. Она наверху, в конце коридора, последняя дверь направо. Всего 20 золотых. Устраивает?"
Далее настраиваем чуствительность (выбираем из списка Happy, значение выставляем 20). После чего нажимаем Ok. Далее настраиваем условия квеста. Нужно создать 2 условия (кнопка New). Для первого выбираем из списка функцию GetIsID (показывает, для какого NPC работает скрипт), в качестве параметра выбираем NPC 'aaaJuli', значение оставляем 1. Для второго условия выбираем функцию GetScriptVariable (для проверки значения переменной скрипта), параметр - 'Juli' + переменную rent. Значение устанавливаем в 0 (поскольку комната еще не снята).
Ну и наконец, нужно добавить в окно Add Topic 2 темы: опять правой кнопкой мыши выбираем Add Topic, в появившемся окне выбираем BedYes, аналогично добавляем тему AddNo.
Следующий диалог - опять в топике bed для случая, если комната уже снята. Текст:
"Хочешь посмотреть свою комнату? Запомни, наверху, в конце коридора. Последняя дверь направо."
Условия те же самые, только значение rent = 1.
Никаких топиков здесь добавлять не надо.
Дальше переходим к топику BedYes.
Для случая, когда 20 золотых есть. Текст:
"Отлично! Твоя комната ждет тебя. Это вверх по лестнице, последняя дверь направо. Спасибо еще раз, желаю хорошо отдохнуть!"
Условия:
Функция GetIsID, в качестве параметра выбираем NPC 'aaaJuli', значение оставляем 1.
Функция GetItemCount (для проверки количества какого-то инвентаря), выбираем 'Gold001' устанавливаем значение >=20. Кроме того, нужно установить флажок OnTarget.
Далее в окне Script вводим:
player.removeitem gold001 20
set aaaJuli.rent to 1
Для случая, когда 20 золотых нет. Текст:
"Послушай, друг, у меня здесь не какая-нибудь ночлежка. Нет золота - нет комнаты. И никаких исключений."
Для условия GetItemCount устанавливаем значение <20.
Для топика BedNo. Тест:
"Хорошо, но ты многое потеряешь. Это отличная комната, и, если честно, мне кажется, тебе бы не помешал отдых."
Одно условие: Функция GetIsID, в качестве параметра выбираем NPC 'aaaJuli', значение оставляем 1.
Все, теперь можно проверять работоспособность мода.
В дальнейшем, если нужно создать какой-то диалог, для него нужно либо выбрать квест, либо создать его. Дальше - по подобию.