Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- redone by featherwinglove 190301
- local TICKS = 3
- --local DEBUG = true
- -- local ref_max, ref_regen = {},{}
- local pop = {index=1,count=1}
- local run_penalty, mining_rate, drain_rate
- local function maketables()
- if not global.ref_max then
- global.ref_max = {}
- end
- if not global.ref_regen then
- global.ref_regen = {}
- end
- for _,e in pairs(game.entity_prototypes) do
- if e.type=="player" then
- global.ref_max[e.name] = e.max_health
- global.ref_regen[e.name] = e.healing_per_tick * TICKS
- end
- end
- run_penalty = settings.global["stamina-run-penalty"].value
- mining_rate = settings.global["stamina-mine-rate"].value
- drain_rate = 1/settings.startup["stamina-craft-effective-rate"].value - 1
- end
- local function load_settings()
- run_penalty = settings.global["stamina-run-penalty"].value
- mining_rate = settings.global["stamina-mine-rate"].value
- drain_rate = 1/settings.startup["stamina-craft-effective-rate"].value - 1
- end
- script.on_init(maketables)
- script.on_load(load_settings)
- script.on_event(defines.events.on_runtime_mod_setting_changed, load_settings)
- script.on_nth_tick(TICKS, function(event)
- local mans, drain, my_max, my_regen
- for _,p in pairs(game.players) do
- mans = p.character
- if mans then
- my_max = global.ref_max[mans.name] + p.character_health_bonus + p.force.character_health_bonus
- my_regen = global.ref_regen[mans.name]
- drain = p.mining_state.mining and mining_rate*my_regen or 0
- if p.crafting_queue_size > 0 then drain = drain + my_regen end
- if drain > 0 then
- drain = p.in_combat and drain*drain_rate or drain*drain_rate + my_regen
- -- if DEBUG then p.print(string.format("%f/%f (%f-%f)",mans.health,my_max,global.ref_regen[mans.name],drain)) end
- if mans.health < drain then
- mans.die()
- -- if p.mod_settings["stamina-alert-level"].value>0 then p.zoom = 1 end
- else
- mans.health = mans.health - drain
- drain = mans.health/ (my_max* (p.mod_settings["stamina-alert-level"].value))
- if drain<1 then
- if p.crafting_queue_size > 0 and p.mod_settings["stamina-alert-level-cancel"].value then
- mans.cancel_crafting(pop)
- p.print{"stamina-text.canceled-craft"}
- -- p.play_sound{path="utility/cannot_build",volume_modifier=1}
- else
- p.print{"stamina-text.stamina-danger"}
- if event.tick%18==0 then p.play_sound{path="utility/alert_damage",volume_modifier=1-drain*drain/2} end
- end
- --[[
- p.play_sound{path="utility/alert_damage",volume_modifier=1-drain*drain/2}
- p.zoom = 1/(drain*.9921875+.0078125)
- --]]
- end
- end
- else
- if mans.health<my_max and p.walking_state.walking and not p.in_combat then mans.health = mans.health - my_regen * run_penalty end
- end
- end
- end
- end)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement