Форма входа
 
Приветствуем тебя, корсар Юнга!

Гость, мы рады вас видеть. Пожалуйста зарегистрируйтесь или авторизуйтесь!
Логин:
Пароль:


Купить игры
 



Чат
 
500


Статистика
 
Пользователи, посетившие сайт за текущий день:
Miky, Don-P-Sangre, Lotus, boucanier, BOPOH50, Badgert, vermut, Walgreid, Bendiiiiik
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]

Модератор форума: NikK  
Форум » Ад-доны для игр серии Корсары » FAQ по модам - "Сделай мод сам" » Урок № 3. Пишем диалоги персонажам
Урок № 3. Пишем диалоги персонажам
NathanielДата: Суббота, 08.02.2014, 16:00 | Сообщение # 121
Контр-адмирал
Группа: Капитан
Сообщений: 8036
Награды: 347
Репутация: 1845
Статус: В открытом море
Цитата Xiks ()
вроде всё правильно сделал, а окно диалога пустое

Xiks, запустите отладчик, как показано в примере выше. Он будет выдавать все ошибки, конкретно указывая причину!..


Я был на краю земли, на краю бескрайних озёр, за горизонтом и на вершинах самых высоких гор.
Но я не нашёл там никого, кто не был бы моим другом!
XiksДата: Суббота, 08.02.2014, 16:02 | Сообщение # 122
Матрос
Группа: Пират
Сообщений: 28
Награды: 1
Репутация: 0
Статус: В открытом море
Nathaniel, да поздно уже. я всё уже удалил и не буду больше этим зпниматься
korsar328Дата: Понедельник, 31.03.2014, 15:31 | Сообщение # 123
Мичман
Группа: Корсар
Сообщений: 102
Награды: 5
Репутация: 30
Статус: В открытом море
korsary4, подскажите где ошибка
Код
void ProcessDialogEvent()
{
    ref NPChar;
    aref Link, NextDiag;

    DeleteAttribute(&Dialog,"Links");

    makeref(NPChar,CharacterRef);
    makearef(Link, Dialog.Links);
    makearef(NextDiag, NPChar.Dialog);
       
    switch(Dialog.CurrentNode)
    {
     case "First time":
      dialog.text = "";
      link.l1 = "";
      link.l1.go = "";
         
      if (npchar.quest.meeting == "0")
      {
       dialog.text = "Что вам надо?";
       link.l1 = "Ничего.";
       link.l1.go = "exit";
       npchar.quest.meeting = "1";
      }
         
      NextDiag.TempNode = "First time";
     break;

     case "Exit":
      NextDiag.CurrentNode = NextDiag.TempNode;
      DialogExit();
     break;
    }
}

Почему-то пустое окно открывается.


Жизнь - как божественная комедия...

Сообщение отредактировал ecio_audit - Понедельник, 31.03.2014, 15:41
korsar01Дата: Понедельник, 31.03.2014, 16:18 | Сообщение # 124
Мичман
Группа: Корсар
Сообщений: 186
Награды: 6
Репутация: 46
Статус: В открытом море
ecio_audit, ошибка в кейсе "First time"
MettДата: Понедельник, 31.03.2014, 21:59 | Сообщение # 125
Капитан I ранга
Группа: Корсар
Сообщений: 586
Награды: 91
Репутация: 565
Статус: В открытом море
korsar01, а где там ошибка-то?

ecio_audit, у перса нет атрибута quest.meeting, поэтому проверка в if не дает результата и вызывается этот пустой код
Код
    dialog.text = "";  
       link.l1 = "";  
       link.l1.go = "";


Что толку, если не можешь сделать мир лучше.
korsar01Дата: Вторник, 01.04.2014, 11:01 | Сообщение # 126
Мичман
Группа: Корсар
Сообщений: 186
Награды: 6
Репутация: 46
Статус: В открытом море
Mett, В том, что если будет выполняться условие, получается в кейсе две строки dialog.text и link.l1. Будет ошибка. А если оно не выполняется, то выводятся эти пустые строки.
правильнее будет так:
Код

   case "First time":   
             
        if (npchar.quest.meeting == "0")   
        {   
         dialog.text = "Что вам надо?";   
         link.l1 = "Ничего.";   
         link.l1.go = "exit";   
         npchar.quest.meeting = "1";   
        }
        else
        {
        dialog.text = "";   
        link.l1 = "";   
        link.l1.go = "";   
        }
        NextDiag.TempNode = "First time";   
       break;   

А чтобы не было пустого диалога при невыполнении условия, естественно надо заполнить dialog.text = ""; и link.l1 = ""; link.l1.go = "";
Объясняю я плохо. Надеюсь, что моя мысль была ясной.


Сообщение отредактировал korsar01 - Вторник, 01.04.2014, 11:05
korsar328Дата: Вторник, 01.04.2014, 17:55 | Сообщение # 127
Мичман
Группа: Корсар
Сообщений: 102
Награды: 5
Репутация: 30
Статус: В открытом море
Mett,
Цитата Mett ()
поэтому проверка в if не дает результата и вызывается этот пустой код

а если сделать так
Код

void ProcessDialogEvent()   
{   
      ref NPChar;   
      aref Link, NextDiag;   

      DeleteAttribute(&Dialog,"Links");   

      makeref(NPChar,CharacterRef);   
      makearef(Link, Dialog.Links);   
      makearef(NextDiag, NPChar.Dialog);   
           
      switch(Dialog.CurrentNode)   
      {   
       case "First time":   
        dialog.text = "...";   
        link.l1 = "Привет";   
        link.l1.go = "Exit";   
             
        if (npchar.quest.meeting == "0")   
        {   
         dialog.text = "Что вам надо?";   
         link.l1 = "Ничего.";   
         link.l1.go = "exit";   
         npchar.quest.meeting = "1";   
        }   
             
        NextDiag.TempNode = "First time";   
       break;   

       case "Exit":   
        NextDiag.CurrentNode = NextDiag.TempNode;   
        DialogExit();   
       break;   
      }   
}

Добавлено (01.04.2014, 17:55)
---------------------------------------------
korsar01, я хотел сделать чтобы если персонаж впервые встретился с NPC то запустить диалог знакомства, а если нет то что то типа

Код

case "dialog1":
dialog.text = "Что вам угодно, сер?";
link.l1 = "Ничего, уже ухожу";
link.l1.go = "Exit";
break;


Жизнь - как божественная комедия...

Сообщение отредактировал ecio_audit - Вторник, 01.04.2014, 17:49
korsar01Дата: Вторник, 01.04.2014, 18:13 | Сообщение # 128
Мичман
Группа: Корсар
Сообщений: 186
Награды: 6
Репутация: 46
Статус: В открытом море
ecio_audit, тогда в кейсе first time напиши NextDiag.TempNode = "dialog1";
в кейс dialog1 тоже добавь эту строку.
Выглядеть это будет так:
Код

case "First time":     
          dialog.text = "Диалог при первой встрече";     
          link.l1 = "ответ";     
          link.l1.go = "Exit";   
          NextDiag.TempNode = "dialog1";
Break;    

case "dialog1":   
          dialog.text = "Что вам угодно, сер?";   
          link.l1 = "Ничего, уже ухожу";   
          link.l1.go = "Exit";   
          NextDiag.TempNode = "dialog1";
break;   


Сообщение отредактировал korsar01 - Вторник, 01.04.2014, 18:18
korsar328Дата: Вторник, 01.04.2014, 18:31 | Сообщение # 129
Мичман
Группа: Корсар
Сообщений: 102
Награды: 5
Репутация: 30
Статус: В открытом море
korsar01, ясно. А такой вопрос почему оператор if не срабатывает? или что то не понял.

Жизнь - как божественная комедия...
korsar01Дата: Вторник, 01.04.2014, 18:56 | Сообщение # 130
Мичман
Группа: Корсар
Сообщений: 186
Награды: 6
Репутация: 46
Статус: В открытом море
ecio_audit, он срабатывает, просто ты неверно оформил.
вот твоя запись:
Код

dialog.text = "...";    
      ...
if (npchar.quest.meeting == "0")    
{    
dialog.text = "Что вам надо?";    
     ...   
}    

если условие не выполняется, то открывается первая часть до условия. Тут все нормально.
Но если условие выполнится, то должны открыться и первая часть, и та, которая в условии, а это ошибка. поэтому следует использовать оператор else - иначе.
Код

if (npchar.quest.meeting == "0")  //если условие выполняется, то идет эта часть.  
{    
dialog.text = "Что вам надо?";    
     ...   
}    
else //Иначе. Если условие не выполняется, то открывается нижняя часть
{
dialog.text = "...";    
      ...
}
korsar328Дата: Вторник, 01.04.2014, 19:31 | Сообщение # 131
Мичман
Группа: Корсар
Сообщений: 102
Награды: 5
Репутация: 30
Статус: В открытом море
korsar01, т.е. нужно писать сначала условие(if) а потом код диалога если условие исполняется потом else и код диалога если условие не выполняется. Всё правильно я понял?

Жизнь - как божественная комедия...
korsar01Дата: Среда, 02.04.2014, 12:55 | Сообщение # 132
Мичман
Группа: Корсар
Сообщений: 186
Награды: 6
Репутация: 46
Статус: В открытом море
ecio_audit, да
NathanielДата: Среда, 02.04.2014, 13:10 | Сообщение # 133
Контр-адмирал
Группа: Капитан
Сообщений: 8036
Награды: 347
Репутация: 1845
Статус: В открытом море
Цитата ecio_audit ()
т.е. нужно писать сначала условие(if) а потом код диалога если условие исполняется потом else и код диалога если условие не выполняется

А это и есть базовые основы С/С++!


Я был на краю земли, на краю бескрайних озёр, за горизонтом и на вершинах самых высоких гор.
Но я не нашёл там никого, кто не был бы моим другом!
korsar328Дата: Четверг, 03.04.2014, 16:38 | Сообщение # 134
Мичман
Группа: Корсар
Сообщений: 102
Награды: 5
Репутация: 30
Статус: В открытом море
korsar01,
всё сделал всё равно всё вот так

Я не понимаю, почему так.

Добавлено (03.04.2014, 16:38)
---------------------------------------------
Цитата Nathaniel ()
базовые основы С/С++!

Да не только С/С++, но и в других языках тоже.


Жизнь - как божественная комедия...

Сообщение отредактировал ecio_audit - Четверг, 03.04.2014, 19:17
korsar01Дата: Четверг, 03.04.2014, 16:45 | Сообщение # 135
Мичман
Группа: Корсар
Сообщений: 186
Награды: 6
Репутация: 46
Статус: В открытом море
ecio_audit, возможно, у тебя есть еще другие ошибки.
korsar328Дата: Четверг, 03.04.2014, 16:49 | Сообщение # 136
Мичман
Группа: Корсар
Сообщений: 102
Награды: 5
Репутация: 30
Статус: В открытом море
korsar01, Не буду пока с условиями работать, начну в квестах разбираться может чего пойму.

Жизнь - как божественная комедия...
NathanielДата: Четверг, 03.04.2014, 16:53 | Сообщение # 137
Контр-адмирал
Группа: Капитан
Сообщений: 8036
Награды: 347
Репутация: 1845
Статус: В открытом море
Цитата ecio_audit ()
Не буду пока с условиями работать, начну в квестах разбираться может чего пойму

А условия - это базовая основа практически любого квеста! Если в них не разберётесь - дальше можно не ходить...


Я был на краю земли, на краю бескрайних озёр, за горизонтом и на вершинах самых высоких гор.
Но я не нашёл там никого, кто не был бы моим другом!
korsar328Дата: Четверг, 03.04.2014, 16:57 | Сообщение # 138
Мичман
Группа: Корсар
Сообщений: 102
Награды: 5
Репутация: 30
Статус: В открытом море
korsar01, Чтобы квест работал его нужно в квест реакшн прописывать?

Добавлено (03.04.2014, 16:57)
---------------------------------------------

Цитата Nathaniel ()
базовая основа практически любого квеста!

Если бы понять в чём ошибка, ну я не привык отступать перед трудностями. Так же сложно было Delphi изучать, но научился же. И здесь разберусь, нужно только время и желание, а оно у меня есть.


Жизнь - как божественная комедия...
korsar01Дата: Четверг, 03.04.2014, 16:58 | Сообщение # 139
Мичман
Группа: Корсар
Сообщений: 186
Награды: 6
Репутация: 46
Статус: В открытом море
ecio_audit, В основном, да. Но для квеста все равно придется писать диалоги, условия, и еще много всего при необходимости.
korsar328Дата: Четверг, 03.04.2014, 17:00 | Сообщение # 140
Мичман
Группа: Корсар
Сообщений: 102
Награды: 5
Репутация: 30
Статус: В открытом море
korsar01, журнал ножно куда нибудь перенести?

Жизнь - как божественная комедия...
Форум » Ад-доны для игр серии Корсары » FAQ по модам - "Сделай мод сам" » Урок № 3. Пишем диалоги персонажам
Поиск:

Copyright Pirates-Life.Ru © 2008-2024


Семь Футов под Килем - Бухта Корсаров и Пиратов!