diff --git a/init.lua b/init.lua index 88dfc73..7044e35 100644 --- a/init.lua +++ b/init.lua @@ -7,6 +7,7 @@ minetest.override_item("default:water_flowing", { sounds = {} }) minetest.override_item("default:river_water_source", { sounds = {} }) minetest.override_item("default:river_water_flowing", { sounds = {} }) + -- settings local SOUNDVOLUME = 1.0 local MUSICVOLUME = 1.0 @@ -19,8 +20,6 @@ local sound_set_order = {} -- needed because pairs loops randomly through tables local set_nodes = {} -- all the nodes needed for sets --- global functions - -- add set to list ambience.add_set = function(set_name, def) @@ -73,10 +72,7 @@ end -- return set from list using name ambience.get_set = function(set_name) - - if sound_sets[set_name] then - return sound_sets[set_name] - end + return sound_sets[set_name] end @@ -100,11 +96,22 @@ ambience.del_set = function(set_name) end +-- setup table when player joins +minetest.register_on_joinplayer(function(player) + playing[player:get_player_name()] = {} +end) + +-- remove table when player leaves +minetest.register_on_leaveplayer(function(player) + playing[player:get_player_name()] = nil +end) + + -- plays music and selects sound set local get_ambience = function(player, tod, name) -- play server or local music if available - if play_music and playing[name] then + if play_music then -- play at midnight if tod >= 0.0 and tod <= 0.01 then @@ -112,7 +119,7 @@ local get_ambience = function(player, tod, name) if not playing[name].music then playing[name].music = minetest.sound_play("ambience_music", { - to_player = player:get_player_name(), + to_player = name, gain = MUSICVOLUME }) end @@ -123,7 +130,6 @@ local get_ambience = function(player, tod, name) end end - -- get foot and head level nodes at player position local pos = player:get_pos() ; if not pos then return end @@ -168,6 +174,8 @@ local get_ambience = function(player, tod, name) end end end + + return nil, nil -- ADDED end @@ -201,8 +209,7 @@ minetest.register_globalstep(function(dtime) ok = true -- everything starts off ok -- are we playing something already? - if playing[player_name] - and playing[player_name].handler then + if playing[player_name].handler then -- stop current sound if another set active or gain changed if playing[player_name].set ~= set_name @@ -213,8 +220,8 @@ minetest.register_globalstep(function(dtime) minetest.sound_stop(playing[player_name].handler) playing[player_name].set = nil - playing[player_name].handler = nil playing[player_name].gain = nil + playing[player_name].handler = nil else ok = false -- sound set still playing, skip new sound end @@ -246,9 +253,9 @@ minetest.register_globalstep(function(dtime) --print("-- current handler", handler) -- set what player is currently listening to - playing[player_name] = { - set = set_name, gain = MORE_GAIN, handler = handler - } + playing[player_name].set = set_name + playing[player_name].gain = MORE_GAIN + playing[player_name].handler = handler -- set timer to stop sound minetest.after(ambience.length, function() @@ -256,18 +263,17 @@ minetest.register_globalstep(function(dtime) --print("-- after", set_name, handler) -- make sure we are stopping same sound we started - if playing[player_name] - and playing[player_name].handler + if playing[player_name].handler and playing[player_name].handler == handler then --print("-- timed stop", set_name, handler) minetest.sound_stop(handler) - -- reset player variables and backup handler - playing[player_name] = { - set = nil, gain = nil, handler = nil - } + -- reset player variables + playing[player_name].set = nil + playing[player_name].gain = nil + playing[player_name].handler = nil end end) end @@ -290,7 +296,7 @@ minetest.register_chatcommand("svol", { if SOUNDVOLUME > 1.0 then SOUNDVOLUME = 1.0 end return true, "Sound volume set to " .. SOUNDVOLUME - end, + end }) @@ -313,7 +319,7 @@ minetest.register_chatcommand("mvol", { if MUSICVOLUME > 1.0 then MUSICVOLUME = 1.0 end return true, "Music volume set to " .. MUSICVOLUME - end, + end }) diff --git a/soundsets.lua b/soundsets.lua index 657674f..0198966 100644 --- a/soundsets.lua +++ b/soundsets.lua @@ -32,7 +32,7 @@ ambience.add_set("splash", { frequency = 1000, sounds = { - {name = "swim_splashing", length = 3}, + {name = "swim_splashing", length = 3} }, sound_check = function(def)