Город Мастеров
IPB

Здравствуйте, гость ( Вход | Регистрация )

 Правила этого форума ПРАВИЛА РАЗДЕЛА
> Азы скриптинга NWN/NWN2, Итак, начинаем с самого начала...
Aiwan
сообщение 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()
{ }


Дальше.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
 
Открыть новую тему
Ответов
Aiwan
сообщение Oct 26 2007, 12:12
Сообщение #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 ) ); // Бежит к двери

   } // ПЕВАЯ закрытая скобка

}


В этом скрипте, каждый раз наступая на триггер один НПС бежит к двери. Что бы вам было понятно какой кусок кода работает я работу скрипта пояснил дебаг сообщениями. Этот скрипт сработает ДВА раза. Ваша задача, сделать так, что бы все ТРИ нпс убежали, а попросту, сдобавить один блок внизу, что бы скрипт срабатывал постоянно. Название переменной содержит ВАШ ник. Для самых сообразительных задача посложнее. Сделать так, что бы каждый раз НПС говорили разные фразы.

Что неясно спрашивайте.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения

Сообщений в этой теме
- Aiwan   Азы скриптинга NWN/NWN2   Oct 6 2007, 19:38
- - Aiwan   Все функции в движке, это какие-то действия и прим...   Oct 6 2007, 20:37
- - Ёжик   Кто такие Интеджер и Флоат? Почему oNeo, oLex, oAi...   Oct 7 2007, 13:03
- - Aiwan   Ёжик, я могу дать все эти понятия, но то что ты по...   Oct 7 2007, 19:44
- - Ёжик   Цитата(Aiwan @ Oct 7 2007, 19:44) я могу ...   Oct 8 2007, 05:31
- - Aiwan   Цитата(Ёжик @ Oct 8 2007, 08:31) ну тогда...   Oct 8 2007, 10:21
- - Griffon   Цитата(Aiwan @ Oct 7 2007, 20:44) Между ...   Oct 8 2007, 11:11
- - Aiwan   Griffon, Я ПРОСТО ПОКАЗАЛ ЧТО ПОЛУЧИТСЯ если не оп...   Oct 8 2007, 12:33
- - Neo   Цитата(Griffon @ Oct 8 2007, 12:11) DURAT...   Oct 8 2007, 12:52
- - Aiwan   Не надо сложных понятий. Не надо пытаться понять ч...   Oct 8 2007, 16:13
- - Solo   ну если я правильно понял задание, то справился с ...   Oct 8 2007, 19:49
- - Aiwan   Да ,все правильно. Но в следующий раз юзай тег NSS...   Oct 8 2007, 21:28
- - Vhall   Neverwinter Script Sourcevoid main() {   obje...   Oct 8 2007, 22:47
- - Artlira   Neverwinter Script Sourcevoid main() {   obje...   Oct 9 2007, 02:22
- - Aiwan   Цитата(Artlira @ Oct 9 2007, 05:22) Мне к...   Oct 9 2007, 09:08
- - Griffon   Neverwinter Script Sourcevoid main() {   ob...   Oct 9 2007, 11:24
- - Aiwan   Вы все поняли, что объект можно представить в любо...   Oct 9 2007, 12:48
- - Artlira   Изменилась сама программа скрипта. Теперь он работ...   Oct 9 2007, 13:18
- - Aiwan   Самое главное что мы сделали? Мы ПОМЕНЯЛИ ефекты.   Oct 9 2007, 13:19
- - Griffon   Цитата(Artlira @ Oct 9 2007, 14:18) а у в...   Oct 9 2007, 13:32
- - Artlira   Если я правильно понимаю, то смысл в том, что скри...   Oct 9 2007, 14:38
- - Griffon   Все верно, основной смысл кода в том - кто и что б...   Oct 9 2007, 14:53
- - Aiwan   Griffon, не гони лошадей многим это будет не понят...   Oct 9 2007, 14:54
- - Griffon   Все, передаю слово учителю. Хотя учащимся стоит по...   Oct 9 2007, 15:01
- - Vhall   QUOTE(Aiwan @ Oct 9 2007, 13:48) Скажите ...   Oct 9 2007, 18:48
- - Griffon   Цитата(Griffon @ Oct 9 2007, 12:24) Never...   Oct 10 2007, 15:35
- - Aiwan   Цитата(Griffon @ Oct 10 2007, 18:35) Поче...   Oct 10 2007, 16:05
- - mamuc   ЦитатаРезультат - 0.85.nss(1): ERROR: ELLIPSIS IN ...   Oct 11 2007, 10:43
- - Griffon   Цитата(mamuc @ Oct 11 2007, 11:43) Griffo...   Oct 11 2007, 11:56
- - mamuc   в тулсете при компиляции обязательно создаеться ф...   Oct 11 2007, 12:12
- - Griffon   Уфффф..... Пока разобрался 2mamuc, спасибо за ...   Oct 11 2007, 13:26
- - Lex   Цитата(Griffon @ Oct 11 2007, 14:26) Скри...   Oct 11 2007, 13:46
- - mamuc   to Griffon только добавь в тобой приведенном приме...   Oct 12 2007, 08:58
- - Aiwan   Такс... Продолжаем разговор (с) Карлсон который жи...   Oct 12 2007, 10:14
- - Artlira   [ OFFTOP ]В первом варианте к определение объекта ...   Oct 13 2007, 02:58
- - Lex   советую так же, как и на внеклассных занятиях, пря...   Oct 13 2007, 09:58
- - Vhall   О! Побежал. -_- [ OFFTOP ]Neverwinter Script S...   Oct 13 2007, 17:45
- - shadowdweller   Бежит! [ OFFTOP ]Neverwinter Script Source// ...   Oct 16 2007, 23:01
- - Aiwan   Продолжаем. Итак, мы уже говорили о том, что объек...   Oct 17 2007, 10:12
- - Artlira   Вот что получилось: [ OFFTOP ]В первом варианте ск...   Oct 19 2007, 11:35
- - Aiwan   Господа и дамы. Так мы все позабываем...Давайте хо...   Oct 20 2007, 12:02
- - Vhall   [ OFFTOP ]Neverwinter Script Source// Поиск чемпио...   Oct 22 2007, 08:51
- - Aiwan   Vhall, ты ошибся. В какой слот ты ставил скрипт? А...   Oct 22 2007, 10:02
- - Vhall   Ну как тебе сказать... -_- Вроде бы.   Oct 22 2007, 10:13
- - Aiwan   Так. Продолжаем. Я уже разбирал в начале, что та...   Oct 26 2007, 12:12
- - Artlira   Что-то у меня не все получается… Сделать та...   Oct 27 2007, 08:50
- - Aiwan   Ты написала все верно, молодец. Я не просил, что б...   Oct 27 2007, 09:21
- - Artlira   ЦитатаЧто бы все блоки работали как ты говоришь, н...   Oct 29 2007, 04:38
- - Aiwan   Neverwinter Script Source void main( ) {   o...   Oct 29 2007, 06:56
- - Artlira   ЦитатаПонятно? К тому же, я специально написал теб...   Oct 31 2007, 09:27
- - Aiwan   Да, все верно. Мы еще один вариант блоков рассмотр...   Oct 31 2007, 10:27
- - Vhall   Что-то написал. Даже компилируется. Работает или н...   Nov 2 2007, 00:22
- - Aiwan   Vhall, мы присваиваем локалки что бы блоки сработа...   Nov 6 2007, 09:27
- - Vhall   Вот так? [ OFFTOP ]Neverwinter Script Sourcevoid m...   Nov 6 2007, 22:51
- - Aiwan   Нет не верно. Если ты хочешь сделать так, то тебе ...   Nov 7 2007, 16:03
- - Vhall   Да, может давай это... дальше?   Nov 7 2007, 20:02
- - Artlira   У меня вопрос. А занятия дальше будут? Очень хочет...   Nov 13 2007, 01:36
- - Aiwan   Будут!   Nov 13 2007, 09:45
- - Aiwan   Продолжаем. Создайте диалог в редакторе с четырмя...   Dec 7 2007, 12:15
- - Artlira   Все получилось. Каждый из заданных неписей произно...   Dec 9 2007, 03:32
2 страниц V   1 2 >


Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 25th April 2024 - 15:27