From 03769eabf61fcf034339f4600188ad36d00d3f98 Mon Sep 17 00:00:00 2001 From: rubenwardy Date: Mon, 23 Nov 2015 22:38:58 +0000 Subject: [PATCH] Add ctf_barrier --- mods/ctf_barrier/depends.txt | 2 + mods/ctf_barrier/init.lua | 101 +++++++++++++++++++++++++++++++++++ mods/ctf_pvp_engine | 2 +- 3 files changed, 104 insertions(+), 1 deletion(-) create mode 100644 mods/ctf_barrier/depends.txt create mode 100644 mods/ctf_barrier/init.lua diff --git a/mods/ctf_barrier/depends.txt b/mods/ctf_barrier/depends.txt new file mode 100644 index 0000000..a77278b --- /dev/null +++ b/mods/ctf_barrier/depends.txt @@ -0,0 +1,2 @@ +ctf +ctf_match diff --git a/mods/ctf_barrier/init.lua b/mods/ctf_barrier/init.lua new file mode 100644 index 0000000..7b2a187 --- /dev/null +++ b/mods/ctf_barrier/init.lua @@ -0,0 +1,101 @@ +minetest.register_node("ctf_barrier:ind_glass", { + description = "You cheater you!", + drawtype = "glasslike_framed_optional", + tiles = {"default_glass.png", "default_glass_detail.png"}, + inventory_image = minetest.inventorycube("default_glass.png"), + paramtype = "light", + sunlight_propagates = true, + is_ground_content = false, + walkable = true, + groups = {immortal = 1}, + sounds = default.node_sound_glass_defaults() +}) + +minetest.register_on_generated(function(minp, maxp, seed) + local r = ctf.setting("match.map_reset_limit") - 4 + + if not ((minp.x < -r and maxp.x > -r) + or (minp.x < r and maxp.x > r) + or (minp.y < -r and maxp.x > -r) + or (minp.y < r and maxp.x > r) + or (minp.z < -r and maxp.z > -r) + or (minp.z < r and maxp.z > r)) then + return + end + + -- Set up voxel manip + local t1 = os.clock() + local vm, emin, emax = minetest.get_mapgen_object("voxelmanip") + local a = VoxelArea:new{ + MinEdge={x=emin.x, y=emin.y, z=emin.z}, + MaxEdge={x=emax.x, y=emax.y, z=emax.z}, + } + local data = vm:get_data() + local c_glass = minetest.get_content_id("ctf_barrier:ind_glass") + local c_stone = minetest.get_content_id("ctf_flag:ind_base") + local c_air = minetest.get_content_id("air") + local dist = 3 + + -- Left + if minp.x < -r and maxp.x > -r then + local x = -r + for z = minp.z, maxp.z do + for y = minp.y, maxp.y do + local vi = a:index(x, y, z) + if data[vi] == c_air then + data[vi] = c_glass + else + data[vi] = c_stone + end + end + end + end + + -- Right + if minp.x < r and maxp.x > r then + local x = r + for z = minp.z, maxp.z do + for y = minp.y, maxp.y do + local vi = a:index(x, y, z) + if data[vi] == c_air then + data[vi] = c_glass + else + data[vi] = c_stone + end + end + end + end + + -- Front + if minp.z < -r and maxp.z > -r then + local z = -r + for x = minp.x, maxp.x do + for y = minp.y, maxp.y do + local vi = a:index(x, y, z) + if data[vi] == c_air then + data[vi] = c_glass + else + data[vi] = c_stone + end + end + end + end + + -- Back + if minp.z < r and maxp.z > r then + local z = r + for x = minp.x, maxp.x do + for y = minp.y, maxp.y do + local vi = a:index(x, y, z) + if data[vi] == c_air then + data[vi] = c_glass + else + data[vi] = c_stone + end + end + end + end + + vm:set_data(data) + vm:write_to_map(data) +end) diff --git a/mods/ctf_pvp_engine b/mods/ctf_pvp_engine index b72072c..37c15d6 160000 --- a/mods/ctf_pvp_engine +++ b/mods/ctf_pvp_engine @@ -1 +1 @@ -Subproject commit b72072c3ce1d6500f027252168b8f5a59b123eec +Subproject commit 37c15d683dcd822019a05bf1e398230daf4f6b3e