2016-01-14 16:34:10 -08:00
--[[
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
-----------------------------------------------------------------------------------------------
2016-01-14 16:34:10 -08:00
local title = " Death Messages "
2018-09-04 21:37:31 -07:00
local version = " 0.1.4 "
2016-01-14 16:34:10 -08:00
local mname = " death_messages "
2014-03-17 10:23:56 -07:00
-----------------------------------------------------------------------------------------------
2014-03-19 07:48:40 -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
2014-03-18 17:59:44 -07:00
2016-01-14 16:34:10 -08:00
-- A table of quips for death messages. The first item in each sub table is the
-- default message used when RANDOM_MESSAGES is disabled.
2014-03-18 17:59:44 -07:00
local messages = { }
2018-09-05 07:06:26 -07:00
local swas = { en = " was " , de = " war " }
local sby = { en = " by " , de = " von " }
local swith = { en = " with " , de = " mit " }
2014-03-18 17:59:44 -07:00
2018-09-04 20:04:39 -07:00
-- Default messages
2017-07-12 22:19:54 -07:00
-- Toxic death messages
2018-09-04 21:16:11 -07:00
messages.toxic = { en = {
2017-07-12 22:19:54 -07:00
" 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. "
} }
2014-03-18 17:59:44 -07:00
-- Lava death messages
2018-09-04 21:16:11 -07:00
messages.lava = { en = {
2016-01-14 16:34:10 -08:00
" melted into a ball of fire. " ,
2014-03-18 17:59:44 -07:00
" thought lava was cool. " ,
" melted into a ball of fire. " ,
2014-03-19 07:48:40 -07:00
" couldn't resist that warm glow of lava. " ,
" dug straight down. " ,
2017-07-12 22:19:54 -07:00
" 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
} }
2014-03-18 17:59:44 -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
2014-03-18 17:59:44 -07:00
-- Burning death messages
2018-09-04 21:16:11 -07:00
messages.fire = { en = {
2014-03-18 17:59:44 -07:00
" burned to a crisp. " ,
" got a little too warm. " ,
2014-03-19 07:48:40 -07:00
" got too close to the camp fire. " ,
2016-01-14 16:34:10 -08:00
" just got roasted, hotdog style. " ,
2017-07-12 22:19:54 -07:00
" 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. "
} }
2014-03-18 17:59:44 -07:00
-- Other death messages
2018-09-04 21:16:11 -07:00
messages.other = { en = {
2014-03-18 17:59:44 -07:00
" died. " ,
2016-01-14 16:34:10 -08:00
" did something fatal. " ,
2014-03-19 07:48:40 -07:00
" gave up on life. " ,
" is somewhat dead now. " ,
2017-07-12 22:19:54 -07:00
" 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. "
} }
2017-07-12 22:19:54 -07:00
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
2017-07-12 22:19:54 -07:00
-- PVP Messages
2018-09-04 21:16:11 -07:00
messages.pvp = { en = {
2017-07-12 22:19:54 -07:00
" 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 " ,
2017-07-12 22:19:54 -07:00
" 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 " ,
2017-07-12 22:19:54 -07:00
" 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
} }
2014-03-18 17:59:44 -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 = {
2018-09-05 07:06:26 -07:00
" 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-12 22:19:54 -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 = {
2018-09-05 07:06:26 -07:00
" 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
} }
2017-07-12 22:19:54 -07:00
2018-09-05 08:10:31 -07:00
local function get_message ( mtype )
2016-01-14 16:34:10 -08:00
if RANDOM_MESSAGES then
2018-09-09 23:50:19 -07:00
return messages [ mtype ] [ LANG ] [ math.random ( 1 , # messages [ mtype ] ) ]
2016-01-14 16:34:10 -08:00
else
return messages [ 1 ] -- 1 is the index for the non-random message
end
end
2014-03-18 17:59:44 -07:00
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-12 22:19:54 -07:00
2017-07-13 15:49:56 -07:00
2017-07-18 21:04:55 -07:00
2018-09-05 07:06:26 -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
2018-09-05 07:06:26 -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 " ) )
2018-09-05 07:06:26 -07:00
-- 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
2018-09-05 07:06:26 -07:00
--minetest.after(0.5, function(holding)
--player:setpos(death) --gamebreaker?
--end)
end
2017-08-06 09:20:58 -07:00
2018-09-05 07:06:26 -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
2018-09-05 07:06:26 -07:00
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
2017-07-12 22:19:54 -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
2017-07-12 22:19:54 -07:00
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
2017-07-12 22:19:54 -07:00
minetest.chat_send_all (
2017-08-06 09:20:58 -07:00
string.char ( 0x1b ) .. " (c@#00CED1) " .. player : get_player_name ( ) ..
2018-09-05 07:06:26 -07:00
string.char ( 0x1b ) .. " (c@#ff0000) " .. swas [ LANG ] ..
2017-07-12 22:19:54 -07:00
string.char ( 0x1b ) .. " (c@#ff0000) " .. get_message ( " pvp " ) ..
2018-09-05 07:06:26 -07:00
string.char ( 0x1b ) .. " (c@#ff0000) " .. sby [ LANG ] ..
2017-08-06 09:20:58 -07:00
string.char ( 0x1b ) .. " (c@#00CED1) " .. hitter : get_player_name ( ) ..
2018-09-05 07:06:26 -07:00
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
2017-07-12 22:19:54 -07:00
end
2017-08-06 09:20:58 -07:00
2017-07-12 22:19:54 -07:00
if player == " " or hitter == " " then return end -- no killers/victims
return true
2017-08-06 09:20:58 -07:00
2017-07-12 22:19:54 -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 ( ) ..
2018-09-05 07:06:26 -07:00
string.char ( 0x1b ) .. " (c@#ff0000) " .. swas [ LANG ] ..
2017-07-12 22:19:54 -07:00
string.char ( 0x1b ) .. " (c@#ff0000) " .. get_message ( " pvp " ) ..
2018-09-05 07:06:26 -07:00
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
2017-07-12 22:19:54 -07:00
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
-----------------------------------------------------------------------------------------------