mirror of
https://git.minetest.land/VoxeLibre/VoxeLibre.git
synced 2024-11-25 12:01:06 +01:00
Change from table indirection to getter/setter functions for dynamically updating local variables
This commit is contained in:
parent
26b16b412e
commit
49bf10b6c7
15 changed files with 160 additions and 71 deletions
|
@ -34,17 +34,29 @@ mcl_damage = {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
local damage_enabled = vl_tuning.setting("damage_enabled", "bool",{
|
local damage_enabled = true
|
||||||
default = minetest.settings:get_bool("enabled_damage",true)
|
vl_tuning.setting("damage_enabled", "bool",{
|
||||||
|
default = minetest.settings:get_bool("enabled_damage",true),
|
||||||
|
set = function(val) damage_enabled = val end,
|
||||||
|
get = function() return damage_enabled end,
|
||||||
})
|
})
|
||||||
local fall_damage_enabled = vl_tuning.setting("gamerule:fallDamage", "bool", {
|
local fall_damage_enabled = true
|
||||||
default = true
|
vl_tuning.setting("gamerule:fallDamage", "bool", {
|
||||||
|
default = true,
|
||||||
|
set = function(val) fall_damage_enabled = val end,
|
||||||
|
get = function() return fall_damage_enabled end,
|
||||||
})
|
})
|
||||||
local drowning_damage_enabled = vl_tuning.setting("gamerule:drowningDamage", "bool", {
|
local drowning_damage_enabled = true
|
||||||
default = true
|
vl_tuning.setting("gamerule:drowningDamage", "bool", {
|
||||||
|
default = true,
|
||||||
|
set = function(val) drowning_damage_enabled = val end,
|
||||||
|
get = function() return drowning_damage_enabled end,
|
||||||
})
|
})
|
||||||
local fire_damage_enabled = vl_tuning.setting("gamerule:fireDamage", "bool", {
|
local fire_damage_enabled
|
||||||
default = true
|
vl_tuning.setting("gamerule:fireDamage", "bool", {
|
||||||
|
default = true,
|
||||||
|
set = function(val) fire_damage_enabled = val end,
|
||||||
|
get = function() return fire_damage_enabled end,
|
||||||
})
|
})
|
||||||
|
|
||||||
function mcl_damage.register_modifier(func, priority)
|
function mcl_damage.register_modifier(func, priority)
|
||||||
|
@ -153,7 +165,7 @@ function mcl_damage.register_type(name, def)
|
||||||
end
|
end
|
||||||
|
|
||||||
minetest.register_on_player_hpchange(function(player, hp_change, mt_reason)
|
minetest.register_on_player_hpchange(function(player, hp_change, mt_reason)
|
||||||
if not damage_enabled[1] then return 0 end
|
if not damage_enabled then return 0 end
|
||||||
if hp_change < 0 then
|
if hp_change < 0 then
|
||||||
if player:get_hp() <= 0 then
|
if player:get_hp() <= 0 then
|
||||||
return 0
|
return 0
|
||||||
|
@ -165,11 +177,11 @@ end, true)
|
||||||
|
|
||||||
minetest.register_on_player_hpchange(function(player, hp_change, mt_reason)
|
minetest.register_on_player_hpchange(function(player, hp_change, mt_reason)
|
||||||
-- Check if damage is enabled
|
-- Check if damage is enabled
|
||||||
if not damage_enabled[1] then return 0 end
|
if not damage_enabled then return 0 end
|
||||||
local mcl_reason = mcl_damage.from_mt(mt_reason)
|
local mcl_reason = mcl_damage.from_mt(mt_reason)
|
||||||
if not fire_damage_enabled[1] and mcl_reason.type == "fire" then return 0 end
|
if not fire_damage_enabled and mcl_reason.type == "fire" then return 0 end
|
||||||
--if not drowning_damage_enabled[1] and mcl_reason.type == "drown" then return 0 end
|
--if not drowning_damage_enabled and mcl_reason.type == "drown" then return 0 end
|
||||||
--if not fall_damage_enabled[1] and mcl_reason.type == "fall" then return 0 end
|
--if not fall_damage_enabled and mcl_reason.type == "fall" then return 0 end
|
||||||
|
|
||||||
--minetest.log("action", "mcl_reason = "..dump(mcl_reason)..", mt_reason = "..dump(mt_reason))
|
--minetest.log("action", "mcl_reason = "..dump(mcl_reason)..", mt_reason = "..dump(mt_reason))
|
||||||
|
|
||||||
|
|
|
@ -5,6 +5,8 @@ local storage = minetest.get_mod_storage()
|
||||||
local mod = {}
|
local mod = {}
|
||||||
vl_tuning = mod
|
vl_tuning = mod
|
||||||
|
|
||||||
|
local DEBUG = false
|
||||||
|
|
||||||
-- All registered tunable parameters
|
-- All registered tunable parameters
|
||||||
local tunables = {}
|
local tunables = {}
|
||||||
vl_tuning.registered_settings = tunables
|
vl_tuning.registered_settings = tunables
|
||||||
|
@ -35,12 +37,14 @@ function tunable_class:set(value, no_hook)
|
||||||
local new_value = self_type.from_string(value)
|
local new_value = self_type.from_string(value)
|
||||||
if new_value == nil then new_value = self.default end
|
if new_value == nil then new_value = self.default end
|
||||||
|
|
||||||
self[1] = new_value
|
self.setter(new_value)
|
||||||
else
|
else
|
||||||
self[1] = value
|
self.setter(value)
|
||||||
end
|
end
|
||||||
|
|
||||||
minetest.log("action", "[vl_tuning] Set "..self.setting.." to "..dump(self[1]))
|
if DEBUG then
|
||||||
|
minetest.log("action", "[vl_tuning] Set "..self.setting.." to "..dump(self.getter()))
|
||||||
|
end
|
||||||
|
|
||||||
-- Call on_change hook
|
-- Call on_change hook
|
||||||
if not no_hook then
|
if not no_hook then
|
||||||
|
@ -49,10 +53,10 @@ function tunable_class:set(value, no_hook)
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Persist value
|
-- Persist value
|
||||||
storage:set_string(self.setting,self_type.to_string(self[1]))
|
storage:set_string(self.setting,self_type.to_string(self.getter()))
|
||||||
end
|
end
|
||||||
function tunable_class:get_string()
|
function tunable_class:get_string()
|
||||||
return self.type.to_string(self[1])
|
return self.type.to_string(self.getter())
|
||||||
end
|
end
|
||||||
|
|
||||||
function mod.setting(setting, setting_type, def )
|
function mod.setting(setting, setting_type, def )
|
||||||
|
@ -61,21 +65,29 @@ function mod.setting(setting, setting_type, def )
|
||||||
if tunable then return tunable end
|
if tunable then return tunable end
|
||||||
assert(setting_type)
|
assert(setting_type)
|
||||||
assert(def)
|
assert(def)
|
||||||
|
assert(type(def.set) == "function", "Tunable requires set method")
|
||||||
|
assert(type(def.get) == "function", "Tunable required get method")
|
||||||
|
|
||||||
-- Setup the tunable data
|
-- Setup the tunable data
|
||||||
tunable = table.copy(def)
|
tunable = table.copy(def)
|
||||||
tunable.setting = setting
|
tunable.setting = setting
|
||||||
|
tunable.setter = def.set
|
||||||
|
tunable.getter = def.get
|
||||||
tunable.type = tunable_types[setting_type]
|
tunable.type = tunable_types[setting_type]
|
||||||
tunable.setting_type = setting_type
|
tunable.setting_type = setting_type
|
||||||
tunable[1] = tunable.default
|
if tunable.default then
|
||||||
|
tunable.set(tunable.default)
|
||||||
|
end
|
||||||
setmetatable(tunable, {__index=tunable_class})
|
setmetatable(tunable, {__index=tunable_class})
|
||||||
|
|
||||||
-- Load the setting value from mod storage
|
-- Load the setting value from mod storage
|
||||||
local setting_value = storage:get_string(setting)
|
local setting_value = storage:get_string(setting)
|
||||||
if setting_value and setting_value ~= "" then
|
if setting_value and setting_value ~= "" then
|
||||||
tunable:set(setting_value, true)
|
tunable:set(setting_value, true)
|
||||||
|
if DEBUG then
|
||||||
minetest.log("action", "[vl_tuning] Loading "..setting.." = "..dump(setting_value).." ("..dump(tunable[1])..")")
|
minetest.log("action", "[vl_tuning] Loading "..setting.." = "..dump(setting_value).." ("..dump(tunable[1])..")")
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
||||||
-- Add to the list of all available settings
|
-- Add to the list of all available settings
|
||||||
tunables[setting] = tunable
|
tunables[setting] = tunable
|
||||||
|
@ -104,7 +116,9 @@ minetest.register_chatcommand("set_setting", {
|
||||||
return false, S("Setting @1 doesn't exist", params[1])
|
return false, S("Setting @1 doesn't exist", params[1])
|
||||||
end
|
end
|
||||||
|
|
||||||
|
if DEBUG then
|
||||||
minetest.log("action", "[vl_tuning] "..name.." set ".. params[1] .." to "..params[2])
|
minetest.log("action", "[vl_tuning] "..name.." set ".. params[1] .." to "..params[2])
|
||||||
|
end
|
||||||
tunable:set(params[2])
|
tunable:set(params[2])
|
||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
|
@ -145,7 +159,9 @@ minetest.register_chatcommand("gamerule", {
|
||||||
|
|
||||||
local value = params[2]
|
local value = params[2]
|
||||||
if value then
|
if value then
|
||||||
|
if DEBUG then
|
||||||
minetest.log("action", "[vl_tuning] Setting game rule "..params[1].." to "..params[2])
|
minetest.log("action", "[vl_tuning] Setting game rule "..params[1].." to "..params[2])
|
||||||
|
end
|
||||||
tunable:set(params[2])
|
tunable:set(params[2])
|
||||||
return true
|
return true
|
||||||
else
|
else
|
||||||
|
@ -156,3 +172,9 @@ minetest.register_chatcommand("gamerule", {
|
||||||
|
|
||||||
dofile(modpath.."/settings.lua")
|
dofile(modpath.."/settings.lua")
|
||||||
dofile(modpath.."/gui.lua")
|
dofile(modpath.."/gui.lua")
|
||||||
|
|
||||||
|
mod.setting("debug:vl_tuning:report_value_changes", "bool", {
|
||||||
|
default = false,
|
||||||
|
set = function(val) DEBUG = val end,
|
||||||
|
get = function() return DEBUG end,
|
||||||
|
})
|
||||||
|
|
|
@ -2,11 +2,17 @@ local modname = minetest.get_current_modname()
|
||||||
local S = minetest.get_translator(modname)
|
local S = minetest.get_translator(modname)
|
||||||
local mod = vl_tuning
|
local mod = vl_tuning
|
||||||
|
|
||||||
mod.keep_inventory = vl_tuning.setting("gamerule:keepInventory", "bool", {
|
mod.keep_inventory = {}
|
||||||
|
vl_tuning.setting("gamerule:keepInventory", "bool", {
|
||||||
default = minetest.settings:get_bool("mcl_keepInventory", false),
|
default = minetest.settings:get_bool("mcl_keepInventory", false),
|
||||||
|
set = function(val) mod.keep_inventory[1] = val end,
|
||||||
|
get = function() return mod.keep_inventory[1] end,
|
||||||
})
|
})
|
||||||
mod.respawn_blocks_explode = vl_tuning.setting("gamerule:respawnBlocksExplode", "bool", {
|
mod.respawn_blocks_explode = {}
|
||||||
|
vl_tuning.setting("gamerule:respawnBlocksExplode", "bool", {
|
||||||
description = S("Prevents beds/respawn anchors from exploding in other dimensions."),
|
description = S("Prevents beds/respawn anchors from exploding in other dimensions."),
|
||||||
default = true,
|
default = true,
|
||||||
|
set = function(val) mod.respawn_blocks_explode[1] = val end,
|
||||||
|
get = function() return mod.respawn_blocks_explode[1] end,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
|
@ -4,13 +4,19 @@ local math, vector, minetest, mcl_mobs = math, vector, minetest, mcl_mobs
|
||||||
local mob_class = mcl_mobs.mob_class
|
local mob_class = mcl_mobs.mob_class
|
||||||
local validate_vector = mcl_util.validate_vector
|
local validate_vector = mcl_util.validate_vector
|
||||||
|
|
||||||
local gamerule_maxEntityCramming = vl_tuning.setting("gamerule:maxEntityCramming", "number", {
|
local gamerule_maxEntityCramming = 24
|
||||||
|
vl_tuning.setting("gamerule:maxEntityCramming", "number", {
|
||||||
description = S("The maximum number of pushable entities a mob or player can push, before taking 6♥♥♥ entity cramming damage per half-second."),
|
description = S("The maximum number of pushable entities a mob or player can push, before taking 6♥♥♥ entity cramming damage per half-second."),
|
||||||
default = 24,
|
default = 24,
|
||||||
|
set = function(val) gamerule_maxEntityCramming = val end,
|
||||||
|
get = function() return gamerule_maxEntityCramming end,
|
||||||
})
|
})
|
||||||
local gamerule_doMobLoot = vl_tuning.setting("gamerule:doMobLoot", "bool", {
|
local gamerule_doMobLoot
|
||||||
|
vl_tuning.setting("gamerule:doMobLoot", "bool", {
|
||||||
description = S("Whether mobs should drop items and experience orbs."),
|
description = S("Whether mobs should drop items and experience orbs."),
|
||||||
default = true,
|
default = true,
|
||||||
|
set = function(val) gamerule_doMobLoot = val end,
|
||||||
|
get = function() return gamerule_doMobLoot end,
|
||||||
})
|
})
|
||||||
|
|
||||||
local CRAMMING_DAMAGE = 3
|
local CRAMMING_DAMAGE = 3
|
||||||
|
@ -482,7 +488,7 @@ function mob_class:check_for_death(cause, cmi_cause)
|
||||||
-- TODO other env damage shouldn't drop xp
|
-- TODO other env damage shouldn't drop xp
|
||||||
-- "rain", "water", "drowning", "suffocation"
|
-- "rain", "water", "drowning", "suffocation"
|
||||||
|
|
||||||
if not gamerule_doMobLoot[1] then return end
|
if not gamerule_doMobLoot then return end
|
||||||
|
|
||||||
-- dropped cooked item if mob died in fire or lava
|
-- dropped cooked item if mob died in fire or lava
|
||||||
if cause == "lava" or cause == "fire" then
|
if cause == "lava" or cause == "fire" then
|
||||||
|
@ -912,7 +918,7 @@ function mob_class:check_entity_cramming()
|
||||||
local l = o:get_luaentity()
|
local l = o:get_luaentity()
|
||||||
if l and l.is_mob and l.health > 0 then table.insert(mobs,l) end
|
if l and l.is_mob and l.health > 0 then table.insert(mobs,l) end
|
||||||
end
|
end
|
||||||
local clear = #mobs < gamerule_maxEntityCramming[1]
|
local clear = #mobs < gamerule_maxEntityCramming
|
||||||
local ncram = {}
|
local ncram = {}
|
||||||
for _,l in pairs(mobs) do
|
for _,l in pairs(mobs) do
|
||||||
if l then
|
if l then
|
||||||
|
@ -926,7 +932,7 @@ function mob_class:check_entity_cramming()
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
for i,l in pairs(ncram) do
|
for i,l in pairs(ncram) do
|
||||||
if i > gamerule_maxEntityCramming[1] then
|
if i > gamerule_maxEntityCramming then
|
||||||
l.cram = true
|
l.cram = true
|
||||||
else
|
else
|
||||||
l.cram = nil
|
l.cram = nil
|
||||||
|
|
|
@ -3,8 +3,11 @@ local S = minetest.get_translator("mcl_mobs")
|
||||||
local math, vector, minetest, mcl_mobs = math, vector, minetest, mcl_mobs
|
local math, vector, minetest, mcl_mobs = math, vector, minetest, mcl_mobs
|
||||||
local mob_class = mcl_mobs.mob_class
|
local mob_class = mcl_mobs.mob_class
|
||||||
|
|
||||||
local gamerule_doMobSpawning = vl_tuning.setting("gamerule:doMobSpawning", "bool", {
|
local gamerule_doMobSpawning = true
|
||||||
description = S("Whether mobs should spawn naturally, or via global spawning logic, such as for cats, phantoms, patrols, wandering traders, or zombie sieges. Does not affect special spawning attempts, like monster spawners, raids, or iron golems."), default = true
|
vl_tuning.setting("gamerule:doMobSpawning", "bool", {
|
||||||
|
description = S("Whether mobs should spawn naturally, or via global spawning logic, such as for cats, phantoms, patrols, wandering traders, or zombie sieges. Does not affect special spawning attempts, like monster spawners, raids, or iron golems."), default = true,
|
||||||
|
set = function(val) gamerule_doMobSpawning = val end,
|
||||||
|
get = function() return gamerule_doMobSpawning end,
|
||||||
})
|
})
|
||||||
|
|
||||||
local modern_lighting = minetest.settings:get_bool("mcl_mobs_modern_lighting", true)
|
local modern_lighting = minetest.settings:get_bool("mcl_mobs_modern_lighting", true)
|
||||||
|
@ -1013,7 +1016,7 @@ if mobs_spawn then
|
||||||
|
|
||||||
local timer = 0
|
local timer = 0
|
||||||
minetest.register_globalstep(function(dtime)
|
minetest.register_globalstep(function(dtime)
|
||||||
if not gamerule_doMobSpawning[1] then return end
|
if not gamerule_doMobSpawning then return end
|
||||||
|
|
||||||
timer = timer + dtime
|
timer = timer + dtime
|
||||||
if timer < WAIT_FOR_SPAWN_ATTEMPT then return end
|
if timer < WAIT_FOR_SPAWN_ATTEMPT then return end
|
||||||
|
|
|
@ -2,8 +2,11 @@
|
||||||
mcl_raids = {}
|
mcl_raids = {}
|
||||||
local S = minetest.get_translator(minetest.get_current_modname())
|
local S = minetest.get_translator(minetest.get_current_modname())
|
||||||
|
|
||||||
local gamerule_disableRaids = vl_tuning.setting("gamerule:disableRaids", "bool", {
|
local gamerule_disableRaids = false
|
||||||
|
vl_tuning.setting("gamerule:disableRaids", "bool", {
|
||||||
description = S("Whether raids are disabled"), default = false,
|
description = S("Whether raids are disabled"), default = false,
|
||||||
|
set = function(val) gamerule_disableRaids = val end,
|
||||||
|
get = function() return gamerule_disableRaids end,
|
||||||
})
|
})
|
||||||
|
|
||||||
-- Define the amount of illagers to spawn each wave.
|
-- Define the amount of illagers to spawn each wave.
|
||||||
|
@ -295,7 +298,7 @@ mcl_events.register_event("raid",{
|
||||||
exclusive_to_area = 128,
|
exclusive_to_area = 128,
|
||||||
enable_bossbar = true,
|
enable_bossbar = true,
|
||||||
cond_start = function(self)
|
cond_start = function(self)
|
||||||
if gamerule_disableRaids[1] then return false end
|
if gamerule_disableRaids then return false end
|
||||||
|
|
||||||
--minetest.log("Cond start raid")
|
--minetest.log("Cond start raid")
|
||||||
local r = {}
|
local r = {}
|
||||||
|
|
|
@ -8,28 +8,39 @@ local NIGHT_VISION_RATIO = 0.45
|
||||||
local DEBUG = false
|
local DEBUG = false
|
||||||
|
|
||||||
-- Settings
|
-- Settings
|
||||||
local minimum_update_interval = { 250e3 }
|
local minimum_update_interval = 250e3
|
||||||
|
vl_tuning.setting("minimum_sky_update_interval", "number", {
|
||||||
|
default = 0.25,
|
||||||
|
set = function(val) minimum_update_interval = val * 1e6 end,
|
||||||
|
get = function() return minimum_update_interval * 1e-6 end,
|
||||||
|
})
|
||||||
|
|
||||||
-- Module state
|
-- Module state
|
||||||
local mods_loaded = false
|
local mods_loaded = false
|
||||||
|
|
||||||
-- Daylight cycle handling
|
-- Daylight cycle handling
|
||||||
local fixed_time = vl_tuning.setting("fixed_daylight_time", "number", {
|
local fixed_time = 0.5
|
||||||
|
local fixed_time_setting = vl_tuning.setting("fixed_daylight_time", "number", {
|
||||||
description = S("Time of day to use when gamerule:doDaylightCycle == false"),
|
description = S("Time of day to use when gamerule:doDaylightCycle == false"),
|
||||||
default = 0.5
|
default = 0.5,
|
||||||
|
set = function(val) fixed_time = val end,
|
||||||
|
get = function() return fixed_time end,
|
||||||
})
|
})
|
||||||
local gamerule_doDaylightCycle = vl_tuning.setting("gamerule:doDaylightCycle", "bool",{
|
local gamerule_doDaylightCycle = true
|
||||||
|
vl_tuning.setting("gamerule:doDaylightCycle", "bool",{
|
||||||
description = S("Whether the daylight cycle and moon phases progress"),
|
description = S("Whether the daylight cycle and moon phases progress"),
|
||||||
default = true,
|
default = true,
|
||||||
|
set = function(val) gamerule_doDaylightCycle = val end,
|
||||||
|
get = function() return gamerule_doDaylightCycle end,
|
||||||
on_change = function(self)
|
on_change = function(self)
|
||||||
if not self[1] then
|
if not self[1] then
|
||||||
fixed_time:set(minetest.get_timeofday())
|
fixed_time_setting:set(minetest.get_timeofday())
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
})
|
})
|
||||||
local function daylightCycle()
|
local function daylightCycle()
|
||||||
if not gamerule_doDaylightCycle[1] and fixed_time[1] then
|
if not gamerule_doDaylightCycle and fixed_time then
|
||||||
minetest.set_timeofday(fixed_time[1])
|
minetest.set_timeofday(fixed_time)
|
||||||
end
|
end
|
||||||
minetest.after(1, daylightCycle)
|
minetest.after(1, daylightCycle)
|
||||||
end
|
end
|
||||||
|
@ -170,7 +181,7 @@ function skycolor.update_player_sky_color(player)
|
||||||
local skycolor_data = get_skycolor_info(player)
|
local skycolor_data = get_skycolor_info(player)
|
||||||
local last_update = skycolor_data.last_update or 0
|
local last_update = skycolor_data.last_update or 0
|
||||||
local now_us = minetest.get_us_time()
|
local now_us = minetest.get_us_time()
|
||||||
if (now_us - last_update) < minimum_update_interval[1] then return end
|
if (now_us - last_update) < minimum_update_interval then return end
|
||||||
skycolor_data.last_update = now_us
|
skycolor_data.last_update = now_us
|
||||||
|
|
||||||
local sky_data = {
|
local sky_data = {
|
||||||
|
|
|
@ -7,9 +7,12 @@ mcl_weather.snow = {}
|
||||||
local PARTICLES_COUNT_SNOW = tonumber(minetest.settings:get("mcl_weather_snow_particles")) or 100
|
local PARTICLES_COUNT_SNOW = tonumber(minetest.settings:get("mcl_weather_snow_particles")) or 100
|
||||||
mcl_weather.snow.init_done = false
|
mcl_weather.snow.init_done = false
|
||||||
local mgname = minetest.get_mapgen_setting("mg_name")
|
local mgname = minetest.get_mapgen_setting("mg_name")
|
||||||
local gamerule_snowAccumulationHeight = vl_tuning.setting("gamerule:snowAccumulationHeight", "number", {
|
local gamerule_snowAccumulationHeight = 1
|
||||||
|
vl_tuning.setting("gamerule:snowAccumulationHeight", "number", {
|
||||||
description = S("The maximum number of snow layers that can be accumulated on each block"),
|
description = S("The maximum number of snow layers that can be accumulated on each block"),
|
||||||
default = 1, min = 0, max = 8
|
default = 1, min = 0, max = 8,
|
||||||
|
set = function(val) gamerule_snowAccumulationHeight = val end,
|
||||||
|
get = function() return gamerule_snowAccumulationHeight end,
|
||||||
})
|
})
|
||||||
|
|
||||||
local snow_biomes = {
|
local snow_biomes = {
|
||||||
|
@ -147,7 +150,7 @@ minetest.register_abm({
|
||||||
if node.name:find("snow") then
|
if node.name:find("snow") then
|
||||||
local l = node.name:sub(-1)
|
local l = node.name:sub(-1)
|
||||||
l = tonumber(l)
|
l = tonumber(l)
|
||||||
if l < gamerule_snowAccumulationHeight[1] then
|
if l < gamerule_snowAccumulationHeight then
|
||||||
if node.name == "mcl_core:snow" then
|
if node.name == "mcl_core:snow" then
|
||||||
nn={name = "mcl_core:snow_2"}
|
nn={name = "mcl_core:snow_2"}
|
||||||
elseif l and l < 7 then
|
elseif l and l < 7 then
|
||||||
|
|
|
@ -2,8 +2,11 @@ local S = minetest.get_translator(minetest.get_current_modname())
|
||||||
|
|
||||||
local math = math
|
local math = math
|
||||||
|
|
||||||
local gamerule_doWeatherCycle = vl_tuning.setting("gamerule:doWeatherCycle", "bool", {
|
local gamerule_doWeatherCycle = true
|
||||||
description = S("Whether the weather can change naturally. The /weather command can still change weather."), default = true
|
vl_tuning.setting("gamerule:doWeatherCycle", "bool", {
|
||||||
|
description = S("Whether the weather can change naturally. The /weather command can still change weather."), default = true,
|
||||||
|
set = function(val) gamerule_doWeatherCycle = val end,
|
||||||
|
get = function() return gamerule_doWeatherCycle end,
|
||||||
})
|
})
|
||||||
|
|
||||||
-- weather states, 'none' is default, other states depends from active mods
|
-- weather states, 'none' is default, other states depends from active mods
|
||||||
|
@ -130,7 +133,7 @@ end
|
||||||
local t, wci = 0, mcl_weather.check_interval
|
local t, wci = 0, mcl_weather.check_interval
|
||||||
|
|
||||||
minetest.register_globalstep(function(dtime)
|
minetest.register_globalstep(function(dtime)
|
||||||
if not gamerule_doWeatherCycle[1] then return end
|
if not gamerule_doWeatherCycle then return end
|
||||||
|
|
||||||
t = t + dtime
|
t = t + dtime
|
||||||
if t < wci then return end
|
if t < wci then return end
|
||||||
|
|
|
@ -19,12 +19,18 @@ local modpath = minetest.get_modpath(modname)
|
||||||
local S = minetest.get_translator(modname)
|
local S = minetest.get_translator(modname)
|
||||||
|
|
||||||
-- Tunable parameters
|
-- Tunable parameters
|
||||||
local notif_delay = vl_tuning.setting("award_display_time", "number", {
|
local notif_delay = 3
|
||||||
description = S("Amount of time award notification are displayed"), default = 3, min = 2, max = 10
|
vl_tuning.setting("award_display_time", "number", {
|
||||||
|
description = S("Amount of time award notification are displayed"), default = 3, min = 2, max = 10,
|
||||||
|
set = function(val) notif_delay = val end,
|
||||||
|
get = function() return notif_delay end,
|
||||||
})
|
})
|
||||||
local announce_in_chat = vl_tuning.setting("gamerule:announceAdvancements", "bool", {
|
local announce_in_chat = true
|
||||||
|
vl_tuning.setting("gamerule:announceAdvancements", "bool", {
|
||||||
description = S("Whether advancements should be announced in chat"),
|
description = S("Whether advancements should be announced in chat"),
|
||||||
default = minetest.settings:get_bool("mcl_showAdvancementMessages", true),
|
default = minetest.settings:get_bool("mcl_showAdvancementMessages", true),
|
||||||
|
set = function(val) announce_in_chat = val end,
|
||||||
|
get = function() return announce_in_chat end,
|
||||||
})
|
})
|
||||||
|
|
||||||
-- The global award namespace
|
-- The global award namespace
|
||||||
|
@ -226,7 +232,7 @@ function awards.unlock(name, award)
|
||||||
|
|
||||||
-- Get award
|
-- Get award
|
||||||
minetest.log("action", name.." has gotten award "..award)
|
minetest.log("action", name.." has gotten award "..award)
|
||||||
if announce_in_chat[1] then
|
if announce_in_chat then
|
||||||
minetest.chat_send_all(S("@1 has made the advancement @2", name, minetest.colorize(mcl_colors.GREEN, "[" .. (awdef.title or award) .. "]")))
|
minetest.chat_send_all(S("@1 has made the advancement @2", name, minetest.colorize(mcl_colors.GREEN, "[" .. (awdef.title or award) .. "]")))
|
||||||
end
|
end
|
||||||
data.unlocked[award] = award
|
data.unlocked[award] = award
|
||||||
|
@ -371,7 +377,7 @@ function awards.unlock(name, award)
|
||||||
direction = 0,
|
direction = 0,
|
||||||
z_index = 102,
|
z_index = 102,
|
||||||
})
|
})
|
||||||
minetest.after(notif_delay[1], function(name)
|
minetest.after(notif_delay, function(name)
|
||||||
local player = minetest.get_player_by_name(name)
|
local player = minetest.get_player_by_name(name)
|
||||||
if not player then
|
if not player then
|
||||||
return
|
return
|
||||||
|
|
|
@ -1,9 +1,12 @@
|
||||||
local S = minetest.get_translator(minetest.get_current_modname())
|
local S = minetest.get_translator(minetest.get_current_modname())
|
||||||
|
|
||||||
local ASSIST_TIMEOUT_SEC = 5
|
local ASSIST_TIMEOUT_SEC = 5
|
||||||
local gamerule_showDeathMessages = vl_tuning.setting("gamerule:showDeathMessages", "bool", {
|
local gamerule_showDeathMessages = true
|
||||||
|
vl_tuning.setting("gamerule:showDeathMessages", "bool", {
|
||||||
description = S("Whether death messages are put into chat when a player dies. Also affects whether a message is sent to the pet's owner when the pet dies."),
|
description = S("Whether death messages are put into chat when a player dies. Also affects whether a message is sent to the pet's owner when the pet dies."),
|
||||||
default = minetest.settings:get_bool("mcl_showDeathMessages", true),
|
default = minetest.settings:get_bool("mcl_showDeathMessages", true),
|
||||||
|
set = function(val) gamerule_showDeathMessages = val end,
|
||||||
|
get = function() return gamerule_showDeathMessages end,
|
||||||
})
|
})
|
||||||
|
|
||||||
mcl_death_messages = {
|
mcl_death_messages = {
|
||||||
|
@ -208,7 +211,7 @@ local function fallback_translator(s)
|
||||||
end
|
end
|
||||||
|
|
||||||
mcl_damage.register_on_death(function(obj, reason)
|
mcl_damage.register_on_death(function(obj, reason)
|
||||||
if not gamerule_showDeathMessages[1] then return end
|
if not gamerule_showDeathMessages then return end
|
||||||
|
|
||||||
local send_to
|
local send_to
|
||||||
|
|
||||||
|
|
|
@ -126,7 +126,7 @@ function ARROW_ENTITY.on_step(self, dtime)
|
||||||
local node = minetest.get_node(dpos)
|
local node = minetest.get_node(dpos)
|
||||||
|
|
||||||
if self._stuck then
|
if self._stuck then
|
||||||
self._stucktimer = self._stucktimer + dtime
|
self._stucktimer = self._stucktimer or 0 + dtime
|
||||||
self._stuckrechecktimer = self._stuckrechecktimer + dtime
|
self._stuckrechecktimer = self._stuckrechecktimer + dtime
|
||||||
if self._stucktimer > ARROW_TIMEOUT then
|
if self._stucktimer > ARROW_TIMEOUT then
|
||||||
mcl_burning.extinguish(self.object)
|
mcl_burning.extinguish(self.object)
|
||||||
|
|
|
@ -1202,9 +1202,12 @@ end
|
||||||
---------------------
|
---------------------
|
||||||
-- Vine generating --
|
-- Vine generating --
|
||||||
---------------------
|
---------------------
|
||||||
local do_vines_spread = vl_tuning.setting("gamerule:doVinesSpread", "bool", {
|
local do_vines_spread = true
|
||||||
|
vl_tuning.setting("gamerule:doVinesSpread", "bool", {
|
||||||
description = S("Whether vines can spread to other blocks. Cave vines, weeping vines, and twisting vines are not affected."),
|
description = S("Whether vines can spread to other blocks. Cave vines, weeping vines, and twisting vines are not affected."),
|
||||||
default = true,
|
default = true,
|
||||||
|
set = function(val) do_vines_spread = val end,
|
||||||
|
get = function() return do_vines_spread end,
|
||||||
})
|
})
|
||||||
minetest.register_abm({
|
minetest.register_abm({
|
||||||
label = "Vine growth",
|
label = "Vine growth",
|
||||||
|
@ -1212,10 +1215,9 @@ minetest.register_abm({
|
||||||
interval = 47,
|
interval = 47,
|
||||||
chance = 4,
|
chance = 4,
|
||||||
action = function(pos, node, active_object_count, active_object_count_wider)
|
action = function(pos, node, active_object_count, active_object_count_wider)
|
||||||
-- First of all, check if we are even supported, otherwise, decay.
|
if not do_vines_spread then return end
|
||||||
if not do_vines_spread[1] then return end
|
|
||||||
|
|
||||||
-- First of all, check if we are even supported, otherwise, let's die!
|
-- First of all, check if we are even supported, otherwise, decay.
|
||||||
if not mcl_core.check_vines_supported(pos, node) then
|
if not mcl_core.check_vines_supported(pos, node) then
|
||||||
minetest.remove_node(pos)
|
minetest.remove_node(pos)
|
||||||
vinedecay_particles(pos, node)
|
vinedecay_particles(pos, node)
|
||||||
|
|
|
@ -7,8 +7,11 @@ local modpath = minetest.get_modpath(modname)
|
||||||
local S = minetest.get_translator(modname)
|
local S = minetest.get_translator(modname)
|
||||||
|
|
||||||
local has_mcl_portals = minetest.get_modpath("mcl_portals")
|
local has_mcl_portals = minetest.get_modpath("mcl_portals")
|
||||||
local gamerule_doFireTick = vl_tuning.setting("gamerule:doFireTick", "bool", {
|
local gamerule_doFireTick = true
|
||||||
description = S("Whether fire should spread and naturally extinguish"), default = true
|
vl_tuning.setting("gamerule:doFireTick", "bool", {
|
||||||
|
description = S("Whether fire should spread and naturally extinguish"), default = true,
|
||||||
|
set = function(val) gamerule_doFireTick = val end,
|
||||||
|
get = function() return gamerule_doFireTick end,
|
||||||
})
|
})
|
||||||
|
|
||||||
local set_node = minetest.set_node
|
local set_node = minetest.set_node
|
||||||
|
@ -369,7 +372,7 @@ else -- Fire enabled
|
||||||
chance = 12,
|
chance = 12,
|
||||||
catch_up = false,
|
catch_up = false,
|
||||||
action = function(pos)
|
action = function(pos)
|
||||||
if not gamerule_doFireTick[1] then return end
|
if not gamerule_doFireTick then return end
|
||||||
|
|
||||||
local p = get_ignitable(pos)
|
local p = get_ignitable(pos)
|
||||||
if p then
|
if p then
|
||||||
|
@ -388,7 +391,7 @@ else -- Fire enabled
|
||||||
chance = 9,
|
chance = 9,
|
||||||
catch_up = false,
|
catch_up = false,
|
||||||
action = function(pos)
|
action = function(pos)
|
||||||
if not gamerule_doFireTick[1] then return end
|
if not gamerule_doFireTick then return end
|
||||||
|
|
||||||
local p=get_ignitable_by_lava(pos)
|
local p=get_ignitable_by_lava(pos)
|
||||||
if p then
|
if p then
|
||||||
|
@ -404,7 +407,7 @@ else -- Fire enabled
|
||||||
chance = 3,
|
chance = 3,
|
||||||
catch_up = false,
|
catch_up = false,
|
||||||
action = function(pos)
|
action = function(pos)
|
||||||
if not gamerule_doFireTick[1] then return end
|
if not gamerule_doFireTick then return end
|
||||||
|
|
||||||
local p=has_flammable(pos)
|
local p=has_flammable(pos)
|
||||||
if p then
|
if p then
|
||||||
|
@ -427,7 +430,7 @@ else -- Fire enabled
|
||||||
chance = 18,
|
chance = 18,
|
||||||
catch_up = false,
|
catch_up = false,
|
||||||
action = function(pos)
|
action = function(pos)
|
||||||
if not gamerule_doFireTick[1] then return end
|
if not gamerule_doFireTick then return end
|
||||||
|
|
||||||
local p = has_flammable(pos)
|
local p = has_flammable(pos)
|
||||||
if not p then
|
if not p then
|
||||||
|
|
|
@ -3,11 +3,17 @@ local modpath = minetest.get_modpath(modname)
|
||||||
|
|
||||||
local S = minetest.get_translator(modname)
|
local S = minetest.get_translator(modname)
|
||||||
|
|
||||||
local max_tick_timer = vl_tuning.setting("health_regen_delay", "number", {
|
local max_tick_timer
|
||||||
|
vl_tuning.setting("health_regen_delay", "number", {
|
||||||
default = tonumber(minetest.settings:get("mcl_health_regen_delay")) or 0.5,
|
default = tonumber(minetest.settings:get("mcl_health_regen_delay")) or 0.5,
|
||||||
|
set = function(val) max_tick_timer = val end,
|
||||||
|
get = function() return max_tick_timer end,
|
||||||
})
|
})
|
||||||
local natural_regeneration = vl_tuning.setting("gamerule:naturalRegeneration", "bool", {
|
local natural_regeneration = true
|
||||||
|
vl_tuning.setting("gamerule:naturalRegeneration", "bool", {
|
||||||
default = true,
|
default = true,
|
||||||
|
set = function(val) natural_regeneration = val end,
|
||||||
|
get = function() return natural_regeneration end,
|
||||||
})
|
})
|
||||||
|
|
||||||
mcl_hunger = {}
|
mcl_hunger = {}
|
||||||
|
@ -259,7 +265,7 @@ minetest.register_globalstep(function(dtime)
|
||||||
end
|
end
|
||||||
|
|
||||||
if food_level >= 18 then -- slow regeneration
|
if food_level >= 18 then -- slow regeneration
|
||||||
if natural_regeneration[1] and player_health > 0 and player_health < player:get_properties().hp_max then
|
if natural_regeneration and player_health > 0 and player_health < player:get_properties().hp_max then
|
||||||
player:set_hp(player_health+1)
|
player:set_hp(player_health+1)
|
||||||
mcl_hunger.exhaust(player_name, mcl_hunger.EXHAUST_REGEN)
|
mcl_hunger.exhaust(player_name, mcl_hunger.EXHAUST_REGEN)
|
||||||
mcl_hunger.update_exhaustion_hud(player)
|
mcl_hunger.update_exhaustion_hud(player)
|
||||||
|
@ -275,8 +281,8 @@ minetest.register_globalstep(function(dtime)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
elseif food_tick_timer > max_tick_timer[1] and food_level == 20 and food_saturation_level > 0 then -- fast regeneration
|
elseif food_tick_timer > max_tick_timer and food_level == 20 and food_saturation_level > 0 then -- fast regeneration
|
||||||
if natural_regeneration[1] and player_health > 0 and player_health < player:get_properties().hp_max then
|
if natural_regeneration and player_health > 0 and player_health < player:get_properties().hp_max then
|
||||||
food_tick_timer = 0
|
food_tick_timer = 0
|
||||||
player:set_hp(player_health+1)
|
player:set_hp(player_health+1)
|
||||||
mcl_hunger.exhaust(player_name, mcl_hunger.EXHAUST_REGEN)
|
mcl_hunger.exhaust(player_name, mcl_hunger.EXHAUST_REGEN)
|
||||||
|
|
Loading…
Reference in a new issue