Various Changes; Updated and Added Mods
This commit is contained in:
@@ -0,0 +1,141 @@
|
||||
|
||||
local tmr_upd
|
||||
-- local test_sound = sound_object("device\\radio_call")
|
||||
local stats_level = {0.20, 0.30, 0.40, 0.55, 0.70, 0.85}
|
||||
local player_hunger_level = 0
|
||||
local player_thirst_level = 0
|
||||
local player_sleepy_level = 0
|
||||
local play_hungry = false
|
||||
local play_thirst = false
|
||||
local play_sleepy = false
|
||||
local sound_stat = {}
|
||||
|
||||
function on_game_start()
|
||||
RegisterScriptCallback("actor_on_update", actor_on_update)
|
||||
for i = 1, #stats_level do
|
||||
sound_stat["actor\\hts_hunger_" .. i] = sound_object("actor\\hts_hunger_" .. i)
|
||||
sound_stat["actor\\hts_thirst_" .. i] = sound_object("actor\\hts_thirst_" .. i)
|
||||
sound_stat["actor\\hts_yawn_" .. i] = sound_object("actor\\hts_yawn_" .. i)
|
||||
end
|
||||
end
|
||||
|
||||
local function get_stat_change(level, stat)
|
||||
local did_decrease = false
|
||||
-- i = 0; i <= 5; ++i
|
||||
-- j = 5; j >= 0; --j
|
||||
for i = 0, #stats_level - 1 do
|
||||
local j = #stats_level - i
|
||||
if level == j and stat <= stats_level[j] then
|
||||
level = j - 1
|
||||
did_decrease = true
|
||||
end
|
||||
end
|
||||
|
||||
-- i = 1; i <= 6; ++i
|
||||
for i = 1, #stats_level do
|
||||
if stat > stats_level[i] and level == i - 1 then level = i end
|
||||
end
|
||||
|
||||
return level, did_decrease
|
||||
end
|
||||
|
||||
local function play_stat_sound(sound)
|
||||
sound_stat[sound]:play(db.actor, 0, sound_object.s2d)
|
||||
sound_stat[sound].volume = 1.0
|
||||
-- sound_stat.volume = 1.0 - player_thirst_level / 12.0
|
||||
-- news_manager.send_tip(db.actor, string.format("%s Debug %s", sound, sound_stat[sound]:playing()), 0, nil, 1500)
|
||||
end
|
||||
|
||||
function actor_on_update()
|
||||
local tg = time_global()
|
||||
if (tmr_upd and tg < tmr_upd) then return end
|
||||
tmr_upd = tg + 1000
|
||||
|
||||
local satiety = get_satiety_val()
|
||||
player_hunger_level, play_hungry = get_stat_change(player_hunger_level, satiety)
|
||||
local thirst = get_thirst_val()
|
||||
player_thirst_level, play_thirst = get_stat_change(player_thirst_level, thirst)
|
||||
local sleep = get_sleep_val()
|
||||
player_sleepy_level, play_sleepy = get_stat_change(player_sleepy_level, sleep)
|
||||
|
||||
if play_hungry then
|
||||
play_stat_sound(string.format("actor\\hts_hunger_%i", player_hunger_level + 1))
|
||||
play_hungry = false
|
||||
return
|
||||
end
|
||||
|
||||
if play_thirst then
|
||||
play_stat_sound(string.format("actor\\hts_thirst_%i", player_thirst_level + 1))
|
||||
play_thirst = false
|
||||
return
|
||||
end
|
||||
|
||||
if play_sleepy then
|
||||
play_stat_sound(string.format("actor\\hts_yawn_%i", player_sleepy_level + 1))
|
||||
play_sleepy = false
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
function get_local_val(path, script_name, str_to_find)
|
||||
if _G[script_name] then
|
||||
|
||||
if not file_exists(path) then
|
||||
return
|
||||
end
|
||||
|
||||
for line in io.lines(path) do
|
||||
if string.find(line, str_to_find) then
|
||||
_,_, loc_val = string.find(line, "start_blur_4%s*=%s*(%d+)")
|
||||
if type(tonumber(loc_val)) == "number" then
|
||||
return loc_val
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
function file_exists(name)
|
||||
local f = io.open(name, "r")
|
||||
if f ~= nil then
|
||||
io.close(f)
|
||||
return true
|
||||
else
|
||||
return false
|
||||
end
|
||||
end
|
||||
|
||||
function get_red_thirst()
|
||||
local max_thirst = get_local_val([[gamedata\scripts\actor_status_thirst.script]], "actor_status_thirst", "local start_blur_4") or 5760
|
||||
return max_thirst
|
||||
end
|
||||
|
||||
function get_red_sleep()
|
||||
local max_sleep = get_local_val([[gamedata\scripts\actor_status_sleep.script]], "actor_status_sleep", "local start_blur_4") or 8750
|
||||
return max_sleep
|
||||
end
|
||||
|
||||
function get_satiety_val()
|
||||
local conditions = db.actor:cast_Actor():conditions()
|
||||
local satiety = conditions:GetSatiety()
|
||||
local red_icon_satiety = conditions:SatietyCritical() * 0.5
|
||||
satiety = normalize(satiety, red_icon_satiety, 1)
|
||||
return satiety
|
||||
end
|
||||
|
||||
function get_thirst_val()
|
||||
local thirst = 1 - actor_status_thirst.get_water_deprivation()
|
||||
local red_icon_thirst = get_red_thirst()
|
||||
red_icon_thirst = 1 - normalize(red_icon_thirst, 0, 10000)
|
||||
thirst = normalize(thirst, red_icon_thirst, 1)
|
||||
return thirst
|
||||
end
|
||||
|
||||
function get_sleep_val()
|
||||
local sleep = 1 - actor_status_sleep.get_sleep_deprivation()
|
||||
local red_icon_sleep = get_red_sleep()
|
||||
red_icon_sleep = 1 - normalize(red_icon_sleep, 0, 10000)
|
||||
sleep = normalize(sleep, red_icon_sleep, 1)
|
||||
return sleep
|
||||
end
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user