Optimized perfomance + code cleaning
parent
22f7a4f8f4
commit
8b8a8542ff
22
SETTINGS.lua
22
SETTINGS.lua
|
@ -51,6 +51,21 @@ skywars_settings.background_height = 11
|
|||
|
||||
-- The x position offset from the background border of the first buttons row
|
||||
-- in real coordinates, the bigger it is the righter the row will be placed.
|
||||
--[[
|
||||
1.7
|
||||
|------|--------------------> x
|
||||
| |
|
||||
| * * * Background * * *
|
||||
| * | *
|
||||
| * | *
|
||||
6.6 ---*-- Button1 Button2 * --> FIRST ROW
|
||||
| * Button3 Button4 *
|
||||
| * *
|
||||
| * *
|
||||
| * * * * * * * * * * * *
|
||||
|
|
||||
\/ y
|
||||
]]
|
||||
skywars_settings.starting_x = 1.7
|
||||
|
||||
-- The y position offset from the background border of the first buttons row
|
||||
|
@ -72,6 +87,12 @@ skywars_settings.buttons_width = 1.8
|
|||
-- The buttons height in real coordinates.
|
||||
skywars_settings.buttons_height = 1.6
|
||||
|
||||
|
||||
|
||||
|
||||
-- AUTO EQUIP. SYSTEM --
|
||||
|
||||
|
||||
-- The items importances that are used by the auto equip system:
|
||||
-- when a player takes an item from a chest, if it has a greater
|
||||
-- importance and it's in the same group of the one in the hotbar,
|
||||
|
@ -113,6 +134,7 @@ skywars_settings.items_importances = {
|
|||
|
||||
|
||||
|
||||
|
||||
-- MAP RESET SYSTEM SETTINGS --
|
||||
|
||||
|
||||
|
|
|
@ -3,6 +3,11 @@ local function remove_privs() end
|
|||
local function create_barrier_cage() end
|
||||
local function keep_teleporting() end
|
||||
local function drop_items() end
|
||||
local update_timer_hud = skywars.update_timer_hud
|
||||
local kill_players_out_map = skywars.kill_players_out_map
|
||||
local add_node = minetest.add_node
|
||||
local get_node = minetest.get_node
|
||||
local remove_node = minetest.remove_node
|
||||
|
||||
|
||||
minetest.register_on_joinplayer(function(player)
|
||||
|
@ -190,8 +195,8 @@ end)
|
|||
|
||||
|
||||
arena_lib.on_time_tick("skywars", function(arena)
|
||||
skywars.kill_players_out_map(arena)
|
||||
skywars.update_timer_hud(arena)
|
||||
kill_players_out_map(arena)
|
||||
update_timer_hud(arena)
|
||||
end)
|
||||
|
||||
|
||||
|
@ -207,7 +212,7 @@ function add_privs(pl_name)
|
|||
local privs = minetest.get_player_privs(pl_name)
|
||||
local player = minetest.get_player_by_name(pl_name)
|
||||
|
||||
-- preventing players with noclip to fall when placing nodes
|
||||
-- Preventing players with noclip to fall when placing nodes.
|
||||
if privs.noclip then
|
||||
player:get_meta():set_string("sw_can_noclip", "true")
|
||||
privs.noclip = nil
|
||||
|
@ -256,10 +261,11 @@ function create_barrier_cage(player)
|
|||
|
||||
for _, relative_pos in pairs(glass_nodes) do
|
||||
local node_pos = vector.round(vector.add(original_pos, relative_pos))
|
||||
if minetest.get_node(node_pos).name == "air" then
|
||||
minetest.add_node(node_pos, {name="skywars:barrier"})
|
||||
|
||||
if get_node(node_pos).name == "air" then
|
||||
add_node(node_pos, {name="skywars:barrier"})
|
||||
minetest.after(skywars_settings.loading_time, function()
|
||||
minetest.remove_node(node_pos)
|
||||
remove_node(node_pos)
|
||||
end)
|
||||
end
|
||||
end
|
||||
|
@ -276,8 +282,8 @@ function drop_items(player)
|
|||
|
||||
for i, itemstack in pairs(inv) do
|
||||
local pl_pos = player:get_pos()
|
||||
local random_x = pl_pos.x + math.random() + math.random(-noise, noise-1)
|
||||
local random_z = pl_pos.z + math.random() + math.random(-noise, noise-1)
|
||||
local random_x = pl_pos.x + math.random() + math.random(-noise-1, noise-1)
|
||||
local random_z = pl_pos.z + math.random() + math.random(-noise-1, noise-1)
|
||||
local random_pos = {
|
||||
x = random_x,
|
||||
y = pl_pos.y,
|
||||
|
|
|
@ -1,10 +1,11 @@
|
|||
local function fill_chests() end
|
||||
local function generate_particles() end
|
||||
|
||||
|
||||
function skywars.place_chests(arena)
|
||||
local add_node = minetest.add_node
|
||||
|
||||
for i=1, #arena.chests do
|
||||
minetest.add_node(arena.chests[i].pos, {name="default:chest"})
|
||||
add_node(arena.chests[i].pos, {name="default:chest"})
|
||||
end
|
||||
fill_chests(arena)
|
||||
end
|
||||
|
@ -26,9 +27,12 @@ end
|
|||
|
||||
|
||||
function fill_chests(arena)
|
||||
local get_meta = minetest.get_meta
|
||||
local select_random_treasures = skywars.select_random_treasures
|
||||
|
||||
for i, chest in pairs(arena.chests) do
|
||||
local treasures = skywars.select_random_treasures(chest, arena)
|
||||
local meta = minetest.get_meta(chest.pos)
|
||||
local treasures = select_random_treasures(chest, arena)
|
||||
local meta = get_meta(chest.pos)
|
||||
local inv = meta:get_inventory()
|
||||
|
||||
inv:set_list("main", {})
|
||||
|
|
|
@ -1,5 +1,8 @@
|
|||
-- Select the treasures to put in the chests inventory
|
||||
local mod = "skywars"
|
||||
local random = math.random
|
||||
local ceil = math.ceil
|
||||
local table_insert = table.insert
|
||||
local function treasure_to_itemstack() end
|
||||
|
||||
|
||||
|
@ -35,13 +38,13 @@ end
|
|||
function skywars.select_random_treasures(chest, arena)
|
||||
local preciousness_filtered_treasures = {}
|
||||
local generated_treasures = {}
|
||||
local treasure_amount = math.ceil(math.random(chest.min_treasures, chest.max_treasures))
|
||||
local treasure_amount = ceil(random(chest.min_treasures, chest.max_treasures))
|
||||
local treasures_to_be_generated = treasure_amount
|
||||
|
||||
for i = 1, #arena.treasures do
|
||||
local treasure = arena.treasures[i]
|
||||
if treasure.preciousness >= chest.min_preciousness and treasure.preciousness <= chest.max_preciousness then
|
||||
table.insert(preciousness_filtered_treasures, treasure)
|
||||
table_insert(preciousness_filtered_treasures, treasure)
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -49,13 +52,13 @@ function skywars.select_random_treasures(chest, arena)
|
|||
for i = 1, treasures_to_be_generated do
|
||||
if not generated_treasures[i] then
|
||||
for j = 1, #preciousness_filtered_treasures do
|
||||
local random = math.random(1, 100)
|
||||
local random = random(1, 100)
|
||||
local treasure_itemstack = treasure_to_itemstack(preciousness_filtered_treasures[j])
|
||||
|
||||
if treasure_itemstack == "error" then return generated_treasures end
|
||||
|
||||
if treasure_itemstack and random % (preciousness_filtered_treasures[j].rarity * 10) == 0 then
|
||||
table.insert(generated_treasures, treasure_itemstack)
|
||||
table_insert(generated_treasures, treasure_itemstack)
|
||||
break
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
local saved_huds = {} -- id = hud
|
||||
|
||||
local get_player_by_name = minetest.get_player_by_name
|
||||
|
||||
function skywars.generate_HUD(arena, pl_name)
|
||||
local player = minetest.get_player_by_name(pl_name)
|
||||
local player = get_player_by_name(pl_name)
|
||||
local players_count_
|
||||
local players_killed_
|
||||
local timer_
|
||||
|
@ -89,7 +89,7 @@ end
|
|||
|
||||
|
||||
function skywars.remove_HUD(arena, pl_name)
|
||||
local player = minetest.get_player_by_name(pl_name)
|
||||
local player = get_player_by_name(pl_name)
|
||||
|
||||
for name, id in pairs(saved_huds[pl_name]) do
|
||||
if type(id) == "table" then id = id.id end
|
||||
|
@ -109,7 +109,7 @@ function skywars.update_players_counter(arena, players_amount_updated)
|
|||
end
|
||||
|
||||
for pl_name in pairs(arena.players) do
|
||||
local player = minetest.get_player_by_name(pl_name)
|
||||
local player = get_player_by_name(pl_name)
|
||||
|
||||
if arena.players_original_amount == nil then return end
|
||||
|
||||
|
@ -121,7 +121,7 @@ end
|
|||
|
||||
|
||||
function skywars.increment_players_killed(pl_name)
|
||||
local player = minetest.get_player_by_name(pl_name)
|
||||
local player = get_player_by_name(pl_name)
|
||||
local players_killed = saved_huds[pl_name].players_killed.amount + 1
|
||||
saved_huds[pl_name].players_killed.amount = players_killed
|
||||
|
||||
|
@ -132,7 +132,7 @@ end
|
|||
|
||||
function skywars.update_timer_hud(arena)
|
||||
for pl_name in pairs(arena.players) do
|
||||
local player = minetest.get_player_by_name(pl_name)
|
||||
local player = get_player_by_name(pl_name)
|
||||
player:hud_change(saved_huds[pl_name].timer, "text", arena.current_time)
|
||||
end
|
||||
end
|
|
@ -4,6 +4,7 @@ local function reset_node_inventory() end
|
|||
local deserialize = minetest.deserialize
|
||||
local add_node = minetest.add_node
|
||||
local get_node = minetest.get_node
|
||||
local get_inventory = minetest.get_inventory
|
||||
local on_step = minetest.registered_entities["__builtin:item"].on_step
|
||||
minetest.registered_entities["__builtin:item"].match_id = -2
|
||||
|
||||
|
@ -123,10 +124,18 @@ end
|
|||
|
||||
function reset_node_inventory(pos)
|
||||
local location = {type="node", pos = pos}
|
||||
local inv = minetest.get_inventory(location)
|
||||
local inv = get_inventory(location)
|
||||
if inv then
|
||||
for index, list in ipairs(inv:get_lists()) do
|
||||
inv:set_list(list, {})
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
minetest.register_on_mods_loaded(function()
|
||||
for i, arena in pairs(arena_lib.mods["skywars"].arenas) do
|
||||
arena.is_resetting = false
|
||||
end
|
||||
end)
|
|
@ -1,4 +1,5 @@
|
|||
local function save_node() end
|
||||
local get_inventory = minetest.get_inventory
|
||||
|
||||
|
||||
minetest.register_on_placenode(function(pos, newnode, player, oldnode, itemstack, pointed_thing)
|
||||
|
@ -73,7 +74,8 @@ function skywars.save_nodes_with_inventories(arena)
|
|||
local maps = skywars.load_table("maps")
|
||||
local manip = minetest.get_voxel_manip()
|
||||
local emerged_pos1, emerged_pos2 = manip:read_from_map(arena.min_pos, arena.max_pos)
|
||||
local area = VoxelArea:new({MinEdge=emerged_pos1, MaxEdge=emerged_pos2})
|
||||
local emerged_area = VoxelArea:new({MinEdge=emerged_pos1, MaxEdge=emerged_pos2})
|
||||
local original_area = VoxelArea:new({MinEdge=arena.min_pos, MaxEdge=arena.max_pos})
|
||||
local nodes = manip:get_data()
|
||||
local get_inventory = minetest.get_inventory
|
||||
local get_name_from_content_id = minetest.get_name_from_content_id
|
||||
|
@ -84,11 +86,11 @@ function skywars.save_nodes_with_inventories(arena)
|
|||
maps[arena.name].always_to_be_reset_nodes = {}
|
||||
|
||||
-- Saving every node with an inventory.
|
||||
for i in area:iterp(emerged_pos1, emerged_pos2) do
|
||||
local node_pos = area:position(i)
|
||||
local location = {type="node", pos=node_pos}
|
||||
for i in emerged_area:iterp(emerged_pos1, emerged_pos2) do
|
||||
local node_pos = emerged_area:position(i)
|
||||
local location = {type = "node", pos = node_pos}
|
||||
|
||||
if get_inventory(location) then
|
||||
if original_area:containsp(node_pos) and get_inventory(location) then
|
||||
local node = get_node(node_pos)
|
||||
local serialized_pos = serialize(node_pos)
|
||||
|
||||
|
|
|
@ -1,6 +1,9 @@
|
|||
local get_player_by_name = minetest.get_player_by_name
|
||||
|
||||
|
||||
function skywars.kill_players_out_map(arena)
|
||||
for pl_name in pairs(arena.players) do
|
||||
local player = minetest.get_player_by_name(pl_name)
|
||||
local player = get_player_by_name(pl_name)
|
||||
local pl_pos = player:get_pos()
|
||||
local min_pos = vector.add(arena.min_pos, 5)
|
||||
local max_pos = vector.subtract(arena.max_pos, 5)
|
||||
|
@ -21,27 +24,9 @@ end
|
|||
|
||||
|
||||
|
||||
minetest.register_node("skywars:barrier", {
|
||||
description = skywars.T("Unbreakable without skywars_admin priv transparent node"),
|
||||
drawtype = "airlike",
|
||||
paramtype = "light",
|
||||
sunlight_propagates = true,
|
||||
air_equivalent = true,
|
||||
drop = "",
|
||||
inventory_image = "sw_node_barrier.png",
|
||||
wield_image = "sw_node_barrier.png",
|
||||
groups = {oddly_breakable_by_hand = 2},
|
||||
can_dig = function(pos, player)
|
||||
if minetest.get_player_privs(player:get_player_name()).skywars_admin then
|
||||
return true
|
||||
end
|
||||
return false
|
||||
end
|
||||
})
|
||||
|
||||
|
||||
|
||||
function skywars.iterate_area_nodes(min_pos, max_pos, func)
|
||||
local get_node = minetest.get_node
|
||||
|
||||
for x = 1, max_pos.x - min_pos.x do
|
||||
for y = 1, max_pos.y - min_pos.y do
|
||||
for z = 1, max_pos.z - min_pos.z do
|
||||
|
@ -50,7 +35,7 @@ function skywars.iterate_area_nodes(min_pos, max_pos, func)
|
|||
y = min_pos.y+y,
|
||||
z = min_pos.z+z
|
||||
}
|
||||
local node = minetest.get_node(node_pos)
|
||||
local node = get_node(node_pos)
|
||||
local func_result = func(node, node_pos)
|
||||
|
||||
if func_result then return func_result end
|
||||
|
|
|
@ -71,11 +71,9 @@ function compare_items(item1, item2)
|
|||
local item1_category, item1_importance = get_item_importance(item1)
|
||||
local item2_category, item2_importance = get_item_importance(item2)
|
||||
|
||||
if item1_category and item2_category then
|
||||
if item1_category == item2_category then
|
||||
if item1_importance > item2_importance then return item1
|
||||
elseif item1_importance < item2_importance then return item2 end
|
||||
end
|
||||
if (item1_category and item2_category) and (item1_category == item2_category) then
|
||||
if item1_importance > item2_importance then return item1
|
||||
elseif item1_importance < item2_importance then return item2 end
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -17,9 +17,10 @@ function skywars.test_async_speed(arena)
|
|||
local area_size = 10
|
||||
local min_pos = arena.min_pos
|
||||
local max_pos = vector.add(min_pos, area_size)
|
||||
local set_node = minetest.set_node
|
||||
|
||||
skywars.iterate_area_nodes(min_pos, max_pos, function(node, node_pos)
|
||||
minetest.set_node(node_pos, {name="skywars:test_node"})
|
||||
set_node(node_pos, {name="skywars:test_node"})
|
||||
end)
|
||||
|
||||
minetest.after(1, function() skywars.reset_map(arena, true) end)
|
||||
|
@ -86,19 +87,3 @@ function get_nodes_at_arena_edges(arena)
|
|||
|
||||
return node1, node2
|
||||
end
|
||||
|
||||
|
||||
|
||||
minetest.register_node("skywars:test_node", {
|
||||
description = "Skywars test node, don't use it!",
|
||||
groups = {crumbly=1, soil=1, dig_immediate=3},
|
||||
tiles = {"sw_node_test.png"},
|
||||
})
|
||||
|
||||
|
||||
|
||||
minetest.register_on_mods_loaded(function()
|
||||
for i, arena in pairs(arena_lib.mods["skywars"].arenas) do
|
||||
arena.is_resetting = false
|
||||
end
|
||||
end)
|
1
init.lua
1
init.lua
|
@ -32,6 +32,7 @@ arena_lib.register_minigame("skywars", {
|
|||
|
||||
|
||||
dofile(minetest.get_modpath("skywars") .. "/chatcmdbuilder.lua")
|
||||
dofile(minetest.get_modpath("skywars") .. "/nodes.lua")
|
||||
dofile(minetest.get_modpath("skywars") .. "/utils.lua")
|
||||
dofile(minetest.get_modpath("skywars") .. "/_map_handler/map_utils.lua")
|
||||
dofile(minetest.get_modpath("skywars") .. "/_map_handler/map_reset.lua")
|
||||
|
|
|
@ -0,0 +1,25 @@
|
|||
minetest.register_node("skywars:barrier", {
|
||||
description = skywars.T("Unbreakable without skywars_admin priv transparent node"),
|
||||
drawtype = "airlike",
|
||||
paramtype = "light",
|
||||
sunlight_propagates = true,
|
||||
air_equivalent = true,
|
||||
drop = "",
|
||||
inventory_image = "sw_node_barrier.png",
|
||||
wield_image = "sw_node_barrier.png",
|
||||
groups = {oddly_breakable_by_hand = 2},
|
||||
can_dig = function(pos, player)
|
||||
if minetest.get_player_privs(player:get_player_name()).skywars_admin then
|
||||
return true
|
||||
end
|
||||
return false
|
||||
end
|
||||
})
|
||||
|
||||
|
||||
|
||||
minetest.register_node("skywars:test_node", {
|
||||
description = "Skywars test node, don't use it!",
|
||||
groups = {crumbly=1, soil=1, dig_immediate=3},
|
||||
tiles = {"sw_node_test.png"},
|
||||
})
|
Loading…
Reference in New Issue