А как напрямую получить статистику по игроку во время миссии? Я имею в виду ганстат, киллы, смерти и т.д. в общем все что есть.
А как напрямую получить статистику по игроку во время миссии? Я имею в виду ганстат, киллы, смерти и т.д. в общем все что есть.
А здесь нельзя ещё по одному уровню if добавить? Как-то так:
case 1:
if (aircraft.Type() == AircraftType.Bomber)
{ GamePlay.gpHUDLogCenter(new Player[] {player},"You should bomb tankers in Folkestone-Calais. Цель-танкеры в Фолкстон-Кале."); }
else if (aircraft.Type() == AircraftType.Divebomber)
{ GamePlay.gpHUDLogCenter(new Player[] {player},"You should bomb tankers in Folkestone-Calais. Цель-танкеры в Фолкстон-Кале."); }
else { GamePlay.gpHUDLogCenter(new Player[] { player }, "You should cover bombers in Folkestone-Calais. Прикрывайте бомберов в Фолкстон-Кале."); }
break;
case 2:
if (aircraft.Type() == AircraftType.Bomber)
{ GamePlay.gpHUDLogCenter(new Player[] { player }, "You should bomb tankers in Folkestone-Calais. Цель-танкеры в Фолкстон-Кале."); }
else if (aircraft.Type() == AircraftType.Divebomber)
{ GamePlay.gpHUDLogCenter(new Player[] {player},"You should bomb tankers in Folkestone-Calais. Цель-танкеры в Фолкстон-Кале."); }
else { GamePlay.gpHUDLogCenter(new Player[] { player }, "You should cover bombers in Folkestone-Calais. Прикрывайте бомберов в Фолкстон-Кале."); }
break;
или так:
case 1:
if (aircraft.Type() == AircraftType.Bomber)
{ GamePlay.gpHUDLogCenter(new Player[] {player},"You should bomb tankers in Folkestone-Calais. Цель-танкеры в Фолкстон-Кале."); }
else { if (aircraft.Type() == AircraftType.Divebomber)
{ GamePlay.gpHUDLogCenter(new Player[] {player},"You should bomb tankers in Folkestone-Calais. Цель-танкеры в Фолкстон-Кале."); }
else { GamePlay.gpHUDLogCenter(new Player[] { player }, "You should cover bombers in Folkestone-Calais. Прикрывайте бомберов в Фолкстон-Кале."); } }
break;
case 2:
if (aircraft.Type() == AircraftType.Bomber)
{ GamePlay.gpHUDLogCenter(new Player[] { player }, "You should bomb tankers in Folkestone-Calais. Цель-танкеры в Фолкстон-Кале."); }
else { if (aircraft.Type() == AircraftType.Divebomber)
{ GamePlay.gpHUDLogCenter(new Player[] {player},"You should bomb tankers in Folkestone-Calais. Цель-танкеры в Фолкстон-Кале."); }
else { GamePlay.gpHUDLogCenter(new Player[] { player }, "You should cover bombers in Folkestone-Calais. Прикрывайте бомберов в Фолкстон-Кале."); } }
break;
_____________________________________________________________________________________________________________
i5 2500K 3.3@4.2 / 2x4GB RAM DDR3 CORSAIR VENGEANCE / ASUS P8P67 PRO / Xonar D1 / PALIT GTX 570 / 1920x1080 / Win7 64 Home Premium / TrackIr4 Pro / G940
()
А Destroy() не помогает?
http://www.sukhoi.ru/forum/showthrea...=1#post1602377
Здесь пример, как убрать трупики через определенное время.
Решение для штурцев без дублирования кода
Код:if (aircraft.Type() == AircraftType.Bomber || aircraft.Type() == AircraftType.Divebomber) { ... }
Крайний раз редактировалось Small_Bee; 02.09.2011 в 15:24.
У меня с кораблями засада была, они как-то не так как самолеты и танки уничтожаются.
Вот так будет работать?
AiCart - это вообще кто такой?Код:public override void OnActorDead(int missionNumber, string shortName, AiActor actor, List<DamagerScore> damages) { base.OnActorDead(missionNumber, shortName, actor, damages); if (actor is AiGroundGroup) { if ((actor as AiGroundGroup).Type() == AiGroundGroupType.Ship) { AiGroundGroup shipGroup = actor as AiGroundGroup; foreach (AiActor item in shipGroup.GetItems()) { if (item is AiCart) { // 5 минут таймаут Timeout(300, () => { if (item != null) { (item as AiCart).Destroy(); // уничтожаем } } ); } } } } }
...зелёные горят.
----------------------
i7-860@3.8, 4GB, ati4890-2GB, 1680x1050, Win7-64.
...зелёные горят.
----------------------
i7-860@3.8, 4GB, ati4890-2GB, 1680x1050, Win7-64.
А вот этот вопрос - сложнее.
Я где то выше писал - просто таки необходимо, что бы при повторной загрузке подмиссии убивать объекты, которые породила предыдущая загрузка. На OnActorDead полагаться полностью нельзя. Тогда не будет бардака с кучей мусора тут и там.
Самый простой вариант - миссия контролирует сама себя. для этого
1. Миссия "слушает" только себя.
2. Загружает эта миссия тоже, сама себя. Исключение - только первая загрузка из миссии-хоста.
3. Перед загрузкой самой себя прибивает все старые свои объекты.
4. Не рожает больше никаких объектов(типа старта скриптом и т.д.) и не загружает больше никаких миссий, кроме таких же по поведению.
В таком варианте не будет мусора, но и работать миссия будет сугубо автономно, на собственной логике.
Крайний раз редактировалось Small_Bee; 02.09.2011 в 17:56.
Мы это сами не сочиним. Готового варианта скрипта нет для зачистки?
Там кстати кораблики рождаются каждые 40 минут (или час), а плыть им 2.5 часа. Т.е. убивать их нельзя перед повторной загрузкой, они треть пути только пройдут. Сейчас стоит вопрос только об обломках а не о целых кораблях. Целые мы в конце пути превратим в обломки.
...зелёные горят.
----------------------
i7-860@3.8, 4GB, ati4890-2GB, 1680x1050, Win7-64.
Пример такой организации по той же ссылке, что я выше дал. Миссия с танками грузит сама себя, когда ее танки уничтожены. Может играть до бесконечности(вернее исчерпания Int64 ), никакого мусора.
Не грузите миссии по таймеру из хоста. Сделайте загрузку миссий волнами - первая группа миссий, через 40 минут вторую группу миссий (не эту же самую!) еще через 40 еще группу миссий. И т.д. В каждой - по кораблику. Можно и несколько, но тогда и появляться они толпой будут. А она уже сама разбирается, когда ей загрузится повторно - это может быть таймер, TaskCompleted (кораблик приехал), ActorDead или все вместе и т.д. И перед загрузкой, если кораблик еще как-то есть, делаем ему дестрой. Все. Только не пересекайте маршруты.
Плюсы. Никакого мусора. Четко знаем, сколько корабликов максимум одновременно плавает. Убить сервер толпой юнитов исключено.
Можно по таймеру, можно как хочешь. Смысл в том, хост загрузил подмиссию только один раз, а все остальное отдать на откуп самой подмиссии, которая и грузит сама себя, если решит что надо, и мусор за собой убирает.
Смысл подмиссии слушать только себя в том, что бы:
1. Убирать трупики только за собой - по ActorDead. Мало-ли, может время уборки надо разное поставить. Или трупик из другой миссии убирать не надо, например.
2. По ActorCreated (или что там) запомнить без лишних телодвижений только свои объекты куда ни будь в коллекцию. Что бы после не шерстить всю немерянную толпу акторов при уборке, выбирая своих. Если акторов в миссии немного, можно вообще его руками прописать, найти по имени после загрузки и сохранить в приватном поле - что бы прибить после, опять же (в кампаниях стартовых такой похожий подход можно найти).
Можно конечно, слушать всех, но тогда и фильтровать все сообщения надо будет, и плюс лишняя нагрузка, никому не нужная в общем случае.
Смысл того что миссия должна грузить сама себя - она прекрасно знает, кого нарожала (номер миссии есть - своих найти не проблема), и соответственно, прибраться не проблема перед загрузкой повторной.
Хост может слушать миссии, может не слушать - как хочет, если ему надо, пусть слушает. Например, что бы представлять, что вообще в мире происходит.
Недостаток такого подхода, повторюсь - если такую миссию загрузишь, она уйдет в свободное плаванье и начхать ей на хост. Можно конечно организовать сообщение (типа замаппить файл на общий доступ и т.д.) но это уже дебри.
Крайний раз редактировалось Small_Bee; 02.09.2011 в 21:16.
Интересно, спасибо, я как-то старался одним скриптом обходиться, т.к. даже в одном путаюсь
...зелёные горят.
----------------------
i7-860@3.8, 4GB, ati4890-2GB, 1680x1050, Win7-64.
Там, где у Small_Bee моноготочие - это место для твоего кода по-моему. Посмотри какой раньше был скрипт и в какую часть Small_Bee divebomber добавил. Добавь так же.
...зелёные горят.
----------------------
i7-860@3.8, 4GB, ati4890-2GB, 1680x1050, Win7-64.
Hаоборот. Разобраться в десяти маленьких проще чем в одном большом. Читать проще, картину лучше видно.
--- Добавлено ---
Все верно, на место троеточия -код. В фигурных скобках код выполнится, если выражение в круглых скобках будет верно. В данном случае мы говорим
если ТипСамолета = Бомбер или ТипСамолета = Пикировщик тогда делаем то, что заключено в следующие фигурные скобки.
Надо всегда проверять код на предмет опечаток и прочего - в окне скрипта правой клавишей и скомпилировать (появится еще вкладка и будет написано ОК, либо подсказка что где не так).
На форуме есть тег CODE, заключай код в этот тег.
Уточнил тут - AircraftType имеет аттрибут флага, это значит что самолет может иметь несколько разных типов одновременно, т.е. и проверка будет другая. По свободе подправлю.
Если ничего не работает, открывай консоль - там будут видны ошибки какие были.
не видя ошибки сложно сказать что и почему глючило.
да, вполне вариант.
там зависит от того какой бой, если с ходу вступили - могут не успеть перестроится, или дорога удобная - тогда колонной продолжат идти. А так вообще в бою должны перестраиваться.
"капитаны" есть, насчёт препятствий посмотрю, почему не обруливают.
нет, нельзя управлять так самолётом.
дороги, емнип в файл с расширением .misroads идут, его тоже надо на сервер загрузить.
Don't happy, be worry
Вот такое было http://www.sukhoi.ru/forum/showthrea...=1#post1621897
battle stop актеров не убирает с сервера.
...зелёные горят.
----------------------
i7-860@3.8, 4GB, ati4890-2GB, 1680x1050, Win7-64.
Ответил здесь - http://www.sukhoi.ru/forum/showthrea...=1#post1685346
@ naryv
Большое спасибо за странички брифинга в меню и на карте в онлайне. Порадовало больше, чем звук Можно ли их содержание менять динамически в процессе хода миссии? Хотя бы подгружать туда несколько строк с обновленными целями?
Единственное, что смущает, это что по умолчанию брифинг скрыт, что драматически понижает его читаемость, которая даже в Ил-2 страдала Тем более хорошо, что он на карте дублируется. Придется в полете напоминалки писать, чтобы брифинг смотрели.
Ангары пока не удалось потестировать. Удалось ли исправить рождение многомоторных самолетов в одномоторных ангарах с последующим взрывом?
...зелёные горят.
----------------------
i7-860@3.8, 4GB, ati4890-2GB, 1680x1050, Win7-64.
Вот интересный новый метод появился в классе миссии - OnOrderMissionMenuSelected(player, ID, menuItemIndex); любопытненько...
и в геймплее новый метод - gpSetOrderMissionMenu(Player player, bool thisSubMenu, int ID, string[] keys, bool[] bSubMenu);... Гм.
А для Player есть LanguageName() - языковая проблема походу решена.
и Ping() есть. По идее можно по пингу кикнуть, но как пока не нашел.
Крайний раз редактировалось Small_Bee; 07.09.2011 в 00:49.
Ну это не мне спасибо, не я их делал
Можно делать брифинги для армий(синей, красной, нейтральной), информационный(показывется при выборе миссии) и регулярные - их можно привязать к конкретной группе самолётов, выбирается в редакторе в свойствах группы.
При подгрузке миссии со своими брифингами - они обновляются. Т.е. если загружаем миссию с новым брифингом для какой-то страны - этот брифинг будет отображаться для этой страны.
При выборе стороны, емнип, кнопка брифинга доступной становится.
пока нет но работаем над этим.
старались. Да, теперь можно делать юзерское меню, разной степени вложенности, и выполнять действия по выборам меню, например так
вызывается по <Tab> +<4>Код:using System; using System.Collections; using maddox.game; using maddox.game.world; public class Mission : AMission { private void setMainMenu( Player player ) { GamePlay.gpSetOrderMissionMenu( player, false, 0, new string[] { "1", "2", "3" }, new bool[] { true, false, false } ); } private void setSubMenu( Player player ) { GamePlay.gpSetOrderMissionMenu( player, true, 1, new string[] { "1-1", "1-2", "1-3" }, new bool[] { false, false, false } ); } public override void OnOrderMissionMenuSelected( Player player, int ID, int menuItemIndex ) { if( ID == 0 ) { // main menu if( menuItemIndex == 1 ) { GamePlay.gpHUDLogCenter("Menu selected Loading mission aaa2.mis"); GamePlay.gpPostMissionLoad("missions\\aaa2.mis"); setSubMenu( player ); } } else if( ID == 1 ) { // sub menu setMainMenu( player ); } } public override void OnPlayerConnected( Player player ) { if( MissionNumber == 0 ) { setMainMenu( player ); } } public override void Inited() { if( MissionNumber == 0 ) { setMainMenu(GamePlay.gpPlayer()); } } }
да, теперь можно на "родном" языке писать сообщения.
кикать сервер должен, можно, наверное, ему кидать команду, но это точно не знаю.
Don't happy, be worry
Ай карашо! Насколько я понимаю, меню выбора миссий можно использовать не только для загрузки миссий, а для чего душе угодно. Например, игрок может запросить текущую ситуацию. Или в качестве разведчика указать цель для налета бомбардировщиков. Ай карашо!
Хотелось бы еще к спаун-точке привязать в онлайне. А на вкладке карты пилота какой из брифингов показывается? Видимо желательно все показывать по порядку (общий, стороны и регулярный). На вкладку брифинга удобнее кнопкой переходить, как в других симах, чем меню по ПКМ. Правую руку нельзя надолго с РУСа убирать, а левой в меню не получается так ловко = неудобство. К тому же меню вообще редко кто открывает, а кнопка привлечет внимание сразу.
Т.е. можно к каждой подгружаемой\сгенеренной миссии скриптом генерить брифинг (текстовый файл) с новыми координатами целей, например, перед подгрузкой этой миссии или скриптом не получится брифинг сгенерить?
Спасибо! А как-то хитро скриптом нельзя все ангары временно сделать совсем недоступными?
За это отдельное спасибо!
Получается, можно будет прикручивать разные голосовалки, выборы офицера\ров. Разрешать офицерам выбирать новые направления атаки, новые типы миссий, запрашивать поставки топлива и боеприпасов, посылать ботов на разные задания прямо из игры?
А текст из чата скрипты научились перехватывать, чтобы пароли у игроков запрашивать, например? Где-то читал, что раньше это было невозможно.
Если можно это уточнить, все игроки серверов Repka были бы благодарны. Австраллийцы и Бразильцы десинк вызывают частенько.
Еще вопрос про инструменты карты и различные вейпойнты, которые там можно ставить (иконки кораблей, танков и т.п.). Можно ли как-то ставить вейпойнты, чтобы они были видны всей стороне или добавить такой инструмент?
Можно ли скриптом ставить вейпойнты на карту пилота? и на карту в брифинге? Можно ли в редакторе ставить такие вейпойнты на карту брифинга и пилота?
--- Добавлено ---
Только в хост-миссию воткни 2 брифинга в редакторе: Blue Army и Red Army.
Вчера воткнул все брифинги для теста и посмотрел, какие показались на сервере.
--- Добавлено ---
А есть где-то список этих системных многоязыковых сообщений и пример как их вызывать скриптом? Они в какой чат пишутся? Ботов или Server? Они голосом ботов дублируются?
...зелёные горят.
----------------------
i7-860@3.8, 4GB, ati4890-2GB, 1680x1050, Win7-64.
кстати мысль возникла. послабление это или нет, можно подумать. мысль такова. показывать местонахождение на карте только сам самолет пилоты было бы тоже неправильно. gps какой-то. а вот подсвечивать квадрат где пилот сейчас летит - было бы не в пример интереснее.
Внимание! В вышеприведенном сообщении могут содержаться такие элементы сатиры как: аллегория, гипербола, гротеск, ирония, сарказм, а также юмор.
ॐ मणि पद्मे हूँ