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

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

 Правила этого форума ПРАВИЛА РАЗДЕЛА
2 страниц V   1 2 >  
Ответить в эту темуОткрыть новую тему
> Другой подход к созданию диалогов
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
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение Jan 3 2008, 20:14
Сообщение #2


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

Класс: Обыватель
Характер: Lawful Neutral
Раса: Человек
NWN: Модмейкер
Проклятие Левора
Порядок Времени



имхо слишком сложно, проще разобраться со скриптами, тем более в диалогах они простые.
на НВН2 нет смысла переносить, там появились скрипты с параметрами, которые можно прямо из диалога вносить, так что теперь любой диалог может обслуживаться 10-15 скриптами без проблем. А если очень захотеть, то и 2-3 можно решить все задачи.

и похоже система не подразумевает то, что НПС может дать 2-3 ответа на фразу игрока. По крайней мере в структуре об этом ни слова.

текст, как я понял, ты в диалог вносишь через КастомТокены?
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
san
сообщение Jan 3 2008, 21:26
Сообщение #3


Level 3
*

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



Подразумевает, просто действительно об этом не написано. А сложно кажется, имхо лишь на первый взгляд. Просто когда стока всего написано, все кажется сложным.
Посмотри примеры. Что там сложного? Да, текст вносится ч/з CustomToken'ы.
Вот еще 1 пример диалога, с проверкой и "действием". Цель дать игроку квест, и если он выполнен, награду:
Neverwinter Script Source
    StartCD( GetObjectByTag( "CR_caerpost_GUARDIAN1" ) ); //это просто объект, который вызывает диалог

        SetHeaderCD( "Эта фраза появится если игрок берет квест#IF={( PL[quest]=0 )}", TRUE );
            SetAnswerCD( "Да, я беру квест#A=( PL[quest]=1 )" );
            SetAnswerCD( "Не, не хачу брать", TRUE );

        SetHeaderCD( "Эта фраза появится если игрок взял квест, но не выполнил#IF={( PL[quest]=1 )}", TRUE );
            SetAnswerCD( "Хорошо, хорошо, бегу выполнять", TRUE );

        SetHeaderCD( "Эта фраза появится если выполнил квест#IF={( PL[quest]=2 )}", TRUE );
            SetAnswerCD( "Круто, давай награду#A=( PL[quest]=0 );A=( XP=1000 )", TRUE );
//и. т. д
//а в конце
StopCD( );

Теперь просто сравни с тем же, но с использованием скриптов. Мало того ты знаешь скритпы... а те кто не знают=)?

Сообщение отредактировал san - Jan 3 2008, 21:29
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение Jan 3 2008, 21:46
Сообщение #4


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

Класс: Обыватель
Характер: Lawful Neutral
Раса: Человек
NWN: Модмейкер
Проклятие Левора
Порядок Времени



SetHeaderCD( "Эта фраза появится если игрок взял квест, но не выполнил#IF={( PL[quest]=1 )}", TRUE );
ты думаешь такая конструкция покажется проще тому, кто скрипты не знает? имхо нет (IMG:style_emoticons/kolobok_light/smile.gif) Фактически ты заменил скриптовой синтаксис своим, ввел пару правил, убрал ненужный для диалогов функционал, слил простенькие скрипты с диалогами. Имхо это замена шила на мыло.

+ такая схема позволяет сделать только совсем простенькие диалоги. Циклы внутри тут тоже не предусмотрены? (банальный пример: у игрока 4 вопроса, которые он может задавать в произвольном порядке. Ну обычный вариант распроса прохожего. Как это у тебя будет выглядеть? В редакторе диалогов это делается линковкой.)
да и когда текст диалога в скрипте, это имхо не очень способствует наглядности.
Вопрос, нужно ли юзеру изучать не простую схему, новый синтаксис для того, чтобы делать простенькие диалоги, при том, что остальные ему придется делать по старинке? честно говоря я хз.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
san
сообщение Jan 3 2008, 22:09
Сообщение #5


Level 3
*

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



QUOTE
Циклы внутри тут тоже не предусмотрены?

Да, можно сделать зацикленные диалоги. Там есть опция GOTO=. И что значит "тоже"? Множество вариантов ответов NPC - предусмотрено. Об остальном ты еще пока не говорил.
QUOTE
"SetHeaderCD( "Эта фраза появится если игрок взял квест, но не выполнил#IF={( PL[quest]=1 )}", TRUE );"

Я думаю да. Что надо сделать чтобы сделать такую проверку? Примерно вот что:
Neverwinter Script Source

object oPC = GetPCSpeker( );
int l = GetLocalInt( oPC, "quest" );
if ( l == 1 ) {
    return TRUE;
}

Разве это сравнимо с "#IF={( PL[quest]=1 )}"?
QUOTE
да и когда текст диалога в скрипте, это имхо не очень способствует наглядности.

Согласен. Не очень наглядно - это минус. Если кому то будет интересно, что я тут сделал, обязательно исправлю=) Мне просто нужно чтобы хотябы 2-3 человека, сказали, да мы будем это юзать(иначе, нах мне оно надо=)?, для себя я уже сделал все что мне нужно и буду пользоваться). Тогда сделаю чтобы все было удобно и наглядно, и вообще без знания скриптов.
QUOTE
Вопрос, нужно ли юзеру изучать не простую схему, новый синтаксис для того

Новый синтаксис, это сильно сказано, так пару правил=). И насчет сложности, сделать можно очень сложные диалоги. В том и прикол чтобы делать все диалоги из 1ого скрипта, без использования дополнительно скриптинга.
ps
Я действительно старался упростить создание диалогов, если первый же человек говорит, что это нафиг некому не надо... фигово. Просто жалко, что зря делал.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение Jan 3 2008, 23:11
Сообщение #6


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

Класс: Обыватель
Характер: Lawful Neutral
Раса: Человек
NWN: Модмейкер
Проклятие Левора
Порядок Времени



Цитата(san @ Jan 3 2008, 22:09) *
object oPC = GetPCSpeker( );
int l = GetLocalInt( oPC, "quest" );
if ( l == 1 ) {
return TRUE;
}

вообще то вот скриптовой вариант:
Neverwinter Script Source

return ( GetLocalInt( GetPCSpeker( ), "quest" )==1 );

и вот твой:
Neverwinter Script Source
"#IF={( PL[quest]=1 )}"

имхо сравнимо.

Цитата(san @ Jan 3 2008, 22:09) *
Там есть опция GOTO=.

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

Цитата(san @ Jan 3 2008, 22:09) *
В том и прикол чтобы делать все диалоги из 1ого скрипта, без использования дополнительно скриптинга.

я боюсь размеры будут поражать воображение. + такой диалог будет труден для разбора автору спустя пару недель. Стороннего обозревателя он вообще в кому вгонит (IMG:style_emoticons/kolobok_light/biggrin.gif)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
azathoth
сообщение Jan 3 2008, 23:12
Сообщение #7


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

Класс: Оборотень
Характер: Chaotic Neutral
Раса: Нежить
NWN: Скриптинг [Sn]



хм, а почему бы не делать диалоги через диалоги? если весь смысл в том, чтобы заменить несколько мелких скриптов одним о-хо-хо и с ним возиться на уровне некомпилицо\строкиперепутал, когда в диалоге всё видно. а модмейкеру проще разобраться в скриптах, а не сначала в скриптах и потом в какой-то системе.

зы: у меня есть похожая система для квестов (IMG:style_emoticons/kolobok_light/smile.gif)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение Jan 3 2008, 23:15
Сообщение #8


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

Класс: Обыватель
Характер: Lawful Neutral
Раса: Человек
NWN: Модмейкер
Проклятие Левора
Порядок Времени



Цитата(san @ Jan 3 2008, 22:09) *
Мне просто нужно чтобы хотябы 2-3 человека, сказали, да мы будем это юзать

честно скажу, я не буду (IMG:style_emoticons/kolobok_light/pardon.gif) на НВН1 я уже врядли что делать буду, а на втором такая вкусняшка с параметрами из диалога, что загляденье.

зы: кстати это гоуту в твоей структуре понятно, а в диалоге оно как обеспечено? Неужели линковка от каждой фразы есть во все узлы? (IMG:style_emoticons/kolobok_light/wacko.gif)

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

Цитата(azathoth @ Jan 3 2008, 23:12) *
зы: у меня есть похожая система для квестов

у меня такая же для условных триггеров (IMG:style_emoticons/kolobok_light/biggrin.gif) (IMG:style_emoticons/kolobok_light/biggrin.gif) Тока синтаксис чуть другой, а идея та же. Условие в текстовые локалки/имени триггера, а в скрипте парсер и проверка (IMG:style_emoticons/kolobok_light/smile.gif)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
azathoth
сообщение Jan 3 2008, 23:29
Сообщение #9


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

Класс: Оборотень
Характер: Chaotic Neutral
Раса: Нежить
NWN: Скриптинг [Sn]



а вот .ерф интересно посмотреть на предмет метода парсинга строк.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
san
сообщение Jan 4 2008, 02:08
Сообщение #10


Level 3
*

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



QUOTE
зы: кстати это гоуту в твоей структуре понятно, а в диалоге оно как обеспечено? Неужели линковка от каждой фразы есть во все узлы?

Нет. Все работает несколько иначе. Вы ведь поняли что можно создавать диалоги любого уровня вложенности? То что дано в структуре лишь пример. Я бы не смог описать полную структуру, т.к вложенность бесконечна=). От каждого ответа может быть скоко угодно хидеров, и от каждого из хидеров может быть скоко угодно ответов(только есть ограничение на максимальное кол-во одновременно отображаемых ответов = 4, не знаю почему я выбрал 4, но число это можно легко увеличить, просто мне кажется что хватает и 4ых вариантов(ОТОБРАЖАЕМЫХ!)).
Neverwinter Script Source
return ( GetLocalInt( GetPCSpeker( ), "quest" )==1 );

Тут ты прав, почти что сравнимо. Но я предпочитаю так не делать. И во вторых мы оба указали лишь 1 скрипт, а нужно то 3=) Пусть в НВН2 можно обойтись 1 скриптом, но тогда он точно будет выглядеть не так просто=)
QUOTE
зы: у меня есть похожая система для квестов
у меня такая же для условных триггеров biggrin.gif biggrin.gif Тока синтаксис чуть другой, а идея та же. Условие в текстовые локалки/имени триггера, а в скрипте парсер и проверка smile.gif

Тут все зависит от задач... если игроку юзеру нафиг не нужны диалоги, то ему не зачем что-то придумывать. И пользоваться тем что есть. Я поэтому и назвал тему "Другой подход к созданию диалогов". Я назвал преимущества данного метода, вы назвали главный недостаток(ненаглядность). У стандартного метода тоже куча недостатков. Если вы прочитали про Шаблоны, то могли бы заметить как легко вставить какой-то параметр в текст диалога... Раз вам удобно делать так как вы привыкли, я не буду(да и не смогу) вас переубеждать. Но раз уж вы обратили на этот топик внимание(а это значит что тема вам в каком то образе близка) я просто прошу посмотреть на плюсы данного способа, и если они перевешивают минусы(а я в этом уверен=)) вседаки попробывать им пользоваться(уж для вас то это не проблема).
QUOTE
хм, а почему бы не делать диалоги через диалоги? если весь смысл в том, чтобы заменить несколько мелких скриптов одним о-хо-хо и с ним возиться на уровне некомпилицо\строкиперепутал, когда в диалоге всё видно. а модмейкеру проще разобраться в скриптах, а не сначала в скриптах и потом в какой-то системе

Я еще раз говорю, если кто нить захочет юзать эту систему, то ее тоже можно сделать наглядной. И ведь прикол даже не в том чтобы модмейкеру проще разобраться в скриптах, а в том что приходится создавать кучу "ненужных" скриптов. Я привел пример, диалога, посчитай скоко в нем должно быть скриптов, чтобы он работал как надо(по моим подсчетам 4). Хорошо, если такой диалог 1, а если их много? Количество "лишних" скриптов очень сильно возрастает, и немудрено, как вы правильно говорите "запутаться" уже в них=) Так же, вы почему то не хотите обращать внимание, на другую функцию этой "системы", это то когда надо, создать много мелких диалогов. Например дилаог для всех второстепенных NPC в городе. Удобно ли для каждой пустяковой фразы создовать по диалогу? Или опять таки надо юзать скрипты... "некомпилицо\строкиперепутал", такая возможность есть и когда вы создаете диалог с помощью скриптов и редактора диалогов. А разобраться в "какой-то системе" можно за минут 20(если вы знаете на хотябы минимальном уровне скрипты, даже не скрипты, а просто логику), врядли нужно больше времени. Имо, ничего сложного тут нет. Если в НВН2 есть диалоги с параметрами, то это несколько уменьшает проблему, но все равно, она есть.
QUOTE
я боюсь размеры будут поражать воображение. + такой диалог будет труден для разбора автору спустя пару недель. Стороннего обозревателя он вообще в кому вгонит

С чего ты взял что он будет большим? 1) То что все диалоге будут находится в одном скрипте удобно для меня. Если кто-то захочет использовать больше чем 1 скрипт, он легко сможет это сделать, если он хочет чтобы даже каждый диалог находился в отдельном скрипте, он сможет это сделать. Можно также, например, несложные диалоги помещать в 1 скрипт, а сложные в отдельные. 2)Даже если все диалоге в одном скрипт разобраться в них будет так же просто как в отдельно взятом диалоге. Ведь начало и конец диалога легко узнаваемы. Пример:
Neverwinter Script Source

//Вот первый диалог его будет говорить НПС с тагом CR_caerpost_GUARDIAN1.
StartCD( GetObjectByTag( "CR_caerpost_GUARDIAN1" ) );
        SetHeaderCD( "Эта фраза НПС с тагомCR_caerpost_GUARDIAN1", TRUE );
              SetAnswerCD( "А это ответ НПС", TRUE );

//А это уже диалог для НПС с тагом ANOTHER_DIALOG
StartCD( GetObjectByTag( "ANOTHER_DIALOG" ) );
        SetHeaderCD( "Эта фраза НПС с тагомCR_caerpost_GUARDIAN1", TRUE );
              SetAnswerCD( "А это ответ НПС", TRUE );
//И что, здесь разве можно спутать кто из NPC какой диалог говорит?

QUOTE
зы: у меня есть похожая система для квестов
у меня такая же для условных триггеров biggrin.gif biggrin.gif Тока синтаксис чуть другой, а идея та же. Условие в текстовые локалки/имени триггера, а в скрипте парсер и проверка smile.gif

Может не стоит прятать подобные системы? А наоборот, стараться чтобы народ узнал о них, и если они облегчают жизнь начал использовать? Забавно, вы сами придумываете кое-что чтобы облегчить себе жизнь, а я вам предлагаю, что-то чтобы облегчить вам жизнь, а вы отказываетесь=) Вместо того чтобы поддержать говорите что вам это не надо=)

Сообщение отредактировал san - Jan 4 2008, 02:18
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение Jan 4 2008, 02:45
Сообщение #11


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

Класс: Обыватель
Характер: Lawful Neutral
Раса: Человек
NWN: Модмейкер
Проклятие Левора
Порядок Времени



Цитата(san @ Jan 4 2008, 02:08) *
но тогда он точно будет выглядеть не так просто=)

ты немного неправ
Neverwinter Script Source
return ( GetLocalInt( GetPCSpeker( ), sName )==nLocal );

sName и nLocal - передаваемые из диалога параметры. таким образом этот один скрипт может проверить любую локалку игрока на любое нужное значение.

Цитата(san @ Jan 4 2008, 02:08) *
Забавно, вы сами придумываете кое-что чтобы облегчить себе жизнь, а я вам предлагаю, что-то чтобы облегчить вам жизнь, а вы отказываетесь=)

я от той системы в итоге отказался из-за нецелесообразности и громоздкости (ну и ненаглядности конечно). В модуле потребовалось проверок 10-15, ради них городить такой геморой не стоило и я написал по старинке, сделав лишь типовые упрощения.

Цитата(san @ Jan 4 2008, 02:08) *
С чего ты взял что он будет большим?

прикинул. Ты вот сам возьми не пример на 10-15 фраз, а приличный диалог фраз на 100. И попробуй потом спустя неделю в нем ногу не сломать. Неявность переходов по гоуту (метки искать нужно - а в редактре просто клик), лишний служебный текст (команды), который отвлекает от анализа. Если даже в удобном древовидном редакторе начинаешь путаться когда диалог большой, то что же будет тут, я даже представить боюсь. + я пока вижу, как не странно, в том что все перемешано. Те доступ к уловиям/действиям диалога есть прямо сразу, не нужно никуда кликать. Но имхо этот + не перевешивает проблемы с навигацией по диалогу.

Цитата(san @ Jan 4 2008, 02:08) *
Может не стоит прятать подобные системы? А наоборот, стараться чтобы народ узнал о них, и если они облегчают жизнь начал использовать?

дело в том, что все подобные системы зачастую очень специфичны и удобны только автору. Проверено годами (IMG:style_emoticons/kolobok_light/smile.gif) Все что пользователь более-менее может переварить, мы кидаем или в Базу скриптов или в виде ерефок на сайт ( SSS).

Цитата(san @ Jan 4 2008, 02:08) *
а я вам предлагаю, что-то чтобы облегчить вам жизнь, а вы отказываетесь=)

веришь, нет, но мы можем оценить что нам нужно, а что нет (IMG:style_emoticons/kolobok_light/smile.gif) Провозившись с диалогами в НВН больше 4х лет я могу точно сказать, что такой системой пользоваться не просто смогу.
другим может быть пригодится, я хз (IMG:style_emoticons/kolobok_light/smile.gif)
Цитата(san @ Jan 4 2008, 02:08) *
Вместо того чтобы поддержать говорите что вам это не надо=)

а что нам говорить, если *нам* действительно не надо? Ждем других (IMG:style_emoticons/kolobok_light/smile.gif)

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

Цитата(san @ Jan 4 2008, 02:08) *
Я еще раз говорю, если кто нить захочет юзать эту систему, то ее тоже можно сделать наглядной.

каким образом?
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
san
сообщение Jan 4 2008, 12:17
Сообщение #12


Level 3
*

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



Самый элементарный способ сделать приложение на AJAX'e(если кто не знает, то это, вкратце, просто html страничка с Javascript'ами, приложение можно сделать как офлайновое так и онлайновое, как удобно, возможно и то и то), которое будет выдавать удобную древовидную структуру, возможно даже удобней чем в стандартном редакторе. После того как диалог будет сделан нужно будет вставить готовый код в файл скрипта. Чтобы открыть диалог нужно будет скопировать нужный диалог в AJAX приложение. Второй способ сделать плагин к тулсету НВН2, но этим я заниматься вряд ли буду, ибо нужны новые знания, и для НВН1 этот способ не подходит(а я то работаю с НВН1). В дальнейшем можно даже сделать возможность создать базу диалогов=) (ну это просто как продолжение идеи=))
"веришь, нет, но мы можем оценить что нам нужно, а что нет" Поэтому я и говорю, что я не смогу вас убедить=).
QUOTE
sName и nLocal - передаваемые из диалога параметры. таким образом этот один скрипт может проверить любую локалку игрока на любое нужное значение.

Понятно, посмотрел как это будет выглядеть в НВН2=)
QUOTE
дело в том, что все подобные системы зачастую очень специфичны и удобны только автору. Проверено годами smile.gif Все что пользователь более-менее может переварить, мы кидаем или в Базу скриптов или в виде ерефок на сайт

Ясно.
И еще приведу пример. В нашем стром модуле порядка 500 скриптов, из них 200 - для диалогов.
ps
И все даки главным образом, то что я сделал нужно для НВН1, для НВН2, проблема уже не так остра... там гораздо больше возможностей.
ps
А в НВН2 случаем нет регулярных выражений?

Сообщение отредактировал san - Jan 4 2008, 12:52
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Белатрис
сообщение Jan 4 2008, 13:13
Сообщение #13


Level 11
***

Класс: Воин
Характер: Lawful Good
Раса: Человек



Я написал за все свое время с тулсетом кучу разных диалогов и самые простые, как раз-таки для горожан были типа:
Как дела?
_______Да так, неплохо и т.д. и т.п.
_____________НАЗАД
Как тут живется?
_______Полный отстой... работать много нужно и т.д. и т.п.
_____________НАЗАД
Где губернатор?
_______А он в загоне со свиньями... играется там... и т.д. и т.п.
_____________НАЗАД
ЗАКОНЧИТЬ РАЗГОВОР

Для неквестовых персонажей вполне нетрудно и недолго сделать. Такой стиль гораздо информативнее и не оказывает сильного давления на психику при создании диалога.
В моем модуле002 такие диалоги юзают НПС без имен, т.е. внесюжетные; их около 20 и на каждый вопрос(которые тоже звучат по разному) уникальный ответ, иногда даже разветвляющийся.
В общем, ты зря убил время. (IMG:style_emoticons/kolobok_light/declare.gif) Не думаю, что многие заинтересуются (IMG:style_emoticons/kolobok_light/nea.gif)

Сообщение отредактировал Белатрис - Jan 4 2008, 13:15
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение Jan 4 2008, 13:38
Сообщение #14


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

Класс: Обыватель
Характер: Lawful Neutral
Раса: Человек
NWN: Модмейкер
Проклятие Левора
Порядок Времени



Цитата(Белатрис @ Jan 4 2008, 13:13) *
В общем, ты зря убил время.

но-но. не надо столь категорично. Сам автор пользуется - значит время потрачено не зря.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
virusman
сообщение Jan 4 2008, 13:48
Сообщение #15


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

Класс: Волшебник
Характер: Neutral Good
Раса: Человек
NWN: Скриптинг [PW]
Axistown SR 1.9
NWNX



Цитата(san @ Jan 4 2008, 12:17) *
Самый элементарный способ сделать приложение на AJAX'e(если кто не знает, то это, вкратце, просто html страничка с Javascript'ами, приложение можно сделать как офлайновое так и онлайновое, как удобно, возможно и то и то), которое будет выдавать удобную древовидную структуру, возможно даже удобней чем в стандартном редакторе. После того как диалог будет сделан нужно будет вставить готовый код в файл скрипта. Чтобы открыть диалог нужно будет скопировать нужный диалог в AJAX приложение.
http://data.virusman.ru/ax20/conv_editor/c...editor_demo.htm (IMG:http://www.kolobok.us/smiles/standart/whistle.gif)
(недоделано; можно драг-н-дропить, редактировать и т.д. если выделение не работает - надо нажать на кнопку внизу)

Сообщение отредактировал virusman - Jan 4 2008, 13:50
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
san
сообщение Jan 4 2008, 14:29
Сообщение #16


Level 3
*

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



QUOTE
В общем, ты зря убил время.

В целом, по ходу, ты права. Но*с маниакальным блеском в глазах*вы будите дальше тратить свое время делая диалоги так как делаете(я имею ввиду, главным образом, тех, кто делает диалоги для НВН1, и некого не хочу обидеть=)).
QUOTE
http://data.virusman.ru/ax20/conv_editor/c...editor_demo.htm
(недоделано; можно драг-н-дропить, редактировать и т.д. если выделение не работает - надо нажать на кнопку внизу)

Раз это не надо никому, я не хочу тратить на это время. Я честно попробовал вас заинтересовать... не получилось, чтож значит не судьба. Но все равно, если че есть с чего начинать=)
QUOTE
В общем, ты зря убил время. declare.gif Не думаю, что многие заинтересуются nea.gif

Да мне многих и не надо, 2-3 человека - достаточно =) И имхо, ты вот говоришь информативно. И скоко же у тебя твоих диалогов было? И че прикольно искать, какой то диалог в куче других, чтобы исправить 1-2 буквы? Я просто представляю имена диалогов dlg_npc1, dlg_npc2... dlg_npcN. Я привел пример скоко надо самых простых скриптов на диалоги, 200(!!!) из 500, тоесть почти половина, скриптов без которых можно обойтись.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
virusman
сообщение Jan 4 2008, 14:40
Сообщение #17


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

Класс: Волшебник
Характер: Neutral Good
Раса: Человек
NWN: Скриптинг [PW]
Axistown SR 1.9
NWNX



Цитата(san @ Jan 4 2008, 14:29) *
Раз это не надо никому, я не хочу тратить на это время. Я честно попробовал вас заинтересовать... не получилось, чтож значит не судьба. Но все равно, если че есть с чего начинать=)
Это, кстати, зачатки системы для управления диалогами прямо в БД. Т.е. можно составить диалог с простыми псевдоскриптами в веб-интерфейсе, затем прицепить этот диалог к NPC - и диалог сразу появится на сервере. Ни отдельные скрипты, ни отдельные диалоги не используются.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение Jan 4 2008, 14:53
Сообщение #18


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

Класс: Обыватель
Характер: Lawful Neutral
Раса: Человек
NWN: Модмейкер
Проклятие Левора
Порядок Времени



Цитата(san @ Jan 4 2008, 14:29) *
И скоко же у тебя твоих диалогов было? И че прикольно искать, какой то диалог в куче других, чтобы исправить 1-2 буквы?

у меня больше 70 сюжетных/квестовых диалогов было - никаких проблем с поиском нужного - нормальная система именования диалогов. Более того, у меня скриптов больше 2300 было, где-то четверть - диалоговые. и тоже никаких проблем с поиском нужного (опять выручила система имен). Чтобы поправить какое-то скриптовое место в диалоге мне зачастую не нужно было его (диалог) открывать, я и так знал какие скрипты там стоят.
проблемы с диалогами были в их архитектуре. Грамотно линковать между собой разные линии, чтобы по тексту не было нестыковок. И вот в такой работе ненаглядность - ну очень помешает.
большая часть времени при работе с диалогом уходит на текст и на структуру. Скрипты занимают очень скромное место. И это при том, что у меня диалоги содержали скрипты в среднем на каждой третьей фразе, а некоторые диалоги (прохожего обычного), так вообще по 1-2 скрипта на каждой фразе имели.

имхо больше работу упростит не совмещение диалог-скрипт, а написание удобных систем для квестов (установка/проверка состояний квестов + работа с журналом) и для диалогов (ввод основных, общих для всех НПС локалок и работа с ними. На этих общих/системных локалках я сэкономил несколько сотен скриптов как минимум)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
azathoth
сообщение Jan 4 2008, 15:23
Сообщение #19


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

Класс: Оборотень
Характер: Chaotic Neutral
Раса: Нежить
NWN: Скриптинг [Sn]



san, если ты это писал для себя -- молодец, а вот если писал специально для новичков -- то зря конечно. в НВН2 с диалоговыми скриптами вообще проблем нет, и можно проверять тег неписи всего одним. и ничего плохого в дереве диалоговом нету, если хочешь -- можно хоть одно на всех создать, а насчёт того что будет много скриптов в НВН1 боятся явно не стоит (IMG:style_emoticons/kolobok_light/smile.gif) имхо проще найти нужный .dlg, чем рыть rawcode.

Вот ежели ты напишешь привычный на вид редактор диалогов которым будет наглядно и удобно пользоваться, генерящий втихомолку ужасные скрипты (+экспорт в .dlg), то ищи-свищи недобитых нвн1 стоителей -- много ли их наберётся? кто-то решит, что ради 15 фраз оно того не стоит, кто-то захочет полного контроля над скриптами и сложные катсцены.

зы: регулярных выражений в НВН2 нет, раз ты спрашиваешь, но никто не мешает заскриптить нужные функции, да и на обсидианцев может вдруг найти, и они побиндят нужные функции, но это уже вряд ли...
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Белатрис
сообщение Jan 5 2008, 03:39
Сообщение #20


Level 11
***

Класс: Воин
Характер: Lawful Good
Раса: Человек



Цитата(san @ Jan 4 2008, 22:29) *
И че прикольно искать, какой то диалог в куче других, чтобы исправить 1-2 буквы? Я просто представляю имена диалогов dlg_npc1, dlg_npc2... dlg_npcN. Я привел пример скоко надо самых простых скриптов на диалоги, 200(!!!) из 500, тоесть почти половина, скриптов без которых можно обойтись.

Проще нажать на нужного персонажа и выбрать разговор. Ибо что-то исправить хочется при тестировании(90%), а при нем ты помнишь нужного героя. К тому же, диалоги сюжетным НПС желательно называть по их именам(например, у Бэна диалог будет называться "ben)". Да и вот, что я тебе скажу, чел, работающий над модом и пишущий диалоги знает, где располагается каждая строчка, а если и позабыл, быстро сориентируется. У меня много раз были ситуации, когда приходилось изменять одну буковку или сместить какой-то скрипт на другую строчку - особых проблем никогда не возникало. Впрочем, это дело вкуса. Я тебя не отговариваю, просто высказываю свое ИМХО, которое ты не обязан слушать (IMG:style_emoticons/kolobok_light/smile.gif)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
gennady
сообщение Jan 5 2008, 09:12
Сообщение #21


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

Класс: Обыватель
Характер: Lawful Good
Раса: Человек
NWN: Модмейкер
Рыцарская Сага



San, для уменьшения количества скриптов нужно просто написать несколько универсальных, вот и все… Не стоит подменять редактор диалога еще какой-то системой. Редактор и без того удобен и всех устраивает, все что нужно для построения диалога там есть.
Мне кажется, твоя затея отлично подойдет для создания полностью автоматических небольших квестов. Тут на форуме уже один мечтатель поднимал тему по этому вопросу, мне кажется ты сделал шаг к этому! Как ты думаешь, твоей системе это по силам? Мог бы оказать посильную помощь… (IMG:style_emoticons/kolobok_light/rolleyes.gif)

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


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

Класс: Воин
Характер: 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 ) );
}
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Sairilias
сообщение Jan 5 2008, 12:24
Сообщение #23


Level 7
**

Класс: Бард
Характер: Chaotic Neutral
Раса: Эльф



У нас в сейчас активно используется около 30 универсальных скриптов в диалогах (простых и сложных) всех НПСей, которых около сотни, получается что не на каждого НПС есть хотя бы 1 отдельный скрипт. Уже просто комбинируя порядок следования строк условий можно существенно разнообразить диалоги, расстановка может и сократить скриптовую базу обслуживающую диалоги.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение Jan 5 2008, 12:56
Сообщение #24


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

Класс: Обыватель
Характер: Lawful Neutral
Раса: Человек
NWN: Модмейкер
Проклятие Левора
Порядок Времени



Цитата(gennady @ Jan 5 2008, 09:12) *
Мне кажется, твоя затея отлично подойдет для создания полностью автоматических небольших квестов.

ну не сказал бы, что так прям отлично, но после модернизации - вполне. Всетаки полностью кастомный диалог там не нужен. Там удобнее использовать кастомные вставки (имя, цель задания, награда). И вот они + проверки должны генериться будут. Или браться из внешней 2дашки, так наверное получше.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
san
сообщение Jan 5 2008, 13:12
Сообщение #25


Level 3
*

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



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

Ты отчасти прав. Вот токо скрипт для открывание дверей гораздо более простой тем те, что используются у меня=) Да я уже понял что это не надо никому, потому не спорю. Сделал и ладно, еще и +1 получил=) Авось кто нить зайдет да скажет, что ему этого как раз не хватало, а тут раз и будет=)
зы
Сейчас я говорю про НВН1! Вседаки мне кажется, что те кто говорит, что удобней юзать стандартные диалоги не правы. Просто инертность мышления... привыкли и будем дальше клипать по 100 скриптов, и 100 диалогов. Но это мне так кажется, а вам иначе, и тут уже спорить бессмыслено.

Сообщение отредактировал san - Jan 5 2008, 13:17
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения

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

 



Текстовая версия Сейчас: 28th March 2024 - 14:46