Jump to content

Blackfyre

Members
  • Posts

    1279
  • Joined

  • Last visited

Everything posted by Blackfyre

  1. В файле пример для группы US_Transport, обрати внимание на строку getUnitFuel = getUnitLbsThousands. Может я не правильно поянл хотелку? Я вроде проверял, для, например 5434 фунтов должно вывести, "5.4". groupTanker = FlightFuel:new({groupName = "US_Transport", cmdReport = nil, threshold = 0.4, msgSeconds = 10, checkInterval = 30, reportOnRefuel = true, getUnitFuel = getFuelLbsThousands, skipPlayerReport = false })
  2. А если выключить зеркала? В списках изменений написано "With enabled mirrors black flashes may appear in some cases." У меня это происходит, приходится складывать зеркала. P.S. Ранее я сталкивался с черной половиной экрана, помогало головой повертеть.
  3. @Redneck, починил ошибку при смерти юнитов и сделал дополнительную функцию вывода с форматом, как ты хотел. в тысячах фунтов. checkFlightFuel.lua
  4. Какой скучный перевод, в англиском версии так: "AI ground units. AI soldiers could not hit a close target (adjusted contact lens prescription) - fixed." А в русской, просто сухо: "ИИ. Пехота не могла поразить близко расположенную цель - исправлено." И аналогично - "Caucasus map. Beslan airport. Planes collision during parking (bar closed during operations) - fixed" и "Карта Кавказа. Устранены возможные столкновения самолётов на парковках Беслана." За юмор спасибо!
  5. Тут дело не в количестве, которое нужно, а в самом скилле полета близким строем. Сначала у меня, как у всех не получалось даже подойти, потом отключил турбулентность и научился подходить и соединяться, потом не получалось долго удерживаться, потом стало получаться в том числе с турбулентностью, но все это в прямом полете, теперь надо научиться заправляться в вираже и когда танкер "неожиданно" начинает поворачивать. А количество как средство объективного контроля). Я там выше неправильную правку предложил, если из функции вернуть строку, то кажется будет ошибка, так как функция вывода ожидает там число. Вечером постараюсь сделать как правильно. А с помощью этого скрипта я выяснил, что танкер отдает ровно то топливо, которое у него в баках, т.е. для S3 это примерно 17к фунтов, как и у хорнета с 3мя баками.
  6. Пофиг чья там обязанность и ответственность, программист должен хоть раз запустить код, если говорит что сделал)) Так и задумано, но у меня почему то вывел три сообщения на одну расстыковку(я прямо уверенно и специально отходил, а не случайно). Я это писал, чтобы себя проще контролировать было, хочу научиться заправлять 10к фунтов без дисконектов. (в прямом полете вроде даже получается). Жаль, что в событии танкер определить нельзя, было бы весьма полезно автоматически говорить сколько в нем топлива ДО дозаправки (в S3 мало топлива влазит например). Это все функции сверху, можно подправить имеющуюся getFuelLbs, можно написать новую и в параметр getUnitFuel передавать уже ее: function getFuelLbs2(unit) local fuel = unit:getFuel() local lbs = (fuel * unit:getDesc().fuelMassMax) / 0.45359237 return string.format("%.1f", lbs/1000 ), " ", fuel end Вот это по идее должно выводить как ты хочешь(не проверял), lbs при этом убрал если нужен, то вернуть в кавычки его. Тут после слова return через запятую три вещи возвращаются - число топлива в кг/фунтах, строка которая будет выведена после числа, т.е. и содержит "кг" или "фунты" и топливо в частях (0.7 например). В функции outFuelReport можно подправить, то что вообще выводится.
  7. Тут написано, искать dcs.log. В той же теме выше есть про процедуры восстановления.
  8. Начать с того, что показать лог.
  9. Простите, забыл смайлик поставить или явно написать, что это сарказм. Чиж тут раз 20 писал, что все старые модели постепенно переделывают на новые. Про конкретно S-3B(который я часто и близко наблюдаю) просто вот прямо недавно, что он уже в работе. Важного с чьей точки зрения? Для кого-то такие мелочи очень даже важны, вероятно для тех кто используют фигурку в кабине и ее вблизи очевидно наблюдает чаще, чем любую модельку техники. Чтобы ED ни делали, всегда найдутся вещи, которые кто-то считает более приоритетными. Чтобы далеко не ходить, я например считаю, что исправлять баги в F-18(с радаром например или CCIP) должно быть приоритетнее новых фич в F-16, однако ED так не считают или у них есть другие, неизвестные мне причины их не чинить вот прямо сейчас. И какие тут совпадения? Я конечно 3d модельки никогда не делал, но фигурка пилота(да еще и с часами) не кажется мне более простой, чем моделька техники.
  10. Это потому что я мудак (с). Не надо никому показывать непротестированную версию, в которой вроде чуть-чуть что то подправил Там надо строки: if threshold then timer.scheduleFunction(newObj.checkFuel, newObj, timer.getTime()+newObj.checkInterval ) end if reportOnRefuel then world.addEventHandler(newObj) end Заменить на: if newObj.threshold then timer.scheduleFunction(newObj.checkFuel, newObj, timer.getTime()+newObj.checkInterval ) end if newObj.reportOnRefuel then world.addEventHandler(newObj) end Еще доклад о заправке от танкера будет сейчас для группы игрока работать. Можно сделать, чтобы для всех показывал, только он у меня сейчас три раза выводит сообщение почему-то(не разбирался почему так, может потому что я отходил почти сразу, то есть до "Transfer complete"). По поводу погрешности хз, если скрипт натравить на выключенный хорнет без баков и полной заправкой то возвращает 10802 фунта(в редакторе 10803, но это из-за грубого округления всегда в меньшую сторону). Почти сразу после запуска расхождение с IFEI будет уже в несколько десятков фунтов, не думаю, что это сильно критично, но с этим уже к разработчикам надо) Поправленный скрипт во вложении. checkFlightFuel.lua
  11. В смысле руки не дошли, если это уже в новостях передают? Или это подрисованная радуга?
  12. Су-30 я ни разу не видел, а S-3 уже делают новую модель, о чем тут говорилось. Вероятно этим занимаются банально разные люди.
  13. Не люблю "магические числа", 980 в оригинальном примере, который один добрый человек давал - это максимальная масса топлива в L-39 в килограммах. А правильно и универсально для любого самолета будет вот так: unit:getDesc().fuelMassMax * unit:getFuel() в килограммах и соответственно если разделить на 0.45, то в фунтах. Я решил чуть познакомиться с объектами в Lua и немного доработал скрипт, теперь его можно повесить на несколько групп, он умеет выводить и в килограммах и фунтах, а еще говорит, сколько ты забрал топлива из танкера, что мне для интереса надо было) Внизу создание объектов для нескольких групп, код под катом:
  14. Подумалось, что при запросе по радио статуса неплохо было еще и себя выводить, чтобы можно было быстро сравнить. Ниже обновленная версия скрипта с соответствующей опцией. Было бы конечно неплохо еще в единицах массы научиться выводить топливо, а не только в процентах, но это как-нибудь потом. MyMission = {} MyMission.cmdReportFuelState = "Доложить статус топлива" --текст пункта меню F10 MyMission.groupName = "USN_Hornet" --имя группы, заменить на свое из миссии MyMission.threshold = 0.4 -- остаток топлива, о котором докладывать без запроса MyMission.msgSeconds = 20 -- время показа сообщений в секундах MyMission.checkDelay = 10 -- время между проверками остатка топлива MyMission.skipPlayerReport = false --Не выводить статус топлива игрока по F10 если true MyMission.groupUnits = {} function MyMission:initRadioMenu() missionCommands.addCommand(self.cmdReportFuelState, nil, self.reportFuelState, self) end function MyMission:initGroupUnits() for i, u in pairs(Group.getByName(self.groupName):getUnits()) do if u:getPlayerName() == nil then table.insert(self.groupUnits, u) end end end function MyMission.checkFuel(param) for i, u in ipairs(param.groupUnits) do if u:getFuel() < param.threshold then param:outFuelReport(Group.getByName(param.groupName), u) table.remove(param.groupUnits, i) end end if #param.groupUnits == 0 then trigger.action.outText("All out of fuel", param.msgSeconds, false) return nil --all below threshold, end checks else return timer.getTime() + param.checkDelay end end function MyMission:outFuelReport(group, u) local name = u:getPlayerName() if name == nil then name = u:getName() end trigger.action.outTextForGroup(group:getID(), string.format("%s топлива %0.2f", name, u:getFuel()), self.msgSeconds, false) end function MyMission.reportFuelState(param) local group = Group.getByName(param.groupName) for i, u in pairs(group:getUnits()) do if u:getPlayerName() == nil or (u:getPlayerName() ~=nil and param.skipPlayerReport == false) then param:outFuelReport(group, u) end end end timer.scheduleFunction(MyMission.checkFuel, MyMission, timer.getTime()+MyMission.checkDelay ) MyMission:initRadioMenu() MyMission:initGroupUnits()
  15. Я с этим уже довольно давно сталкилвался(в апреле примерно), может уже и поправили. А так у меня Су-27 меня от вражеских ястребов охраняли и во время тестов миссии я пару раз удивлялся, когда они возвращались слишком рано. При просмотре трэков сначала узнал о опции "отлючить форсаж", а потом, что и в круге ожидания они его иногда(!) пользуют. Скорости там адекватные были, что-то около 0.6Маха на 10 километрах. Еще раз столкнусь - сделаю репорт.
  16. Программирование - это не это не только про написание кода, это в большей степени про продумывание логики. Составление миссии на триггерах и флагах - тоже вполне себе программирование, только, ИМХО, менее удобное чем в виде кода. На первый взгляд выглядит проще, но как только нужно сделать нечто более сложное, то все - ппц. А разобраться в более менее сложной миссии на триггерах(не своей, или своей, которую полгода не видел) уже даже на первый взгляд не просто. Ниже скрипт, который решает вроде как обе твои проблемы, если я их правильно понял. Добавил еще возможность работать с группами с любым количеством самолетов(2-4). Во вложении проверочная миссия (скрипт важно запускать из триггера, как в ней). Чтобы чуть поднастроить под себя, можно менять параметры, отмеченные комментариями. MyMission = {} MyMission.cmdReportFuelState = "Доложить статус топлива" --текст пункта меню F10 MyMission.groupName = "USN_Hornet" --имя группы, заменить на свое из миссии MyMission.threshold = 0.4 -- остаток топлива, о котором докладывать без запроса MyMission.msgSeconds = 20 -- время показа сообщений в секундах MyMission.checkDelay = 10 -- время между проверками остатка топлива MyMission.groupUnits = {} function MyMission:initRadioMenu() missionCommands.addCommand(self.cmdReportFuelState, nil, self.reportFuelState, self) end function MyMission:initGroupUnits() for i, u in pairs(Group.getByName(self.groupName):getUnits()) do if u:getPlayerName() == nil then table.insert(self.groupUnits, u) end end end function MyMission.checkFuel(param) for i, u in ipairs(param.groupUnits) do if u:getPlayerName() == nil then if u:getFuel() < param.threshold then param:outFuelReport(Group.getByName(param.groupName), u) table.remove(param.groupUnits, i) end end end if #param.groupUnits == 0 then trigger.action.outText("All out of fuel", 10, false) return nil --all below threshold, end checks else return timer.getTime() + param.checkDelay end end function MyMission:outFuelReport(group, u) trigger.action.outTextForGroup(group:getID(), string.format("%s топлива %0.2f", u:getName(), u:getFuel()), self.msgSeconds, false) end function MyMission.reportFuelState(param) local group = Group.getByName(param.groupName) for i, u in pairs(group:getUnits()) do if u:getPlayerName() == nil then param:outFuelReport(group, u) end end end timer.scheduleFunction(MyMission.checkFuel, MyMission, timer.getTime()+MyMission.checkDelay ) MyMission:initRadioMenu() MyMission:initGroupUnits() ReportFuel.miz Боты как-то непредсказуемо используют форсаж, если при полете по маршруту опция поведения спасает, то например на патрулировании ее использовать не стоит, а то они и в воздушный бой полетят без форсажа. А они зачем-то в ожидании на круге иногда тоже форсаж включают с неизвестной целью
  17. Тебе нужно запускать проверку топлива раз в N секунд, этого можно добиться несколькими способами, первый примерно как kievbsm посоветовал, через флаги сообразить цикл и либо выполнять там в предикате проверку, либо запускать функцию скрипта. Либо через Lua же все время планировать функцию проверки, примерно так: MyMission = {} function MyMission.checkFuel() local unit = Unit.getByName("UnitName") if 30 > unit:getFuel() * 100 then trigger.action.setUserFlag("1", 1) trigger.action.outString("Fuel is less than 30%") return nil --больше не проверять else return timer.getTime() + 10--проверить снова через 10 секунд end end timer.scheduleFunction(MyMission.checkFuel, {}, timer.getTime()+10 ) Метод getFuel коварный, он за 1 единицу считает вместимость только внутренних баков, а подвесные будут как бы сверху, т.е. для например для полного хорнета с 3мя баками он вернет примерно 1.7. Поэтому имхо лучше считать топливо в единицах массы, но я сходу не подскажу как. P.S. Конкретно этот скрипт на работоспособность не проверял. "UnitName" надо заменить на нужное имя.
  18. А в каких-нибудь сводках/прогнозах погоды это же среднеквадратичное значение можно встретить?
  19. Насыщение X/Y
  20. Не научный подход. Когда значение вообще вводили, должно же было быть хоть какое-нибудь описание что оно делает и почему...
  21. Не, это разные явления. В том же TAF порывы ветра передаются отдельно, например 21015G30KT, читается как ветер 15 узлов с порывами до 30 узлов, направление 210 (из). И насколько я понимаю, сейчас этого нет в DCS, а жаль, кидаться бомбами стало бы еще интереснее) Есть еще сдвиг ветра, но раз он в DCS не моделируется, то я с ним и не пытался разобраться .Турбулентность же штука хаотичная, т.е. ее можно свести к порывам ветра, но со случайным направлением, в том числе вверх/вниз. Тут например виден эффект от нее в реализации DCS. Самолет как бы на кочках подскакивает. Вот и хочется ее уровень уметь выставлять реалистично и совсем идеально если точно так же как было 21 апреля 2019 года в Дамаске. Общая рекомендация от Reflected такая: Но откуда он взял эти значения? Говорит, что летает на глайдерах и там это важно. Видимо надо идти к глайдеристам.
  22. Подскажите, пожалуйста, что такое турбулентность(та что естественная и задается в редакторе миссий) в DCS? В руководстве сказано: ТУРБУЛЕНТНОСТЬ. Уровень турбулентности в десятых долях метра в секунду. Турбулентность максимальна у земли и падает с высотой. Мне не удалось найти упоминаний, что в реальности турбулентность измеряется в метрах в секунду. Вообще по ней как-то немного информации. В документе AF-METAR-TAF-Codes раскопал такую табличку: По которой раскодируется TAF(прогноз погоды), пример оттуда 520004 - местами средняя турбулентость от поверхности до 4000 футов, где 2 код из таблицы, 000 - начало в сотнях футов от поверхности, 4 - конец в тысячах футов. Но как это соотнести с тем, что есть в DCS? Как быстро турбулентность падает с высотой? И где блин взять TAF в котором вообще есть турбулентность? Например тут нет. Нашел, что люди эмпирическим путем определили какие-то значения, чтобы воздух ощущался "живым", но как это соотносится с реальностью? В общем значение есть, но как заполнять не понятно. Особенно если хочется максимально точно воспроизвести реальную погоду.
  23. Т.е. может сознательно разбиться, может пытаться выжить (и все равно разбиться). И это вообще никак не связано с флайт моделью. А как сейчас себя ведет бот? Мне казалось, что он пытается выжить.
  24. Не, тактику то я понял, не понял почему в качестве приманок используются AGM-154 JSOW, которые летят в точку на карте(GPS), а не корабль. Вот вместо них логичнее использовать гарпуны, которыми действительно сложно попасть, их видимо надо прямо рой выпускать с десятка носителей.
  25. JSOW по кораблям? А зачем? Какой шанс у нее попасть? Почему не гарпуны? А вот про Walleye я забыл, спасибо, что напомнили, надо ее опробовать.
×
×
  • Create New...