diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..2a7068d --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,9 @@ +version: 2 +updates: +- package-ecosystem: gitsubmodule + directory: "/" + schedule: + interval: daily + open-pull-requests-limit: 10 + assignees: + - LoneWolfHT diff --git a/mods/ctf/ctf_chat/init.lua b/mods/ctf/ctf_chat/init.lua index df69b01..bc66d5e 100644 --- a/mods/ctf/ctf_chat/init.lua +++ b/mods/ctf/ctf_chat/init.lua @@ -248,6 +248,9 @@ minetest.register_chatcommand("t", { minetest.chat_send_player(name, "The team channel is disabled.") return end + if param == "" then + return false, "-!- Empty team message, see /help t" + end local tname = ctf.player(name).team local team = ctf.team(tname) diff --git a/mods/ctf/ctf_crafting/init.lua b/mods/ctf/ctf_crafting/init.lua index a819871..e78c6b8 100644 --- a/mods/ctf/ctf_crafting/init.lua +++ b/mods/ctf/ctf_crafting/init.lua @@ -88,6 +88,24 @@ crafting.register_recipe({ level = 1, }) +-- Cobble Stairs +crafting.register_recipe({ + type = "inv", + output = "stairs:stair_cobble 8", + items = { "default:cobble 6"}, + always_known = true, + level = 1, +}) + +-- Desert Cobble Stairs +crafting.register_recipe({ + type = "inv", + output = "stairs:stair_desert_cobble 8", + items = { "default:desert_cobble 6"}, + always_known = true, + level = 1, +}) + -- Wood x4 crafting.register_recipe({ type = "inv", diff --git a/mods/ctf/ctf_map/ctf_map_core/maps b/mods/ctf/ctf_map/ctf_map_core/maps index 5fe0d7b..fa7fa3e 160000 --- a/mods/ctf/ctf_map/ctf_map_core/maps +++ b/mods/ctf/ctf_map/ctf_map_core/maps @@ -1 +1 @@ -Subproject commit 5fe0d7b1fd8aba95cfe0361a333abfa6b00f20a8 +Subproject commit fa7fa3e8f80dd82d6e98766581269817325e546b diff --git a/mods/ctf/ctf_map/ctf_map_core/schem_map.lua b/mods/ctf/ctf_map/ctf_map_core/schem_map.lua index 4c115d2..2286a0c 100644 --- a/mods/ctf/ctf_map/ctf_map_core/schem_map.lua +++ b/mods/ctf/ctf_map/ctf_map_core/schem_map.lua @@ -214,28 +214,44 @@ local shuffled_idx math.randomseed(os.time()) --- Fisher-Yates shuffling algorithm, used for shuffling map selection order +-- Fisher-Yates-Savilli shuffling algorithm, used for shuffling map selection order -- Adapted from snippet provided in https://stackoverflow.com/a/35574006 -local function shuffle_maps(idx_to_avoid) +-- Improved to ensure that the first maps from current shuffled order differ +-- from the last maps from previous shuffled order +-- You can set the minimum distance between the same map using map_recurrence_threshold param +local function shuffle_maps(previous_order, map_recurrence_threshold) + local maps_count = #ctf_map.available_maps + + map_recurrence_threshold = math.min(map_recurrence_threshold or 0, maps_count - 1) + + if previous_order == nil then + map_recurrence_threshold = 0 + previous_order = {} + for i = 1, maps_count do + previous_order[i] = i + end + end + -- Reset shuffled_idx shuffled_idx = 1 -- Create table of ordered indices shuffled_order = {} - for i = 1, #ctf_map.available_maps, 1 do - shuffled_order[i] = i + + -- At first select maps that don't intersect with the last maps from previous order + for i = 1, map_recurrence_threshold do + local j = math.random(1, maps_count - map_recurrence_threshold) + local k = maps_count - map_recurrence_threshold + i + shuffled_order[i] = previous_order[j] + previous_order[j] = previous_order[k] end - -- Shuffle table - for i = #ctf_map.available_maps, 1, -1 do - local j = math.random(i) - shuffled_order[i], shuffled_order[j] = shuffled_order[j], shuffled_order[i] - end - - -- Prevent the last map of the previous cycle from becoming the first in the next cycle - if shuffled_order[1] == idx_to_avoid then - local k = math.random(#ctf_map.available_maps - 1) - shuffled_order[1], shuffled_order[k + 1] = shuffled_order[k + 1], shuffled_order[1] + -- Select remaining maps + for i = map_recurrence_threshold + 1, maps_count do + local j = math.random(1, maps_count - i + 1) + local k = maps_count - i + 1 + shuffled_order[i] = previous_order[j] + previous_order[j] = previous_order[k] end end @@ -257,7 +273,7 @@ local function select_map() -- If shuffled_idx overflows, re-shuffle map selection order if shuffled_idx > #ctf_map.available_maps then - shuffle_maps(shuffled_order[#ctf_map.available_maps]) + shuffle_maps(shuffled_order, tonumber(minetest.settings:get("ctf_map.map_recurrence_threshold")) or 3) end else -- Choose next map index, but don't select the same one again diff --git a/mods/pvp/medkits/init.lua b/mods/pvp/medkits/init.lua index 710ccb9..5848a0b 100644 --- a/mods/pvp/medkits/init.lua +++ b/mods/pvp/medkits/init.lua @@ -83,10 +83,10 @@ local function stop_healing(player, interrupted) player:hud_remove(info.hud) end -ctf_flag.register_on_precapture(function() +ctf_match.register_on_new_match(function() -- Reset all player states at the end of the match for name, info in pairs(players) do - players[name]=nil + players[name] = nil local player = minetest.get_player_by_name(name) if player then player:hud_remove(info.hud) diff --git a/mods/pvp/medkits/mod.conf b/mods/pvp/medkits/mod.conf index 67007d1..57151da 100644 --- a/mods/pvp/medkits/mod.conf +++ b/mods/pvp/medkits/mod.conf @@ -1,2 +1,2 @@ name = medkits -depends = ctf_flag +depends = ctf_match