[Tutorial] Simple Scripting Lessons - Trigger Part 1 (Basics)
http://forum.1cpublishing.eu/showthread.php?t=28454
Тутор от Кодиака на английском
Вид для печати
[Tutorial] Simple Scripting Lessons - Trigger Part 1 (Basics)
http://forum.1cpublishing.eu/showthread.php?t=28454
Тутор от Кодиака на английском
Только сегодня удалось посмотреть, спасибо! Сейчас делаю миссию по захвату населенного пункта и как раз с наземкой работать придется.
Есть вопросы по зениткам. В городке их будет много, зенитный обстрел выглядит феерично, однако боеприпасов хватает примерно на 10-15 минут, потом ПВО беззащитна практически. Притом, что меткость не очень. Можно ли повысить точность стрельбы(меня устраивает, но уж очень много батарей приходится ставить-независимо от того, как было в реале в игре это прибавляет нагрузку на ПК)? Одна из задач игрокам будет уничтожение зенитной артиллерии.
Как реализовать примерно такой алгоритм:
При выполнении условия (зенитка жива, зенитка находится в миссии более 15 минут) заменить ее на "новую".
Есть возможность респауна наземки по определенным координатам, так как всю подмиссию не получится перегрузить?
По зениткам конечно проще разработчикам править - добавить возможность получить кол-во оставшихся боеприпасов и задать их количество в редакторе
По сообщениям рекомендую для отправки в чат и на экран такой код от Kodiak (можно задать армию, параметры, работает и в оффлайн, и в онлайн):
Вот примеры использования:Код://******************Send Screen Message Method*******************
private void sendScreenMessageTo(int army, string msg, object[] parms)
{
List<Player> Players = new List<Player>();
//Singleplayer or Dedi Server
if (GamePlay.gpPlayer() != null)
{
if (GamePlay.gpPlayer().Army() == army || army == -1)
Players.Add(GamePlay.gpPlayer());
} // Multiplayer
if (GamePlay.gpRemotePlayers() != null || GamePlay.gpRemotePlayers().Length > 0)
{
foreach (Player p in GamePlay.gpRemotePlayers())
{
if (p.Army() == army || army == -1)
Players.Add(p);
}
}
if (Players != null && Players.Count > 0)
GamePlay.gpHUDLogCenter(Players.ToArray(), msg, parms);
}
//******************Send Chat Message Method*******************
private void sendChatMessageTo(int army, string msg, object[] parms)
{
List<Player> Players = new List<Player>();
//Singleplayer or Dedi Server
if (GamePlay.gpPlayer() != null)
{
if (GamePlay.gpPlayer().Army() == army || army == -1)
Players.Add(GamePlay.gpPlayer());
} // Multiplayer
if (GamePlay.gpRemotePlayers() != null || GamePlay.gpRemotePlayers().Length > 0)
{
foreach (Player p in GamePlay.gpRemotePlayers())
{
if (p.Army() == army || army == -1)
Players.Add(p);
}
}
if (Players != null && Players.Count > 0)
GamePlay.gpLogServer(Players.ToArray(), msg, parms);
}
Код:serverMessage("Проверка HUD-сообщений:");
sendScreenMessageTo(1, "{0} Сообщение для красных № = {1}.", new object[] { 1, 100 });
sendScreenMessageTo(2, "{0} Сообщение для синих № = {1}.", new object[] { 2, 200 });
//sendScreenMessageTo(-1, "Сообщение для всех.", new object[] { });
serverMessage("Проверка сообщений сервера:");
sendChatMessageTo(1, "{0} Сообщение для красных № = {1}.", new object[] { 1, 1000 });
sendChatMessageTo(2, "{0} Сообщение для синих № = {1}.", new object[] { 2, 2000 });
sendChatMessageTo(-1, "Сообщение для всех.", new object[] { });
Можно еще вот так:
Код:using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using maddox.game;
using maddox.game.world;
public class Mission : AMission
{
/// <summary>
/// Returns a list of all users
/// </summary>
private List<Player> GetPlayers()
{
var result = new List<Player>();
if (GamePlay.gpRemotePlayers() != null)
{
result.AddRange(GamePlay.gpRemotePlayers());
}
if (GamePlay.gpPlayer() != null)
{
result.Add(GamePlay.gpPlayer());
}
return result;
}
/// <summary>
/// Returns a list of all users of specified army
/// </summary>
private List<Player> GetPlayers(int army)
{
return (army < 0) ? GetPlayers() : GetPlayers().FindAll(player => player.Army().Equals(army));
}
/// <summary>
/// Sends a message to the screens of all users of specified army
/// </summary>
private void BroadcastScreenMessage(int army, string format, params object[] args)
{
GamePlay.gpHUDLogCenter(GetPlayers(army).ToArray(), format, args);
}
/// <summary>
/// Sends a message to the logs of all users of specified army
/// </summary>
private void BroadcastLogMessage(int army, string format, params object[] args)
{
GamePlay.gpLogServer(GetPlayers(army).ToArray(), format, args);
}
public override void OnBattleStarted()
{
base.OnBattleStarted();
BroadcastScreenMessage(1, "Your army color: {0}, your side: {1}", "Red", "Allies");
BroadcastScreenMessage(2, "Your army color: {0}, your side: {1}", "Blue", "Axis");
BroadcastLogMessage(1, "Big group of german {0} heading to {1}.", "Bombers", "London");
BroadcastLogMessage(2, "Group of our {0} need to cover in their raid to {1}, rendezvous point at sector {2}.", "Heinkels", "London", "G9");
}
}
Тут видишь ли, какое дело... Это очень все легко и просто для того, кто варится в этом C# и занимается им профессионально. Для меня же это темный лес. Был бы тут ДО КОНЦА ПОЛНЫЙ ПРИМЕР с созданием экземпляра класса и с вызовом некого метода этого класса по событию убиения чего либо в Битве, и пусть бы этот метод произвел бы звук из динамика компьютера на вроде команды "Beep". И очень желательно с комментариями на каждую строку кода. Тогда я может быть врубился бы в синтаксис всей этой мешанины "закорючек". То есть разобрался бы в последовательности написания скрипта миссии и скрипта класса, работающего с базой (или производящего звук "Beep"). И так же понял бы, как скрипт миссии должен подцеплять другую сборку. В примере Small_Bee нет ни одного комментария, (буквально за каждой командой скрипта нужно лезть в справку). Человеку, который впервые залез в этот C#, все это очень сложно. В принципе, я во все врубался пока дело не коснулось того, что игровой скрипт не поддерживает таких важных вещей, как:
Поддерживал бы, я бы уже давно начала делать статистику.Код:using System.Data;
using System.Data.OleDb;
Но в любому случае спасибо на попытку пояснить мне, чайнику, всю эту сложную кухню! :)
Почему 15 минут? Откуда такая цифра? Зенитки хватает не больше, чем на пару минут, если она интенсивно стреляет. А потом все! Туши фонарь и выноси мебель... Все же, я воспользовался бы обычной статической зениткой с бесконечным боезапасом.
Можно по таймеру. Но тут следует учесть, что перед этим нужно удалять старую зенитку, иначе получится слоеный пирог из зениток. А значит, нужно где-то обязательно сохранять имя этой удаляемой зенитки...
Лично я не знаю другого способа респавна объектов в Битве кроме, как подзагрузкой их через вспомогательную подмиссию. Для меня пока получается несколько странная ситуация... Выходит, что в идеале, на каждый объект в битве, нужно создавать свою личную подмисссию. Сколько объектов на карте, столько и подмиссий.
Это субъективная оценка интенсивности зенитного огня, т.е. после 10 минут он уже затухающий. Так как информации никакой нет нужно проводить опыты на сколько выстрелов и времени хватает боезапаса, а на это уходит время, которое можно потратить на более важные вещи. А что это за статическая зенитка? :)
Плохо это, конечно. Если бы можно было создавать наземку скриптом без подмиссии можно было бы хоть в шахматы играть танчиками. А так пока только создавать скриптом новый файл с миссией, куда заносить нужные зенитки с координатами и загружать потом эту подмиссию...
Славик, скрипт поддеживает все, что поддерживает платформа .NET. Чтобы использовать классы из пространства имен System.Data надо подключить библиотеку в которой они определены, макросом //$reference, в начале скрипта:
Код://$reference "System.Data.dll"
using System.Data;
using System.Data.OleDb;
Я бы тоже взглянул на полный пример, но бобом вообще мало людей занимается, а скриптами и т.п. единицы. От разработчиков SDK неизвестно когда будет, как и неизвестно что в нем будет.
Вот тут http://www.desastersoft.com/en/1/0/0...downloads.html немцы дополнения делают в виде аддонов, в том числе кампанию. Может там что есть.
Подвох, там скрипты миссий практически пустые. Идут вызовы в их собственную библиотеку. Все интересное, если оно есть, находится в ней. К стати, кампания там статическая, просто с трекингом достижений пилота, наградами и прочими украшениями.
Да нет... Проверить элементарно! Ставишь самолетик в миссии (с галочкой для игрока), ставишь зенитку рядом и запускаешь это все прям из Полного редактора. Зенитка начинает стрелять по самолетику. Уйдет на это, если мне не изменяет память, не более двух минут. А вот количество залпов, я не считал. Без надобности было. В любом случае такие зенитки лучше не применять. Смотри, какие зенитки применил я (в моем скрипте). То есть взял я их из статической артиллерии, а не из "бронетехники".
Кстати, и размер умышленно выбрал побольше, чтобы игрокам было легче попадать. :)
Упс! А можно с этого места поподробнее?
Что значит подключить DDL-ку макросом? Сама DLL, на сколько я понимаю, сидит тут:
C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\Profile\Client\System.Data.dll
Но как ее подключить?
Если писать в начале скрипта буквально это:
$reference ...
то, естественно, выскакивает ошибка.
В самом Microsoft Visual Studio я просто пишу это:
и все работает на ура. А вот когда уже пытаюсь запускать сервак с таким скриптом, то выскакивает ошибка. Не видит скрипт эту "Data". :(Код:using System.Data;
using System.Data.OleDb;
Точно, про эти скрипты я и забыл... спасибо
Посмотрел, в танках создается файл миссии и затем загружается. В миссии с вызовом машинок также вроде - GamePlay.gpPostMissionLoad(CreateEmrgCarMission()). Лишние сложности с этими подмиссиями получаются. Т.е. если нам нужно создать объект, мы сначала создаем миссию скриптом и ее подгружаем. Проще разработчикам добавить новый метод, который бы делал тоже самое по заданным параметрам, чем постоянно такое сложное решение писать.Код:GamePlay.gpLandType(x, y)
GamePlay.gpFindPath(EmgCarStart, 10f, EmgCarFinish, 10f, PathType.GROUND, CurTechCars[carNum].TechCar.Army())
GamePlay.gpAirports().Length
GamePlay.gpFrontExist()
GamePlay.gpFrontArmy(CurPlanesQueue[aircraftNumber].baseAirport.Pos().x, CurPlanesQueue[aircraftNumber].baseAirport.Pos().y)
GamePlay.gpLoadSectionFile("missions\\Multi\\Dogfight\\MF_any2.mis")
GamePlay.gpCreateSectionFile()
GamePlay.gpSectorName(gg.Pos().x, gg.Pos().y).ToString()
GamePlay.gpGroundGroups(enemyArmy)
GamePlay.gpGetTrigger(triggerName)
GamePlay.gpNextMissionNumber()
GamePlay.gpPostMissionLoad(CreateEmrgCarMission(CurPlanesQueue[aircraftNumber].baseAirport.Pos(), (CurPlanesQueue[aircraftNumber].baseAirport.FieldR() / 4), ArmyPos, CurPlanesQueue[aircraftNumber].aircraft.Army(), CurPlanesQueue[aircraftNumber].aircraft.Type(),CurPlanesQueue[aircraftNumber].health, CurPlanesQueue[aircraftNumber].aircraft.Pos()))
Как же это печально: быть серьезным, взрослым, и не верить в чудеса. :cry: Сорри за оффтоп :D
На самом деле, файлик со скриптом это не совсем файл C#. Все, кто пытался использовать C# как скриптовый язык, рано или поздно сталкиваются с проблемой, когда в скрипте становится нужна библиотека не входящая в обычный набор. Самое простое решение: обрабатывать файл перед компиляцией препроцессором, который извлечет все макросы и интерпретирует их, например как ссылки на библиотеки в случае макроса //$reference, или указание работать в отладочном режиме, макрос //-$debug. А затем есть два пути: либо все свои макросы и пометки из файла удалять, либо сразу оформлять их как комментарии. Иначе, компилятор просто не поймет юмора, и вместо сборки мы получим ошибку unexpected character.
Вопрос простой.
В редакторе при настройке брифингов есть несколько их типов. Эти понятны:
[Info] - брифинг при выборе миссии в "Отдельных заданиях" или при создании сервера
[Army Red] - брифинг красных
[Army Blue] - брифинг синих
[Army None] - брифинг игроков без армии
Есть еще два, кто-нибудь может подсказать для чего они?
[Mission]
[Regular]
Тут заинтересовался радиосредствами, спросил нашу надёжу и опору, naryv'а как сделать радиопривод работоспособным. Выяснилось следующее, цитата из переписки:
Вариант простой миссии, с примерами работы радио и подачи питания:Цитата:
Сообщение от naryv
У меня заработало. :)Цитата:
Сообщение от naryv
О, спасибо. Как раз вышки поставил на филдах, правда чтобы отличить их от недействующих. Теперь дать ток, назначить частоту и они еще и пользу будут приносить ))
Вот тут я по связи начал работать, правда царь ненастоящий, но есть :) Как кстати такой пункт связи правильно называется?
Если я до деревни снова доберусь она очень преобразится, поднаторел я тут в последнее время))
Я сегодня попробую тест маленький сделать, на радио. А называлось радарный пост. Обычно обеспечивался двумя радиомашинами, либо стационарными сборными конструкциями, парой генераторов, ПВО МЗА и СЗА, с ПУАЗО и дальномерным постом. Штабной домик. Дома что-то было по организации поста радионаблюдения.
Скриптом. Когда наземный юнит умирает - сервер отправляет сообщение с задержкой и вероятностью 30%, довольно просто делается. Можно написать отдельный скрипт для подмиссии и получиться добавить на любую карту и в любой режим игры просто подгрузив эту подмиссию. При уничтожении машинок - замолкает.
Я нахал. :ups: Поделись плиз, или скажи, где пример посмотреть.
Молодцы елки, сижу и руки потираю )))
А я обиделся на эту игру. И не имею больше ни малейшего желания разбираться с этими скриптами дальше. Разработчики ее сделали так, что практически только один человек на всю Россию в состоянии что-то написать и что-то действительно серьезное в ней улучшить.
Это же надо было такое сваять, что только единицы могут и имеют желание разбираться с этим "художеством". Это как же должно было так удивительно совпасть, чтобы замечательный программист C# оказался еще при этом и фанатом этой игры! А если бы не было Small_Bee, чтобы мы все делали?! Полезли бы с нуля изучать новый для себя язык программирования только для того, чтобы освоить игровое скриптописание?! Да в топку это все!!! Инструментарий игры должен быть сделан так, чтобы любой, мало-мальски подкованный человек, смог бы что-то делать в Полном редакторе. И не осваивать при этом с нуля целые языки программирования только ради одной игрушки. Вспоминается старый добрый FlashPoint и та огромная масса интереснейших миссий и кампаний, написанных к нему. А все почему? Потому, что там достаточно было пары вечеров, чтобы понять и освоить, как создаются миссии.
А если взять те самые офлайн кампании, написанные самими разработчиками, и так любезно прилагающиеся к самой игре, то от этой скукоты вообще плакать хочется. И это при таком ОГРОМНОМ потенциале самой игры. Разработчиков понять можно. После того, как был написан такой невероятно сложный, новый игровой продукт, остальное было просто тупо и лень делать. А ведь могли сделать! Да так, что пальчики оближешь. Да так, что игру покупали бы не только фанаты Ил-2, но обычные смертные игроманы. И не ставили бы ее на полку после первого запуска. Увлеклись бы так, что за уши не оттащишь, пополнив своими несметными мясными полчищами все онлайн сервера. Могли бы сделать интереснейшие, динамические развивающиеся, кампании. Но не стали. Забили и плюнули.
Small_Bee нужно памятник при жизни ставить, а вот на разработчиков я в серьезной обиде.
Можете начинать кидать в меня камни... :(
(простите, накипело)
Оффтопик:
Не согласен, но камни кидать не буду)). Я чем больше разбираюсь тем больше вижу возможностей, причем каких-то суперзнаний не нужно, чтобы миссии писать. Почитал в ветке РОФа про управление сервером которое только недавно появилось - нам всем крупно повезло, что нам дали c#, а не маленький набор команд с кучей ограничений. Сейчас пока это не очень очевидно, но со временем это принесет свою пользу.
По Арме. Там на данный момент несколько типов скриптов, причем один из них по синтаксису c++. И там тоже много проблем у новичков, и там тоже есть какие-то готовые скрипты которыми пользуются, но в отличие от БОБа там
- больше юзеров, значит больше вероятность что найдутся способные ребята
- большой набор команд для скриптов и разработчики постоянно добавляют новые (на null там проверять не надо)
- сверхудобная Вики с полной информацией по модам, скриптам и т.п.
- SDK и царство модов
- цивилизованный багтрекер
Выкинуть все это и мы получим БОБ :) Как говорится чем богаты.
SlavikSG!
Камней кидать не буду, но скажу, терпение и труд всё перетрут, и тебя изотрут :)
Не переживай, сделаем под себя всё. Подожди немного, научимся. Я к первому Илу ПР мучил и сам маялся около года, пока наконец разобрался что куда и к чему...
podvoxx, согласен. Мясом, мы ещё обрастём. Не стоит даже думать, что у НАС не получится!
Дык мало-мальски и можно сделать в полном редакторе без всяких скриптов. Дорогу осилит идущий.
Живу я кстати не в России. Скриптами занимаюсь далеко не один, и собственно с С# я работаю всего-то чуть больше года, но влюбился в него по-уши ))
Все будет, Москва не сразу строилась.
Del. Рано.
---
Внимание! Вся информация здесь на основе собственных опытов и подсказок. Что-то верно, что-то нет. Используйте информацию с осторожностью. Если поможет, буду рад, если не помогло, извините.
Про радары даже не спросил :(
Скрипт ПВО подозреваю называется baseAntiAir.cpp и как мне кажется должен работать аналогично скрипту рowerOn.cpp То есть имеющиеся средства ПВО должны попадать в его радиус звукопеленгатор( работает, выбрать исполнительный скрипт возможно, за самолётом следит, надо тестировать) и целью должен быть скрипт. Попытка установить радар и запитать его не удалась, так же невозможно выбрать радарную цель(в смысле навести радар на скрипты питания и оповещения ПВО). Радио для британцев не обнаружил... Либо надо ставить блитц, либо спрашивать чего можно поставить вместо.
Знающие больше моего, поправьте, я могу добросовестно заблуждаться.
Код:[PARTS]
core.100
bob.100
[MAIN]
MAP Land$Online_Cross_v_Roundel
BattleArea 0 0 32768 32768 10000
TIME 15
WeatherIndex 0
CloudsHeight 1400
BreezeActivity 2
ThermalActivity 2
player BoB_RAF_F_3Sqn_Early.000
[GlobalWind_0]
Power 3.000 0.000 0.000
BottomBound 0.00
TopBound 0.00
GustPower 3
GustAngle 9
[GlobalWind_1]
Power 0.000 0.000 0.000
BottomBound 1450.00
TopBound 1450.00
GustPower 5
GustAngle 45
[splines]
[AirGroups]
BoB_LW_KuFlGr_706.01
BoB_LW_KuFlGr_706.02
BoB_RAF_F_3Sqn_Early.01
[BoB_LW_KuFlGr_706.01]
Flight0 1
Class Aircraft.He-115B-2
Formation VIC3
CallSign 33
Fuel 100
Weapons 1
Skill 0.3 0.3 0.3 0.3 0.3 0.3 0.3 0.3
[BoB_LW_KuFlGr_706.01_Way]
NORMFLY 7781.48 26126.48 6000.00 290.00
NORMFLY 19478.48 17229.82 6000.00 290.00
NORMFLY 19478.48 17229.82 6000.00 290.00
NORMFLY 19478.48 17229.82 500.00 290.00
NORMFLY 19881.47 11430.88 500.00 290.00
[BoB_LW_KuFlGr_706.02]
Flight1 11
Class Aircraft.Do-215B-1
Formation VIC3
CallSign 33
Fuel 100
Weapons 1
Skill 0.3 0.3 0.3 0.3 0.3 0.3 0.3 0.3
[BoB_LW_KuFlGr_706.02_Way]
NORMFLY 6121.10 22235.74 3000.00 290.00
NORMFLY 17626.33 20525.80 3000.00 290.00
NORMFLY 19906.25 11356.54 3000.00 290.00
[BoB_RAF_F_3Sqn_Early.01]
Flight0 1
Class Aircraft.SpitfireMkIIa
Formation VIC3
CallSign 7
Fuel 100
Weapons 1
Skill 0.63 0.42 0.84 1 0.32 0.79 1 0.84
[BoB_RAF_F_3Sqn_Early.01_Way]
NORMFLY 16339.25 24095.61 3000.00 290.00
NORMFLY 10108.18 20380.05 3000.00 290.00
NORMFLY 17100.82 18626.12 3000.00 290.00
NORMFLY 18785.52 22018.59 3000.00 290.00
LANDING 12692.92 17449.14 3000.00 290.00
[CustomChiefs]
[Stationary]
Static10 Searchlight.90_cm_SearchLight_UK1 gb 13057.67 21032.38 -60.00 /target AIChief_0
Static4 Artillery.Bofors gb 11346.09 21201.90 -60.00 /timeout 0/radius_hide 0
Static11 Stationary.Environment.JP3_Generator_15_KW_UK1 gb 12719.40 21213.81 -60.00 /target AIChief_1
Static18 Stationary.Opel_Blitz_radio gb 12895.48 21219.38 -60.00
Static17 Aeroanchored.Balloon_winch_UK1 gb 12074.60 21284.46 -60.00 /hstart 15
Static13 Stationary.Environment.Fire_pump_UK2 gb 12172.94 21296.49 -60.00
Static15 Stationary.RadioBeacon.GenericLongRangeMast gb 12397.57 21280.30 -60.00 /radioFreq 315
Static16 Aeroanchored.Balloon_winch_UK1 gb 12555.60 21254.59 -60.00 /target AIChief_0
Static14 Stationary.Environment.HeightFinder_UK1 gb 11980.69 21321.28 -60.00
Static12 Stationary.Environment.PKDP_UK1 gb 12141.29 21312.84 -60.00
Static9 Searchlight.90_cm_SearchLight_UK1 gb 12267.01 21332.06 -60.00 /target AIChief_0
Static20 Artillery.SoundLocator_MkIIIV_UK1 gb 12287.14 21398.42 -60.00 /timeout 0/radius_hide 0/target AIChief_0
Static5 Artillery.Bofors gb 11948.55 21444.64 -60.00 /timeout 0/radius_hide 0
Static0 Artillery.3_inch_20_CWT_QF_Mk_I_StandAlone gb 11391.42 21511.90 -60.00 /timeout 0/radius_hide 0
Static6 Artillery.Bofors gb 12391.62 21558.70 -60.00 /timeout 0/radius_hide 0
Static8 Searchlight.90_cm_SearchLight_UK1 gb 12622.39 21547.65 -60.00 /target AIChief_0
Static1 Artillery.3_inch_20_CWT_QF_Mk_I_StandAlone gb 11698.50 21577.71 -60.00 /timeout 0/radius_hide 0
Static7 Artillery.Bofors gb 12711.87 21633.27 -60.00 /timeout 0/radius_hide 0
Static2 Artillery.3_inch_20_CWT_QF_Mk_I_StandAlone gb 12090.39 21706.39 -60.00 /timeout 0/radius_hide 0
Static3 Artillery.3_inch_20_CWT_QF_Mk_I_StandAlone gb 12502.76 21817.52 -60.00 /timeout 0/radius_hide 0
Static19 Stationary.Airfield.SBA_hat_antena gb 12900.51 21796.21 -60.00 /target AIChief_0/radioFreq 320
[Buildings]
[BuildingsLinks]
[StaticCamera]
StaticCamera_0 12351 21377 100
StaticCamera_1 12679 21531 100
[AIChiefs]
AIChief_0 0 12095 21374/script baseAntiAir.cpp/r 800
AIChief_1 0 12642 21278/script powerOn.cpp/r 600
В редакторе нет объектов "бомба", т.е. который можно взорвать в любом месте карты? В Арме доступны все взрывающиеся боеприпасы, можно легко устроить артподготовку, минирование и т.п., в БОБе это тоже бы очень пригодилось, т.к. артиллерии нельзя задать район для обстрела, да и не всегда нужна артиллерия. И гаубицы красной нет вроде :(
Идея возникла. Минировать морскими минами :) Опустил ниже уровня почвы, наехали на "рога" получили результат. Но это только мысль, дома проверить надо.
Облом... Не получится. пробовал не идёт :)
--- Добавлено ---
Объект называется "Взрыв бомбы" если на него наехать танком, то танк едет дальше, а на месте возникает неслабая воронка. Да, прогнал на молоцикле, машинке не приносит проблем. Надо думать :) При этом срабатывает на контакт. При заглублении повреждений не наносит вообще.
Кстати, начал потихоньку делать шаблоны для ПВО. Если кто-то занимается этим параллельно, имейте ввиду что английский ПУАЗО называется "Предсказатель".
Вопрос возник. Никто не копал ИИ актор аэродром? С зенитным более-менее понятно, как электричество подать тоже, спасибо naryv'у разобрались. А вот за что отвечает, или что делает ИИ-актор аэродром? Что к нему присоседить реально можно?