From 049c6322769e4751376f095e846d3ea849e2e2cf Mon Sep 17 00:00:00 2001 From: Wuzzy Date: Fri, 8 Mar 2019 21:59:16 +0100 Subject: [PATCH] Generalize node damage death message --- mods/HUD/mcl_death_messages/init.lua | 40 +++++++++++++--------------- mods/ITEMS/mcl_core/nodes_liquid.lua | 9 +++++++ mods/ITEMS/mcl_fire/init.lua | 8 ++++++ 3 files changed, 36 insertions(+), 21 deletions(-) diff --git a/mods/HUD/mcl_death_messages/init.lua b/mods/HUD/mcl_death_messages/init.lua index 85e51c84c..1436205a8 100644 --- a/mods/HUD/mcl_death_messages/init.lua +++ b/mods/HUD/mcl_death_messages/init.lua @@ -11,18 +11,6 @@ local msgs = { ["arrow_name"] = { S("%s was shot by an arrow from %s."), }, - ["fire"] = { - S("%s has been cooked crisp."), - S("%s felt the burn."), - S("%s died in the flames."), - S("%s died in a fire."), - }, - ["lava"] = { - S("%s melted in lava."), - S("%s took a bath in a hot lava tub."), - S("%s died in lava."), - S("%s could not survive in lava."), - }, ["drown"] = { S("%s forgot to breathe."), S("%s drowned."), @@ -132,18 +120,27 @@ minetest.register_on_dieplayer(function(player, reason) -- (we add one additional node because the check may fail if the player was -- just barely touching the node with the head) local posses = { pos, {x=pos.x,y=pos.y+1,z=pos.z}, {x=pos.x,y=pos.y+2,z=pos.z}} + local highest_damage = 0 + local highest_damage_def = nil + -- Show message for node that dealt the most damage for p=1, #posses do - local node = minetest.registered_nodes[minetest.get_node(posses[p]).name] - -- Lava - if minetest.get_item_group(node.name, "lava") ~= 0 then - msg = dmsg("lava", name) - break - -- Fire - elseif minetest.get_item_group(node.name, "fire") ~= 0 then - msg = dmsg("fire", name) - break + local def = minetest.registered_nodes[minetest.get_node(posses[p]).name] + local dmg = def.damage_per_second + if dmg and dmg > highest_damage then + highest_damage = dmg + highest_damage_def = def end end + if highest_damage_def and highest_damage_def._mcl_node_death_message then + local field = highest_damage_def._mcl_node_death_message + local field_msg + if type(field) == "table" then + field_msg = field[math.random(1, #field)] + else + field_msg = field + end + msg = string.format(field_msg, name) + end elseif reason.type == "drown" then msg = dmsg("drown", name) elseif reason.type == "punch" then @@ -235,3 +232,4 @@ function mcl_death_messages.player_damage(player, message) last_damages[player:get_player_name()] = { custom = true, message = message } start_damage_reset_countdown(player) end + diff --git a/mods/ITEMS/mcl_core/nodes_liquid.lua b/mods/ITEMS/mcl_core/nodes_liquid.lua index 8fe032054..2fdcb1ba1 100644 --- a/mods/ITEMS/mcl_core/nodes_liquid.lua +++ b/mods/ITEMS/mcl_core/nodes_liquid.lua @@ -6,6 +6,13 @@ local WATER_ALPHA = 179 local WATER_VISC = 1 local LAVA_VISC = 7 +local lava_death_messages = { + S("%s melted in lava."), + S("%s took a bath in a hot lava tub."), + S("%s died in lava."), + S("%s could not survive in lava."), +} + minetest.register_node("mcl_core:water_flowing", { description = S("Flowing Water"), _doc_items_create_entry = false, @@ -129,6 +136,7 @@ minetest.register_node("mcl_core:lava_flowing", { liquid_renewable = false, liquid_range = 3, damage_per_second = 4*2, + _mcl_node_death_message = lava_death_messages, post_effect_color = {a=255, r=208, g=73, b=10}, groups = { lava=3, liquid=2, destroys_items=1, not_in_creative_inventory=1, dig_by_piston=1}, _mcl_blast_resistance = 500, @@ -175,6 +183,7 @@ S([[Lava interacts with water various ways: liquid_renewable = false, liquid_range = 3, damage_per_second = 4*2, + _mcl_node_death_message = lava_death_messages, post_effect_color = {a=255, r=208, g=73, b=10}, stack_max = 64, groups = { lava=3, liquid=2, destroys_items=1, not_in_creative_inventory=1, dig_by_piston=1}, diff --git a/mods/ITEMS/mcl_fire/init.lua b/mods/ITEMS/mcl_fire/init.lua index d85fbf1c6..0ffaf7752 100644 --- a/mods/ITEMS/mcl_fire/init.lua +++ b/mods/ITEMS/mcl_fire/init.lua @@ -12,6 +12,12 @@ local S = minetest.get_translator("mcl_fire") local fire_help = S("Fire is a damaging and destructive but short-lived kind of block. It will destroy and spread towards near flammable blocks, but fire will disappear when there is nothing to burn left. It will be extinguished by nearby water and rain. Fire can be destroyed safely by punching it, but it is hurtful if you stand directly in it. If a fire is started above netherrack or a magma block, it will immediately turn into an eternal fire.") local eternal_fire_help = S("Eternal fire is a damaging and destructive block. It will create fire around it when flammable blocks are nearby. Eternal fire can be extinguished by punches and nearby water blocks. Other than (normal) fire, eternal fire does not get extinguished on its own and also continues to burn under rain. Punching eternal fire is safe, but it hurts if you stand inside.") +local fire_death_messages = { + S("%s has been cooked crisp."), + S("%s felt the burn."), + S("%s died in the flames."), + S("%s died in a fire."), +} minetest.register_node("mcl_fire:fire", { description = S("Fire"), @@ -36,6 +42,7 @@ minetest.register_node("mcl_fire:fire", { buildable_to = true, sunlight_propagates = true, damage_per_second = 1, + _mcl_node_death_message = fire_death_messages, groups = {fire = 1, dig_immediate = 3, not_in_creative_inventory = 1, dig_by_piston=1, destroys_items=1 }, floodable = true, on_flood = function(pos, oldnode, newnode) @@ -115,6 +122,7 @@ minetest.register_node("mcl_fire:eternal_fire", { buildable_to = true, sunlight_propagates = true, damage_per_second = 1, + _mcl_node_death_message = fire_death_messages, groups = {fire = 1, dig_immediate = 3, not_in_creative_inventory = 1, dig_by_piston = 1, destroys_items = 1}, floodable = true, on_flood = function(pos, oldnode, newnode)