...зелёные горят.
----------------------
i7-860@3.8, 4GB, ati4890-2GB, 1680x1050, Win7-64.
ну тогда надо кусочек, что я выше привёл вставить в скрипт - тогда триггеры отработают как и задумывалось в редакторе
да, я начал делать, но сейчас очень плотно с патчем занят, чуть посвободнее буду - продолжу
честно говоря не пробовал, наверное надо поставить триггер уничтоженной группы на группу, и экшн, который будет рождать её-же. Правда не уверен, что она не посчитается уже рождённой, надо пробовать.
Don't happy, be worry
попробовал, без скрипта не получится. Дело в том, что рождённые по скрипту группы создаются уже в новой миссии а триггер работает по имени основной миссии+имя группы. В общем надо скриптом грузить миссию в которой стоит триггер на уничтожение объекта из миссии. И по этому триггеру опять грузить эту миссию, так получится бесконечный цикл уничтожения-восстановления группы.
нет, триггеры и экшены сделаны для общих задач, всё узкоспециализированное - только скриптами.
Don't happy, be worry
Триггер 123TankerDestroyed, например, ты все равно задаешь в редакторе в подмиссии 123.mis. А дейстивие "загрузить подмиссию 123.mis" при срабатывании триггера 123TankerDestroyed прописываешь в главном скрипте миссии.
Чтобы читать скрипты советую за 2 вечера просмотреть вот эту книжку http://www.hse.ru/ru/news/25546368.html или что-то с таким же содержанием в интернете. Потом прочитать все скрипты из выложенных ранее миссий. Многие вопросы отпадут.
...зелёные горят.
----------------------
i7-860@3.8, 4GB, ati4890-2GB, 1680x1050, Win7-64.
не так, не важно кто потопит корабль, при его потоплении, миссия с кораблём загрузится снова - вот пример: ship_respawn.rar в миссии ship.mis танкер плывёт и есть триггер на его уничтожение, в основной миссии ship_respawn эта миссия грузится при старте и при потоплении танкера, по триггеру ship_Destroy из миссии ship, будет грузиться каждый раз при уничтожении танкера.
в этом же примере группа штук атакует баржи, т.к. target не указан - боты сами разбирают себе цели.
Don't happy, be worry
Вау! это решит многие проблемы.
В каком радиусе и как долго бомберы будут искать себе цели? Т.е. если танкеры только что родились где-то далеко, бомберы полетят их искать в их направлении или как долго будут ждать их подхода?
Тот же вопрос, если бомберам будет указана 3я точка маршрута с посадкой, будут ли они искать цель в каком-то радиусе или ждать ее какое-то время?
Просто есть идея возрождать танкеры по триггеру, а бомберы по времени и они могут рождаться и подходить к точке рандеву совсем не одновременно.
ps. Если танкеры и бомберы рождаются в разных подмиссиях, бомберы про танкеры будут "знать", будут их искать?
...зелёные горят.
----------------------
i7-860@3.8, 4GB, ati4890-2GB, 1680x1050, Win7-64.
по времени... по времени было бы круто когда неизвестно по какому. каждый раз какое-то случайное бы.. от 25 до 45 минут. было бы интереснее, жизненнее. то вот на подходе атака, а то вот уже вот, вражеский берег близко, и тут летять!! летять наши!!!
Внимание! В вышеприведенном сообщении могут содержаться такие элементы сатиры как: аллегория, гипербола, гротеск, ирония, сарказм, а также юмор.
ॐ मणि पद्मे हूँ
5 км
если это крайняя точка маршрута - будут летать ждать.
цель поищут в 5 км, если не найдут - бомбы кидают в молоко и на посадку.
тогда лучше ставить бомбардировку конечной точкой маршрута, а по TaskComplite - у - отправлять их на аэродром.
если таргет не указан - бомберы про корабли не знают, но когда те появятся в 5 км - "увидят", не важно из какой миссии. Можете поэкспериментировать на примере выше - в основной миссии с барж перенаправьте бомберов в район куда приходит танкер.
Don't happy, be worry
Крайний раз редактировалось -atas-; 29.08.2011 в 22:12.
...зелёные горят.
----------------------
i7-860@3.8, 4GB, ati4890-2GB, 1680x1050, Win7-64.
да, забыл написать, что просто в missions положить надо. Ничего со слэшами делать не нужно. Насчёт барж - они для того чтобы показать как бомберы разбирают цели, подгружается после уничтожения - танкер, он идёт от круглого острова на юг, никаких барж в скрипте нет.
Don't happy, be worry
Галки не нужно. Корабль грузится в начале, потому что в скрипте есть строка, которая подмиссию грузит в начале. Но если его не грузить в начале, то триггер же никогда не сработает, потому что уничтожать будет нечего Что бы что-то уничтожить нужно это сначала загрузить. Логично?
Скрипт лучше читать перед запуском. Там обычно 50% понятно интуитивно по названию функций.
...зелёные горят.
----------------------
i7-860@3.8, 4GB, ati4890-2GB, 1680x1050, Win7-64.
ну, это логично - если меняете баржи на танкеры - получатся танкеры
нет, танкер в ship.mis не рождается экшеном, вся миссия подгружается в основную. Если галку поставите - он не родится, никакой команды на спаун ему никто не отдаст. Галка - не нужна.
так и должно быть.
правильно, я же написал - первый танкер грузится при старте основной миссии, вот здесь:. Можно загрузить его не на старте а по таймеру, например. Надпись выскакивает показывающая что триггер отработал.Код:public override void OnBattleStarted() { base.OnBattleStarted(); MissionNumberListener = -1; GamePlay.gpPostMissionLoad("missions\\ship.mis"); }
Чтобы миссия с танкером подгрузилась не на старте - надо сделать какое-нибудь условие, например поставить триггер на уничтожение баржи, и потом , в скрипте, написать, что при срабатывании этого триггера - надо загрузить эту ship.mis , как здесь:только вместо "ship_Destroed" своё название триггера поставить. Что - то типа такого :Код:public override void OnTrigger(int missionNumber, string shortName, bool active) { base.OnTrigger(missionNumber, shortName, active); if ("ship_Destroed".Equals(shortName) && active) { GamePlay.gpHUDLogCenter("Ship destroed. New ship spawn"); GamePlay.gpPostMissionLoad("missions\\ship.mis"); } }
"barzha_Destroed" - это название вашего триггераКод:public override void OnTrigger(int missionNumber, string shortName, bool active) { base.OnTrigger(missionNumber, shortName, active); if ("ship_Destroed".Equals(shortName) && active) { GamePlay.gpHUDLogCenter("Ship destroed. New ship spawn"); GamePlay.gpPostMissionLoad("missions\\ship.mis"); } if ("barzha_Destroed".Equals(shortName) && active) { GamePlay.gpHUDLogCenter("Ship destroed. New ship spawn"); GamePlay.gpPostMissionLoad("missions\\ship.mis"); } }
Don't happy, be worry
для этого самый простой способ - разнести все кораблики по подмиссиям - т.е. один кораблик - одна подмиссия, и при уничтожении кораблика - грузить снова подмиссию с ним.
--- Добавлено ---
5 барж к респауну танкера отношения не имеют! Их можно выкинуть из миссии вообще, я их вставил, чтобы показать как задавать цель бомберам.
Вот, как выше писал - каждый танкер из своей миссии грузится, никаких больше барж : newships.rar положить в missions, старые файлы заменить, загружаются 4 подмиссии в каждой идёт танкер, соответственно 4 штуки идут от круглого острова на юг, при уничтожении какого-то из них опять подгрузится миссия с уничтоженным и он начнёт свой скорбный путь заново
Крайний раз редактировалось naryv; 30.08.2011 в 00:45.
Don't happy, be worry
@andersbravers
Может anders ты подскажешь.
--- Добавлено ---
Спасибо!
@ naryv
А как сделать, чтобы новые корабли на обломки не наезжали или по крайней мере не рождались внутри обломков?
Этот вопрос уже был по статическим кораблям, зениткам и проч. Т.е. если новы объект рождается на месте обломков обломки надо бы убрать. ИМХО лучше в коде игры, чтобы каждый объект в скрипте не прописывать.
Пока это не возможно, что добавить в скрипт , чтобы при приближении к обломкам возродившегося танкера идущего по тому же маршруту их убирать? Или для начала не рождать танкер в обломках? В идеале можно рядом рождать, а обломки уничтожать через час, например, чтобы сервер не грузили. Или обломки за час сами исчезнут? Некоторые суда садятся на мель после бомбардировки и не исчезают.
Пересечение объектов некрасиво смотрится. В коде бы "защиту от дурака" вставить. В моей миссии то же самое было.
...зелёные горят.
----------------------
i7-860@3.8, 4GB, ati4890-2GB, 1680x1050, Win7-64.
...зелёные горят.
----------------------
i7-860@3.8, 4GB, ati4890-2GB, 1680x1050, Win7-64.
Нет, нельзя, корабль уже является "группой" состоящей из отдельных частей связанных вместе.
Я бы рождал новые после таймаута, например, так:
новый корабль загрузится соответственно через три минуты, не будет один в другом рождаться.Код:base.OnTrigger(missionNumber, shortName, active); if ("ship_Destroed".Equals(shortName) && active) { GamePlay.gpHUDLogCenter("Ship destroed. New ship will be spawn 3 minutes later"); Timeout(180, () => { GamePlay.gpPostMissionLoad("missions\\ship.mis"); }); }
да по идее обломки через какое-то время должны исчезать сами, минут 20 по-моему.
за час должны бы исчезнуть уже. На мель не садятся, просто недобитые - плавучесть сохранилась, если пробоины мелкие - заполнятся трюмы могут и несколько часов до потопления, хотя так редко бывает.
есть временная задержка на прогнозирование наземкой своего пути - поэтому в колонне часто в подбитого кто-то врезается, не успевает среагировать. Иначе все ресурсы уйдут на обнаружение наземкой новых препятствий у себя на пути, а так они "видят" препятствие если оно стоит уже какое-то время, секунд 10 вроде.
см. выше, пример с таймаутом, время таймаута задаётся в секундах.
Рестарт битвы на сервере надо делать battle Stop и battle Start . Ну или можно по всем объектам пробежать и дестроить их, тогда с карты можно не уходить, самолёты тоже можно оставить, а потом загрузить первую миссию.
да, конечно ввести переменные для счёта и по разным событиям их изменять, я в миссиях которые раньше выкладывал показывал как.
Don't happy, be worry
На Репках и Синдикате от battle Stop и battle Start пришлось отказаться, т.к. вылезали ошибки notDestroyedActor, которые как-то глючили, не помню уже. Видимо остается 2й вариант - дестроить всех акторов кроме игроков, написать на экране о победе\поражении, счет +1, и о том, что "Миссия перезагружена, проверьте карту" Чтобы те кто в воздухе на аэродром противника не садились.
--- Добавлено ---
В бою это каждый раз происходит. Их бы клином или уступом развернуть заранее. Можно везде кроме мостов и населенных пунктов. И тольлько на мостах и в городах пусть в колонно перестраиваются. Антуражнее будет и ресурсов не больше.
--- Добавлено ---
В прошлой миссии с Р1 по 3-4 корабля недотопленных в цепочку собирались. Выкладывал ссылку на галерею багов Р1 в теме про баги.
Сейчас то же самое получится в новой миссии. Через 30-40 минут новый корабль может врезаться в недотопленный прошлый корабль. Или триггер не сработает пока корабль ко дну не пошел совсем? ИИ капитанов на судах нет, чтобы обходить обломки как танки хотя бы?
...зелёные горят.
----------------------
i7-860@3.8, 4GB, ati4890-2GB, 1680x1050, Win7-64.
Надо, даже обязательно надо, четко отслеживать момент, что бы не рождалось наземки больше, чем уничтожалось.
Например, это делается так - миссия-хост загружает (назовем все миссии, отличные от стартовой - слейвами) слейв только один раз. И слейв сам себя контролирует. В случае с колоннами чуть сложнее, в случае с танкерами - слейв самостоятельно отслеживает состояние своего танкера (найти его не проблема, по-умолчанию миссия вызывает методы только для своих объектов), и, по условию, перед тем как загрузить сама себя, принудительно танкер уничтожает. Точно также и танки - перед загрузкой самой себя слейв прибивает все свои объекты. Тогда не будет лишних обломков и битва не будет зарастать мусором.
Недостаток такого подхода очевиден, слейв ничего не знает о событиях в масштабе битвы. За исключением, конечно, прямого приказа слушать все события. Но все равно он ничего не знает о пользовательских данных хоста (счет и т.д). Это можно обойти чуть более сложным методом:
1. Именовать объекты в миссии таким способом, что бы хост точно знал, к какой миссии какой объект относится. Перед загрузкой нового слейва убиваем все объекты старые прямо из хоста. Имена объектов можно менять прямо в файле (имена подчиняются определенным правилам правда).
2. Любой актор в полном имени содержит в начале номер миссии к которой принадлежит. Загружаем слейв, реагируем на OnMissionLoaded - в параметре передается номер свежей миссии. Все, мы можем выборочно убивать объекты по номеру. Далее загрузили следующую, и т.д.
3. Если не ошибаюсь, можно получить доступ к номеру, который будет присвоен следующей загруженной миссии. Тогда перез загрузкой новой миссии просто запоминаем этот номер. Далее как во втором пункте.
Идея всего вышеописанного - обязательно убирать за собой перед повторной загрузкой. Тогда и танкеры не будут упираться в своих предшественников.
Крайний раз редактировалось Small_Bee; 30.08.2011 в 19:45.
Подскажите, с команд скрипта можно влиять на управление самолета игрока? Ну допустив взять и отклонить на определенный угол элерон или руль высоты, т.е. я задам в скрипте значение переменной которое отклонит руль на 5 едениц. Если можно то какие параметры или классы (не знаю как назвать) за это отвечают, пример в коде былбы кстати.
(=E95=; FW)
i7 940, 2,93 => 3,8 ГГц, MB Gigabyte GA-EX58-DS4, 6х2Gb-DDR3-1333Mhz-Kingston, NVIDIA GeForce GTX 680 (2048 Мб), БП OCZ 550W Fatal1ty, Win7U, CH, Saitek, TrackIR, SSD Plextor-128.