Они "садятся" при каждой перезагрузке или каждом заходе на локацию (с некоторой вероятностью).
Ковыряй torch_brock() или пляши оттуда, чтобы понять, как фонарь разряжается и как ломается
Вспомнил про этот пост и решил проверить, так ли всё обстоит на самом деле. Итак, смотрим, как выглядит вызов ф-ии поломки — torch_brock(true,true).
Смотрим саму функцию:
function torch_brock(switcher,sw)
if torch_id and (params.get_torch_on_off(torch_id)==1 or switcher) then
if lua_random()<0.16 and not sw then
local r_t=(r_old*(lua_random(3,10))/10)
params.set_torch_param(torch_id,r_t,r_t,r_t,mode_switch)
local time_flash=lua_random(1,3)
timers.start_timer("t_torch_flash",time_flash,"sak.torch_brock()")
return
end
r_old=r_old+(mode_switch-1)*0.1
local r_new,g_new=r_old,(r_old-0.07)
if r_new>0.11 and not sw then
r_new = r_new-(0.007*(mode_switch*2))
g_new = g_new-(0.007*(mode_switch*2))
end
params.set_torch_param(torch_id,r_new,g_new,g_new,mode_switch)
r_old=r_new-(mode_switch-1)*0.1
nlc_vars.light_torch = r_old
end
if db.actor:has_info("pda_is_broken") and flag_sah==false then
out_many_pda_broken()
end
timers.start_timer("t_torch_brock",31,"sak.torch_brock()")
end
Разбираем, что тут у нас.
Первое условие: if torch_id and (params.get_torch_on_off(torch_id)==1 or switcher) then ...
Если получен корректный айди фонарика и фонарик включен в данный момент или первый переданный в ф-ию аргумент не false/nil. Проверку прошли, идём дальше.
Второе условие: if lua_random()<0.16 and not sw then ...
ГПСЧ выдал значение < 0.16 и при этом второй аргумент, переданный в ф-ию не true или отсутствует вовсе. Проверка не пройдена, блок не выполняется. К слову, он отвечает за "мигание" фонарика, поломка идёт не здесь. Так что двигаемся ещё ниже.
Тут нас интересует строка: r_old=r_old+(mode_switch-1)*0.1 -- заряд +0 или +0.1, в зависимости от текущего режима фонарика.
Третье условие: if r_new>0.11 and not sw then ...
Аналогично второму, проверка не выполняется. Именно в этом блоке происходит снижение заряда.
Ну и далее обратная процедура: r_old=r_new-(mode_switch-1)*0.1 -- заряд -0 или -0.1, в зависимости от текущего режима фонарика.
И "запоминаем" результат: nlc_vars.light_torch = r_old.
Под конец запускаем таймер, который при срабатывании вызывает эту же ф-ию, но уже без аргументов. Если фонарик в этот момент включен, то вот тогда уже все 3 проверки имеют шанс быть пройдены и заряд в этом случае уменьшится.
Вот так и рождаются мифы.
_________________________________________________________________________________________________________