Правила · Регистрация · Справка · Пользователи · Календарь · Поиск · Сообщения за день |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
24.03.2007, 11:55 | #6 |
BGTeam
|
Итак наконец я добрался до написания уроков!
Урок №5 «Кодинг квестов» Итак значит все квесты в К3 могут кодяться в разных местах. Можно это делать чисто через диалоги, но у этого способа очень много минусов, поэтому мы его рассматривать не будем. Мы рассмотрим вариант кодинга квестов в файле Quest/quest_reaction.c(можно ещё это делать в story_line.c, но в этом файле делается основная сюжетная линия, и поэтому не будет перемешивать код) Значит открываем файл quest_reaction.cи идем в самый низ… там сначала делаем комментарий: //////////////////////////////////////////////////////////////// ///////////////Квест такой-то делал тот-то////////////////////// //////////////////////////////////////////////////////////////// А дальше пишем уже знакомое всем Код:
Case“имя кейса”: Собственно тело кейса…… Break; Теперь разберем какой-нибудь уже сделанный квест. Рассмотрим квест «Конвоир» (2 квест сюжетки) Квест начинается у губернатора Ла-вега, значит смотрим его файл диалога… LaVega_Hovernor_dialog.c Среди прочего кода там находим строчки… Код:
link.l3 ="Нет, ли у вас какого-нибудь поручения для молодого капитана?"; link.l3.go ="quest_guard"; Код:
case "begin_quest": NextDiag.CurrentNode = NextDiag.TempNode; DialogExit(); AddDialogExitQuest("begin_quest"); //// нас интересует вот эта строка в ней происходит запуск кейса begin_quest из файла quest_reaction … break; вот он Код:
case "begin_quest": AddQuestRecord("quest_guard", "1"); // здесь происходит запись в судовой журнал.. (все записи судового журнала находятся в resource\ini\texts\russian\questbook\quests_texts.txt) ChangeCharacterAddressGroup(characterFromID("MatteusDull"), "LaVega_town", "Goto", "Goto21")); // здесь идет помещение персонажа с ИД MatteusDull в город ЛА-вега в локатор goto 21 Characters[GetCharacterIndex("LaVega_Hovernor")].Dialog.CurrentNode = "SecondTime"; // прописываем какой-диалог будет с нами говорить губернатор при следующей с ним встреей (этим мы убрали возможность взять квест много раз…) break; итак сейчас нас там интересует кейс exit….. Код:
case "Exit": AddDialogExitQuest("go_to_ship_Matteus"); // запусккейсаизквест_реактиона AddQuestRecord("quest_guard","ship"); // запись в судовой журнал NextDiag.CurrentNode = NextDiag.TempNode; DialogExit(); break; Код:
case "go_to_ship_Matteus": LAi_SetActorType(characterFromID("MatteusDull")); // прописываем тип актера Матеусу LAi_ActorRunToLocator(characterFromID("MatteusDull"), "reload", "reload1_back", "reload_Matteus", -1); // заставляем его бежать на пристань.. после чего запускается сразу кейс reload_Matteus AddPassenger(pchar, characterFromID("MatteusDull"), false); // добавляем его в пассажиры // я слегка укоротил это кейс потому что нашел там один косяк…=) ну ладно об этом пока не будем break; Код:
case "reload_Matteus": ChangeCharacterAddressGroup(characterFromID("MatteusDull"), "Matteus_deck", "Goto", "goto6")); // перемещаем Матеуса в локацию Matteus_deck pchar.quest.reloadPITER.win_condition.l1 = "location"; pchar.quest.reloadPITER.win_condition.l1.location = "Montserrat"; pchar.quest.reloadPITER.win_condition = "reload_PiterBlake_to_Matteus_deck"; // а вот в этих 3 строчках написано, что когда ГГ окажется около острова Монтсерат запустить кейс reload_PiterBlake_to_Matteus_deck break; Код:
case "reload_PiterBlake_to_Matteus_deck": DoReloadFromSeaToLocation("Matteus_deck", "goto", "goto9"); // здесь происходит релаод ГГ с моря в локацию LAi_SetActorType(characterFromID("MatteusDull")); //делаем Матеуса актером LAi_ActorDialog(characterFromID("MatteusDull"), Pchar, "", 1, 1); // заставляем его начать диалог с ГГ Characters[GetCharacterIndex("MatteusDull")].Dialog.CurrentNode = "ship"; // прописываем какой именно дилаог должен начать маттеус Break; Вот они….(это уже опять вернулись в квест_реактион) Это в случае если с Матеусом не договорились и с ним начинается бой Код:
case "kill_Matteus0": LAi_SetWarriorType(CharacterFromID("MatteusDull")); // тип воина для Матеуса LAi_group_MoveCharacter(CharacterFromID("MatteusDull"), "enemy"); //помещаем его в группу враги LAi_group_FightGroups("enemy", LAI_GROUP_PLAYER, true); // начинаем бой между группой враги и группой ГГ (то есть между Матеусом и ГГ) LAi_SetFightMode(pchar, true); // боевой режим для ГГ RemovePassenger(Pchar,CharacterFromID("MatteusDull")); // удаляем Матеуса из пассажиров LAi_QuestDelay("kill_Matteus1", 1.0); // запускаем следующий кейс через 1 секунду break; Код:
case "kill_Matteus1": Pchar.quest.kill_Matteus_next.win_condition.l1 = "NPC_Death"; Pchar.quest.kill_Matteus_next.win_condition.l1.character = "MatteusDull"; PChar.quest.kill_Matteus_next.win_condition = "kill_Matteus2"; // Здесь описано, что после убийства матеуса запутситься кейс kill_Matteus2 break; Код:
case "kill_Matteus2": AddQuestRecord("quest_guard","kill_Matteus0"); // опятьзапись всудовойжурнал… QuestToSeaLogin_PrepareLoc("Montserrat", "reload", "reload_3", false); QuestToSeaLogin_Launch(); // а эти 2 строчки нужны для того, чтобы ГГ вернулся назад в море //доделать!!!! вариант квеста после убийства чувака ( а этот комментарий я оставлю без комментариев=))) break; теперь рассмотрим 2 продолжение квеста.. это кейс shore_dialog_Montserrat, который запускается опять же таки из диалога с матеусом… Код:
case "shore_dialog_Montserrat": ChangeCharacterAddressGroup(characterFromID("MatteusDull"), "Montserrat_shore", "Goto", "goto2")); // перемещаем матеуса в бухту DoReloadCharacterToLocation("Montserrat_shore","goto","goto1"); // перемещаем ГГ в бухту LAi_QuestDelay("shore_dialog_Montserrat_next", 1.0); // запускаем следующий кейс LAi_SetActorType(characterFromID("MatteusDull")); // типа актера для Матеуса Characters[GetCharacterIndex("MatteusDull")].Dialog.CurrentNode = "shore_dialog"; // диалог для Матеуса break; Код:
case "shore_dialog_Montserrat_next": LAi_ActorDialog(characterFromID("MatteusDull"),characterFromID("Blaze"),"",0,1); break; Код:
case "Go_to_jungle": RemovePassenger(Pchar,CharacterFromID("MatteusDull")); // удаляем Матеуса из пассажиров ChangeCharacterAddressGroup(characterFromID("guardM1"), "Montserrat_town_exit", "Goto", "guard1")); // прописываем охрану у города ChangeCharacterAddressGroup(characterFromID("guardM2"), "Montserrat_town_exit", "Goto", "guard2")); //прописываем охрану у города // Для этого персонажи с такими ИД должны быть прописаны!!! Locations[FindLocation("Montserrat_town_exit")].locators_radius.goto.goto_quest = 3.0; // делаем радиус локатора goto_quest большим pchar.quest.dialog_with_guard.win_condition.l1 = "locator"; pchar.quest.dialog_with_guard.win_condition.l1.location = "Montserrat_town_exit"; pchar.quest.dialog_with_guard.win_condition.l1.locator_group = "goto"; pchar.quest.dialog_with_guard.win_condition.l1.locator = "goto_quest"; pchar.quest.dialog_with_guard.win_condition = "dialog_with_guard"; // в этих 5 строчках описано, что когда ГГ окажется в локаторе goto_questто запуститься кейс dialog_with_guard break; Код:
case "dialog_with_guard": ChangeCharacterAddressGroup(characterFromID("MatteusDull"), "Lavega_townhall", "Goto", "goto1")); // здесь переноситсья к Губернатору Ла-Вега (так надо!) LAi_SetActorType(characterFromID("guardM1")); // тип актера одному из стражников LAi_ActorDialog(characterFromID("guardM1"),Pchar , "", 0, 0.1);// начинаем диалог с ГГ Break; Значит чтобы вам было легче вот списочек функций в игре (далеко не всех!, и возможно у какой-то из них неправильное описание =)) У некоторых функций есть перед её именем указан тип..НО для её использования тип писать не надо…. В скобках после имени указаны параметры функции… их нужно заменять на свое…… Ну что ж пока что все….Продолжение следует….. Последний раз редактировалось dima12, 17.05.2008 в 18:11. |
__________________
Нужный человек не в том месте может перевернуть мир! |
Здесь присутствуют: 1 (пользователей - 0 , гостей - 1) | |
Опции темы | Поиск в этой теме |
Опции просмотра | |
|
|
Часовой пояс GMT +4, время: 16:35 |
Архив |