Азы скриптинга NWN/NWN2, Итак, начинаем с самого начала... |
Здравствуйте, гость ( Вход | Регистрация )
Азы скриптинга NWN/NWN2, Итак, начинаем с самого начала... |
Oct 6 2007, 19:38
Сообщение
#1
|
|
Миловидный Бегрюссунг Класс: Воин Характер: Chaotic Good Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени |
В данной теме разрешается писать только обучающимся. Если кто-то найдет в моих материалах грубую ошибку, то может сообщить мне или Лексу и мы поправим.
Во первых, забудьте что скрипты это трудно непонятно и сложно. Забудьте все то что бедный ваш мозг пытается обработать безуспешно и вы не можете понять простые вещи. Это нормально. Я буду говорить не по книгам а просто, описывая ситуацию или знания необходимые вам максимально понятно и по возможности проектировать это на бытовом уровне, оперируя образными картинками. Так как именно такие схемы будут работать в вашем случае. Ведь люди с математическим умом все схватывают сами и на лету. Итак начнем. Скрипт сам по себе это маленький файлик. Он работает как любой файл в программе. То что вы пишете в редакторе это NSS просто информация для компилятора, в игре то что написано вами не работает, а работает скомпилированный файл NSC. Поэтому написанное в редакторе и не компельнутое не работает. Как отличить код хорошего кодера от разгильдяя? По аккуратности и описаниям-комментариям. У тех, кто понимает скрипт все правильно, кто не понимает все кидает в кучу. Поэтому сразу учитесь писать красиво и понятно. Сделайте себе шапку для скриптов и пишите в ней, давая описания. В папке скриптов через пол года вы сможете понять кто и что сделал в скрипте и элементарно для чего вам он нужен. Это важно. Аккуратность. Пример шапки скрипта: Neverwinter Script Source //::////////////////////////////////////////////// //:: Name: //:: Copyright © 2006 WRG! Team //::////////////////////////////////////////////// /* Описание */ //::////////////////////////////////////////////// //:: Created By: Aiwan //:: Created On: 06.10.2007 //::////////////////////////////////////////////// void main() { } Дальше. |
Oct 6 2007, 20:37
Сообщение
#2
|
|
Миловидный Бегрюссунг Класс: Воин Характер: Chaotic Good Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени |
Все функции в движке, это какие-то действия и примерно такие же куски кода как пишете вы, но они вставлены в движок и работают когда вы ими пользуетесь: создаете предмет, дестроите его, раздаете команды и т.д. Соотвественно, движок это не идеал, а обыкновенная программа и она имеет много неучтенных, ненайденных или незапротоколированных особенностей в исполнении функций. Поэтому вы должны сразу понять, что ТО ЧТО КОМПЕЛИТСЯ НЕ ВСЕГДА РАБОТАЕТ.
В скриптинге есть определенные типы данных с которыми мы будем работать. Object - объект. Например, НПС, локация и т.д. Стринг String - то что пишем буквами и движок понимает это как надписи. Например в фразы, имена и т.д. Интеджер integer - это целое значение. может быть 1, 10, 25 и т.д. Флоат Float - НЕцелое значение может быть 1.0, 23.04 и т.д. Локация Location - это позиция, местоположение определенная точка. Вектор vector - вектор. Талант talent - я сам не знаю что это (IMG:style_emoticons/kolobok_light/prankster2.gif) Эффект effect - кто много курил и ел всякую гадость в виде наркоты в ПЛ тот знает что это. Когда вы пишите скрипт, то должны понимать что работать можно с данными одного типа, складывать числа или стринги а если вам нужно соеденить что то разное, то тут есть функции конвертирующие одни значения в другие. Но об этом позже. Для начала мы разберем самое простое - присвоене локальной переменной. Neverwinter Script Source // Set oObject's local integer variable sVarName to nValue void SetLocalInt(object oObject, string sVarName, int nValue) Итак, что это такое? Образно, локальная переменная это строка которая вписывается в служебное место любого объекта и состоит из буквенной строки и числового значения. Видите эта функция состоит из трех частей: Объект, Стринг, Число. Попросту вы метите объект и пишете на нем слово вашей переменной писваивая к нему знацение циферкой. Это вроде как повесить на спину Лекса бумажку и написать на ней ВАНЮЧКА, 1. А у Нео повесить бумажку ВАНЮЧКА, 2 и потом по этим данным работать с этимим объектами. Нужен вам ванючка со значением 2, смотрите на спинах у кого бумажка и делаете что вам надо. Так вот. Вы часто сталкивались с такими словами как TRUE и FALSE. Так вот, что бы вам было понятно вопрос КТО ИЗ АДМИНОВ ВАНЮЧКА будет выглядеть так: Лекс - TRUE, Нео TRUE, Айван - FALSE. Но. Движок НВН считает, что если на Айване нет бумажки с надписью ВАНЮЧКА или она есть, но выглядит так "ВАНЮЧКА, 0" то это FALSE. Попросту, если стереть на Лексе 1 и поставить там 0 то результат будет FALSE хоть и табличка будет висеть. Это надо учитывать в некоторых случаях. В виде кода это будет выглядеть так: Присвоим: Neverwinter Script Source void main() { object oAiwan = GetObjectByTag("Aiwan ROOT Boss"); object oLex = GetObjectByTag("LEX Administrator"); object oNeo = GetObjectByTag("NEO Ррразгильдяй"); SetLocalInt(oLex, "VANUCHKA", 1); SetLocalInt(oNeo, "VANUCHKA", 2); } Вот так в скрипте диалога проверить, то что я сказал. Neverwinter Script Source int StartingConditional() { object oLex = GetObjectByTag("LEX Administrator"); if (GetLocalInt(oLex, "VANUCHKA") == 1) { return TRUE; } return FALSE; } Объект может содержать только одно значение переменной. Либо не иметь ее вообще. Скриптом можно менять значение и результаты будут разные. К примеру, в модулях часто одному квесту присваивают одну локальную переменную. А вот от ее значения зависит разные концовки. Что непонятно спрашивайте. |
Текстовая версия | Сейчас: 24th September 2024 - 02:28 |