"Якорный" диалог с НПС?

Gregory

Интересующийся
Местный
Сообщения
173
Розыгрыши
0
Реакции
21
Репутация
55
Баллы
307
Всем привет! Вопрос в следующем.

В npcdat для нпса мы явно указываем, каким диалогом он встретит говорящего:
Код:
pc_ai={[new_time_gmshop];{[fnHi]=[test_server_helper2001.htm]}
А можно ли выбрать стартовый диалог исходя из условий, например лвл говорячего или наличие у него итема?

АИ начинается так

Код:
handler:
  EventHandlerTALKED( talker )
  {
    myself::ShowPage( talker, fnHi );
  }
Я описываю его следующим образом:
Код:
handler:
  EventHandlerTALKED( talker )
  {
    if( talker.level < 10 )
    {
      myself::ShowPage( talker, "hello_newbe.htm" );
    }
    else
    {
      myself::ShowPage( talker, fnHi );
    }
  }
И вроде бы, если чар 1 уровня, то при обращении к нпс ему должна показаться hello_newbe.htm, но один фиг я вижу test_server_helper2001.htm.

Подскажите, что не так делаю?
 
Последнее редактирование:

Psycho

Я пчела. Бжж-жж...
Легенда
Сообщения
3 276
Розыгрыши
1
Реакции
1 270
Репутация
3 277
Баллы
1 627
Оффтоп:

screenshotc97d8.jpg screenshot3f6bd.jpg
 
Последнее редактирование модератором:

monami

Интересующийся
Местный
Сообщения
214
Розыгрыши
0
Реакции
35
Репутация
113
Баллы
362
Всем привет! Вопрос в следующем.

В npcdat для нпса мы явно указываем, каким диалогом он встретит говорящего:
Код:
pc_ai={[new_time_gmshop];{[fnHi]=[test_server_helper2001.htm]}
А можно ли выбрать стартовый диалог исходя из условий, например лвл говорячего или наличие у него итема?

АИ начинается так

Код:
handler:
  EventHandlerTALKED( talker )
  {
    myself::ShowPage( talker, fnHi );
  }
Я описываю его следующим образом:
Код:
handler:
  EventHandlerTALKED( talker )
  {
    if( talker.level < 10 )
    {
      myself::ShowPage( talker, "hello_newbe.htm" );
    }
    else
    {
      myself::ShowPage( talker, fnHi );
    }
  }
И вроде бы, если чар 1 уровня, то при обращении к нпс ему должна показаться hello_newbe.htm, но один фиг я вижу test_server_helper2001.htm.

Подскажите, что не так делаю?
Смотри как квест диалоги реализованы где ограничение по уровню например доступен с 3-11
 

Gregory

Интересующийся
Местный
Сообщения
173
Розыгрыши
0
Реакции
21
Репутация
55
Баллы
307
Смотри как квест диалоги реализованы где ограничение по уровню например доступен с 3-11
Квест диалоги наверное не совсем то, тк перед проверкой уровня, игроку сначала показывается диалог, где он уже кликает "Квест". Те, нпс не сходу "подменяет" диалог. А вот диалоги с тотариалом, которые игрок получает при первом входе в игру, они уже более близки к моему варианту, но как я виду, в них уже используется память, например как здесь:
Код:
class 1 poeny : citizen
{
handler:
  EventHandler TALKED( i0, i1, quest_id, talker )
  {
    if( _from_choice == 0 )
    {
      if( myself::GetMemoStateEx( talker, @tutorial_quest, 1 ) < 0 )
 

Influence

Поклонник кармы
Проверенный
Сообщения
872
Розыгрыши
0
Реакции
421
Репутация
1 448
Баллы
715
Квест диалоги наверное не совсем то, тк перед проверкой уровня, игроку сначала показывается диалог, где он уже кликает "Квест". Те, нпс не сходу "подменяет" диалог. А вот диалоги с тотариалом, которые игрок получает при первом входе в игру, они уже более близки к моему варианту, но как я виду, в них уже используется память, например как здесь:
Код:
class 1 poeny : citizen
{
handler:
  EventHandler TALKED( i0, i1, quest_id, talker )
  {
    if( _from_choice == 0 )
    {
      if( myself::GetMemoStateEx( talker, @tutorial_quest, 1 ) < 0 )
где тут используется память?
GetMemoStateEx проверяет состояние квеста, а его состояние как я помню храниться в бд, так что тут ничего необычного
 

Gregory

Интересующийся
Местный
Сообщения
173
Розыгрыши
0
Реакции
21
Репутация
55
Баллы
307
Ну смысл в том, что он это значение где то хранит. А хотелось бы просто проверить, какого талкер уровня. По сути этот код:
Код:
handler:
  EventHandlerTALKED( talker )
  {
    if( talker.level < 10 )
    {
      myself::ShowPage( talker, "hello_newbe.htm" );
    }
    else
    {
      myself::ShowPage( talker, fnHi );
    }
  }
делает тоже самое, только не работает
 
Последнее редактирование:

Koner

Свой человек
Проверенный
Сообщения
221
Розыгрыши
0
Реакции
217
Репутация
1 147
Баллы
508
Ну смысл в том, что он это значение где то хранит. А хотелось бы просто проверить, какого талкер уровня. По сути этот код:
Код:
handler:
  EventHandlerTALKED( talker )
  {
    if( talker.level < 10 )
    {
      myself::ShowPage( talker, "hello_newbe.htm" );
    }
    else
    {
      myself::ShowPage( talker, fnHi );
    }
  }
делает тоже самое, только не работает
В нпц дате у этого нпц удали npc_ai={[new_time_gmshop];{[fnHi]=[test_server_helper2001.htm]} то что выделил жирным.
И будет твое аи работать.
 

Gregory

Интересующийся
Местный
Сообщения
173
Розыгрыши
0
Реакции
21
Репутация
55
Баллы
307

Stenly76

Пляшущий с бубном
Местный
Сообщения
83
Розыгрыши
0
Реакции
60
Репутация
164
Баллы
273
А причем тут удаление параметра, если в ветке условия этот параметр в принципе никак не используется?
Предполагаю, что опять ошибка компилятора, поскольку логика в исходнике проста как мычание. Скорее всего он не обработал "else" и выводит диалоги подряд (открывая последний).
 

Sine

Интересующийся
Местный
Сообщения
123
Розыгрыши
0
Реакции
66
Репутация
251
Баллы
353
Убери super; в этом хендлере и будет тебе счастье
 
Сверху Снизу