Купить Tempest - Pirate City Tempest - игра о пиратах Семь Футов под Килем Семь Футов под Килем
Форма входа
 
Приветствуем тебя, корсар Юнга!

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


Купить игры
 



Чат
 
500


Статистика
 
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]

Модератор форума: NikK  
Форум » Ад-доны для игр серии Корсары » FAQ по модам - "Сделай мод сам" » Урок № 3. Пишем диалоги персонажам
Урок № 3. Пишем диалоги персонажам
MettДата: Воскресенье, 17.05.2015, 17:58 | Сообщение # 241
Капитан I ранга
Группа: Корсар
Сообщений: 586
Награды: 91
Репутация: 565
Статус: В открытом море
korsar328,
переменная sld проинициалиированна в начале файла?


Что толку, если не можешь сделать мир лучше.
kurdДата: Четверг, 25.06.2015, 00:37 | Сообщение # 242
Пороховая обезьяна
Группа: Корсар
Сообщений: 11
Награды: 1
Репутация: 9
Статус: В открытом море
Привет корсары, у меня деликатный вопрос?
Возможно ли link.l1.go = "exit"; задержать на несколько секунд, до перехода на следующий кейс.
Это связано со звуковым сопровождением, а то получается, что тыкая мышь переход мгновенный и если на следующем кейсе стоит звуковое сопровождение то звуки накладываются друг на друга.
Пробно сделал через файл DoQuestFunctionDelay перенос для задержки, но это целый геморой писать озвученный диалог.
Хотя работает неплохо, но хотелось бы проще через link.l1.go задержать и на следующий кейс!
NathanielДата: Четверг, 25.06.2015, 12:57 | Сообщение # 243
Контр-адмирал
Группа: Капитан
Сообщений: 8008
Награды: 347
Репутация: 1842
Статус: В открытом море
Цитата kurd ()
Возможно ли link.l1.go = "exit"; задержать на несколько секунд, до перехода на следующий кейс.

В принципе, возможно... Пропишите, например, переход linkl1.go не на "exit", а на какой-нибудь другой кейс, где впишите функцию задержки. Я раньше писал пустые циклы с огромным счётчиком или с конструкцией while...do, например. А уже в том кейсе пропишите выход из диалога при помощи DialogExit().

Но сейчас сам тоже использую DoQuestFunctionDelay() - это проще!


Я был на краю земли, на краю бескрайних озёр, за горизонтом и на вершинах самых высоких гор.
Но я не нашёл там никого, кто не был бы моим другом!
JQeenДата: Воскресенье, 12.07.2015, 16:49 | Сообщение # 244
Матрос
Группа: Корсар
Сообщений: 25
Награды: 5
Репутация: 46
Статус: В открытом море
Доброго времени суток
вопрос такой
если я в диалоге пропишу
pchar.model ="hero1";

то модель ГГ смениться

а что нужно прописать что бы сменить все модели (кирасс и костюмов)??
pchar.model ="hero1,hero2,hero3,hero4,hero5,hero6,hero7,"; - не работает


SalkynДата: Вторник, 04.08.2015, 22:29 | Сообщение # 245
Матрос
Группа: Корсар
Сообщений: 31
Награды: 0
Репутация: 10
Статус: В открытом море
Цитата Nathaniel ()
Можно, например, до промотки записать текущее время в какую-либо переменную... Потом промотать время и сравнить текущее время (определённое заново) с предыдущим. Так мы получим информацию о том, что время прошло... Другие способы мне на ум чего-то не приходят...

Подскажите, а какой функцией можно запомнить первое время? Ибо после выхода из диалога переменная iTime = sti(environment.time); обнуляется.
NathanielДата: Вторник, 04.08.2015, 22:35 | Сообщение # 246
Контр-адмирал
Группа: Капитан
Сообщений: 8008
Награды: 347
Репутация: 1842
Статус: В открытом море
Цитата Salkyn ()
а какой функцией можно запомнить первое время?

А зачем? Запишите её в другую переменную, которая не сотрётся... Придумайте новое имя, задайте тип, объявите... Должно помочь.

Только эта переменная должна быть обязательно глобальной!


Я был на краю земли, на краю бескрайних озёр, за горизонтом и на вершинах самых высоких гор.
Но я не нашёл там никого, кто не был бы моим другом!


Сообщение отредактировал Nathaniel - Вторник, 04.08.2015, 22:37
SalkynДата: Вторник, 04.08.2015, 22:41 | Сообщение # 247
Матрос
Группа: Корсар
Сообщений: 31
Награды: 0
Репутация: 10
Статус: В открытом море
Цитата Nathaniel ()
должна быть глобальной

И как объявить её? И где?


Сообщение отредактировал Salkyn - Вторник, 04.08.2015, 22:46
NathanielДата: Вторник, 04.08.2015, 22:46 | Сообщение # 248
Контр-адмирал
Группа: Капитан
Сообщений: 8008
Награды: 347
Репутация: 1842
Статус: В открытом море
Цитата Salkyn ()
И как объявить её?

Подробности в этой теме... Обычно они объявляются в самом начале файла, в основной процедуре main() или другой общей.


Я был на краю земли, на краю бескрайних озёр, за горизонтом и на вершинах самых высоких гор.
Но я не нашёл там никого, кто не был бы моим другом!
SalkynДата: Вторник, 04.08.2015, 22:58 | Сообщение # 249
Матрос
Группа: Корсар
Сообщений: 31
Награды: 0
Репутация: 10
Статус: В открытом море
Цитата Nathaniel ()
в самом начале файла

Конструкция типа:

Код
void ProcessDialogEvent()
{
    ref NPChar;
    aref Link, NextDiag, forName;
       
    DeleteAttribute(&Dialog,"Links");

    makeref(NPChar,CharacterRef);
    makearef(Link, Dialog.Links);
    makearef(NextDiag, NPChar.Dialog);
       
    int iTime, iTest;
       
    switch(Dialog.CurrentNode)
    {
     case "First time":
                    ...
                    iTime = sti(environment.time);
                    link.l1.go = "exit";
     break;

                    case "2":
      iTest = sti(environment.time);
      if (iTest >= iTime + 1)
                           ...
      else
                           ...
     break;

будет отвечать данному правилу объявления?

Или, подумал вдруг я, надо объявить до "void ProcessDialogEvent()"?


Сообщение отредактировал Salkyn - Вторник, 04.08.2015, 23:01
NathanielДата: Вторник, 04.08.2015, 23:09 | Сообщение # 250
Контр-адмирал
Группа: Капитан
Сообщений: 8008
Награды: 347
Репутация: 1842
Статус: В открытом море
Цитата Salkyn ()
будет отвечать данному правилу объявления?

Да, как будто всё верно. Но в случае чего отладчик сам укажет на ошибку. Включите логи, если они ещё не включены. Вопрос №7.


Я был на краю земли, на краю бескрайних озёр, за горизонтом и на вершинах самых высоких гор.
Но я не нашёл там никого, кто не был бы моим другом!
SalkynДата: Вторник, 04.08.2015, 23:28 | Сообщение # 251
Матрос
Группа: Корсар
Сообщений: 31
Награды: 0
Репутация: 10
Статус: В открытом море
Логи не просматривал - посмотрю. Так-то ни чего не крашилось, только вот условие не отрабатывало.

Есть ли смысл попробовать объявить до "void ProcessDialogEvent()"?

Сглазил я, черт побери! Не запускается гама ни с того ни с сего! jokingly


Сообщение отредактировал Salkyn - Вторник, 04.08.2015, 23:45
NathanielДата: Среда, 05.08.2015, 12:34 | Сообщение # 252
Контр-адмирал
Группа: Капитан
Сообщений: 8008
Награды: 347
Репутация: 1842
Статус: В открытом море
Цитата Salkyn ()
Есть ли смысл попробовать объявить до "void ProcessDialogEvent()"

Нет. Это будет ошибкой с точки зрения синтаксиса. Переменная должна объявляться в теле процедуры или функции и объявлять её надо там же, где объявляются переменные NPChar, Link, NextDiag, forName. Только задать другой тип данных - целочисленный.

Цитата Salkyn ()
Не запускается гама ни с того ни с сего!

Вот поэтому и включите логи. Отладчик Вам точно укажет на ошибку. В данном случае это может быть сообщение о неправильно объявленной переменной или неизвестном типе этой переменной.


Я был на краю земли, на краю бескрайних озёр, за горизонтом и на вершинах самых высоких гор.
Но я не нашёл там никого, кто не был бы моим другом!


Сообщение отредактировал Nathaniel - Среда, 05.08.2015, 12:37
SalkynДата: Пятница, 07.08.2015, 20:13 | Сообщение # 253
Матрос
Группа: Корсар
Сообщений: 31
Награды: 0
Репутация: 10
Статус: В открытом море
Цитата Nathaniel ()
Вот поэтому и включите логи

Отладчиком пользуюсь. Как и писал (гама покрашилась по другим причинам) - логи ничего не показали. Диалог отрабатывал исправно, дело только в "environment.time". Проверил возвращаемые значения: iTime = 249 (всегда), iTest - соответствовал текущему часу. Ввел третью переменную - она возвращала всегда 1 (единицу).

Интересно, а как выполнена проверка времени для закрытия локаций на ночь? Что-то не попалось нигде пока лазил

Добавлено (07.08.2015, 20:13)
---------------------------------------------
И iTime = GetHour(), и iTime = GetTime() возвращают те же значения(
И GetDataDay() возвращает всё так же. Блин! Что за значение 249??


Сообщение отредактировал Salkyn - Пятница, 07.08.2015, 20:22
Новик4Дата: Суббота, 07.11.2015, 22:10 | Сообщение # 254
Матрос
Группа: Корсар
Сообщений: 21
Награды: 0
Репутация: 4
Статус: В открытом море
Привет всем! Помогите найти ошибку
Код

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 "Exit":
   NextDiag.CurrentNode = NextDiag.TempNode;
   DialogExit_Self();
  break;
  
  case "First time":
         Dialog.Text = "Алоха! Что-то там";
   Link.l1 = "Нет";
   Link.l1.go = "exit";
  break;    
    }
}

Добавлено (06.11.2015, 17:13)
---------------------------------------------

Цитата Новик4 ()
Помогите найти ошибку

Наконец нашел, помощь не требуется)
DialogExit_Self(); изменил на DialogExit();

Добавлено (07.11.2015, 22:10)
---------------------------------------------
Привет всем снова!
Не могли бы вы мне скинуть чистую(без своих модификаций/правок/файлов) папку dialogs?

MettДата: Суббота, 07.11.2015, 22:41 | Сообщение # 255
Капитан I ранга
Группа: Корсар
Сообщений: 586
Награды: 91
Репутация: 565
Статус: В открытом море
Новик4, ня
Прикрепления: dlg.rar(1.07 Mb)


Что толку, если не можешь сделать мир лучше.
Новик4Дата: Воскресенье, 08.11.2015, 15:37 | Сообщение # 256
Матрос
Группа: Корсар
Сообщений: 21
Награды: 0
Репутация: 4
Статус: В открытом море
Mett, благодарю

Сообщение отредактировал Новик4 - Воскресенье, 08.11.2015, 15:49
ActidДата: Четверг, 31.12.2015, 22:38 | Сообщение # 257
Пороховая обезьяна
Группа: Корсар
Сообщений: 9
Награды: 0
Репутация: 7
Статус: В открытом море
Возник вопрос как прописать телепорт по городам через диолог. Проблема возникает в том когда телепортируешься в море выйти невозможно твоего судна нет в порту :(
Код
  case "132":
    DialogExit();
    NextDiag.CurrentNode = NextDiag.TempNode;
    LAi_SetPlayerType(pchar);
    DoReloadCharacterToLocation("Tortuga_town", "reload", "reload1_back")
   break;
MettДата: Пятница, 01.01.2016, 02:37 | Сообщение # 258
Капитан I ранга
Группа: Корсар
Сообщений: 586
Награды: 91
Репутация: 565
Статус: В открытом море
Actid,
Код
  case "132":
    DialogExit();
    NextDiag.CurrentNode = NextDiag.TempNode;
    LAi_SetPlayerType(pchar);
    DoReloadCharacterToLocation("Tortuga_town", "reload", "reload1_back");
    SetCharacterShipLocation(pchar, "Tortuga_town");//!!!!!!!!!!!!!!!!!!
   break;


Что толку, если не можешь сделать мир лучше.
NathanielДата: Пятница, 01.01.2016, 04:54 | Сообщение # 259
Контр-адмирал
Группа: Капитан
Сообщений: 8008
Награды: 347
Репутация: 1842
Статус: В открытом море
Цитата Mett ()
SetCharacterShipLocation(pchar, "Tortuga_town")

Хм... А я использую setWDMPointXZ() - в чём принципиальная разница?..


Я был на краю земли, на краю бескрайних озёр, за горизонтом и на вершинах самых высоких гор.
Но я не нашёл там никого, кто не был бы моим другом!
korsary4Дата: Пятница, 01.01.2016, 05:22 | Сообщение # 260
Адмирал
Группа: Администратор
Сообщений: 5202
Награды: 495
Репутация: 1934
Статус: В открытом море
Цитата Nathaniel ()
setWDMPointXZ()

А разве не только на глобалке это перемещает?
Просто я использую в телепорте вот такую конструкцию:

Код
     DoReloadCharacterToLocation("Tortuga_town","reload","reload1");
     SetCharacterShipLocation(mc, "Tortuga_town");
     setWDMPointXZ("Tortuga_town");    




Цитата Nathaniel ()
в чём принципиальная разница?

Точно знаю что SetCharacterShipLocation не переместит кораблик по глобалке.

Прикрепления: 0332166.jpg(189.3 Kb)



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

Copyright Pirates-Life.Ru © 2008-2020


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