То есть, я не имею права распространять свой будущий аддон с текстурами КС? Или всё таки можно будет если указать что текстурки от КС? А то хочу сделать, что-то типа продолжения КС
Андреевич, в свой аддон нельзя. Для личного пользования можно что угодно делать. Ну или у разработчиков разрешение получай на использование. Единственное, что можно сказать об удаче с уверенностью — она изменит. --------
Резонный вопрос: а сможете?.. )) Дело в том, что очень многие этого хотят, но идейное вдохновление обычно заканчивается после нескольких неудачных попыток написать порой даже работоспособный простой квест... К сожалению, статистика...
Ну и кроме того, Вы формально не имеете права выкладывать скрипты, принадлежащие "Акелле" в сеть без разрешения... Я был на краю земли, на краю бескрайних озёр, за горизонтом и на вершинах самых высоких гор. Но я не нашёл там никого, кто не был бы моим другом!
Nathaniel, ну пока что получилось поменять начальную линейку блада на свою. Расставил охрану в начальное поместье и нападение бандитов. Главарь бессмертный, и после того, как главный герой проигрывает, то он становится рабом, которого хотят продать в бордель (ведь у меня ГГ Мэри Каспер).
Следующим шагом планирую сделать бунт, и если все бандиты трупами будут, то мы забираем их люггер, а если проигрываем, то попадаем в бордель, и откуда надо будет выбираться
PS А остальные аддоны про которые на этом сайте написаны оффициальны или не все?
пока что получилось поменять начальную линейку блада на свою
У меня всё это тоже получалось переделать и переписать... Если интересно, я могу даже своим списком изменений поделиться, пишите в ЛС. Но всё это сделано на основе уже написанного!.. А когда я взялся писать в конце прошлого года два новых отдельных квеста - тоже на основе уже имеющихся, - возникли проблемы. То локаторов не хватает, то quest_reaction неправильно оформлен, то ещё что-то...
Цитата (Андреевич)
оффициальны или не все?
Все аддоны, фактически, являются неофициальными фанатскими дополнениями. Всё фанатское движение, возникшее после выхода в свет К2:ПКМ, держится на энтузиазме фанатов... Вот только скрипты и движок принадлежат "Акелле" и права на использование их скриптов нужно спрашивать у них. У BlackMark Studio, как Вы знаете, был договор с "Акеллой"!.. Я был на краю земли, на краю бескрайних озёр, за горизонтом и на вершинах самых высоких гор. Но я не нашёл там никого, кто не был бы моим другом!
Милош, есть) Они привязаны к островам. Их видно через вьювер, но дело в том что видно только локаторы, а вот где они находятся относительно острова - вопрос... Включить бы, чтобы в игре было видно. Наверное придется действовать методом научного тыка
2 WMC включаешь DEV-режим, в море нажимаешь кнопку 5 на цифрах (не Num Lock!) кнопки 6 и 7 - увеличить/уменьшить размер шрифта локаторов п.с. одно название накладывается на другое, так что читать локаторы не очень удобно Что толку, если не можешь сделать мир лучше.
Сообщение отредактировал Mett - Суббота, 27.07.2013, 01:16
У меня вопросы: 1) Как сделать, что бы после захвата Ла-Веги по испанскому сюжету в ней появились люди? Такое уже было осуществлено в мод-паке 2) Что бы после захвата Форт-Оранжа по Английской линейке, он стал принадлежать мне? Также желательно с функцией "Собственность ГГ", что бы не нападали. Заранее спасибо Muv by Redline
Ребят, помогите Пишу квест, по ходу которого необходимо захватить Маракайбо. В общем, когда захватил город и поговорил с губернатором, нужно чтобы на улице ко мне для диалога подошел НПС. Теперь собственно проблема: НПС не появляется, как не прописывай. Там видимо прерывание какое-то стоит. Подскажите как это злодейство можно обойти.
Само название процедуры подсказывает: "следующий временной узел"!
Это значит, что следующий диалог или процедура с этим NPC должна отработать с указанной ветки!.. Я был на краю земли, на краю бескрайних озёр, за горизонтом и на вершинах самых высоких гор. Но я не нашёл там никого, кто не был бы моим другом!
Сообщение отредактировал Nathaniel - Вторник, 20.08.2013, 20:27
Вот только скрипты и движок принадлежат "Акелле" и права на использование их скриптов нужно спрашивать у них.
Вернее и не скажешь. Хотя это можно и обойти. Если взять официально купленную игру, например Корсары 3, и ничего не меняя просто добавить свои квесты, то никто ничьих прав не нарушает. Особенно если представлять свои файлы бесплатно и только как добавление нескольких к официальной версии.
Думаю, что не ошибаюсь. Иначе зря пишу свои квесты.
Кстати. Для тех, кому интересно, вот маленький тест квест.
Этот квест запускается и работает без сбоев на играх Корсары 3, Корсары 3 - Ветер свободы и Корсары 3 - Тайны дальних морей. ПРИМЕЧАНИЕ: В Корсарах 3 отсутствует функция «абордаж и смерть» - "Ship_capture_NPC_Dead". Поэтому вначале стоит изменить файл quests_check.с (путь: program\quests). Находим строку (в notepad++, строка 318):
Сюжет: ГГ заходит в таверну на Св. Мартине и случайно встречает священника. Тот просит ГГ отвести предмет на Св. Евстафий и передать его девушке Реббеке. ГГ берет предмет, но как только он выходит из таверны на него нападает бандит. Далее ГГ выходит в море и на него тут же нападает пиратский корабль. Потопив его, ГГ прибывает на Св. Евстафий и найдя девушку передает ей предмет.
Потребуется изменить следующие файлы: quests_reaction.с (путь: program\quests) StoryCharacters.с (путь: program\characters\init) quests_texts.txt (путь: RESOURCE\INI\texts\russian\questbook) и написать два файла для диалогов Valerian_dialog.с и Rebеkka_dialog.с (путь: program\dialogs\russian) Для большего удобства лучше прописать свои файлы для квеста и для персонажей.
Создаем персонажей: Открываем файл StoryCharacters.с и пишем:
Код
makeref(ch,Characters[n]); // священник ch.id = "First Church Treas"; ch.name = "Отец"; ch.lastname = "Валериан"; ch.model = "priest_2"; ch.location = "StMartin_Tavern"; // сидит в таверне и никуда не уходит ch.location.group = "sit"; ch.location.locator = "sit3"; ch.Dialog.Filename = "Valerian_dialog.c"; ch.namelock = 1; //запрещаем менять имя ch.QuestLock = 1; ch.sex = "man"; LAi_SetImmortal(ch, true); Lai_SetSitType(ch); //мужик сидячий n = n + 1;
makeref(ch,Characters[n]); // Бандюк ch.id = "Bandiuk"; ch.name = "Бандит"; ch.lastname = ""; ch.rank = 5; ch.model = "officer_2"; ch.nation = PIRATE; ch.RemoveLock = true; ch.skill.Fencing = "5"; ch.skill.Gun = "5"; ch.sex = "man"; ch.CanThiefed = "false"; LAi_NPC_Equip(ch, ch.rank, true, true); //вещички соответствуют уровню, но можно и отдельно прописать оружие Lai_SetStayType(ch); //а этот - стоячий
makeref(ch,Characters[n]); // Девушка ch.id = "Rebekka"; ch.name = "Реббека"; ch.lastname = "Робинсон"; ch.model = "lady_6"; // модель выбираем по желанию ch.RemoveLock = true; ch.Dialog.Filename = "Rebеkka_dialog.c"; ch.namelock = 1; ch.QuestLock = 1; ch.sex = "woman"; ch.CanThiefed = "false"; LAi_SetImmortal(ch, true); Lai_SetStayType(ch); n = n + 1;
NPS готовы. Теперь переходим непосредственно к квесту. Открываем файл quests_reaction.с и пишем
Код
///////////////////////////////////////////////////////////////////////////////// // НАЗВАНИЕ КВЕСТА и все такое /////////////////////////////////////////////////////////////////////////////////
case "ChurchTreasure_1": SetQuestHeader("ChurchTrs"); // открываем заголовок квеста в ЖЖ AddQuestRecord("ChurchTrs", "1"); // первая запись в ЖЖ GiveItem2Character(pchar, "Quest_ring_1"); //даем ГГ предмет ChangeCharacterAddressGroup(CharacterFromID("Bandiuk"), "StMartin_town", "goto", "goto1"); //ставим бандита в локацию ChangeCharacterAddressGroup(CharacterFromID("Rebekka"), "StEustatius_town", "goto", "goto2"); //ставим девушку в локацию PChar.quest.ChurchTreasure_2.win_condition.l1 = "location"; //следующий кейс начнется только когда ГГ выйдет в город PChar.quest.ChurchTreasure_2.win_condition.l1.location = "StMartin_town"; PChar.quest.ChurchTreasure_2.win_condition = "ChurchTreasure_2"; break;
case "ChurchTreasure_2": Locations[FindLocation(PChar.location)].reload.l1.disable = true; //закрываем выход в море, чтоб ГГ не сбежал LAi_SetWarriorType(CharacterFromID("Bandiuk")); LAi_SetHP(CharacterFromID("Bandiuk"), 100.0, 100.0); //жизнь бандита LAi_group_MoveCharacter(CharacterFromID("Bandiuk"), "PIRATES_BANDA"); LAi_group_SetRelation("PIRATES_BANDA", LAI_GROUP_PLAYER, LAI_GROUP_ENEMY); //не уважает бандит ГГ, что тут сделаешь? LAi_group_FightGroups("PIRATES_BANDA", LAI_GROUP_PLAYER, true); //создали бандита, как только ГГ выйдет из таверны NPS нападет PChar.quest.ChurchTreasure_3.win_condition.l1 = "NPC_Death"; // следующий кейс запуститься только когда NPS погибнет PChar.quest.ChurchTreasure_3.win_condition.l1.character = "Bandiuk"; PChar.quest.ChurchTreasure_3.win_condition = "ChurchTreasure_3"; break;
case "ChurchTreasure_3": AddQuestRecord("ChurchTrs", "2"); //запись в ЖЖ Locations[FindLocation(PChar.location)].reload.l1.disable = false; //открываем проход ChangeCharacterAddress(characterFromID("First Church Treas"), "None", ""); //убираем священника PChar.quest.ChurchTreasure_4.win_condition.l1 = "ExitFromLocation"; // следующий кейс запуститься когда ГГ покинет данную локацию PChar.quest.ChurchTreasure_4.win_condition.l1.location = PChar.location; PChar.quest.ChurchTreasure_4.win_condition = "ChurchTreasure_4";
break;
case "ChurchTreasure_4": ChangeCharacterAddress(characterFromID("Bandiuk"), "None", ""); //убираем бандита bQuestDisableMapEnter = true; //закрываем выход в карту, теперь ГГ на корабле не сбежит Island_SetReloadEnableGlobal(PChar.location, false); //запретить перегруз Group_CreateGroup("Kasatka"); //создаем вражий кораблик Group_AddCharacter("Kasatka", "Kasatka"); Group_SetGroupCommander("Kasatka", "Kasatka"); Group_SetAddress("Kasatka", Characters[GetMainCharacterIndex()].location, "", ""); //кораблик преследует ГГ SetCharacterRelationBoth(nMainCharacterIndex, GetCharacterIndex("Kasatka"), RELATION_ENEMY); //однозначно, враг Group_SetTaskAttack("Kasatka", PLAYER_GROUP); Group_LockTask("Kasatka"); UpdateRelations(); //обновим отношения PChar.quest.ChurchTreasure_5.win_condition.l1 = "Ship_capture_NPC_Dead"; //следующий кейс запуститься если кораблик потоплен или взят на абордаж PChar.quest.ChurchTreasure_5.win_condition.l1.character = "Kasatka"; PChar.quest.ChurchTreasure_5.win_condition = "ChurchTreasure_5";
break;
case "ChurchTreasure_5": AddQuestRecord("ChurchTrs", "3"); //еще запись в ЖЖ bQuestDisableMapEnter = false; //открываем карту Island_SetReloadEnableGlobal(PChar.location, true); //перегружаемся Group_SetAddress("Kasatka", "None", "None", "None"); //убираем вражий кораблик break;
case "ChurchTreasure_6": //это кейс запускается после диалога с девушкой, потому и нет перехода из предыдущих кейсов AddQuestRecord("ChurchTrs", "4"); //пишем в ЖЖ CloseQuestHeader("ChurchTrs"); //закрываем заголовок квеста в ЖЖ TakeNItems(PChar, "Quest_ring_1", -1); //отбираем вещичку у ГГ ChangeCharacterAddress(characterFromID("Rebekka"), "None", ""); // убираем девушку break;
Написали квест, идем писать диалоги. Создаем файл Valerian_dialog.с (разговор со священником)и пишем
switch(Dialog.CurrentNode) { case "First time": dialog.text = "Приветствую тебя странник. Сделай доброе дело, отвези это кольцо на Св. Евтафий. Найди там девушку по имени Реббека Робинсон. Вот ей колечко то и отдай. И будет тебе счастье."; link.l1 = "Конечно, я помогу тебе. Грех священнику не помочь."; link.l1.go = "cherch ques"; link.l2 = "Ага, уже побежал."; link.l2.go = "exit";
break;
case "cherch ques": AddDialogExitQuest("ChurchTreasure_1"); //запускает первый кейс из квеста, начинаем квест после диалога, если ответ положительный NextDiag.CurrentNode = NextDiag.TempNode; DialogExit(); break;
case "Exit": ChangeCharacterAddress(characterFromID("First Church Treas"), "None", ""); //убираем священника, если ответ отрицательный, второй раз квест взять будет невозможно. NextDiag.CurrentNode = NextDiag.TempNode; DialogExit(); break; } }
Создаем файл Rebеkka_dialog.с (разговор с девушкой) и пишем
switch(Dialog.CurrentNode) { case "First time": dialog.text = "Не приставайте ко мне. Я вас не знаю."; link.l1 = "Но… я привез колечко от отца Валериана…"; link.l1.go = "rebev2";
break;
case "rebev2": dialog.text = "О-о-о… Не кричите так громко, мужчина. Давайте колечко и всего вам доброго."; link.l1 = "Что за..."; link.l1.go = "exit"; break;
case "Exit": AddDialogExitQuest("ChurchTreasure_6"); //запускает последний кейс из квеста NextDiag.CurrentNode = NextDiag.TempNode; DialogExit(); break; } }
И на последок, записи в ЖЖ. Открываем quests_texts.txt и пишем, вначале или в конце, можно и в середине, кому как нравится.
Код
#QUEST ChurchTrs Простая вроде история #TEXT 1 В трактире, встретился мне священник и… ни тебе благословения, ни тебе спасительного слова, а вот так, сразу, сунул мне какое-то кольцо и беги с ним на Св. Евстафий, передавай его девушке. Ох уж эти шуры-муры наших святош. Ну да ладно, в путь!!! #TEXT 2 Только вышел и на тебе. Сабелькой по голове. Странные шутки у местных. #TEXT 3 Не, ну они уже достали. Неужели эта штукенция такая дорогая, или еще что? Если так дальше дело пойдет, не сносить мне головы. #TEXT 4 Реббека Робинсон, странная себе такая девушка. Чего я только не преодолел, чтобы колечко привести, и на тебе… Все таки культура на этих островах еще далека от совершенства.
У меня была похожая проблема и теперь прописываю название файла диалога в кейсе квеста, хоть он и задан в файле описания НПС. Лучше подстраховаться. К тому же, у тебя диалог идет и на английском, и на русском в одном кейсе. Может и не в этом проблема, но когда я так делал, у меня диалог глючило, хоть он и работал, но виснул.
Сообщение отредактировал Chernozmey - Вторник, 03.09.2013, 08:37