mirror of
				https://github.com/sys4-fr/server-nalc.git
				synced 2025-11-04 05:55:28 +01:00 
			
		
		
		
	Updated plantlife
This commit is contained in:
		@@ -6,4 +6,4 @@ local mname		= "along_shore"
 | 
			
		||||
 | 
			
		||||
-----------------------------------------------------------------------------------------------
 | 
			
		||||
minetest.log("action", "[Mod] "..title.." ["..version.."] ["..mname.."] Loaded...")
 | 
			
		||||
-----------------------------------------------------------------------------------------------
 | 
			
		||||
-----------------------------------------------------------------------------------------------
 | 
			
		||||
@@ -30,35 +30,45 @@ minetest.register_craft({
 | 
			
		||||
-- these ABMs can get heavy, so just enqueue the nodes
 | 
			
		||||
 | 
			
		||||
-- Adding Blossoms
 | 
			
		||||
-- Limit mass changes after block has not been loaded for some time:
 | 
			
		||||
-- Run ABM with higher frequency, but don't enqueue all blocks
 | 
			
		||||
minetest.register_abm({
 | 
			
		||||
    nodenames = { nature.blossom_leaves },
 | 
			
		||||
    interval = nature.blossom_delay,
 | 
			
		||||
    chance = nature.blossom_chance,
 | 
			
		||||
    interval = nature.blossom_delay / nature.leaves_blossom_chance,
 | 
			
		||||
    chance = nature.leaves_blossom_chance,
 | 
			
		||||
 | 
			
		||||
    action = function(pos, node, active_object_count, active_object_count_wider)
 | 
			
		||||
			nature.enqueue_node(pos, node, true)
 | 
			
		||||
			if math.random(nature.leaves_blossom_chance) == 1 then
 | 
			
		||||
				nature.enqueue_node(pos, node, nature.blossom_node)
 | 
			
		||||
			end
 | 
			
		||||
    end
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
-- Removing blossoms
 | 
			
		||||
-- Limit mass changes after block has not been loaded for some time:
 | 
			
		||||
-- Run ABM with higher frequency, but don't enqueue all blocks
 | 
			
		||||
minetest.register_abm({
 | 
			
		||||
    nodenames = { nature.blossom_node },
 | 
			
		||||
    interval = nature.blossom_delay,
 | 
			
		||||
    chance = nature.blossom_chance,
 | 
			
		||||
    interval = nature.blossom_delay / nature.blossom_leaves_chance,
 | 
			
		||||
    chance = nature.blossom_leaves_chance,
 | 
			
		||||
 | 
			
		||||
    action = function(pos, node, active_object_count, active_object_count_wider)
 | 
			
		||||
			nature.enqueue_node(pos, node, false)
 | 
			
		||||
			if math.random(nature.blossom_leaves_chance) == 1 then
 | 
			
		||||
				nature.enqueue_node(pos, node, nature.blossom_leaves)
 | 
			
		||||
			end
 | 
			
		||||
    end
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
-- Spawning apples
 | 
			
		||||
-- Limit mass changes after block has not been loaded for some time:
 | 
			
		||||
-- spawn apples with 10% chance, but with 10 times higher frequency
 | 
			
		||||
minetest.register_abm({
 | 
			
		||||
    nodenames = { nature.blossom_node },
 | 
			
		||||
    interval = nature.blossom_delay,
 | 
			
		||||
    interval = nature.blossom_delay / 10,
 | 
			
		||||
    chance = nature.apple_chance,
 | 
			
		||||
 | 
			
		||||
    action = function(pos, node, active_object_count, active_object_count_wider)
 | 
			
		||||
		if nature.dtime < 0.2 and not minetest.find_node_near(pos, nature.apple_spread, { "default:apple" }) then
 | 
			
		||||
		if math.random(10) == 0 and nature.dtime < 0.2 and not minetest.find_node_near(pos, nature.apple_spread, { "default:apple" }) then
 | 
			
		||||
			spawn_apple_under(pos)
 | 
			
		||||
		end
 | 
			
		||||
    end
 | 
			
		||||
 
 | 
			
		||||
@@ -1,44 +1,64 @@
 | 
			
		||||
-- helper functions
 | 
			
		||||
 | 
			
		||||
local function process_blossom_queue_item()
 | 
			
		||||
	local pos  = nature.blossomqueue[1][1]
 | 
			
		||||
	local node = nature.blossomqueue[1][2]
 | 
			
		||||
	local replace = nature.blossomqueue[1][3]
 | 
			
		||||
	if (nature.blossomqueue[1][3] == nature.blossom_node and not nature:is_near_water(pos)) then
 | 
			
		||||
		table.remove(nature.blossomqueue, 1) -- don't grow if it's not near water, pop from queue.
 | 
			
		||||
		return
 | 
			
		||||
	end
 | 
			
		||||
	nature:grow_node(pos, replace) -- now actually grow it.
 | 
			
		||||
	table.remove(nature.blossomqueue, 1)
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
minetest.register_globalstep(function(dtime)
 | 
			
		||||
	nature.dtime = dtime
 | 
			
		||||
	if #nature.blossomqueue > 0 and dtime < 0.2 then
 | 
			
		||||
		local pos  = nature.blossomqueue[1][1]
 | 
			
		||||
		local node = nature.blossomqueue[1][2]
 | 
			
		||||
		if (nature.blossomqueue[1][3] and not nature:is_near_water(pos)) then
 | 
			
		||||
			table.remove(nature.blossomqueue, 1) -- don't grow if it's not near water, pop from queue.
 | 
			
		||||
			return
 | 
			
		||||
		local i = 1
 | 
			
		||||
		if dtime < 0.1 then
 | 
			
		||||
			i = i + 4
 | 
			
		||||
		end
 | 
			
		||||
		if dtime < 0.05 then
 | 
			
		||||
			i = i + 10
 | 
			
		||||
		end
 | 
			
		||||
		while #nature.blossomqueue > 0 and i > 0 do
 | 
			
		||||
			process_blossom_queue_item()
 | 
			
		||||
			i = i - 1
 | 
			
		||||
		end
 | 
			
		||||
		nature:grow_node(pos, nature.blossom_node) -- now actually grow it.
 | 
			
		||||
		table.remove(nature.blossomqueue, 1)
 | 
			
		||||
	end
 | 
			
		||||
end)
 | 
			
		||||
 | 
			
		||||
function nature.enqueue_node(pos, node, fcn)
 | 
			
		||||
function nature.enqueue_node(pos, node, replace)
 | 
			
		||||
	local idx = #nature.blossomqueue
 | 
			
		||||
	nature.blossomqueue[idx+1] = {}
 | 
			
		||||
	nature.blossomqueue[idx+1][1] = pos
 | 
			
		||||
	nature.blossomqueue[idx+1][2] = node
 | 
			
		||||
	nature.blossomqueue[idx+1][3] = fcn
 | 
			
		||||
	if idx < nature.blossomqueue_max then
 | 
			
		||||
		local enqueue_prob = 0
 | 
			
		||||
		if idx < nature.blossomqueue_max * 0.8 then
 | 
			
		||||
			enqueue_prob = 1
 | 
			
		||||
		else
 | 
			
		||||
			-- Reduce queue growth as it gets closer to its max.
 | 
			
		||||
			enqueue_prob = 1 - (idx - nature.blossomqueue_max * 0.8) / (nature.blossomqueue_max * 0.2)
 | 
			
		||||
		end
 | 
			
		||||
		if enqueue_prob == 1 or math.random(100) <= 100 * enqueue_prob then
 | 
			
		||||
			nature.blossomqueue[idx+1] = {}
 | 
			
		||||
			nature.blossomqueue[idx+1][1] = pos
 | 
			
		||||
			nature.blossomqueue[idx+1][2] = node
 | 
			
		||||
			nature.blossomqueue[idx+1][3] = replace
 | 
			
		||||
		end
 | 
			
		||||
	end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
local function set_young_node(pos)
 | 
			
		||||
    local meta = minetest.get_meta(pos)
 | 
			
		||||
 | 
			
		||||
    meta:set_string(nature.node_young, nature.setting_true)
 | 
			
		||||
    minetest.after(nature.youth_delay,
 | 
			
		||||
        function(pos)
 | 
			
		||||
            local meta = minetest.get_meta(pos)
 | 
			
		||||
            meta:set_string(nature.node_young, nature.setting_false)
 | 
			
		||||
        end,
 | 
			
		||||
    pos)
 | 
			
		||||
    meta:set_int(nature.meta_blossom_time, minetest.get_gametime())
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
local function is_not_young(pos)
 | 
			
		||||
    local meta = minetest.get_meta(pos)
 | 
			
		||||
 | 
			
		||||
    local young = meta:get_string(nature.node_young)
 | 
			
		||||
    return young ~= nature.setting_true
 | 
			
		||||
    local blossom_time = meta:get_int(nature.meta_blossom_time)
 | 
			
		||||
    return not (blossom_time and minetest.get_gametime() - blossom_time < nature.blossom_duration)
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
function nature:grow_node(pos, nodename)
 | 
			
		||||
@@ -47,7 +67,6 @@ function nature:grow_node(pos, nodename)
 | 
			
		||||
                >= nature.minimum_growth_light
 | 
			
		||||
 | 
			
		||||
        if is_not_young(pos) and light_enough then
 | 
			
		||||
            minetest.remove_node(pos)
 | 
			
		||||
            minetest.set_node(pos, { name = nodename })
 | 
			
		||||
            set_young_node(pos)
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -7,6 +7,7 @@ local current_mod_name = minetest.get_current_modname()
 | 
			
		||||
 | 
			
		||||
nature = {}
 | 
			
		||||
nature.blossomqueue = {}
 | 
			
		||||
nature.blossomqueue_max = 1000
 | 
			
		||||
 | 
			
		||||
nature.blossom_node = "nature:blossom"
 | 
			
		||||
nature.blossom_leaves = "default:leaves"
 | 
			
		||||
@@ -19,15 +20,14 @@ if minetest.get_modpath("moretrees") then
 | 
			
		||||
	minetest.register_alias("nature:blossom", "default:leaves")
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
nature.blossom_chance = 15
 | 
			
		||||
nature.leaves_blossom_chance = 15
 | 
			
		||||
nature.blossom_leaves_chance = 5
 | 
			
		||||
nature.blossom_delay = 3600
 | 
			
		||||
nature.apple_chance = 10
 | 
			
		||||
nature.apple_spread = 2
 | 
			
		||||
 | 
			
		||||
nature.node_young = "young"
 | 
			
		||||
nature.setting_true = "true"
 | 
			
		||||
nature.setting_false = "false"
 | 
			
		||||
nature.youth_delay = 5
 | 
			
		||||
nature.meta_blossom_time = "blossom_time"
 | 
			
		||||
nature.blossom_duration = nature.blossom_delay
 | 
			
		||||
 | 
			
		||||
function dumppos(pos)
 | 
			
		||||
	return "("..pos.x..","..pos.y..","..pos.z..")"
 | 
			
		||||
 
 | 
			
		||||
@@ -14,4 +14,4 @@ dofile(minetest.get_modpath("trunks").."/crafting.lua")
 | 
			
		||||
 | 
			
		||||
-----------------------------------------------------------------------------------------------
 | 
			
		||||
minetest.log("action", "[Mod] "..title.." ["..version.."] ["..mname.."] Loaded...")
 | 
			
		||||
-----------------------------------------------------------------------------------------------
 | 
			
		||||
-----------------------------------------------------------------------------------------------
 | 
			
		||||
@@ -26,4 +26,4 @@ print("     \\/                   \\/")]]
 | 
			
		||||
 | 
			
		||||
-----------------------------------------------------------------------------------------------
 | 
			
		||||
minetest.log("action", "[Mod] "..title.." ["..version.."] ["..mname.."] Loaded...")
 | 
			
		||||
-----------------------------------------------------------------------------------------------
 | 
			
		||||
-----------------------------------------------------------------------------------------------
 | 
			
		||||
							
								
								
									
										0
									
								
								mods/soundset/README.md
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							
							
						
						
									
										0
									
								
								mods/soundset/README.md
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							
							
								
								
									
										0
									
								
								mods/soundset/init.lua
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							
							
						
						
									
										0
									
								
								mods/soundset/init.lua
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							
		Reference in New Issue
	
	Block a user