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

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

 Правила этого форума ПРАВИЛА РАЗДЕЛА
> Другой подход к созданию диалогов
san
сообщение Jan 3 2008, 20:03
Сообщение #1


Level 3
*

Класс: Обыватель
Характер: Lawful Good
Раса: Человек



Недавно была необходимость сделать диалоги для большого кол-ва NPC. Понял наскоко это неудобно(надо каждого НПС создавать диалог, а что если ему надо сказать просто "Здрасте", а игрок всего лишь должен ответить "Здраствуй"). Или надо использовать скрипты, а в них что-то вроде:
Neverwinter Script Source
if( GetTag( OBJECT_SELF=="1" ) ) {
    return TRUE;
} else if ...

Думаю вы знаете как это делается=). А что если нужно создать диалог с проверками/действиями? Приходится использовать скрипты... причем коль-во скриптов может резко увеличится, в зависимости от кол-ва проверок/действий.
Пример создать диалог в котором в зависимости от лвл игрока давалась 100 или 300 или 400 экспы, при этом были бы разные ответы НПС и игрока. Экспа должна даваться при ответе игрока. Это довольно простой пример, но даже здесь надо создать больше чем 1 скрипт. А что если я вообще не знаю как обращаться со скриптами?
Я предлагаю создавать диалоги иначе. Как, смотрите ЗДЕСЬ. Все что приведено, - работает и проверено. Для того чтобы добавить систему к вашему модулю, надо включить в него 1 erf. Если тем что здесь описано заинтересуется кто нить(прошу напишите об этом), то добавлю эту .erf'ку, буду объяснять непонятные моменты и совершенствовать систему. На данный момент тестил в НВН1, но легко можно перенести и в НВН2.
зы
сори за грамотность.

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

Добавил ссылку, а то читать так не удобно... пройдите по ссылке, там тепереь все что надо=)

Сообщение отредактировал san - Jan 3 2008, 20:02
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
 
Открыть новую тему
Ответов
Aiwan
сообщение Jan 5 2008, 12:02
Сообщение #2


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

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



Пять юаней. Периодически у многих возникает желание "изобрести велосипед". И дело даже не в КПД полезных свойств системы, а главное хочется решить поставленную перед (самим) собой задачу. Даже я, грешил иногда такими вещами. Надо доделать что-то, а вот нет. Сижу пишу какой то скрипт, который никто и не поймет что он ноу-хау! Главное в таком деле получить позитив от сделанного. Автор поставил задачу, выполнил. РЕСПЕКТ. (IMG:style_emoticons/kolobok_light/smile.gif) Остальное, ИМХО не важно.

Простой пример, скрипт закрываняи дери написан ввиду того, что при закрывании дерей РС смещался постоянно и выглядело не очень эстетично:
Neverwinter Script Source

//:://////////////////////////////////////////////
//:: OnOpen am_dop_close
//:: Copyright © 2006 WRG!  www.wrg.ru
//:://////////////////////////////////////////////
/*
      Универсальный скрипт для всех дверей.
  Закрывается дверь, только когда РС отошел от нее
  дальше 5 метров. Связано с глюками закрывания.
*/
//:://////////////////////////////////////////////
//:: Created By: Aiwan
//:: Created On: 22.09.2006
//:://////////////////////////////////////////////
#include "am_inc_common"

void main( )
{
  object oDoor = OBJECT_SELF;
  object oPC = GetLastOpenedBy( );
  object oTarget = GetTransitionTarget( oDoor );

  AssignCommand( oDoor, ClearAllActions( ) );
  AssignCommand( oDoor, ActionWait( 15.0 ));

  if( oTarget == OBJECT_INVALID || !GetIsPC( oPC ))
  {
      AssignCommand( oDoor, ActionCloseDoor( oDoor ));
  }
    else
        {
          AssignCommand( oDoor, ActionDoCommand( ExecuteScript( "am_exe_door", oDoor )) );
        }
}


Neverwinter Script Source

//:://////////////////////////////////////////////
//:: OnOpen am_exe_door
//:: Copyright © 2006 WRG!  www.wrg.ru
//:://////////////////////////////////////////////
/*
      Универсальный скрипт для всех дверей.
  Закрывается дверь, только когда РС отошел от нее
  дальше 5 метров. Связано с глюками закрывания.
*/
//:://////////////////////////////////////////////
//:: Created By: Aiwan
//:: Created On: 22.09.2006
//:://////////////////////////////////////////////
#include "am_inc_common"

void main( )
{
  object oDoor = OBJECT_SELF;
  object oPC = GetFirstPC( );
  object oTarget = GetTransitionTarget( oDoor );

  if( GetIsOpen( oDoor ) == FALSE ) return;
  if( GetIsOpen( oTarget ) == FALSE ) return;

  AssignCommand( oDoor, ClearAllActions( ) );

  if( GetDistanceBetween( oDoor, oPC ) > 5.0 ) // Если РС отошел от двери
  {
    if( GetDistanceBetween( oTarget, oPC ) > 5.0 ) // И не переместился
    {
        Debug( "РС отошел от двери, мы ее закрываем." );
        AssignCommand( oDoor, ClearAllActions( ) );
        AssignCommand( oDoor, ActionCloseDoor( oDoor ));
        return;
    }
    // Если переместился и стоит теперь рядом с другой дверью
    else
        {
          if( GetObjectType( oTarget ) == OBJECT_TYPE_DOOR )
          {
              Debug( "РС совершил переход и стоит рядом с одверью, мы ее не закрываем." );
              AssignCommand( oTarget, ClearAllActions( ) );
              AssignCommand( oTarget, ActionWait( 12.0 ));
              AssignCommand( oTarget, ActionDoCommand( ExecuteScript( "am_exe_door", oTarget )) );
              return;
          }
          else
              {
                  Debug( "Объект перемещения РС не был дверью. Закрываем первую дверь." );
                  AssignCommand( oDoor, ClearAllActions( ) );
                  AssignCommand( oDoor, ActionCloseDoor( oDoor ));
                  return;
              }
        }
    }
    else // Если стоит рядом то повторим все...
      {
          Debug( "РС стоит рядом с дверью, мы ее не закрываем." );
          AssignCommand( oDoor, ClearAllActions( ) );
          AssignCommand( oDoor, ActionWait( 12.0 ));
          AssignCommand( oDoor, ActionDoCommand( ExecuteScript( "am_exe_door", oDoor )) );
      }
}


Нужен этот скрипт кому-нибудь? ОСмневаюсь. (IMG:style_emoticons/kolobok_light/smile.gif) А мне ну оооочень надо было! (IMG:style_emoticons/kolobok_light/pardon.gif)

Добавлено через 4 минуты 11 секунду

Поставь я такой скрипт разницу мало кто заметит.
Neverwinter Script Source

void main( )
{
   object oDoor = OBJECT_SELF;
    AssignCommand( oDoor, ClearAllActions( ) );
    AssignCommand( oDoor, ActionWait( 12.0 ) );
    AssignCommand( oDoor, ActionCloseDoor( oDoor ) );
}
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения

Сообщений в этой теме
- san   Другой подход к созданию диалогов   Jan 3 2008, 20:03
- - Lex   имхо слишком сложно, проще разобраться со скриптам...   Jan 3 2008, 20:14
- - san   Подразумевает, просто действительно об этом не нап...   Jan 3 2008, 21:26
- - Lex   SetHeaderCD( "Эта фраза появится если игрок в...   Jan 3 2008, 21:46
- - san   QUOTEЦиклы внутри тут тоже не предусмотрены? Да, м...   Jan 3 2008, 22:09
- - Lex   Цитата(san @ Jan 3 2008, 22:09) object oP...   Jan 3 2008, 23:11
- - azathoth   хм, а почему бы не делать диалоги через диалоги? е...   Jan 3 2008, 23:12
- - Lex   Цитата(san @ Jan 3 2008, 22:09) Мне прост...   Jan 3 2008, 23:15
- - azathoth   а вот .ерф интересно посмотреть на предмет метода ...   Jan 3 2008, 23:29
- - san   QUOTEзы: кстати это гоуту в твоей структуре понятн...   Jan 4 2008, 02:08
- - Lex   Цитата(san @ Jan 4 2008, 02:08) но тогда ...   Jan 4 2008, 02:45
- - san   Самый элементарный способ сделать приложение на AJ...   Jan 4 2008, 12:17
|- - virusman   Цитата(san @ Jan 4 2008, 12:17) Самый эле...   Jan 4 2008, 13:48
- - Белатрис   Я написал за все свое время с тулсетом кучу разных...   Jan 4 2008, 13:13
- - Lex   Цитата(Белатрис @ Jan 4 2008, 13:13) В об...   Jan 4 2008, 13:38
- - san   QUOTEВ общем, ты зря убил время. В целом, по ходу,...   Jan 4 2008, 14:29
|- - virusman   Цитата(san @ Jan 4 2008, 14:29) Раз это н...   Jan 4 2008, 14:40
- - Lex   Цитата(san @ Jan 4 2008, 14:29) И скоко ж...   Jan 4 2008, 14:53
- - azathoth   san, если ты это писал для себя -- молодец, а вот ...   Jan 4 2008, 15:23
- - Белатрис   Цитата(san @ Jan 4 2008, 22:29) И че прик...   Jan 5 2008, 03:39
- - gennady   San, для уменьшения количества скриптов нужно прос...   Jan 5 2008, 09:12
- - Aiwan   Пять юаней. Периодически у многих возникает желани...   Jan 5 2008, 12:02
- - Sairilias   У нас в сейчас активно используется около 30 униве...   Jan 5 2008, 12:24
- - Lex   Цитата(gennady @ Jan 5 2008, 09:12) Мне к...   Jan 5 2008, 12:56
- - san   QUOTEПять юаней. Периодически у многих возникает ж...   Jan 5 2008, 13:12
- - Lex   Цитата(san @ Jan 5 2008, 13:12) что удобн...   Jan 5 2008, 20:07
- - darkrain   Всем здрасте) Извините что не в тему,просто я обыч...   Jan 11 2011, 10:25
- - Griffon   darkrain, Попробуй поискать ответ в разделе скри...   Jan 11 2011, 10:44
- - darkrain   Спасибо) Цитата(darkrain @ Jan 11 2011, 10...   Jan 11 2011, 10:55
- - Griffon   Цитата(darkrain @ Jan 11 2011, 10:55) или...   Jan 11 2011, 12:30
- - darkrain   А по подробнее можно?) и можешь пожалуйста обьясни...   Jan 11 2011, 15:20
- - Griffon   Цитата(darkrain @ Jan 11 2011, 15:20) OnE...   Jan 11 2011, 16:38
- - darkrain   А вот еще один вопрос...тоже не втему но мне очень...   Jan 13 2011, 18:06
- - wirTUS   Руссификатор, имхо, не нужен (ибо гораздо менее уд...   May 24 2011, 19:16


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

 



Текстовая версия Сейчас: 26th April 2025 - 22:58