Привет всем! Решил я значит поковыряться в скриптах ККС и сразу же натолкнулся на проблему. В начальном диалоге прописал включении функции:
Код
// --> матрос на корабле, прибытие в Сен-Пьер case "Startsailor": dialog.text = "Эх, первым делом, как сойду на берег - напьюсь!.. Просыпайтесь, месье... как вас там... Прибыли!"; link.l1 = "А-ах! Что, уже? Чертова жара..."; link.l1.go = "Startsailor_1"; DoQuestFunctionDelay("pirateline", 0.1); break;
Комментарии - это следствие экспериментов с кодом, дабы он наконец заработал. Но он, на удивление, не работает. Строчка "работает" появляется, а персонаж не генерируется Вот что говорит error log:
Строчка "работает" появляется, а персонаж не генерируется...
Я бы для начала попробовал поставить NPC в какой-нибудь локатор, в котором персонаж гарантированно залогинится. Например, в пустой дом или в постоянно пустой существующий локатор. Если появится - значит всё хорошо; нет - искать причину более глубоко. А уже после этого проверять основной квест.
В городе же указанный локатор может быть или занят кем-то, или вообще не обрабатываться... Я был на краю земли, на краю бескрайних озёр, за горизонтом и на вершинах самых высоких гор. Но я не нашёл там никого, кто не был бы моим другом!
Сообщение отредактировал Nathaniel - Четверг, 17.08.2017, 16:09
Я бы для начала попробовал поставить NPC в какой-нибудь локатор, в котором персонаж гарантированно залогинится.
Ставил сперва в джунглях, проверял на двух разных локаторах goto. Все равно не логинится. Ошибка выдает лог, но видимой ошибки в коде я не вижу Странно
Добавлено (17.08.2017, 18:26) --------------------------------------------- Что ж, проблема решена, логика не понята. Скопировал вслепую код Грегуара и все заработало, даже на том локаторе, который отказывался работать.
Ребят, назрел такого рода вопрос. Мне нужно: 1. Пойти к НПЦ, поговорить с ним. 2. В процессе диалога он говорит что положил 25000 песо в свой сундук. 3. Забрать эти деньги из сундука.
Вопрос: как эти деньги в этот сундук добавить. Жизнь - как божественная комедия...
Поскольку у меня мало свободного времени, дам только некоторые советы: 1. Найди в коде похожего по геймплею квеста весь его функционал и открой эти файлы в своем Notepad++ (или похожем по функционалу блокноте). Найти можно по запомнившейся фразе например, а потом, отталкиваясь от диалога - найти все нужные функции будет не сложно. 2. По уже рабочему образцу создать свои функции наполнения сундука монетами и задействовать их в своем квесте. - Бизнесмен убъет в вас зрителя, но ты... Билли... Неужели тебе это могло понравиться? - Да я вообще только одним глазком...
Reboroda, Я уже по другому реализовал этот момент. Просто добавил деньги самому НПЦ и после его убийства снимаю их с него
Добавлено (12.08.2018, 04:27) --------------------------------------------- Ламбада, У тебя ошибка в названии Нужно поставить вот так
Код
void pirateline(string qName)
Добавлено (12.08.2018, 04:45) --------------------------------------------- Может кому интересно будет, я методом проб и ошибок, откопал вот такие функции: 1. Как сделать НПЦ игроком, т.е. дать управление над ним
Код
case "PlayerType_el": //7.08.2018 korsar328 Даём управление над другим персом LAi_SetPlayerType(CharacterFromID("Elizabet")); //объявляем игроком НПЦ с ID "Elizabet", может быть другой ID PChar = GetMainCharacter(); //получаем для него Характеристики, которые буду отражаться в окне персонажа SetMainCharacterIndex(GetCharacterIndex("Elizabet")); //Задаём ему характеристики которые мы прописали НПЦ DoReloadCharacterToLocation("SanSebastian_townhall", "goto", "goto2"); //ставим его в локацию DoQuestCheckDelay("quest_begin_SanSeb31", 2.0); //вызовем дополнительный кейс квеста если нужно GetCharacterIndex("Elizabet").BaseNation = FRANCE; // Ставим нацию НПЦ, у меня почему-то по умолчанию ставится Англия, возможно отголоски линейки блада //fix перков флагов DeleteAttribute(GetCharacterIndex("Elizabet"), "perks.list.FlagEng"); //убираем если нужно перк Флаг Англии DeleteAttribute(GetCharacterIndex("Elizabet"), "perks.list.FlagSpa"); //убираем если нужно перк Флаг Испании DeleteAttribute(GetCharacterIndex("Elizabet"), "perks.list.FlagHol"); //убираем если нужно перк Флаг Голландии SetCharacterPerk(GetCharacterIndex("Elizabet"), "FlagFra"); //Ставим перк Флаг Франции, или ставим ту нацию за которую вы играете Flag_FRANCE(); //Флаг на лету break;
2. Экран "На следующий день"
Код
case "WaitDay": WaitDate("", 0, 0, 1, 0, 0); //крутим день SetCurrentTime(9, 20); //ставим время RecalculateJumpTable(); //пересчитаем таблицу прыжка SetLaunchFrameFormParam("Прошел один день...", "", 0, 6); //зададаём параметры экрана LaunchFrameForm(); //открываем экран break;
3. Экран "На следующий день" с перезагрузкой в локацию
Код
case "WaitDay": WaitDate("", 0, 0, 1, 0, 0); //крутим день SetCurrentTime(9, 20); //ставим время RecalculateJumpTable(); // таблица прыжка SetLaunchFrameFormParam("Прошел один день...", "Reload_To_Location", 0, 6); //создаём окно с параметром Reload_To_Location SetLaunchFrameReloadLocationParam("SanSeb_port", "officers", "Sea_2_1", ""); //по завершению показа перезагружаем игрока в локацию LaunchFrameForm(); //показываем окно break;
4. Даём корабль и ставим корабль в локацию (Я наконец-то разобрался как это сделать!!!)
Код
case "give_ship_and_standShipinLocation": sld = CharacterFromID("dubua"); //получаем данные НПЦ sld.Ship.Name = "Великий"; //- имя корабля Меняем название корабля sld.Ship.Type = SHIP_SCHOONER; //задаём тип корабля SetCharacterShipLocation(CharacterFromID("dubua"), "SanSeb_port"); //Ставим корабль в локацию break;
Продолжение следует...
Жизнь - как божественная комедия...
Сообщение отредактировал korsar328 - Воскресенье, 12.08.2018, 04:47
кто подскажет - во время абордажа не переходит на вторую палубу . замочек появляется , а нажимаю на мышь - замок просто пропадает и всё. и ошибка только на большой палубе ,может как то можно заменить палубы в коде? с остальных палуб всё нормально.
Палубы-то заменить не проблема. Переиницилизировать их придётся. А это лично у меня всегда сопровождалось пропажей лута из капитанских рундуков... Просто способа переиницилизировать только конкретные локации я не нашёл.
Цитатаmcleod-s ()
во время абордажа не переходит на вторую палубу...
Стоит проверить оба варианта. И "reload.go" (куда выгружаете NPC), и, похоже, сам файл локаторов. Может, ещё есть какой-то нюанс, но уже не помню... Я был на краю земли, на краю бескрайних озёр, за горизонтом и на вершинах самых высоких гор. Но я не нашёл там никого, кто не был бы моим другом!
Я сделал так чтоб НПС подбегал к ГГ герою и начинал диалог (LAi_ActorDialog), после диалога НПС меняет местоположение (ChangeCharacterAddress), когда я добираюсь на новое местоположение НПС, я не могу с ним заговорить, что используется чтобы с ним можно было заговорить? Я так думаю это из-за изначального скрипта с подбеганием НПС к ГГ ???
GladValakas, перво-наперво спрошу: Вы меняли ему ноду диалога? Если нет, то поменяйте, думаю, понятно как это сделать. Ну и тип стоячего ему поставьте.
GladValakas, перво-наперво спрошу: Вы меняли ему ноду диалога? Если нет, то поменяйте, думаю, понятно как это сделать. Ну и тип стоячего ему поставьте.
Вы имеете ввиду NextDiag.TempNode ???
Добавлено (13.07.2019, 20:51) --------------------------------------------- там если даже обычного горожанина при входе в город заставить идти к ГГ, а точнее не идти а первым начать диалог с помощью LAi_ActorDialog, то он после разговора становится неактивным (стоит на месте и с ним нельзя опять заговорить)
там если даже обычного горожанина при входе в город заставить идти к ГГ, а точнее не идти а первым начать диалог с помощью LAi_ActorDialog, то он после разговора становится неактивным (стоит на месте и с ним нельзя опять заговорить)
Это абсолютно нормально. Что конкретно Вы хотите сделать после диалога? Просто навскидку понять невозможно...
Палубы-то заменить не проблема. Переиницилизировать их придётся. А это лично у меня всегда сопровождалось пропажей лута из капитанских рундуков... Просто способа переиницилизировать только конкретные локации я не нашёл.
нашел способ . просто переставил "рабочую палубу" на все классы кораблей ,на места нерабочих и всё. думаю это какой то локальный баг скорее всего .
int eclass = sti(GetCharacterShipClass(boarding_enemy)); // класс корабля противника if (CheckAttribute(&Locations[boarding_location], "UpDeckType")) { switch (eclass) { case 1: Locations[boarding_location].boarding.nextdeck = "Boarding_Cargohold"; break; case 2: Locations[boarding_location].boarding.nextdeck = "Boarding_Cargohold"; break; case 3: Locations[boarding_location].boarding.nextdeck = "Boarding_Cargohold"; break; case 4: Locations[boarding_location].boarding.nextdeck = "Boarding_Cargohold"; break; case 5: Locations[boarding_location].boarding.nextdeck = "Boarding_Cargohold"; break; case 6: Locations[boarding_location].boarding.nextdeck = ""; break;
Добавлено (05.08.2019, 17:11) --------------------------------------------- а вот ещё вопрос - почему у некоторых вестовой для регаты подходит в испанских городах,если прописан дружественный город? и при чем тут сент-джонс в этой строчке ? - if (pchar.questTemp.Regata.CureerCity == "PortRoyal") pchar.questTemp.Regata.CureerCity = "SentJons"; ... заранее спасибо за возможный ответ!)
//запустить регату if (!CheckAttribute(pchar, "questTemp.RegataGo") && sti(pchar.GenQuest.Racing.Count) == 3) { pchar.questTemp.RegataGo = "true"; pchar.questTemp.Regata.CureerCity = FindFriendCityToMC(true);//город, в котором вестовой подойдет if (pchar.questTemp.Regata.CureerCity == "PortRoyal") pchar.questTemp.Regata.CureerCity = "SentJons"; pchar.quest.Regata_Cureer.win_condition.l1 = "location"; pchar.quest.Regata_Cureer.win_condition.l1.location = pchar.questTemp.Regata.CureerCity+"_town"; pchar.quest.Regata_Cureer.function = "PrepareToRegata"; log_testinfo(pchar.questTemp.Regata.CureerCity);
Всем добра! Подскажите, как квест к конкретному гг приписать? Какой код должен быть? Заранее спасибо!
Добавлено (26.06.2023, 20:50) --------------------------------------------- Подскажите пожалуйста, где именно блокируется выбор национальности гг при создании нового игрового профиля? Ну, то есть, если мы играем за Питера Блада, то он англичанин, и сменить нацию нельзя, вот этот блок нации мне и нужен... За ранее спасибо!
Добавлено (29.06.2023, 17:12) --------------------------------------------- Все разобрался! Привязать квест к конкретному гг можно через диалог используя: if (pchar.name == "Имя ГГ") или if (startHeroType == n) И затем прописать новую ветку диалога, для конкретного гг, которая будет доступна только ему, и через диалог дать квест.
Заблокировать нацию можно по пути: Program\INTERFACE\selectCharacter далее ищем строчку SelectNation, и пишем следующее:
void selectEngland() { if (startHeroType == 1) SelectNation(ENGLAND); //Питер Блад if (startHeroType == 2) SelectNation(SPAIN); //Диего Эспиноза if (startHeroType > 2) SelectNation(ENGLAND); }
void selectFrance() { if (startHeroType == 1) SelectNation(ENGLAND); //Питер Блад if (startHeroType == 2) SelectNation(SPAIN); //Диего Эспиноза if (startHeroType > 2) SelectNation(FRANCE); }
void selectSpain() { if (startHeroType == 1) SelectNation(ENGLAND); //Питер Блад if (startHeroType == 2) SelectNation(SPAIN); //Диего Эспиноза if (startHeroType > 2) SelectNation(SPAIN); }
void selectHolland() { if (startHeroType == 1) SelectNation(ENGLAND); //Питер Блад if (startHeroType == 2) SelectNation(SPAIN); //Диего Эспиноза if (startHeroType > 2) SelectNation(HOLLAND); }
void selectPirate() { if (startHeroType == 1) SelectNation(ENGLAND); //Питер Блад if (startHeroType == 2) SelectNation(SPAIN); //Диего Эспиноза if (startHeroType > 2) SelectNation(PIRATE); }
Таким образом у нас будет питер англичанен, диего испанец, а всем остальным можно выбрать нацию, только Диего нужно ставить вторым в выборе персонажей после Питера.
Сообщение отредактировал Isnogood - Воскресенье, 04.06.2023, 20:54