Азы скриптинга 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() { } Дальше. |
Nov 6 2007, 09:27
Сообщение
#2
|
|
Миловидный Бегрюссунг Класс: Воин Характер: Chaotic Good Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени |
Vhall, мы присваиваем локалки что бы блоки сработали ОДИН раз за проход скрипта сверху вниз. Посомтри внимательно.
В первом внутреннем блоке мы проверяем переменную AIWAN_PC_DO_IT равную 1. Внутри блока мы поставили эту локальную со значением 2. Тем самым мы сделали так, что бы второй раз наступив на триггер скрипт не сработал внутри этого блока. Neverwinter Script Source /* ВТОРОЙ ВНУТРЕННИЙ БЛОК */ if ( GetLocalInt( oTrigger, "AIWAN_PC_DO_IT" )== 1 ) // СРАБОТАЕТ ВО ВТОРОЙ РАЗ { // Ставим значение 2. Второй раз скрипт этот блок не запустит. Тут проверка на 1 SetLocalInt( oTrigger, "AIWAN_PC_DO_IT", 2 ); } /* ТРЕТИЙ ВНУТРЕННИЙ БЛОК */ if ( GetLocalInt( oTrigger, "AIWAN_PC_DO_IT" ) == 0 ) // ОН СРАБОТАЕТ В ПЕРВЫЙ РАЗ { // Этот блок сработает САМЫЙ первый, так как проверка переменной на ноль // Мы присвоим значение 1. Так как блок с проверкой на 1 вверху выше, то // скрипт не будет ее запускать в этот раз. Мы верх уже прошли и пошлди ниже. SetLocalInt( oTrigger, "AIWAN_PC_DO_IT", 1 ); } /* ТУТ НУЖНО ДОПИСАТЬ ЕЩЕ ОДИН БЛОК*/ if ( GetLocalInt( oTrigger, "AIWAN_PC_DO_IT" ) == 2 ) // СРАБОТАЕТ ВО ВТОРОЙ РАЗ { // Смотрим здесь. Проверка идет на значение 2. Т.е. он попросту ОБНУЛЯЕТ наши // переменные для замкнутого круга. SetLocalInt( oTrigger, "AIWAN_PC_DO_IT", 0 ); SendMessageToPC( oPC, "Сработал четвертый блок" ); } Ты предсталяешь наверное такой расклад: Neverwinter Script Source if ( GetLocalInt( oTrigger, "AIWAN_PC_DO_IT" ) == 0 ) { SetLocalInt( oTrigger, "AIWAN_PC_DO_IT", 1 ); } if ( GetLocalInt( oTrigger, "AIWAN_PC_DO_IT" )== 1 ) { SetLocalInt( oTrigger, "AIWAN_PC_DO_IT", 2 ); } if ( GetLocalInt( oTrigger, "AIWAN_PC_DO_IT" ) == 2 ) { SetLocalInt( oTrigger, "AIWAN_PC_DO_IT", 0 ); } Но он не верен, так как в скрипте ЗА ОДИН раз сработают все три блока а нам надо что бы каждый работал один раз за проход. Мы сделали так: Neverwinter Script Source if ( GetLocalInt( oTrigger, "AIWAN_PC_DO_IT" )== 1 ) { SetLocalInt( oTrigger, "AIWAN_PC_DO_IT", 2 ); } if ( GetLocalInt( oTrigger, "AIWAN_PC_DO_IT" ) == 0 ) { SetLocalInt( oTrigger, "AIWAN_PC_DO_IT", 1 ); } if ( GetLocalInt( oTrigger, "AIWAN_PC_DO_IT" ) == 2 ) { SetLocalInt( oTrigger, "AIWAN_PC_DO_IT", 0 ); } Соотвественно у нас работает первый раз средний блок. Второй раз верхний и нижний следом за ним ОБНУЛЯЯ локалку. В третий раз сработает средний и так далее. Понятно? Добавлено через 50 п.с. В комменте я ошибся там проверка на 1 а я написал 2. Вот ты мог и запутаться. Извини. |
Текстовая версия | Сейчас: 24th June 2024 - 10:24 |