X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=skyblock.lua;h=effeb8112b6327ca7cdd7a47236ce4a528d5a09f;hb=HEAD;hp=7e4534fdafad2b06df145f5a0aff159d81a38818;hpb=2de6c6cfe6bbbe5e6b3700bfc4c748803b25394a;p=elidragon.git diff --git a/skyblock.lua b/skyblock.lua index 7e4534f..effeb81 100755 --- a/skyblock.lua +++ b/skyblock.lua @@ -32,30 +32,12 @@ 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 - local data = minetest.deserialize(file:read()) + local start_positions = minetest.deserialize(file:read()) file:close() - return data + return start_positions end end @@ -77,45 +59,36 @@ end 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() @@ -123,47 +96,6 @@ function elidragon.skyblock.new_spawn(name) 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 {} - - --- level ---[[ -minetest.register_chatcommand("level", { - description = "Get/set the current level of a player", - params = " []", - func = function(name, param) - local target = param:split(" ")[1] - local level = tonumber(param:split(" ")[2]) - if not level then - minetest.chat_send_player(name, target .. " is on level " .. elidragon.skyblock.get_level(target)) - elseif minetest.check_player_privs(name, {server = true}) and elidragon.skyblock.set_level(target, level) then - minetest.chat_send_player(name, target .. " has been set to level " .. level) - else - minetest.chat_send_player(name, "Cannot change " .. target .. " to level " .. level) - end - end, -}) -]]-- - -- node minetest.register_node("elidragon:skyblock", { @@ -191,12 +123,14 @@ end) -- remove legacy cloud layer -minetest.register_lbm({ +minetest.register_abm({ nodenames = {"default:cloud"}, - name = "elidragon:remove_cloud_layer", + label = "elidragon:remove_cloud_layer", + interval = 1, + chance = 1, action = function(pos) if pos.y == -10 then - minetest.set_node(pos, { name = "air"}) + minetest.remove_node(pos) end end }) @@ -219,23 +153,33 @@ minetest.after(0, function() local node if oldnode.name == "default:lava_source" then node = "default:obsidian" - elseif math.random() < 0.001 then + elseif math.random() < 0.0001 then node = "moreores:mineral_mithril" - elseif math.random() < 0.003 then + elseif math.random() < 0.0003 then node = "default:stone_with_diamond" - elseif math.random() < 0.005 then + elseif math.random() < 0.0005 then node = "default:stone_with_mese" - elseif math.random() < 0.01 then + elseif math.random() < 0.001 then node = "default:stone_with_gold" - elseif math.random() < 0.015 then + elseif math.random() < 0.001 then + node = "technic:mineral_chromium" + elseif math.random() < 0.001 then + node = "technic:mineral_zinc" + elseif math.random() < 0.0012 then + node = "technic:mineral_uranium" + elseif math.random() < 0.0015 then node = "default:stone_with_tin" - elseif math.random() < 0.02 then + elseif math.random() < 0.002 then node = "default:stone_with_copper" - elseif math.random() < 0.033 then + elseif math.random() < 0.0025 then + node = "technic:mineral_sulfur" + elseif math.random() < 0.0033 then node = "default:stone_with_iron" - elseif math.random() < 0.04 then + elseif math.random() < 0.004 then node = "moreores:mineral_silver" - elseif math.random() < 0.05 then + elseif math.random() < 0.0045 then + node = "technic:mineral_lead" + elseif math.random() < 0.005 then node = "default:stone_with_coal" else node = "default:stone" @@ -250,7 +194,7 @@ end) minetest.after(0, function() minetest.register_alias("default:pine_leaves", "default:pine_needles") minetest.register_alias("default:pine_bush_leaves", "default:pine_bush_needles") - local trees = {"default:", "default:jungle", "default:pine_", "default:acacia_", "default:aspen_", "default:bush_", "default:blueberry_bush_", "default:acacia_bush_", "default:pine_bush_",} + local trees = {"default:", "default:jungle", "default:pine_", "default:acacia_", "default:aspen_", "default:bush_", "default:blueberry_bush_", "default:acacia_bush_", "default:pine_bush_", "moretrees:apple_tree_", "moretrees:beech_", "moretrees:cedar_", "moretrees:date_palm_", "moretrees:fir_", "moretrees:oak_", "moretrees:palm_", "moretrees:poplar_", "moretrees:sequoia_", "moretrees:spruce_", "moretrees:willow_", } for _, tree in pairs(trees) do local items = {} items[#items + 1] = { @@ -261,7 +205,7 @@ minetest.after(0, function() if stree ~= tree then items[#items + 1] = { items = {stree .. "sapling"}, - rarity = 1000, + rarity = 10000, } end end @@ -301,8 +245,9 @@ minetest.register_craft({ minetest.register_craft({ output = "default:desert_stone", recipe = { - {"default:desert_sand", "default:desert_sand"}, - {"default:desert_sand", "default:desert_sand"}, + {"default:desert_sand", "default:desert_sand", "default:desert_sand"}, + {"default:desert_sand", "default:desert_sand", "default:desert_sand"}, + {"default:desert_sand", "default:desert_sand", "default:desert_sand"}, } }) @@ -365,27 +310,29 @@ minetest.register_craft({ -- commands -minetest.register_chatcommand("set_skyblock_spawn", { - param = " ", - 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, +}) + +minetest.register_chatcommand("set_skyblock_spawn", { + params = " ", + description = "Set new skyblock spawn for ", + 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, })