Добавлен , опубликован
Статья предоставлена сайтом www.fullrest.ru__
Здравствуй, друг! Сегодня, наконец, настало время взяться за серьезное дело настоящего плагинотворца! Вперед же и с песней! За этот короткий, но сложный курс ты обучишься делать полноценный квест с большим количеством завихрушек в нем. Что же мы будем делать? А делать мы будем вот что:
У некого NPC несчастье, во время его путешествия по Морровинду на него напали два диких гуара, каждый из них съел по его любимой рубашке. После чего гуары благополучно разбежались. Необходимо, чтобы NPC попросил нас найти этих гуаров, убить их, и вернуть ему эти рубашки. Ну что? Начнем!
И так данная статья рассчитана на тех творцов, которые уже имеют понятие, как создавать новые объекты, где и как что-нибудь ставить.
  1. Создаем нашего NPC, пусть имя ему будет Мистер Гусь, характеристики его и принадлежность лежит на вашей совести. Ставим нашего Мистера куда необходимо.
  2. Это все для нас не ново :) Но поспешим в диалоги. Для того чтобы успешно писать квесты, нужно понять, что квест это всего-навсего комбинация разных диалогов с десятками различных условий. Чем больше условий и вариантов задействовано, тем сложнее реализация квеста и тем интереснее потом в него будет играть.
Чтобы нормально работать в диалогах, сразу устраняем фильтр на определенного NPC и оставляем это окошко пустым.
Для тех, кто не знает, будем рассматривать по ходу некоторые вкладки. Начинаем с вкладки Greetings/Приветствие, в этой вкладке пишутся те фразы, которые будут произноситься персонажем при начале диалога, причем на начало диалога может влиять множество причин. Существует несколько «гритингов», которые обозначаются цифрами по возрастанию. Компьютерным языком можно сказать, что действие этих «гритингов» работает, как системные прерывания. Соответственно игра начинает просматривать варианты приветственной фразы с «гритинг 0» и до «гритинг 9» пока не встретит приветствие, которое подходит по условиям.
Немного про содержание этих «гритингов»:
  • «гритинг 0» - содержит в себе диалоги с условиями, когда наш герой должен денег закону или просто заслуживает смерти от каких либо НПСов. В «гритинг 0» диалоги в основном заканчиваются атакой.
«гритинг 1» содержит срочные диалоги (почему срочные узнаете из «гритинга 2»). Тут в основном лежат разговоры с Даготами, спящими и некоторые квесты.
  • «гритинг 2» - здесь так же хранятся диалоги не из приятных. В основном в условиях этих приветствий лежит принадлежность героя к вампирам.
  • «гритинг 3» - пуст! Тут лежит всего одно заявление, если вы нарушите правила гильдии Мораг Тонг.
  • «гритинг 4» - здесь и далее уже содержаться квестовые приветствия, а так же все прочие.
Исходя из этого, вы можете судить, куда ставить ваше приветствие. Если то, что вам должен сказать персонаж выше закона, тогда ставьте ваши фразы в самом начале «гритинга 0», если закон имеет значение, а вампиризм не важен, тогда в «гритинг 1», для стандартных игроков и квестов лично я бы порекомендовал пользоваться «гритингом 3» он и пустой, что, безусловно, удобно, так же местоположение его дает возможность перехватывать стандартные выкрики NPC.
Итак, открываем «гритинг 3» и создаем там приветственную фразу, типа «Привет! Не желаешь помочь Гусю?», в условиях говорящему нам нужно поставить только одно – ID говорящего, на примере это aa_gouse
  1. Теперь на будущее нам необходимо создать журнальный раздел, и мы со всей скорости отправляемся во вкладку Journal/Журнал (она самая правая).
Здесь мы видим огромное количество журнальных записей, но нам они не интересны, у нас же скоро появиться своя! Правой мышкой по списку записей, New/Новый и мы уже пишем название нашей журнальной записи, например aa_primer.
После того, как мы создали запись, открываем ее и видим в правой рамке, что запись пуста, правой кнопкой по пустеющей рамкой, создаем новую запись. В первой создаваемой записи практически не нужно ничего писать. (Сразу хочу отметить, что данный обзор подготовлен для CS-ов версии Трибунал и выше. Обладатели первой версии обнаружат несоответствие :)) Значит, как водиться, в первой записи мы пишем название нашего квеста (ведь как мы помним в версии игры с Трибунала, в журнале теперь есть разделение на темы, они же названия квеста. Пишем, что желаем и ставим галочку на значении "заголовок"
  1. Журнал у нас есть, теперь мы всегда сможем вернуться сюда и сделать немаловажные записи. И мы обязательно сделаем это позже! А теперь нам нужно, наконец, создать тему разговора. А то наш NPC сейчас выглядит странно … стоит, понимаете ли, и без конца твердит «помоги гусю, да помоги гусю». Не надо его огорчать, спешим в Topic, они же Темы :)
В темах как раз и будет разворачиваться основная наша квестовая баталия, но нас не испугать! Вперед и с песней! Как мы помним, наш Гусь хочет помощи и говорит «Привет! Не желаешь помоч Гусю?» В виде топика мы можем настроить любой фрагмент этой фразы, возьмем «помоч Гусю» такой топик и создаем. Важно не ошибиться ни в одной букве! Создали? Супер! Теперь нужно написать то, что Гусь будет говорить при нажатии в игре на этот топик. Пишем. Не забываем на всякий случай ставить условия ID нашего NPC. Так же теперь нам необходимо познакомиться с новым для многих из нас столбиком условий, это функции и переменные. Сейчас нам нужно сделать так, чтобы Мистер гусь рассказывал свою историю только тогда, когда журнал с этой историей еще не был записан в журнал самого игрока. Следовательно, ставим по квадратикам: Journal | aa_primer (или любая ваша запись) | = | 0 . Теперь данная фраза будет вылетать из уст нашего Непися, только если журнал с нашей загадочной историей не был открыт.
На данный запрос Гуся нам необходимо как-то ответить, не так ли? Настало время обратить свои взоры в самый низ окошка, в рамку Result/Результат. Сейчас нам нужно сказать, поможем ли мы нашему неписю или нет. Пишем: choice "Не грусти, я помогу тебе!" 1 "Да ну тебя, это не ко мне" 2
Что же мы написали? Интересно? ;) А я объясню :)
Процедура choice означает то, что после фразы NPC у нас появятся варианты ответов на его запрос. После choice в скобках пишутся варианты ответа, их может быть, наверное, ограниченное количество, но не настолько, чтобы нам волноваться об их числе :) После каждого варианта ответа нужно ставить индекс варианта. Индекс варианта это некое число integer, которое, наверное, не может превышать 255, в остальном же ваша фантазия на нумерацию неограниченна. Важно помнить и всегда проверять, чтобы у одного непися не было совпадений с нумерацией choice, то есть, если непись имеет для ваc несколько квестов, значение НИКОГДА не должно совпадать, иначе последствия будут непредсказуемы. И так мы закончили писать choice, и у нас получилось.
  1. На время прервемся от редактирования топиков и обратим свои взоры обратно на нашу журнальную запись, близиться время, когда нам понадобятся запись в журнале, и поэтому спешим и наводим курсор на нашу запись. У меня это aa_primer, теперь нам нужно создать пару записей для работы. Одна запись должна означать окончание квеста, другая же собственно наше задание. Кликаем правой кнопочкой (желательно ниже написанного заголовка). В созданной записи пишем ту запись, которая последует в случае нашего отказа, пусть она звучит так: «Глупый Гусь! Потерял рубахи и думает, я буду ему помогать!» [Тут есть одно маленькое но: создавать квест в журнале стоит только, если игрок принял квест, в противном случае, журнал быстро захламляется неинтересными нам записями - прим. ред.]. Ставим галочку, о том, что эта запись будет окончанием нашего квеста. Теперь настало самое важное в диалогах это индекс записи. Возможно, вы знаете, зачем он нужен, а может, нет. Все равно вам придется читать, что я тут понаписал :) Итак. Значение Index определяет индекс нашей записи, само число, которое вы туда поставите, не имеет особой важности, но нужно, чтобы последовательность индексов была по возрастающей, то есть записи по сюжету должны идти по порядку. Я бы порекомендовал оставлять между записями расстояние в 5 или 10 цифр для неожиданных ответвлений, вариантов прохождения, или на случай если вы забудете какую-нибудь запись. Записям, которые заканчивают сюжет лучше давать последние цифры. Наш сюжет не должен быть большим, поэтому давайте дадим без проигрышный вариант – 99. Теперь у нас есть окончание квеста.
  2. Немного теории о CS. Запись в диалогах создается на строчку выше той строки, по которой мы кликнули правой мышкой при попытке создать запись. Следовательно, на примере журнала, для того чтобы создавать последующие записи в нашей теме и сохранять индексную последовательность нам нужно кликать мышкой по строчку с завершением нашего квеста. Этим мы сейчас и займемся (нам же нужна запись на положительный ответ).
В записи, например, пишем: «Бедный крошка Гусь! У него гуары украли рубашки. Я согласился ему помочь вернуть их» Не забываем проставить индекс записи. Так как это так или иначе стартовая запись поставим ей индекс 1.
Теперь у нас есть журнальные заготовки с положительной и отрицательной записью.
  1. Теперь нам как раз в пору вернуться. Идем в топики. Видя список всех тем, навивается песенка «Как много топиков хороших…» Трудно там найти наш «помочь Гусю», но поискать придется :)
Находим наш топик и приступаем к работе. Создаем новую запись, перед нашей старой. Помните, как я учил? Да да кликаем правой мышкой прямо по нашей первой записи и давим New.
Начинается самое интересное и самое главное в квестостроении и диалогах. Так что запишите себе этот пункт на листочек, или распечатайте, а потом повесьте куда-нибудь на стену рядом с компьютером.
И так сейчас нам нужно просчитать написанные нами не так давно «чоисы» (choice). Начнем, пожалуй, с «чоиса» номер 2, а точнее с того, где мы отказываем Гусю (все-таки нужно поскорее закрыть этот безальтернативный вариант).
И так мы имеем новую запись, в нее мы пишем разочарованную фразу Гуся на наш отказ, например: «Как обидно, что ты решил закрыть для себя такую крутую квестовую ветку.» Теперь нам необходимо определить условие для данного заявления, ведь не сам Гусь догадается, что и как. Не забываем всегда проставлять ID в условиях. Теперь нам нужно определить, что данную фразу он скажет по заявлению, что мы не будем ему помогать. Обратим внимание на почти забытую нами Function/Variables они же Функции и переменные. Что это такое? – спросите вы. На самом деле все очень просто.
Данная группа элементов на форме предназначена для создания уникальных условий для говоруна. Это может быть запись в журнале, наш любимый «чоисе», наличие или неимение определенной вещи и даже состояние характеристик персонажа.
В первое окошко мы должны проставить функцию по которой будем вести отбор. Рассмотрим их:
  • Function – здесь собраны все важные функции о персонаже и диалоге. Как раз там храниться наш «чоисе» так же там вы найдете отбор по свойствам игрока, состояние погоды и многое другое.
  • Global – здесь хранятся созданные нами и разработчиками глобальные переменные. В данном обзоре мы не будем их касаться, так как это дело больше касается сриптования. Но если в двух словах то это такие придуманные программистами переменные в которых может содержаться определенное число, по которому так же можно строить свой отбор в диалоге
  • Local – тоже переменные, только на этот раз это переменные которые непосредственно присутствуют в ячейке с игроком, такие как координаты игрока, время и так далее
  • Journal – журнал. Здесь мы можем отфильтровать заявление непися по состоянию журнала, под этой функцией мы можем выбрать любую запись их журнала и проверить ее индекс на данный момент
  • Item – наверное, сразу ясно многим, что это не что иное, как предметы, находящиеся в распоряжении игрока (т.е. лежат в инвентаре). Здесь мы располагаем полным списком ID всех предметов из игры.
  • Dead – функция проверки на смерть, т.е. эта функция, располагает полным списком неписей в игре. И по их живучести можно регулировать диалог. Если непись жив то значение этой переменной у него равна 0, если мертв, то 1, например: Dead aa_gouse = 0 утверждение верное и если его поставить на какую-нибудь фразу, неписи будут говорить ее только если непись с ID “aa_gouse” будет жив.
  • Not ID – тут можно поставить чтобы эту фразу говорил кто угодно но не обладатель указанного ID. Тут чтобы это исполнялось нужно поставить “=1”
  • Not Faction – эту фразу будут говорить все кроме указанной фракции
  • Not Class – будут говорить только не обладатели указанного класса
  • Not Race – то же самое, только с расой
  • Not Cell – будут говорить где угодно и кто угодно (но только не в указанной ячейке)
  • Not Local – все что угодно, только бы локальная переменная не была бы равно указанной цифре.
Еще не забыли о чем мы? Да да именно! Нас сейчас интересует «чоисе» вот и ставим: Function Choice = 2 (мы ведь помним что отрицательный ответ у нас отмечен значением 2?) Вот. Теперь скажет эту фразу у нас только Гусь и только если мы ему откажем. Но нам нужно как-то обозначить это? Обратим свои взоры снова в Result (у кого перегруз, то это рамка снизу). Как вы помните у нас есть запись в журнале, которая означает окончание квеста, нам нужно ее отписать, пишем в результате: Journal “aa_primer” 99
Вы же помните, что на окончание квеста мы поставили индекс 99? Вот поэтому эта команда звучит так.
Кстати, если на новой строчке в Результате поставить Goodbye, то наш Гусь, кроме всего, наглым образом откажется продолжать нашу беседу.
  1. Настало время создать положительный ответ и приняться, наконец, за выполнение этого непроходимого квеста. Жмем правой кнопкой мышки по нашему отрицательному ответу (вообще в топиках я бы порекомендовал все, что пишется писать снизу вверх, потому что если писать вниз, пользуясь более простыми условиями, наш подлый движок может остановиться на какой-нибудь приветственной фразе).
И так создали реакцию на положительный ответ и написали там что-нибудь радостное, например: «Ура! Как добудешь рубашки из гуаров принеси их мне». По быстрому проставляем в условиях ID и Function Choice 1 (думаю понятно, почему). И в результатах быстро-быстро пишем положительную и я не побоюсь этого слова стартовую запись: Journal “aa_primer” 1
На этом мы завершаем начало нашего квеста и с этой секунды можно считать что наш квест начался. Но на самом деле радоваться рано, нужно провести пару очень важных фиксов. Этим мы и займемся в следующей части.
  1. Когда вы пишите квесты и ваш квест содержит разветвленные диалоги и множество NPC участвующих в одном задании возникает ряд проблем с совместимостью. Точнее сказать просто NPC могут путаться и, например, стоит пропустить в каком-нибудь маловажном топике изменение журнальной записи, как посещение этой записи впоследствии проявит очень неприятный глюк, которым непременно воспользуются ваши недоброжелатели чтобы посмеяться над вами и вашим творением. Такой заплатки требует и даже наш крохотный квест. Помните? Нам же дали задание. А если мы начнем говорить с гусем он ничего, не подозревая, начнет снова ныть и предлагать этот же квест. Необходимо заглушить Гуся!
Срочно спешим в Greetings (Приветствия) и идем в наш «гритинг 3» (вы же еще помните, что именно там мы ведем наш приветственный диалог с Гусем). Кликая по самой первой записи мы создаем новое приветствие непосредственно перед начальным приветствием. Помните? У нас же есть возможность отказать Гусю в выполнении данного квеста. Тут у нас на самом деле есть две возможности. Если бы мы не использовали 99-ую запись в журнале, а пропустили попросту без результатов отрицательный ответ, то у нас бы была возможность в случае чего как ни в чем небывало прийти снова к Гусю и запросить квест. Но так как у нас есть 99-ая запись. Значит, придется ограничивать возможность повторной попытки. Пишем, например: «Пришел посмеяться над бедным Гусем? Уйди! Я не хочу с тобой разговаривать!». В условиях проставляем ID, а так же в переменных пишем следующее Journal aa_primer = 99, из чего следует, что в случае нашего отказа помочь ему теперь Гусь будет говорить нам выше написанное. И для того чтобы исключить возможность пролазки в топик с «помощью Гусю» (на самом деле для того чтобы лишний раз не мучаться) мы в Результате этой фразы ставим Goodbye. Этим самым мы начисто перерезали доступ к квестодателю Гусю в случае отказа ему помогать.
  1. Теперь нам нужно подготовить приветствие на выполнение квеста. Создаем еще одну запись, но второй в списке (для этого кликая правой кнопкой мышки по ныняшнему второму сообщению). Теперь нам нужно написать какое-нибудь приветствие, которое будет у нас универсальным квестовым приветствием. Такое приветствие должно содержать топик, например наш старый «помочь Гусю» или же можно завести новый. Например, напишем: «Привет %PCName! Помнишь? Ты обещал помочь Гусю». Проставляем ID говорящего и функции. Сейчас нам нужно проставить функцию
Как мы помним, нам нужно создать универсальное приветствие на все времена. Сейчас у нас всего одна положительная запись, но их может быть много! Поэтому мы ставим Journal aa_primer >= 1 чтобы Гусь говорил нам это всегда, начиная с первой записи и дальше. Результат нам не нужен.
Теперь хотелось бы обратить внимание на важную деталь. Как мы видим мы поставили условие на журнал >=1 но если поднатужить память мы вспомним что запись 99 совсем не положительная, но вполне подходит под данное условие. Но в нашем примере об этом не стоит беспокоиться, потому что условие на =99 идет перед этим сообщением. Следовательно, так как программа проходит сверху вниз, 99-й индекс будет вовремя перехвачен нашим отрицательным сообщением. Но если этого, по какой то причине в будущем у вас не случиться в положительном сообщении, можно задействовать вторую функцию, например Journal aa_primer <99. Поставив такое условие, мы намертво защитим его он нежелательных клиентов. Помните это.
  1. Радоваться рано :) Еще раз придется вернуться в топики :) Идем в наш «помочь Гусю»
Забегались? А думаете мне интересно все это делать да еще и описывать каждый пункт? Я, между прочим, мог бы вполне пойти выпить молока с сушками, а нет, сижу тут вам отписываю всякие глупости, которые вы и читать то не будете :)
Ну, чего? Нашли топик? Ну, так теперь нам нужно сделать одно быстрое сообщение где за неимением рубашек Гусь нас будет отсылать. Начнем. Создаем, как и прежде сообщение, первое по списку. И пишем там, например: «Как ты помнишь, у меня Гуары утащили две рубашки. Верни мне их, пожалуйста». Условием данного заявления как обычно служит ID нашего непися, а так же одно условие в Функциях, а звучит оно так: Item aa_rubaha <2, где aa_rubaha, предварительно созданная вами оригинальная рубашка. Собственно тут может быть любой предмет, даже не оригинальный. Но в нашем квесте Гусю нужны именно его рубашки, а значит, просто так они нигде не валяются. В итоге мы получаем условие того, что Гусь говорит нам эту фразу тогда и только тогда, когда количество его рубах в нашем инвентаре меньше двух. Для того чтобы игрок долго не думал можно прописать в результатах Goodbye
  1. Этот пункт рассчитан на твое творчество, дружок. В нем тебе предстоит увлекательная задача. Тебе нужно создать каких-нибудь двух гуаров (обязательно новый ID, ведь мы будем пихать им в брюхо рубахи). Пропихнуть им эти самые рубашки Гуся в брюхо и поставить куда-нибудь на местности
  1. Гуары расставлены, покормлены и готовы умереть. Нам же пора закругляться :)
Возвращаемся в диалоги, сразу бегом в топик «помочь Гусю» (с приветствиями у нас все в норме). И создаем очередную запись, снова первой в списке. Пишем там следующее: (можно даже повторить предыдущее) «Ну как там с рубахами, минхер?». В условиях прописываем ID Гуся (надеюсь, задолбил вам в голову, наконец), а в Функциях пишем Item aa_rubaha = 2, что значит, что Гусь заговорит это если в инвентаре у нас будет две его рубахи. В результатах пишем уже подзабытый, но всегда любимый нами «чоисе»: choice «Да, сквозь пот и кровь, но я добыл тебе твоих рубахи, держи» 3
Почему индекс «чоиса» мы поставили 3? Ну, если у вас возник такой вопрос то можете закрыть это окно и забыть о мечте делать квесты. Ведь как я говорил немного выше индексы «чоисов» у NPC не могут быть одинаковыми, а «чоисы» 1 и 2 мы уже использовали.
Отмечу, что мы используем упрощенную систему квеста, как я ее называю «автоматизированную». Если делать нечего, можно так же сделать дополнительные варианты ответа, типа «Да принес, но я их пока поношу сам» и прочее, что просто-напросто оттягивает выполнение квеста. Пользователями всегда приветствуется, но лично я считаю, что это излишек.
  1. Наградительный и можно сказать заключительный пункт :)
Создаем очередную первую запись. В которой пишем радостное заявление Гуся: «Ура! Спасибо огромное, я тебя буду помнить всегда!». В условиях пишем ID Гуся, в Функциях проставляет реакцию на «чоисе» Function Choice = 3. В результатах пишем… что пишем… много чего пишем :) Во-первых, нужно отобрать у нас рубахи :) player->removeitem “aa_rubaha” 2, где 2 – количество отбираемых рубах. Потом нужно дать их Гусю (совершенно не обязательно, но приветствуется) “aa_gouse”->additem “aa_rubaha” 2, после этого нам нужно получить какую-нибудь награду, пусть это будет 100 монет :) player->additem “gold_001” 100, и напоследок наше торжество нужно прописать в журнал (знаю, что пока свободных записей журнальных у нас нет, но у нас еще есть время туда сходить) Journal “aa_primer” 5, где 5 – будущий индекс нашей записи.
Вот собственно и все… в этом пункте :)
  1. Уж какой пункт я пытаюсь с вами попрощаться :) Наверное, все-таки это последний рабочий пункт :) Бежим на всех парах в Журнал, где создаем очередную запись (кликая правой мышкой по записи с 99-м индексом). В созданной записи пишем что-то вроде «Я принес Гусю рубахи, он плакал как кот». Индекс как мы помним я придумал этой записи за номером 5, следовательно, его и ставим.
Если в вашем сюжете на Гуся больше не рассчитано квестов, как в нашем случае не забываем ставить галочку «Конец квеста», в нашем примере это именно так, поэтому я ставлю. Вы же в ваших будущих работах можете не заканчивать журнальные записи на одном квесте, ведь бывают целые эпопеи, аля Дагот Ур :) Вот собственно и все дела в журнале, но у нас осталось одно незавершенное дело. Им мы и займемся (заодно титры почитаете)
  1. И так действительно последний пункт, где нам нужно поставить очередную заслонку на квест. Он будет выполнен в виде так сказать домашнего задания и проверки на понимаемость всей теории квестосоздания. Идем в приветствия, находим наш «гритинг 3», создаем очередную первую запись, где пишем «О! Мой друг %PCName! Чего надобно?», в условиях ставим Гусиный ID, а в Функции прописываем Journal aa_primer = 5. Этим самым мы сделали так, что после выполнения квеста наш Гусь больше не будет намекать на помощь ему, но топик то остается! Значит, идем в топики, находим «помочь Гусю», создаем очередную первую запись и пишем там «Спасибо, больше мне ничего от тебя не надо», с аналогичными условиями Гусю, как и в «гритингах».
Если вы делаете эпопею и на одном квесте дело не ограничивается нужно этот пункт видоизменить, оставить старое сообщение в «гритингах», а вместо заявления Гуся что ему ничего не нужно выдать игроку очередной квест (конечно с новой записью в журналах и прочим) но это уже совсем другая история :)

Информация к размышлению

Здесь я немного коснусь тех пунктов написания квестов, которые мы не использовали в нашем примере, но они вся полученная далее информация наверняка пригодится.
  1. Немного о переменных
Иногда нам требуется ввести свою переменную для использования ее в квесте, например эта переменная может вести подсчет убитых оленей. Для этого нам нужно объявить новую переменную в меню Gameplay/Globals. Там мы увидим целый список используемых в игре переменных, смело нажмем New и создадим свою, с оригинальным названием. После чего обратим внимание, что переменные могут быть нескольких типов: Short, Long и Float
Short – переменная целых чисел может быть от 0 до 255
Long – так же переменная целых чисел но значение в ней может иметь гораздо большее значение, но есть больше памяти
Float – переменная с плавающей точкой, позволяет хранить в себе не целые числа, такие как, например 3, 52627. Обычно переменная Float используется для не точных значений, например координаты
После объявления переменной в этом меню, ее можно использовать где угодно в игре. Например, пример скрипта, который, после того как мы его повесим на определенного персонажа, будет прибавлять нашей переменной по единице за каждый труп данной особи.
Startscript aa_trupolenya ; где aa_trupolenya название скрипта
If ( OnDead == 1)
	Set aa_trupov to aa_trupov+1 ; где aa_trupov название переменной
Endif
Endscript
Потом переменную aa_trupov можно будет использовать в условиях диалога у нашего персонажа. Например, вспомнив недавних Гуаров, если бы мы повесили этот скрипт на них, можно было бы поставить условие на конец квеста Global aa_trupov = 2, что означало бы, что Гусь заговорил бы с нами об окончании квеста и попросил бы рубахи только при смерти обоих Гуаров [это не совсем верно, так-как игрок может и не взять рубашки - прим. ред].
Так с помощью процедуры SET имя_переменной TO значение_переменной можно давать различные значения глобальным и локальным переменным не только в скриптах, но и в окошке Result в диалогах.
  1. Функция NoLore и Addtopic
Функция NoLore является встроенной функцией. Польза от нее очень большая. Достаточно объявить в скрипте любого NPC простую фразу NoLore (кстати, для тех, кто не любит копаться в скриптах уже готов такой скрипт, он носит одно название с нашей функцией) все стандартные топики нашего NPC исчезнут в небытие. Очень полезно сказал бы я, когда вам нужен NPC, и совершенно не нужны его познания в различных стандартных темах Морровинда. И у него будут появляться только топики, о которых он сам упомнит в процессе разговора.. или не только? Ведь иногда нужны некоторые темы, что делать тогда? Для этого существует функция Addtopic. С помощью этой функции, вставленной в скрипт персонажа, (только не надо всовывать эту функцию в стандартные скрипты, уже имеющиеся в игре, например тот же самый NoLore, если вам нужно и то и другое, создайте свой скрипт) вы можете добавить насильно какой-нибудь определенный стандартный топик, не затронутый непосредственно диалогом, в нашего непися. Синтаксис звучит так: AddTopic “название_топика”. Эта функция, так же как и многие другие, удачно интегрируется в сам диалог и поле Result, где например, после специально подготовленного для NPC, или группы NPC «гритинга» в результате будет прописан ряд стандартных топиков. ВНИМАНИЕ! На каждый топик требуется свой Addtopic.
P.S. Прошу заметить один не приятный факт. Он в том, что функция NoLore была написана во времена Морровинда, и не распространяется на топики аддонов (Трибунал и Блудмун). Печально, но факт
От автора:
Сразу хочу заявить, друг, что даже после этого руководства ты не понял ничего в квестосоздании, то мой тебе совет, забудь это и вернись к мирскому занятию… играй в ФунАлекс :))))
Титры:
Lord Alex – только настоящий флудер мог написать столько глупости в одном файле :)
Helmut – спасибо за замечания и предложения :)