Урок № 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, журнал ножно куда нибудь перенести?
Жизнь - как божественная комедия...
|
|
| |