Форум » Общие вопросы по WME » диалоговые окна » Ответить

диалоговые окна

Vividarium: начал разбираться совсем недавно, многое не понимаю. вот например такой вопрос: как реализовать диалоговое окно, и к чему именно закреплять скрипты в данном случае? собственно квест от первого лица (если это имеет значение). ведь диалоговое окно это когда говориш с персонажем, выбираеш варианты ответов и действия связанные с ними, ну там например получить предмет и прочее. но сколько бы я ни лазил по переведённому мануалу, ничего не получается, посмотрел исходники wme_demo, где там загружается мужчина, пробовал реализовать нечто подобное но никак буду признателен за наглядный пример

Ответов - 1

Pipec: На самом деле твой вопрос очень емкий, но попробую немного объяснить на примере из wme_demo Там есть такой перец - oldguy. Он реализован как entity и загружается в сцену room в скрипте scene_init.script принадлежащем сцене. В нем есть строка global OldGuy = Scene.LoadEntity("entities\oldguy\oldguy.entity"); Файл entities\oldguy\oldguy.entity описывает свойства этого чувака, в т.ч. там есть строка SCRIPT="entities\oldguy\oldguy.script". В этом скрипте реализован весь функционал олдгуя, в т.ч. и общение через диалоговое окно. Рассмотрим этот файл. Там есть обработчик событя "Talk". Это событие возникает, если клацнуть на кнопке диалога в меню, вызываемом правой кнопкой мыши. Если не понятно как это происходит, скажи, я объясню подробнее, чтобы сейчас не углубляться в дебри. Так вот, когда к олдгую применили событие Talk, происходят какие-то манипуляции, но самое главное это: // and let the dialogue begin OldGuyDialogue(); OldGuyDialogue(); - это функция (подпрограмма) описанная далее за обработчиком события Привожу ее текст полностью со своими коментариями function OldGuyDialogue() { var Responses; var Selected; var Loop = true; while(Loop) //Запускается цикл, в котором будет происходить диалог { // создается масив, набитый фразами Responses[0] = "Who are you?"; Responses[1] = "What are you doing here?"; Responses[2] = "What can you tell me about the Wintermute Engine?"; Responses[3] = "I have to go."; // Далее эти фразы добавляются в диалоговое окно. Каждая фраза имеет свой номер 0,1,2 или 3 Game.AddResponse(0, Responses[0]); Game.AddResponse(1, Responses[1]); Game.AddResponse(2, Responses[2]); Game.AddResponse(3, Responses[3]); // Определяется, на какую фразу нажал юзер Selected = Game.GetResponse(); //Актер (Игровой персонаж!) произносит эту фразу actor.Talk(Responses[Selected]); // Определяется, что конкретно выбрал игрок и что с этим делать if(Selected==0) //Если это фраза номер 0 { this.Talk("My name's not important."); //то олдгуй чтото говорит actor.Talk("Oh... OK"); //а персонаж игрока чтото отвечает } else if(Selected==1) this.Talk("I'm here to answer questions about the Wintermute Engine."); //Если это фраза номер 1, то олдгуй просто говорит else if(Selected==2) //Если это фраза 2, { this.Talk("What would you like to know?"); // то олдгуй чтото говорит // И начинает еще один диалог, номер 2, который функционирует точно также OldGuyDialogue2(); } else if(Selected==3) //Если это фраза номер три { this.Talk("OK, bye."); Loop = false; // то олдгуй прощается и выполняется условие остановки цикла } } } А вообще в переводе мануала перечисленны все функции для работы с окном диалога. Найти можно в "Программирование в WME/Справочник по языку сценариев/Объект Game" в таблице методов ищи раздел "Диалоги/инвентарь" Само окно диалогов можешь использовать по умолчанию или создать свое. Оно находится в interface\responses.def Можешь открыть его, внести bизменеия и пересохранить. Можешь создать с нуля. Запускаешь WindowEdit, File->New->Responses Box В Project Managere в разделе Game Settings есть пункт Response window. Клацни на содержимом этого пункта (там будет по умолчанию interface\responses.def) и справа появятся три точки. Клацни на них сможешь выбрать новое окно в качестве диалогового. Файлы диалогового окна и окна инвентаря, в отличии от обычных окон заканчиваются не расширением .window, а .def



полная версия страницы