Квесты можно прописывать или чисто через диалоги или в файле. Я лично предпочитаю большую часть в отдельном файле, в диалоге только по большое необходимости. Все квесты лежат в файле Quest/quest_reaction.c
Значит открываем файл quest_reaction.c листаем в самый конец. там сначала делаем комментарий: //////////////////////////////////////////////////////////////// ///////////////Квест такой-то делал тот-то////////////////////// //////////////////////////////////////////////////////////////// А дальше пишем уже знакомое всем
Code
Case“имя кейса”: Собственно тело кейса…… Break;
Все квесты пишутся через эти самые кейсы. Рассмотрим какой-нибудь квест, например, Квест Адмирал Кристофер, из нашего аддона Приключения Корсаров.
Итак, квест начинается после разговора с Кристофером У него в диалоге прописал вызов определенного кейса файла quest_reaction.c
Code
NextDiag.TempNode = "AdmiralLineKristofer_1_cont"; AddDialogExitQuest("AdmiralLineKristofer_1"); TakeItemFromCharacter(NPChar, "letter_Kristofer1"); GiveItem2Character(pchar, "letter_Kristofer1"); dialog.text = "Будет у меня к тебе дельце, передать письмо нужно в Порт-Рояль. Его зовут Кевин Болтер, скажи, что ты от меня. Как в старые добрые вренена, "+ GetFullName(Pchar)+"?"; link.l1 = "Как в старые добрые вренена. Будет сделано, "+ GetFullName(NPchar)+"."; link.l1.go = "exit";
AddDialogExitQuest("AdmiralLineKristofer_1"); - данная фукция вызывает срабатывание кейса case "AdmiralLineKristofer_1".
Собственно сам кейс:
Code
case "AdmiralLineKristofer_1": // запись в журнал SetQuestHeader("AdmiralLineKristofer"); AddQuestRecord("AdmiralLineKristofer", "1");
Итак, сначала нужна запись в журнал о квесте SetQuestHeader("AdmiralLineKristofer"); - объявили заголовок квест AddQuestRecord("AdmiralLineKristofer", "1"); - добавили первую запись -------------------------------------
Судовой журнал
В ГПК все записи хранятся в файле quest_book_an1.txt и quest_book_an2.txt Например,
Code
#QUEST AdmiralLineKristofer Встреча старого друга Кристофера #TEXT 1 Случайно на осторове Невис, я встретил своего старого друга Кристофера Мовера. Несколько лет назад он был адмиралом. Сейчас его уволили, забыв все его заслуги. Кристофер попросил меня отвезти письмо на остров Ямайка,его необходимо передать Кевину Болтеру. #TEXT 2 Я нашел Кевина Болтера в городе Порт-Рояль,я отдал ему письмо. Теперь нужно передать Кристоферу, что цена поднялась до 45000 пиастров. Теперь на Невис.
ChangeCharacterAddressGroup(characterFromID("Kevin_Bolter"), "PortRoyal_town", "goto", LAi_FindNearestFreeLocator("goto", locx, locy, locz)); данной фукцией ставим нужного нам перса в Порт Рояле.
LAi_FindNearestFreeLocator("goto", locx, locy, locz) - находит свободный локатор в заданной группе локаторов, в данном случае goto.
Characters[GetCharacterIndex("Kevin_Bolter")].Dialog.CurrentNode = "AdmiralLineKristofer_1"; - ставим определенную ветку диалога. Теперь все зависит от выбранной ветки в диалоге с персом Kevin_Bolter. Мы разобрали только первый кейс квеста. Идем дальше...
Нашёл, а как сделать так что бы твой закзчик квеста предложил денег, а потом когда ты достанешь то что он просил он забирает это но толь ко пытается убить меня. И как на его труп добавить вещи.
GiveItem2Character(sld, "id_предмета"); - id_предмета исправить на необходимый и добавить строку в верхнее описание нпс. После смерти все вещи, которые ему положили, останутся на трупе.
Единственное, что можно сказать об удаче с уверенностью — она изменит. --------
Morgan0406, не скоро. сейчас кодом квестов не для уроков занят, аддоном занимаемся. Единственное, что можно сказать об удаче с уверенностью — она изменит. --------
Привет! Занимаюсь собственным преобразованием Корсаров 3, Как сделаю выложу...(уже могу сказать что круто)..но я не могу никак понять систему действий! А именно: мне нужно, чтобы после диалога с определённым человеком, у главного героя появлялся определённый предмет. Т.е. поговорил...а у тя бах...шпага в инвентаре! Это ну прямо очень нужно! Помогите пожалуйста...это сократит время создания патча! где какую строчку писать и что в этой строке?! Я уже многое перепробовал нашёл в дебрях Programm файл в котором шаблон "Взять предмет" "Отдать предмет" но не разобрался что и куда вписывать?!
Antarktida, вот эта строка GiveItem2Character(pchar, "id item"); вместо id item - уникальный id предмета, будь то blade25 или какой-то другой предмет. А забрать предмет у герой вот так - TakeItemFromCharacter(pchar, "id item");, также вместо id item - уникальный id предмета Единственное, что можно сказать об удаче с уверенностью — она изменит. --------
Спасибо! Я уже разобрался! Главное не эти строки...так как они на каждом шагу встречаются, а то куда ты их напишешь! Следовательно для того, что бы в начале квеста корсаров 3, мужик с картой отдал вам какой либо предмет мы идём в папку: C:\Program Files\Age of Pirates - Caribbean Tales\Program\quests открываем файл:story_line ищем там строку Case....начало квеста.... и ниже будет строка GiveItem2Character(pchar, "...map") сразу под ней пишем такуюже но с другим ID... ну вот! Додумался сам но всё равно огромное спасибо! Обещаю что патчик будет ну очень забавным и классным! Чуток доработаю и выложу!
ded, в разных корсарах есть еще файлы, где квесты прописывают, помимо quests_reaction.c. например, story_line.c и другие. Единственное, что можно сказать об удаче с уверенностью — она изменит. --------