mirror of
https://codeberg.org/tenplus1/ambience.git
synced 2024-12-28 03:30:28 +01:00
music plays every 20-30 minutes, use /mvol 0 to turn off
This commit is contained in:
parent
fe23993419
commit
e8c436685d
@ -19,5 +19,6 @@ Based on Immersive Sounds .36 mod by Neuromancer and optimized to run on servers
|
|||||||
- 1.4 - Re-ordered water sets to come before fire and lava, day/night sounds play when leaves around and above ground
|
- 1.4 - Re-ordered water sets to come before fire and lava, day/night sounds play when leaves around and above ground
|
||||||
- 1.5 - Added 'flame_sound' and fire redo check, code tidy and tweak, added ephemeral flag for background sounds.
|
- 1.5 - Added 'flame_sound' and fire redo check, code tidy and tweak, added ephemeral flag for background sounds.
|
||||||
- 1.6 - Finding env_sounds disables water and lava sets, added 'ambience_water_move' flag to override water walking sounds, use eye level for head node.
|
- 1.6 - Finding env_sounds disables water and lava sets, added 'ambience_water_move' flag to override water walking sounds, use eye level for head node.
|
||||||
|
- 1.7 - Music will play every 20-30 minutes if found, use '/mvol 0' to stop playing music or disable in-game.
|
||||||
|
|
||||||
Code license: MIT
|
Code license: MIT
|
||||||
|
38
init.lua
38
init.lua
@ -2,7 +2,7 @@
|
|||||||
ambience = {}
|
ambience = {}
|
||||||
|
|
||||||
-- settings
|
-- settings
|
||||||
local SOUNDVOLUME = 1.0
|
local SOUNDVOLUME = 0.5
|
||||||
local MUSICVOLUME = 1.0
|
local MUSICVOLUME = 1.0
|
||||||
local play_music = minetest.settings:get_bool("ambience_music") ~= false
|
local play_music = minetest.settings:get_bool("ambience_music") ~= false
|
||||||
local pplus = minetest.get_modpath("playerplus")
|
local pplus = minetest.get_modpath("playerplus")
|
||||||
@ -91,7 +91,7 @@ end
|
|||||||
|
|
||||||
-- setup table when player joins
|
-- setup table when player joins
|
||||||
minetest.register_on_joinplayer(function(player)
|
minetest.register_on_joinplayer(function(player)
|
||||||
playing[player:get_player_name()] = {}
|
playing[player:get_player_name()] = {music = -1}
|
||||||
end)
|
end)
|
||||||
|
|
||||||
-- remove table when player leaves
|
-- remove table when player leaves
|
||||||
@ -103,24 +103,28 @@ end)
|
|||||||
-- plays music and selects sound set
|
-- plays music and selects sound set
|
||||||
local get_ambience = function(player, tod, name)
|
local get_ambience = function(player, tod, name)
|
||||||
|
|
||||||
-- play server or local music if available
|
-- play server or local music if music enabled and music not already playing
|
||||||
if play_music then
|
if play_music and MUSICVOLUME > 0 and playing[name].music < 0 then
|
||||||
|
|
||||||
-- play at midnight
|
-- count backwards
|
||||||
if tod >= 0.0 and tod <= 0.01 then
|
playing[name].music = playing[name].music -1
|
||||||
|
|
||||||
if not playing[name].music then
|
-- play music every 20 minutes
|
||||||
|
if playing[name].music < -(60 * 20) then
|
||||||
|
|
||||||
playing[name].music = minetest.sound_play("ambience_music", {
|
playing[name].music = minetest.sound_play("ambience_music", {
|
||||||
to_player = name,
|
to_player = name,
|
||||||
gain = MUSICVOLUME
|
gain = MUSICVOLUME
|
||||||
})
|
})
|
||||||
|
|
||||||
|
-- reset music timer after 10 minutes
|
||||||
|
minetest.after(60 * 10, function(name)
|
||||||
|
playing[name].music = -1
|
||||||
|
end, name)
|
||||||
end
|
end
|
||||||
|
|
||||||
elseif tod > 0.1 and playing[name].music then
|
--print("-- music count", playing[name].music)
|
||||||
|
|
||||||
playing[name].music = nil
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
-- get foot and head level nodes at player position
|
-- get foot and head level nodes at player position
|
||||||
@ -198,7 +202,7 @@ minetest.register_globalstep(function(dtime)
|
|||||||
|
|
||||||
--print(string.format("elapsed time: %.4f\n", os.clock() - t1))
|
--print(string.format("elapsed time: %.4f\n", os.clock() - t1))
|
||||||
|
|
||||||
ok = playing[player_name] -- everything starts off ok if player around
|
ok = playing[player_name] -- everything starts off ok if player found
|
||||||
|
|
||||||
-- are we playing something already?
|
-- are we playing something already?
|
||||||
if ok and playing[player_name].handler then
|
if ok and playing[player_name].handler then
|
||||||
@ -295,19 +299,23 @@ minetest.register_chatcommand("svol", {
|
|||||||
-- music volume command (0 stops music)
|
-- music volume command (0 stops music)
|
||||||
minetest.register_chatcommand("mvol", {
|
minetest.register_chatcommand("mvol", {
|
||||||
params = "<mvol>",
|
params = "<mvol>",
|
||||||
description = "set music volume (0.1 to 1.0)",
|
description = "set music volume (0.1 to 1.0, 0 to stop music)",
|
||||||
privs = {server = true},
|
privs = {server = true},
|
||||||
|
|
||||||
func = function(name, param)
|
func = function(name, param)
|
||||||
|
|
||||||
MUSICVOLUME = tonumber(param) or MUSICVOLUME
|
MUSICVOLUME = tonumber(param) or MUSICVOLUME
|
||||||
|
|
||||||
-- ability to stop music just as it begins
|
-- ability to stop music by setting volume to 0
|
||||||
if MUSICVOLUME == 0 and playing[name].music then
|
if MUSICVOLUME == 0 and playing[name].music
|
||||||
|
and playing[name].music >= 0 then
|
||||||
|
|
||||||
minetest.sound_stop(playing[name].music)
|
minetest.sound_stop(playing[name].music)
|
||||||
|
|
||||||
|
playing[name].music = -1
|
||||||
end
|
end
|
||||||
|
|
||||||
if MUSICVOLUME < 0.1 then MUSICVOLUME = 0.1 end
|
if MUSICVOLUME < 0 then MUSICVOLUME = 0 end
|
||||||
if MUSICVOLUME > 1.0 then MUSICVOLUME = 1.0 end
|
if MUSICVOLUME > 1.0 then MUSICVOLUME = 1.0 end
|
||||||
|
|
||||||
return true, "Music volume set to " .. MUSICVOLUME
|
return true, "Music volume set to " .. MUSICVOLUME
|
||||||
|
Loading…
Reference in New Issue
Block a user