mirror of
https://git.minetest.land/VoxeLibre/VoxeLibre.git
synced 2024-12-23 08:29:34 +01:00
playerbound music toggle (between 94e554aa1a and 5481f0109c)
This commit is contained in:
parent
32a60c888b
commit
5db1e1876c
3 changed files with 105 additions and 27 deletions
|
@ -1,3 +1,5 @@
|
|||
local S = minetest.get_translator(minetest.get_current_modname())
|
||||
|
||||
local modname = minetest.get_current_modname()
|
||||
local modpath = minetest.get_modpath(modname)
|
||||
|
||||
|
@ -46,7 +48,7 @@ local function pick_track(dimension, underground)
|
|||
minetest.log("action", "[mcl_music] Playing track: " .. chosen_track .. ", for context: " .. track_key)
|
||||
return chosen_track
|
||||
else
|
||||
--?
|
||||
-- ?
|
||||
end
|
||||
|
||||
return nil
|
||||
|
@ -102,38 +104,40 @@ local function play()
|
|||
|
||||
local day_count = minetest.get_day_count()
|
||||
for _, player in pairs(minetest.get_connected_players()) do
|
||||
local player_name = player:get_player_name()
|
||||
local hp = player:get_hp()
|
||||
local pos = player:get_pos()
|
||||
local dimension = mcl_worlds.pos_to_dimension(pos)
|
||||
if not player:get_meta():get("mcl_music:disable") then
|
||||
local player_name = player:get_player_name()
|
||||
local hp = player:get_hp()
|
||||
local pos = player:get_pos()
|
||||
local dimension = mcl_worlds.pos_to_dimension(pos)
|
||||
|
||||
local listener = listeners[player_name]
|
||||
local handle = listener and listener.handle
|
||||
local listener = listeners[player_name]
|
||||
local handle = listener and listener.handle
|
||||
|
||||
--local old_hp = listener and listener.hp
|
||||
--local is_hp_changed = old_hp and (math.abs(old_hp - hp) > 0.00001) or false
|
||||
--local old_hp = listener and listener.hp
|
||||
--local is_hp_changed = old_hp and (math.abs(old_hp - hp) > 0.00001) or false
|
||||
|
||||
local old_dimension = listener and listener.dimension
|
||||
local is_dimension_changed = old_dimension and (old_dimension ~= dimension) or false
|
||||
local old_dimension = listener and listener.dimension
|
||||
local is_dimension_changed = old_dimension and (old_dimension ~= dimension) or false
|
||||
|
||||
--minetest.log("handle: " .. dump (handle))
|
||||
if is_dimension_changed then
|
||||
stop_music_for_listener_name(player_name)
|
||||
if not listeners[player_name] then
|
||||
listeners[player_name] = {}
|
||||
end
|
||||
listeners[player_name].hp = hp
|
||||
listeners[player_name].dimension = dimension
|
||||
elseif not handle and (not listener or (listener.day_count ~= day_count)) then
|
||||
local underground = dimension == "overworld" and pos and pos.y < 0
|
||||
local track = pick_track(dimension, underground)
|
||||
if track then
|
||||
play_song(track, player_name, dimension, day_count)
|
||||
-- minetest.log("handle: " .. dump (handle))
|
||||
if is_dimension_changed then
|
||||
stop_music_for_listener_name(player_name)
|
||||
if not listeners[player_name] then
|
||||
listeners[player_name] = {}
|
||||
end
|
||||
listeners[player_name].hp = hp
|
||||
listeners[player_name].dimension = dimension
|
||||
elseif not handle and (not listener or (listener.day_count ~= day_count)) then
|
||||
local underground = dimension == "overworld" and pos and pos.y < 0
|
||||
local track = pick_track(dimension, underground)
|
||||
if track then
|
||||
play_song(track, player_name, dimension, day_count)
|
||||
else
|
||||
--minetest.log("no track found. weird")
|
||||
end
|
||||
else
|
||||
--minetest.log("no track found. weird")
|
||||
--minetest.log("else")
|
||||
end
|
||||
else
|
||||
--minetest.log("else")
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -149,6 +153,10 @@ if music_enabled then
|
|||
stop_music_for_listener_name(player_name)
|
||||
end)
|
||||
|
||||
minetest.register_on_leaveplayer(function(player, timed_out)
|
||||
listeners[player:get_player_name()] = nil
|
||||
end)
|
||||
|
||||
minetest.register_on_respawnplayer(function(player)
|
||||
local player_name = player:get_player_name()
|
||||
stop_music_for_listener_name(player_name)
|
||||
|
@ -156,3 +164,59 @@ if music_enabled then
|
|||
else
|
||||
minetest.log("action", "[mcl_music] In-game music is deactivated")
|
||||
end
|
||||
|
||||
minetest.register_chatcommand("music", {
|
||||
params = "[on|off|invert [<player name>]]",
|
||||
description = S("Turns music for yourself or another player on or off."),
|
||||
func = function(sender_name, params)
|
||||
local argtable = {}
|
||||
for str in string.gmatch(params, "([^%s]+)") do
|
||||
table.insert(argtable, str)
|
||||
end
|
||||
|
||||
local action = argtable[1]
|
||||
local playername = argtable[2]
|
||||
|
||||
local sender = minetest.get_player_by_name(sender_name)
|
||||
local target_player = nil
|
||||
|
||||
if not action or action == "" then action = "invert" end
|
||||
|
||||
if not playername or playername == "" or sender_name == playername then
|
||||
target_player = sender
|
||||
playername =sender_name
|
||||
elseif not minetest.check_player_privs(sender, "debug") then -- Self-use handled above
|
||||
minetest.chat_send_player(sender_name, S("You need the debug privilege in order to turn ingame music on or off for somebody else!"))
|
||||
return
|
||||
else -- Admin
|
||||
target_player = minetest.get_player_by_name(playername)
|
||||
end
|
||||
|
||||
if not target_player then
|
||||
minetest.chat_send_player(sender_name, S("Couldn't find player @1!", playername))
|
||||
return
|
||||
end
|
||||
|
||||
local meta = target_player:get_meta()
|
||||
local display_new_state = "unknown" -- Should never be displayed -> no translation
|
||||
|
||||
if action == "invert" then
|
||||
if not meta:get("mcl_music:disable") then
|
||||
meta:set_int("mcl_music:disable", 1)
|
||||
display_new_state = S("off")
|
||||
else
|
||||
meta:set_string("mcl_music:disable", "") -- This deletes the meta value!
|
||||
display_new_state = S("on")
|
||||
end
|
||||
elseif action == "on" then
|
||||
meta:set_string("mcl_music:disable", "") -- Delete
|
||||
display_new_state = S("on")
|
||||
else
|
||||
meta:set_int("mcl_music:disable", 1)
|
||||
display_new_state = S("off")
|
||||
end
|
||||
|
||||
stop_music_for_listener_name(playername)
|
||||
minetest.chat_send_player(sender_name, S("Set music for @1 to: @2", playername, display_new_state))
|
||||
end,
|
||||
})
|
7
mods/PLAYER/mcl_music/locale/mcl_music.de.tr
Normal file
7
mods/PLAYER/mcl_music/locale/mcl_music.de.tr
Normal file
|
@ -0,0 +1,7 @@
|
|||
# textdomain: mcl_music
|
||||
You need the debug privilege in order to turn ingame music on or off for somebody else!=Sie benötigen das „debug“ Privileg, um die Musik (im Spiel) für jemand anders ein oder aus zu schalten!
|
||||
Couldn't find player @1!= Spieler @1 konnte nicht gefunden werden!
|
||||
Set music for @1 to: @2=Musik für @1 auf @2 gesetzt
|
||||
Turns music for yourself or another player on or off.=Schaltet die Musik für Sie selbst oder jemand anders ein oder aus.
|
||||
on=an
|
||||
off=aus
|
7
mods/PLAYER/mcl_music/locale/template.txt
Normal file
7
mods/PLAYER/mcl_music/locale/template.txt
Normal file
|
@ -0,0 +1,7 @@
|
|||
# textdomain: mcl_music
|
||||
You need the debug privilege in order to turn ingame music on or off for somebody else!=
|
||||
Couldn't find player @1!=
|
||||
Set music for @1 to: @2=
|
||||
Turns music for yourself or another player on or off.=
|
||||
on=
|
||||
off=
|
Loading…
Reference in a new issue