1 if not elidragon.savedata.areas then
2 elidragon.savedata.areas = {}
4 function elidragon.get_area_with_tag(name, tag)
5 local player = minetest.get_player_by_name(name)
6 for _, player_area in pairs(areas:getAreasAtPos(player:get_pos())) do
7 for _, marked_area in pairs(elidragon.savedata.areas) do
8 if player_area.name == marked_area.name and marked_area.tag == tag and elidragon.get_rank(player_area.owner).name == "admin" then
14 minetest.register_chatcommand("add_tag", {
15 description = "Add tag to area",
16 param = "<area> <tag> <param>",
17 privs = {server = true},
18 func = function(name, param)
20 minetest.chat_send_player(name, "Invalid Usage")
24 name = param:split(" ")[1],
25 tag = param:split(" ")[2],
26 param = param:split(" ")[3],
28 if not area.name or not area.tag then
29 minetest.chat_send_player(name, "Invalid Usage")
32 if not area.param then
35 elidragon.savedata.areas[#elidragon.savedata.areas + 1] = area
36 minetest.chat_send_player(name, "tag added. ")
39 minetest.register_chatcommand("remove_tag", {
40 description = "Remove tag from area",
41 param = "<area> <tag>",
42 privs = {server = true},
43 func = function(name, param)
45 for i, area in pairs(elidragon.savedata.areas) do
46 if area.name == param:split(" ")[1] and (area.tag == param:split(" ")[2] or not param:split(" ")[2]) then
47 table.remove(elidragon.savedata.areas, i)
48 minetest.chat_send_player(name, "Tag removed.")
53 minetest.register_chatcommand("print_tags", {
54 description = "Print area tags",
56 privs = {server = true},
57 func = function(name, param)
58 for _, area in pairs(elidragon.savedata.areas) do
59 if param == "" or param == area.name then
60 minetest.chat_send_player(name, area.name .. " | " .. area.tag .. " | " .. area.param)
65 function elidragon.limit_tick()
66 for _, player in pairs(minetest.get_connected_players()) do
67 local name = player:get_player_name()
68 local rank = elidragon.get_rank(name).name
69 local privs = minetest.get_player_privs(name)
70 local vip = (elidragon.get_rank(name) == "vip")
71 if rank ~= "admin" then
74 local teleport_area = elidragon.get_area_with_tag(name, "teleport")
76 elidragon.teleport(name, teleport_area.param)
78 if elidragon.get_area_with_tag(name, "movement") and rank ~= "admin" and rank ~= "moderator" and rank ~= "helper" then
91 local kill_area = elidragon.get_area_with_tag(name, "kill")
92 if elidragon.get_area_with_tag(name, "kill") then
93 player:set_pos({x = 0, y = -1000, z = 0})
95 if kill_area.param ~= "" then
96 elidragon.message(kill_area.param:gsub("%%", " "):gsub("@player", name))
100 minetest.set_player_privs(name, privs)
102 minetest.after(0.5, elidragon.limit_tick)
104 minetest.after(0, elidragon.limit_tick)
105 minetest.register_on_punchplayer(function(player, hitter, time_from_last_punch, tool_capabilities, dir, damage)
106 if elidragon.get_area_with_tag(player:get_player_name(), "no_pvp") then
107 minetest.chat_send_player(hitter:get_player_name(), minetest.colorize("#FF6737", "You can not PVP here!"))
111 minetest.register_on_punchplayer(function(player, hitter, time_from_last_punch, tool_capabilities, dir, damage)
112 if elidragon.get_area_with_tag(player:get_player_name(), "pvp") then
113 if player:get_hp() - damage < 0 and player:get_hp() <= 0 then
114 minetest.chat_send_all(minetest.colorize("#D3FF2A", hitter:get_player_name() .. " has killed " .. player:get_player_name() .. " in the PvP area!"))
118 minetest.register_on_player_hpchange(function(player, hp_change)
119 local name = player:get_player_name()
120 if elidragon.get_area_with_tag(name, "no_damage") and hp_change < 0 then
125 minetest.register_on_player_hpchange(function(player, hp_change)
126 local name = player:get_player_name()
127 local teleport_area = elidragon.get_area_with_tag(name, "teleport_on_damage")
128 if teleport_area and hp_change < 0 then
129 elidragon.teleport(name, teleport_area.param)