-
Posts
1270 -
Joined
-
Last visited
Content Type
Profiles
Forums
Events
Everything posted by Blackfyre
-
Это потому что я мудак (с). Не надо никому показывать непротестированную версию, в которой вроде чуть-чуть что то подправил Там надо строки: 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
-
В смысле руки не дошли, если это уже в новостях передают? Или это подрисованная радуга?
-
Су-30 я ни разу не видел, а S-3 уже делают новую модель, о чем тут говорилось. Вероятно этим занимаются банально разные люди.
-
Не люблю "магические числа", 980 в оригинальном примере, который один добрый человек давал - это максимальная масса топлива в L-39 в килограммах. А правильно и универсально для любого самолета будет вот так: unit:getDesc().fuelMassMax * unit:getFuel() в килограммах и соответственно если разделить на 0.45, то в фунтах. Я решил чуть познакомиться с объектами в Lua и немного доработал скрипт, теперь его можно повесить на несколько групп, он умеет выводить и в килограммах и фунтах, а еще говорит, сколько ты забрал топлива из танкера, что мне для интереса надо было) Внизу создание объектов для нескольких групп, код под катом:
-
Подумалось, что при запросе по радио статуса неплохо было еще и себя выводить, чтобы можно было быстро сравнить. Ниже обновленная версия скрипта с соответствующей опцией. Было бы конечно неплохо еще в единицах массы научиться выводить топливо, а не только в процентах, но это как-нибудь потом. 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()
-
Я с этим уже довольно давно сталкилвался(в апреле примерно), может уже и поправили. А так у меня Су-27 меня от вражеских ястребов охраняли и во время тестов миссии я пару раз удивлялся, когда они возвращались слишком рано. При просмотре трэков сначала узнал о опции "отлючить форсаж", а потом, что и в круге ожидания они его иногда(!) пользуют. Скорости там адекватные были, что-то около 0.6Маха на 10 километрах. Еще раз столкнусь - сделаю репорт.
-
Программирование - это не это не только про написание кода, это в большей степени про продумывание логики. Составление миссии на триггерах и флагах - тоже вполне себе программирование, только, ИМХО, менее удобное чем в виде кода. На первый взгляд выглядит проще, но как только нужно сделать нечто более сложное, то все - ппц. А разобраться в более менее сложной миссии на триггерах(не своей, или своей, которую полгода не видел) уже даже на первый взгляд не просто. Ниже скрипт, который решает вроде как обе твои проблемы, если я их правильно понял. Добавил еще возможность работать с группами с любым количеством самолетов(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 Боты как-то непредсказуемо используют форсаж, если при полете по маршруту опция поведения спасает, то например на патрулировании ее использовать не стоит, а то они и в воздушный бой полетят без форсажа. А они зачем-то в ожидании на круге иногда тоже форсаж включают с неизвестной целью
-
Тебе нужно запускать проверку топлива раз в 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" надо заменить на нужное имя.
-
А в каких-нибудь сводках/прогнозах погоды это же среднеквадратичное значение можно встретить?
-
Не научный подход. Когда значение вообще вводили, должно же было быть хоть какое-нибудь описание что оно делает и почему...
-
Не, это разные явления. В том же TAF порывы ветра передаются отдельно, например 21015G30KT, читается как ветер 15 узлов с порывами до 30 узлов, направление 210 (из). И насколько я понимаю, сейчас этого нет в DCS, а жаль, кидаться бомбами стало бы еще интереснее) Есть еще сдвиг ветра, но раз он в DCS не моделируется, то я с ним и не пытался разобраться .Турбулентность же штука хаотичная, т.е. ее можно свести к порывам ветра, но со случайным направлением, в том числе вверх/вниз. Тут например виден эффект от нее в реализации DCS. Самолет как бы на кочках подскакивает. Вот и хочется ее уровень уметь выставлять реалистично и совсем идеально если точно так же как было 21 апреля 2019 года в Дамаске. Общая рекомендация от Reflected такая: Но откуда он взял эти значения? Говорит, что летает на глайдерах и там это важно. Видимо надо идти к глайдеристам.
-
Подскажите, пожалуйста, что такое турбулентность(та что естественная и задается в редакторе миссий) в DCS? В руководстве сказано: ТУРБУЛЕНТНОСТЬ. Уровень турбулентности в десятых долях метра в секунду. Турбулентность максимальна у земли и падает с высотой. Мне не удалось найти упоминаний, что в реальности турбулентность измеряется в метрах в секунду. Вообще по ней как-то немного информации. В документе AF-METAR-TAF-Codes раскопал такую табличку: По которой раскодируется TAF(прогноз погоды), пример оттуда 520004 - местами средняя турбулентость от поверхности до 4000 футов, где 2 код из таблицы, 000 - начало в сотнях футов от поверхности, 4 - конец в тысячах футов. Но как это соотнести с тем, что есть в DCS? Как быстро турбулентность падает с высотой? И где блин взять TAF в котором вообще есть турбулентность? Например тут нет. Нашел, что люди эмпирическим путем определили какие-то значения, чтобы воздух ощущался "живым", но как это соотносится с реальностью? В общем значение есть, но как заполнять не понятно. Особенно если хочется максимально точно воспроизвести реальную погоду.
-
Т.е. может сознательно разбиться, может пытаться выжить (и все равно разбиться). И это вообще никак не связано с флайт моделью. А как сейчас себя ведет бот? Мне казалось, что он пытается выжить.
-
Не, тактику то я понял, не понял почему в качестве приманок используются AGM-154 JSOW, которые летят в точку на карте(GPS), а не корабль. Вот вместо них логичнее использовать гарпуны, которыми действительно сложно попасть, их видимо надо прямо рой выпускать с десятка носителей.
-
JSOW по кораблям? А зачем? Какой шанс у нее попасть? Почему не гарпуны? А вот про Walleye я забыл, спасибо, что напомнили, надо ее опробовать.
-
I use value_down = -1.0 for retract it and value_down = 1 to extend, seems it work.
-
Не флейма ради, а в чем смысл делать точку подвески и вешать на нее ракету, которую нельзя запустить? Хотели провести модернизацию и заменить СУВ, но не заменили?
-
У Су-25Т на ИЛС отображается. Если ИЛС нет, то да сложно, только запоминать карту и дальше по дальности/азимуту ориентироваться. Зато там есть возможность переключения каналов РСБН, что есть почти тоже самое. Поэтому хотелка Coljo выглядит не такой бессмысленной как мне сначало показалось.
-
Что-то мне подсказывает, что это не будут делать по двум причинам - в ГС3 не дорабатывают более важные вещи(САУ у Су-27 например) и это игровое упрощение, ИМХО бессмысленное. Более правильным решением было бы положить списки аэродромов в планшет, сейчас это можно сделать самому. Я пользуюсь вот этим прекрасным твочеством господина @Minsky (там столбец ID - это как раз номер выбранного аэродрома в ГС3).
-
I think there should be two editboxes explicitly labeled with "FROM" and "TO". So nobody will be confused. Mission itself can keep value as it does now, so compatibility will not break.
-
И с SuperCarrier, если память не изменяет, из-за чего Макс вообще пришел на форум В общем это, долой Steam! Там и бонусных миль нет и программы "попробовать" и денег ED меньше получает.
-
Это не совсем корректный пример, ибо предзаказа тут нет. По поводу предзаказа - https://partner.steamgames.com/doc/store/prepurchase, где написано: Т.е. видимо, ED считается подходящим партнёром, но дату их писать обязывают и зависит это именно от Valve, т.е. одним может разрешить одно, другим - другое. А то, что у тебя на скрине, это страница "Скоро выйдет", где можно написать все что угодно - https://partner.steamgames.com/doc/store/coming_soon. P.S. Представители ED об этом неоднократно писали, как на русском, так и на английском.
-
Ты вероятно имеешь ввиду Steam, а там так нельзя, там всегда надо указывать конкретную дату, а потом 10 раз его перенить, это политика Valve, а не ED. В ED'шном магазине нет никаких дат и вообще оценки сроков, но когда открыли предзаказ, то в новостях было написано "later this year". Возможно действительно лучше кварталами писать, как ты предложил.
-
Может банально экскватор сломаться, и спектр задач где рационально держать запасной очень маленький. Один раз в одной маленькой компании на пару десятков тысяч человек отложили внедрение решения по автоматизации командировок, потому что я заболел