From 02337a1187e5a2cd0a0fb638d7fa9ee5c720f1f7 Mon Sep 17 00:00:00 2001 From: Duane Date: Sun, 26 Jun 2016 19:43:08 -0500 Subject: [PATCH] Accomodate armor mods. --- abms.lua | 20 +++++++++++--------- chat.lua | 15 ++++++++------- depends.txt | 1 + elixir.lua | 39 ++++++++++++++++++++++++++++++--------- init.lua | 2 +- 5 files changed, 51 insertions(+), 26 deletions(-) diff --git a/abms.lua b/abms.lua index 0b56ce2..1b82f77 100644 --- a/abms.lua +++ b/abms.lua @@ -97,7 +97,6 @@ minetest.register_globalstep(function(dtime) -- Spawn mobs in fortresses -- only when a player is near local minetest_find_nodes_in_area = minetest.find_nodes_in_area - local armor_expire = fun_caves.armor_expire local players = minetest.get_connected_players() local do_fortress_spawns = (fun_caves.fortress_spawns and #fun_caves.fortress_spawns > 0) for i = 1, #players do @@ -156,14 +155,6 @@ minetest.register_globalstep(function(dtime) player:set_hp(20) return else - if fun_caves.elixir_armor and armor_expire and armor_expire[player_name] and armor_expire[player_name] < time then - local armor = player:get_armor_groups() - armor.fleshy = 100 - player:set_armor_groups(armor) - minetest.chat_send_player(player_name, minetest.colorize('#FF0000', 'Your skin feels softer...')) - armor_expire[player_name] = nil - end - local minp = vector.subtract(pos, 0.5) local maxp = vector.add(pos, 0.5) @@ -185,6 +176,17 @@ minetest.register_globalstep(function(dtime) if #counts > 1 then player:set_hp(player:get_hp() - 1) end + + -- Check for elixirs. This doesn't have to be precise. + local armor_expire = fun_caves.db.armor_expire + if fun_caves.elixir_armor and armor_expire and armor_expire[player_name] and armor_expire[player_name].time < time then + local factor = armor_expire[player_name].factor + local armor = player:get_armor_groups() + armor.fleshy = math.min(100, math.max(1, math.ceil(armor.fleshy / factor))) + player:set_armor_groups(armor) + minetest.chat_send_player(player_name, minetest.colorize('#FF0000', 'Your skin feels softer...')) + armor_expire[player_name] = nil + end end -- ... from hunger (even less often). diff --git a/chat.lua b/chat.lua index bcf860e..caecd0b 100644 --- a/chat.lua +++ b/chat.lua @@ -2,18 +2,19 @@ minetest.register_chatcommand("armor", { params = "", description = "Display your armor values", privs = {}, - func = function(name, param) - local player = minetest.get_player_by_name(name) + func = function(player_name, param) + local player = minetest.get_player_by_name(player_name) local armor = player:get_armor_groups() if armor then - minetest.chat_send_player(name, "Armor:") + minetest.chat_send_player(player_name, "Armor:") for group, value in pairs(armor) do - minetest.chat_send_player(name, " "..group.." "..value) + minetest.chat_send_player(player_name, " "..group.." "..value) end - if fun_caves.armor_expire and fun_caves.armor_expire[name] then - local min = math.floor((fun_caves.armor_expire[name] - minetest.get_gametime()) / 60) - minetest.chat_send_player(name, "Your elixir will expire in "..min..' minutes.') + if fun_caves.db.armor_expire and fun_caves.db.armor_expire[player_name] then + local armor_time = fun_caves.db.armor_expire[player_name].time + local min = math.floor((armor_time - minetest.get_gametime()) / 60) + minetest.chat_send_player(player_name, "Your armor elixir will expire in "..min..' minutes.') end end end, diff --git a/depends.txt b/depends.txt index 7e4fe1b..7eca5ec 100644 --- a/depends.txt +++ b/depends.txt @@ -11,3 +11,4 @@ mobs_creeper? kpgmobs? mobs_fish? dmobs? +3d_armor? diff --git a/elixir.lua b/elixir.lua index 752e8d3..d566174 100644 --- a/elixir.lua +++ b/elixir.lua @@ -1,27 +1,48 @@ -fun_caves.armor_expire = {} +local elixir_duration = 3600 + + +minetest.register_on_joinplayer(function(player) + local player_name = player:get_player_name() + + if fun_caves.db.armor_expire[player_name] then + local factor = fun_caves.db.armor_expire[player_name].factor + local armor = player:get_armor_groups() + armor.fleshy = math.min(100, math.max(1, math.ceil(armor.fleshy * factor))) + player:set_armor_groups(armor) + end +end) + if fun_caves.expire_elixir_on_death then minetest.register_on_dieplayer(function(player) - local name = player:get_player_name() - if fun_caves.armor_expire[name] then - player:set_armor_groups({fleshy = 100}) - fun_caves.armor_expire[name] = nil + local player_name = player:get_player_name() + if fun_caves.db.armor_expire[player_name] then + local factor = fun_caves.db.armor_expire[player_name].factor + local armor = player:get_armor_groups() + armor.fleshy = math.min(100, math.max(1, math.ceil(armor.fleshy / factor))) + player:set_armor_groups(armor) + fun_caves.db.armor_expire[player_name] = nil end end) end + local function armor(user, factor) local player_name = user:get_player_name() local armor = user:get_armor_groups() - if fun_caves.armor_expire[player_name] then - armor.fleshy = 100 + if fun_caves.db.armor_expire[player_name] then + local old_factor = fun_caves.db.armor_expire[player_name].factor + armor.fleshy = math.min(100, math.max(1, math.ceil(armor.fleshy / factor))) end - armor.fleshy = armor.fleshy * factor + armor.fleshy = math.min(100, math.max(1, math.ceil(armor.fleshy * factor))) user:set_armor_groups(armor) minetest.chat_send_player(player_name, 'Your skin feels harder...') - fun_caves.armor_expire[player_name] = minetest.get_gametime() + 3600 + fun_caves.db.armor_expire[player_name] = { + time = minetest.get_gametime() + elixir_duration, + factor = factor, + } end local descs = { diff --git a/init.lua b/init.lua index 9795f45..7e5cc38 100644 --- a/init.lua +++ b/init.lua @@ -38,7 +38,7 @@ end if not fun_caves.db then fun_caves.db = {} end -for _, i in pairs({'teleport_data', 'hunger'}) do +for _, i in pairs({'teleport_data', 'hunger', 'armor_expire'}) do if not fun_caves.db[i] then fun_caves.db[i] = {} end