forked from mtcontrib/3d_armor
Merge remote-tracking branch 'upstream/master'
This commit is contained in:
@ -2,7 +2,6 @@ local modname = minetest.get_current_modname()
|
||||
local modpath = minetest.get_modpath(modname)
|
||||
local worldpath = minetest.get_worldpath()
|
||||
local last_punch_time = {}
|
||||
local pending_players = {}
|
||||
local timer = 0
|
||||
|
||||
dofile(modpath.."/api.lua")
|
||||
@ -181,11 +180,7 @@ local function validate_armor_inventory(player)
|
||||
end
|
||||
|
||||
local function init_player_armor(initplayer)
|
||||
local name = initplayer:get_player_name()
|
||||
local pos = initplayer:get_pos()
|
||||
if not name or not pos then
|
||||
return false
|
||||
end
|
||||
local name = assert(initplayer:get_player_name())
|
||||
local armor_inv = minetest.create_detached_inventory(name.."_armor", {
|
||||
on_put = function(inv, listname, index, stack, player)
|
||||
validate_armor_inventory(player)
|
||||
@ -224,6 +219,11 @@ local function init_player_armor(initplayer)
|
||||
if player:get_player_name() ~= name then
|
||||
return 0
|
||||
end
|
||||
--cursed items cannot be unequiped by the player
|
||||
local is_cursed = minetest.get_item_group(stack:get_name(), "cursed") ~= 0
|
||||
if not minetest.is_creative_enabled(player) and is_cursed then
|
||||
return 0
|
||||
end
|
||||
return stack:get_count()
|
||||
end,
|
||||
allow_move = function(inv, from_list, from_index, to_list, to_index, count, player)
|
||||
@ -251,7 +251,6 @@ local function init_player_armor(initplayer)
|
||||
end
|
||||
end
|
||||
armor.def[name] = {
|
||||
init_time = minetest.get_gametime(),
|
||||
level = 0,
|
||||
state = 0,
|
||||
count = 0,
|
||||
@ -284,7 +283,6 @@ local function init_player_armor(initplayer)
|
||||
end
|
||||
end
|
||||
armor:set_player_armor(initplayer)
|
||||
return true
|
||||
end
|
||||
|
||||
-- Armor Player Model
|
||||
@ -325,15 +323,7 @@ end)
|
||||
|
||||
minetest.register_on_joinplayer(function(player)
|
||||
default.player_set_model(player, "3d_armor_character.b3d")
|
||||
local player_name = player:get_player_name()
|
||||
|
||||
minetest.after(0, function()
|
||||
-- TODO: Added in 7566ecc - What's the prupose?
|
||||
local pplayer = minetest.get_player_by_name(player_name)
|
||||
if pplayer and init_player_armor(pplayer) == false then
|
||||
pending_players[pplayer] = 0
|
||||
end
|
||||
end)
|
||||
init_player_armor(player)
|
||||
end)
|
||||
|
||||
minetest.register_on_leaveplayer(function(player)
|
||||
@ -342,7 +332,6 @@ minetest.register_on_leaveplayer(function(player)
|
||||
armor.def[name] = nil
|
||||
armor.textures[name] = nil
|
||||
end
|
||||
pending_players[player] = nil
|
||||
end)
|
||||
|
||||
if armor.config.drop == true or armor.config.destroy == true then
|
||||
@ -355,9 +344,12 @@ if armor.config.drop == true or armor.config.destroy == true then
|
||||
for i=1, armor_inv:get_size("armor") do
|
||||
local stack = armor_inv:get_stack("armor", i)
|
||||
if stack:get_count() > 0 then
|
||||
table.insert(drop, stack)
|
||||
armor:run_callbacks("on_unequip", player, i, stack)
|
||||
armor_inv:set_stack("armor", i, nil)
|
||||
--soulbound armors remain equipped after death
|
||||
if minetest.get_item_group(stack:get_name(), "soulbound") == 0 then
|
||||
table.insert(drop, stack)
|
||||
armor:run_callbacks("on_unequip", player, i, stack)
|
||||
armor_inv:set_stack("armor", i, nil)
|
||||
end
|
||||
end
|
||||
end
|
||||
armor:save_armor_inventory(player)
|
||||
@ -393,8 +385,8 @@ if armor.config.drop == true or armor.config.destroy == true then
|
||||
end)
|
||||
end
|
||||
end)
|
||||
else -- reset un-dropped armor and it's effects
|
||||
minetest.register_on_respawnplayer(function(player)
|
||||
-- reset un-dropped armor and it's effects
|
||||
armor:set_player_armor(player)
|
||||
end)
|
||||
end
|
||||
@ -461,18 +453,6 @@ minetest.register_globalstep(function(dtime)
|
||||
end
|
||||
timer = 0
|
||||
|
||||
for player, count in pairs(pending_players) do
|
||||
local remove = init_player_armor(player) == true
|
||||
pending_players[player] = count + 1
|
||||
if remove == false and count > armor.config.init_times then
|
||||
minetest.log("warning", "3d_armor: Failed to initialize player")
|
||||
remove = true
|
||||
end
|
||||
if remove == true then
|
||||
pending_players[player] = nil
|
||||
end
|
||||
end
|
||||
|
||||
-- water breathing protection, added by TenPlus1
|
||||
if armor.config.water_protect == true then
|
||||
for _,player in pairs(minetest.get_connected_players()) do
|
||||
|
Reference in New Issue
Block a user