Generalize node damage death message

This commit is contained in:
Wuzzy 2019-03-08 21:59:16 +01:00
parent 20576431e1
commit 049c632276
3 changed files with 36 additions and 21 deletions

View file

@ -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

View file

@ -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},

View file

@ -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)