Compare commits

...

12 Commits

Author SHA1 Message Date
Elias Fleckenstein 1ada61ec15
Merge pull request #4 from HimbeerserverDE/master
Re-add set_skyblock_spawn command
2022-05-03 17:00:12 +02:00
Elias Fleckenstein 89ea11bf18
Merge pull request #7 from HimbeerserverDE/defer_ranks
Set the rank even if the target player is offline
2021-12-04 13:00:02 +01:00
HimbeerserverDE 13629ea939
Merge branch 'EliasFleckenstein03:master' into master 2021-11-23 07:09:04 +01:00
Elias Fleckenstein f63cec28d1
Merge pull request #6 from Emojigit/patch-1
fix typo
2021-09-22 17:59:19 +02:00
Elias Fleckenstein 78c11ee4f9 Unequip lava boots in movement protected zones 2021-07-08 20:53:59 +02:00
HimbeerserverDE 1c81893933 Revert "Re-add set_skyblock_spawn command"
This reverts commit ca57da96a8.
2021-04-27 08:25:54 +02:00
HimbeerserverDE 7804033d92 Revert "Revert "Change rank while player is offline""
This reverts commit 5ab42008f5.
2021-04-27 08:25:11 +02:00
HimbeerserverDE 5ab42008f5 Revert "Change rank while player is offline"
This reverts commit 62d142a897.
2021-04-27 08:24:19 +02:00
HimbeerserverDE 62d142a897
Change rank while player is offline 2021-04-27 08:22:14 +02:00
HimbeerserverDE cb88534fed Merge branch 'master' of https://github.com/EliasFleckenstein03/elidragon 2021-04-27 08:09:06 +02:00
Emojigit ab7e81de7f
fix typo 2021-04-18 19:47:55 +08:00
HimbeerserverDE ca57da96a8
Re-add set_skyblock_spawn command 2021-01-15 16:04:18 +01:00
5 changed files with 166 additions and 104 deletions

View File

@ -26,7 +26,7 @@ minetest.register_chatcommand("message", {
})
minetest.register_chatcommand("colormsg", {
params = "[[<player>-]color>-]<message>",
description = "Send a message as the server. [deprecated, replaced my the message command]",
description = "Send a message as the server. [deprecated, replaced by the message command]",
privs = {server = true},
func = function(name, param)
elidragon.message(param)

View File

@ -43,6 +43,8 @@ elidragon.ranks = {
},
}
local s = minetest.get_mod_storage()
local deferred = minetest.deserialize(s:get_string("deferred_rank_changes"))
function elidragon.get_rank(player)
local rank = player:get_meta():get_string("elidragon:rank")
@ -104,16 +106,7 @@ minetest.register_chatcommand("rank", {
description = "Set a player's rank (admin|developer|moderator|helper|builder|vip|player)",
privs = {privs = true},
func = function(name, param)
local target = param:split(" ")[1] or ""
local rank = param:split(" ")[2] or ""
local target_ref = minetest.get_player_by_name(target)
local rank_ref = elidragon.get_rank_by_name(rank)
if not rank_ref then
return false, "Invalid Rank: " .. rank
elseif not target_ref then
return false, "Player not found"
else
target_ref:get_meta():set_string("elidragon:rank", rank)
local set_rank = function()
local privs = {}
for _, r in pairs(elidragon.ranks) do
for k, v in pairs(r.privs) do
@ -125,7 +118,34 @@ minetest.register_chatcommand("rank", {
end
minetest.set_player_privs(target, privs)
minetest.chat_send_all(target .. " is now a " .. minetest.colorize(rank_ref.color, rank_ref.name))
end
local target = param:split(" ")[1] or ""
local rank = param:split(" ")[2] or ""
local target_ref = minetest.get_player_by_name(target)
local rank_ref = elidragon.get_rank_by_name(rank)
if not rank_ref then
return false, "Invalid Rank: " .. rank
elseif not target_ref then
deferred[target] = rank
set_rank()
else
target_ref:get_meta():set_string("elidragon:rank", rank)
set_rank()
elidragon.update_nametag(target_ref)
end
end,
})
minetest.register_on_joinplayer(function(player)
local name = player:get_player_name()
if deferred[name] then
player:get_meta():set_string("elidragon:rank", deferred[name])
elidragon.update_nametag(player)
deferred[name] = nil
end
end)
minetest.register_on_shutdown(function()
s:set_string("deferred_rank_changes", minetest.serialize(deferred))
end)

View File

@ -308,6 +308,8 @@ minetest.register_craft({
}
})
-- commands
minetest.register_chatcommand("island", {
params = "",
description = "Teleport to your Island",
@ -317,3 +319,20 @@ minetest.register_chatcommand("island", {
elidragon.skyblock.spawn_player(player)
end,
})
minetest.register_chatcommand("set_skyblock_spawn", {
params = "<name> <x> <y> <z>",
description = "Set new skyblock spawn for <name>",
privs = {server = true},
func = function(sender, param)
local name = param:split(" ")[1]
local x = tonumber(param:split(" ")[2])
local y = tonumber(param:split(" ")[3])
local z = tonumber(param:split(" ")[4])
if name and x and y and z and minetest.get_player_by_name(name) then
elidragon.skyblock.set_spawn(minetest.get_player_by_name(name), {x = x, y = y, z = z})
else
minetest.chat_send_player(sender, "Invalid usage or player not online")
end
end,
})

128
tags.lua
View File

@ -12,11 +12,11 @@ function elidragon.get_area_with_tag(name, tag)
end
end
minetest.register_chatcommand("add_tag", {
description = "Add tag to area",
param = "<area> <tag> <param>",
privs = {server = true},
func = function(name, param)
if not param then
description = "Add tag to area",
param = "<area> <tag> <param>",
privs = {server = true},
func = function(name, param)
if not param then
minetest.chat_send_player(name, "Invalid Usage")
return
end
@ -25,61 +25,86 @@ minetest.register_chatcommand("add_tag", {
tag = param:split(" ")[2],
param = param:split(" ")[3],
}
if not area.name or not area.tag then
minetest.chat_send_player(name, "Invalid Usage")
return
end
if not area.param then
if not area.name or not area.tag then
minetest.chat_send_player(name, "Invalid Usage")
return
end
if not area.param then
area.param = ""
end
elidragon.savedata.areas[#elidragon.savedata.areas + 1] = area
minetest.chat_send_player(name, "tag added. ")
end
elidragon.savedata.areas[#elidragon.savedata.areas + 1] = area
minetest.chat_send_player(name, "tag added. ")
end
})
minetest.register_chatcommand("remove_tag", {
description = "Remove tag from area",
param = "<area> <tag>",
privs = {server = true},
func = function(name, param)
param = param or ""
description = "Remove tag from area",
param = "<area> <tag>",
privs = {server = true},
func = function(name, param)
param = param or ""
for i, area in pairs(elidragon.savedata.areas) do
if area.name == param:split(" ")[1] and (area.tag == param:split(" ")[2] or not param:split(" ")[2]) then
table.remove(elidragon.savedata.areas, i)
minetest.chat_send_player(name, "Tag removed.")
end
end
end
end
})
minetest.register_chatcommand("print_tags", {
description = "Print area tags",
param = "[<area>]",
privs = {server = true},
func = function(name, param)
description = "Print area tags",
param = "[<area>]",
privs = {server = true},
func = function(name, param)
for _, area in pairs(elidragon.savedata.areas) do
if param == "" or param == area.name then
minetest.chat_send_player(name, area.name .. " | " .. area.tag .. " | " .. area.param)
end
if param == "" or param == area.name then
minetest.chat_send_player(name, area.name .. " | " .. area.tag .. " | " .. area.param)
end
end
end
end
})
function elidragon.limit_tick()
for _, player in pairs(minetest.get_connected_players()) do
for _, player in pairs(minetest.get_connected_players()) do
local name = player:get_player_name()
local rank = elidragon.get_rank(player).name
local privs = minetest.get_player_privs(name)
local has_fly = rank ~= "player"
if rank ~= "admin" then
if rank ~= "admin" then
privs.tp_tpc = nil
end
local teleport_area = elidragon.get_area_with_tag(name, "teleport")
if teleport_area then
local teleport_area = elidragon.get_area_with_tag(name, "teleport")
if teleport_area then
elidragon.teleport(name, teleport_area.param)
end
end
if elidragon.get_area_with_tag(name, "movement") and rank ~= "admin" and rank ~= "moderator" and rank ~= "dev" and rank ~= "helper" then
privs.fly = nil
privs.fast = nil
privs.home = nil
privs.tp = nil
privs.home = nil
privs.tp = nil
if rawget(_G, "armor") then
local inv = player:get_inventory()
local _, armor_inv = armor:get_valid_player(player, "[elidragon.limit_tick]")
for i, stack in pairs(armor_inv:get_list("armor")) do
if stack:get_name() == "lavastuff:boots" then
local left = inv:add_item("main", stack)
inv:set_stack("armor", i, left)
armor_inv:set_stack("armor", i, left)
armor:set_player_armor(player)
local is_emtpy = left:is_empty()
minetest.chat_send_player(name, minetest.colorize("#FF002C", is_emtpy
and "Uneqipping your lava boots automatically"
or "Please take off your lava boots in this zone!"
))
if not is_emtpy then
elidragon.skyblock.spawn_player(player)
end
break
end
end
end
else
privs.home = true
privs.tp = true
@ -87,19 +112,18 @@ function elidragon.limit_tick()
privs.fly = true
privs.fast = true
end
end
local kill_area = elidragon.get_area_with_tag(name, "kill")
if elidragon.get_area_with_tag(name, "kill") then
player:set_pos({x = 0, y = -1000, z = 0})
player:set_hp(0)
if kill_area.param ~= "" then
elidragon.message(kill_area.param:gsub("%%", " "):gsub("@player", name))
end
end
end
local kill_area = elidragon.get_area_with_tag(name, "kill")
if kill_area then
player:set_pos({x = 0, y = -1000, z = 0})
player:set_hp(0)
if kill_area.param ~= "" then
elidragon.message(kill_area.param:gsub("%%", " "):gsub("@player", name))
end
end
minetest.set_player_privs(name, privs)
end
minetest.after(0.5, elidragon.limit_tick)
end
minetest.after(0.5, elidragon.limit_tick)
end
minetest.after(0, elidragon.limit_tick)
minetest.register_on_punchplayer(function(player, hitter, time_from_last_punch, tool_capabilities, dir, damage)
@ -109,18 +133,18 @@ minetest.register_on_punchplayer(function(player, hitter, time_from_last_punch,
end
end)
minetest.register_on_player_hpchange(function(player, hp_change)
local name = player:get_player_name()
local name = player:get_player_name()
if elidragon.get_area_with_tag(name, "no_damage") and hp_change < 0 then
return 0
return 0
end
return hp_change
return hp_change
end, true)
minetest.register_on_player_hpchange(function(player, hp_change)
local name = player:get_player_name()
local teleport_area = elidragon.get_area_with_tag(name, "teleport_on_damage")
local teleport_area = elidragon.get_area_with_tag(name, "teleport_on_damage")
if teleport_area and hp_change < 0 then
elidragon.teleport(name, teleport_area.param)
return 0
return 0
end
return hp_change
return hp_change
end, true)

View File

@ -1,44 +1,43 @@
elidragon.warps = {
{
name = "shop",
desc = "Shop",
pos = {x = 0, y = 1000.5, z = 0}
},
{
name = "hub",
desc = "Hub",
pos = {x = 10071, y = 10003, z = 9951},
},
{
name = "pvp",
desc = "Pvp Area",
shop = {
desc = "Shop",
pos = {x = 0, y = 1000.5, z = 0}
},
hub = {
desc = "Hub",
pos = {x = 10071, y = 10003, z = 9951},
},
pvp = {
desc = "PvP Area",
pos = {x = 20025, y = 1003, z = 1025},
},
{
name = "spawn",
desc = "Spawn",
pos = {x = -21, y = 10202.5, z = -5},
restricted = true
},
{
name = "jump",
desc = "Jumping area",
pos = {x = 12286, y = 12347, z = 12556},
},
}
for _, warp in pairs(elidragon.warps) do
local desc = "Warp to " .. warp.desc
if warp.restricted then
desc = desc .. " [only for staff members]"
end
minetest.register_chatcommand(warp.name, {
description = desc,
privs = {teleport = warp.restricted},
func = function(name)
local player = minetest.get_player_by_name(name)
if player then
player:set_pos(warp.pos)
end
end
})
},
spawn = {
desc = "Spawn",
pos = {x = -21, y = 10202.5, z = -5},
restricted = true
},
jump = {
desc = "Jumping area",
pos = {x = 12286, y = 12347, z = 12556},
},
}
for warp_name, warp in pairs(elidragon.warps) do
local desc = "Warp to " .. warp.desc
if warp.restricted then
desc = desc .. " [only for staff members]"
end
minetest.register_chatcommand(warp_name, {
description = desc,
privs = {teleport = warp.restricted},
func = function(name)
local player = minetest.get_player_by_name(name)
if player then
player:set_pos(warp.pos)
end
end
})
end