Тема для слалома на Су-26.
РЛЭ на СУ-26
СУ-26 в ВИКИ
Вид для печати
Тема для слалома на Су-26.
РЛЭ на СУ-26
СУ-26 в ВИКИ
Карты "Abu Dhabi Rece", "Ontario Rece" автор Kzn_TIM
Если кто может- прикрутите скрипты, ибо кулинарного техникума не хватает для понимания...
И еще, в "Ontario Rece" почему-то фоторазведка не робит, хоть и сделана аналогично "Abu Dhabi Rece"
Правильно Abudabi Race, Ontario Race, а не "Rece" :). А насчет скриптов это лучше конечно к Naryv, он главный трассостроитель, хотя можно конечно попробовать по аналогии с его первой трассой сделать, чтобы лишний раз его не перегружать.
Скрипт naryv'а подкорректировал, трасса Онтарио: Вложение 160060Цитата:
летать можно, только время и штрафы не считает
Но проверить не могу - не получается пролететь :ups: Это реальные расстояния? Сушка при проходах просто срывается. Ну или это я такой пилотажник :D
Вот еще вариант на тему :).
Попробовал, после шикан если получаешь пенальти то дальше ворота перестают считаться, или без пенальти пару раз после второго ножа синие ворота перед желтыми тоже не обсчитывались. И по первому ножу как то уж очень далеко его начинать надо еще не пролетел, а уже очки начисляют. А так ничего трасса, нормально можно погонять без срывов.
А мою не пробовал из поста #7? Просто интересно. Мне тоже шибко времени не хватило обкатать, но результат вроде выдало в конце.
Абу-даби миссия со скриптом- Вложение 160065 без джойстика прополз с штрафами за все ворота, но вроде-бы работает :).
2 Ded-86 чтобы этот скрипт работал на других миссиях нужно в редакторе выбрать "Редактировать->скрипт" закладка триггеры и там расставить триггеры пролёта игроком воротВложение 160066Вложение 160067, для обычных ворот - в центре их, для шикан - так, чтобы краем радиуса касалась зона триггера пилона(см, например, выше выложенную миссию абу-даби, как там триггеры располагаются, можно прямо из файла .mis взять эти триггеры и в новой миссии их только по воротам расставить). Потом, в скрипте кусок типазаполняем своими значениями по порядку прохождения, в таком формате (для первой к примеру строчки ) :Код:// заполняем список ворот всеми воротами по порядку их прохождения
gatesList.Add(new Gate("StartGate", "GateStart", false, GateType.startGate, AfterGateAction.none, 29276, 15536));
gatesList.Add(new Gate("Gate1Red", "Shikana1", false, GateType.shicaneGate, AfterGateAction.none, 29340, 15308));
gatesList.Add(new Gate("Gate2Red", "Shikana2", false, GateType.shicaneGate, AfterGateAction.none, 29224, 15203));
gatesList.Add(new Gate("Gate3Red", "Shikana3", false, GateType.shicaneGate, AfterGateAction.none, 29341, 15092));
gatesList.Add(new Gate("Gate4Red", "Shikana4", false, GateType.shicaneGate, AfterGateAction.none, 29132, 14989));
gatesList.Add(new Gate("Gate5Red", "Shikana5", false, GateType.shicaneGate, AfterGateAction.none, 29116, 15143));
gatesList.Add(new Gate("Gate6Red", "Shikana6", false, GateType.shicaneGate, AfterGateAction.none, 28952, 15116));
gatesList.Add(new Gate("Gate7Red", "GateV1", false, GateType.knifeGate, AfterGateAction.none, 28995, 15352));
gatesList.Add(new Gate("Gate8Blue", "GateH1", false, GateType.levelGate, AfterGateAction.none, 28922, 15649));
gatesList.Add(new Gate("Gate9Blue", "GateH2", false, GateType.levelGate, AfterGateAction.none, 29082, 15582));
gatesList.Add(new Gate("Gate10Blue", "GateStart", false, GateType.levelGate, AfterGateAction.none, 29276, 15536));
gatesList.Add(new Gate("Gate11Red", "Shikana1", false, GateType.shicaneGate, AfterGateAction.none, 29340, 15308));
gatesList.Add(new Gate("Gate12Red", "Shikana2", false, GateType.shicaneGate, AfterGateAction.none, 29224, 15203));
gatesList.Add(new Gate("Gate13Red", "Shikana3", false, GateType.shicaneGate, AfterGateAction.none, 29341, 15092));
gatesList.Add(new Gate("Gate14Red", "Shikana4", false, GateType.shicaneGate, AfterGateAction.none, 29132, 14989));
gatesList.Add(new Gate("Gate15Red", "Shikana5", false, GateType.shicaneGate, AfterGateAction.none, 29116, 15143));
gatesList.Add(new Gate("Gate16Red", "Shikana6", false, GateType.shicaneGate, AfterGateAction.none, 28952, 15116));
gatesList.Add(new Gate("Gate17Red", "GateV1", false, GateType.knifeGate, AfterGateAction.none, 28995, 15352));
gatesList.Add(new Gate("Gate18Blue", "GateH1", false, GateType.levelGate, AfterGateAction.none, 28922, 15649));
gatesList.Add(new Gate("Gate19Blue", "GateH2", false, GateType.levelGate, AfterGateAction.none, 29082, 15582));
gatesList.Add(new Gate("FinishGate", "GateStart", false, GateType.finishGate, AfterGateAction.none, 29276, 15536));
"StartGate" - это то как в чате ворота пройденные назовуться, может быть любым, желательно понятным:)
"GateStart" - это имя триггера стоящего в этих воротах
false - признак того, что ворота пройдены, перед стартом пройденных нет - ставим false
GateType.startGate - тип ворот может быть одним из описанного выше в скрипте GateType
AfterGateAction.none - тип действия после ворот, может быть none - ничего, AfterGateAction.loop - петля, AfterGateAction.barrel - бочка
29276, 15536 - координаты центра ворот, от этой точки считается расстояние до самолёта при наименьшем - ворота считаются пройденными,можно посмотреть в файле миссии у соответствующего триггера
собственно и всё.
шикарное описание, спасибо!!! Вечером попробую
Еще вопрос, если проходишь ворота ВЫШЕ то скрипт считает, что ворота не взяты, т.е. дальше вообще ничего не считает, можно ли сделать так, чтобы начислял штраф? Например, синие ворота надо проходить на высоте ДО 20м, а штраф должен начисляться при прохождении высота от 20.1 до 30 или 40 м, все что выше- незачет
Надо с конкретными правилами определиться, чтобы однотипно все в картах считалось и высечь их в "камне" в шапке темы. Объектов то и способов пролета не много особо. Еще бы хотелось чтобы считались очки за неправильный нож, а то сейчас можно в любую сторону проходить.
Да поздно уже было, и я скрин увидел думал ты просто эту же карту прошел и трек выложил.
Для незачёта ворот и 25 хватит. К стати, не надо забывать, что есть и нижний предел ворот. Он примерно получится 1\3 пилона, тоесть примерно 6.5 м от поверхности воды и штрафуется дисквалификацией.Вложение 160069
Нижний край, по идее, на всей трассе должен быть ограничен(дисквалификацией). Думаю, это легко скриптуется.Цитата:
Он примерно получится 1\3 пилона, тоесть примерно 6.5 м от поверхности воды и штрафуется дисквалификацией.
Я так понял, что строчки - gates.Add("GateStart"); в файле cs, надо ручками прописывать чтоб было так -
gatesList.Add(new Gate("StartGate", "GateStart", false, GateType.startGate, AfterGateAction.none, 29276, 15536)); ?
Ибо не достаточно только прописать в редакторе, в разделе скрипт, точек триггеров.
Да, триггеры же в файле миссии прописываются, а из .cs уже к ним привязываешься по координатам как Нарыв выше объяснял.
Допустим, у меня вчера в Ontario Race.mis cтояли триггеры по следующим координатам:
[Trigger]
GateStart TPassThrough 0 13410 31579 60
GateH1 TPassThrough 0 13047 32210 60
GateH3 TPassThrough 0 13225 31900 60
GateH2 TPassThrough 0 13238 32296 60
GateV1 TPassThrough 0 13065 32436 60
Shikana3 TPassThrough 0 13383 32088 60
Shikana2 TPassThrough 0 13333 31939 60
Shikana1 TPassThrough 0 13491 31899 60
Я взял эти координаты триггеров и вписал в координаты ворот в Ontario Race.cs:
gatesList.Add(new Gate("StartGate", "GateStart", false, GateType.startGate, AfterGateAction.none, 13410, 31579));
gatesList.Add(new Gate("Gate1Red", "Shikana1", false, GateType.shicaneGate, AfterGateAction.none, 13491, 31899));
gatesList.Add(new Gate("Gate2Red", "Shikana2", false, GateType.shicaneGate, AfterGateAction.none, 13333, 31939));
gatesList.Add(new Gate("Gate3Red", "Shikana3", false, GateType.shicaneGate, AfterGateAction.none, 13383, 32088));
gatesList.Add(new Gate("Gate4Blue", "GateH1", false, GateType.levelGate, AfterGateAction.none, 13047, 32210));
gatesList.Add(new Gate("Gate5Red", "GateV1", false, GateType.knifeGate, AfterGateAction.none, 13065, 32436));
gatesList.Add(new Gate("Gate6Red", "GateV1", false, GateType.knifeGate, AfterGateAction.none, 13065, 32436));
gatesList.Add(new Gate("Gate7Blue", "GateH2", false, GateType.levelGate, AfterGateAction.none, 13238, 32296));
gatesList.Add(new Gate("Gate8Blue", "GateH3", false, GateType.levelGate, AfterGateAction.barrel, 13225, 31900));
gatesList.Add(new Gate("StartGate", "GateStart", false, GateType.levelGate, AfterGateAction.none, 13410, 31579));
gatesList.Add(new Gate("StartGate", "GateStart", false, GateType.levelGate, AfterGateAction.none, 13410, 31579));
gatesList.Add(new Gate("Gate9Blue", "GateH3", false, GateType.levelGate, AfterGateAction.barrel, 13225, 31900));
gatesList.Add(new Gate("Gate10Blue", "GateH2", false, GateType.levelGate, AfterGateAction.none, 13238, 32296));
gatesList.Add(new Gate("Gate11Red", "GateV1", false, GateType.knifeGate, AfterGateAction.none, 13065, 32436));
gatesList.Add(new Gate("Gate12Red", "GateV1", false, GateType.knifeGate, AfterGateAction.none, 13065, 32436));
gatesList.Add(new Gate("Gate13Blue", "GateH1", false, GateType.levelGate, AfterGateAction.none, 13047, 32210));
gatesList.Add(new Gate("Gate14Red", "Shikana3", false, GateType.shicaneGate, AfterGateAction.none, 13383, 32088));
gatesList.Add(new Gate("Gate15Red", "Shikana2", false, GateType.shicaneGate, AfterGateAction.none, 13333, 31939));
gatesList.Add(new Gate("Gate16Red", "Shikana1", false, GateType.shicaneGate, AfterGateAction.none, 13491, 31899));
gatesList.Add(new Gate("FinishGate", "GateStart", false, GateType.finishGate, AfterGateAction.none, 13410, 31579));
Вот этот момент я тоже хотел бы уточнить, потому как за неправильный угол идет пенальти. Просто вчера когда возился с Онтарио, то там одни и те же ворота должны проходиться 2 раза в разных направлениях. Получается в одну сторону у тебя один угол должен быть, в другую - другой, а триггер в этом месте - 1. Как к 1 триггеру 2 переменных привязать я чего-то не въехал. Может 2 маленьких не пересекающихся триггера поставить, хотя по сути это ерунда, т.к. самолет все равно пройдет через оба триггера. Вот как бы направление пролета вычислять и привязывать к углу.
Скрытый текст:
Хотелось бы добавить, что прохождение синих ворот под углом не должно штрафоваться, если конечно только пилон не сшибёшь.
Вложение 160076
У Вас старый скрипт был в миссиях, посмотрите в этой теме абу-даби миссию - там новый скрипт в нём как раз заполгняются gatesList.Add(new Gate("StartGate", "GateStart", false, GateType.startGate, AfterGateAction.none, 29276, 15536)); а не gates.Add("GateStart"); , вот их как раз под себя и перепешите.
Как ещё можно регулировать размер триггера кроме ползунка ? А то там градация только по 50. :(
Посмотри вот здесь. Редактируется диаметр в файле .cs
Попробовал сделать карту по оригиналу (с учетом размеров) с этапа гонки RB в Lausitz, сушка не вписывается в трассу. Придется конкретно под нее переделывать.
Да там было перенаправление на п.10 в этой теме. Сам файл cs просмотрел, но так как я не силён в программах, то нифига не разглядел в какой строке прописана именно регулировка диаметра круга триггера. http://gn.ucoz.ua/im/osnova/scratch_head.gif
Дублирую))
"Так ткни триггер, там радиус задается - какой нужно диаметр ставишь, смотри вот в примере крайняя цифра (выделена жирным) - это и есть диаметр. Я им всегда пользуюсь.
[Trigger]
GateStart TPassThrough 0 13410 31579 60
GateH1 TPassThrough 0 13047 32210 60
GateH3 TPassThrough 0 13225 31900 60
GateH2 TPassThrough 0 13238 32296 60
GateV1 TPassThrough 0 13065 32436 60
Shikana3 TPassThrough 0 13383 32088 60
Shikana2 TPassThrough 0 13333 31939 60
Shikana1 TPassThrough 0 13491 31899 60
Т.е. в данном случае диаметр триггера 60 метров".
да, это в .mis
Ну вот http://gn.ucoz.ua/im/radost_ulibki/mosking.gif а я все глаза обламал копаясь в cs. :) Все скрипты вродь работают. А с настройками правого и левого ножа пока никак ?
Обновлённый скрипт гоночной миссии, теперь в свойствах ворот задаётся желаемый крен (правый положительный, левый отрицательный) (элемент списка ворот теперь заполняется так - gatesList.Add(new Gate("Gate5Red", "GateV1", false, GateType.knifeGate, AfterGateAction.none, 246657, 234320, -90)); , крайняя цифра - как раз желаемый крен), за пролёт ниже нижней границы (6.5 м задаётся hMin, меняйте по своему усмотрению ) - дисквалификация, гонка обнуляется, при пролёте выше 30м (hMax - опять же можно менять) ворота не считаются пройденными. За не включенный дымогенератор - штраф 2 сек.
Теперь рестарт после гонки не обязательно делать, после финиша всё обнуляется и можно лететь снова. Сбитый пилон через 2 минуты восстанавливается.
Вложение 160392
Отлично! Теперь можно будет сбитые пилоны и в онлайне переделать. Илья, а как ты решил проблему с прохождением одного и того же триггера с разных направлений? Я про то, что одни и те же ворота приходится проходить с разных направлений в одной и той же гонке.
ЗЫ. Кстати, а для чего по сути нужен дымогенератор?
Так триггер ведь круглый, с любого направления проходится, направление сейчас не проверяется(можно конечно ещё и его проверять), но если проходить не оптимальным маршрутом - время увеличится, так что смысла особого нет.
Для красоты, наверное, это же шоу во многом :) . А так - в правилах РедБулльских есть пенальти за не включенный, ну и я сделал :)
А чтоб в других картах было подобное надо поставить новый cs файл и вставить свои координаты триггеров или можно в уже имеющийся вставить строчки ? -
......-90
double hMin = 6.5;
double hMax = 30.0;
bool smokeOn = false;
А время восстановления пилона регулируется ? А то 2 мин многовато.
Упс, сейчас только обратил внимание, а в змейке-то крен вообще не учитывается. http://gn.ucoz.ua/im/osnova/scratch_head.gif Змейку можно горизонтально проходить без штрафа. http://gn.ucoz.ua/im/osnova/unsure.gif
надо новый, в нём обработка этих новых условий. И в этот новый файл свои координаты(можно их просто из старого забрать, добавив в конце желаемый крен)
отдельной переменной нет, можно в функциинайти строчкуКод:public override void OnStationaryKilled(int missionNumber, GroundStationary _stationary, AiDamageInitiator initiator, int eventArgInt)
120.0 - время в секундах после которого пилон восстанавливается, поменяйте как Вам удобнее будет.Код:Timeout(120.0, () =>
а от направления движения это не зависит левый крен всегда отрицательный а правый - всегда положительный.
А пилоны-то по истечении любого времени Timeout(120.0, () не востанавливаются, а просто исчезают и больше не появляются. http://gn.ucoz.ua/im/osnova/scratch_head.gif
Ну так в скрипте каждый пролёт ворот описан в списке ворот, соответственно ворота на ноже будут 3,4 и 10,11 строчками в списке ворот и у них можно указать любой желаемый крен.
угу про локали забыл, в исходном сообщении исправленный скрипт перевыложил, либо просто руками в своём заменить строчкунаКод:value += " " + _stationary.pos.x.ToString() + " " + _stationary.pos.y.ToString() + " 0";
Код:value += " " + _stationary.pos.x.ToString(System.Globalization.CultureInfo.InvariantCulture.NumberFormat) + " " + _stationary.pos.y.ToString(System.Globalization.CultureInfo.InvariantCulture.NumberFormat) + " 0";
Старт гонки не корректно начинается. Если лететь через стартовые ворота прямо то появляется только надпись старт гонки, а прохождение ворот не считается ни этих ни соответственно следующих. Но если входить в ворота под углом и чуть отдать ручку от себя до ворот, то триггер нормально схватывается. И первый конус шиканы тоже через раз на пятый считается и то если ее проходить по большому радиусу.
Ах! С новым патчем если открыть фонарь - то это просто супер как чувствуется!!! Скорость падает катастрофически! =)) В общем - спасибо!
naryv, в новом скрипте, если пролететь старт до восстановления пилонов, то пенальти остаются с прошлого вылета (если не перезапускать миссию). Возможно и в любом случае, ещё не проверил.
Сделал шикарный вылет: пролетел трассу, случайно открыл фонарь - пришлось садиться в поле, пролетая над кустиками, деревьями и домиками улыбнулся, сел, закрыл фонарь, взлетел, начал снова проходить трассу! Ах! Вроде бы и ничего необычного, а так погружает!
А перезарядку и дозаправку не выходя из миссии точно никак нельзя сделать?! :ups:
В змейе, вертикальный угол ( нож ) по прежнему не штрфуется. Файл cs из крайней правки.
// заполняем список ворот всеми воротами по порядку их прохождения
gatesList.Add(new Gate("StartGate", "GateStart", false, GateType.startGate, AfterGateAction.none, 246737, 233546, 0));
gatesList.Add(new Gate("Gate1Red", "Shikana1", false, GateType.shicaneGate, AfterGateAction.none, 246865, 233831, -90));
gatesList.Add(new Gate("Gate2Red", "Shikana2", false, GateType.shicaneGate, AfterGateAction.none, 246788, 233955, 90));
gatesList.Add(new Gate("Gate3Red", "Shikana3", false, GateType.shicaneGate, AfterGateAction.none, 246918, 234008, -90))
gatesList.Add(new Gate("Gate4Red", "GateV1", false, GateType.knifeGate, AfterGateAction.none, 246657, 234320, 90));
gatesList.Add(new Gate("Gate5Red", "GateV1", false, GateType.knifeGate, AfterGateAction.none, 246657, 234320, -90));
gatesList.Add(new Gate("Gate6Blue", "GateH1", false, GateType.levelGate, AfterGateAction.none, 246983, 234391, 0));
gatesList.Add(new Gate("Gate7Blue", "GateH2", false, GateType.levelGate, AfterGateAction.loop, 247421, 234340, 0));
gatesList.Add(new Gate("Gate8Blue", "GateH2", false, GateType.levelGate, AfterGateAction.none, 247421, 234340, 0));
gatesList.Add(new Gate("Gate9Blue", "GateH1", false, GateType.levelGate, AfterGateAction.none, 246983, 234391, 0));
gatesList.Add(new Gate("Gate10Red", "GateV1", false, GateType.knifeGate, AfterGateAction.none, 246657, 234320, 90));
gatesList.Add(new Gate("Gate11Red", "GateV1", false, GateType.knifeGate, AfterGateAction.none, 246657, 234320, 90));
gatesList.Add(new Gate("Gate12Blue", "GateH3", false, GateType.levelGate, AfterGateAction.barrel, 246528, 233988, 0));
gatesList.Add(new Gate("FinishGate", "GateStart", false, GateType.finishGate, AfterGateAction.none, 246737, 233546, 0));
Вложение 160150
Мда, и в правду не учитывается крен в змейке.
Вложение 160157
Что-то никак не разберу, за что штраф начисляется, может кто подскажет ? http://gn.ucoz.ua/im/osnova/scratch_head.gif
Вложение 160175
// заполняем список ворот всеми воротами по порядку их прохождения
gatesList.Add(new Gate("StartGate", "GateStart", false, GateType.startGate, AfterGateAction.none, 29276, 15536, 0));
gatesList.Add(new Gate("Gate1Red", "Shikana1", false, GateType.shicaneGate, AfterGateAction.none, 29340, 15308, 0));
gatesList.Add(new Gate("Gate2Red", "Shikana2", false, GateType.shicaneGate, AfterGateAction.none, 29224, 15203, 0));
gatesList.Add(new Gate("Gate3Red", "Shikana3", false, GateType.shicaneGate, AfterGateAction.none, 29341, 15092, 0));
gatesList.Add(new Gate("Gate4Red", "Shikana4", false, GateType.shicaneGate, AfterGateAction.none, 29132, 14989, 0));
gatesList.Add(new Gate("Gate5Red", "Shikana5", false, GateType.shicaneGate, AfterGateAction.none, 29116, 15143, 0));
gatesList.Add(new Gate("Gate6Red", "Shikana6", false, GateType.shicaneGate, AfterGateAction.none, 28952, 15116, 0));
gatesList.Add(new Gate("Gate7Red", "GateV1", false, GateType.knifeGate, AfterGateAction.none, 28995, 15352, 90));
gatesList.Add(new Gate("Gate8Blue", "GateH1", false, GateType.levelGate, AfterGateAction.none, 28880, 15675, 0));
gatesList.Add(new Gate("Gate9Blue", "GateH2", false, GateType.levelGate, AfterGateAction.none, 29041, 15607, 0));
gatesList.Add(new Gate("Gate11Red", "Shikana1", false, GateType.shicaneGate, AfterGateAction.none, 29340, 15308, 0));
gatesList.Add(new Gate("Gate12Red", "Shikana2", false, GateType.shicaneGate, AfterGateAction.none, 29224, 15203, 0));
gatesList.Add(new Gate("Gate13Red", "Shikana3", false, GateType.shicaneGate, AfterGateAction.none, 29341, 15092, 0));
gatesList.Add(new Gate("Gate14Red", "Shikana4", false, GateType.shicaneGate, AfterGateAction.none, 29132, 14989, 0));
gatesList.Add(new Gate("Gate15Red", "Shikana5", false, GateType.shicaneGate, AfterGateAction.none, 29116, 15143, 0));
gatesList.Add(new Gate("Gate16Red", "Shikana6", false, GateType.shicaneGate, AfterGateAction.none, 28952, 15116, 0));
gatesList.Add(new Gate("Gate17Red", "GateV1", false, GateType.knifeGate, AfterGateAction.none, 28995, 15352, 90));
gatesList.Add(new Gate("Gate18Blue", "GateH1", false, GateType.levelGate, AfterGateAction.none, 28880, 15675, 0));
gatesList.Add(new Gate("Gate19Blue", "GateH2", false, GateType.levelGate, AfterGateAction.none, 29041, 15607, 0));
gatesList.Add(new Gate("FinishGate", "GateStart", false, GateType.finishGate, AfterGateAction.none, 29276, 15536, 0));
no loop- нет петли
no barrel roll- нет бочки
double penaltyAerobatics = 6.0; // пенальти(с) за не выполнение пилотажных эл-тов 6*2 элемента = 12
нет бочки и петли, если они в гонке не предусмотрены в public void InitRace() поставьтебудет считаться что они выполнены и штрафа не будетКод:CheckLoopPass = true;
CheckBarrelPass = true;
--- Добавлено ---
добавьте, пожалуйста в скрипте миссии в public void InitRace() строчкузабыл обнулить пенальти, примерно так должно выглядеть:Код:penaltyTotal = 0.0;
Скрытый текст:
нет:(