![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
![]()
Сообщение
#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 |
![]() |
![]()
Сообщение
#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 ) ); } |
![]() ![]() |
Текстовая версия | Сейчас: 26th April 2025 - 22:58 |