From d6b7ae9b612916a3bc3954b7b21a94ede4e73ec4 Mon Sep 17 00:00:00 2001 From: ClobberXD Date: Fri, 3 Aug 2018 23:20:24 +0530 Subject: [PATCH] Add coloured team-doors - Add coloured team-doors for visual distinction. - Players can only ever have normal steel doors in their inventory which then convert into their respective team-doors on place. - Team-doors can be opened by anyone from the placer's team, _irrespective of its location in the map_ (which is the expected behaviour). --- mods/doors/init.lua | 62 +++++++++++++++++- mods/doors/textures/doors_door_steel_blue.png | Bin 0 -> 10403 bytes mods/doors/textures/doors_door_steel_red.png | Bin 0 -> 10520 bytes 3 files changed, 59 insertions(+), 3 deletions(-) create mode 100644 mods/doors/textures/doors_door_steel_blue.png create mode 100644 mods/doors/textures/doors_door_steel_red.png diff --git a/mods/doors/init.lua b/mods/doors/init.lua index 4607e21..f099fc2 100644 --- a/mods/doors/init.lua +++ b/mods/doors/init.lua @@ -151,7 +151,7 @@ function _doors.door_toggle(pos, node, clicker) replace_old_owner_information(pos) local tname = ctf.player(clicker:get_player_name()).team - local owner_team = pos.z >= 0 and "red" or "blue" + local owner_team = meta:get_string("owner_team") local is_right_team = tname == owner_team if clicker and not minetest.check_player_privs(clicker, "protection_bypass") and not is_right_team then @@ -299,6 +299,17 @@ function doors.register(name, def) return itemstack end + -- Get placer's team + local tname = ctf.player(pn).team or "" + + -- Prevent door placement if within 40 nodes of enemy base + local enemy_team = tname == "red" and "blue" or "red" + local enemy_base = ctf_map.map.teams[enemy_team].pos + if vector.distance(pos, enemy_base) < 40 then + minetest.chat_send_player(pn, "You can't place team-doors near the enemy base!") + return itemstack + end + local dir = minetest.dir_to_facedir(placer:get_look_dir()) local ref = { @@ -314,6 +325,11 @@ function doors.register(name, def) z = pos.z + ref[dir + 1].z, } + -- If steel doors are placed, append tname to place coloured team-doors instead + if name == "doors:door_steel" then + name = name .. "_" .. tname -- e.g. "doors:door_steel_red" + end + local state = 0 if minetest.get_item_group(minetest.get_node(aside).name, "door") == 1 then state = state + 2 @@ -328,7 +344,12 @@ function doors.register(name, def) meta:set_int("state", state) if def.protected then - meta:set_string("infotext", "Team Door") + local infotext = "Team Door" + if tname and tname ~= "" then + infotext = infotext .. " (" .. tname .. ")" + end + meta:set_string("infotext", infotext) + meta:set_string("owner_team", tname) end if not (creative and creative.is_enabled_for and creative.is_enabled_for(pn)) then @@ -367,7 +388,10 @@ function doors.register(name, def) def.groups.not_in_creative_inventory = 1 def.groups.door = 1 - def.drop = name + + -- If name contains team door itemstring, drop plain uncoloured team door + def.drop = name:find("doors:door_steel") and "doors:door_steel" or name + def.door = { name = name, sounds = { def.sound_close, def.sound_open }, @@ -448,6 +472,38 @@ doors.register("door_steel", { } }) +doors.register("door_steel_blue", { + tiles = {{name = "doors_door_steel_blue.png", backface_culling = true}}, + description = "Team Door", + inventory_image = "doors_item_steel.png", + protected = true, + groups = {cracky = 1, level = 2}, + sounds = default.node_sound_metal_defaults(), + sound_open = "doors_steel_door_open", + sound_close = "doors_steel_door_close", + recipe = { + {"default:steel_ingot", "default:steel_ingot"}, + {"default:steel_ingot", "default:steel_ingot"}, + {"default:steel_ingot", "default:steel_ingot"}, + } +}) + +doors.register("door_steel_red", { + tiles = {{name = "doors_door_steel_red.png", backface_culling = true}}, + description = "Team Door", + inventory_image = "doors_item_steel.png", + protected = true, + groups = {cracky = 1, level = 2}, + sounds = default.node_sound_metal_defaults(), + sound_open = "doors_steel_door_open", + sound_close = "doors_steel_door_close", + recipe = { + {"default:steel_ingot", "default:steel_ingot"}, + {"default:steel_ingot", "default:steel_ingot"}, + {"default:steel_ingot", "default:steel_ingot"}, + } +}) + doors.register("door_glass", { tiles = {"doors_door_glass.png"}, description = "Glass Door", diff --git a/mods/doors/textures/doors_door_steel_blue.png b/mods/doors/textures/doors_door_steel_blue.png new file mode 100644 index 0000000000000000000000000000000000000000..b6e4293353a78270db9377497b7a6eac7d98c299 GIT binary patch literal 10403 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 literal 0 HcmV?d00001 diff --git a/mods/doors/textures/doors_door_steel_red.png b/mods/doors/textures/doors_door_steel_red.png new file mode 100644 index 0000000000000000000000000000000000000000..bf9c354058bb5e5361c9c4a0341ddf71d0ae89b3 GIT binary patch literal 10520 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 nLZs(Oyd3m@r&qyw literal 0 HcmV?d00001