diff --git a/factions.lua b/factions.lua index 64d6096..349da6d 100644 --- a/factions.lua +++ b/factions.lua @@ -37,6 +37,12 @@ minetest.register_craftitem("banners:death_sheet", { inventory_image = "death_sheet.png" }) +minetest.register_craftitem("banners:death_base", { + groups = {}, + description = "Death base", + inventory_image = "death_base.png" +}) + -- crafts @@ -51,6 +57,16 @@ minetest.register_craft( -- silver flag pole } ) +minetest.register_craft( -- death flag pole + { + output = "banners:death_pole 1", + recipe = { + {"", "", "default:diamond"}, + {"", "default:obsidian", ""}, + {"default:obsidian", "", ""} + } + } +) minetest.register_craft( -- golden finial { @@ -82,6 +98,25 @@ minetest.register_craft( -- golden sheet } ) +minetest.register_craft( -- death sheet + { + output = "banners:death_sheet 1", + type = "shapeless", + recipe = { "default:obsidian", "banners:banner_sheet"} + } +) + +minetest.register_craft( -- death sheet + { + output = "banners:death_base 1", + recipe = { + {"", "", ""}, + {"", "banners:steel_base", ""}, + {"default:obsidian", "default:obsidian", "default:obsidian"} + } + } +) + minetest.register_craft( -- power banner { output = "banners:power_banner", @@ -93,6 +128,18 @@ minetest.register_craft( -- power banner } ) +minetest.register_craft( -- death banner + { + output = "banners:death_banner", + recipe = { + {"", "banners:death_sheet", ""}, + {"", "banners:death_pole", ""}, + {"", "banners:death_base", ""} + } + } +) + + -- nodes minetest.register_node("banners:power_banner", { drawtype = "mesh", @@ -111,7 +158,7 @@ minetest.register_node("banners:power_banner", { banners.banner_on_destruct(pos) end, on_dig = function(pos, n, p) - if minetest.is_protected(pos, p) then + if minetest.is_protected(pos, p:get_player_name()) then return end local meta = minetest.get_meta(pos) @@ -126,6 +173,39 @@ minetest.register_node("banners:power_banner", { end, }) +minetest.register_node("banners:death_banner", { + drawtype = "mesh", + mesh = "banner_support.x", + tiles = {"death_uv.png"}, + description = "Death Banner", + groups = {cracky=3}, + diggable = true, + stack_max = 1, + paramtype = "light", + paramtype2 = "facedir", + after_place_node = function (pos, player, itemstack, pointed_thing) + banners.after_deathbanner_placed(pos, player, itemstack, pointed_thing) + end, + on_destruct = function(pos) + banners.banner_on_destruct(pos) + end, + on_dig = function(pos, n, p) + if minetest.is_protected(pos, p:get_player_name()) then + return + end + local meta = minetest.get_meta(pos) + local defending_facname = meta:get_string("faction") + local parcelpos = factions.get_parcel_pos(pos) + if defending_facname then + local faction = factions.factions[defending_facname] + if faction then + faction:stop_attack(chunkpos) + end + end + banners.banner_on_dig(pos, n, p) + end, +}) + banners.after_powerbanner_placed = function(pos, player, itemstack, pointed_thing) minetest.get_node(pos).param2 = banners.determine_flag_direction(pos, pointed_thing) local faction = factions.players[player:get_player_name()] @@ -140,4 +220,16 @@ banners.after_powerbanner_placed = function(pos, player, itemstack, pointed_thin minetest.add_entity(pos, "banners:banner_ent") end +banners.after_deathbanner_placed = function(pos, player, itemstack, pointed_thing) + minetest.get_node(pos).param2 = banners.determine_flag_direction(pos, pointed_thing) + local attacking_faction = factions.players[player:get_player_name()] + if attacking_faction then + local parcelpos = factions.get_parcel_pos(pos) + attacking_faction = factions.factions[attacking_faction] + attacking_faction:attack_parcel(parcelpos) + minetest.get_meta(pos):set_string("faction", faction) + end + minetest.get_meta(pos):set_string("banner", "death_uv.png") + minetest.add_entity(pos, "banners:banner_ent") +end