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

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


Купить игры
 



Чат
 
500


Статистика
 
Пользователи, посетившие сайт за текущий день:
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]

Модератор форума: NikK  
Форум » Ад-доны для игр серии Корсары » FAQ по модам - "Сделай мод сам" » Кодинг квестов (Рассмотрим написание квестов)
Кодинг квестов
CaptainBleikkДата: Понедельник, 31.12.2012, 16:09 | Сообщение # 261
Капитан I ранга
Группа: Корсар
Сообщений: 1190
Награды: 81
Репутация: 511
Статус: В открытом море
Хех! Была моя глупейшая ошибка. Место "Address" написал Adress с одной d, теперь все работает. И еще вопрос: вот я взял задание у ПЕРВОГО человека. Пошел в таверну, отдал предмет, мне надо пойти к ПЕРВОМУ, но чтобы у него был другой диалог, а не такой же как был при даче задания.
korsary4Дата: Понедельник, 31.12.2012, 16:37 | Сообщение # 262
Адмирал
Группа: Администратор
Сообщений: 5204
Награды: 496
Репутация: 1935
Статус: В открытом море
Цитата (CaptainBleikk)
но чтобы у него был другой диалог, а не такой же как был при даче задания

меняй ему ветку диалога:
Код
  sld = characterFromID("LineIncquisitio_Enrike_Riveres");    
   sld.dialog.currentnode = "dialog_2";  



Единственное, что можно сказать об удаче с уверенностью — она изменит.
--------
CaptainBleikkДата: Понедельник, 31.12.2012, 16:37 | Сообщение # 263
Капитан I ранга
Группа: Корсар
Сообщений: 1190
Награды: 81
Репутация: 511
Статус: В открытом море
korsary4, спасибо, получилось
WMCДата: Понедельник, 31.12.2012, 16:44 | Сообщение # 264
Матрос
Группа: Корсар
Сообщений: 53
Награды: 5
Репутация: 22
Статус: В открытом море
Как после (или в середине) диалога запустить настройку PIRATES?
Я создал НПС который подходит к ГГ сразу после начала игры (ну в общем как изначально на палубе только в порту). Написал диалог. В начале диалога добавил вот эту переменную:
Код
case "ChangePIRATES":
             LAi_SetCitizenTypeNoGroup(NPChar);
             LAi_SetPlayerType(pchar);
    NextDiag.CurrentNode = "Тут естественно нужная нода";
    DialogExit();
    pchar.SystemInfo.ChangePIRATES = true;
    LaunchCharacter(pchar);
   break;

После определённой фразы врубается окно интерфейса и можно настраивать. Но когда я закрываю окно, вместо продолжения диалога в углу вылазит примерно следующее:
Error: не находит IDcharacter - Sailor_1
Error: не находит IDcharacter - none

И после этого ГГ не реагирует ни на какие просьбы сдвинуться с места или совершить действие.

Sailor_1 это ID Сандро Торна... Но я не пойму причём тут он? Я ведь создал совершенно нового НПС и написал ему совершенно новый диалог...
А вот если закончить диалог по другой ветке (без использования ChangePIRATES) то всё работает.
CaptainBleikkДата: Понедельник, 31.12.2012, 16:46 | Сообщение # 265
Капитан I ранга
Группа: Корсар
Сообщений: 1190
Награды: 81
Репутация: 511
Статус: В открытом море
WMC, попробуй посмотреть дефолтный диалог)
И еще: какая буква при создании локатора отвечает за высоту?


Сообщение отредактировал CaptainBleikk - Понедельник, 31.12.2012, 16:49
korsary4Дата: Понедельник, 31.12.2012, 16:52 | Сообщение # 266
Адмирал
Группа: Администратор
Сообщений: 5204
Награды: 496
Репутация: 1935
Статус: В открытом море
Цитата (WMC)
Как после (или в середине) диалога запустить настройку PIRATES?

Ну смотри, у меня такой пример сделан:
В диалоге:
Код
  case "Mark_Krinberg_dialog3_inPrison_1":
     AddDialogExitQuest("SHonStarkLine_Quest1_16");      
     dialog.text = "Ну что ж, Шон, собирайтесь.";
     link.l1 = "Погодите, тут моё добро...";
     link.l1.go = "Exit";    
    break;    


В quests_reaction.c прописан такой код:

Код
  case "SHonStarkLine_Quest1_18":   
     //Настроим систему PIRATES для нашего ГГ
     pchar.SystemInfo.ChangePIRATES = true;
     LaunchCharacter(pchar);    
     LAi_QuestDelay("SHonStarkLine_Quest1_19", 1.4);      
    break;     

    case "SHonStarkLine_Quest1_19":   
     sld =  CharacterFromID("Mark_Krinberg_SHonStarkLine");
     LAi_SetActorType(sld);
     sld.dialog.currentnode = "Mark_Krinberg_dialog4_inPrison_1";   
     LAi_ActorDialog(sld, pchar, "", 1.0, 0);   
    break;  

После изменений пиратес, будет диалог с нпс.
все работает, без каких-либо ошибок.

Цитата (WMC)
Error: не находит IDcharacter - Sailor_1
Error: не находит IDcharacter - none

не помню, может в гпк где еще прописано что-то по этому вводному персонажу Sailor_1. Поэтому после вызова изменений пиратес, идут действия с этим нпс.



Единственное, что можно сказать об удаче с уверенностью — она изменит.
--------


Сообщение отредактировал korsary4 - Понедельник, 31.12.2012, 17:00
WMCДата: Понедельник, 31.12.2012, 18:06 | Сообщение # 267
Матрос
Группа: Корсар
Сообщений: 53
Награды: 5
Репутация: 22
Статус: В открытом море


Всё, разобрался. Спасибо! С новым годом!!


Сообщение отредактировал WMC - Вторник, 01.01.2013, 13:14
NathanielДата: Среда, 02.01.2013, 16:28 | Сообщение # 268
Контр-адмирал
Группа: Капитан
Сообщений: 8036
Награды: 347
Репутация: 1845
Статус: В открытом море
Друзья, не мог бы кто-нибудь помочь разобраться в следующем вопросе!..
Я написал для К:ГПК 1.2.12 алгоритм выбора интервала времени для отдыха по аналогии с тем, как это сделано у BlackMark Studio и других разработок, но без окна задания времени. У меня время будет задаваться с клавиатуры, стандартно...

Сам алгоритм работает, но не могу убрать ограничение.
Пример:
1) правки в файле tavern.c:
Код

void TavernWaitDate(string date)
{
      int iTime, iAddTime, iAddNewTime;
      iTime = sti(environment.time);

      /* спать будем до 9 утра вместо 7 */
      if (date == "wait_day")
      {
   if (iTime >= 21) iAddTime = 24 - iTime + 9;
   if (iTime < 9) iAddTime = 9 - iTime;
   // boal 03.03.05 -->
   if (iTime >= 9 && iTime < 21) iAddTime = 24 + 9 - iTime;
   // boal <--
   StoreDayUpdate();
      }
      else
      {
   if (iTime < 24) iAddtime = 24 - iTime;
      }
        
      /* добавленный фрагмент */
      if (date == "select_time")
      {
   if (iTime >= 21) iAddNewTime = 24 - iTime + 9;
   if (iTime < 9) iAddNewTime = 9 - iTime;
   // boal 03.03.05 -->
   if (iTime >= 9 && iTime < 21) iAddNewTime = 24 + 9 - iTime;
   // boal <--
   iAddTime = iAddNewTime;
   //LAi_Fade("", "");
   //WaitDate("",0,0,0,iAddtime,5);
   //RecalculateJumpTable();
   //RefreshWeather();
   //RefreshLandTime();
   //StoreDayUpdate();
      }
      /* конец фрагмента */
     
   LAi_Fade("", "");
   WaitDate("",0,0,0,iAddtime,5);
   RecalculateJumpTable();
   // boal -->
   RefreshWeather();
   RefreshLandTime();
   // boal <--
}

Добавленные куски отмечены...

2) правки в файле MainHero_dialog.c:
Код

Dialog.Text = RandPhraseSimple("Что бы мне сейчас хотелось сделать?", "Чем бы заняться?");
if (!bDisableMapEnter) //&& pchar.location == Get_My_Cabin())
{
if (makeint(environment.time) >= 22.0 || makeint(environment.time) < 10.0)
{
link.l1 = "Отдыхать до утра...";
link.l1.go = "TalkSelf_room_day";
}
else
{
/* добавленный фрагмент */
link.l1 = "Отдохнуть несколько часов...";
link.l1.go = "TalkSelf_select";
/* конец добавленного фрагмента */

link.l2 = "Отдыхать до ночи...";
link.l2.go = "TalkSelf_room_night";
link.l3 = "Отдыхать до следующего утра...";
link.l3.go = "TalkSelf_room_day";
}
}

/* добавленный фрагмент */
case "TalkSelf_select":
NextDiag.CurrentNode = NextDiag.TempNode;
dialog.text = "Сколько часов потребуется на отдых?";
link.l1.edit = 2;
link.l1 = "";
iAddNewTime = sti(dialogEditStrings[2]);
link.l1.go = "Select_Time";
//DialogExit_Self();
break;

case "Select_Time":
NextDiag.CurrentNode = NextDiag.TempNode;
//AddDialogExitQuestFunction("TavernWaitDate_Night");
TavernWaitDate("select_time");
DialogExit_Self();
break;
/*конец фрагмента */

case "TalkSelf_room_day":
NextDiag.CurrentNode = NextDiag.TempNode;
//AddDialogExitQuestFunction("TavernWaitDate_Day");
TavernWaitDate("wait_day");
DialogExit_Self();
break;


Добавленные куски отмечены...
Меня конкретно интересует замена условий в первой части второго куска... Необходимо добиться того, чтобы возможность выбора интервала времени была всегда (пока, на данном этапе).


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


Сообщение отредактировал Nathaniel - Среда, 02.01.2013, 16:30
WMCДата: Вторник, 08.01.2013, 17:38 | Сообщение # 269
Матрос
Группа: Корсар
Сообщений: 53
Награды: 5
Репутация: 22
Статус: В открытом море
Ребят не могу найти функцию. Нужно чтобы в разговоре НПС назвал только фамилию ГГ.
Вот эта функция добавляет имя и фамилию:
Код
"+GetfullName(Pchar)+"

Нужна только фамилия
korsary4Дата: Вторник, 08.01.2013, 17:50 | Сообщение # 270
Адмирал
Группа: Администратор
Сообщений: 5204
Награды: 496
Репутация: 1935
Статус: В открытом море
"+Pchar.lastname+"


Единственное, что можно сказать об удаче с уверенностью — она изменит.
--------
WMCДата: Пятница, 11.01.2013, 18:33 | Сообщение # 271
Матрос
Группа: Корсар
Сообщений: 53
Награды: 5
Репутация: 22
Статус: В открытом море

Не мог бы кто меня просветить?

Вроде бы всё правильно, но почему-то не работает.

Вот это отрывок из квест_реакшн:
Код
case "proverka":      
       pchar.quest.proverka.win_condition.l1 = "Location";      
       pchar.quest.proverka.win_condition.l1.location = "fortfrance_town";      
       pchar.quest.proverka.win_condition = "bandit_1";      
       break;      
            
            
       case "bandit_1":
       sld = CharacterFromID("buhar");          
           LAi_SetActorType(sld);      
           sld.dialog.currentnode = "first time";         
           LAi_ActorDialog(sld, pchar, "", 4.5, 0);
       break;


Кейс "proverka" запускается из диалога. При попадании в локацию fortfrance_town, я так понимаю, должен выполниться кейс "bandit_1", в котором НПС должен сам подойти к ГГ и начать диалог. Что не так? НПС не хочет сам подходить. Или я что-то упустил? Просто еще не до конца с проверками разобрался...


Сообщение отредактировал WMC - Воскресенье, 13.01.2013, 08:03
JamДата: Понедельник, 14.01.2013, 22:00 | Сообщение # 272
Пороховая обезьяна
Группа: Пират
Сообщений: 3
Награды: 0
Репутация: 0
Статус: В открытом море
-give_rose- подскажите пожалуйста, как сделать чтобы второй ГГ тоже проходил линейку Блада, но! стартовая локация не дом в англии, а палуба абортируемого корабля?

т.е. альт начало той-же линейки -give_rose-
NathanielДата: Понедельник, 14.01.2013, 23:07 | Сообщение # 273
Контр-адмирал
Группа: Капитан
Сообщений: 8036
Награды: 347
Репутация: 1845
Статус: В открытом море
Цитата (Jam)
подскажите пожалуйста, как сделать чтобы второй ГГ тоже проходил линейку Блада

Это сложно... Не получится без очень большого количества правок в коде это сделать...


Я был на краю земли, на краю бескрайних озёр, за горизонтом и на вершинах самых высоких гор.
Но я не нашёл там никого, кто не был бы моим другом!
JamДата: Вторник, 15.01.2013, 08:09 | Сообщение # 274
Пороховая обезьяна
Группа: Пират
Сообщений: 3
Награды: 0
Репутация: 0
Статус: В открытом море
Цитата (Nathaniel)
Это сложно...

я и не надеялся, что будет легко

а вообще где идет привязка к определенному гг?

и еще вопрос - фиксированные статы квестовых кораблей, как в 1.3.2 как сделать можно?


Сообщение отредактировал Jam - Вторник, 15.01.2013, 11:58
WMCДата: Пятница, 18.01.2013, 17:40 | Сообщение # 275
Матрос
Группа: Корсар
Сообщений: 53
Награды: 5
Репутация: 22
Статус: В открытом море
Как можно через диалог закрыть выход из локации? И открыть?
korsary4Дата: Суббота, 19.01.2013, 13:30 | Сообщение # 276
Адмирал
Группа: Администратор
Сообщений: 5204
Награды: 496
Репутация: 1935
Статус: В открытом море
Цитата (WMC)
НПС не хочет сам подходить.
а нпс в локации fortfrance_town стоит?

Цитата (WMC)
Как можно через диалог закрыть выход из локации? И открыть?
Код
        //закрыть выход из локи
         chrDisableReloadToLocation = true;
 
false, соответственно, открывает выходы из локации.

Цитата (Jam)
подскажите пожалуйста, как сделать чтобы второй ГГ тоже проходил линейку Блада, но! стартовая локация не дом в англии, а палуба абортируемого корабля?
И как по твоему новый ГГ должен пройти оригинальную линейку блада стартовав с палубы корабля? jokingly
А вообще, найди где Бладу дается новое начала. Там в 2 или 3-х файлах это расписано. По аналогии с Бладом, прописываешь нового ГГ.



Единственное, что можно сказать об удаче с уверенностью — она изменит.
--------
WMCДата: Суббота, 19.01.2013, 15:58 | Сообщение # 277
Матрос
Группа: Корсар
Сообщений: 53
Награды: 5
Репутация: 22
Статус: В открытом море
Цитата (korsary4)
а нпс в локации fortfrance_town стоит?
Да, стоит.
NathanielДата: Воскресенье, 27.01.2013, 00:27 | Сообщение # 278
Контр-адмирал
Группа: Капитан
Сообщений: 8036
Награды: 347
Репутация: 1845
Статус: В открытом море
Цитата (PavelSitnik)
Где найти id локаций?

program/locations/init/

В каждом файле в начале описания каждой локации есть такая строка:

Код
locations[n].id = "SentJons_town";
locations[n].id = "SentJons_сhurch";
locations[n].id = "Panama_tavern";
locations[n].id = "Lavega_store";

По этим идентификаторам и следует ориентироваться... Эти же id можно и нужно задавать в верхней строке ввода в дебаггере...
Например, чтобы попасть в резиденцию в Каракасе, нужно ввести:

Caracas_townhall,reload,reload1_back
и нажать кнопку справа...


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


Сообщение отредактировал Nathaniel - Воскресенье, 27.01.2013, 00:30
Кор$@RДата: Понедельник, 04.02.2013, 16:54 | Сообщение # 279
Матрос
Группа: Пират
Сообщений: 29
Награды: 0
Репутация: 0
Статус: В открытом море
Здравствуйте! Я хотел спросить вот я написал начало 
//-------------------------------------------------------------------------------
// ПОМОЩЬ СТАРОМУ ДРУГУ
//-------------------------------------------------------------------------------
case "HelpToSpainCaptain":
SetQuestHeader("HelpToSpainCaptain");
AddQuestRecord("HelpToSpainCaptain", "1");
Pchar.quest.HelpToSpainCaptain = "1";
break;

case "HelpToSpainCaptain1":
AddQuestRecord("HelpToSpainCaptain", "2");
Pchar.quest.HelpToSpainCaptain = "2";
break;

case "HelpToSpainCaptain2":
AddQuestRecord("HelpToSpainCaptain", "3");
Pchar.quest.HelpToSpainCaptain = "3";
ChangeCharacterAddressGroup(CharacterFromID("JanKrosie"),"Martinique_tavern", "sit", "sit6");
break;

case "HelpToSpainCaptain3":
AddQuestRecord("HelpToSpainCaptain", "4");
ChangeCharacterAddressGroup(CharacterFromID("WomanHSC"),"Martinique_town", "goto", "goto11");
ChangeCharacterAddress(characterFromID("JanKrosie"), "None", "");
PChar.quest.HelpToSpainCaptain4.win_condition.l1 = "location";
PChar.quest.HelpToSpainCaptain4.win_condition.l1.location = "Martinique_town";
PChar.quest.HelpToSpainCaptain4.win_condition = "HelpToSpainCaptain4";

Добавлено (04.02.2013, 16:54)
---------------------------------------------
Но он у меня даже до роликов в игре не доходит, вылет просто на рабочий стол, нз что это такое?


Мы славные Морские волки
MettДата: Понедельник, 04.02.2013, 19:48 | Сообщение # 280
Капитан I ранга
Группа: Корсар
Сообщений: 586
Награды: 91
Репутация: 565
Статус: В открытом море
Цитата
ChangeCharacterAddress(characterFromID("JanKrosie"), "None", "");

если на то пошло, то ChangeCharacterAddress(characterFromID("JanKrosie"), "None", "", "");

т.е. надо две пустые ковычки, т.к. ChangeCharacterAddress(id персонажа , локация, группа локаторов, локатор);


Что толку, если не можешь сделать мир лучше.
Форум » Ад-доны для игр серии Корсары » FAQ по модам - "Сделай мод сам" » Кодинг квестов (Рассмотрим написание квестов)
Поиск:

Copyright Pirates-Life.Ru © 2008-2024


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