diff --git a/mods/ctf/ctf_map/ctf_traps.lua b/mods/ctf/ctf_map/ctf_traps.lua index 8439bf361..d68498c40 100644 --- a/mods/ctf/ctf_map/ctf_traps.lua +++ b/mods/ctf/ctf_map/ctf_traps.lua @@ -36,7 +36,7 @@ minetest.register_node("ctf_map:spike", { paramtype2 = "meshoptions", sunlight_propagates = true, walkable = false, - damage_per_second = 7, + damage_per_second = 5, groups = {cracky=1, level=2}, selection_box = { type = "fixed", @@ -46,8 +46,10 @@ minetest.register_node("ctf_map:spike", { local pteam = ctf_teams.get(placer) if pteam then + local pname = placer:get_player_name() + if not ctf_core.pos_inside(pointed_thing.above, ctf_teams.get_team_territory(pteam)) then - minetest.chat_send_player(placer:get_player_name(), "You can only place spikes in your own territory!") + minetest.chat_send_player(pname, "You can only place spikes in your own territory!") return itemstack end @@ -57,6 +59,8 @@ minetest.register_node("ctf_map:spike", { local result = minetest.item_place(newitemstack, placer, pointed_thing, 34) if result then + minetest.get_meta(pointed_thing.above):set_string("placer", pname) + itemstack:set_count(result:get_count()) end @@ -80,7 +84,7 @@ for _, team in ipairs(ctf_teams.teamlist) do paramtype2 = "meshoptions", sunlight_propagates = true, walkable = false, - damage_per_second = 7, + damage_per_second = 5, groups = {cracky=1, level=2}, drop = "ctf_map:spike", selection_box = { @@ -88,7 +92,13 @@ for _, team in ipairs(ctf_teams.teamlist) do fixed = {-0.5, -0.5, -0.5, 0.5, 0, 0.5}, }, on_place = function(itemstack, placer, pointed_thing) - return minetest.item_place(itemstack, placer, pointed_thing, 34) + local item, pos = minetest.item_place(itemstack, placer, pointed_thing, 34) + if item then + local pname = placer:get_player_name() + minetest.get_meta(pointed_thing.above):set_string("placer_team", ctf_teams.get(pname)) + minetest.get_meta(pointed_thing.above):set_string("placer", pname) + end + return item, pos end }) end @@ -100,6 +110,21 @@ minetest.register_on_player_hpchange(function(player, hp_change, reason) if team and reason.node == string.format("ctf_map:spike_%s", team) then return 0, true end + if reason.node_pos then + local meta = minetest.get_meta(reason.node_pos) + local pteam = meta:get_string("placer_team") + local pname = meta:get_string("placer") + if pteam ~= team then + local placer = minetest.get_player_by_name(pname) + if ctf_teams.get(pname) == team then + player:set_hp(player:get_hp() - 7) + return -7, false + elseif placer then + player:punch(placer, 1, { fleshy = 7, spike = 1}) + return -7, false + end + end + end end return hp_change diff --git a/mods/ctf/ctf_modebase/features.lua b/mods/ctf/ctf_modebase/features.lua index 23640ada5..013a38497 100644 --- a/mods/ctf/ctf_modebase/features.lua +++ b/mods/ctf/ctf_modebase/features.lua @@ -195,6 +195,7 @@ local damage_group_textures = { knockback_grenade = "ctf_mode_nade_fight_knockback_grenade.png", black_hole_grenade = "ctf_mode_nade_fight_black_hole_grenade.png", damage_cobble = "ctf_map_damage_cobble.png", + spike = "ctf_map_spike.png", } local function get_weapon_image(hitter, tool_capabilities)