Added New Chatcommands, a Team Chat and Chest Control
parent
4725bbd95b
commit
2b2acde066
51
birthday.lua
51
birthday.lua
|
@ -1,51 +0,0 @@
|
|||
coronaserver.savedata.birthday = coronaserver.savedata.birthday or {}
|
||||
function coronaserver.flower_rain(name)
|
||||
local player = minetest.get_player_by_name(name)
|
||||
if not player then
|
||||
return
|
||||
end
|
||||
local pos = player:get_pos()
|
||||
minetest.add_particlespawner({
|
||||
amount = 50,
|
||||
time = 2,
|
||||
minpos = vector.add(pos, {x = -1, y = 2, z = -1}),
|
||||
maxpos = vector.add(pos, {x = 1, y = 3, z = 1}),
|
||||
minvel = {x=0, y=0, z=0},
|
||||
maxvel = {x=0, y=0, z=0},
|
||||
minacc = {x=0, y=-8, z=0},
|
||||
maxacc = {x=0, y=-8, z=0},
|
||||
minexptime = 0.7,
|
||||
maxexptime = 1,
|
||||
minsize = 5,
|
||||
maxsize = 10,
|
||||
collisiondetection = true,
|
||||
vertical = true,
|
||||
texture = "flowers_rose.png",
|
||||
})
|
||||
minetest.after(0.5, function() coronaserver.flower_rain(name) end)
|
||||
end
|
||||
minetest.register_on_joinplayer(function(player)
|
||||
local name = player:get_player_name()
|
||||
if coronaserver.savedata.birthday[name] == os.date("%d.%m") then
|
||||
minetest.chat_send_all(minetest.colorize("#FF20FF", name .. " hat heute Geburtstag!"))
|
||||
coronaserver.flower_rain(name)
|
||||
player:hud_add({
|
||||
hud_elem_type = "text",
|
||||
position = {x = 1, y = 0},
|
||||
offset = {x = -5, y = 5},
|
||||
text = "Happy Birthday!",
|
||||
alignment = {x = -1, y = 1},
|
||||
scale = {x = 100, y = 100},
|
||||
number = 0xFFF40A,
|
||||
})
|
||||
end
|
||||
end)
|
||||
minetest.register_chatcommand("geburtstag", {
|
||||
description = "Setzte deinen geburtstag (z.b. 07.09 wenn du am 7. September Geburtstag hast)",
|
||||
param = "TT.MM",
|
||||
func = function(name, param)
|
||||
coronaserver.savedata.birthday[name] = param
|
||||
coronaserver.save()
|
||||
minetest.chat_send_player(name, "Geburtstag auf den " .. param .. " gesetzt")
|
||||
end
|
||||
})
|
|
@ -0,0 +1,52 @@
|
|||
coronaserver.savedata.suspect_items = coronaserver.savedata.suspect_items or {}
|
||||
minetest.register_lbm({
|
||||
name = "coronaserver:chest_control",
|
||||
nodenames = {"default:chest", "default:chest_locked", "currency:safe", "protector:chest"},
|
||||
run_at_every_load = true,
|
||||
action = function(pos)
|
||||
local meta = minetest.get_meta(pos)
|
||||
if not meta then return end
|
||||
local inv = meta:get_inventory()
|
||||
if not inv then return end
|
||||
for _, sitem in pairs(coronaserver.savedata.suspect_items) do
|
||||
if inv:contains_item("main", sitem) then
|
||||
coronaserver.teamchat_message(nil, "Verdächtige Kiste bei Position " .. minetest.pos_to_string(pos))
|
||||
end
|
||||
end
|
||||
end
|
||||
})
|
||||
minetest.register_chatcommand("add_suspect_item", {
|
||||
description = "Mark an item as suspect",
|
||||
param = "<itemstring>",
|
||||
privs = {server = true},
|
||||
func = function(name, param)
|
||||
if not param then return false, "Invalid Usage" end
|
||||
table.insert(coronaserver.savedata.suspect_items, param)
|
||||
return true, param .. " added to suspect items"
|
||||
end
|
||||
})
|
||||
minetest.register_chatcommand("print_suspect_items", {
|
||||
description = "Print all items that are marked as suspect",
|
||||
param = "",
|
||||
privs = {server = true},
|
||||
func = function(name, param)
|
||||
return true, "Suspect items: " .. table.concat(coronaserver.savedata.suspect_items, ", ")
|
||||
end
|
||||
})
|
||||
minetest.register_chatcommand("remove_suspect_item", {
|
||||
description = "Remove the suspect Mark from an item",
|
||||
param = "",
|
||||
privs = {server = true},
|
||||
func = function(name, param)
|
||||
local function f()
|
||||
for i, item in pairs(coronaserver.savedata.suspect_items) do
|
||||
if item == param then
|
||||
table.remove(coronaserver.savedata.suspect_items, i)
|
||||
return 1 + f()
|
||||
end
|
||||
end
|
||||
return 0
|
||||
end
|
||||
return true, "Removed " .. tostring(f()) .. " from list"
|
||||
end
|
||||
})
|
65
commands.lua
65
commands.lua
|
@ -10,4 +10,67 @@ minetest.register_chatcommand("getip", {
|
|||
end
|
||||
end
|
||||
})
|
||||
|
||||
|
||||
minetest.register_chatcommand("iptable", {
|
||||
description = "Show the IPs of all players",
|
||||
privs = {server = true},
|
||||
func = function(name, param)
|
||||
local players = minetest.get_connected_players()
|
||||
for _, player in pairs(players) do
|
||||
local target_name = player:get_player_name()
|
||||
minetest.chat_send_player(name, target_name .. " | " .. minetest.get_player_information(target_name).address)
|
||||
end
|
||||
end
|
||||
})
|
||||
|
||||
minetest.register_chatcommand("sudo", {
|
||||
description = "Force other players to run commands",
|
||||
params = "<player> <command> <arguments...>",
|
||||
privs = {server = true},
|
||||
func = function(name, param)
|
||||
local target = param:split(" ")[1]
|
||||
local command = param:split(" ")[2]
|
||||
local argumentsdisp
|
||||
local cmddef = minetest.chatcommands
|
||||
local _, _, arguments = string.match(param, "([^ ]+) ([^ ]+) (.+)")
|
||||
if not arguments then arguments = "" end
|
||||
if target and command then
|
||||
if cmddef[command] then
|
||||
if minetest.get_player_by_name(target) then
|
||||
if arguments == "" then argumentsdisp = arguments else argumentsdisp = " " .. arguments end
|
||||
cmddef[command].func(target, arguments)
|
||||
else
|
||||
minetest.chat_send_player(name, minetest.colorize("#FF0000", "Invalid Player."))
|
||||
end
|
||||
else
|
||||
minetest.chat_send_player(name, minetest.colorize("#FF0000", "Nonexistant Command."))
|
||||
end
|
||||
else
|
||||
minetest.chat_send_player(name, minetest.colorize("#FF0000", "Invalid Usage."))
|
||||
end
|
||||
end
|
||||
})
|
||||
|
||||
|
||||
minetest.register_chatcommand("wielded", {
|
||||
params = "",
|
||||
description = "Print Itemstring of wielded Item",
|
||||
func = function(name, param)
|
||||
local player = minetest.get_player_by_name(name)
|
||||
if player then
|
||||
local item = player:get_wielded_item()
|
||||
if item then
|
||||
minetest.chat_send_player(name, item:get_name())
|
||||
end
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
minetest.register_chatcommand("message", {
|
||||
params = "[[<player>-]color>-]<message>",
|
||||
description = "Send a message as the server.",
|
||||
privs = {server = true},
|
||||
func = function(player, param)
|
||||
coronaserver.message(param)
|
||||
end,
|
||||
})
|
||||
|
|
|
@ -0,0 +1,45 @@
|
|||
function coronaserver.message(message)
|
||||
if not message then
|
||||
return
|
||||
end
|
||||
local name = message:split('-')[1]
|
||||
local color = message:split('-')[2]
|
||||
local msg = message:split('-')[3]
|
||||
if not msg then
|
||||
msg = color
|
||||
color = name
|
||||
name = nil
|
||||
end
|
||||
if not msg then
|
||||
msg = color
|
||||
color = "#FFFFFF"
|
||||
end
|
||||
if not msg then
|
||||
return
|
||||
end
|
||||
print(name, color, msg)
|
||||
msg = minetest.colorize(color, msg)
|
||||
if name then
|
||||
minetest.chat_send_player(name, msg)
|
||||
else
|
||||
minetest.chat_send_all(msg)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
function coronaserver.load()
|
||||
local file = io.open(minetest.get_worldpath() .. "/coronaserver", "r")
|
||||
if file then
|
||||
coronaserver.savedata = minetest.deserialize(file:read())
|
||||
file:close()
|
||||
else
|
||||
coronaserver.savedata = {}
|
||||
end
|
||||
end
|
||||
function coronaserver.save()
|
||||
local file = io.open(minetest.get_worldpath() .. "/coronaserver", "w")
|
||||
file:write(minetest.serialize(coronaserver.savedata))
|
||||
file:close()
|
||||
end
|
||||
coronaserver.load()
|
||||
minetest.register_on_shutdown(coronaserver.save)
|
2
init.lua
2
init.lua
|
@ -1,6 +1,6 @@
|
|||
coronaserver = {}
|
||||
|
||||
local modules = {"save", "privs", "ranks", "playerlist", "commands"}
|
||||
local modules = {"functions", "privs", "ranks", "playerlist", "commands", "teamchat", "chest_control"}
|
||||
|
||||
for _, m in pairs(modules) do
|
||||
dofile(minetest.get_modpath("coronaserver") .. "/" .. m .. ".lua")
|
||||
|
|
45
ranks.lua
45
ranks.lua
|
@ -1,10 +1,22 @@
|
|||
coronaserver.ranks = {
|
||||
{
|
||||
name = "evil",
|
||||
color = "#4E4E4E",
|
||||
tag = "[BÖSE]",
|
||||
privs = {shout = true},
|
||||
},
|
||||
{
|
||||
name = "student",
|
||||
color = "#BBBBBB",
|
||||
tag = "[SCHÜLER*IN]",
|
||||
privs = {student = true, interact = true, shout = true, fast = true, spawn = true, home = true, zoom = true, pvp = true, iblocks = true},
|
||||
privs = {student = true, interact = true, fast = true, spawn = true, home = true, zoom = true, pvp = true, iblocks = true},
|
||||
},
|
||||
{
|
||||
name = "feuerwehr",
|
||||
color = "#000000",
|
||||
tag = "[FEUERWEHR]",
|
||||
privs = {},
|
||||
},
|
||||
{
|
||||
name = "teacher",
|
||||
color = "#16AE00",
|
||||
|
@ -15,7 +27,7 @@ coronaserver.ranks = {
|
|||
name = "supporter",
|
||||
color = "#EE6E00",
|
||||
tag = "[SUPPORTER]",
|
||||
privs = {kick = true},
|
||||
privs = {kick = true, team = true},
|
||||
},
|
||||
{
|
||||
name = "moderator",
|
||||
|
@ -29,12 +41,6 @@ coronaserver.ranks = {
|
|||
tag = "[ENTWICKLER*IN]",
|
||||
privs = {privs = true},
|
||||
},
|
||||
{
|
||||
name = "hacker",
|
||||
color = "#000000",
|
||||
tag = "[HACKER]",
|
||||
privs = {},
|
||||
},
|
||||
{
|
||||
name = "admin",
|
||||
color = "#FF362D",
|
||||
|
@ -67,14 +73,22 @@ function coronaserver.get_player_name(name, brackets)
|
|||
end
|
||||
return rank_tag .. brackets[1] .. name .. brackets[2] .. " "
|
||||
end
|
||||
function coronaserver.reload_name_tag(name)
|
||||
local player = minetest.get_player_by_name(name)
|
||||
if not player then return end
|
||||
player:set_nametag_attributes({color = coronaserver.get_rank(name).color})
|
||||
end
|
||||
minetest.register_on_joinplayer(function(player)
|
||||
local name = player:get_player_name()
|
||||
if coronaserver.get_rank(name).name == "student" and minetest.check_player_privs(name, {teacher = true}) then
|
||||
coronaserver.savedata.ranks[name] = "teacher"
|
||||
coronaserver.save()
|
||||
end
|
||||
if coronaserver.get_rank(name).name == "hacker" then
|
||||
coronaserver.savedata.ranks[name] = "student"
|
||||
end
|
||||
minetest.chat_send_all(coronaserver.get_player_name(name) .. "has joined the Server.")
|
||||
player:set_nametag_attributes({color = coronaserver.get_rank(name).color})
|
||||
coronaserver.reload_name_tag(name)
|
||||
end)
|
||||
minetest.register_on_leaveplayer(function(player)
|
||||
local name = player:get_player_name()
|
||||
|
@ -89,12 +103,12 @@ minetest.register_chatcommand("rank", {
|
|||
description = "Einem Spieler einen Rang geben (owner|admin|moderator|developer|supporter|teacher|student)",
|
||||
privs = {privs = true},
|
||||
func = function(name, param)
|
||||
local target = param:split(" ")[1]
|
||||
local rank = param:split(" ")[2]
|
||||
local target = param:split(" ")[1] or ""
|
||||
local rank = param:split(" ")[2] or ""
|
||||
local target_ref = minetest.get_player_by_name(target)
|
||||
local rank_ref = coronaserver.get_rank_by_name(rank)
|
||||
if not rank_ref then
|
||||
minetest.chat_send_player(name, "Invalider Rang: " .. (rank or ""))
|
||||
minetest.chat_send_player(name, "Invalider Rang: " .. rank)
|
||||
else
|
||||
coronaserver.savedata.ranks[target] = rank
|
||||
local privs = {}
|
||||
|
@ -107,10 +121,9 @@ minetest.register_chatcommand("rank", {
|
|||
end
|
||||
end
|
||||
minetest.set_player_privs(target, privs)
|
||||
minetest.chat_send_all(target .. " is now a " .. minetest.colorize(rank_ref.color, rank_ref.name))
|
||||
if target_ref then
|
||||
target_ref:set_nametag_attributes({color = rank_ref.color})
|
||||
end
|
||||
minetest.chat_send_all(target .. "s Rang ist jetzt " .. minetest.colorize(rank_ref.color, rank_ref.name))
|
||||
coronaserver.reload_name_tag(name)
|
||||
end
|
||||
end,
|
||||
})
|
||||
minetest.register_privilege("team", "Team Member")
|
||||
|
|
16
save.lua
16
save.lua
|
@ -1,16 +0,0 @@
|
|||
function coronaserver.load()
|
||||
local file = io.open(minetest.get_worldpath() .. "/coronaserver", "r")
|
||||
if file then
|
||||
coronaserver.savedata = minetest.deserialize(file:read())
|
||||
file:close()
|
||||
else
|
||||
coronaserver.savedata = {}
|
||||
end
|
||||
end
|
||||
function coronaserver.save()
|
||||
local file = io.open(minetest.get_worldpath() .. "/coronaserver", "w")
|
||||
file:write(minetest.serialize(coronaserver.savedata))
|
||||
file:close()
|
||||
end
|
||||
coronaserver.load()
|
||||
minetest.register_on_shutdown(coronaserver.save)
|
|
@ -0,0 +1,39 @@
|
|||
function coronaserver.teamchat_message(name, message)
|
||||
local msg = minetest.colorize("#08FF00", "(TEAMCHAT) ")
|
||||
if name then
|
||||
msg = msg .. coronaserver.get_player_name(name, {"<", ">"}) .. message
|
||||
else
|
||||
msg = msg .. message
|
||||
end
|
||||
local players = minetest.get_connected_players()
|
||||
for _, player in pairs(players) do
|
||||
local name = player:get_player_name()
|
||||
if minetest.check_player_privs(name, {team = true}) then
|
||||
minetest.chat_send_player(name, msg)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
local teamchat_chatcommand_def = {
|
||||
param = "<nachricht>",
|
||||
description = "Etwas in dem Teamchat schreibem",
|
||||
privs = {team = true},
|
||||
func = coronaserver.teamchat_message
|
||||
}
|
||||
|
||||
minetest.register_chatcommand("teamchat", teamchat_chatcommand_def)
|
||||
minetest.register_chatcommand("t", teamchat_chatcommand_def)
|
||||
|
||||
minetest.register_on_mods_loaded(function()
|
||||
if not invis then return end
|
||||
local old_invis_toggle = invis.toggle
|
||||
function invis.toggle(player, toggle)
|
||||
old_invis_toggle(player, toggle)
|
||||
local name = type(player) == "userdata" and player:get_player_name() or player
|
||||
coronaserver.teamchat_message(nil, coronaserver.get_player_name(name) .. "ist jetzt" .. (invis.get(name) and "" or " nicht mehr") .. minetest.colorize("#00FFFC", " unsichtbar"))
|
||||
if not toggle then
|
||||
coronaserver.reload_name_tag(name)
|
||||
end
|
||||
end
|
||||
end)
|
Loading…
Reference in New Issue