mirror of
https://github.com/luanti-org/minetest_game.git
synced 2025-05-21 06:43:17 -04:00
Function calls on offline players workaround
This commit is contained in:
parent
c5e04b0e84
commit
e03266dd4f
1 changed files with 28 additions and 4 deletions
|
@ -48,13 +48,17 @@ end
|
||||||
local players = {}
|
local players = {}
|
||||||
player_api.player_attached = {}
|
player_api.player_attached = {}
|
||||||
|
|
||||||
|
local function get_player_data(player)
|
||||||
|
return assert(players[player:get_player_name()], "offline_player")
|
||||||
|
end
|
||||||
|
|
||||||
function player_api.get_animation(player)
|
function player_api.get_animation(player)
|
||||||
return players[player:get_player_name()]
|
return get_player_data(player)
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Called when a player's appearance needs to be updated
|
-- Called when a player's appearance needs to be updated
|
||||||
function player_api.set_model(player, model_name)
|
function player_api.set_model(player, model_name)
|
||||||
local player_data = players[player:get_player_name()]
|
local player_data = get_player_data(player)
|
||||||
if player_data.model == model_name then
|
if player_data.model == model_name then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
@ -91,7 +95,7 @@ function player_api.set_model(player, model_name)
|
||||||
end
|
end
|
||||||
|
|
||||||
function player_api.set_textures(player, textures)
|
function player_api.set_textures(player, textures)
|
||||||
local player_data = players[player:get_player_name()]
|
local player_data = get_player_data(player)
|
||||||
local model = models[player_data.model]
|
local model = models[player_data.model]
|
||||||
local new_textures = model and model.textures or textures
|
local new_textures = model and model.textures or textures
|
||||||
player_data.textures = new_textures
|
player_data.textures = new_textures
|
||||||
|
@ -99,7 +103,7 @@ function player_api.set_textures(player, textures)
|
||||||
end
|
end
|
||||||
|
|
||||||
function player_api.set_animation(player, anim_name, speed)
|
function player_api.set_animation(player, anim_name, speed)
|
||||||
local player_data = players[player:get_player_name()]
|
local player_data = get_player_data(player)
|
||||||
local model = models[player_data.model]
|
local model = models[player_data.model]
|
||||||
if not (model and model.animations[anim_name]) then
|
if not (model and model.animations[anim_name]) then
|
||||||
return
|
return
|
||||||
|
@ -178,3 +182,23 @@ minetest.register_globalstep(function()
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
-- HACK for keeping backwards compatibility
|
||||||
|
for _, api_function in pairs({"get_animation", "set_animation", "set_model", "set_textures"}) do
|
||||||
|
local original_function = player_api[api_function]
|
||||||
|
player_api[api_function] = function(...)
|
||||||
|
local arguments = {...}
|
||||||
|
local ret -- single value works because get_animation returns only one value
|
||||||
|
local status, err = pcall(function()
|
||||||
|
ret = original_function(unpack(arguments))
|
||||||
|
end)
|
||||||
|
if not status then
|
||||||
|
if err == "offline_player" then
|
||||||
|
minetest.log("warning", api_function .. " called on offline player")
|
||||||
|
return
|
||||||
|
end
|
||||||
|
error(err)
|
||||||
|
end
|
||||||
|
return ret
|
||||||
|
end
|
||||||
|
end
|
Loading…
Add table
Reference in a new issue