music plays every 20-30 minutes, use /mvol 0 to turn off

This commit is contained in:
tenplus1 2021-06-18 10:11:59 +01:00
parent fe23993419
commit e8c436685d
2 changed files with 29 additions and 20 deletions

View File

@ -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

View File

@ -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
}) })
end
elseif tod > 0.1 and playing[name].music then -- reset music timer after 10 minutes
minetest.after(60 * 10, function(name)
playing[name].music = nil playing[name].music = -1
end, name)
end end
--print("-- music count", playing[name].music)
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