generated from your-land/yl_template
Implements callback fir 5.9.0
This commit is contained in:
parent
654e63cbc5
commit
d9fce0231c
@ -4,9 +4,10 @@ local chatcommand_definition = {
|
||||
description = yl_skinsdb_addon.t("chatcommand_import_skins_description"),
|
||||
privs = {[yl_skinsdb_addon.settings.admin_priv] = true},
|
||||
func = function(name, param)
|
||||
local success, message = yl_skinsdb_addon.load_skins(
|
||||
yl_skinsdb_addon.settings.path_textures,
|
||||
yl_skinsdb_addon.callback_dam)
|
||||
local success, message = yl_skinsdb_addon.load_skins(name,
|
||||
yl_skinsdb_addon.settings
|
||||
.path_textures,
|
||||
true)
|
||||
if success then
|
||||
return true, message
|
||||
else
|
||||
|
@ -1,7 +1,7 @@
|
||||
-- Use this file to initialize variables once after server start and check everything is in place
|
||||
local function run_each_serverstart()
|
||||
yl_skinsdb_addon.data = {}
|
||||
yl_skinsdb_addon.load_skins(yl_skinsdb_addon.settings.path_textures)
|
||||
yl_skinsdb_addon.load_skins("", yl_skinsdb_addon.settings.path_textures)
|
||||
end
|
||||
|
||||
run_each_serverstart()
|
||||
|
88
internal.lua
88
internal.lua
@ -11,7 +11,10 @@ end
|
||||
|
||||
function yl_skinsdb_addon.log(text) return log(text) end
|
||||
|
||||
local function load_skins(path_textures, callback_dam)
|
||||
local delivered = {} -- delivered[filename][receiver] = true
|
||||
local requested = {} -- requested[filename] = sender
|
||||
|
||||
local function load_skins(name, path_textures, callback_available)
|
||||
-- Load skins from the current mod directory
|
||||
local path_skins = yl_skinsdb_addon.worldpath .. path_textures
|
||||
local dir_list = minetest.get_dir_list(path_skins)
|
||||
@ -27,45 +30,42 @@ local function load_skins(path_textures, callback_dam)
|
||||
for _, filename in pairs(dir_list) do
|
||||
if (yl_skinsdb_addon.data[filename] == nil) then
|
||||
local dam_options = {filepath = path_skins .. DIR_DELIM .. filename}
|
||||
yl_skinsdb_addon.data[filename] = true
|
||||
delivered[filename] = {}
|
||||
requested[filename] = name
|
||||
local do_callback
|
||||
if (callback_available == true) then
|
||||
do_callback = function(p_name)
|
||||
yl_skinsdb_addon.callback_dam(p_name, path_skins, filename)
|
||||
end
|
||||
else
|
||||
yl_skinsdb_addon.callback_dam(name, path_skins, filename)
|
||||
end
|
||||
local success_dam = minetest.dynamic_add_media(dam_options,
|
||||
callback_dam)
|
||||
-- TODO: Either move everything below to the callback OR
|
||||
-- evne worse, only go on after each file was delivered to each player
|
||||
-- That means having a file of players and marking each as "received"
|
||||
-- only after the last player got the file, make the skin happen
|
||||
local success_rs, message_rs =
|
||||
skins.register_skin(path_skins, filename)
|
||||
if success_rs == true then
|
||||
imported_skins_list[filename] = "import"
|
||||
log("Added skin " .. dump(filename))
|
||||
do_callback)
|
||||
if (success_dam == true) then
|
||||
yl_skinsdb_addon.data[filename] = true
|
||||
imported_skins_list[filename] = true
|
||||
good = good + 1
|
||||
else
|
||||
imported_skins_list[filename] = "noimport"
|
||||
log("Cannot add skin " .. dump(filename) .. " Reason: " ..
|
||||
dump(message_rs))
|
||||
imported_skins_list[filename] = false
|
||||
bad = bad + 1
|
||||
end
|
||||
else
|
||||
imported_skins_list[filename] = "exists"
|
||||
log("Cannot add skin " .. dump(filename) .. " already exists.")
|
||||
bad = bad + 1
|
||||
total = total + 1
|
||||
end
|
||||
total = total + 1
|
||||
end
|
||||
|
||||
local return_message = "Total: " .. tostring(total) .. ", good: " ..
|
||||
tostring(good) .. ", bad: " .. tostring(bad) ..
|
||||
"\n"
|
||||
for k, state in pairs(imported_skins_list) do
|
||||
if (state == "import") then
|
||||
if (state == true) then
|
||||
return_message = return_message .. "Import success: " .. k .. "\n"
|
||||
elseif (state == "noimport") then
|
||||
elseif (state == false) then
|
||||
return_message = return_message .. "Import failed: " .. k .. "\n"
|
||||
end
|
||||
end
|
||||
|
||||
if (good > 0) then
|
||||
if (bad == 0) then
|
||||
success = true
|
||||
else
|
||||
success = false
|
||||
@ -74,8 +74,44 @@ local function load_skins(path_textures, callback_dam)
|
||||
return success, return_message
|
||||
end
|
||||
|
||||
function yl_skinsdb_addon.load_skins(path_textures, callback)
|
||||
return load_skins(path_textures, callback)
|
||||
function yl_skinsdb_addon.load_skins(name, path_textures, callback)
|
||||
return load_skins(name, path_textures, callback)
|
||||
end
|
||||
|
||||
function yl_skinsdb_addon.callback_dam(name) log("Adds skin for " .. dump(name)) end
|
||||
function yl_skinsdb_addon.callback_dam(name, path_skins, filename)
|
||||
|
||||
delivered[filename][name] = true
|
||||
|
||||
local players = minetest.get_connected_players()
|
||||
|
||||
for _, player in ipairs(players) do
|
||||
local playername = player:get_player_name()
|
||||
local can_receive = (minetest.get_player_information(playername)
|
||||
.protocol_version >= 40)
|
||||
local not_delivered = (delivered[filename][player:get_player_name()] ~=
|
||||
true)
|
||||
if (can_receive and not_delivered) then return false end
|
||||
end
|
||||
|
||||
delivered[filename] = nil
|
||||
|
||||
-- Now every connected player received the file.
|
||||
-- Let's register the skin and tell the person who imported
|
||||
|
||||
local sender = requested[filename] or ""
|
||||
|
||||
local success_rs, message_rs = skins.register_skin(path_skins, filename)
|
||||
local return_message
|
||||
if (success_rs == true) then
|
||||
return_message = "Added skin " .. dump(filename)
|
||||
else
|
||||
return_message = "Cannot add skin " .. dump(filename) .. " Reason: " ..
|
||||
dump(message_rs)
|
||||
end
|
||||
|
||||
log(return_message)
|
||||
minetest.chat_send_player(sender, return_message)
|
||||
|
||||
requested[filename] = nil
|
||||
|
||||
end
|
||||
|
Loading…
Reference in New Issue
Block a user