Азы скриптинга 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, 04:38
Сообщение
#2
|
|
Level 4 Класс: Маг Характер: Chaotic Neutral Раса: Танар'ри |
Цитата Что бы все блоки работали как ты говоришь, надо просто сделать задержку DelayCommand типа: Понятно. Сделала через DelayCommand() - все заработало! (IMG:style_emoticons/kolobok_light/yahoo.gif) Цитата п.с. А скажи, как еще можно изменить скрипт и сделать все три блока рабочими? Даю подсказку. Ввести новую переменную... Через другую переменную заставить просто работать 4 блок у меня получилось. Перенесла 4 блок наверх, что бы он не сработал сразу после присвоения переменной, и во втором блоке добавила еще одну переменную. [ OFFTOP ] 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_IS" ) == 1 ) // Проверяю вторую переменную { oNpc = GetNearestObjectByTag( "NPC_LIRA" ); sSpeak = "Сам ты тухлый банан!"; SetLocalInt( oTrigger, "LIRA_PC_DO_IS", 2 ); SendMessageToPC( oPC, "Сработал четвертый блок" ); } /* ВТОРОЙ ВНУТРЕННИЙ БЛОК */ if ( GetLocalInt( oTrigger, "LIRA_PC_DO_IT" )== 1 ) { oNpc = GetNearestObjectByTag( "NPC_LIRA" ); sSpeak = "Тухлый банан будет следующий!"; SetLocalInt( oTrigger, "LIRA_PC_DO_IS", 1 ); //Другая переменная SetLocalInt( oTrigger, "LIRA_PC_DO_IT", 2 ); SendMessageToPC( oPC, "Сработал второй блок" ); } /* ТРЕТИЙ ВНУТРЕННИЙ БЛОК */ if ( GetLocalInt( oTrigger, "LIRA_PC_DO_IT" ) == 0 ) { oNpc = GetNearestObjectByTag( "NPC_LIRA" ); sSpeak = "Кто последний тот тухлый банан!"; SetLocalInt( oTrigger, "LIRA_PC_DO_IT", 1 ); SendMessageToPC( oPC, "Сработал третий блок" ); } SendMessageToPC( oPC, "Сработал ОСНОВНОЙ блок" ); AssignCommand( oNpc, ClearAllActions( ) ); // Чистим стек команд AssignCommand( oNpc, SpeakString( sSpeak ) ); // Говорит фразу AssignCommand( oNpc, ActionForceMoveToObject( oDoor, TRUE ) ); // Бежит к двери } } Срабатывают все три блока по очереди, но по одному разу. Все попытки сделать так, что бы скрипт еще и работал постоянно на одних переменных не получается. |
Текстовая версия | Сейчас: 26th September 2024 - 12:28 |