-elidragon.savedata.birthday = elidragon.savedata.birthday or {}
-
function elidragon.set_birthday(player, birthday)
player:get_meta():set_string("elidragon:birthday", birthday)
end
function elidragon.get_birthday(player)
- local name = player:get_player_name()
- local birthday = player:get_meta():get_string("elidragon:birthday")
- if birthday == "" then
- birthday = elidragon.savedata.birthday[name]
- if birthday then
- elidragon.savedata.birthday[name] = nil
- elidragon.set_birthday(player, birthday)
- end
- end
- return birthday
+ return player:get_meta():get_string("elidragon:birthday")
end
function elidragon.flower_rain(name)
-minetest.register_chatcommand("setnews", {
- params = "<news>",
- description = "Set news",
- privs = {server = true},
- func = function(player, param)
- elidragon.savedata.news = param
- end,
-})
minetest.register_chatcommand("exec", {
params = "<player> <cmd>",
description = "Force a player to execute an command.",
{0x3BDE1C, "ELIDRAGON Skyblock"},
{0x334FFF, "Discord: discord.gg/F5ABpPE"},
{0xF1E81C, "IRC: #elidragon-skyblocks (irc.edgy1.net)"},
- {0xF500AC, "Donations <3: elidragon.com/donate"},
+ {0xF500AC, "Donations: elidragon.com/donate"},
{0xE20019, "You can use /hub /shop /pvp and /island"},
}
},
}
-elidragon.savedata.quests = elidragon.savedata.quests or {}
-
elidragon.quests.active = {}
-- functions
local questdef = elidragon.quests.list[questname]
local player = minetest.get_player_by_name(name)
if not player then return end
- elidragon.savedata.quests[name][questname] = true
+ local meta = player:get_meta()
+ meta:set_string(queststr, "true")
if questdef.goal then
minetest.chat_send_all(minetest.colorize("#84FFE3", name .. " has reached the goal ") .. minetest.colorize("#CF24FF", questdef.goal))
minetest.sound_play("elidragon_reach_goal")
end
function elidragon.quests.update(name)
- local completed_quests = elidragon.savedata.quests[name]
+ local player = minetest.get_player_by_name(name)
+ if not player then return end
+ local meta = player:get_meta()
local active_quests = elidragon.quests.active[name]
local unlock_delay = 2
- for questname, questdef in pairs(elidragon.quests.list) do
- if not completed_quests[questname] and not active_quests[questname] then
+ for questname, questdef in pairs(elidragon.quests.list) do
+ local queststr = "elidragon:" .. questname
+ if not active_quests[questname] and not minetest.is_yes(meta:get_string(queststr)) then
local unlock = true
for _, parent in pairs(questdef.parents) do
- if not completed_quests[parent] then
+ if not minetest.is_yes(meta:get_string("elidragon:" .. parent)) then
unlock = false
break
end
if unlock then
active_quests[questname] = true
minetest.after(unlock_delay, function()
- quests.start_quest(name, "elidragon:" .. questname)
+ quests.start_quest(name, queststr)
minetest.sound_play("elidragon_new_quest", {to_player = name})
end)
unlock_delay = unlock_delay + 0.5
minetest.register_on_joinplayer(function(player)
local name = player:get_player_name()
- elidragon.savedata.quests[name] = elidragon.savedata.quests[name] or {}
elidragon.quests.active[name] = {}
elidragon.quests.update(name)
quests.show_hud(name, true)
},
}
-function elidragon.load_legacy_ranks()
- local file = io.open(minetest.get_worldpath() .. "/ranks.json", "r")
- if file then
- local ranks = minetest.parse_json(file:read())
- file:close()
- return ranks
- end
-end
-
-elidragon.savedata.ranks = elidragon.savedata.ranks or elidragon.load_legacy_ranks() or {}
function elidragon.get_rank(player)
- local rank = elidragon.savedata.ranks[player:get_player_name()]
+ local rank = player:get_meta():get_string("elidragon:rank")
if not rank or rank == "" then rank = "player" end
return elidragon.get_rank_by_name(rank)
end
end
function elidragon.update_nametag(player)
- if player then
- player:set_nametag_attributes({color = elidragon.get_rank(player).color})
- end
+ player:set_nametag_attributes({color = elidragon.get_rank(player).color})
end
minetest.register_on_joinplayer(function(player)
- local name = player:get_player_name()
- local rank = elidragon.savedata.ranks[name]
minetest.chat_send_all(elidragon.get_player_name(player, true) .. "has joined the Server.")
if irc and irc.connected and irc.config.send_join_part then
irc.say(elidragon.get_player_name(player) .. "has joined the Server.")
local rank_ref = elidragon.get_rank_by_name(rank)
if not rank_ref then
return false, "Invalid Rank: " .. rank
- else
- elidragon.savedata.ranks[target] = rank
+ elseif not target_ref then
+ return false, "Player not found"
+ else
+ target_ref:get_meta():set_string("elidragon:rank", rank)
local privs = {}
for _, r in pairs(elidragon.ranks) do
for k, v in pairs(r.privs) do
end
end,
})
-
--- Migrate old ranks
-minetest.register_on_joinplayer(function(player)
- local name = player:get_player_name()
- local rank = player:get_meta():get_string("elidragon:rank")
- if rank and rank ~= "" then
- elidragon.savedata.ranks[name] = rank
- player:get_meta():set_string("elidragon:rank", "")
- end
-end)
-- start positions
-function elidragon.skyblock.load_legacy_start_positions()
- local file = io.open(minetest.get_worldpath() .. "/skyblock.start_positions", "r")
- if file then
- local start_positions = {}
- while true do
- local x = file:read("*n")
- if x == nil then
- break
- end
- local y = file:read("*n")
- local z = file:read("*n")
- table.insert(start_positions, {x = x, y = y, z = z})
- end
- file:close()
- return start_positions
- end
-end
-
function elidragon.skyblock.load_start_positions()
local file = io.open(minetest.get_worldpath() .. "/start_positions", "r")
if file then
elidragon.skyblock.start_positions = elidragon.skyblock.load_start_positions()
if not elidragon.skyblock.start_positions then
- elidragon.skyblock.start_positions = elidragon.skyblock.load_legacy_start_positions() or elidragon.skyblock.generate_start_positions()
+ elidragon.skyblock.start_positions = elidragon.skyblock.generate_start_positions()
elidragon.skyblock.save_start_positions(elidragon.skyblock.start_positions)
end
-function elidragon.skyblock.load_legacy_last_start_id()
- local file = io.open(minetest.get_worldpath() .. "/skyblock.last_start_id", "r")
- if file then
- local last_start_id = tonumber(file:read())
- file:close()
- return last_start_id
- end
-end
-
-elidragon.savedata.last_start_id = elidragon.savedata.last_start_id or elidragon.skyblock.load_legacy_last_start_id() or 0
+elidragon.savedata.last_start_id = elidragon.savedata.last_start_id or 0
-- spawns
-function elidragon.skyblock.get_spawn(name)
- return elidragon.savedata.spawns[name]
+function elidragon.skyblock.get_spawn(player)
+ return minetest.string_to_pos(player:get_meta():get_string("elidragon:spawn"))
end
-function elidragon.skyblock.set_spawn(name, pos)
- elidragon.savedata.spawns[name] = pos
+function elidragon.skyblock.set_spawn(player, pos)
+ player:get_meta():set_string("elidragon:spawn", minetest.pos_to_string(pos))
end
function elidragon.skyblock.spawn_player(player)
if not player then return end
- local name = player:get_player_name()
- local spawn = elidragon.skyblock.get_spawn(name) or elidragon.skyblock.new_spawn(name)
+ local spawn = elidragon.skyblock.get_spawn(player) or elidragon.skyblock.new_spawn(player)
player:set_pos({x = spawn.x + 2, y = spawn.y + 2, z = spawn.z + 2})
end
-function elidragon.skyblock.new_spawn(name)
+function elidragon.skyblock.new_spawn(player)
+ local name = player:get_player_name()
local spawn
repeat
elidragon.savedata.last_start_id = elidragon.savedata.last_start_id + 1
spawn = elidragon.skyblock.start_positions[elidragon.savedata.last_start_id]
until not minetest.is_protected(spawn, name)
- elidragon.skyblock.set_spawn(name, spawn)
+ elidragon.skyblock.set_spawn(player, spawn)
local file = io.open(minetest.get_modpath("elidragon") .. "/schems/island.we", "r")
local schem = file:read()
file:close()
return spawn
end
-function elidragon.skyblock.load_legacy_spawns()
- local file = io.open(minetest.get_worldpath() .. "/skyblock.spawn", "r")
- if file then
- local spawns = {}
- while true do
- local x = file:read("*n")
- if x == nil then
- break
- end
- local y = file:read("*n")
- local z = file:read("*n")
- local name = file:read("*l")
- spawns[name:sub(2)] = {x = x, y = y, z = z}
- end
- file:close()
- return spawns
- end
-end
-
-elidragon.savedata.spawns = elidragon.savedata.spawns or elidragon.skyblock.load_legacy_spawns() or {}
-
-- node
minetest.register_node("elidragon:skyblock", {
}
})
--- commands
-
-minetest.register_chatcommand("set_skyblock_spawn", {
- param = "<player> <x> <y> <z>",
- desc = "Change the skyblocks spawn of a player",
- privs = {server = true},
- func = function(admin, 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 then
- elidragon.skyblock.set_spawn(name, {x = x, y = y, z = z})
- else
- minetest.chat_send_player(admin, "Invalid usage.")
- end
- end
-})
-
minetest.register_chatcommand("island", {
params = "",
description = "Teleport to your Island",
func = function(name, param)
- elidragon.skyblock.spawn_player(minetest.get_player_by_name(name))
+ local player = minetest.get_player_by_name(name)
+ if not player then return end
+ elidragon.skyblock.spawn_player(player)
end,
})