|
|
Модератор форума: Slon |
Форум РЕДАКТОР - ArmA 2 Operation Arrowhead Скрипты Скрипт термодымовой аппаратуры для БТВТ |
Скрипт термодымовой аппаратуры для БТВТ |
› Воскресенье
› 24.01.2016
› 18:55
› Сообщение #
Скрипт готов, но проверен только в сингле. Делался под сборку Weekly Open Games.
Как это работает. У мехводов техники, в реальности имеющей термодымовую аппаратуру, появляется новый пункт включения ТДА. Реальная ТДА генерирует дым при разбрызгивании топлива форсунками в выпускном тракте двигателя. Здесь генерируется два потока частиц - с разной плотностью - на месте выхлопа двигателя и с вектором, направленным от борта параллельно уровню моря. Реализовать перпендикулярное борту машины направление возможно, но не стоит, потому что в некоторых ситуациях весь дым может уходить под поверхность земли - отражение частиц от поверхностей реализовано только в третьей арме. Генерация дыма требует большого количества топлива, 10 литров в минуту. Это очень много и неиспарившиеся излишки в реале скапливаются в выпускном тракте и разбрасываются вокруг выхлопа - на борт, гусянки, жалюзи и прочее. Поэтому, в соответствии с реальностью, не рекомендуется использовать систему больше 10 минут. К этому времени скапливается количество излишков, достаточное для их воспламенения. Сначала появляются периодические вспышки, затем прекращается дымопуск, вспышки продолжаются и через некое случайное время вспыхивает пламя. Которое горит до реакции системы ПротивоПожарного Оборудования - ППО. Пожар тушится, но система продолжает выбрасывать топливо, а излишки испаряются недостаточно быстро. Но испарение излишков и продувка выпускного тракта в системе реализованы. Примерно через 3 минуты работы двигателя при выключенной ТДА излишки удаляются полностью и системой можно пользоваться. При выключенном двигателе топливо удаляется - испаряется - намного медленнее. У ППО заложено трехкратное срабатывание, при четвертом пожаре начинается необратимое горение машины до ее уничтожения. При этом пожаре все, кто находится внутри машины - экипаж и десант - слепнут и кашляют. Полноценное управление машиной очень осложнено. В скрипте прописана реальная емкость баков. Абрамс с его двумя тоннами может дымить долго, если с перерывами, а БМД с баком в 460 литров намного меньше. Потому что расход топлива системой одинаковый у обеих машин. Реализована подстройка времени жизни частиц дыма и скорости потребления топлива. Для города время жизни частиц можно выставлять до 0.4, там нет необходимости закрывать большие пространства, а в пустыне можно и 1. По умолчанию выставлено 0.7. Скорость потребления топлива по умолчанию двукратная. Пока еще не ликвидирована одна проблема. Повреждения наносятся только МТО, то есть двигателю, и до финального пожара они считаются нулевыми. Если двигатель был уже сильно поврежден, финальный пожар почти аннулирует эти повреждения, но эти повреждения все равно будут неизбежно расти и приведут к уничтожению машины. Для правильной работы требуется получить начальные повреждения двигателя, а легко это делается только в третьей арме. Во второй я пока не смог написать нормальный перехватчик повреждений отдельных селекшенов, чтобы аккумулировать их с самого старта миссии и способа получить их от ACE не нашел. Если есть необходимость добавить поддержку ТДА для новой техники, пишите в скайп или разбирайтесь сами - требуется только добавить новый класс в список. Ссылка |
› Вторник
› 01.03.2016
› 12:48
› Сообщение #
Может кто нибудь сделать данный скрипт, как скрип LowGear?
А то этот скрипт, будет работать только если у игрока изначальный спавн в технике, иначе, не работает. LowGear, работает в любом случае, будь то спавн в технике или игроком, при этом максимально прост в активации, как в сингле, так и в МП. Попробовал сам, но ничего хорошего в итоге не получилось Добавлено (01.03.2016, 11:41) Код if (!(isDedicated)) then { waitUntil {!isNull player}; waitUntil {player == player}; [] execVM "TSSInit.sqf"; }; TSSinit.sqf Код debugging = false; if (isDedicated) exitWith {}; RIPTSSON = false; RIP_TSSACTON = nil; RIP_TSSACTOFF = nil; _currentVeh = vehicle player; while {true} do { sleep 0.003; _veh = vehicle player; if ((player == (driver _veh)) && (canMove _veh)) then { if (_veh isKindOf "Tank" || _veh isKindOf "BTR90_Base") then { if (!RIPTSSON && (isNil "RIP_TSSACTON")) then { _tank = vehicle player; _tank setVariable ["PPO", 3, true]; //установка количества срабатываний противопожарного оборудования _tank setVariable ["fires", 0, true]; //счетчик пожаров _tank setVariable ["fire", false, true]; _tank setVariable ["timer", 0, true]; //счетчик излишков топлива в выпускном тракте _tank setVariable ["fireTime", 0, true]; //счетчик времени пожара _tank setVariable ["criticalFireTime", 0, true]; //счетчик времени финального пожара _tank setVariable ["TDA", false, true]; //триггер включения системы _tank setVariable ["motorDamage", 0, true]; //повреждения двигателя _tank setVariable ["TDAstop", false, true]; //флажок выключения ТДА _tank setVariable ["criticalFireCoordinates",[0,0,0],true]; //координаты места финального пожара _tank setVariable ["inflictedMotorDamage",0,true]; //нанесенные двигателю повреждения, перехваченные через eventHandler RIP_TSSACTON = _veh addAction [ "start TSS", "TSS.sqf", [_tank], 0, false, true, "teamSwitchPrev", "(driver _target == player) && !(_target getVariable 'TDA')"]; RIP_TSSACTOFF = _veh addAction [ "stop TSS", "TSSstop.sqf", [], 0, false, true, "teamSwitchPrev", "(driver _target == player) && (_target getVariable 'TDA')"]; _currentVeh = _veh; if (!alive _veh) then { _veh removeAction RIP_TSSACTON; _veh removeAction RIP_TSSACTOFF; RIP_TSSACTON = nil; RIP_TSSACTOFF = nil; }; }; }; }; if ((isEngineOn _veh) && !(_veh getVariable "TDA")) then {_veh setVariable ["timer", (_veh getVariable "timer") - 30, true]}; if !isEngineOn _veh then {_veh setVariable ["timer", (_veh getVariable "timer") - 3, true]}; if ((_veh getVariable "timer") <= 0) then {_veh setVariable ["timer", 0, true]}; sleep 0.003; }; if debugging then {hintSilent "init finished";}; Добавлено (01.03.2016, 11:44) Добавлено (01.03.2016, 12:43) Код debugging = false; if (isDedicated) exitWith {}; RIPTSSON = false; RIP_TSSACTON = nil; RIP_TSSACTOFF = nil; _currentVeh = vehicle player; while {true} do { _veh = vehicle player; if ((player == (driver _veh)) && (canMove _veh)) then { if (_veh isKindOf "Tank" || _veh isKindOf "BTR90_Base") then { _tank = _veh; _class = configName (inheritsFrom (configFile >> "CfgVehicles" >> typeOf (_tank))); switch (_class) do { case "Tank" : {_class = typeOf _tank}; case "Tracked_APC" : {_class = typeOf _tank}; }; _TSSvehIndex = ["T72_Base","T55_Base","T72_CDF","ACE_T72B_Base","T72_Gue","T72_RU","T90","T72_INS","BMP2_Gue","rhs_bmp_base","rhs_bmp1p_msv","rhs_bmp1_msv","rhs_bmp1d_msv","rhs_bmp1k_msv","rhs_bmp2d_msv","rhs_bmp2e_msv","rhs_bmp2k_msv","rhs_bmp2_msv","BMP2_HQ_Base","BMP2_Base","BMP2_INS","ACE_BMP2_RU","BMP2E_RU","BMP2_CDF","BMP2_HQ_INS","BMP2_HQ_CDF","BMP3","rhs_bmd1_base","rhs_bmd2","rhs_bmd2k","rhs_bmd2_base","M1A1_base","M1A1","ACE_M1A1HA_TUSK","ACE_M1A1HC_TUSK","ACE_M1A1HA_TUSK_CSAMM","ACE_M1A1HC_TUSK_CSAMM","M1A2_TUSK_MG_base","M1A1_US_DES_EP1","M1A2_TUSK_MG","AAV"]; if ( _TSSvehIndex find _class > 0 ) then { if (!RIPTSSON && (isNil "RIP_TSSACTON")) then { _tank = _veh; _tank setVariable ["PPO", 3, true]; //установка количества срабатываний противопожарного оборудования _tank setVariable ["fires", 0, true]; //счетчик пожаров _tank setVariable ["fire", false, true]; _tank setVariable ["timer", 0, true]; //счетчик излишков топлива в выпускном тракте _tank setVariable ["fireTime", 0, true]; //счетчик времени пожара _tank setVariable ["criticalFireTime", 0, true]; //счетчик времени финального пожара _tank setVariable ["TDA", false, true]; //триггер включения системы _tank setVariable ["motorDamage", 0, true]; //повреждения двигателя _tank setVariable ["TDAstop", false, true]; //флажок выключения ТДА _tank setVariable ["criticalFireCoordinates",[0,0,0],true]; //координаты места финального пожара _tank setVariable ["inflictedMotorDamage",0,true]; //нанесенные двигателю повреждения, перехваченные через eventHandler RIP_TSSACTON = _veh addAction [ "start TSS", "TSS.sqf", [_tank], 0, false, true, "teamSwitchPrev", "(driver _target == player) && !(_target getVariable 'TDA')"]; RIP_TSSACTOFF = _veh addAction [ "stop TSS", "TSSstop.sqf", [], 0, false, true, "teamSwitchPrev", "(driver _target == player) && (_target getVariable 'TDA')"]; _currentVeh = _veh; }; }; }; }; if ((player != (driver _currentVeh)) && !(isNil "RIP_TSSACTON")) then { _veh removeAction RIP_TSSACTON; _veh removeAction RIP_TSSACTOFF; RIP_TSSACTON = nil; RIP_TSSACTOFF = nil; }; }; while {true} do { if ((isEngineOn _veh) && !(_veh getVariable "TDA")) then {_veh setVariable ["timer", (_veh getVariable "timer") - 30, true]}; if !isEngineOn _veh then {_veh setVariable ["timer", (_veh getVariable "timer") - 3, true]}; if ((_veh getVariable "timer") <= 0) then {_veh setVariable ["timer", 0, true]}; sleep 0.003; }; Добавлено (01.03.2016, 12:48) |
| |||
| |||
Чат сайта |