![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
![]() ![]()
Сообщение
#1
|
|
Миловидный Бегрюссунг ![]() Класс: Воин Характер: Chaotic Good Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
В данной теме разрешается писать только обучающимся. Если кто-то найдет в моих материалах грубую ошибку, то может сообщить мне или Лексу и мы поправим.
Во первых, забудьте что скрипты это трудно непонятно и сложно. Забудьте все то что бедный ваш мозг пытается обработать безуспешно и вы не можете понять простые вещи. Это нормально. Я буду говорить не по книгам а просто, описывая ситуацию или знания необходимые вам максимально понятно и по возможности проектировать это на бытовом уровне, оперируя образными картинками. Так как именно такие схемы будут работать в вашем случае. Ведь люди с математическим умом все схватывают сами и на лету. Итак начнем. Скрипт сам по себе это маленький файлик. Он работает как любой файл в программе. То что вы пишете в редакторе это NSS просто информация для компилятора, в игре то что написано вами не работает, а работает скомпилированный файл NSC. Поэтому написанное в редакторе и не компельнутое не работает. Как отличить код хорошего кодера от разгильдяя? По аккуратности и описаниям-комментариям. У тех, кто понимает скрипт все правильно, кто не понимает все кидает в кучу. Поэтому сразу учитесь писать красиво и понятно. Сделайте себе шапку для скриптов и пишите в ней, давая описания. В папке скриптов через пол года вы сможете понять кто и что сделал в скрипте и элементарно для чего вам он нужен. Это важно. Аккуратность. Пример шапки скрипта: Neverwinter Script Source //::////////////////////////////////////////////// //:: Name: //:: Copyright © 2006 WRG! Team //::////////////////////////////////////////////// /* Описание */ //::////////////////////////////////////////////// //:: Created By: Aiwan //:: Created On: 06.10.2007 //::////////////////////////////////////////////// void main() { } Дальше. |
![]() |
![]()
Сообщение
#2
|
|
Миловидный Бегрюссунг ![]() Класс: Воин Характер: Chaotic Good Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
Продолжаем.
Итак, мы уже говорили о том, что объект мало описать и представить, его надо точно ОПРЕДЕЛИТЬ. В нашем скрипте про трех НПС мы находили игрока взяв любого, кто наступил на триггер, потом мы поставили условие, что только тот если он представляет из себя РС выполнить следующее. Neverwinter Script Source if( GetIsPC( oPC ) ) // ЕСЛИ тот кто наступил ИГРОК ТО ВЫПОЛНЯЕМ { // ТУТ ЛЮБОЕ ДЕЙСТВИЕ } Этот кусок кода содержит функцию, которая вовращает результат в виде TRUE или FALSE. Вы напряглись и начали дико соображать. О как все сложно! Никапельки. Объясняю. Все функции в тулсете выдают какой то результат, производят действия и т.д. Результат может быть в виде любый знакомых нам данных (integer, object, string, vector и т.д.) либо ИСТИНА/ЛОЖЬ. Мы в нашей скрипте проверяли истино ли то, что тот кто наступил на триггер игрок? Но я написал эту строку сокращенно, по всем правилам она будет выглядеть так: Neverwinter Script Source if( GetIsPC( oPC )==TRUE ) // ЕСЛИ тот кто наступил ИГРОК ТО ВЫПОЛНЯЕМ { // ТУТ ЛЮБОЕ ДЕЙСТВИЕ ЕСЛИ НАСТУПИВШИЙ == ИСТИНА } Вот так правильно описать, но в написании скриптов есть свои сокращений и вам их надо будет знать. Функция GetIsPC проверяет объект на то, игрок он или нет (может он ДМ или НПС). И выдает результат в виде TRUE (ИСТИНА) FALSE (ЛОЖЬ). Если не ставить знак проверки результата что делают многие в описании своих скриптов, то результат ИСТИНА будет внутри скобок а ЛОЖЬ дальше. Теперь смотрите как выглядит сама функция: Neverwinter Script Source // * Returns TRUE if oCreature is a Player Controlled character. int GetIsPC( object oCreature ) Видите, она в самом начале показывает, что результатом будет ЧИСЛОВОЕ значение в нашем случае FALSE это НОЛЬ 0 либо TRUE ЭТО ЕДИНИЦА 1. В компьютере все данные представлены именно в таком виде либо да либо нет (IMG:style_emoticons/kolobok_light/smile.gif) Если разобрать подробно, то функция будет выглядеть так: Neverwinter Script Source int GetIsPC( object oCreature ) // Результат либо FALSE либо TRUE ИГРОК_ЛИ( Объект, который мы проверяем ) Еще я употребил ДВА занка равенства вместе. Это проверка равенства. Вот если я употребляю один знак равно, как в описании объектов, то я ПРИРАВНИВАЮ а не проверяю. Понимаете разницу? Написав "ЛЕКС = ВАНЮЧКА" будет звучать как Лекс ЭТО ВАНЮЧКА! А "ЛЕКС == ВАНЮЧКА" будет означать "Лекс ВАНЮЧКА или нет?" Утверждение "ЛЕКС != ВАНЮЧКА" будет звучать как "Лекс НЕ ВАНЮЧКА!" Код = = Тест равенства ("равняется"). != Тест не равенства ("не равняется"). < Меньше чем, тест равенства > Больше чем, тест равенства <= Меньше или равно, тест равенства >= Больше или равно, тест равенства && Логическое И. & Битовое И. || Логическое ИЛИ. | Битовое ИЛИ. ! Логическое НЕ. Вот все логические операторы. Можно не пугаться нам пока нужны основные и все примеры мы разберем подробно. Вам не надо забивать голову всеми правилами сокращений, главное, что бы вы понимали суть скрипта, а уж пишите как вам удобно и главное ПОНЯТНО. Когда вы научитесь хорошо понимать код вы сами все свои написания приведете в должный порядок. Я сейчас покажу как можно записать один и тот же результат разными способами: Neverwinter Script Source if( GetIsPC( oPC ) ) // ЕСЛИ тот кто наступил ИГРОК ТО ВЫПОЛНЯЕМ if( GetIsPC( oPC )==TRUE ) // ЕСЛИ тот кто наступил ИГРОК равено TRUE if( GetIsPC( oPC )==1 ) // ЕСЛИ тот кто наступил ИГРОК равно 1 if( GetIsPC( oPC )!=FALSE ) // ЕСЛИ тот кто наступил ИГРОК НЕ равно ЛОЖЬ if( GetIsPC( oPC )!=0 ) // ЕСЛИ тот кто наступил ИГРОК НЕ равно 0 Так вот, вернемся в начало. Мы в скрипте брали того, кто наступит на триггер и проверяли это ли игрок? Это очень важно правильно задать вопрос, что бы получить на него правильны и нужный нам ответ для скрипта. В тулсете много функций которые помогают найти объект по действиям последнего: кто наступил, кто сошел, кто ближе, кто получил урон, кто умер и т.д. Естественно на слоте триггера OnEnter трудно получить результат GetLastOpenedBy() (кто последний открыл). Это одна из первых основных ошибок. Учитывайте где утсановлен скрипт и если вы взяли кусок кода из скрипта на сундуке то он может не подойти в описании РС для триггера. Теперь задание. Ваш рабочий скрипт про трех НПС поместите в слот OnExit триггера и опишите игрока правильно при этом условие if(GetIsPC(oPC)) должно быть любым другим способом описанным выше мной. Результаты публиковать, но главное что бы был ответ и понимание того что вы сделали. Отвечать в тему. Жду. |
![]() ![]() |
Текстовая версия | Сейчас: 26th April 2025 - 14:54 |