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

Gregory

Знаменитый
Участник
Сообщения
209
Розыгрыши
0
Репутация
81
Реакции
24
Баллы
1 295
Всем привет! Вопрос в следующем.

В 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.

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

Оффтоп:
 
Последнее редактирование модератором:
Всем привет! Вопрос в следующем.

В 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
 
Смотри как квест диалоги реализованы где ограничение по уровню например доступен с 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 )
 
Квест диалоги наверное не совсем то, тк перед проверкой уровня, игроку сначала показывается диалог, где он уже кликает "Квест". Те, нпс не сходу "подменяет" диалог. А вот диалоги с тотариалом, которые игрок получает при первом входе в игру, они уже более близки к моему варианту, но как я виду, в них уже используется память, например как здесь:
Код:
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 проверяет состояние квеста, а его состояние как я помню храниться в бд, так что тут ничего необычного
 
Ну смысл в том, что он это значение где то хранит. А хотелось бы просто проверить, какого талкер уровня. По сути этот код:
Код:
handler:
  EventHandlerTALKED( talker )
  {
    if( talker.level < 10 )
    {
      myself::ShowPage( talker, "hello_newbe.htm" );
    }
    else
    {
      myself::ShowPage( talker, fnHi );
    }
  }
делает тоже самое, только не работает
 
Последнее редактирование:
Ну смысл в том, что он это значение где то хранит. А хотелось бы просто проверить, какого талкер уровня. По сути этот код:
Код:
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]} то что выделил жирным.
И будет твое аи работать.
 
А причем тут удаление параметра, если в ветке условия этот параметр в принципе никак не используется?
Предполагаю, что опять ошибка компилятора, поскольку логика в исходнике проста как мычание. Скорее всего он не обработал "else" и выводит диалоги подряд (открывая последний).
 
Убери super; в этом хендлере и будет тебе счастье
 
Назад
Сверху Снизу