Азы скриптинга 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 27 2007, 08:50
Сообщение
#2
|
|
Level 4 Класс: Маг Характер: Chaotic Neutral Раса: Танар'ри |
Что-то у меня не все получается…
Сделать так, что бы неписи говорили разные фразы у меня получилось. Просто скопировала вариант с определением object oNpc; То есть string sSpeak; указала, что фраза будет, но не писала какая именно. А потом в каждом блоке добавила строчку: sSpeak = ”фраза”; (фраза_1, фраза_2) А вот с четвертым блоком у меня почему-то не получается. Вроде, если рассуждать логически, то в 4 блоке необходимо сделать проверку на переменную LIRA_PC_DO_IT, 2 и дальше просто ”обнулить” ее. В этом случае скрипт должен будет постоянно работать, присваивая переменные триггеру, затем, обнуляя последнюю, возвращаться снова к 0, то есть к отсутствию переменной. Записала так: [ 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_IT" )== 1 ) { oNpc = GetNearestObjectByTag( "NPC_LIRA" ); sSpeak = "Тухлый банан будет следующий!"; 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, "Сработал третий блок" ); } /* ЧЕТВЕРТЫЙ ВНУТРЕННИЙ БЛОК */ if ( GetLocalInt( oTrigger, "LIRA_PC_DO_IT" ) == 2 ) { oNpc = GetNearestObjectByTag( "NPC_LIRA" ); sSpeak = "Сам ты тухлый банан!"; SetLocalInt( oTrigger, "LIRA_PC_DO_IT", 0 ); SendMessageToPC( oPC, "Сработал четвертый блок" ); } SendMessageToPC( oPC, "Сработал ОСНОВНОЙ блок" ); AssignCommand( oNpc, ClearAllActions( ) ); // Чистим стек команд AssignCommand( oNpc, SpeakString( sSpeak ) ); // Говорит фразу AssignCommand( oNpc, ActionForceMoveToObject( oDoor, TRUE ) ); // Бежит к двери } } Скрипт действительно срабатывает постоянно, но сам 4 блок не работает… Нет фразы из этого блока и неписи бегут только по условиям блока 2 и 3… Когда присваивается переменная LIRA_PC_DO_IT, 2, скрипт продолжая считывать условие, автоматически ее проверяет и тут же обнуляет в 4 блоке. Поэтому в следующий раз, когда игрок наступает на триггер, у триггера уже нет переменной LIRA_PC_DO_IT, 2 и он срабатывает при условии, что LIRA_PC_DO_IT ==0… В модуле это хорошо видно по сообщениям: ”Сработал второй блок” ”Сработал четвертый блок” ”Сработал ОСНОВНОЙ блок” Получается, что задание вроде бы выполнено, все три непися уходят, скрипт работает постоянно, за счет переменных на триггере, а вот с фразами не могу разобраться. Не могу понять, как заставить работать и 4 блок? |
Текстовая версия | Сейчас: 4th May 2024 - 15:12 |