death_messages/init.lua

420 lines
13 KiB
Lua
Raw Normal View History

--[[
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/>.
--]]
2017-07-13 16:30:44 -07:00
--Carbone death coords
--License of media (textures and sounds) From carbone subgame
--------------------------------------
--mods/default/sounds/player_death.ogg: from OpenArena GNU GPL v2.
2014-03-17 10:23:56 -07:00
-----------------------------------------------------------------------------------------------
local title = "Death Messages"
2018-09-04 21:37:31 -07:00
local version = "0.1.4"
local mname = "death_messages"
2014-03-17 10:23:56 -07:00
-----------------------------------------------------------------------------------------------
dofile(minetest.get_modpath("death_messages").."/settings.txt")
-----------------------------------------------------------------------------------------------
2018-09-04 20:23:18 -07:00
local LANG = minetest.settings:get("language")
2018-09-04 20:50:11 -07:00
if not (LANG and (LANG ~= "")) then LANG = "en" end
2018-09-09 23:55:21 -07:00
-- check if stamina and/or hbhunger is used and death may occured by exhausting
2018-09-05 21:21:11 -07:00
local mstamina = minetest.get_modpath("stamina")
2018-09-09 23:55:21 -07:00
local mhbhunger = minetest.get_modpath("hbhunger")
2018-09-05 21:21:11 -07:00
local lstamina = 100
-- check if thirsty is used and death may occured by exhausting
local mthirsty = minetest.get_modpath("thirsty")
local lthirsty = 100
2018-09-06 09:31:32 -07:00
local msunburn = minetest.get_modpath("sunburn")
local lsunburn = 0
-- 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 = {}
local swas = { en = " was ", de = " war " }
local sby = { en = " by ", de = " von " }
local swith = {en = " with ", de = " mit " }
2018-09-04 20:04:39 -07:00
-- Default messages
-- Toxic death messages
2018-09-04 21:16:11 -07:00
messages.toxic = { en = {
" melted into a ball of radioactivity.",
" thought chemical waste was cool.",
" melted into a jittering pile of flesh.",
" couldn't resist that warm glow of toxic water.",
" dug straight down.",
" went into the toxic curtain.",
" thought it was a toxic-tub.",
" is radioactive.",
" didn't know toxic water was radioactive."
2018-09-04 21:16:11 -07:00
},
de={
" konnte dem warmen Glühen des giftigen Wassers nicht widerstehen.",
" wollte wie Hulk werden.",
" ist verstrahlt."
}}
-- Lava death messages
2018-09-04 21:16:11 -07:00
messages.lava = { en = {
" 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.",
" went into the lava curtain.",
" thought it was a hottub.",
" is melted.",
2018-09-09 23:50:19 -07:00
" didn't know lava was hot."
2018-09-04 21:16:11 -07:00
},de={
" dachte über Lava laufen ist wie über Wasser laufen.",
" nahm ein zu heißes Bad in der Lava.",
2018-09-09 23:50:19 -07:00
" schmolz dahin.",
2018-09-04 21:16:11 -07:00
" verbrennt wie Papier.",
2018-09-09 23:50:19 -07:00
" verbrannte sich die Finger."
2018-09-04 21:16:11 -07:00
}}
-- Drowning death messages
2018-09-04 20:54:30 -07:00
messages.water = { en = {
2018-09-04 20:09:27 -07:00
" drowned.",
" ran out of air.",
" failed at swimming lessons.",
" tried to impersonate an anchor.",
" forgot he wasn't a fish.",
2018-09-04 20:54:30 -07:00
" blew one too many bubbles."},
de = {
" ertrank.",
" verlor die Luft.",
" dachte, er sei ein Anker.",
" vergass, dass er kein Fisch ist.",
2018-09-09 23:50:19 -07:00
" ist untergetauch.",
2018-09-04 21:16:11 -07:00
" wohnt jetzt bei den Fischen.",
2018-09-09 23:50:19 -07:00
" starb an einer Überdosis Dihydrogenmonooxyd."
2018-09-04 20:54:30 -07:00
}}
2018-09-04 20:50:11 -07:00
--end
-- Burning death messages
2018-09-04 21:16:11 -07:00
messages.fire = {en = {
" 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."
2018-09-04 21:16:11 -07:00
},de={
" verbrannte sich die Finger.",
" wurde geröstet.",
" brennt wie eine Fackel.",
" spielte mit dem Feuer."
}}
-- Other death messages
2018-09-04 21:16:11 -07:00
messages.other = {en = {
" died.",
" did something fatal.",
" gave up on life.",
" is somewhat dead now.",
" passed out -permanently.",
" kinda screwed up.",
" couldn't fight very well.",
" got 0wn3d.",
" got SMOKED.",
" got hurted by Oerkki.",
" got blowed up."
2018-09-04 21:16:11 -07:00
},de={
" starb.",
2018-09-09 23:50:19 -07:00
" machte etwas tödliches.",
2018-09-04 21:16:11 -07:00
" ist irgendwie nicht mehr da.",
" weilt nicht mehr unter den Lebenden.",
" sieht die Radieschen von unten.",
" dient als Dünger."
}}
2018-09-05 07:52:03 -07:00
-- exhausted
messages.exhausted = {en = {
" was exhausted."
},
de = {
2018-09-09 23:50:19 -07:00
" war erschöpft."
2018-09-05 07:52:03 -07:00
}}
2018-09-05 21:21:11 -07:00
-- thirst
messages.thirst = {en = {
" was too thirsty."
},
de = {
2018-09-09 23:50:19 -07:00
" verdurstete."
2018-09-05 21:21:11 -07:00
}}
2018-09-06 09:31:32 -07:00
messages.sunburn = {en = {
" burned by sun."
},
de = {
2018-09-09 23:50:19 -07:00
" ist von der Sonne verbrannt."
2018-09-06 09:31:32 -07:00
}}
2018-09-05 07:52:03 -07:00
-- PVP Messages
2018-09-04 21:16:11 -07:00
messages.pvp = {en = {
" fisted",
" sliced up",
" rekt",
" punched",
" hacked",
" skewered",
" blasted",
" tickled",
" gotten",
2017-07-13 15:49:56 -07:00
" sword checked",
" turned into a jittering pile of flesh",
" buried",
" served",
" poked",
" attacked viciously",
" busted up",
" schooled",
" told",
" learned",
" chopped up",
" deader than ded ded ded",
" CHOSEN to be the ONE",
" all kinds of messed up",
2017-08-06 09:20:58 -07:00
" smoked like a Newport",
" hurted",
2017-07-13 15:49:56 -07:00
" ballistic-ed",
" jostled",
2017-08-06 09:20:58 -07:00
" messed-da-frig-up",
" lanced",
" shot",
" knocked da heck out",
" pooped on"
2018-09-04 21:16:11 -07:00
},de={
" geschlagen",
" wurde verletzt",
2018-09-09 23:50:19 -07:00
" angeschossen"
2018-09-04 21:16:11 -07:00
}}
2017-07-13 15:49:56 -07:00
-- Player Messages
2018-09-04 21:16:11 -07:00
messages.player = {en = {
2017-07-13 15:49:56 -07:00
" for talking smack about thier mother.",
" for cheating at Tic-Tac-Toe.",
" for being a stinky poop butt.",
" for letting Baggins grief.",
" because it felt like the right thing to do.",
" for spilling milk.",
" for wearing a n00b skin.",
" for not being good at PVP.",
" because they are a n00b.",
" for reasons uncertain.",
2017-08-06 09:20:58 -07:00
" for using a tablet.",
2017-07-13 15:49:56 -07:00
" with the quickness.",
" while texting."
2018-09-04 21:16:11 -07:00
},de={
" weil er nervte.",
" denn er brachte den Müll nicht raus.",
2018-09-09 23:50:19 -07:00
" für das ungeputzte Bad."
2018-09-04 21:16:11 -07:00
}}
2017-07-13 15:49:56 -07:00
-- MOB After Messages
2018-09-04 21:16:11 -07:00
messages.mobs = {en = {
2017-07-13 15:49:56 -07:00
" and was eaten with a gurgling growl.",
" then was cooked for dinner.",
" then went to the supermarket.",
" badly.",
" terribly.",
" horribly.",
" in a haphazard way.",
" that sparkles in the twilight with that evil grin.",
" and now is covered by blood.",
" so swiftly, that not even Chuck Norris could block.",
" for talking smack about Oerkkii's mother.",
" and grimmaced wryly."
2018-09-04 21:16:11 -07:00
},de={
" und ist das Mittagessen.",
2018-09-09 23:50:19 -07:00
" weil er im Weg war."
2018-09-04 21:16:11 -07:00
}}
2018-09-05 08:10:31 -07:00
local function get_message(mtype)
if RANDOM_MESSAGES then
2018-09-09 23:50:19 -07:00
return messages[mtype][LANG][math.random(1, #messages[mtype])]
else
return messages[1] -- 1 is the index for the non-random message
end
end
2018-09-05 08:10:31 -07:00
local function get_int_attribute(player, key)
local level = player:get_attribute(key)
if level then
return tonumber(level)
else
return nil
end
end
2017-07-13 15:49:56 -07:00
2017-07-18 21:04:55 -07:00
minetest.register_on_dieplayer(function(player,reason)
if reason == nil then
local player_name = player:get_player_name()
local node = minetest.registered_nodes[minetest.get_node(player:getpos()).name]
local pos = player:getpos()
local death = {x=0, y=23, z=-1.5}
minetest.sound_play("player_death", {pos = pos, gain = 1})
pos.x = math.floor(pos.x + 0.5)
pos.y = math.floor(pos.y + 0.5)
pos.z = math.floor(pos.z + 0.5)
local param2 = minetest.dir_to_facedir(player:get_look_dir())
local player_name = player:get_player_name()
if minetest.is_singleplayer() then
player_name = "You"
end
2018-09-05 07:52:03 -07:00
if mstamina ~= nil then
lstamina = get_int_attribute(player, "stamina:level")
end
2018-09-06 11:28:08 -07:00
if mhbhunger ~= nil then
lstamina = tonumber(hbhunger.hunger[player_name])
end
2018-09-05 21:21:11 -07:00
if mthirsty ~= nil then
lthirsty = thirsty.get_thirst_factor(player)
end
2018-09-06 09:31:32 -07:00
if msunburn ~= nil then
2018-09-06 11:28:08 -07:00
lsunburn = sunburn.get_sunburn(player)
2018-09-06 09:31:32 -07:00
end
2018-09-05 07:52:03 -07:00
-- Death by lava
if node.name == "default:lava_source" then
minetest.chat_send_all(
string.char(0x1b).."(c@#00CED1)"..player_name ..
string.char(0x1b).."(c@#ff0000)"..get_message("lava"))
--player:setpos(death)
elseif node.name == "default:lava_flowing" then
minetest.chat_send_all(
string.char(0x1b).."(c@#00CED1)"..player_name ..
string.char(0x1b).."(c@#ff0000)"..get_message("lava"))
--player:setpos(death)
-- Death by drowning
elseif player:get_breath() == 0 then
minetest.chat_send_all(
string.char(0x1b).."(c@#00CED1)"..player_name ..
string.char(0x1b).."(c@#ff0000)"..get_message("water"))
--player:setpos(death)
-- Death by fire
elseif node.name == "fire:basic_flame" then
minetest.chat_send_all(
string.char(0x1b).."(c@#00CED1)"..player_name ..
string.char(0x1b).."(c@#ff0000)"..get_message("fire"))
--player:setpos(death)
-- Death by Toxic water
elseif node.name == "es:toxic_water_source" then
minetest.chat_send_all(
string.char(0x1b).."(c@#00CED1)"..player_name ..
string.char(0x1b).."(c@#ff0000)"..get_message("toxic"))
--player:setpos(death)
elseif node.name == "es:toxic_water_flowing" then
minetest.chat_send_all(
string.char(0x1b).."(c@#00CED1)"..player_name ..
string.char(0x1b).."(c@#ff0000)"..get_message("toxic"))
--player:setpos(death)
elseif node.name == "groups:radioactive" then
minetest.chat_send_all(
string.char(0x1b).."(c@#00CED1)"..player_name ..
string.char(0x1b).."(c@#ff0000)"..get_message("toxic"))
--player:setpos(death)
2018-09-06 09:31:32 -07:00
elseif lthirsty <= 1 then
minetest.chat_send_all(
string.char(0x1b).."(c@#00CED1)"..player_name ..
string.char(0x1b).."(c@#ff0000)"..get_message("thirst"))
2018-09-05 08:29:31 -07:00
elseif lstamina <= 1 then
2018-09-05 07:52:03 -07:00
minetest.chat_send_all(
string.char(0x1b).."(c@#00CED1)"..player_name ..
string.char(0x1b).."(c@#ff0000)"..get_message("exhausted"))
2018-09-06 09:31:32 -07:00
elseif lsunburn >= 19 then
2018-09-05 21:21:11 -07:00
minetest.chat_send_all(
string.char(0x1b).."(c@#00CED1)"..player_name ..
2018-09-06 09:31:32 -07:00
string.char(0x1b).."(c@#ff0000)"..get_message("sunburn"))
-- Death by something else
else
2018-09-05 08:29:31 -07:00
minetest.chat_send_all(
string.char(0x1b).."(c@#ffffff)"..player_name ..
string.char(0x1b).."(c@#ff0000)"..get_message("other")) --toospammy
--minetest.after(0.5, function(holding)
--player:setpos(death) --gamebreaker?
--end)
end
2017-08-06 09:20:58 -07:00
--minetest.chat_send_all(string.char(0x1b).."(c@#000000)".."[DEATH COORDINATES] "..string.char(0x1b).."(c@#ffffff)" .. player_name .. string.char(0x1b).."(c@#000000)".." left a corpse full of diamonds here: " ..
--minetest.pos_to_string(pos) .. string.char(0x1b).."(c@#aaaaaa)".." Come and get them!")
--player:setpos(death)
--minetest.sound_play("pacmine_death", { gain = 0.35}) NOPE!!!
2017-08-06 09:20:58 -07:00
else
minetest.chat_send_all(string.char(0x1b)..player:get_player_name().." "..reason)
2017-08-06 09:20:58 -07:00
end
end)
2014-03-17 12:10:44 -07:00
--bigfoot code
-- bigfoot547's death messages
-- hacked by maikerumine
-- get tool/item when hitting get_name() returns item name (e.g. "default:stone")
minetest.register_on_punchplayer(function(player, hitter)
2017-08-06 09:20:58 -07:00
local pos = player:getpos()
local death = {x=0, y=23, z=-1.5}
if not (player or hitter) then
return false
end
if not hitter:get_player_name() == "" then
return false
end
minetest.after(0, function(holding)
if player:get_hp() == 0 and hitter:get_player_name() ~= "" and holding == hitter:get_wielded_item() ~= "" then
local holding = hitter:get_wielded_item()
if holding:to_string() ~= "" then
local weap = holding:get_name(holding:get_name())
2017-08-06 09:20:58 -07:00
if holding then
minetest.chat_send_all(
2017-08-06 09:20:58 -07:00
string.char(0x1b).."(c@#00CED1)"..player:get_player_name()..
string.char(0x1b).."(c@#ff0000)"..swas[LANG]..
string.char(0x1b).."(c@#ff0000)"..get_message("pvp")..
string.char(0x1b).."(c@#ff0000)"..sby[LANG]..
2017-08-06 09:20:58 -07:00
string.char(0x1b).."(c@#00CED1)"..hitter:get_player_name()..
string.char(0x1b).."(c@#ffffff)"..swith[LANG]..
2017-08-06 09:20:58 -07:00
string.char(0x1b).."(c@#FF8C00)"..weap..
2017-07-13 15:49:56 -07:00
string.char(0x1b).."(c@#00bbff)"..get_message("player")) --TODO: make custom mob death messages
2017-07-13 16:30:44 -07:00
2017-08-06 09:20:58 -07:00
end
end
2017-08-06 09:20:58 -07:00
if player=="" or hitter=="" then return end -- no killers/victims
return true
2017-08-06 09:20:58 -07:00
elseif hitter:get_player_name() == "" and player:get_hp() == 0 then
minetest.chat_send_all(
2017-08-06 09:20:58 -07:00
string.char(0x1b).."(c@#00CED1)"..player:get_player_name()..
string.char(0x1b).."(c@#ff0000)"..swas[LANG]..
string.char(0x1b).."(c@#ff0000)"..get_message("pvp")..
string.char(0x1b).."(c@#ff0000)"..sby[LANG]..
2017-08-06 09:20:58 -07:00
string.char(0x1b).."(c@#FF8C00)"..hitter:get_luaentity().name.. --too many mobs add to crash
2017-07-13 15:49:56 -07:00
string.char(0x1b).."(c@#00bbff)"..get_message("mobs")) --TODO: make custom mob death messages
2017-07-13 16:30:44 -07:00
if player=="" or hitter=="" or hitter=="*" then return end -- no mob killers/victims
else
2017-07-13 16:30:44 -07:00
2017-08-06 09:20:58 -07:00
return false
end
end)
2017-07-18 21:04:55 -07:00
2017-08-06 09:20:58 -07:00
end)
2017-07-13 15:49:56 -07:00
2014-03-17 10:23:56 -07:00
-----------------------------------------------------------------------------------------------
2018-09-04 20:38:27 -07:00
print("[Mod] "..title.." ["..version.."] ["..mname.."] ["..LANG.."] Loaded...")
2014-03-17 10:23:56 -07:00
-----------------------------------------------------------------------------------------------