То есть после захвата синими одного филда в D1 это уже как бы финал, захват других филдов и полная победа не предусмотренны. Я правильно понял?
Вид для печати
Сегодня несколько раз лончер с Репки3 вылетал на раб. стол. И еще: слишком часто стал появляться на склоне и падать с горы. И вдруг ни с того ни с сего стоящий на холостом ходу Хурь зарывается носом в землю. Тоже неск раз.
Для №3 т.е. жесткого такого, с куражом, догфайта нужны правила (2 или 3, но не больше) но с обязательным автоматическим (скриптовым) контролем и наказанием.
Ведь теоретически возможно контролировать чем был поврежден (уничтожен) самолет имеющий скорость 0 и находящийся в зоне "точки возрождения".
--- Добавлено ---
А... Стима, думаю нам это не поможет.
Грабли в самом лончере (и начинаются после 30 секунд как потерянна связь)
Если не помнишь с чего начиналась ветка:
тогда было достигнуто подобие стабильности сервера, тем что я перезапускал стим клиент (и сервис) каждые 5 минут и ничего делу это не вредит. наоборот летали когда все серваки крашились.
И честно признаться мне не понятна логика работы этого клиента.
Было бы логично, что бы лончер общался со службой стима, запущенной локально (а она у всех нас есть и работает) передавал ей данные о своем состоянии (карта, кол-во пилотов, счет, номер игрового порта) та отдавала бы это на сервера стима, а клиенты получали бы эти данные с сайта (серверов) стима. Вместо этого на шлюзе репок я вижу несколько сотен открытых коннекций к игровым портам хостов на которых запущенны репки, т.е. клиент ломиться на прямую в лончер, на кой тогда нам нужен стим-клиент (а тем более на сервере)??? В самом лончере есть модуль стима!!!
В пользу этой теории говорят сами логи сервера
это сообщение сервера БобаЦитата:
Server: Savas входит в бой.
а вот, как я его назвал, локальный стим-сервер.Цитата:
SteamServer: onP2PSessionConnectFail:76561197960342008
И все говорит за то, что прикручено все это было в спешке и кое как, ведь до патча 1.0.13954 (8 апреля 2011) там еще был и СтарФорс.
http://www.sukhoi.ru/forum/showthread.php?t=68306
--- Добавлено ---
Месяц, до вчера, не запускал клиент... мда, банить нужно, или хотя бы готовить инструменты для этого, но сейчас банить просто некого - сервера пустые!!!
По сути мы забаним последних игроков (бета-тестеров, пусть и грубоватых ;) не много) тех не многих, хе-хе, кого еще не "забанил" МГ :)
Geniok
Я короче как-то на штуке привез пицоткагэ на филд. Попал точно между двумя Спитами. Разрывшаблона - стоят целые! :) Фугасное действие - 0.
Так что забил пока. Полюбил Хурик ротоловский. :)
Ну теоретически это может выглядеть так, игрок уничтожен, смотрим каким самолетом уничтожен, если не бомбер или штурм, "кик" с сервера самолет, уничтоживший самолет другого игрока.
Привязка к боеприпасу, скорости и точке возрождения - лишний геморой.
во-первых, потому что у бомберов и штурмов есть пулеметы, во-вторых, игрок во-время его сбития может разгонятся по полосе, и в-третьих, он может аварийно садится.
Или вулч - это только если скорость ноль в точке возрождения?
--- Добавлено ---
А я давно уже убежденный штурм.
Вчера на Репке 3-ей постоянно на Штуке летал, суда бомбил. Потом надоело, выходит одно и то же все. Взлетел, полетел к судну. Если оно идет в нашу сторону-уничтожил, если оно еще не появилось-драпаешь к себе на филд, потому что кругами летать и ждать, когда оно появится времени нет, красные тут же подлетают и начинают тебя гонять. И крутишься то с 2-мя, то с 3-мя одновременно. Таким макаром вчера сбил 2-х. Сам сбит не разу не был. Но, что-то не то, я бы лично чуть по-другому все сделал, чтобы интересно было и Штурмам и ястребам...
Может поэтому мало народу получается? (хотя вчера было человек 30 точно). Много кто заходит на чуть-чуть и быстро выходит, "текучка" большая. ИМХО.
Ого! Скоро дойдем до решения логарифмический уравнений для определения "вулч - не вулч".
Ну а потом и тройные интегралы подтянутся.
А если я сажусь в поле, на своей стороне, что делать будем?
P.S. Подсказка, из самой игры можно получить данные, взлетел ли самолет, сел ли...
Действительно, привязались с этим вулчем. Сервер на 2-х языках пишет - дойти должно. Ну вулчат, не дали взлететь пару раз - пошел на другой сервер, "детворе" быстро надоест или останется в одиночестве.
А лучше, в тимспике собраться-договориться взлететь двумя парами с разных филдов и наказать.
К тому же вулч начинался на Репке-3 когда образовывалось преимущество одной из сторон и становилось скучно, народ бросался за любой засветившейся мишенью. Сейчас за баланс борются, и как понимаю успешно.
ИМХО, "красивого" программного решения не получится, или начнутся крики от непонимания происходящего, типа, я гнался, стрелял и тут меня за шкирку с парашютом выкинули :-)
Если вопрос ко мне, то насколько знаю, только повреждения.
Теоретически сам факт огня наверное возможно зафиксировать (ведь подсчитывает игра количество выпущенных\попавших пуль), но практически это скорее всего сделать будет невозможно (так как эта информация скорее всего на машине клиента).
А можно узнать, для чего координаты атакующего?
--- Добавлено ---
Напишу чисто свое мнение. Так как сейчас какой-либо статистики на серверах не ведется, единственный способ штурмам и бомберах себе что-нибудь "записать", это уничтожить самолет игрока противоположной стороны, так как записываются только самолеты. Сделать это проще всего теми средствами, для которых эти самолеты предназначены, то есть бомбой. Но это, как мне ответили выше, будет сейчас считаться вулчем. А попасть бомбой в летящий самолет лично мне пока сложновато.
Надо больше тренироваться. ;)
Само-собой это не относится к истребителям.
Можно пойти на Репку1. Но размер карты несопостовим с количеством играющих. Пробовал там летать, кроме тех же кораблей больше целей найти так и не смог. Возможно плохо искал.
Поэтому я и поднял эту тему с вопросом, что будет считаться вулчем, а что нет.
С Уважением, Евгений!
Мне казалось в идеале лучше запретить стрельбу в определенном радиусе и до определенной высоты над филдом или даже пролет противника в этой зоне (писать на экран предупреждение при нарушении).
Посмотрел список методов http://www.sukhoi.ru/forum/showthrea...=1#post1590865 Стрельбу перехватывать действительно не обязательно.
Насколько я понимаю, проще OnAircraftDamaged брать координаты атакуемого или атакующего, смотреть, попадают ли они в запретную зону и т.д.
Бомбы можно было бы разрешить выше определенной высоты сбрасывать в этом случае.
А координаты как получишь?
Ник и самолет без проблем, а вот с координатами не уверен.
Ну и плюс, если я сажусь или взлетаю просто с поля, что делать будем?
То есть "Штукам" вход закрыт?
Остаются только линейщики?
Какой смысл выдумывать велосипед? Есть опыт старого Ил-2, почему бы не применить его?
naryv выкладывал 3 примера миссий в теме Вопросы и в этой. Там вроде есть примеры работы с координатами.
--- Добавлено ---
Small_Bee емнип в Вопросах писал, что isAirborn для самолета игрока не работал раньше. Если исправили, то можно, наверное.
edit. Есть еще OnAircraftTookOff. Можно пробовать, что будет работать.
Уж не помню на каком сервере (ил-2) филд был в зоне запрета стрельбы, кроме бомберов (вулчить бомберам святое дело).
Так не получится в БоБе сделать ?
По моему штурмы и бомберы могут атаковать филды как хотят - это входит в их специализацию. А истребителям низя, иначе это вулч.
Вот их и надо наказывать в случае вулча.
есть метод, если не ошибаюсь, Pos(), возвращающий координаты. Также в типе, который возвращает этот метод, есть методы для сравнения с другими координатами - расстояние между ними и т.д. В теме "Радар своими руками" именно так самолеты в пределах радара и чекаются.
В общем идея такова. На событие повреждения самолета.
Смотрим жертву. если в пределах "зеленой зоны" то (можно получить координату аэродрома и координату спауна, сравнить):
Смотрим кем повреждения нанесены, если ястреб и чужой, то (можно проверить дополнительно, чем повреждения нанесены):
Ломаем хвост.
Хэппи енд.
Скрипт пока накидать не могу - стим выделывается блин.
На Repka #1 вулч вообще всем разрешен. Там война. На "мясном" Repka#3 вулч запретили по просьбам трудящихся, т.к. там филды очень близко и один вулчер не даст никому взлетать с 3х филдов. Карта слишком маленькая для штурмов. К тому же у красных штуки нет, 110х нет, 109B нет и им же греться нужно перед взлетом. Получится игра в одни ворота. Это не для мясного сервера по моему мнению. Пусть взлетают и колбасятся.
А штурмам больше подходит Repka#1. Там можно с тылового филда взлететь, чтобы под штурмов не попасть.
дык а я про что?!
о том уже весь вечер и говорю.
--- Добавлено ---
как я уже писал, там никто не летает. бывает конечно 2-3 человека. а толку?
у красных есть линейные бомберы. чем они плохи?
--- Добавлено ---
а сервак не лопнет от такого кол-ва расчетов?
как бы из-за них тормозов не было в момент убиения противника.
p.s. А так конечно звучит забавно. Объявление:"Товарищи вирпилы! Уважайте друг друга, не сбивайте самолеты противника на взлете, посадке, и на прогреве. Иначе кара всевышнего настигнет вас! (например хвост может отвалится в полете)"
Бывают, и еще как бывают. Скажу больше - на Р1 уже сложилась постоянная аудитория из 10-15 чел. Плюс заходят гости. Бомбить там всегда есть чего и кого. =) Синие сидящие в ТС даж координированные рейды на эмильках-жабах устраивали. Для штурмо-бомберов Р1 - самое то. Вулч там вполне законен и оправдан.Цитата:
как я уже писал, там никто не летает. бывает конечно 2-3 человека. а толку?
По теме обсуждения - вулч на догфайте (особенно на простом с иконками и внешкой, как например Р3), ПМСМ, вещь бессмысленная и вредная. Люди заходят на такой серв покрутиться и пострелять, а не уворачиваться от трасс на взлете.
Полностью поддерживаю. Кому очень хочеться повулчть - есть Репка 1.
Вулч на Репке 3 - это почти шаровый кил. У красных кроме Бленхейма ничего нет, спит второй залочили, как-то совсем баланс перкашивается.
Или залочте штуку, пока у красных Ил не появится :D (шутка с долей сарказма)
А по поводу противодействия - может можно сделать стоячие на филде крафты неубиваемыми?
Пока стоит (+ не набрал взлетную скорость) все повреждения по барабану.
Будет вам и охота и зверей убивать не надо (с) Дядя Федор из Простоквашино :)
Всё про вулч, да про вулч...
Вот не работала вчера 2-я и 1-я Репки (что случилось?), часть народу перешла на 3, а не на другие фулреальные серверы. И ничего, хорошо потренировались, и вулча не было, просто быстро наказывали и помогали. И в тимспике что у синих, что у красных по 3-4 человека было.
Вот и "рецепт".
Да бывало выбивали всех почти, но тогда оттягивались на свой филд или садились, и, о чудо!, новый и интересный противник появлялся снова.
№2 не работает несколько дней. Пока нет в ней необходимости.Цитата:
Вот не работала вчера 2-я и 1-я Репки (что случилось?)
№1 упала, с грохотом, поднял только, где то в 01-00 по москве, сейчас логи в баги отправлю.
1. 3-4 человека в ТС на сторону, если в сети около 30 маловато, но, лучше, чем ничего. Может новички не знают что такое TeamSpek 3 и как его ставить и им пользоваться?
А если б побольше народу в ТС сидели, то и никакой защиты от вулча выдумывать не надо.
2. Можно ли как-то сделать так, чтоб маркером был ник игрока, а не названия самолетов? В Иле ж такое есть, неужели тут нет?
3. Когда начинают два корабля перестреливаться я никак не могу увидеть где у них орудия стоят. Сами корабельные орудия можно увидеть и выбить истребителем? Или только бомбой вместе с кораблем потопить?
Надо предложить разрабам,сделать кнопку в настройках сервера,которая будет отключать прогрев двигателя.
А то какой то гемор с этим прогревом.Это же догфайт!,нафига мне греть двигатель?Cразу бедет веселее на сервере;)
Можно, но
1) ник не показывается пока.
2) чем больше разноцветного текста мелькает на экране, тем меньше это напоминает симулятор. Поэтому изначально текст тегов сокращен до минимума и цвет был отключен. Аркаду можно летать в Крылатых Хищниках по моему мнению, а учитывая, что большинство летающих уже и игру и карту Repka3 освоило более менее я бы уже маркеры совсем отключил.
--- Добавлено ---
Новая версия от stillborn
http://forum.1cpublishing.eu/showpos...9&postcount=14
dgw_iod_v1_1(3aa_on_ships).zip файл с 3 зенитками на кораблях.
Добавлено сохранение лога на десктоп.
Добавлено опциональное сохранение статуса миссии на десктоп, чтобы после перезагрузки сервера кампания продолжалась с крайней подмиссии.
Другие мелкие изменения.
С отключением маркеров на дальних дистанциях согласен в общем (я и на первой репке нормально себя чувствую), но вот ник с 300м (когда сделают) я бы оставил, а то без ТС сейчас никак не определить где напарник и с кем крутишься. В жизни ж бортовой номер как раз где-то с 300м и был виден.
Но вот после релиза на западе, надеюсь, придет новая волна новичков, так что торопиться не стоит. Да и на Репке 3 отрабатываем же приемы и тактику ведения боя и новичкам сейчас не до идентификации. Для полного реализма же есть Репка1.
С Тимспиком много "НО":
У кого-то наушников или микрофона нет, кому-то лень, кто-то парой или в конференции в скайпе, плюс зарубежные гости есть. Так что, рады хоть и 2-3 в канале.
На 1-й Репке и больше собирается народу, даже приходится ограничивать себя в желании поболтать-рассказать :)
Насчет ТС3. Обращал внимание, что с ним звук начинает в игре плавать. Иногда бывает как будто щелчок в ТС и звук поплыл. Без него проблем со звуком ни на одной репке нет.
Geniok
) Оно не взаимодействует, вообще, ни как.
--------------------------------------------------------------------------------
andersbravers
) Сейчас полтора самолета летабельных, ошибиться можно только увидев его в первый раз. А вот читерский маркер оочень даже помогает обнаружить/не потерять кон на фоне земли. В этом один из плюсов 1й репки - можно и скрытно строить заход на 6 и теряться из под атаки.
Нельзя ли сделать на третьей репке чтоб и при захвате территории синих тоже происходил захват аэродрома с сопуствующим появлением красных мессеров? Ато в одни ворота...( Или убрать оный захват красного
То-то и оно. Тоже так было до вчерашнего вечера. Всё на максимум, включая лес. Вертикальная синхронизация выкл. Звук за час полёта ни разу не попробовал даже заикнуться на Синдикате и фризов гораздо меньше - проявлялись только при заходе других игроков. Чёрт его знает, что это. Не знаю как это доказать, но плавнее без них летается, комфортнее.
Накидал тут скриптик против вулчеров.
Возможно есть косяки. Выглядит пока так:
Код:using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using maddox.game;
using maddox.game.world;
using maddox.GP;
public class Airfield
{
// координаты аэродрома
public double x;
public double y;
public double z;
// радиус сферы
public float radius;
// Строна, к которой принадлежит аэродром (1 - красные, 2 - синие)
public int army;
public Airfield(double newX = 0.0, double newY = 0.0, double newZ = 0.0, float newRadius = 1.0f, int newArmy = 1)
{
x = newX;
y = newY;
z = newZ;
radius = newRadius;
army = newArmy;
}
}
public class Mission : maddox.game.AMission
{
// Создаем первый аэродром.
private Airfield air1 = new Airfield(2.3, 5.0, 4.2);
public override void OnBattleStarted()
{
base.OnBattleStarted();
}
// Итак, кого-то уничтожили
public override void OnActorDead(int missionNumber, string shortName, AiActor actor, List<DamagerScore> initiatorList)
{
// Самолет?
if (actor is AiAircraft)
{
foreach (DamagerScore i in initiatorList)
{
// Противником?
if (actor.Army() != i.initiator.Actor.Army())
{
// Проверяем находился ли уничтоженный самолет в "защитной" сфере
if (air1.radius > Math.Sqrt(Math.Pow(actor.Pos().x - air1.x, 2.0) + Math.Pow(actor.Pos().y - air1.y, 2.0) + Math.Pow(actor.Pos().z - air1.z, 2.0)) && (actor.Army() == air1.army))
{
// Если да, выкидываем вулчера или ломаем упарвление
if (i.initiator.Player.Place() != null)
{
// божья кара
AiAircraft aircraft = (i.initiator.Actor as AiAircraft);
aircraft.hitNamed(part.NamedDamageTypes.ControlsElevatorDisabled);
aircraft.hitNamed(part.NamedDamageTypes.ControlsAileronsDisabled);
aircraft.hitNamed(part.NamedDamageTypes.ControlsRudderDisabled);
}
}
}
}
}
}
}
Скрипты с повреждениями
Управление, двигатель, баки
Код:using System;
using maddox.game;
using maddox.game.world;
using System.Collections.Generic;
public class Mission : AMission {
private bool isAiControlledPlane (AiAircraft aircraft) {
if (aircraft == null) {
return false;
}
Player [] players = GamePlay.gpRemotePlayers ();
foreach (Player p in players) {
if (p != null && (p.Place () is AiAircraft) && (p.Place () as AiAircraft) == aircraft) {
return false;
}
}
return true;
}
private void destroyPlane (AiAircraft aircraft) {
if (aircraft != null) {
aircraft.Destroy ();
}
}
private void explodeFuelTank (AiAircraft aircraft) {
if (aircraft != null) {
aircraft.hitNamed (part.NamedDamageTypes.FuelTank0Exploded);
/***
aircraft.hitNamed (part.NamedDamageTypes.FuelTank1Exploded);
aircraft.hitNamed (part.NamedDamageTypes.FuelTank2Exploded);
aircraft.hitNamed (part.NamedDamageTypes.FuelTank3Exploded);
aircraft.hitNamed (part.NamedDamageTypes.FuelTank4Exploded);
aircraft.hitNamed (part.NamedDamageTypes.FuelTank5Exploded);
aircraft.hitNamed (part.NamedDamageTypes.FuelTank6Exploded);
aircraft.hitNamed (part.NamedDamageTypes.FuelTank7Exploded);
***/
}
}
private void fuelTankFire (AiAircraft aircraft) {
if (aircraft != null) {
aircraft.hitNamed (part.NamedDamageTypes.FuelTank0Fire);
/***
aircraft.hitNamed (part.NamedDamageTypes.FuelTank1Fire);
aircraft.hitNamed (part.NamedDamageTypes.FuelTank2Fire);
aircraft.hitNamed (part.NamedDamageTypes.FuelTank3Fire);
aircraft.hitNamed (part.NamedDamageTypes.FuelTank4Fire);
aircraft.hitNamed (part.NamedDamageTypes.FuelTank5Fire);
aircraft.hitNamed (part.NamedDamageTypes.FuelTank6Fire);
aircraft.hitNamed (part.NamedDamageTypes.FuelTank7Fire);
***/
}
}
private void destroyAiControlledPlane (AiAircraft aircraft) {
if (isAiControlledPlane (aircraft)) {
destroyPlane (aircraft);
}
}
private void damageAiControlledPlane (AiActor actor) {
if (actor == null || !(actor is AiAircraft)) {
return;
}
AiAircraft aircraft = (actor as AiAircraft);
if (!isAiControlledPlane (aircraft)) {
return;
}
if (aircraft == null) {
return;
}
aircraft.hitNamed (part.NamedDamageTypes.ControlsElevatorDisabled);
aircraft.hitNamed (part.NamedDamageTypes.ControlsAileronsDisabled);
aircraft.hitNamed (part.NamedDamageTypes.ControlsRudderDisabled);
aircraft.hitNamed (part.NamedDamageTypes.FuelPumpFailure);
// aircraft.hitNamed (part.NamedDamageTypes.Eng0TotalFailure);
// aircraft.hitNamed (part.NamedDamageTypes.Eng1TotalFailure);
/*** Tank fire doesn't work after engine total failure - ???
Timeout (15, () =>
{fuelTankFire (aircraft);}
);
***/
/*** Cool, but kills fps
Timeout (25, () =>
{explodeFuelTank (aircraft);}
);
***/
Timeout (90, () =>
{destroyPlane (aircraft);}
);
}
//////////////////////////////////////////////////////////////////////////////////////////////////
public override void OnPlaceLeave (Player player, AiActor actor, int placeIndex) {
base.OnPlaceLeave (player, actor, placeIndex);
Timeout (1, () =>
{damageAiControlledPlane (actor);}
);
}
public override void OnAircraftCrashLanded (int missionNumber, string shortName, AiAircraft aircraft) {
base.OnAircraftCrashLanded (missionNumber, shortName, aircraft);
Timeout (30, () =>
{destroyAiControlledPlane (aircraft);}
);
}
/**
public override void OnAircraftTookOff (int missionNumber, string shortName, AiAircraft aircraft) {
base.OnAircraftTookOff (missionNumber, shortName, aircraft);
...
}
**/
}
Много чего
cutLimb отламывает части (не все части есть у каждого самолета)Код:// Script that triggered an accidental damage to the player plane
// Autor: adonys
// version: 1.1
using System;
using System.IO;
using System.Collections;
using System.Collections.Generic;
using maddox.game;
using maddox.game.world;
using maddox.GP;
public class Mission : maddox.game.AMission
{
AiAircraft PlayerPlane;
int PlanePartsNr = 117;
private string[] PlanePartsList = new string[]
{ "ElecGeneratorFailure",
"ElecBatteryFailure",
"ElecPrimaryFailure",
"ElecSecondaryFailure",
"ElecMasterCompassFailure",
"ElecWeaponryFailure",
"ElecPriNavigationFailure",
"ElecSecNavigationFailure",
"ElecTransceiverFailure",
"ElecIlluminationFailure",
"HydraulicsPumpFailure",
"HydraulicsPrimaryHosePerforated",
"HydraulicsPistonOpened",
"HydraulicsEmergencyFailure",
"HydraulicsTankPerforated",
"PneumaticsCompressorFailure",
"PneumaticsPrimaryContainerPerforated",
"PneumaticsSecondaryContainerPerforated",
"PneumaticsPrimaryHosePerforated",
"PneumaticsSecondaryHosePerforated",
"ControlsGenericKickdown",
"ControlsElevatorDisabled",
"ControlsAileronsDisabled",
"ControlsRudderDisabled",
"LandingFlapsPistonFailure1",
"LandingFlapsPistonFailure2",
"LandingFlapsKinematicFailure1",
"LandingFlapsKinematicFailure2",
"LandingFlapsDriveFailure",
"LandingFlapsHosePerforated",
"AirbrakeHosePerforated",
"AirbrakeDriveFailure",
"AirbrakePistonFailure",
"WheelBrakesFailureL",
"WheelBrakesFailureR",
"WheelBrakesTotalFailure",
"WheelBrakesHosePerforated",
"UndercarriageShockFailureL",
"UndercarriageShockFailureR",
"UndercarriageShockFailureC",
"UndercarriageUpLockFailureL",
"UndercarriageUpLockFailureR",
"UndercarriageUpLockFailureC",
"UndercarriageDownLockFailureL",
"UndercarriageDownLockFailureR",
"UndercarriageDownLockFailureC",
"UndercarriageKinematicFailureL",
"UndercarriageKinematicFailureR",
"UndercarriageKinematicFailureC",
"UndercarriageHosePerforated",
"UndercarriageDriveDamaged",
"Eng0TotalFailure",
"Eng0TotalSeizure",
"Eng0IntakeBurnt",
"Eng0CompressorFailure",
"Eng0CompressorGovernorFailure",
"Eng0CompressorSeizure",
"Eng0IntercoolerBurnt",
"Eng0CarbFailure",
"Eng0CarbControlsFailure",
"Eng0FuelLinePerforated",
"Eng0FuelPumpFailure",
"Eng0FuelSecondariesFire",
"Eng0Magneto0Failure",
"Eng0Magneto1Failure",
"Eng0OilPumpFailure",
"Eng0OilRadiatorPerforated",
"Eng0OilLineBroken",
"Eng0OilGasketLeak",
"Eng0OilSecondariesFire",
"Eng0OilSecondariesExtinguished",
"Eng0OilTankPerforated",
"Eng0WaterPumpFailure",
"Eng0WaterRadiatorPerforated",
"Eng0WaterLineBroken",
"Eng0WaterTankPerforated",
"Eng0WaterJacketBroken",
"Eng0CylinderHeadFire",
"Eng0CylinderHeadExtinguished",
"Eng0ExhaustHeadFailure",
"Eng0GovernorFailure",
"Eng0GovernorSeizure",
"Eng0ThrottleControlBroken",
"Eng0PropControlBroken",
"Eng0TretiaryControlBroken",
"Eng0PropBlade0Broken",
"Eng0PropBlade1Broken",
"Eng0PropBlade2Broken",
"Eng0PropBlade3Broken",
"Eng0Plug00Failure",
"FuelTank0TinyLeak",
"FuelTank0SmallLeak",
"FuelTank0LargeLeak",
"FuelTank0Fire",
"FuelTank0Exploded",
"FuelTank0HosePerforated",
"FuelTank0PumpFailure",
"Machinegun00Failure",
"Machinegun00BeltBroken",
"Machinegun00Jammed",
"Machinegun00Charged",
"Machinegun00LineDamaged",
"CockpitDamageFlag00",
"CockpitDamageFlag01",
"CockpitDamageFlag02",
"CockpitDamageFlag03",
"CockpitDamageFlag04",
"CockpitDamageFlag05",
"CockpitDamageFlag06",
"CockpitDamageFlag07",
"CockpitDamageFlag08",
"CockpitDamageFlag09",
"CockpitDamageFlag10",
"CockpitDamageFlag11",
"CockpitDamageFlag12",
"CockpitDamageFlag13",
"CockpitDamageFlag14",
};
private string[] PlanePartsListText = new string[]
{ "ElecGeneratorFailure",
"ElecBatteryFailure",
"ElecPrimaryFailure",
"ElecSecondaryFailure",
"ElecMasterCompassFailure",
"ElecWeaponryFailure",
"ElecPriNavigationFailure",
"ElecSecNavigationFailure",
"ElecTransceiverFailure",
"ElecIlluminationFailure",
"Hydraulics Pump failure",
"HydraulicsPrimaryHosePerforated",
"HydraulicsPistonOpened",
"HydraulicsEmergencyFailure",
"HydraulicsTankPerforated",
"PneumaticsCompressorFailure",
"PneumaticsPrimaryContainerPerforated",
"PneumaticsSecondaryContainerPerforated",
"PneumaticsPrimaryHosePerforated",
"PneumaticsSecondaryHosePerforated",
"ControlsGenericKickdown",
"Elevator disabled",
"Ailerons disabled",
"Rudder disabled",
"LandingFlapsPistonFailure1",
"LandingFlapsPistonFailure2",
"LandingFlapsKinematicFailure1",
"LandingFlapsKinematicFailure2",
"LandingFlapsDriveFailure",
"LandingFlapsHosePerforated",
"AirbrakeHosePerforated",
"AirbrakeDriveFailure",
"AirbrakePistonFailure",
"WheelBrakesFailureL",
"WheelBrakesFailureR",
"WheelBrakesTotalFailure",
"WheelBrakesHosePerforated",
"UndercarriageShockFailureL",
"UndercarriageShockFailureR",
"UndercarriageShockFailureC",
"UndercarriageUpLockFailureL",
"UndercarriageUpLockFailureR",
"UndercarriageUpLockFailureC",
"Undercarriage Left down-lock mechanism failure",
"Undercarriage Right down-lock mechanism failure",
"Undercarriage Central down-lock mechanism failure",
"UndercarriageKinematicFailureL",
"UndercarriageKinematicFailureR",
"UndercarriageKinematicFailureC",
"UndercarriageHosePerforated",
"UndercarriageDriveDamaged",
"Engine Total failure",
"Eng0TotalSeizure",
"Eng0IntakeBurnt",
"Eng0CompressorFailure",
"Eng0CompressorGovernorFailure",
"Eng0CompressorSeizure",
"Eng0IntercoolerBurnt",
"Eng0CarbFailure",
"Eng0CarbControlsFailure",
"Eng0FuelLinePerforated",
"Eng0FuelPumpFailure",
"Eng0FuelSecondariesFire",
"Eng0Magneto0Failure",
"Eng0Magneto1Failure",
"Eng0OilPumpFailure",
"Eng0OilRadiatorPerforated",
"Eng0OilLineBroken",
"Eng0OilGasketLeak",
"Oil is on fire",
"Eng0OilSecondariesExtinguished",
"Eng0OilTankPerforated",
"Eng0WaterPumpFailure",
"Eng0WaterRadiatorPerforated",
"Eng0WaterLineBroken",
"Eng0WaterTankPerforated",
"Eng0WaterJacketBroken",
"Eng0CylinderHeadFire",
"Eng0CylinderHeadExtinguished",
"Eng0ExhaustHeadFailure",
"Eng0GovernorFailure",
"Eng0GovernorSeizure",
"Eng0ThrottleControlBroken",
"Eng0PropControlBroken",
"Eng0TretiaryControlBroken",
"PropBlade Broken",
"Eng0PropBlade1Broken",
"Eng0PropBlade2Broken",
"Eng0PropBlade3Broken",
"Engine Plug 0 failure",
"FuelTank0TinyLeak",
"FuelTank0SmallLeak",
"FuelTank0LargeLeak",
"FuelTank0Fire",
"FuelTank0Exploded",
"FuelTank0HosePerforated",
"FuelTank0PumpFailure",
"Machinegun00Failure",
"Machinegun00BeltBroken",
"Machinegun00Jammed",
"Machinegun00Charged",
"Machinegun00LineDamaged",
"103 CockpitDamageFlag00: gunsight",
"104 CockpitDamageFlag01: instruments",
"CockpitDamageFlag02",
"CockpitDamageFlag03",
"CockpitDamageFlag04",
"CockpitDamageFlag05",
"CockpitDamageFlag06",
"CockpitDamageFlag07",
"CockpitDamageFlag08",
"CockpitDamageFlag09",
"CockpitDamageFlag10",
"CockpitDamageFlag11",
"CockpitDamageFlag12",
"CockpitDamageFlag13",
"CockpitDamageFlag14",
};
public override void OnTrigger(int missionNumber, string shortName, bool active)
{
if (("trigger01".Equals(shortName) && active))
{
//GamePlay.gpHUDLogCenter("Trigger Activated!");
DoDamage();
}
GamePlay.gpGetTrigger(shortName).Enable = false;
}
private void DoDamage()
{
PlayerPlane = (AiAircraft)GamePlay.gpPlayer().Place();
Random RandomIncident = new Random();
for (int i = 0; i < 3; i++)
{
int j = (RandomIncident.Next(1,PlanePartsNr) -1);
PlayerPlane.hitNamed ((part.NamedDamageTypes)Enum.Parse(typeof(part.NamedDamageTypes),PlanePartsList[j]));
GamePlay.gpHUDLogCenter(PlanePartsListText[j]);
serverMessage("Failure: "+PlanePartsListText[j]);
}
}
private void serverMessage(string msg)
{
Player pl = GamePlay.gpPlayer();
Player[] players = { pl };
object[] args = { msg };
GamePlay.gpLogServer(players, msg, args);
}
public override void OnAircraftLanded(int missionNumber, string shortName, AiAircraft aircraft)
{
GamePlay.gpHUDLogCenter("Excellent, you've managed to land!");
}
public override void OnAircraftCrashLanded(int missionNumber, string shortName, AiAircraft aircraft)
{
GamePlay.gpHUDLogCenter("You've crash-landed, but you're still alive!");
}
}
Код:part.LimbNames
part.LimbNames.AileronL0
part.LimbNames.AileronL1
part.LimbNames.AileronR0
part.LimbNames.AileronR1
part.LimbNames.AirBrakeL0
part.LimbNames.AirBrakeL1
part.LimbNames.AirBrakeR0
part.LimbNames.AirBrakeR1
part.LimbNames.BayDoor0 - 7
part.LimbNames.CF
part.LimbNames.ElevatorL0
part.LimbNames.ElevatorL1
part.LimbNames.ElevatorR0
part.LimbNames.ElevatorR1
part.LimbNames.Engine0 - 7
part.LimbNames.Hatch0 - 5
part.LimbNames.Keel0 - 3
part.LimbNames.LandingFlapL0
part.LimbNames.LandingFlapL1
part.LimbNames.LandingFlapR0
part.LimbNames.LandingFlapR1
part.LimbNames.MaxValue
part.LimbNames.Nil
part.LimbNames.Nose0 - 3
part.LimbNames.Rudder0 - 3
part.LimbNames.Separator
part.LimbNames.Slat0 - 3
part.LimbNames.Sponger00 - 23
part.LimbNames.StabilizerL0
part.LimbNames.StabilizerL1
part.LimbNames.StabilizerR0
part.LimbNames.StabilizerR1
part.LimbNames.Tail0 - 7
part.LimbNames.UC0 - 5
part.LimbNames.Wheel0 - 5
part.LimbNames.WingL0 - 7
part.LimbNames.WingR0 - 7
Чето не заметил работы уравниловки на 3-й репке. Красных-8, синих-17?
Список методов и скриптов из официальной кампании http://forum.1cpublishing.eu/showthr...hlight=cutLimb
Там есть пример cutLimb
Код:airc.cutLimb(part.LimbNames.WingL0);
airc.cutLimb(part.LimbNames.WingL1);
airc.cutLimb(part.LimbNames.WingL2);
airc.cutLimb(part.LimbNames.WingL3);
airc.cutLimb(part.LimbNames.WingL4);
airc.cutLimb(part.LimbNames.WingL5);
airc.cutLimb(part.LimbNames.WingL6);
Ага, уже подредактировал свой пост.