Add support for arbitrary number of chest zones
This commit is contained in:
parent
b8c18c1ee6
commit
26a153a232
1 changed files with 57 additions and 27 deletions
|
@ -43,6 +43,7 @@ do
|
||||||
table.insert(ctf_map.available_maps, key)
|
table.insert(ctf_map.available_maps, key)
|
||||||
end
|
end
|
||||||
print(dump(ctf_map.available_maps))
|
print(dump(ctf_map.available_maps))
|
||||||
|
ctf_map.available_maps = {"ctf_extra_maps/03_caverns"}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
@ -54,16 +55,18 @@ function ctf_map.place_map(map)
|
||||||
|
|
||||||
assert(res)
|
assert(res)
|
||||||
|
|
||||||
local seed = minetest.get_mapgen_setting("seed")
|
|
||||||
for _, value in pairs(ctf_map.map.teams) do
|
for _, value in pairs(ctf_map.map.teams) do
|
||||||
place_chests(value.chests.from, value.chests.to, seed, value.chests.n)
|
|
||||||
minetest.log("info", "Placing " .. value.chests.n .. " chests from " ..
|
|
||||||
minetest.pos_to_string(value.chests.from) .. " to "..
|
|
||||||
minetest.pos_to_string(value.chests.to))
|
|
||||||
|
|
||||||
ctf_team_base.place(value.color, value.pos)
|
ctf_team_base.place(value.color, value.pos)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local seed = minetest.get_mapgen_setting("seed")
|
||||||
|
for _, chestzone in pairs(ctf_map.map.chests) do
|
||||||
|
minetest.log("warning", "Placing " .. chestzone.n .. " chests from " ..
|
||||||
|
minetest.pos_to_string(chestzone.from) .. " to "..
|
||||||
|
minetest.pos_to_string(chestzone.to))
|
||||||
|
place_chests(chestzone.from, chestzone.to, seed, chestzone.n)
|
||||||
|
end
|
||||||
|
|
||||||
minetest.after(2, function()
|
minetest.after(2, function()
|
||||||
local msg = "Map: " .. map.name .. " by " .. map.author
|
local msg = "Map: " .. map.name .. " by " .. map.author
|
||||||
if map.hint then
|
if map.hint then
|
||||||
|
@ -90,11 +93,12 @@ function ctf_match.load_map_meta(idx, name)
|
||||||
hint = meta:get("hint"),
|
hint = meta:get("hint"),
|
||||||
rotation = meta:get("rotation"),
|
rotation = meta:get("rotation"),
|
||||||
schematic = name .. ".mts",
|
schematic = name .. ".mts",
|
||||||
|
initial_stuff = initial_stuff and initial_stuff:split(","),
|
||||||
r = tonumber(meta:get("r")),
|
r = tonumber(meta:get("r")),
|
||||||
h = tonumber(meta:get("h")),
|
h = tonumber(meta:get("h")),
|
||||||
teams = {},
|
|
||||||
initial_stuff = initial_stuff and initial_stuff:split(","),
|
|
||||||
offset = offset,
|
offset = offset,
|
||||||
|
teams = {},
|
||||||
|
chests = {},
|
||||||
}
|
}
|
||||||
|
|
||||||
assert(map.r <= max_r)
|
assert(map.r <= max_r)
|
||||||
|
@ -102,31 +106,13 @@ function ctf_match.load_map_meta(idx, name)
|
||||||
map.pos1 = vector.add(offset, { x = -map.r, y = -map.h / 2, z = -map.r })
|
map.pos1 = vector.add(offset, { x = -map.r, y = -map.h / 2, z = -map.r })
|
||||||
map.pos2 = vector.add(offset, { x = map.r, y = map.h / 2, z = map.r })
|
map.pos2 = vector.add(offset, { x = map.r, y = map.h / 2, z = map.r })
|
||||||
|
|
||||||
|
-- Read teams from config
|
||||||
local i = 1
|
local i = 1
|
||||||
while meta:get("team." .. i) do
|
while meta:get("team." .. i) do
|
||||||
local tname = meta:get("team." .. i)
|
local tname = meta:get("team." .. i)
|
||||||
local tcolor = meta:get("team." .. i .. ".color")
|
local tcolor = meta:get("team." .. i .. ".color")
|
||||||
local tpos = minetest.string_to_pos(meta:get("team." .. i .. ".pos"))
|
local tpos = minetest.string_to_pos(meta:get("team." .. i .. ".pos"))
|
||||||
|
|
||||||
local chests1 = meta:get("team." .. i .. ".chests1")
|
|
||||||
if chests1 then
|
|
||||||
chests1 = vector.add(offset, minetest.string_to_pos(chests1))
|
|
||||||
elseif i == 1 then
|
|
||||||
chests1 = vector.add(offset, { x = -map.r, y = -map.h / 2, z = 0 })
|
|
||||||
elseif i == 2 then
|
|
||||||
chests1 = map.pos1
|
|
||||||
end
|
|
||||||
|
|
||||||
local chests2 = meta:get("team." .. i .. ".chests2")
|
|
||||||
if chests2 then
|
|
||||||
chests2 = vector.add(offset, minetest.string_to_pos(chests2))
|
|
||||||
elseif i == 1 then
|
|
||||||
chests2 = map.pos2
|
|
||||||
elseif i == 2 then
|
|
||||||
chests2 = vector.add(offset, { x = map.r, y = map.h / 2, z = 0 })
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
map.teams[tname] = {
|
map.teams[tname] = {
|
||||||
color = tcolor,
|
color = tcolor,
|
||||||
pos = vector.add(offset, tpos),
|
pos = vector.add(offset, tpos),
|
||||||
|
@ -140,6 +126,50 @@ function ctf_match.load_map_meta(idx, name)
|
||||||
i = i + 1
|
i = i + 1
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- Read custom chest zones from config
|
||||||
|
i = 1
|
||||||
|
while meta:get("chests." .. i .. ".from") do
|
||||||
|
local from = minetest.string_to_pos(meta:get("chests." .. i .. ".from"))
|
||||||
|
local to = minetest.string_to_pos(meta:get("chests." .. i .. ".to"))
|
||||||
|
assert(from and to, "Positions needed for chest zone " .. i .. " in map " .. map.name)
|
||||||
|
|
||||||
|
map.chests[i] = {
|
||||||
|
from = vector.add(offset, from),
|
||||||
|
to = vector.add(offset, to),
|
||||||
|
n = tonumber(meta:get("chests." .. i .. ".n") or "23"),
|
||||||
|
}
|
||||||
|
|
||||||
|
minetest.log("warning", dump(map.chests[i]))
|
||||||
|
|
||||||
|
i = i + 1
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Add default chest zones if none given
|
||||||
|
if i == 1 then
|
||||||
|
while meta:get("team." .. i) do
|
||||||
|
local chests1
|
||||||
|
if i == 1 then
|
||||||
|
chests1 = vector.add(offset, { x = -map.r, y = -map.h / 2, z = 0 })
|
||||||
|
elseif i == 2 then
|
||||||
|
chests1 = map.pos1
|
||||||
|
end
|
||||||
|
|
||||||
|
local chests2
|
||||||
|
if i == 1 then
|
||||||
|
chests2 = map.pos2
|
||||||
|
elseif i == 2 then
|
||||||
|
chests2 = vector.add(offset, { x = map.r, y = map.h / 2, z = 0 })
|
||||||
|
end
|
||||||
|
|
||||||
|
map.chests[i] = {
|
||||||
|
from = chests1,
|
||||||
|
to = chests2,
|
||||||
|
n = 23,
|
||||||
|
}
|
||||||
|
i = i + 1
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
return map
|
return map
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue