forked from mtcontrib/weather_pack
		
	Initial upload
This commit is contained in:
		
							
								
								
									
										0
									
								
								modpack.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								modpack.txt
									
									
									
									
									
										Normal file
									
								
							
							
								
								
									
										15
									
								
								weather/command.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								weather/command.lua
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,15 @@
 | 
			
		||||
minetest.register_privilege("weather", {
 | 
			
		||||
	description = "Change the weather",
 | 
			
		||||
	give_to_singleplayer = false
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
-- Set weather
 | 
			
		||||
minetest.register_chatcommand("setweather", {
 | 
			
		||||
	params = "<weather>",
 | 
			
		||||
	description = "Set weather to rain, snow or none", -- full description
 | 
			
		||||
	privs = {weather = true},
 | 
			
		||||
	func = function(name, param)
 | 
			
		||||
		weather = param
 | 
			
		||||
		save_weather()
 | 
			
		||||
	end
 | 
			
		||||
})
 | 
			
		||||
							
								
								
									
										50
									
								
								weather/init.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										50
									
								
								weather/init.lua
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,50 @@
 | 
			
		||||
-- Weather:
 | 
			
		||||
-- * rain
 | 
			
		||||
-- * snow
 | 
			
		||||
-- * wind (not implemented)
 | 
			
		||||
 | 
			
		||||
assert(minetest.add_particlespawner, "I told you to run the latest GitHub!")
 | 
			
		||||
 | 
			
		||||
addvectors = function (v1, v2)
 | 
			
		||||
	return {x=v1.x+v2.x, y=v1.y+v2.y, z=v1.z+v2.z}
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
save_weather = function ()
 | 
			
		||||
	local file = io.open(minetest.get_worldpath().."/weather", "w+")
 | 
			
		||||
	file:write(weather)
 | 
			
		||||
	file:close()
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
read_weather = function ()
 | 
			
		||||
	local file = io.open(minetest.get_worldpath().."/weather", "r")
 | 
			
		||||
	if not file then return end
 | 
			
		||||
	local readweather = file:read()
 | 
			
		||||
	file:close()
 | 
			
		||||
	return readweather
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
weather = read_weather()
 | 
			
		||||
 | 
			
		||||
minetest.register_globalstep(function(dtime)
 | 
			
		||||
	if weather == "rain" or weather == "snow" then
 | 
			
		||||
		if math.random(1, 10000) == 1 then
 | 
			
		||||
			weather = "none"
 | 
			
		||||
			save_weather()
 | 
			
		||||
		end
 | 
			
		||||
	else
 | 
			
		||||
		if math.random(1, 50000) == 1 then
 | 
			
		||||
			weather = "rain"
 | 
			
		||||
			save_weather()
 | 
			
		||||
		end
 | 
			
		||||
		if math.random(1, 50000) == 2 then
 | 
			
		||||
			weather = "snow"
 | 
			
		||||
			save_weather()
 | 
			
		||||
		end
 | 
			
		||||
	end
 | 
			
		||||
end)
 | 
			
		||||
 | 
			
		||||
dofile(minetest.get_modpath("weather").."/rain.lua")
 | 
			
		||||
dofile(minetest.get_modpath("weather").."/snow.lua")
 | 
			
		||||
dofile(minetest.get_modpath("weather").."/command.lua")
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										24
									
								
								weather/rain.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								weather/rain.lua
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,24 @@
 | 
			
		||||
-- Rain
 | 
			
		||||
minetest.register_globalstep(function(dtime)
 | 
			
		||||
	if weather ~= "rain" then return end
 | 
			
		||||
	for _, player in ipairs(minetest.get_connected_players()) do
 | 
			
		||||
		local ppos = player:getpos()
 | 
			
		||||
 | 
			
		||||
		-- Make sure player is not in a cave/house...
 | 
			
		||||
		if minetest.env:get_node_light(ppos, 0.5) ~= 15 then return end
 | 
			
		||||
 | 
			
		||||
		local minp = addvectors(ppos, {x=-9, y=7, z=-9})
 | 
			
		||||
		local maxp = addvectors(ppos, {x= 9, y=7, z= 9})
 | 
			
		||||
 | 
			
		||||
		local vel = {x=0, y=   -4, z=0}
 | 
			
		||||
		local acc = {x=0, y=-9.81, z=0}
 | 
			
		||||
 | 
			
		||||
		minetest.add_particlespawner(25, 0.5,
 | 
			
		||||
			minp, maxp,
 | 
			
		||||
			vel, vel,
 | 
			
		||||
			acc, acc,
 | 
			
		||||
			0.8, 0.8,
 | 
			
		||||
			25, 25,
 | 
			
		||||
			false, "weather_rain.png", player:get_player_name())
 | 
			
		||||
	end
 | 
			
		||||
end)
 | 
			
		||||
							
								
								
									
										72
									
								
								weather/snow.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										72
									
								
								weather/snow.lua
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,72 @@
 | 
			
		||||
-- Snow
 | 
			
		||||
minetest.register_globalstep(function(dtime)
 | 
			
		||||
	if weather ~= "snow" then return end
 | 
			
		||||
	for _, player in ipairs(minetest.get_connected_players()) do
 | 
			
		||||
		local ppos = player:getpos()
 | 
			
		||||
 | 
			
		||||
		-- Make sure player is not in a cave/house...
 | 
			
		||||
		if minetest.env:get_node_light(ppos, 0.5) ~= 15 then return end
 | 
			
		||||
 | 
			
		||||
		local minp = addvectors(ppos, {x=-9, y=7, z=-9})
 | 
			
		||||
		local maxp = addvectors(ppos, {x= 9, y=7, z= 9})
 | 
			
		||||
 | 
			
		||||
		local minp_deep = addvectors(ppos, {x=-10, y=3.2, z=-10})
 | 
			
		||||
		local maxp_deep = addvectors(ppos, {x= 10, y=2.6, z= 10})
 | 
			
		||||
 | 
			
		||||
		local vel = {x=0, y=   -0.5, z=0}
 | 
			
		||||
		local acc = {x=0, y=   -0.5, z=0}
 | 
			
		||||
 | 
			
		||||
		minetest.add_particlespawner(5, 0.5,
 | 
			
		||||
			minp, maxp,
 | 
			
		||||
			vel, vel,
 | 
			
		||||
			acc, acc,
 | 
			
		||||
			5, 5,
 | 
			
		||||
			25, 25,
 | 
			
		||||
			false, "weather_snow.png", player:get_player_name())
 | 
			
		||||
 | 
			
		||||
		minetest.add_particlespawner(4, 0.5,
 | 
			
		||||
			minp_deep, maxp_deep,
 | 
			
		||||
			vel, vel,
 | 
			
		||||
			acc, acc,
 | 
			
		||||
			4, 4,
 | 
			
		||||
			25, 25,
 | 
			
		||||
			false, "weather_snow.png", player:get_player_name())
 | 
			
		||||
	end
 | 
			
		||||
end)
 | 
			
		||||
 | 
			
		||||
local snow_box =
 | 
			
		||||
{
 | 
			
		||||
	type  = "fixed",
 | 
			
		||||
	fixed = {-0.5, -0.5, -0.5, 0.5, -0.4, 0.5}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
-- Snow cover
 | 
			
		||||
minetest.register_node("weather:snow_cover", {
 | 
			
		||||
	tiles = {"weather_snow_cover.png"},
 | 
			
		||||
	drawtype = "nodebox",
 | 
			
		||||
	paramtype = "light",
 | 
			
		||||
	node_box = snow_box,
 | 
			
		||||
	selection_box = snow_box,
 | 
			
		||||
	groups = {not_in_creative_inventory = 1, crumbly = 3, attached_node = 1},
 | 
			
		||||
	drop = {}
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
--[[ Enable this section if you have a very fast PC
 | 
			
		||||
minetest.register_abm({
 | 
			
		||||
	nodenames = {"group:crumbly", "group:snappy", "group:cracky", "group:choppy"},
 | 
			
		||||
	neighbors = {"default:air"},
 | 
			
		||||
	interval = 10.0, 
 | 
			
		||||
	chance = 80,
 | 
			
		||||
	action = function (pos, node, active_object_count, active_object_count_wider)
 | 
			
		||||
		if weather == "snow" then
 | 
			
		||||
			if minetest.registered_nodes[node.name].drawtype == "normal"
 | 
			
		||||
			or minetest.registered_nodes[node.name].drawtype == "allfaces_optional" then
 | 
			
		||||
				local np = addvectors(pos, {x=0, y=1, z=0})
 | 
			
		||||
				if minetest.env:get_node_light(np, 0.5) == 15 then
 | 
			
		||||
					minetest.env:add_node(np, {name="weather:snow_cover"})
 | 
			
		||||
				end
 | 
			
		||||
			end
 | 
			
		||||
		end
 | 
			
		||||
	end
 | 
			
		||||
})
 | 
			
		||||
]]
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								weather/textures/weather_rain.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								weather/textures/weather_rain.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 3.2 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								weather/textures/weather_snow.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								weather/textures/weather_snow.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 2.1 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								weather/textures/weather_snow_cover.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								weather/textures/weather_snow_cover.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 647 B  | 
		Reference in New Issue
	
	Block a user