-
Posts
983 -
Joined
-
Last visited
-
Days Won
4
Content Type
Profiles
Forums
Events
Everything posted by BAntDit
-
Так, напоминаю разговор, который бал страниц 5 назад: Вообщем, всё готово. Хоть и не так быстро как обещал :), но пример по динамическим брифингам подготовил и выложил. смотрим тут: http://forums.eagle.ru/showthread.php?t=96572 Пока тестировал летая у себя на сервере один, интересно не будет потестировать, когда разом несколько игроков - завтра сервер подниму на время в обед и можно будет потестить.
-
понятно, я сразу после установки обновился - значит я просто не застал этой воды :)
-
Приветствую, на прошлой неделе я обещал выложить миссию демонстрирующую возможность динамических брифингов. http://forums.eagle.ru/showpost.php?p=1591824&postcount=295 На данный момент у меня две новости - хорошая и плохая. Начну с хорошей: демо-миссию по динамическим брифингам я сделал! протестил, вроде даже не плохо всё работает. Миссия приатачена в конце поста. А теперь плохая: в процессе создания миссии вскрылось много багов в Simulator Scripting Engine и поэтому реализовать мне её пришлось не совсем так как планировал заранее, а именно: 1. Как оказалось не работает trigger.action.outTextForGroup обсуждение: http://forums.eagle.ru/showpost.php?p=1594199&postcount=498 http://forums.eagle.ru/showpost.php?p=1594386&postcount=502 http://forums.eagle.ru/showpost.php?p=1594410&postcount=503 Для решения этой проблемы мне пришлось воспользоваться возможностями Slmod - т.е. чтобы миссия работала, надо чтобы на сервере на котором она запущена был установлен Slmod v6.1. 2. Вторая проблема это перехват событий S_EVENT_PLAYER_ENETER_UNIT, S_EVENT_PLAYER_LEAVE_UNIT - как оказалась DCS World пока не умеет генерить события подобного типа. http://forums.eagle.ru/showpost.php?p=1594277&postcount=500 Эту проблему пока никак не обойти, поэтому мне пришлось пока отказаться от идеи выдавать задания игрокам, управляющим наземкой. 3. ещё куча всяких мелких ньюансов, из-за которых я потратил много и нервов и заработал прядь седых волос... ------------------------------------------- Теперь собственно о самой миссии: Миссия сама по себе ни о чем - т.е. она только для демонстрации возможностей, какого-то сюжета в ней нет, чтобы можно было поиграть. Для формирования динамических брифингов я разделил миссию на фазы. Каждая фаза может быть в трех состояниях - не начата, активная и завершена. Фазы связываются с бортами и при взлете пилот получает информацию - по не начатым, что ожидается, по активным, что происходит,а по завершенным, что уже выполнено. По активным так же кроме описания для пилота следуют индивидуальные приказы. Т.е. с данным механизмом можно сделать описание произвольного количества фаз в миссии и связать их с любыми бортами как только душа пожелает. Более того описание в зависимости от события можно динамически обновлять, включать туда любую информацию какую хотите координаты других юнитов (даже если они движутся), кто убит, кто жив, кто куда полете, когда взлетел и т.д. - вообщем никаких ограничений кроме вашей личной фантазии. Т.е. с этим механизмом миссиоделу нужно подумать только о том какие ключевые события происходят в его миссии и какие изменения должны заносится в брифинг при этих событиях. В этой демо-миссии я не особо напрягал фантазию - тут у меня всего 4 борта, несколько групп наземок и 5 фаз. Разные борта привязаны к разным фазам и по ним у они получают информацию. Например: есть наземная группа hitman - она движется со стороны Бабушары в сторну Очамчиры. Всё движение является фазой с именем Hitman movement. Это фаза привязана к борту ка-50 на Бабушаре - вот он то и будет получать информацию при взлете, что группа Hitman сейчас в пути и ему приказ сопровождать. На пути группы Hitman я наставил БТР-ов, которые будут их периодически обстреливать - более того, после каждой перестрелки брифинг ситуации для Ка-50 будет обновлять и при взлете пилот Ка-50 будет получать информацию где последний раз произошла перестрелка. На Гадауте есть пара А-10 их брифинг зависит движения группы Papa Bear. Есть Су-25 у него брифинг зависит от того живо или нет ПВО. ------------- Вот. Это мой пример, вы по примеру в моей маленькой демо-миссии можете в своих миссиях создать такую же систему динамической выдачи заданий. ------------- Для того, чтобы понять как и что работает распакуйте миссию и посмотрите внутри неё скрипты весь код в скриптах прокомментирован и легкий для понимания. Для понятности скрипты лучше смотреть в той же последовательности как они вызываются в миссии. Исключение составляет скрипт mission.lua - вот его описание: т.е. его вы просто можете себе копировать в миссию, не вдаваясь в подробности его работы. ---- приложенную миссии я протестировал летая у себе на сервере один,я надеюсь багов не возникнет при одновременном полете нескольких игроков. Ещё некоторые особенности: 1. всякие привязки обработчиков событий и т.п. выполняются один раз в первые 5 сек. после начала миссии - так что если вы умудритесь взлететь сразу после начала миссии быстрее чем за 5 сек брифинг вам не видать :) 2. У меня в английском DCS World-е сообщения на русском (кирилицей) выводятся в виде кракозябров, поэтому у меня был выбор либо использовать транслит, либо писать на английском с ошибками (я англ. не очень знаю) - я выбрал второе, надеюсь, это никого не смущает, что сообщения в брифингах на английском. 3. Миссии именно сетевая - не пытайтесь запустить как одиночную или запустить через редактор. 4. Миссия требует Slmod - об этом я писал выше, надеюсь требование временное. ----- ну вот собственно и всё. Смотрим, комментируем, задаем вопросы, если у кого-то есть интересные идеи, которые сложно воплотить в редакторе, то пишите - буду рад помочь реализовать. ----- Крайняя версия MSF: http://forums.eagle.ru/attachment.php?attachmentid=89817&d=1382379803 dynamic_briefing.miz msf.lua textToVoice.lua sound_map.lua msf_mission_developers_guide.pdf msf_beta_1.0.2.lua
-
в смысле после следующего патча уже будет работать или сейчас должна работать. По краней мере у меня не работает. Если она сейчас работает, можно пример рабочий?
-
Странно - у кого остались старые версии DCS World 1.2.0 покажите мне много жрущую воду - я просто поверить не могу: у меня, что старая вода на максимальный настройках жрала не много, что новая жрет абсолютно столько же: 2.0 мс за кадр. Это при том, что у меня видюха то древняя. ------------------- Лучше бы зеркала оптимизировали - пару маленьких зеркал в кабине Ка-50 на максимальных настройках зажирают 14.0 мс. - половину времени всего кадра.
-
Баг номер три: В документации по Simulator Scripting Engine указан перечень событий, которые можно перехватывать в скриптах: http://en.wiki.eagle.ru/wiki/Simulator_Scripting_Engine/DCS:_World_1.2.1/Part_1#world world.event = { S_EVENT_SHOT, S_EVENT_HIT, S_EVENT_TAKEOFF, S_EVENT_LAND, S_EVENT_CRASH, S_EVENT_EJECTION, S_EVENT_REFUELING, S_EVENT_DEAD, S_EVENT_PILOT_DEAD, S_EVENT_BASE_CAPTURED, S_EVENT_MISSION_START, S_EVENT_MISSION_END, S_EVENT_TOOK_CONTROL, S_EVENT_REFUELING_STOP, S_EVENT_BIRTH, S_EVENT_HUMAN_FAILURE, S_EVENT_ENGINE_STARTUP, S_EVENT_ENGINE_SHUTDOWN, S_EVENT_PLAYER_ENTER_UNIT, S_EVENT_PLAYER_LEAVE_UNIT } так вот из них последние два события не вызываются игрой при соответствующих действиях игрока (при занятии и освобождении техники) - т.е. последние два события S_EVENT_PLAYER_ENTER_UNIT и S_EVENT_PLAYER_LEAVE_UNIT не работают - их не возможно перехватить, так как самой игрой они не вызываются. (возможно, конечно, это потому что Combined Arms пока beta и поэтому они ещё не реализованы... ) Пример в прикрепленной миссии. unitsLeaveEnterTest.miz
-
Баг номер два: не работает метод pushTask класса Controller http://en.wiki.eagle.ru/wiki/Simulator_Scripting_Engine/DCS:_World_1.2.1/Part_2#Tasks function Controller.pushTask(Controller self, Task task) при попытке вызова этого метода вылетает ошибка, говорящая о том, что метод pushTask у класса Controller вообще не существует. Ниже прикрепил миссию с примером (в описании миссии указано что делать, чтобы воспроизвести ошибку). Также ниже прикрепил скриншот с ошибкой. pushTaskTest.miz
-
Делал демонстрационные миссии по Simulator Scripting Engine/DCS: World 1.2.1 и наткнулся на вагон новых багов в Simulator Scripting Engine :( Далее выкладываю баги по очереди с примерами и скриншотами: ---------------------- Баг номер один: Не работает триггерное действие вывода текстового сообщения для группы - вот это: (http://en.wiki.eagle.ru/wiki/Simulator_Scripting_Engine/DCS:_World_1.2.1/Part_1#trigger) function trigger.action.outTextForGroup(GroupId groupId, string text, Time delay) при попытке вызвать это триггерное действие так как написано в документации ругается на пропущенные аргументы. Аргументы я пробовал в разной последовательности передавать - один фиг не работает. Ниже прикрепил миссию с примером (в описании миссии указано что делать, чтобы воспроизвести ошибку). Также ниже прикрепил скриншот с ошибкой. textForGroupTest.miz
-
Вещать обработчики на события: S_EVENT_PLAYER_ENTER_UNIT, S_EVENT_PLAYER_LEAVE_UNIT. ------------------ Я пока не успел потестить для каких юнитов событие вызывается, а для каких нет, но надеюсь что для всех доступных для управления. ------------------ Примеры постараюсь выложить уже седне вечером, я уже сам загорелся идеей динамической раздачи заданий в зависимости от ситуации в миссии.
-
Нет, сейчас это всё делается гораздо проще. Если кому-то интересно я могу в выходные подготовить demo-примеры и выложить. в идеале это будет всё на одном триггере ;) ---------------- если сегодня я с работы вернусь не в таком состоянии, что пришел-упал-уснул, то возможно я и сегодня выложу :)
-
Это можно и сейчас сделать, причем можно сделать, чтобы для каждого борта выдавалось персональное задание актуальное для хода миссии, можно даже чтобы голосом, только не в брифинге,а например при взлете или когда игрок садится в самолет. Можно даже сделать так, что когда игрок занимает какой-то наземный юнит танк или что-то подобное - ему персонально выдвалось задание, актуальное для текущего состояния миссии.
-
А что такое нормальные серверы для online-а??? Вам никто не мешает поднять свой нормальный сервер с блекджеком и ....
-
У меня появился новый вопрос к разработчикам по Simulator Scripting Engine. Где можно задать этот вопрос так, чтобы его не проигнорировали? тут конечно, есть тема http://forums.eagle.ru/showthread.php?t=95149, но я так понимаю она не живая - туда кроме меня никто не заглядывает. В английской ветке подобная тема более менее живая, но мне тяжело сложные вопросы формулировать на английском - у меня плохой английский и я боюсь меня не правильно поймут просто. ------------------ у меня вопрос связан с перехватом события S_EVENT_HIT - с этим событием связан один нюанс - перехват этого события прекрасно работает, до тех пор пока для юнита не установлено бессмертие, если оно установлено, событие S_EVENT_HIT для этого юнита больше не выбрасывается и соответственно перехватить это событие становится не возможно. Мне в миссии очень нужна возможность отлавливать факт обстрела юнитов, для которых установлено бессмертие. я уверен, что для разработчиков не составит никакого труда прокомментировать данную проблему по следующим пунктам: 1. если сейчас всё таки какой-нибудь способ определить находится бессмертный юнит под обстрелом или нет. 2. если нет, то будет ли эта проблема решена в последующих патчах? - исправление это не сложное, а пользы от него очень много (готов привести примеры) ------------------ Не игнорируйте вопрос, пожалуйста.
-
Hi, i've found reason of problems with event handlers. you have a mistake in the documentation (over there: http://en.wiki.eagle.ru/wiki/Simulator_Scripting_Engine/DCS:_World_1.2.1/Part_1#world). Pay attention on last expression: it's not right!!! let's look code in the file EventHandler.lua as we can see, handler is not function, handler is a table!!! The fact is, that handler gotta be table with method onEvent, and onEvent must have prototype of EventHandler! I've tested my theory - it works pretty well!!! here is an example: http://forums.eagle.ru/attachment.php?attachmentid=72562&d=1351529870 I've already asked to correct documentation in russian part of forum. I'm sorry for my english. I hope, you could understand my idea.
-
Нашел!!!! Нашел!!! Я нашел причину, почему не работало! Вообщем,ED - у вас опять просто косяк в документации. Вот смотрите, что у вас в документации написано по Scripting Engine по классу world (http://en.wiki.eagle.ru/wiki/Simulator_Scripting_Engine/DCS:_World_1.2.1/Part_1#world) вот, что у вас там написано: Убитый горем от того, что все не работает я решил покопаться в скриптах ED и что я там увидел??? - а вот что: world.eventHandlers = {} function world.addEventHandler(handler) world.eventHandlers[handler] = handler end function world.removeEventHandler(handler) world.eventHandlers[handler] = nil end function world.onEvent(event) for index, handler in pairs(world.eventHandlers) do [b]handler:onEvent(event)[/b] -- are you f**king kidding me???! end end Это как-то похоже на то, что написано в документации??? Я как честный человек передаю вам функцию в метод addEventHandler, а вы вона что с ней вытворяете - handler:onEvent(event) - используете как таблицу :lol: В документации написано, что добавляемый обработчик это функция принимающая аргумент event, а по факту обработчик это объект (таблица), которая должна содержать метод onEvent, который в свою очередь и должен быть той функцией-обработчиком, принимающей аргумент event. ------ Всё, я у себя переписал с учетом, того как реализовано у вас и сейчас всё работает! Работает!!! ---- Ниже прикрепил маленькую тестовую миссию-демку - такую же как прикреплял выше, но в этой всё работает (при событиях выводятся сообщения, содержащие id события). ------------------ ED, исправьте, пожалуйста, документацию, ато я буду не последним у кого взорвался мозг при попытке понять как работать с event handler-ами :) events_test_2.miz
-
у меня кстати тоже GeForce - ASUS GeForce ENGTX460 и тоже разрешение дисплеев в кабине: 1024 every frame, настройки сглаживания не помню какие.
-
sorry for double post, but i can't get answer on russian part of forum. my question is about adding event's handlers. The way of adding custom event handlers doesn't work. for test: i added simple script in the test mission: function testEventHandler(event) trigger.action.outText("raised event: " .. event.id, 10); end; world.addEventHandler(testEventHandler); trigger.action.outText("event handler added!", 10); this script must show text message on any event raised during the mission, but as i said, it doesn't work. i don't know, maybe it's bug or i do something wrong? Could somebody help me?
-
Ещё один баг! Не работает добавление собственных обработчиков на события через скрипты. Т.е. то что заявлено в Simulator Scripting Engine/DCS: World 1.2.1 (http://en.wiki.eagle.ru/wiki/Simulator_Scripting_Engine/DCS:_World_1.2.1/Part_1#world) , вот это: - не работает! Хоспади, ED! - активации групп через скрипты нет, установка опций поведения не активированным группам не выполняется и в добавок ещё обработчики на сбытия добавить нельзя. Вы издеваетесь? ----------------- Ниже прикрепил маленькую миссии, в неё вложен скрипт добавляющий обработчик на события (просто для теста сообщение выводит), скрипт запускается со второй секунды, после этого при выстрелах БТР-ов и других событиях должно появляться надпись, содержащая id случившегося события - не появляется.... events_test.miz
-
Я разобрался когда этот глюк проявляется у меня. Если игру Alt Tab-ом свернуть, а потом обратно развернуть появляется этот глюк.
-
установка опций поведения (Behavior options) не выполняется для не активированных групп. Я не знаю баг это или особенность реализации, но по идее это не правильно. Если делать применение опций поведения после активации, часто группа успевает сделать что-нибудь не хорошее до применения опций -то что не должна сделать - стрельнуть куда нибудь, выпилить какой нибудь юнит и т. п. Собственно хотелка: нужно чтобы опции поведения можно было устанавливать до активации групп.
-
Вопрос: если в течение миссии какой-то наземный юнит (например, БТР-80) расстрелял все боеприпасы, они у него потом восполняются через какое-то время или он так и остается без боеприпасов до конца миссии?
-
в скриптах вешается обработчик на событие S_EVENT_DEAD - это не тоже самое? function onKillEventHandler(event) if (world.event.S_EVENT_DEAD == event.id) then -- you can do here what ever you want end end world.addEventHandler(onKillEventHandler); http://forums.eagle.ru/showpost.php?p=1587852&postcount=507
-
Sorry, сразу не понял, чем триггер на событие ON DESTROY и условие UNIT DEAD не устраивает. вешать триггер на каждый юнит действительно не удобно и затратно... ---------------- хотя с новыми то возможностями DCS World Script Engine можно один скрипт на все юниты сделать: function onKillEventHandler(event) if (world.event.S_EVENT_DEAD == event.id) then local unitTypeName = event.target:getTypeName(); if ("KAMAZ" == unitTypeName) then addScores(event.initiator, 0); -- addScores - это ваша функция начисления очков -- , event.initiator - unit грохнувший технику (это может быть и игрок) end if ("M2 Bradley" == unitTypeName) then addScores(event.initiator, 500); -- а за бредли уже +100500 end -- и т.д. end end world.addEventHandler(onKillEventHandler); это так на вскидку быстренько набросал, возможно где-то и ошибся, но идея думаю понятна.
-
он всю жизнь там был
-
Можно сделать, чтобы задача 'FireAtPoint' (огонь по точке) работала не только для артиллерии, но и для других юнитов? ----- Сейчас пытаюсь сымитировать перестрелку пехоты (просто заставить пехоту стрелять в нужном направлении) и ничего не получается - не стреляют ни в какую... :(