Compare commits

17 Commits

Author SHA1 Message Date
4a294c2f14 Update README.txt 2024-08-17 12:55:46 -05:00
87145f0634 Archive repository, update README.txt 2024-08-17 12:49:20 -05:00
c7b597995e Update mod.conf, reformat init.lua, and add luacheckrc 2020-07-13 11:41:11 -04:00
509c036d94 Cleanup as well as adding screenshot and description 2016-01-14 19:34:10 -05:00
1579c47a58 Change drowning detection to player:get_breath() 2014-03-20 10:25:56 -04:00
f516e3904e Merge pull request #2 from webdesigner97/master
add support for groups lava and water
2014-03-20 08:44:47 -04:00
31aff1751a add support for groups lava and water 2014-03-20 12:32:08 +01:00
edd059747c Change license to GPL v3 2014-03-19 12:16:52 -04:00
24644bbb33 Bump version to 0.1.2 2014-03-19 10:50:44 -04:00
7bcdff90d9 Make random messages optional, and add more quips. 2014-03-19 10:48:40 -04:00
d2b31a3ffe Add random table of quips, and bump version to 0.1.1 2014-03-18 20:59:44 -04:00
02a8670823 Fix formatting in README (OCD much?) 2014-03-17 15:15:12 -04:00
327b43428c Clean up code a bit and use variables 2014-03-17 15:10:44 -04:00
0c6591fd0f Merge branch 'master' of https://github.com/4Evergreen4/death_messages 2014-03-17 13:52:03 -04:00
e78359248e Add depends.txt 2014-03-17 13:51:40 -04:00
bb2fe0f677 Fix README.md 2014-03-17 13:25:34 -04:00
163661c2b7 Add all files and bump version to 0.1 2014-03-17 13:23:56 -04:00
13 changed files with 149 additions and 298 deletions

36
.luacheckrc Normal file
View File

@ -0,0 +1,36 @@
read_globals = {
"DIR_DELIM",
"minetest", "core",
"dump", "dump2",
"vector",
"VoxelManip", "VoxelArea",
"PseudoRandom", "PcgRandom",
"ItemStack",
"Settings",
"unpack",
table = {
fields = {
"copy",
"indexof",
"insert_all",
"key_value_swap",
}
},
string = {
fields = {
"split",
"trim",
}
},
math = {
fields = {
"hypot",
"sign",
"factorial"
}
},
}
max_line_length = 80

38
LICENSE.txt Executable file → Normal file
View File

@ -1,9 +1,3 @@
Home / Licenses
GPL v3
GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
@ -678,35 +672,3 @@ may consider it more useful to permit linking proprietary applications with
the library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License. But first, please read
<http://www.gnu.org/philosophy/why-not-lgpl.html>.
Copy license text to clipboard
How to apply this license
Create a text file (typically named LICENSE or LICENSE.txt) in the root of your source code and copy the text of the license into the file.
Note: The Free Software Foundation recommends taking the additional step of adding a boilerplate notice to the top of each file. The boilerplate can be found at the end of the license.
Source
Required
Disclose Source
License and copyright notice
State Changes
Permitted
Commercial Use
Distribution
Modification
Patent Grant
Private Use
Forbidden
Hold Liable
Sublicensing
About Terms of Service
If you have questions or issues, it is always best to consult a legal professional.
This site is licensed under the Creative Commons Attribution 3.0 Unported License.
Demystified with <3 by GitHub, Inc.

View File

@ -1,12 +0,0 @@
Death Messages
==============
A Minetest mod which sends a chat message when a player dies.
Version: 0.1.2 beta
License of source code:
GPL v3
See LICENSE.txt for full legal text

27
README.txt Normal file
View File

@ -0,0 +1,27 @@
As of 2024-08-17, this mod will probably not be updated by me as I lost interest
in Minetest a long time ago and probably will not be coming back.
If you do want to make any changes, here was my list of TODO items that I never got around to:
- Update meta stuff (readme, version, mod.conf, etc.)
- Change settings file to not use do_file and add options for custom messages (with placement of player name(s) anywhere in the message)
- Add some kind of translation support (may be covered by custom messages)
- Use the new API features to poperly detect types of death that weren't feasible before
- Make a small API for registering custom messages for other mods (see dying by corium in technic)
____ _ _ __ __
| _ \ ___ __ _| |_| |__ | \/ | ___ ___ ___ __ _ __ _ ___ ___
| | | |/ _ \/ _` | __| '_ \ | |\/| |/ _ \/ __/ __|/ _` |/ _` |/ _ \/ __|
| |_| | __/ (_| | |_| | | | | | | | __/\__ \__ \ (_| | (_| | __/\__ \
|____/ \___|\__,_|\__|_| |_| |_| |_|\___||___/___/\__,_|\__, |\___||___/
|___/
A Minetest mod which sends a chat message when a player dies.
Version: 0.1.4
License: GPL v3 (see LICENSE.txt)
Dependencies:
none
Please report bugs at the github issue tracker:
https://github.com/4Evergreen4/death_messages/issues/

1
depends.txt Executable file → Normal file
View File

@ -1 +0,0 @@
soundset

1
description.txt Normal file
View File

@ -0,0 +1 @@
A Minetest mod which sends a chat message when a player dies.

325
init.lua Executable file → Normal file
View File

@ -1,272 +1,103 @@
-----------------------------------------------------------------------------------------------
local title = "Death Messages"
local version = "0.1.2"
local mname = "death_messages"
-----------------------------------------------------------------------------------------------
--[[
death_messages - A Minetest mod which sends a chat message when a player dies.
Copyright (C) 2016 EvergreenTree
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
--]]
--------------------------------------------------------------------------------
local title = "Death Messages"
local version = "0.1.4"
local mname = "death_messages"
--------------------------------------------------------------------------------
dofile(minetest.get_modpath("death_messages").."/settings.txt")
-----------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------
-- A table of quips for death messages
-- A table of quips for death messages. The first item in each sub table is the
-- default message used when RANDOM_MESSAGES is disabled.
local messages = {}
-- Another one to avoid double death messages
local whacked = {}
local logfile = minetest.get_worldpath() .. "/death_logs.txt"
-- Fill this table with sounds
local sounds = {
[1] = "death_messages_player_1",
[2] = "death_messages_player_2",
}
-- Lava death messages
messages.lava = {
"%s thought lava was cool. / %s pensait que la lave etait cool.",
"%s felt an urgent need to touch lava. / %s s'est senti oblige de toucher la lave.",
"%s fell in lava. / %s est tombe dans la lave.",
"%s died in lava. / %s est mort(e) dans de la lave.",
"%s didn't know lava was very hot. / %s ne savait pas que la lave etait vraiment chaude.",
"%s destroyed Sauron's ring. / %s a detruit l'anneau de Sauron.",
"%s melted into a ball of fire. / %s est devenu une boule de feu",
"%s couldn't resist that warm glow of lava. / %s n'a pas pu se retenir face a cette chaude lueur de lave.",
"%s dug straight down. / %s a creusé a la verticale.",
" melted into a ball of fire.",
" thought lava was cool.",
" melted into a ball of fire.",
" couldn't resist that warm glow of lava.",
" dug straight down.",
" didn't know lava was hot."
}
-- Drowning death messages
messages.water = {
"%s lacked oxygen. / %s a manque d'air.",
"%s ran out of air. / %s n'avait plus d'air.",
"%s tried to impersonate an anchor. / %s a essaye d'usurper l'identite d'une ancre.",
"%s forgot they were not a fish. / %s a oublie qu'il/elle n'etait pas un poisson.",
"%s forgot they needed to breath underwater. / %s a oublie qu'il lui fallait respirer sous l'eau.",
"%s isn't good at swimming. / %s n'est pas bon(ne) en natation.",
"%s looked for the secret of the Unicorn. / %s a cherche le secret de la licorne.",
"%s forgot their scaphander. / %s a oublie son scaphandre.",
"%s failed at swimming lessons. / %s a rate ses cours de natation.",
"%s blew one too many bubbles. / %s a expiré une bulle de trop.",
" drowned.",
" ran out of air.",
" failed at swimming lessons.",
" tried to impersonate an anchor.",
" forgot he wasn't a fish.",
" blew one too many bubbles."
}
-- Burning death messages
messages.fire = {
"%s was a bit too hot. / %s a eu un peu trop chaud.",
"%s was too close to the fire. / %s a ete trop pres du feu.",
"%s just got roasted. / %s vient de se faire rotir.",
"%s got burnt. / %s a ete carbonise.",
"%s thought they were the human torch. / %s s'est prit pour la torche.",
"%s started a fire. / %s a allume le feu.",
"%s burned to a crisp. / %s a brulé comme une chips.",
"%s got a little too warm. / %s a eu un peu trop chaud.",
"%s got too close to the camp fire. / %s s'est approche(e) trop pres du feu de camp.",
"%s just got roasted, hotdog style. / %s vient de se faire rotir facon hotdog.",
"%s was set aflame. More light that way. / %s s'est embrase(e). Ca fait plus de lumiere.",
}
-- Acid death messages
messages.acid = {
"%s has now parts of them missing. / %s a desormais des parties en moins.",
"%s discovered that acid is fun. / %s a decouvert que l'acide, c'est fun.",
"%s put their head where it melted. / %s a mis sa tete la ou elle a fondu.",
"%s discovered that their body in acid, it's like sugar in water. / %s a decouvert que son corps dans l'acide, c'est comme du sucre dans de l'eau.",
"%s thought they were swimming in apple juice. / %s a cru qu'il/elle se baignait dans du jus de pomme.",
"%s gave their body to make an infusion / %s a donne son corps pour faire une infusion.",
"%s drowned into the wrong liquid. / %s a bu la mauvaise tasse.",
"%s tried to test their body's solubility in acid. / %s a voulu tester la solubilite de son corps dans l'acide."
}
-- Quicksands death messages
messages.sand = {
"%s learnt that sand is less fluid than water. / %s a appris que le sable est moins fluide que l'eau.",
"%s joined the mummies. / %s a rejoint les momies.",
"%s got themselves buried. / %s s'est fait(e) ensevelir.",
"%s chose to become a fossil. / %s a choisi la voie de la fossilisation."
" burned to a crisp.",
" got a little too warm.",
" got too close to the camp fire.",
" just got roasted, hotdog style.",
" got burned up. More light that way."
}
-- Other death messages
messages.other = {
"%s did something fatal to them. / %s a fait quelque chose qui lui a ete fatal.",
"%s died. / %s est mort(e).",
"%s left this world. / %s n'est plus de ce monde.",
"%s reached miner's heaven. / %s a rejoint le paradis des mineurs.",
"%s lost their life. / %s a perdu la vie.",
"%s saw the light. / %s a vu la lumiere.",
"%s fell from a bit too high. / %s est tombe d'un peu trop haut.",
"%s slipped on a banana skin. / %s a glisse sur une peau de banane.",
"%s wanted to test their super powers. / %s a voulu tester ses super pouvoirs.",
"%s gave up on life. / %s a decide de mourir.",
"%s is somewhat dead now. / %s est plus ou moins mort(e) maintenant.",
"%s passed out -permanently. / %s s'est evanoui(e) -pour toujours.",
" died.",
" did something fatal.",
" gave up on life.",
" is somewhat dead now.",
" passed out -permanently."
}
-- Whacking death messages
messages.whacking = {
"%s got whacked by %s. / %s s'est pris une raclee de la part de %s.",
"%s's grave was dug by %s. / La tombe de %s a ete creusee par %s.",
"%s got recycled by %s. / %s s'est fait recycler par %s.",
"%s surely annoyed %s. / %s embetait surement %s."
-- Need to fill
}
messages.monsters_whacking = {
"%s got whacked by a %s. / %s s'est pris une raclee de la part d'un %s.",
"Darwin said : %s was less adapted than a %s. / Darwin a dit : %s etait moins adapte qu'un %s.",
"%s was transformed into a doormat by a %s. / %s s'est fait transformer en paillasson par un %s.",
-- Need to fill
}
-- Monsters
local monsters = {
["mobs:fireball"] = "dungeon master",
["mobs:dungeon_master"] = "dungeon master",
["mobs:spider"] = "spider",
["mobs:sand_monster"] = "sand monster",
["mobs:cow"] = "cow",
["mobs:creeper"] = "creeper",
["mobs:dog"] = "dog",
["mobs:greenbig"] = "big green slim",
["mobs:greenmedium"] = "medium green slim",
["mobs:greensmall"] = "small green slim",
["mobs:lavabig"] = "big lava slim",
["mobs:lavamedium"] = "medium lava slim",
["mobs:lavasmall"] = "small lava slim",
["mobs:yeti"] = "yeti",
["mobs:snowball"] = "yeti",
["mobs:npc"] = "npc",
["mobs:npc_female"] = "female npc",
["mobs:oerkki"] = "oerkki",
["mobs:stone_monster"] = "stone monster",
["mobs:dirt_monster"] = "dirt monster",
["mobs:goat"] = "goat",
["mobs:wolf"] = "wolf",
["mobs:tree_monster"] = "tree monster",
["mobs:mese_arrow"] = "mese monster",
["mobs:zombie"] = "zombie",
["mobs:minotaur"] = "minotaur",
["mobs:pumba"] = "warthog",
["tsm_pyramids:mummy"] = "mummy",
["mobs:shark_lg"] = "large shark",
["mobs:shark_md"] = "medium shark",
["mobs:pumpking"] = "pumpking",
["mobs:pumpboom"] = "pumpboom",
["mobs:mese_dragon"] = "mese_dragon",
}
local function broadcast_death(msg)
minetest.chat_send_all(msg)
local logfilep = io.open(logfile, "a")
logfilep:write(os.date("[%Y-%m-%d %H:%M:%S] ") .. msg .. "\n")
logfilep:close()
if irc then
irc:say(msg)
end
function get_message(mtype)
if RANDOM_MESSAGES then
return messages[mtype][math.random(1, #messages[mtype])]
else
return messages[1] -- 1 is the index for the non-random message
end
end
local function sound_play_all(dead)
for _, p in ipairs(minetest.get_connected_players()) do
local player_name = p:get_player_name()
if player_name and player_name ~= dead then
minetest.sound_play("death_messages_people_1",{to_player=player_name, gain=soundset.get_gain(player_name,"other")})
end
end
end
minetest.register_on_dieplayer(function(player)
local player_name = player:get_player_name()
local node = minetest.registered_nodes[
minetest.get_node(player:getpos()).name
]
if minetest.is_singleplayer() then
player_name = "You"
end
-- Death by lava
if node.groups.lava ~= nil then
minetest.chat_send_all(player_name .. get_message("lava"))
-- Death by drowning
elseif player:get_breath() == 0 then
minetest.chat_send_all(player_name .. get_message("water"))
-- Death by fire
elseif node.name == "fire:basic_flame" then
minetest.chat_send_all(player_name .. get_message("fire"))
-- Death by something else
else
minetest.chat_send_all(player_name .. get_message("other"))
end
minetest.register_on_punchplayer(function(player, hitter, time,
tool_caps, dir, damage)
if player:get_hp() - damage <= 0 and not whacked[player:get_player_name()] then
local player_name = player:get_player_name()
local death_message
if hitter:is_player() then
death_message = string.format(messages.whacking[math.random(1,#messages.whacking)], player_name, hitter:get_player_name(), player_name, hitter:get_player_name())
else
local entity_name = monsters[hitter:get_luaentity().name] or "monster"
death_message = string.format(messages.monsters_whacking[math.random(1, #messages.monsters_whacking)], player_name, entity_name, player_name, entity_name)
end
broadcast_death(death_message)
minetest.sound_play(sounds[math.random(1,#sounds)],{to_player=player:get_player_name(),gain=soundset.get_gain(player:get_player_name(),"other")})
sound_play_all(player:get_player_name())
whacked[player_name] = true
end
end)
minetest.register_on_leaveplayer(function(player)
whacked[player:get_player_name()] = nil
end)
minetest.register_on_respawnplayer(function(player)
whacked[player:get_player_name()] = nil
end)
if RANDOM_MESSAGES == true then
minetest.register_on_dieplayer(function(player)
local player_name = player:get_player_name()
local node = minetest.registered_nodes[minetest.get_node(player:getpos()).name]
if minetest.is_singleplayer() then
player_name = "You"
end
local death_message = ""
if not whacked[player_name] then
-- Death by lava
if node.groups.lava ~= nil then
death_message = messages.lava[math.random(1,#messages.lava)]
-- Death by acid
elseif node.groups.acid ~= nil then
death_message = messages.acid[math.random(1,#messages.acid)]
-- Death by drowning
elseif player:get_breath() == 0 and node.groups.water then
death_message = messages.water[math.random(1,#messages.water)]
-- Death by fire
elseif node.name == "fire:basic_flame" then
death_message = messages.fire[math.random(1,#messages.fire)]
-- Death in quicksand
elseif player:get_breath() == 0 and node.name == "default:sand_source" or node.name == "default:sand_flowing" then
death_message = messages.sand[math.random(1,#messages.sand)]
-- Death by something else
else
death_message = messages.other[math.random(1,#messages.other)]
end
-- Actually tell something
death_message = string.format(death_message, player_name, player_name)
broadcast_death(death_message)
minetest.sound_play(sounds[math.random(1,#sounds)],{to_player=player_name,gain=soundset.get_gain(player_name, "other")})
sound_play_all(player_name)
whacked[player_name] = true
end
end)
else
-- Should we keep that part?
minetest.register_on_dieplayer(function(player)
local player_name = player:get_player_name()
local node = minetest.registered_nodes[minetest.get_node(player:getpos()).name]
if minetest.is_singleplayer() then
player_name = "You"
end
if not whacked[player_name] then
-- Death by lava
if node.groups.lava ~= nil then
minetest.chat_send_all(player_name .. " melted into a ball of fire")
-- Death by drowning
elseif player:get_breath() == 0 then
minetest.chat_send_all(player_name .. " ran out of air.")
-- Death by fire
elseif node.name == "fire:basic_flame" then
minetest.chat_send_all(player_name .. " burned to a crisp.")
-- Death by something else
else
minetest.chat_send_all(player_name .. " died.")
end
end
minetest.sound_play(sounds[math.random(1,#sounds)],{to_player=player:get_player_name(),gain=soundset.get_gain(player:get_player_name(),"other")})
sound_play_all(player:get_player_name())
end)
end
-----------------------------------------------------------------------------------------------
minetest.log("action", "[Mod] "..title.." ["..version.."] ["..mname.."] Loaded...")
-----------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------
print("[Mod] "..title.." ["..version.."] ["..mname.."] Loaded...")
--------------------------------------------------------------------------------

7
mod.conf Normal file
View File

@ -0,0 +1,7 @@
name = death_messages
title = Death Messages
author = Evergreen
description = Sends a chat message when a player dies (with customizable messages)
license = GPL v3
forum = https://forum.minetest.net/viewtopic.php?t=8821
version = 0.1.4

BIN
screenshot.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

0
settings.txt Executable file → Normal file
View File

Binary file not shown.

Binary file not shown.

Binary file not shown.