Азы скриптинга 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 29 2007, 06:56
Сообщение
#2
|
|
Миловидный Бегрюссунг Класс: Воин Характер: Chaotic Good Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени |
Neverwinter Script Source void main( ) { object oTrigger = OBJECT_SELF; // То на чем стоит скрипт object oDoor = GetObjectByTag( "DOOR_LIRA_01" ); // Наша дверь object oNpc; object oPC = GetEnteringObject( ); // Тот кто НАСТУПИЛ на триггер string sSpeak; if( GetIsPC( oPC ) == TRUE ) { /* ВТОРОЙ ВНУТРЕННИЙ БЛОК */ if ( GetLocalInt( oTrigger, "LIRA_PC_DO_IT" )== 1 && GetLocalInt( oTrigger, "WAIT" )==FALSE ) { oNpc = GetNearestObjectByTag( "NPC_LIRA" ); sSpeak = "Тухлый банан будет следующий!"; SetLocalInt( oTrigger, "LIRA_PC_DO_IT", 2 ); SendMessageToPC( oPC, "Сработал второй блок" ); SetLocalInt( oTrigger, "WAIT", TRUE ); } /* ТРЕТИЙ ВНУТРЕННИЙ БЛОК */ if ( GetLocalInt( oTrigger, "LIRA_PC_DO_IT" ) == 0 && GetLocalInt( oTrigger, "WAIT" )==0 ) { oNpc = GetNearestObjectByTag( "NPC_LIRA" ); sSpeak = "Кто последний тот тухлый банан!"; SetLocalInt( oTrigger, "LIRA_PC_DO_IT", 1 ); SendMessageToPC( oPC, "Сработал третий блок" ); SetLocalInt( oTrigger, "WAIT", 1 ); } /* ЧЕТВЕРТЫЙ ВНУТРЕННИЙ БЛОК */ if ( GetLocalInt( oTrigger, "LIRA_PC_DO_IT" ) == 2 && !GetLocalInt( oTrigger, "WAIT" )) { oNpc = GetNearestObjectByTag( "NPC_LIRA" ); sSpeak = "Сам ты тухлый банан!"; SetLocalInt( oTrigger, "LIRA_PC_DO_IT", 0 ); SendMessageToPC( oPC, "Сработал четвертый блок" ); SetLocalInt( oTrigger, "WAIT", TRUE ); } SetLocalInt( oTrigger, "WAIT", FALSE ); // SetLocalInt( oTrigger, "WAIT", 0 ); SendMessageToPC( oPC, "Сработал ОСНОВНОЙ блок" ); AssignCommand( oNpc, ClearAllActions( ) ); // Чистим стек команд AssignCommand( oNpc, SpeakString( sSpeak ) ); // Говорит фразу AssignCommand( oNpc, ActionForceMoveToObject( oDoor, TRUE ) ); // Бежит к двери } } В каждом блоке надо сделать проверку двух переменных сразу вот так как на скрипте: Neverwinter Script Source if ( GetLocalInt( oTrigger, "LIRA_PC_DO_IT" ) == 0 && GetLocalInt( oTrigger, "WAIT" )==0 ) Если есть одна переменная и (&&) нет воторй ТО. Сразу же в сработавшем блоке ставим еще ту переменную WAIT какую мы проверяем для одного раза. Теперь любой другой блок не сработает так как мы уже пометили что блок выполнен первый. Дальше скрипт идет вниз и после всех выполнений он присваивает локалку 0. Что бы наступив в следующи раз выполнился блок с переменной 1. Neverwinter Script Source SetLocalInt( oTrigger, "WAIT", FALSE ); // SetLocalInt( oTrigger, "WAIT", 0 ); Понятно? К тому же, я специально написал тебе три разных варианта проверки переменных. Спрашивай (IMG:style_emoticons/kolobok_light/smile.gif) |
Текстовая версия | Сейчас: 27th September 2024 - 09:48 |