bedwars/bed.lua

79 lines
2.9 KiB
Lua

bedwars.beds = {red = true, green = true, blue = true, yellow = true}
bedwars.str_to_colour = function(str)
local codes = {red = "#FF0000", green = "#00FF00", blue = "#0000FF", yellow = "#FFFF00"}
return codes[str]
end
minetest.register_on_dignode(function(pos, oldnode, digger)
if oldnode.name == "beds:bed_bottom" then
minetest.set_node(pos, {name = "beds:bed_bottom", param2 = oldnode.param2})
local inv = digger:get_inventory()
for k, v in pairs(inv:get_lists()) do
minetest.after(0, function(t)
local itemstack = ItemStack("beds:bed")
itemstack:set_count(99)
t.inv:remove_item(t.k, itemstack)
end, {k = k, inv = inv})
end
if bedwars.get_team_by_pos(pos) == bedwars.get_player_team(digger:get_player_name()) then
minetest.chat_send_player(digger:get_player_name(), "You can't destroy your own bed")
return
end
if not bedwars.beds[bedwars.get_team_by_pos(pos)] then return end
bedwars.beds[bedwars.get_team_by_pos(pos)] = false
minetest.chat_send_all("Team " .. minetest.colorize(bedwars.str_to_colour(bedwars.get_team_by_pos(pos)), bedwars.get_team_by_pos(pos)) .. "'s bed has been destroyed by " .. digger:get_player_name())
minetest.sound_play("bed_destruction", {
pos = pos,
max_hear_distance = 100,
gain = 2.0,
})
bedwars.ui_update()
end
end)
minetest.register_on_dieplayer(function(player)
minetest.chat_send_all(minetest.colorize(bedwars.str_to_colour(bedwars.get_player_team(player:get_player_name())), player:get_player_name()) .. " died")
end)
minetest.register_on_respawnplayer(function(player)
local itemstack = ItemStack("default:sword_stone")
player:set_wielded_item(itemstack)
if not bedwars.beds[bedwars.get_player_team(player:get_player_name())] then
minetest.kick_player(player:get_player_name(), "You cannot respawn because your bed has been destroyed. Please wait for a new game to start.")
minetest.after(1, function()
local empty_teams = 0
local alive = {red = true, green = true, blue = true, yellow = true}
for k, v in pairs(bedwars.teams) do
if #v == 0 then
empty_teams = empty_teams + 1
alive[k] = false
end
end
local last_team
for k, v in pairs(alive) do
if v then
last_team = k
end
end
if empty_teams == 3 then
minetest.chat_send_all("Team " .. minetest.colorize(bedwars.str_to_colour(last_team), last_team) .. " has won!")
minetest.request_shutdown("Game has ended", false, 10)
end
end, nil)
else
minetest.after(0, function(player)
player:set_pos(minetest.string_to_pos(bedwars.get_map_by_name(bedwars.current_map)[bedwars.get_player_team(player:get_player_name())]))
end, player)
end
return true
end)
minetest.register_on_joinplayer(function(player)
minetest.after(1, function()
if not bedwars.beds[bedwars.get_player_team(player:get_player_name())] then
minetest.kick_player(player:get_player_name(), "You cannot respawn because your bed has been destroyed. Please wait for a new game to start.")
end
end)
end)