diff --git a/mods/PLAYER/mcl_death/init.lua b/mods/PLAYER/mcl_death/init.lua index 33c5c6dce..edc97a2be 100644 --- a/mods/PLAYER/mcl_death/init.lua +++ b/mods/PLAYER/mcl_death/init.lua @@ -1,5 +1,6 @@ -if minetest.setting_getbool("mcl_keep_inventory_on_death") == false then - minetest.register_on_dieplayer(function(player) +minetest.register_on_dieplayer(function(player) + local keep = minetest.setting_getbool("mcl_keep_inventory_on_death") + if keep == false then local inv = player:get_inventory() local pos = player:getpos() local lists = { "main", "craft", "armor" } @@ -16,5 +17,100 @@ if minetest.setting_getbool("mcl_keep_inventory_on_death") == false then pos.z = pos.z - z end end - end) -end + end + + -- Death message + local message = minetest.setting_getbool("mcl_show_death_messages") + if message == nil then message = true end + if message then + local name = player:get_player_name() + + -- Death messages + local msgs = { + ["arrow"] = { + "%s was fatally hit by an arrow.", + "%s has been killed with an arrow.", + }, + ["cactus"] = { + "%s was killed by a cactus.", + "%s was pricked to death.", + }, + ["fire"] = { + "%s has been cooked crisp.", + "%s felt the burn.", + "%s died in the flames.", + "%s died in a fire.", + }, + ["explosion"] = { + "%s was caught in an explosion.", + }, + ["lava"] = { + "%s melted in lava.", + "%s took a bath in a hot lava tub.", + "%s died in lava.", + "%s could not survive in lava.", + }, + ["drown"] = { + "%s forgot to breathe.", + "%s drowned.", + "%s ran out of oxygen.", + }, + ["void"] = { + "%s fell into the endless void.", + }, + ["suffocation"] = { + "%s suffocated to death.", + }, + ["starve"] = { + "%s starved.", + }, + ["murder"] = { + "%s was killed by %s.", + }, + ["falling_anvil"] = { + "%s was smashed by a falling anvil!", + }, + ["falling_block"] = { + "%s was smashed by a falling block.", + "%s was buried under a falling block.", + }, + ["fall_damage"] = { + "%s fell from a high cliff.", + "%s took fatal fall damage.", + "%s fell victim to gravity.", + }, + ["other"] = { + "%s died.", + } + } + + -- Select death message + local dmsg = function(mtype, ...) + local r = math.random(1, #msgs[mtype]) + return string.format(msgs[mtype][r], ...) + end + + local node = minetest.registered_nodes[minetest.get_node(player:getpos()).name] + local msg + -- Lava + if minetest.get_item_group(node.name, "lava") ~= 0 then + msg = dmsg("lava", name) + -- Drowning + elseif player:get_breath() == 0 then + msg = dmsg("drown", name) + -- Fire + elseif minetest.get_item_group(node.name, "fire") ~= 0 then + msg = dmsg("fire", name) + -- Void + elseif node.name == "mcl_core:void" then + msg = dmsg("void", name) + -- Cactus + elseif node.name == "mcl_core:cactus" then + msg = dmsg("cactus", name) + -- Other + else + msg = dmsg("other", name) + end + minetest.chat_send_all(msg) + end +end)