From c8c107b3008c17a6140821daf4a221bcfe46c31a Mon Sep 17 00:00:00 2001 From: Duane Date: Thu, 7 Jul 2016 21:56:53 -0500 Subject: [PATCH] Add armor hud. Correct armor handling in elixirs. --- elixir.lua | 17 ++---- init.lua | 112 ++++++++++++++++++++++++++-------- textures/fun_caves_shield.png | Bin 0 -> 754 bytes 3 files changed, 92 insertions(+), 37 deletions(-) create mode 100644 textures/fun_caves_shield.png diff --git a/elixir.lua b/elixir.lua index fdb716e..0fa5fa2 100644 --- a/elixir.lua +++ b/elixir.lua @@ -12,22 +12,11 @@ fun_caves.register_status({ player:set_armor_groups(armor) minetest.chat_send_player(player_name, minetest.colorize('#FF0000', 'Your skin feels softer...')) fun_caves.db.status[player_name].armor_elixir = nil + fun_caves.display_armor(player) end, }) -minetest.register_on_joinplayer(function(player) - local player_name = player:get_player_name() - - if fun_caves.db.status[player_name] and fun_caves.db.status[player_name].armor_elixir then - local factor = fun_caves.db.status[player_name].armor_elixir.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 player_name = player:get_player_name() @@ -37,6 +26,7 @@ if fun_caves.expire_elixir_on_death then armor.fleshy = math.min(100, math.max(1, math.ceil(armor.fleshy / factor))) player:set_armor_groups(armor) fun_caves.db.status[player_name].armor_elixir = nil + fun_caves.display_armor(player) end end) end @@ -48,13 +38,14 @@ local function armor(user, factor) if fun_caves.db.status[player_name].armor_elixir then local old_factor = fun_caves.db.status[player_name].armor_elixir.factor - armor.fleshy = math.min(100, math.max(1, math.ceil(armor.fleshy / factor))) + armor.fleshy = math.min(100, math.max(1, math.ceil(armor.fleshy / old_factor))) end 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.set_status(player_name, 'armor_elixir', elixir_duration, {factor = factor}) + fun_caves.display_armor(user) end local descs = { diff --git a/init.lua b/init.lua index 54890e8..e5fdfd6 100644 --- a/init.lua +++ b/init.lua @@ -179,42 +179,35 @@ minetest.register_on_shutdown(function() end) -minetest.register_on_joinplayer(function(player) - local player_name = player:get_player_name() - if not fun_caves.db.status[player_name] then - fun_caves.db.status[player_name] = {} - end -end) - - local hunger_mod = minetest.get_modpath("hunger") fun_caves.hunger_id = {} function fun_caves.hunger_change(player, change) - local name = player:get_player_name() + local player_name = player:get_player_name() if hunger_mod then if change < 0 then - hunger.update_hunger(player, hunger.players[name].lvl + change * 4) + hunger.update_hunger(player, hunger.players[player_name].lvl + change * 4) end return end local hp = player:get_hp() if change < 0 or hp >= 16 then - fun_caves.db.hunger[name] = math.min(20, math.max(0, fun_caves.db.hunger[name] + change)) - player:hud_change(fun_caves.hunger_id[name], 'number', fun_caves.db.hunger[name]) - if fun_caves.db.hunger[name] == 0 then + fun_caves.db.hunger[player_name] = math.min(20, math.max(0, fun_caves.db.hunger[player_name] + change)) + player:hud_change(fun_caves.hunger_id[player_name], 'number', fun_caves.db.hunger[player_name]) + if fun_caves.db.hunger[player_name] == 0 then player:set_hp(player:get_hp() - 1) end end end +local hunger_hud if not hunger_mod then - minetest.register_on_joinplayer(function(player) - local name = player:get_player_name() + hunger_hud = function(player) + local player_name = player:get_player_name() - if not fun_caves.db.hunger[name] then - fun_caves.db.hunger[name] = 20 + if not fun_caves.db.hunger[player_name] then + fun_caves.db.hunger[player_name] = 20 end local hunger_bar = { @@ -223,13 +216,13 @@ if not hunger_mod then offset = {x = 0, y = -90}, name = "hunger", text = "farming_bread.png", - number = fun_caves.db.hunger[name], + number = fun_caves.db.hunger[player_name], direction = 0, size = { x=24, y=24 }, } - fun_caves.hunger_id[name] = player:hud_add(hunger_bar) - end) + fun_caves.hunger_id[player_name] = player:hud_add(hunger_bar) + end minetest.register_on_item_eat(function(hp_change, replace_with_item, itemstack, user, pointed_thing) if hp_change > 0 then @@ -238,14 +231,85 @@ if not hunger_mod then end) minetest.register_on_dieplayer(function(player) - local name = player:get_player_name() + local player_name = player:get_player_name() local pos = vector.round(player:getpos()) if not hunger_mod then - fun_caves.db.hunger[name] = 20 - player:hud_change(fun_caves.hunger_id[name], 'number', 20) + fun_caves.db.hunger[player_name] = 20 + player:hud_change(fun_caves.hunger_id[player_name], 'number', 20) end - minetest.chat_send_player(name, 'Your bones will lie at ('..pos.x..','..pos.y..','..pos.z..'), in ignominy, unless you collect them.') + minetest.chat_send_player(player_name, 'Your bones will lie at ('..pos.x..','..pos.y..','..pos.z..'), in ignominy, unless you collect them.') end) end + +local armor_mod = minetest.get_modpath("3d_armor") +fun_caves.armor_id = {} +local armor_hud +if armor_mod then + fun_caves.display_armor = function(player) + end +else + armor_hud = function(player) + local player_name = player:get_player_name() + + local armor_icon = { + hud_elem_type = 'image', + name = "armor_icon", + text = 'fun_caves_shield.png', + scale = {x=1,y=1}, + position = {x=0.8, y=1}, + offset = {x = -30, y = -80}, + } + + local armor_text = { + hud_elem_type = 'text', + name = "armor_text", + text = '0%', + number = 0xFFFFFF, + position = {x=0.8, y=1}, + offset = {x = 0, y = -80}, + } + + fun_caves.armor_id[player_name] = {} + fun_caves.armor_id[player_name].icon = player:hud_add(armor_icon) + fun_caves.armor_id[player_name].text = player:hud_add(armor_text) + end + + fun_caves.display_armor = function(player) + local player_name = player:get_player_name() + local armor = player:get_armor_groups() + if not armor or not armor.fleshy then + return + end + + player:hud_change(fun_caves.armor_id[player_name].text, 'text', (100 - armor.fleshy)..'%') + end +end + + +minetest.register_on_joinplayer(function(player) + local player_name = player:get_player_name() + + if not fun_caves.db.status[player_name] then + fun_caves.db.status[player_name] = {} + end + + if armor_hud then + armor_hud(player) + end + + if hunger_hud then + hunger_hud(player) + end + + if fun_caves.db.status[player_name] and fun_caves.db.status[player_name].armor_elixir then + local factor = fun_caves.db.status[player_name].armor_elixir.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.after(1, function() + fun_caves.display_armor(player) + end) + end +end) diff --git a/textures/fun_caves_shield.png b/textures/fun_caves_shield.png new file mode 100644 index 0000000000000000000000000000000000000000..d804d2a3b8fe386635aa0f1288b99066b53e5904 GIT binary patch literal 754 zcmVL4j68V~jB-#@OgLFgE%P>@01mjHQL8 z@dKy{gb)>2jY5DRA}a~QWp`(HXJ+SiUMmxy`d2=L|7taw>f3RZCcSTSxh@9>jqJH; zd+F4~x$K{zPYZ7@dVS+n+tx!QOV@4NePXD*LdX$DvJ*6qUj~iC#ZHtQ5Jg9{@bTT6 zl-8tMF2lA=D8uD}p$l3W4u`EBnf4+I!x-)M34(TORTZo%Cno{=w3GD@3=6MV6FO>0 zEn}pSV5>S)kQHemwbAOt0|K0uK@OB)gOErvhsl#mDB(S%eU{Q*OU6;xh(L zT!8?F1h@dKap<0hG#-VrhQS)haz-zS!JL~)i7eFGEh)XjB_t$q8@V+GKtXT>N^0P4 zhZ$p}$UjmUs&zx8r=-=-Bb5)NREVI}0h2<-{)+yJk1)LlZY9Xs+E5Vos;Q!xBF(rF zjY5`YVY|P;WFeFzDB?A6=4<9bDJfeKg7DUMO!V@h;yAsAE>FOs1SWTp8JEz-4HWV` zbddtAmqnl3St!{>Lnn}EU kT4w;@$NIJcfLg7Fzd#C0oXtm!*#H0l07*qoM6N<$f}!V7i~s-t literal 0 HcmV?d00001