mirror of
https://github.com/t-affeldt/climate_api.git
synced 2025-07-06 02:10:35 +02:00
Fix bugs regarding disconnected players and unsanitized command input
This commit is contained in:
19
lib/main.lua
19
lib/main.lua
@ -1,6 +1,15 @@
|
||||
local GSCYCLE = 0.03 * climate_mod.settings.tick_speed -- only process event loop after this amount of time
|
||||
local WORLD_CYCLE = 15.00 * climate_mod.settings.tick_speed -- only update global environment influences after this amount of time
|
||||
|
||||
local function is_connected(playername)
|
||||
local connected = minetest.get_connected_players()
|
||||
for _, player in ipairs(connected) do
|
||||
local name = player:get_player_name()
|
||||
if playername == name then return true end
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
local gs_timer = 0
|
||||
local world_timer = 0
|
||||
minetest.register_globalstep(function(dtime)
|
||||
@ -15,7 +24,17 @@ minetest.register_globalstep(function(dtime)
|
||||
climate_mod.global_environment = climate_mod.trigger.get_global_environment()
|
||||
end
|
||||
|
||||
|
||||
local previous_effects = table.copy(climate_mod.current_effects)
|
||||
-- skip weather changes for offline players
|
||||
for effect, data in pairs(previous_effects) do
|
||||
for playername, _ in pairs(data) do
|
||||
if not is_connected(playername) then
|
||||
previous_effects[effect][playername] = nil
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local current_effects = climate_mod.trigger.get_active_effects()
|
||||
|
||||
for name, effect in pairs(climate_mod.effects) do
|
||||
|
Reference in New Issue
Block a user