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

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

 Правила этого форума ПРАВИЛА РАЗДЕЛА
4 страниц V  < 1 2 3 4 >  
Ответить в эту темуОткрыть новую тему
> Азы скриптинга NWN/NWN2, Итак, начинаем с самого начала...
Aiwan
сообщение Oct 31 2007, 10:27
Сообщение #51


Миловидный Бегрюссунг
Иконки Групп

Класс: Воин
Характер: Chaotic Good
Раса: Человек
NWN: Модмейкер
Проклятие Левора
Порядок Времени



Да, все верно. Мы еще один вариант блоков рассмотрим. Подожденм остальных. (IMG:style_emoticons/kolobok_light/declare.gif)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Vhall
сообщение Nov 2 2007, 00:22
Сообщение #52


Level 19
Иконки Групп

Класс: Обыватель
Характер: True Neutral
Раса: Дварф
NWN: Контент



Что-то написал. Даже компилируется. Работает или нет - сказать не могу - не понятен нужный результат.
Для чего мы ставим и проверяем локалки? Откомментировал вопросами.
[ OFFTOP ]
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 ТО: //почему "2"? не 1?
    { // ВТОРАЯ открытая скобка

        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, "Сработал третий блок" );
    }  // ТРЕТЬЯ закрытая

    /* четвертый внутренний блок */
   
    if ( GetLocalInt( oTrigger, "AIWAN_PC_DO_IT" ) == 0 ) //?
    { // четвертая открытая

        oNpc = GetNearestObjectByTag( "NPC_AIWAN" );
        SetLocalInt( oTrigger, "AIWAN_PC_DO_IT", 3 ); //?
        SendMessageToPC( oPC, "Сработал четвертый блок" );
    }  // четвертая закрытая

      SendMessageToPC( oPC, "Сработал ОСНОВНОЙ блок" );
      AssignCommand( oNpc, ClearAllActions( ) ); // Чистим стек команд
      AssignCommand( oNpc, SpeakString( sSpeak ) ); // Говорит фразу
      AssignCommand( oNpc, ActionForceMoveToObject( oDoor, TRUE ) ); // Бежит к двери

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

}
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Aiwan
сообщение Nov 6 2007, 09:27
Сообщение #53


Миловидный Бегрюссунг
Иконки Групп

Класс: Воин
Характер: Chaotic Good
Раса: Человек
NWN: Модмейкер
Проклятие Левора
Порядок Времени



Vhall, мы присваиваем локалки что бы блоки сработали ОДИН раз за проход скрипта сверху вниз. Посомтри внимательно.

В первом внутреннем блоке мы проверяем переменную AIWAN_PC_DO_IT равную 1. Внутри блока мы поставили эту локальную со значением 2. Тем самым мы сделали так, что бы второй раз наступив на триггер скрипт не сработал внутри этого блока.

Neverwinter Script Source

    /* ВТОРОЙ ВНУТРЕННИЙ БЛОК */

    if ( GetLocalInt( oTrigger, "AIWAN_PC_DO_IT" )== 1 ) // СРАБОТАЕТ ВО ВТОРОЙ РАЗ
    {

      // Ставим значение 2. Второй раз скрипт этот блок не запустит. Тут проверка на 1
        SetLocalInt( oTrigger, "AIWAN_PC_DO_IT", 2 );
    }

    /* ТРЕТИЙ ВНУТРЕННИЙ БЛОК */

    if ( GetLocalInt( oTrigger, "AIWAN_PC_DO_IT" ) == 0 ) // ОН СРАБОТАЕТ В ПЕРВЫЙ РАЗ
    {
        // Этот блок сработает САМЫЙ первый, так как проверка переменной на ноль
        // Мы присвоим значение 1. Так как блок с проверкой на 1 вверху выше, то
        // скрипт не будет ее запускать в этот раз. Мы верх уже прошли и пошлди ниже.
        SetLocalInt( oTrigger, "AIWAN_PC_DO_IT", 1 );
    }

    /* ТУТ НУЖНО ДОПИСАТЬ ЕЩЕ ОДИН БЛОК*/

    if ( GetLocalInt( oTrigger, "AIWAN_PC_DO_IT" ) == 2 ) // СРАБОТАЕТ ВО ВТОРОЙ РАЗ
    {
    // Смотрим здесь. Проверка идет на значение 2. Т.е. он попросту ОБНУЛЯЕТ наши
    // переменные для замкнутого круга.
        SetLocalInt( oTrigger, "AIWAN_PC_DO_IT", 0 );
        SendMessageToPC( oPC, "Сработал четвертый блок" );
    }


Ты предсталяешь наверное такой расклад:

Neverwinter Script Source

    if ( GetLocalInt( oTrigger, "AIWAN_PC_DO_IT" ) == 0 )
    {
        SetLocalInt( oTrigger, "AIWAN_PC_DO_IT", 1 );
    }

    if ( GetLocalInt( oTrigger, "AIWAN_PC_DO_IT" )== 1 )
    {

        SetLocalInt( oTrigger, "AIWAN_PC_DO_IT", 2 );
    }

    if ( GetLocalInt( oTrigger, "AIWAN_PC_DO_IT" ) == 2 )
    {
        SetLocalInt( oTrigger, "AIWAN_PC_DO_IT", 0 );
    }


Но он не верен, так как в скрипте ЗА ОДИН раз сработают все три блока а нам надо что бы каждый работал один раз за проход. Мы сделали так:

Neverwinter Script Source

    if ( GetLocalInt( oTrigger, "AIWAN_PC_DO_IT" )== 1 )
    {

        SetLocalInt( oTrigger, "AIWAN_PC_DO_IT", 2 );
    }
    if ( GetLocalInt( oTrigger, "AIWAN_PC_DO_IT" ) == 0 )
    {
        SetLocalInt( oTrigger, "AIWAN_PC_DO_IT", 1 );
    }

    if ( GetLocalInt( oTrigger, "AIWAN_PC_DO_IT" ) == 2 )
    {
        SetLocalInt( oTrigger, "AIWAN_PC_DO_IT", 0 );
    }

Соотвественно у нас работает первый раз средний блок. Второй раз верхний и нижний следом за ним ОБНУЛЯЯ локалку. В третий раз сработает средний и так далее. Понятно?

Добавлено через 50

п.с. В комменте я ошибся там проверка на 1 а я написал 2. Вот ты мог и запутаться. Извини.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Vhall
сообщение Nov 6 2007, 22:51
Сообщение #54


Level 19
Иконки Групп

Класс: Обыватель
Характер: True Neutral
Раса: Дварф
NWN: Контент



(IMG:style_emoticons/kolobok_light/scratch_one-s_head.gif) Вот так?
[ OFFTOP ]
Neverwinter Script Source
void main( )
{
  object oTrigger = OBJECT_SELF; // То на чем стоит скрипт
  object oDoor = GetObjectByTag( "PLC_DC_Slum01" ); // Наша дверь
  object oNpc; // Объявим НПС но не укажем, кто он именно
  object oPC = GetEnteringObject( ); // Тот кто НАСТУПИЛ на триггер
  string sSpeak = "Кто последний тот тухлый банан!";

  if( GetIsPC( oPC ) == TRUE ) // Если это верно ТО выполняется то что между скобок
  { // ПЕРВАЯ открытая скобка

    /* ВТОРОЙ ВНУТРЕННИЙ БЛОК */

    if ( GetLocalInt( oTrigger, "VHALL_PC_DO_IT" )== 1 ) // Если локалка РАВНА 2 ТО:
    { // ВТОРАЯ открытая скобка

        oNpc = GetNearestObjectByTag( "n_watchman" );
        SetLocalInt( oTrigger, "VHALL_PC_DO_IT", 2 );
        SendMessageToPC( oPC, "Сработал второй блок" );

    } // ВТОРАЯ закрытая скобка

    /* ТРЕТИЙ ВНУТРЕННИЙ БЛОК */

    if ( GetLocalInt( oTrigger, "VHALL_PC_DO_IT" ) == 0 )
    { // ТРЕТЬЯ открытая

        oNpc = GetNearestObjectByTag( "n_watchman" );
        SetLocalInt( oTrigger, "VHALL_PC_DO_IT", 1 );
        SendMessageToPC( oPC, "Сработал третий блок" );
    }  // ТРЕТЬЯ закрытая

    /* четвертый внутренний блок */
   
    if ( GetLocalInt( oTrigger, "VHALL_PC_DO_IT" ) == 2 )
    { // четвертая открытая

        oNpc = GetNearestObjectByTag( "n_watchman" );
        SetLocalInt( oTrigger, "VHALL_PC_DO_IT", 3 );
        SendMessageToPC( oPC, "Сработал четвертый блок" );
    }  // четвертая закрытая

      SendMessageToPC( oPC, "Сработал ОСНОВНОЙ блок" );
      AssignCommand( oNpc, ClearAllActions( ) ); // Чистим стек команд
      AssignCommand( oNpc, SpeakString( sSpeak ) ); // Говорит фразу
      AssignCommand( oNpc, ActionForceMoveToObject( oDoor, TRUE ) ); // Бежит к двери

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

}
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Aiwan
сообщение Nov 7 2007, 16:03
Сообщение #55


Миловидный Бегрюссунг
Иконки Групп

Класс: Воин
Характер: Chaotic Good
Раса: Человек
NWN: Модмейкер
Проклятие Левора
Порядок Времени



Нет не верно. Если ты хочешь сделать так, то тебе твой последний блок что ты нарисовал надо поместить в самый верх. Зачем понятно или нет? Посомтри внимательно. У нас первый блок проверяет 1, второй 0, третий 2. Скрипт идет сверху вниз. Единица у нас проверяется вверху, так как в блоке на проверку 0 мы присвоили 1. Если бы блок с проверкой на 1 стоял после блока проверки на ноль, то сразу бы сработал следом за блоком проверки на 0. Что в сущности происходит и у тебя. Первый блок проверка на 1 (увеличили до 2), следом проверка на 0, скрипт его пропустит но опятть зайдет в блок проверки на 2 и там снова твои данные. Он выполнит их и присвоится 3. Так что если ты хочешь все три блока выполнить, то должен учитывать условие: ЕСЛИ СРАБОТАЛ БЛОК, ТО НИЖНИЕ БЛОКИ НЕ ДОЛЖНЫ СРАБОТАТЬ ПОСЛЕ ЕГО УСЛОВИЙ ЕСЛИ ТЕБЕ ЭТО НЕ НАДО.

В общем тебе сложно это? Если да не заморачивайся. Я немного сложновато дал для новичков. Поймешь потом.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Vhall
сообщение Nov 7 2007, 20:02
Сообщение #56


Level 19
Иконки Групп

Класс: Обыватель
Характер: True Neutral
Раса: Дварф
NWN: Контент



Да, может давай это... дальше?
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Artlira
сообщение Nov 13 2007, 01:36
Сообщение #57


Level 4
**

Класс: Маг
Характер: Chaotic Neutral
Раса: Танар'ри



У меня вопрос. А занятия дальше будут? Очень хочется учиться... (IMG:style_emoticons/kolobok_light/unsure.gif)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Aiwan
сообщение Nov 13 2007, 09:45
Сообщение #58


Миловидный Бегрюссунг
Иконки Групп

Класс: Воин
Характер: Chaotic Good
Раса: Человек
NWN: Модмейкер
Проклятие Левора
Порядок Времени



Будут!
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Aiwan
сообщение Dec 7 2007, 12:15
Сообщение #59


Миловидный Бегрюссунг
Иконки Групп

Класс: Воин
Характер: Chaotic Good
Раса: Человек
NWN: Модмейкер
Проклятие Левора
Порядок Времени



Продолжаем.

Создайте диалог в редакторе с четырмя корневыми строками:
1. Эта строка первого НПС.
2. Это строка второго НПС.
3. Это строка третьего НПС.
4. Я безымянный!

Теперь у вас три НПС было, создайте еще пару. Вставьте диалог один на всех ваших НПС.
Трем первым НПС измените теги на такие: NPC_ВАШ_НИК_01, NPC_ВАШ_НИК_02, NPC_ВАШ_НИК_03.
Создайте три скрипта в редакторе где бы проверялся ТЕГ НПС который разговаривает. Три разных НПС три разных скрипта. Пример первого:
Neverwinter Script Source

int StartingConditional( )
{
  object oSelf = OBJECT_SELF; // Тот с кем начали разговор на ком стоит скрипт

  if ( GetTag( oSelf ) == "NPC_ВАШ_НИК_01" ) // Если тег объекта РАВЕН
  {
      return TRUE; // То начало диалога этой строкой
  }
  return FALSE; // Ничего не произойдет, строка не появится
}

У вас получится три скрипта на три строки. Теперь расставив ваших НПС и поговорив с ними вы получите три разных ответа и четвертый ответ самый последний общий для всех. Так можно определить какого-то одного уникального НПС даже используя один шаблон диалогов на всех.



Добавлено через 2 минуты

Прятать ответы не надо. Пишите получилось у вас или нет.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Artlira
сообщение Dec 9 2007, 03:32
Сообщение #60


Level 4
**

Класс: Маг
Характер: Chaotic Neutral
Раса: Танар'ри



Все получилось. Каждый из заданных неписей произносит строку в зависимости от своего тега.
1. Эта строка первого НПС.
Neverwinter Script Source
int StartingConditional( )
{
  object oSelf = OBJECT_SELF; // Тот с кем начали разговор на ком стоит скрипт

  if ( GetTag( oSelf ) == "NPC_LIRA_01" ) // Если тег объекта РАВЕН NPC_LIRA_01
  {
      return TRUE; // То начало диалога этой строкой
  }
  return FALSE;
}

2. Это строка второго НПС.
Neverwinter Script Source
int StartingConditional( )
{
  object oSelf = OBJECT_SELF; // Тот с кем начали разговор на ком стоит скрипт

  if ( GetTag( oSelf ) == "NPC_LIRA_02" ) // Если тег объекта РАВЕН NPC_LIRA_02
  {
      return TRUE; // То начало диалога этой строкой
  }
  return FALSE;
}

3. Это строка третьего НПС.
Neverwinter Script Source
int StartingConditional( )
{
  object oSelf = OBJECT_SELF; // Тот с кем начали разговор на ком стоит скрипт

  if ( GetTag( oSelf ) == "NPC_LIRA_03" ) // Если тег объекта РАВЕН NPC_LIRA_03
  {
      return TRUE; // То начало диалога этой строкой
  }
  return FALSE;
}

Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Aiwan
сообщение Dec 9 2007, 11:18
Сообщение #61


Миловидный Бегрюссунг
Иконки Групп

Класс: Воин
Характер: Chaotic Good
Раса: Человек
NWN: Модмейкер
Проклятие Левора
Порядок Времени



Отлчино! Ждем еще кого нить...
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Vhall
сообщение Dec 9 2007, 20:03
Сообщение #62


Level 19
Иконки Групп

Класс: Обыватель
Характер: True Neutral
Раса: Дварф
NWN: Контент



У меня все работает. Сомневаюсь что нужно писать ответ - ведь он почти полностью идентичен.
Всё понятно.

Сообщение отредактировал Vhall - Dec 9 2007, 20:04
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Aiwan
сообщение Dec 10 2007, 12:41
Сообщение #63


Миловидный Бегрюссунг
Иконки Групп

Класс: Воин
Характер: Chaotic Good
Раса: Человек
NWN: Модмейкер
Проклятие Левора
Порядок Времени



Очень радует, что вам все понятно. Продолжаем.

Мы уже разбирали что такое пременная. Теперь мы применим знания в главном составляющем грамотного мода - диалоге.

Переменная проверяется в начале корневой строки так (эта строка появится ТОЛЬКО когда переменная равна 0):
Neverwinter Script Source

//:://////////////////////////////////////////////
//:: Проверим отсутсвие переменной AIWAN_LESSON_01_DIALOG
//:: Copyright © 2007 WRG!
//:://////////////////////////////////////////////
/*
        Описание самого квеста, если нужно.
*/
//:://////////////////////////////////////////////
//:: Created By: Aiwan
//:: Created On: 10.12.2007
//:://////////////////////////////////////////////
int StartingConditional( )
{
    object oPC = GetPCSpeaker( );
    int iQuest = GetLocalInt( oPC, "AIWAN_LESSON_01_DIALOG" );
//-------------------------------------------------------
    if ( iQuest == 0 ) // Если локалка равна 0.
    {
        return TRUE; // Возврат ИСТИНА, т.е. старт диалога
    }
    return FALSE; // В противном случае отбой
}


Эта строка диалога появится ТОЛЬКО когда переменная ровна 1:

Neverwinter Script Source

//:://////////////////////////////////////////////
//:: Проверим переменную AIWAN_LESSON_01_DIALOG на 1
//:: Copyright © 2007 WRG!
//:://////////////////////////////////////////////
/*
        Описание самого квеста, если нужно.
*/
//:://////////////////////////////////////////////
//:: Created By: Aiwan
//:: Created On: 10.12.2007
//:://////////////////////////////////////////////
int StartingConditional( )
{
    object oPC = GetPCSpeaker( );
    int iQuest = GetLocalInt( oPC, "AIWAN_LESSON_01_DIALOG" );
//-------------------------------------------------------
    if ( iQuest == 1 ) // Если локалка равна еденице.
    {
        return TRUE; // Возврат ИСТИНА, т.е. старт диалога
    }
    return FALSE; // В противном случае отбой
}


В каждой строке вы присвоите новую переменную для продвижения по диалогу далее. Не забываем, что слоты для проверки и присваивания переменных разные.

Neverwinter Script Source

//:://////////////////////////////////////////////
//:: Присвоим переменную AIWAN_LESSON_01_DIALOG 1
//:: Copyright © 2007 WRG!
//:://////////////////////////////////////////////
/*
        Описание самого квеста, если нужно.
*/
//:://////////////////////////////////////////////
//:: Created By: Aiwan
//:: Created On: 10.12.2007
//:://////////////////////////////////////////////
void main( )
{
    object oPC = GetPCSpeaker( );
//  object oPC = GetFirstPC( ); - так будет работать на любом месте для сингла
    SetLocalInt( oPC, "AIWAN_LESSON_01_DIALOG", 1 );
}


Все это скрипты для чайников. Коими мы с вами и являемя. Но я попробую вам дать один скрипт универсальный, что бы вы поняли, что мы с вами используем 1% потенциала кода. Например, что бы не писать 5 скриптов для 5 строк в которых существующая переменная увеличивается на 1, можно написать такой скрипт на все строки присвоения:
Neverwinter Script Source

//:://////////////////////////////////////////////
//:: Присвоим переменную универсально
//:: Copyright © 2007 WRG!
//:://////////////////////////////////////////////
/*
        Описание самого квеста, если нужно.
*/
//:://////////////////////////////////////////////
//:: Created By: Aiwan
//:: Created On: 10.12.2007
//:://////////////////////////////////////////////
void main( )
{
    object oPC = GetPCSpeaker( );
//  object oPC = GetFirstPC( ); - так будет работать на любом месте для сингла

    int i = GetLocalInt( oPC, "AIWAN_LESSON_01_DIALOG" );
    // Проверим текущее состояние переменной

    // и прибавим к полученному результату единичку.
    SetLocalInt( oPC, "AIWAN_LESSON_01_DIALOG", i+1 );
}


Нескаторые ремарки. Вы заметили, что некоторые скрипты не содержат скобо {}. Я изначально пишу их везде что бы вы не путались и понимали блоки. НО. Если код скрипта содержит одну строку, то условие в блоки ставить не нужно. Пример:
Этот код
Neverwinter Script Source

int StartingConditional( )
{
    object oPC = GetPCSpeaker( );
    int iQuest = GetLocalInt( oPC, "ПЕРЕМЕННАЯ ОДЫН" );
//-------------------------------------------------------
    if ( iQuest == 1 ) // Если локалка равна еденице.
    {
        return TRUE; // Возврат ИСТИНА, т.е. старт диалога
    }
    return FALSE; // В противном случае отбой
}


РАВЕН этому:

Neverwinter Script Source

int StartingConditional( )
{
    object oPC = GetPCSpeaker( );
    int iQuest = GetLocalInt( oPC, "ПЕРЕМЕННАЯ ОДЫН" );
//-------------------------------------------------------
    if ( iQuest == 1 ) // Если локалка равна еденице.

        return TRUE; // Возврат ИСТИНА, т.е. старт диалога

    return FALSE; // В противном случае отбой
}

Так как после условия у нас одна строка для кода.

Теперь домашнее задание.

В аттаче что я прикрепил есть модуль с диалогом. Ваша задача выполнить то, что я недоделал двумя способами. Первый, по "крестьянски" второй используя универсальный скрипт. Задача. Все пять строк должны появиться. После выбора в диалоге "Увеличить или прировнять" переменную к числу, мы не должны получть строку ошибку. Задача простая, но на внимательность. жду ваших сообщений. У кого что не получилось.




Добавлено через 42 секунды

Да. Естественно локалку переименовать с вашим ником.
Прикрепленные файлы
Прикрепленный файл  modules.zip ( 7.61 килобайт ) Кол-во скачиваний: 9
 
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Artlira
сообщение Dec 13 2007, 03:25
Сообщение #64


Level 4
**

Класс: Маг
Характер: Chaotic Neutral
Раса: Танар'ри



У меня к сожалению не открывается модуль... Поэтому задание делаю по интуиции и возможно неправильно... (IMG:style_emoticons/kolobok_light/unsure.gif)

Сделала два одинаковых диалога на пять строк, то есть на четыре переменные и ее отсутствие (0).
1. Привет! Переменная 4.
Увеличить переменную на 1.
Все больше переменных нет...
Обнулить переменную.
Привет! Переменная 0.
Ошибка! Нет ни одной переменной!

Уйти
2. Привет! Переменная 3.
Увеличить переменную на 1.
Привет! Переменная 4.
Ошибка! Нет ни одной переменной!

Уйти
Дальше тоже самое до Привет! Переменная 0. Ветки связаны, так что можно за один раз прокрутить до 4 переменной, обнулить ее и крутить снова. Ветку про ошибку добавила для того, что бы если переменная присвоена неверно, ветка с ее проверкой не появится и появится эта про ошибку.
На каждой ветке стоит проверка в зависимости от переменной, уаказанной в диалоге.
Скрипты на проверку:
Neverwinter Script Source
int StartingConditional( )
{
    object oPC = GetPCSpeaker( );
    int iQuest = GetLocalInt( oPC, "LIRA_01_DIALOG" );

    if ( iQuest == 0 ) // Если локалка равна 0.

    return TRUE; // Возврат ИСТИНА, т.е. старт диалога

    return FALSE; // В противном случае отбой
}


Меняется только строчка - чему равна переменная 0-4.

На ветках увеличить переменную на один в первом диалоге, каждый раз писала новый скрипт на присвоение переменной:

Neverwinter Script Source
void main( )
{
    object oPC = GetPCSpeaker( );
    SetLocalInt( oPC, "LIRA_01_DIALOG", 1 );
}

Менялось только значение переменной от 0 до 4.
Во втором диалоге переменная менялась универсальным скриптом:
Neverwinter Script Source
void main( )
{
    object oPC = GetPCSpeaker( );

    int i = GetLocalInt( oPC, "LIRA_01_DIALOG" );

    // и прибавим к полученному результату единичку.
    SetLocalInt( oPC, "LIRA_01_DIALOG", i+1 );
}

Оба диалога нормально прокручиваются, при выходе и повторном диалоге, срабатывает ветка именно с той переменной на которой прервали диалог.
Вроде все получилось, но я не уверена, что задание сделано верно…


Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Aiwan
сообщение Dec 13 2007, 06:35
Сообщение #65


Миловидный Бегрюссунг
Иконки Групп

Класс: Воин
Характер: Chaotic Good
Раса: Человек
NWN: Модмейкер
Проклятие Левора
Порядок Времени



Пришли мне на мыло свой модуль-домашнее задание. aiwan[злая собака]wrg.ru
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Artlira
сообщение Dec 13 2007, 08:15
Сообщение #66


Level 4
**

Класс: Маг
Характер: Chaotic Neutral
Раса: Танар'ри



Цитата
Пришли мне на мыло свой модуль-домашнее задание. aiwan[злая собака]wrg.ru


Отправила.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Aiwan
сообщение Dec 13 2007, 09:00
Сообщение #67


Миловидный Бегрюссунг
Иконки Групп

Класс: Воин
Характер: Chaotic Good
Раса: Человек
NWN: Модмейкер
Проклятие Левора
Порядок Времени



Что то нет... Пришли на ящик aiwan[собака]ya.ru
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Artlira
сообщение Dec 13 2007, 09:17
Сообщение #68


Level 4
**

Класс: Маг
Характер: Chaotic Neutral
Раса: Танар'ри



На второй адрес вроде ушло без комментариев, а на wrg.ru - дважды сообщил, что такого адреса нет...
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Aiwan
сообщение Dec 13 2007, 11:42
Сообщение #69


Миловидный Бегрюссунг
Иконки Групп

Класс: Воин
Характер: Chaotic Good
Раса: Человек
NWN: Модмейкер
Проклятие Левора
Порядок Времени



Блин, у нас после переезда со старого сервера не работали мыльники (IMG:style_emoticons/kolobok_light/smile.gif) Все починил теперь на wrg шли.

Так. Ничего не правильно (IMG:style_emoticons/kolobok_light/smile.gif) Во первых. Я УЖЕ ДАЛ ШАБЛОН. В него внесите изменения. Там уже тело диалога есть. Только расставьте скрипты. и шлите мне на мыло но модуль именуйте вашим ником, что бы я не путался. Все. Жду.

п.с. Чуть позже я понял, что ты мне прислала ПЕРВОЕ задание с тремя НПС. Это другое. Возможно ошиблась?
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Artlira
сообщение Dec 15 2007, 12:26
Сообщение #70


Level 4
**

Класс: Маг
Характер: Chaotic Neutral
Раса: Танар'ри



Цитата
Так. Ничего не правильно Во первых. Я УЖЕ ДАЛ ШАБЛОН. В него внесите изменения. Там уже тело диалога есть. Только расставьте скрипты. и шлите мне на мыло но модуль именуйте вашим ником, что бы я не путался. Все. Жду.


Так я же и пишу – что у меня шаблон не открылся… (IMG:style_emoticons/kolobok_light/unsure.gif) Поэтому я не могу просто вставить скрипты… Я не знаю как выглядит учебный диалог, вот и набросала свой, предположив, что смысл задания это правильно присвоить переменные, что бы фразы с проверками выскакивали в определенном порядке? Как я поняла, наверно в одном диалоге присвоить нужно каждую локалку отдельно, а во втором использовать только универсальную?

Цитата
п.с. Чуть позже я понял, что ты мне прислала ПЕРВОЕ задание с тремя НПС. Это другое. Возможно ошиблась?


Нет, посмотрела, там именно два диалога с обычными и универсальной переменной. А в случае с тремя неписями проверка зависела от тэга каждого непися.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Aiwan
сообщение Dec 15 2007, 20:21
Сообщение #71


Миловидный Бегрюссунг
Иконки Групп

Класс: Воин
Характер: Chaotic Good
Раса: Человек
NWN: Модмейкер
Проклятие Левора
Порядок Времени



Artlira, я только что скачал файлик что прикрепил, открыл его. Все открылось. Ты наверное просто не поняла что файл заархивирован зипом... Модуль внутри Aiwan Test MOD.mod. Открой, разархивируй, переименуй со своим ником Artlira Test MOD.mod, и сделай как говорю. Тот модуль что ты прислала содержал ОДИН диалог первого задания про три НПС. Жду.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Artlira
сообщение Dec 16 2007, 03:41
Сообщение #72


Level 4
**

Класс: Маг
Характер: Chaotic Neutral
Раса: Танар'ри



Aiwan я наверно объяснила неправильно... Сам мод я достаю, у меня он в тулсете не открывается. Видимо версия не та. Поэтому я и не знаю, как выглядит шаблон.

А по отправленному модулю вообще ничего не понимаю... Там два диалога (совершенно одинаковые), только локалку я в первом присваиваю каждый раз отдельно, а во втором используя одну универсальную... Там 2 непися и у них даже имена (диалог с обычной переменной, и диалог с универсальной переменной). Скачала у себя из ящика то что отправила - нет там диалога 3-ех неписей, а только вот эти два...
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Aiwan
сообщение Dec 16 2007, 12:49
Сообщение #73


Миловидный Бегрюссунг
Иконки Групп

Класс: Воин
Характер: Chaotic Good
Раса: Человек
NWN: Модмейкер
Проклятие Левора
Порядок Времени



Версия 1.68. Давай качай и делай. У меня планы на эти диалоги дальше.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Vhall
сообщение Dec 16 2007, 21:11
Сообщение #74


Level 19
Иконки Групп

Класс: Обыватель
Характер: True Neutral
Раса: Дварф
NWN: Контент



Выслал.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Artlira
сообщение Dec 17 2007, 03:16
Сообщение #75


Level 4
**

Класс: Маг
Характер: Chaotic Neutral
Раса: Танар'ри



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

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

 



Текстовая версия Сейчас: 19th January 2018 - 10:32