![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
![]() ![]()
Сообщение
#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 void main( ) { if ( TRUE ) // это ПЕРВЫЙ БЛОК { if ( TRUE ) // это ВНУТРИПЕРВЫЙ БЛОК относится к первому блоку он ВЛОЖЕН в него { // выполняем какое то действие для ВНУТРИПЕРВОГО БЛОКА } // тут выполняется то что мы хотим для ПЕРВОГО БЛОКА } if ( TRUE ) // это ВТОРОЙ БЛОК { // тут выполняется то что мы хотим для ВТОРОГО БЛОКА } if ( TRUE ) // это ТРЕТИЙ БЛОК { // тут выполняется то что мы хотим для ТРЕТЬЕГО БЛОКА } } Теперь мы создадим ситуацию, когда в нашем уже готовом скрипте будет выполнено действие при помощи присвоения переменных внутри блоков. Попросту, мы выполняем проверку. Если условия верны выполняем блок и присваиваем переменную: Neverwinter Script Source void main( ) { object oTrigger = OBJECT_SELF; // То на чем стоит скрипт object oDoor = GetObjectByTag( "DOOR_AIWAN_01" ); // Наша дверь object oNpc; // Объявим НПС но не укажем, кто он именно object oPC = GetEnteringObject( ); // Тот кто НАСТУПИЛ на триггер string sSpeak = "Кто последний тот тухлый банан!"; if( GetIsPC( oPC ) == TRUE ) // Если это верно ТО выполняется то что между скобок { // ПЕРВАЯ открытая скобка /* ВТОРОЙ ВНУТРЕННИЙ БЛОК */ if ( GetLocalInt( oTrigger, "AIWAN_PC_DO_IT" )== 1 ) // Если локалка РАВНА 2 ТО: { // ВТОРАЯ открытая скобка oNpc = GetNearestObjectByTag( "NPC_AIWAN" ); SetLocalInt( oTrigger, "AIWAN_PC_DO_IT", 2 ); SendMessageToPC( oPC, "Сработал второй блок" ); } // ВТОРАЯ закрытая скбка /* ТРЕТИЙ ВНУТРЕННИЙ БЛОК */ if ( GetLocalInt( oTrigger, "AIWAN_PC_DO_IT" ) == 0 ) { // ТРЕТЬЯ открытая oNpc = GetNearestObjectByTag( "NPC_AIWAN" ); SetLocalInt( oTrigger, "AIWAN_PC_DO_IT", 1 ); SendMessageToPC( oPC, "Сработал третий блок" ); } // ТРЕТЬЯ закрытая /* ТУТ НУЖНО ДОПИСАТЬ ЕЩЕ ОДИН БЛОК*/ SendMessageToPC( oPC, "Сработал ОСНОВНОЙ блок" ); AssignCommand( oNpc, ClearAllActions( ) ); // Чистим стек команд AssignCommand( oNpc, SpeakString( sSpeak ) ); // Говорит фразу AssignCommand( oNpc, ActionForceMoveToObject( oDoor, TRUE ) ); // Бежит к двери } // ПЕВАЯ закрытая скобка } В этом скрипте, каждый раз наступая на триггер один НПС бежит к двери. Что бы вам было понятно какой кусок кода работает я работу скрипта пояснил дебаг сообщениями. Этот скрипт сработает ДВА раза. Ваша задача, сделать так, что бы все ТРИ нпс убежали, а попросту, сдобавить один блок внизу, что бы скрипт срабатывал постоянно. Название переменной содержит ВАШ ник. Для самых сообразительных задача посложнее. Сделать так, что бы каждый раз НПС говорили разные фразы. Что неясно спрашивайте. |
![]() ![]() |
Текстовая версия | Сейчас: 26th April 2025 - 14:56 |