From 903898d0e8f21270931adf01c774fda84b4a6830 Mon Sep 17 00:00:00 2001 From: Der1248 Date: Sat, 3 Nov 2018 12:14:58 +0100 Subject: [PATCH] Castrum 1.5.0 upload --- README.txt | 4 +- menu/Thumbs.db | Bin 28160 -> 28160 bytes mods/beds/api.lua | 24 +- mods/boats/init.lua | 12 +- mods/bones/init.lua | 6 + mods/bucket/init.lua | 3 +- mods/carts/cart_entity.lua | 7 +- mods/carts/functions.lua | 23 +- mods/castrum/Chapter3.lua | 304 ++ mods/castrum/fight.lua | 838 ++++- mods/castrum/init.lua | 3028 +++++++++++++++-- mods/castrum/models/castrum_horse.png | Bin 0 -> 1639 bytes .../models/castrum_knight_lv2_dark.png | Bin 0 -> 2902 bytes mods/castrum/models/horse.blend | Bin 0 -> 840572 bytes mods/castrum/models/horse.mtl | 24 + mods/castrum/models/horse.obj | 561 +++ mods/castrum/models/horse2.blend | Bin 0 -> 850136 bytes mods/castrum/textures/castrum_horse_inv.png | Bin 0 -> 795 bytes mods/castrum/textures/castrum_num1.png | Bin 0 -> 358 bytes mods/castrum/textures/castrum_num2.png | Bin 0 -> 542 bytes mods/castrum/textures/castrum_num3.png | Bin 0 -> 606 bytes mods/castrum/textures/castrum_num4.png | Bin 0 -> 442 bytes mods/castrum/textures/castrum_num5.png | Bin 0 -> 522 bytes mods/castrum/update.lua | 62 +- mods/creative/init.lua | 10 +- mods/creative/inventory.lua | 44 +- mods/default/README.txt | 10 +- mods/default/crafting.lua | 109 +- mods/default/craftitems.lua | 19 +- mods/default/functions.lua | 18 +- mods/default/furnace.lua | 19 +- mods/default/license.txt | 4 +- mods/default/nodes.lua | 91 +- mods/default/textures/default_book.png | Bin 255 -> 204 bytes .../default/textures/default_book_written.png | Bin 282 -> 262 bytes .../textures/default_bookshelf_slot.png | Bin 191 -> 140 bytes mods/default/tools.lua | 3 +- mods/default/torch.lua | 3 +- mods/default/trees.lua | 14 +- mods/doors/init.lua | 26 +- mods/farming/api.lua | 24 +- mods/farming/depends.txt | 1 + mods/farming/nodes.lua | 10 + mods/flowers/init.lua | 96 +- mods/screwdriver/init.lua | 9 +- mods/sfinv/api.lua | 22 +- mods/stairs/depends.txt | 1 - mods/stairs/init.lua | 79 +- mods/tnt/init.lua | 68 +- 49 files changed, 4862 insertions(+), 714 deletions(-) create mode 100644 mods/castrum/Chapter3.lua create mode 100644 mods/castrum/models/castrum_horse.png create mode 100644 mods/castrum/models/castrum_knight_lv2_dark.png create mode 100644 mods/castrum/models/horse.blend create mode 100644 mods/castrum/models/horse.mtl create mode 100644 mods/castrum/models/horse.obj create mode 100644 mods/castrum/models/horse2.blend create mode 100644 mods/castrum/textures/castrum_horse_inv.png create mode 100644 mods/castrum/textures/castrum_num1.png create mode 100644 mods/castrum/textures/castrum_num2.png create mode 100644 mods/castrum/textures/castrum_num3.png create mode 100644 mods/castrum/textures/castrum_num4.png create mode 100644 mods/castrum/textures/castrum_num5.png diff --git a/README.txt b/README.txt index 1132309..df5416c 100644 --- a/README.txt +++ b/README.txt @@ -1,4 +1,4 @@ -A subgame by 1248 +A Game by 1248 Thanks to: / @@ -12,7 +12,7 @@ Collect resources and rebuild the old castle License: See README.txt in each mod for more information -Every code written by me is LGPLv2.1 and CC-BY-SA +Every code written by me is LGPLv2.1 notes: wood door in doors mod changed diff --git a/menu/Thumbs.db b/menu/Thumbs.db index 3ffa3e561b5ea3632ee95f41c6a60662f0f791ce..639b08911e89de6a1838b9c4d690453f31864faa 100644 GIT binary patch delta 48 zcmV-00MGw`+yQ{x0kCWY1rQ6~U}m#%1fK&4_tbq#0|LuQk1h8 G3g~0QI}$Dc delta 48 zcmZp;!`N_#aYGIZ>jkDT_ms_rEc2N;j29>N-f|5W-YmiKgOMZkyI*xm%O1|n5?n8m E0mASSm;e9( diff --git a/mods/beds/api.lua b/mods/beds/api.lua index 97dde43..9349545 100644 --- a/mods/beds/api.lua +++ b/mods/beds/api.lua @@ -49,21 +49,24 @@ function beds.register_bed(name, def) local node = minetest.get_node(under) local udef = minetest.registered_nodes[node.name] if udef and udef.on_rightclick and - not (placer and placer:get_player_control().sneak) then + not (placer and placer:is_player() and + placer:get_player_control().sneak) then return udef.on_rightclick(under, node, placer, itemstack, pointed_thing) or itemstack end local pos - if minetest.registered_items[minetest.get_node(under).name].buildable_to then + if udef and udef.buildable_to then pos = under else pos = pointed_thing.above end - if minetest.is_protected(pos, placer:get_player_name()) and - not minetest.check_player_privs(placer, "protection_bypass") then - minetest.record_protection_violation(pos, placer:get_player_name()) + local player_name = placer and placer:get_player_name() or "" + + if minetest.is_protected(pos, player_name) and + not minetest.check_player_privs(player_name, "protection_bypass") then + minetest.record_protection_violation(pos, player_name) return itemstack end @@ -72,12 +75,13 @@ function beds.register_bed(name, def) return itemstack end - local dir = minetest.dir_to_facedir(placer:get_look_dir()) + local dir = placer and placer:get_look_dir() and + minetest.dir_to_facedir(placer:get_look_dir()) or 0 local botpos = vector.add(pos, minetest.facedir_to_dir(dir)) - if minetest.is_protected(botpos, placer:get_player_name()) and - not minetest.check_player_privs(placer, "protection_bypass") then - minetest.record_protection_violation(botpos, placer:get_player_name()) + if minetest.is_protected(botpos, player_name) and + not minetest.check_player_privs(player_name, "protection_bypass") then + minetest.record_protection_violation(botpos, player_name) return itemstack end @@ -90,7 +94,7 @@ function beds.register_bed(name, def) minetest.set_node(botpos, {name = name .. "_top", param2 = dir}) if not (creative and creative.is_enabled_for - and creative.is_enabled_for(placer:get_player_name())) then + and creative.is_enabled_for(player_name)) then itemstack:take_item() end return itemstack diff --git a/mods/boats/init.lua b/mods/boats/init.lua index 4d8f467..ce67e91 100644 --- a/mods/boats/init.lua +++ b/mods/boats/init.lua @@ -230,7 +230,8 @@ minetest.register_craftitem("boats:boat", { local node = minetest.get_node(under) local udef = minetest.registered_nodes[node.name] if udef and udef.on_rightclick and - not (placer and placer:get_player_control().sneak) then + not (placer and placer:is_player() and + placer:get_player_control().sneak) then return udef.on_rightclick(under, node, placer, itemstack, pointed_thing) or itemstack end @@ -244,9 +245,12 @@ minetest.register_craftitem("boats:boat", { pointed_thing.under.y = pointed_thing.under.y + 0.5 boat = minetest.add_entity(pointed_thing.under, "boats:boat") if boat then - boat:setyaw(placer:get_look_horizontal()) - if not (creative and creative.is_enabled_for - and creative.is_enabled_for(placer:get_player_name())) then + if placer then + boat:setyaw(placer:get_look_horizontal()) + end + local player_name = placer and placer:get_player_name() or "" + if not (creative and creative.is_enabled_for and + creative.is_enabled_for(player_name)) then itemstack:take_item() end end diff --git a/mods/bones/init.lua b/mods/bones/init.lua index 9583bc2..8688fa1 100644 --- a/mods/bones/init.lua +++ b/mods/bones/init.lua @@ -68,6 +68,12 @@ minetest.register_node("bones:bones", { on_metadata_inventory_take = function(pos, listname, index, stack, player) local meta = minetest.get_meta(pos) if meta:get_inventory():is_empty("main") then + local inv = player:get_inventory() + if inv:room_for_item("main", {name = "bones:bones"}) then + inv:add_item("main", {name = "bones:bones"}) + else + minetest.add_item(pos, "bones:bones") + end minetest.remove_node(pos) end end, diff --git a/mods/bucket/init.lua b/mods/bucket/init.lua index 5076dec..62392e9 100644 --- a/mods/bucket/init.lua +++ b/mods/bucket/init.lua @@ -69,7 +69,8 @@ function bucket.register_liquid(source, flowing, itemname, inventory_image, name -- Call on_rightclick if the pointed node defines it if ndef and ndef.on_rightclick and - user and not user:get_player_control().sneak then + not (user and user:is_player() and + user:get_player_control().sneak) then return ndef.on_rightclick( pointed_thing.under, node, user, diff --git a/mods/carts/cart_entity.lua b/mods/carts/cart_entity.lua index a19da64..031e456 100644 --- a/mods/carts/cart_entity.lua +++ b/mods/carts/cart_entity.lua @@ -58,7 +58,8 @@ end function cart_entity:on_punch(puncher, time_from_last_punch, tool_capabilities, direction) local pos = self.object:getpos() - if not self.railtype then + local vel = self.object:getvelocity() + if not self.railtype or vector.equals(vel, {x=0, y=0, z=0}) then local node = minetest.get_node(pos).name self.railtype = minetest.get_item_group(node, "connect_to_raillike") end @@ -105,7 +106,6 @@ function cart_entity:on_punch(puncher, time_from_last_punch, tool_capabilities, return end -- Player punches cart to alter velocity - local vel = self.object:getvelocity() if puncher:get_player_name() == self.driver then if math.abs(vel.x + vel.z) > carts.punch_speed_max then return @@ -367,7 +367,8 @@ minetest.register_craftitem("carts:cart", { local node = minetest.get_node(under) local udef = minetest.registered_nodes[node.name] if udef and udef.on_rightclick and - not (placer and placer:get_player_control().sneak) then + not (placer and placer:is_player() and + placer:get_player_control().sneak) then return udef.on_rightclick(under, node, placer, itemstack, pointed_thing) or itemstack end diff --git a/mods/carts/functions.lua b/mods/carts/functions.lua index a471719..9b7e2c6 100644 --- a/mods/carts/functions.lua +++ b/mods/carts/functions.lua @@ -159,23 +159,29 @@ function carts:get_rail_direction(pos_, dir, ctrl, old_switch, railtype) end function carts:pathfinder(pos_, old_pos, old_dir, ctrl, pf_switch, railtype) + if vector.equals(old_pos, pos_) then + return true + end + local pos = vector.round(pos_) local pf_pos = vector.round(old_pos) local pf_dir = vector.new(old_dir) for i = 1, 3 do - if vector.equals(pf_pos, pos) then - -- Success! Cart moved on correctly - return true - end + pf_dir, pf_switch = carts:get_rail_direction( + pf_pos, pf_dir, ctrl, pf_switch, railtype) - pf_dir, pf_switch = carts:get_rail_direction(pf_pos, pf_dir, ctrl, pf_switch, railtype) if vector.equals(pf_dir, {x=0, y=0, z=0}) then -- No way forwards return false end pf_pos = vector.add(pf_pos, pf_dir) + + if vector.equals(pf_pos, pos) then + -- Success! Cart moved on correctly + return true + end end -- Cart not found return false @@ -211,7 +217,12 @@ end function carts:get_rail_groups(additional_groups) -- Get the default rail groups and add more when a table is given - local groups = {dig_immediate = 2, attached_node = 1, rail = 1, connect_to_raillike = 1} + local groups = { + dig_immediate = 2, + attached_node = 1, + rail = 1, + connect_to_raillike = minetest.raillike_group("rail") + } if type(additional_groups) == "table" then for k, v in pairs(additional_groups) do groups[k] = v diff --git a/mods/castrum/Chapter3.lua b/mods/castrum/Chapter3.lua new file mode 100644 index 0000000..23d079b --- /dev/null +++ b/mods/castrum/Chapter3.lua @@ -0,0 +1,304 @@ +local list = { + {1, {x=-173, y=9, z=-70},{x=-172, y=9, z=-70},2}, + {2, {x=-173, y=9, z=-62},{x=-172, y=9, z=-62},2}, + {3, {x=-171, y=9, z=-69},{x=-170, y=9, z=-69},2}, + {4, {x=-171, y=9, z=-63},{x=-170, y=9, z=-63},2}, + {5, {x=-170, y=9, z=-67},{x=-169, y=9, z=-67},2}, + {6, {x=-170, y=9, z=-65},{x=-169, y=9, z=-65},2}, + {7, {x=-172, y=9, z=-70},{x=-171, y=9, z=-71},2}, + {8, {x=-172, y=9, z=-62},{x=-171, y=9, z=-61},2}, + {9, {x=-171, y=9, z=-71},{x=-170, y=9, z=-71},2}, + {10, {x=-171, y=9, z=-61},{x=-170, y=9, z=-61},2}, + {11, {x=-170, y=9, z=-70},{x=-169, y=9, z=-70},2}, + {12, {x=-170, y=9, z=-62},{x=-169, y=9, z=-62},2}, + {13, {x=-170, y=9, z=-69},{x=-169, y=9, z=-69},2}, + {14, {x=-170, y=9, z=-63},{x=-169, y=9, z=-63},2}, + {15, {x=-169, y=9, z=-68},{x=-168, y=9, z=-68},2}, + {16, {x=-169, y=9, z=-64},{x=-168, y=9, z=-64},2}, + {17, {x=-169, y=9, z=-67},{x=-168, y=9, z=-67},2}, + {18, {x=-169, y=9, z=-65},{x=-168, y=9, z=-65},2}, + {19, {x=-168, y=9, z=-66},{x=-167, y=9, z=-66},2}, + {20, {x=-170, y=9, z=-71},{x=-169, y=9, z=-71},2}, + {21, {x=-170, y=9, z=-61},{x=-169, y=9, z=-61},2}, + {22, {x=-169, y=9, z=-70},{x=-168, y=9, z=-70},2}, + {23, {x=-169, y=9, z=-62},{x=-168, y=9, z=-62},2}, + {24, {x=-169, y=9, z=-69},{x=-168, y=9, z=-69},2}, + {25, {x=-169, y=9, z=-63},{x=-168, y=9, z=-63},2}, + {26, {x=-168, y=9, z=-68},{x=-167, y=9, z=-68},2}, + {27, {x=-168, y=9, z=-64},{x=-167, y=9, z=-64},2}, + {28, {x=-168, y=9, z=-67},{x=-167, y=9, z=-67},2}, + {29, {x=-168, y=9, z=-65},{x=-167, y=9, z=-65},2}, + {30, {x=-167, y=9, z=-66},{x=-166, y=9, z=-66},2}, + {31, {x=-169, y=9, z=-71},{x=-168, y=9, z=-71},2}, + {32, {x=-169, y=9, z=-61},{x=-168, y=9, z=-61},2}, + {33, {x=-168, y=9, z=-70},{x=-167, y=9, z=-70},2}, + {34, {x=-168, y=9, z=-62},{x=-167, y=9, z=-62},2}, + {35, {x=-168, y=9, z=-69},{x=-167, y=9, z=-69},2}, + {36, {x=-168, y=9, z=-63},{x=-167, y=9, z=-63},2}, + {37, {x=-167, y=9, z=-68},{x=-166, y=9, z=-68},2}, + {38, {x=-167, y=9, z=-64},{x=-166, y=9, z=-64},2}, + {39, {x=-167, y=9, z=-67},{x=-166, y=9, z=-67},2}, + {40, {x=-167, y=9, z=-65},{x=-166, y=9, z=-65},2}, + {41, {x=-166, y=9, z=-66},{x=-165, y=9, z=-66},2}, + {42, {x=-168, y=9, z=-71},{x=-167, y=9, z=-72},2}, + {43, {x=-168, y=9, z=-61},{x=-167, y=9, z=-60},2}, + {44, {x=-167, y=9, z=-70},{x=-166, y=9, z=-70},2}, + {45, {x=-167, y=9, z=-62},{x=-166, y=9, z=-62},2}, + {46, {x=-167, y=9, z=-69},{x=-166, y=9, z=-69},2}, + {47, {x=-167, y=9, z=-63},{x=-166, y=9, z=-63},2}, + {48, {x=-166, y=9, z=-68},{x=-165, y=9, z=-68},2}, + {49, {x=-166, y=9, z=-64},{x=-165, y=9, z=-64},2}, + {50, {x=-166, y=9, z=-67},{x=-165, y=9, z=-67},2}, + {51, {x=-166, y=9, z=-65},{x=-165, y=9, z=-65},2}, + {52, {x=-165, y=9, z=-66},{x=-164, y=9, z=-66},2}, + {53, {x=-167, y=9, z=-72},{x=-166, y=9, z=-73},2}, + {54, {x=-167, y=9, z=-60},{x=-166, y=9, z=-59},2}, + {55, {x=-166, y=9, z=-70},{x=-165, y=9, z=-71},2}, + {56, {x=-166, y=9, z=-62},{x=-165, y=9, z=-61},2}, + {57, {x=-166, y=9, z=-69},{x=-165, y=9, z=-69},2}, + {58, {x=-166, y=9, z=-63},{x=-165, y=9, z=-63},2}, + {59, {x=-165, y=9, z=-68},{x=-164, y=9, z=-68},2}, + {60, {x=-165, y=9, z=-64},{x=-164, y=9, z=-64},2}, + {61, {x=-165, y=9, z=-67},{x=-164, y=9, z=-67},2}, + {62, {x=-165, y=9, z=-65},{x=-164, y=9, z=-65},2}, + {63, {x=-164, y=9, z=-66},{x=-163, y=9, z=-66},2}, + {64, {x=-166, y=9, z=-73},{x=-165, y=9, z=-73},2}, + {65, {x=-166, y=9, z=-59},{x=-165, y=9, z=-59},2}, + {66, {x=-165, y=9, z=-71},{x=-164, y=9, z=-71},2}, + {67, {x=-165, y=9, z=-61},{x=-164, y=9, z=-61},2}, + {68, {x=-165, y=9, z=-69},{x=-164, y=9, z=-69},2}, + {69, {x=-165, y=9, z=-63},{x=-164, y=9, z=-63},2}, + {70, {x=-164, y=9, z=-68},{x=-163, y=9, z=-68},2}, + {71, {x=-164, y=9, z=-64},{x=-163, y=9, z=-64},2}, + {72, {x=-164, y=9, z=-67},{x=-163, y=9, z=-67},2}, + {73, {x=-164, y=9, z=-65},{x=-163, y=9, z=-65},2}, + {74, {x=-163, y=9, z=-66},{x=-162, y=9, z=-66},2}, + {75, {x=-165, y=9, z=-73},{x=-164, y=9, z=-74},2}, + {76, {x=-165, y=9, z=-59},{x=-164, y=9, z=-58},2}, + {77, {x=-164, y=9, z=-71},{x=-163, y=9, z=-72},2}, + {78, {x=-164, y=9, z=-61},{x=-163, y=9, z=-60},2}, + {79, {x=-164, y=9, z=-69},{x=-163, y=9, z=-69},2}, + {80, {x=-164, y=9, z=-63},{x=-163, y=9, z=-63},2}, + {81, {x=-163, y=9, z=-68},{x=-162, y=9, z=-68},2}, + {82, {x=-163, y=9, z=-64},{x=-162, y=9, z=-64},2}, + {83, {x=-163, y=9, z=-67},{x=-162, y=9, z=-67},2}, + {84, {x=-163, y=9, z=-65},{x=-162, y=9, z=-65},2}, + {85, {x=-162, y=9, z=-66},{x=-161, y=9, z=-66},2}, + {86, {x=-164, y=9, z=-74},{x=-163, y=9, z=-74},2}, + {87, {x=-164, y=9, z=-58},{x=-163, y=9, z=-58},2}, + {88, {x=-163, y=9, z=-72},{x=-162, y=9, z=-72},2}, + {89, {x=-163, y=9, z=-60},{x=-162, y=9, z=-60},2}, + {90, {x=-163, y=9, z=-69},{x=-162, y=9, z=-70},2}, + {91, {x=-163, y=9, z=-63},{x=-162, y=9, z=-62},2}, + {92, {x=-162, y=9, z=-68},{x=-161, y=9, z=-68},2}, + {93, {x=-162, y=9, z=-64},{x=-161, y=9, z=-64},2}, + {94, {x=-162, y=9, z=-67},{x=-161, y=9, z=-67},2}, + {95, {x=-162, y=9, z=-65},{x=-161, y=9, z=-65},2}, + {96, {x=-161, y=9, z=-66},{x=-160, y=9, z=-66},2}, + {97, {x=-163, y=9, z=-74},{x=-162, y=9, z=-75},2}, + {98, {x=-163, y=9, z=-58},{x=-162, y=9, z=-57},2}, + {99, {x=-162, y=9, z=-72},{x=-161, y=9, z=-73},2}, + {100, {x=-162, y=9, z=-60},{x=-161, y=9, z=-59},2}, + {101, {x=-162, y=9, z=-70},{x=-161, y=9, z=-70},2}, + {102, {x=-162, y=9, z=-62},{x=-161, y=9, z=-62},2}, + {103, {x=-161, y=9, z=-68},{x=-160, y=9, z=-68},2}, + {104, {x=-161, y=9, z=-64},{x=-160, y=9, z=-64},2}, + {105, {x=-161, y=9, z=-67},{x=-160, y=9, z=-67},2}, + {106, {x=-161, y=9, z=-65},{x=-160, y=9, z=-65},2}, + {107, {x=-160, y=9, z=-66},{x=-159, y=9, z=-66},2}, + {108, {x=-162, y=9, z=-75},{x=-161, y=9, z=-75},2}, + {109, {x=-162, y=9, z=-57},{x=-161, y=9, z=-57},2}, + {110, {x=-161, y=9, z=-73},{x=-160, y=9, z=-73},2}, + {111, {x=-161, y=9, z=-59},{x=-160, y=9, z=-59},2}, + {112, {x=-161, y=9, z=-70},{x=-160, y=9, z=-71},2}, + {113, {x=-161, y=9, z=-62},{x=-160, y=9, z=-61},2}, + {114, {x=-160, y=9, z=-68},{x=-159, y=9, z=-69},2}, + {115, {x=-160, y=9, z=-64},{x=-159, y=9, z=-63},2}, + {116, {x=-160, y=9, z=-67},{x=-159, y=9, z=-67},2}, + {117, {x=-160, y=9, z=-65},{x=-159, y=9, z=-65},2}, + {118, {x=-159, y=9, z=-66},{x=-158, y=9, z=-66},2}, + {119, {x=-161, y=9, z=-75},{x=-160, y=9, z=-76},2}, + {120, {x=-161, y=9, z=-57},{x=-160, y=9, z=-56},2}, + {121, {x=-160, y=9, z=-73},{x=-159, y=9, z=-74},2}, + {122, {x=-160, y=9, z=-59},{x=-159, y=9, z=-58},2}, + {123, {x=-160, y=9, z=-71},{x=-159, y=9, z=-71},2}, + {124, {x=-160, y=9, z=-61},{x=-159, y=9, z=-61},2}, + {125, {x=-159, y=9, z=-69},{x=-158, y=9, z=-69},2}, + {126, {x=-159, y=9, z=-63},{x=-158, y=9, z=-63},2}, + {127, {x=-159, y=9, z=-67},{x=-158, y=9, z=-67},2}, + {128, {x=-159, y=9, z=-65},{x=-158, y=9, z=-65},2}, + {129, {x=-160, y=9, z=-76},{x=-159, y=9, z=-76},2}, + {130, {x=-160, y=9, z=-56},{x=-159, y=9, z=-56},2}, + {131, {x=-159, y=9, z=-74},{x=-158, y=9, z=-74},2}, + {132, {x=-159, y=9, z=-58},{x=-158, y=9, z=-58},2}, + {133, {x=-159, y=9, z=-71},{x=-158, y=9, z=-71},2}, + {134, {x=-159, y=9, z=-61},{x=-158, y=9, z=-61},2}, + {135, {x=-159, y=9, z=-76},{x=-158, y=9, z=-76},2}, + {136, {x=-159, y=9, z=-56},{x=-158, y=9, z=-56},2}, + {137, {x=-158, y=9, z=-76},{x=-157, y=9, z=-75},2}, + {138, {x=-158, y=9, z=-56},{x=-157, y=9, z=-57},2}, + {139, {x=-157, y=9, z=-75},{x=-156, y=9, z=-75},2}, + {140, {x=-157, y=9, z=-57},{x=-156, y=9, z=-57},2}, + {141, {x=-158, y=9, z=-74},{x=-157, y=9, z=-73},2}, + {142, {x=-158, y=9, z=-58},{x=-157, y=9, z=-59},2}, + {143, {x=-158, y=9, z=-71},{x=-157, y=9, z=-71},2}, + {144, {x=-158, y=9, z=-61},{x=-157, y=9, z=-61},2}, + {145, {x=-156, y=9, z=-75},{x=-155, y=9, z=-75},2}, + {146, {x=-156, y=9, z=-57},{x=-155, y=9, z=-57},2}, + {147, {x=-157, y=9, z=-73},{x=-156, y=9, z=-73},2}, + {148, {x=-157, y=9, z=-59},{x=-156, y=9, z=-59},2}, + {149, {x=-157, y=9, z=-71},{x=-156, y=9, z=-70},2}, + {150, {x=-157, y=9, z=-61},{x=-156, y=9, z=-62},2}, + {151, {x=-158, y=9, z=-69},{x=-157, y=9, z=-69},2}, + {152, {x=-158, y=9, z=-63},{x=-157, y=9, z=-63},2}, + {153, {x=-158, y=9, z=-67},{x=-157, y=9, z=-67},2}, + {154, {x=-158, y=9, z=-65},{x=-157, y=9, z=-65},2}, + {155, {x=-155, y=9, z=-75},{x=-154, y=9, z=-74},2}, + {156, {x=-155, y=9, z=-57},{x=-154, y=9, z=-58},2}, + {157, {x=-156, y=9, z=-73},{x=-155, y=9, z=-72},2}, + {158, {x=-156, y=9, z=-59},{x=-155, y=9, z=-60},2}, + {159, {x=-156, y=9, z=-70},{x=-155, y=9, z=-70},2}, + {160, {x=-156, y=9, z=-62},{x=-155, y=9, z=-62},2}, + {161, {x=-157, y=9, z=-69},{x=-156, y=9, z=-68},2}, + {162, {x=-157, y=9, z=-63},{x=-156, y=9, z=-64},2}, + {163, {x=-157, y=9, z=-67},{x=-156, y=9, z=-67},2}, + {164, {x=-157, y=9, z=-65},{x=-156, y=9, z=-65},2}, + {165, {x=-158, y=9, z=-66},{x=-157, y=9, z=-66},2}, + {166, {x=-154, y=9, z=-74},{x=-153, y=9, z=-74},2}, + {167, {x=-154, y=9, z=-58},{x=-153, y=9, z=-58},2}, + {168, {x=-155, y=9, z=-72},{x=-154, y=9, z=-72},2}, + {169, {x=-155, y=9, z=-60},{x=-154, y=9, z=-60},2}, + {170, {x=-155, y=9, z=-70},{x=-154, y=9, z=-70},2}, + {171, {x=-155, y=9, z=-62},{x=-154, y=9, z=-62},2}, + {172, {x=-156, y=9, z=-68},{x=-155, y=9, z=-68},2}, + {173, {x=-156, y=9, z=-64},{x=-155, y=9, z=-64},2}, + {174, {x=-156, y=9, z=-67},{x=-155, y=9, z=-67},2}, + {175, {x=-156, y=9, z=-65},{x=-155, y=9, z=-65},2}, + {176, {x=-157, y=9, z=-66},{x=-156, y=9, z=-66},2}, + {177, {x=-153, y=9, z=-74},{x=-152, y=9, z=-74},2}, + {178, {x=-153, y=9, z=-58},{x=-152, y=9, z=-58},2}, + {179, {x=-154, y=9, z=-72},{x=-153, y=9, z=-72},2}, + {180, {x=-154, y=9, z=-60},{x=-153, y=9, z=-60},2}, + {181, {x=-154, y=9, z=-70},{x=-153, y=9, z=-69},2}, + {182, {x=-154, y=9, z=-62},{x=-153, y=9, z=-63},2}, + {183, {x=-155, y=9, z=-68},{x=-154, y=9, z=-68},2}, + {184, {x=-155, y=9, z=-64},{x=-154, y=9, z=-64},2}, + {185, {x=-155, y=9, z=-67},{x=-154, y=9, z=-67},2}, + {186, {x=-155, y=9, z=-65},{x=-154, y=9, z=-65},2}, + {187, {x=-156, y=9, z=-66},{x=-155, y=9, z=-66},2}, + {188, {x=-152, y=9, z=-74},{x=-151, y=9, z=-73},2}, + {189, {x=-152, y=9, z=-58},{x=-151, y=9, z=-59},2}, + {190, {x=-153, y=9, z=-72},{x=-152, y=9, z=-71},2}, + {191, {x=-153, y=9, z=-60},{x=-152, y=9, z=-61},2}, + {192, {x=-153, y=9, z=-69},{x=-152, y=9, z=-69},2}, + {193, {x=-153, y=9, z=-63},{x=-152, y=9, z=-63},2}, + {194, {x=-154, y=9, z=-68},{x=-153, y=9, z=-68},2}, + {195, {x=-154, y=9, z=-64},{x=-153, y=9, z=-64},2}, + {196, {x=-154, y=9, z=-67},{x=-153, y=9, z=-67},2}, + {197, {x=-154, y=9, z=-65},{x=-153, y=9, z=-65},2}, + {198, {x=-155, y=9, z=-66},{x=-154, y=9, z=-66},2}, + {199, {x=-151, y=9, z=-73},{x=-150, y=9, z=-73},2}, + {200, {x=-151, y=9, z=-59},{x=-150, y=9, z=-59},2}, + {201, {x=-152, y=9, z=-71},{x=-151, y=9, z=-71},2}, + {202, {x=-152, y=9, z=-61},{x=-151, y=9, z=-61},2}, + {203, {x=-152, y=9, z=-69},{x=-151, y=9, z=-69},2}, + {204, {x=-152, y=9, z=-63},{x=-151, y=9, z=-63},2}, + {205, {x=-153, y=9, z=-68},{x=-152, y=9, z=-68},2}, + {206, {x=-153, y=9, z=-64},{x=-152, y=9, z=-64},2}, + {207, {x=-153, y=9, z=-67},{x=-152, y=9, z=-67},2}, + {208, {x=-153, y=9, z=-65},{x=-152, y=9, z=-65},2}, + {209, {x=-154, y=9, z=-66},{x=-153, y=9, z=-66},2}, + {210, {x=-150, y=9, z=-73},{x=-149, y=9, z=-73},2}, + {211, {x=-150, y=9, z=-59},{x=-149, y=9, z=-59},2}, + {212, {x=-151, y=9, z=-71},{x=-150, y=9, z=-71},2}, + {213, {x=-151, y=9, z=-61},{x=-150, y=9, z=-61},2}, + {214, {x=-151, y=9, z=-69},{x=-150, y=9, z=-69},2}, + {215, {x=-151, y=9, z=-63},{x=-150, y=9, z=-63},2}, + {216, {x=-152, y=9, z=-68},{x=-151, y=9, z=-68},2}, + {217, {x=-152, y=9, z=-64},{x=-151, y=9, z=-64},2}, + {218, {x=-152, y=9, z=-67},{x=-151, y=9, z=-67},2}, + {219, {x=-152, y=9, z=-65},{x=-151, y=9, z=-65},2}, + {220, {x=-153, y=9, z=-66},{x=-152, y=9, z=-66},2}, + {221, {x=-149, y=9, z=-73},{x=-148, y=9, z=-72},2}, + {222, {x=-149, y=9, z=-59},{x=-148, y=9, z=-60},2}, + {223, {x=-150, y=9, z=-71},{x=-149, y=9, z=-70},2}, + {224, {x=-150, y=9, z=-61},{x=-149, y=9, z=-62},2}, + {225, {x=-150, y=9, z=-69},{x=-149, y=9, z=-69},2}, + {226, {x=-150, y=9, z=-63},{x=-149, y=9, z=-63},2}, + {227, {x=-151, y=9, z=-68},{x=-150, y=9, z=-68},2}, + {228, {x=-151, y=9, z=-64},{x=-150, y=9, z=-64},2}, + {229, {x=-151, y=9, z=-67},{x=-150, y=9, z=-67},2}, + {230, {x=-151, y=9, z=-65},{x=-150, y=9, z=-65},2}, + {231, {x=-152, y=9, z=-66},{x=-151, y=9, z=-66},2}, + {232, {x=-148, y=9, z=-72},{x=-147, y=9, z=-72},2}, + {233, {x=-148, y=9, z=-60},{x=-147, y=9, z=-60},2}, + {234, {x=-149, y=9, z=-70},{x=-148, y=9, z=-70},2}, + {235, {x=-149, y=9, z=-62},{x=-148, y=9, z=-62},2}, + {236, {x=-149, y=9, z=-69},{x=-148, y=9, z=-69},2}, + {237, {x=-149, y=9, z=-63},{x=-148, y=9, z=-63},2}, + {238, {x=-150, y=9, z=-68},{x=-149, y=9, z=-68},2}, + {239, {x=-150, y=9, z=-64},{x=-149, y=9, z=-64},2}, + {240, {x=-150, y=9, z=-67},{x=-149, y=9, z=-67},2}, + {241, {x=-150, y=9, z=-65},{x=-149, y=9, z=-65},2}, + {242, {x=-151, y=9, z=-66},{x=-150, y=9, z=-66},2}, + {243, {x=-147, y=9, z=-72},{x=-146, y=9, z=-72},2}, + {244, {x=-147, y=9, z=-60},{x=-146, y=9, z=-60},2}, + {245, {x=-148, y=9, z=-70},{x=-147, y=9, z=-70},2}, + {246, {x=-148, y=9, z=-62},{x=-147, y=9, z=-62},2}, + {247, {x=-148, y=9, z=-69},{x=-147, y=9, z=-69},2}, + {248, {x=-148, y=9, z=-63},{x=-147, y=9, z=-63},2}, + {249, {x=-149, y=9, z=-68},{x=-148, y=9, z=-68},2}, + {250, {x=-149, y=9, z=-64},{x=-148, y=9, z=-64},2}, + {251, {x=-149, y=9, z=-67},{x=-148, y=9, z=-67},2}, + {252, {x=-149, y=9, z=-65},{x=-148, y=9, z=-65},2}, + {253, {x=-150, y=9, z=-66},{x=-149, y=9, z=-66},2}, + {254, {x=-146, y=9, z=-72},{x=-145, y=9, z=-71},2}, + {255, {x=-146, y=9, z=-60},{x=-145, y=9, z=-61},2}, + {256, {x=-147, y=9, z=-70},{x=-146, y=9, z=-70},2}, + {257, {x=-147, y=9, z=-62},{x=-146, y=9, z=-62},2}, + {258, {x=-145, y=9, z=-71},{x=-144, y=9, z=-71},2}, + {259, {x=-145, y=9, z=-61},{x=-144, y=9, z=-61},2}, + {260, {x=-146, y=9, z=-70},{x=-145, y=9, z=-70},2}, + {261, {x=-146, y=9, z=-62},{x=-145, y=9, z=-62},2}, + {262, {x=-147, y=9, z=-69},{x=-146, y=9, z=-69},2}, + {263, {x=-147, y=9, z=-63},{x=-146, y=9, z=-63},2}, + {264, {x=-148, y=9, z=-68},{x=-147, y=9, z=-68},2}, + {265, {x=-148, y=9, z=-64},{x=-147, y=9, z=-64},2}, + {266, {x=-144, y=9, z=-71},{x=-144, y=9, z=-70},2}, + {267, {x=-144, y=9, z=-61},{x=-144, y=9, z=-62},2}, + {268, {x=-145, y=9, z=-70},{x=-145, y=9, z=-69},2}, + {269, {x=-145, y=9, z=-62},{x=-145, y=9, z=-63},2}, + {270, {x=-147, y=9, z=-68},{x=-146, y=9, z=-68},2}, + {271, {x=-147, y=9, z=-64},{x=-146, y=9, z=-64},2}, + {272, {x=-148, y=9, z=-67},{x=-147, y=9, z=-67},2}, + {273, {x=-148, y=9, z=-65},{x=-147, y=9, z=-65},2}, + {274, {x=-149, y=9, z=-66},{x=-148, y=9, z=-66},2}, + {275, {x=-147, y=9, z=-67},{x=-146, y=9, z=-67},2}, + {276, {x=-147, y=9, z=-65},{x=-146, y=9, z=-65},2}, + {277, {x=-148, y=9, z=-66},{x=-147, y=9, z=-66},2}, + {278, {x=-146, y=9, z=-69},{x=-145, y=9, z=-68},2}, + {279, {x=-146, y=9, z=-63},{x=-145, y=9, z=-64},2}, + {280, {x=-144, y=9, z=-70},{x=-144, y=9, z=-69},2}, + {281, {x=-144, y=9, z=-62},{x=-144, y=9, z=-63},2}, + {282, {x=-145, y=9, z=-68},{x=-144, y=9, z=-67},2}, + {283, {x=-145, y=9, z=-64},{x=-144, y=9, z=-65},2}, + {284, {x=-147, y=9, z=-66},{x=-146, y=9, z=-66},2}, + {285, {x=-146, y=9, z=-67},{x=-145, y=9, z=-67},2}, + {286, {x=-146, y=9, z=-65},{x=-145, y=9, z=-65},2}, + {287, {x=-146, y=9, z=-66},{x=-145, y=9, z=-66},2}, + {288, {x=-146, y=9, z=-68},{x=-146, y=9, z=-67},2}, + {289, {x=-146, y=9, z=-64},{x=-146, y=9, z=-65},2}, + {290, {x=-145, y=9, z=-69},{x=-145, y=9, z=-68},2}, + {291, {x=-145, y=9, z=-63},{x=-145, y=9, z=-64},2}, + {292, {x=-144, y=9, z=-69},{x=-144, y=9, z=-68},2}, + {293, {x=-144, y=9, z=-63},{x=-144, y=9, z=-64},2}, + {294, {x=-146, y=9, z=-67},{x=-145, y=9, z=-67},2}, + {295, {x=-146, y=9, z=-65},{x=-145, y=9, z=-65},2}, + {296, {x=-145, y=9, z=-68},{x=-145, y=9, z=-67},2}, + {297, {x=-145, y=9, z=-64},{x=-145, y=9, z=-65},2}, + {298, {x=-144, y=9, z=-68},{x=-144, y=9, z=-67},2}, + {299, {x=-144, y=9, z=-64},{x=-144, y=9, z=-65},2}, +} +function Chapter3() + return list +end \ No newline at end of file diff --git a/mods/castrum/fight.lua b/mods/castrum/fight.lua index 2167bc7..03d71be 100644 --- a/mods/castrum/fight.lua +++ b/mods/castrum/fight.lua @@ -47,18 +47,34 @@ end minetest.register_on_punchnode(function(pos, node, puncher, pointed_thing) if minetest.get_node({x=pos.x, y=pos.y-1, z=pos.z}).name == "castrum:fight2" then local dig = false - local dignum = 0 + local dignum = math.random(4) + local com = 0 if node.name == "castrum:knight_dark" then dig = true elseif node.name == "castrum:knight_lv1_dark" then local fightnode = puncher:get_attribute("fightnode") if fightnode == "1" then - dignum = math.random(2) - else - dignum = 1 + com = 3 + elseif fightnode == "2" then + com = 4 + elseif fightnode == "6" then + com = 3 + elseif fightnode == "7" then + com = 4 + end + elseif node.name == "castrum:knight_lv2_dark" then + local fightnode = puncher:get_attribute("fightnode") + if fightnode == "1" then + com = 2 + elseif fightnode == "2" then + com = 3 + elseif fightnode == "6" then + com = 2 + elseif fightnode == "7" then + com = 3 end end - if dignum == 1 then + if dignum < com then dig = true end if dig == true then @@ -70,6 +86,30 @@ minetest.register_on_punchnode(function(pos, node, puncher, pointed_thing) if fightnode == "1" then minetest.set_node(minetest.string_to_pos(fightpos), {name="castrum:knight_lv1"}) screwdriver_handler(puncher, {type="node", under=minetest.string_to_pos(fightpos), above=minetest.string_to_pos(fightpos)}, 1) + local inv = puncher:get_inventory() + inv:remove_item("main", "castrum:knight_lv1") + end + if fightnode == "2" then + minetest.set_node(minetest.string_to_pos(fightpos), {name="castrum:knight_lv2"}) + screwdriver_handler(puncher, {type="node", under=minetest.string_to_pos(fightpos), above=minetest.string_to_pos(fightpos)}, 1) + local inv = puncher:get_inventory() + inv:remove_item("main", "castrum:knight_lv2") + end + if fightnode == "6" then + local pos = minetest.string_to_pos(fightpos) + minetest.set_node({x=pos.x,y=pos.y,z=pos.z}, {name="castrum:horse1"}) + minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z}, {name="castrum:knight_lv1_sit"}) + screwdriver_handler(puncher, {type="node", under={x=pos.x,y=pos.y+1,z=pos.z}, above={x=pos.x,y=pos.y+2,z=pos.z}}, 1) + local inv = puncher:get_inventory() + inv:remove_item("main", "castrum:horse1_item_1") + end + if fightnode == "7" then + local pos = minetest.string_to_pos(fightpos) + minetest.set_node({x=pos.x,y=pos.y,z=pos.z}, {name="castrum:horse1"}) + minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z}, {name="castrum:knight_lv2_sit"}) + screwdriver_handler(puncher, {type="node", under={x=pos.x,y=pos.y+1,z=pos.z}, above={x=pos.x,y=pos.y+2,z=pos.z}}, 1) + local inv = puncher:get_inventory() + inv:remove_item("main", "castrum:horse1_item_2") end for j=144,174 do for i=51,81 do @@ -77,59 +117,96 @@ minetest.register_on_punchnode(function(pos, node, puncher, pointed_thing) end end fight_step2(puncher) - local inv = puncher:get_inventory() - inv:remove_item("main", "castrum:knight_lv1") puncher:set_attribute("fightdig", "false") end end) function get_fight(level,player) - for j=144,174 do - for i=51,81 do - minetest.set_node({x=j*(-1), y=9, z=i*(-1)}, {name="air"}) - minetest.set_node({x=j*(-1), y=8, z=i*(-1)}, {name="default:dirt_with_grass"}) - end - end - for i=67,76 do - minetest.set_node({x=-144, y=8, z=i*(-1)}, {name="castrum:fight1"}) - end - for i=56,65 do - minetest.set_node({x=-144, y=8, z=i*(-1)}, {name="castrum:fight1"}) - end - for i=57,75 do - minetest.set_node({x=-145, y=8, z=i*(-1)}, {name="castrum:fight1"}) - end - for i=58,74 do - minetest.set_node({x=-146, y=8, z=i*(-1)}, {name="castrum:fight1"}) - end - for i=59,73 do - minetest.set_node({x=-147, y=8, z=i*(-1)}, {name="castrum:fight1"}) - end - for i=61,71 do - minetest.set_node({x=-148, y=8, z=i*(-1)}, {name="castrum:fight1"}) - end - for i=63,69 do - minetest.set_node({x=-149, y=8, z=i*(-1)}, {name="castrum:fight1"}) - end - for i=65,67 do - minetest.set_node({x=-150, y=8, z=i*(-1)}, {name="castrum:fight1"}) - end - minetest.set_node({x=-144, y=9, z=-66}, {name="castrum:castrum_knight1"}) - minetest.set_node({x=-174, y=9, z=-66}, {name="castrum:knight_dark"}) - player:setpos({x=-135, y=8.5, z=-66}) - screwdriver_handler(player, {type="node", under={x=-144, y=9, z=-66}, above={x=-144, y=9, z=-66}}, 1) - screwdriver_handler(player, {type="node", under={x=-174, y=9, z=-66}, above={x=-174, y=9, z=-66}}, 1) - screwdriver_handler(player, {type="node", under={x=-174, y=9, z=-66}, above={x=-174, y=9, z=-66}}, 1) - screwdriver_handler(player, {type="node", under={x=-174, y=9, z=-66}, above={x=-174, y=9, z=-66}}, 1) - file = io.open(minetest.get_worldpath().."/SAVE/Knight_1.txt", "r") + player:set_attribute("fightkill1", "0") + player:set_attribute("fightkill2", "0") + player:set_attribute("fighthkill1", "0") + file = io.open(minetest.get_worldpath().."/SAVE/Knight_1.txt", "r") local knight_1 = file:read("*l") file:close() - local inv = player:get_inventory() - if tonumber(knight_1) > 0 then - inv:add_item("main","castrum:knight_lv1 "..knight_1) - end - player:set_attribute("fight", "false") - set_fight(player,level) + file = io.open(minetest.get_worldpath().."/SAVE/Knight_2.txt", "r") + local knight_2 = file:read("*l") + file:close() + local inv = player:get_inventory() + local num = 0 + for i=1,32 do + if inv:get_stack("main", i):is_empty() then + num = num+1 + end + end + if tonumber(knight_1) > 0 or tonumber(knight_2) > 0 then + if num > 9 then + for j=144,174 do + for i=51,81 do + minetest.set_node({x=j*(-1), y=10, z=i*(-1)}, {name="air"}) + minetest.set_node({x=j*(-1), y=9, z=i*(-1)}, {name="air"}) + minetest.set_node({x=j*(-1), y=8, z=i*(-1)}, {name="default:dirt_with_grass"}) + end + end + for i=67,76 do + minetest.set_node({x=-144, y=8, z=i*(-1)}, {name="castrum:fight1"}) + end + for i=56,65 do + minetest.set_node({x=-144, y=8, z=i*(-1)}, {name="castrum:fight1"}) + end + for i=57,75 do + minetest.set_node({x=-145, y=8, z=i*(-1)}, {name="castrum:fight1"}) + end + for i=58,74 do + minetest.set_node({x=-146, y=8, z=i*(-1)}, {name="castrum:fight1"}) + end + for i=59,73 do + minetest.set_node({x=-147, y=8, z=i*(-1)}, {name="castrum:fight1"}) + end + for i=61,71 do + minetest.set_node({x=-148, y=8, z=i*(-1)}, {name="castrum:fight1"}) + end + for i=63,69 do + minetest.set_node({x=-149, y=8, z=i*(-1)}, {name="castrum:fight1"}) + end + for i=65,67 do + minetest.set_node({x=-150, y=8, z=i*(-1)}, {name="castrum:fight1"}) + end + minetest.set_node({x=-144, y=9, z=-66}, {name="castrum:castrum_knight1"}) + minetest.set_node({x=-174, y=9, z=-66}, {name="castrum:knight_dark"}) + player:setpos({x=-135, y=8.5, z=-66}) + screwdriver_handler(player, {type="node", under={x=-144, y=9, z=-66}, above={x=-144, y=9, z=-66}}, 1) + screwdriver_handler(player, {type="node", under={x=-174, y=9, z=-66}, above={x=-174, y=9, z=-66}}, 1) + screwdriver_handler(player, {type="node", under={x=-174, y=9, z=-66}, above={x=-174, y=9, z=-66}}, 1) + screwdriver_handler(player, {type="node", under={x=-174, y=9, z=-66}, above={x=-174, y=9, z=-66}}, 1) + file = io.open(minetest.get_worldpath().."/SAVE/Knight_1.txt", "r") + local knight_1 = file:read("*l") + file:close() + file = io.open(minetest.get_worldpath().."/SAVE/Knight_2.txt", "r") + local knight_2 = file:read("*l") + file:close() + file = io.open(minetest.get_worldpath().."/SAVE/Knight_2.txt", "r") + local knight_2 = file:read("*l") + file:close() + file = io.open(minetest.get_worldpath().."/SAVE/Horse_1.txt", "r") + local horse_1 = file:read("*l") + file:close() + if tonumber(knight_1) > 0 then + inv:add_item("main","castrum:knight_lv1 "..knight_1) + end + if tonumber(knight_2) > 0 then + inv:add_item("main","castrum:knight_lv2 "..knight_2) + end + if tonumber(horse_1) > 0 then + inv:add_item("main","castrum:horse1_item "..horse_1) + end + player:set_attribute("fight", "false") + set_fight(player,level) + else + minetest.chat_send_player(player:get_player_name(), "you have not enough space in your inventory") + end + else + minetest.chat_send_player(player:get_player_name(), "you have no knights") + end end function set_fight(player,level) if level == 1 then @@ -176,6 +253,33 @@ function set_fight(player,level) turn(player,{x=-170, y=9, z=-62},3) minetest.set_node({x=-169, y=9, z=-64}, {name="castrum:knight_lv1_dark"}) turn(player,{x=-169, y=9, z=-64},3) + elseif level == 3 then + minetest.set_node({x=-173, y=9, z=-65}, {name="castrum:knight_lv2_dark"}) + turn(player,{x=-173, y=9, z=-65},3) + minetest.set_node({x=-173, y=9, z=-67}, {name="castrum:knight_lv2_dark"}) + turn(player,{x=-173, y=9, z=-67},3) + minetest.set_node({x=-173, y=9, z=-62}, {name="castrum:knight_lv2_dark"}) + turn(player,{x=-173, y=9, z=-62},3) + minetest.set_node({x=-173, y=9, z=-70}, {name="castrum:knight_lv2_dark"}) + turn(player,{x=-173, y=9, z=-70},3) + minetest.set_node({x=-171, y=9, z=-69}, {name="castrum:knight_lv2_dark"}) + turn(player,{x=-171, y=9, z=-69},3) + minetest.set_node({x=-171, y=9, z=-63}, {name="castrum:knight_lv2_dark"}) + turn(player,{x=-171, y=9, z=-63},3) + minetest.set_node({x=-170, y=9, z=-65}, {name="castrum:knight_lv2_dark"}) + turn(player,{x=-170, y=9, z=-65},3) + minetest.set_node({x=-170, y=9, z=-67}, {name="castrum:knight_lv2_dark"}) + turn(player,{x=-170, y=9, z=-67},3) + minetest.set_node({x=-170, y=9, z=-70}, {name="castrum:knight_lv2_dark"}) + turn(player,{x=-170, y=9, z=-70},3) + minetest.set_node({x=-169, y=9, z=-68}, {name="castrum:knight_lv2_dark"}) + turn(player,{x=-169, y=9, z=-68},3) + minetest.set_node({x=-168, y=9, z=-66}, {name="castrum:knight_lv2_dark"}) + turn(player,{x=-168, y=9, z=-66},3) + minetest.set_node({x=-170, y=9, z=-62}, {name="castrum:knight_lv2_dark"}) + turn(player,{x=-170, y=9, z=-62},3) + minetest.set_node({x=-169, y=9, z=-64}, {name="castrum:knight_lv2_dark"}) + turn(player,{x=-169, y=9, z=-64},3) end player:set_attribute("fightlv", ""..level) end @@ -185,7 +289,10 @@ function fight_step1(player) local start = false for j=144,174 do for i=51,81 do - if minetest.get_node({x=j*(-1), y=9, z=i*(-1)}).name == "castrum:knight_lv1" then + if minetest.get_node({x=j*(-1), y=9, z=i*(-1)}).name == "castrum:knight_lv1" or minetest.get_node({x=j*(-1), y=9, z=i*(-1)}).name == "castrum:knight_lv2" then + start = true + end + if minetest.get_node({x=j*(-1), y=10, z=i*(-1)}).name == "castrum:knight_lv1_sit" or minetest.get_node({x=j*(-1), y=10, z=i*(-1)}).name == "castrum:knight_lv2_sit" then start = true end end @@ -195,9 +302,11 @@ function fight_step1(player) else player:set_attribute("fight", "true") player:set_attribute("fightmove", "1") - player:set_attribute("fightkill", "0") + local inv = player:get_inventory() inv:remove_item("main", "castrum:knight_lv1 80") + inv:remove_item("main", "castrum:knight_lv2 80") + inv:remove_item("main", "castrum:horse1_item 5") for j=144,174 do for i=51,81 do minetest.set_node({x=j*(-1), y=8, z=i*(-1)}, {name="default:dirt_with_grass"}) @@ -217,6 +326,8 @@ function fight_step2(player) list = Chapter1() elseif tonumber(chapter) == 2 then list = Chapter2() + elseif tonumber(chapter) == 3 then + list = Chapter3() end local move2 = move local d = 0 @@ -224,54 +335,473 @@ function fight_step2(player) local dignum = 0 for j=144,174 do for i=51,81 do - dignum = math.random(2) - if minetest.get_node({x=j*(-1), y=9, z=i*(-1)}).name == "castrum:knight_lv1_dark" and dignum == 1 then - if minetest.get_node({x=j*(-1)+1, y=9, z=i*(-1)}).name == "castrum:knight_lv1" or minetest.get_node({x=j*(-1)+1, y=9, z=i*(-1)}).name == "castrum:castrum_knight1" then + dignum = math.random(4) + if minetest.get_node({x=j*(-1), y=9, z=i*(-1)}).name == "castrum:knight_lv1_dark" and dignum < 3 then + if minetest.get_node({x=j*(-1)+1, y=9, z=i*(-1)}).name == "castrum:knight_lv1" or minetest.get_node({x=j*(-1)+1, y=10, z=i*(-1)}).name == "castrum:knight_lv1_sit" then + player:set_attribute("fightkill1", ""..(player:get_attribute("fightkill1")+1)) + dd = 1 + if minetest.get_node({x=j*(-1)+1, y=9, z=i*(-1)}).name == "castrum:horse1" then + player:set_attribute("fighthkill1", ""..(player:get_attribute("fighthkill1")+1)) + end + minetest.set_node({x=j*(-1)+1, y=9, z=i*(-1)}, {name="air"}) + minetest.set_node({x=j*(-1)+1, y=10, z=i*(-1)}, {name="air"}) + end + if minetest.get_node({x=j*(-1)-1, y=9, z=i*(-1)}).name == "castrum:knight_lv1" or minetest.get_node({x=j*(-1)-1, y=10, z=i*(-1)}).name == "castrum:knight_lv1_sit" then + player:set_attribute("fightkill1", ""..(player:get_attribute("fightkill1")+1)) + dd = 1 + if minetest.get_node({x=j*(-1)-1, y=9, z=i*(-1)}).name == "castrum:horse1" then + player:set_attribute("fighthkill1", ""..(player:get_attribute("fighthkill1")+1)) + end + minetest.set_node({x=j*(-1)-1, y=9, z=i*(-1)}, {name="air"}) + minetest.set_node({x=j*(-1)-1, y=10, z=i*(-1)}, {name="air"}) + end + if minetest.get_node({x=j*(-1), y=9, z=i*(-1)}).name == "castrum:knight_lv1" or minetest.get_node({x=j*(-1), y=10, z=i*(-1)}).name == "castrum:knight_lv1_sit" then + player:set_attribute("fightkill1", ""..(player:get_attribute("fightkill1")+1)) + dd = 1 + if minetest.get_node({x=j*(-1), y=9, z=i*(-1)}).name == "castrum:horse1" then + player:set_attribute("fighthkill1", ""..(player:get_attribute("fighthkill1")+1)) + end + minetest.set_node({x=j*(-1), y=9, z=i*(-1)}, {name="air"}) + minetest.set_node({x=j*(-1), y=10, z=i*(-1)}, {name="air"}) + end + if minetest.get_node({x=j*(-1)+1, y=9, z=i*(-1)-1}).name == "castrum:knight_lv1" or minetest.get_node({x=j*(-1)+1, y=10, z=i*(-1)-1}).name == "castrum:knight_lv1_sit" then + player:set_attribute("fightkill1", ""..(player:get_attribute("fightkill1")+1)) + dd = 1 + if minetest.get_node({x=j*(-1)+1, y=9, z=i*(-1)-1}).name == "castrum:horse1" then + player:set_attribute("fighthkill1", ""..(player:get_attribute("fighthkill1")+1)) + end + minetest.set_node({x=j*(-1)+1, y=9, z=i*(-1)-1}, {name="air"}) + minetest.set_node({x=j*(-1)+1, y=10, z=i*(-1)-1}, {name="air"}) + end + if minetest.get_node({x=j*(-1)-1, y=9, z=i*(-1)-1}).name == "castrum:knight_lv1" or minetest.get_node({x=j*(-1)-1, y=10, z=i*(-1)-1}).name == "castrum:knight_lv1_sit" then + player:set_attribute("fightkill1", ""..(player:get_attribute("fightkill1")+1)) + dd = 1 + if minetest.get_node({x=j*(-1)-1, y=9, z=i*(-1)-1}).name == "castrum:horse1" then + player:set_attribute("fighthkill1", ""..(player:get_attribute("fighthkill1")+1)) + end + minetest.set_node({x=j*(-1)-1, y=9, z=i*(-1)-1}, {name="air"}) + minetest.set_node({x=j*(-1)-1, y=10, z=i*(-1)-1}, {name="air"}) + end + if minetest.get_node({x=j*(-1), y=9, z=i*(-1)-1}).name == "castrum:knight_lv1" or minetest.get_node({x=j*(-1), y=10, z=i*(-1)-1}).name == "castrum:knight_lv1_sit" then + player:set_attribute("fightkill1", ""..(player:get_attribute("fightkill1")+1)) + dd = 1 + if minetest.get_node({x=j*(-1), y=9, z=i*(-1)-1}).name == "castrum:horse1" then + player:set_attribute("fighthkill1", ""..(player:get_attribute("fighthkill1")+1)) + end + minetest.set_node({x=j*(-1), y=9, z=i*(-1)-1}, {name="air"}) + minetest.set_node({x=j*(-1), y=10, z=i*(-1)-1}, {name="air"}) + end + if minetest.get_node({x=j*(-1)-1, y=9, z=i*(-1)+1}).name == "castrum:knight_lv1" or minetest.get_node({x=j*(-1)-1, y=10, z=i*(-1)+1}).name == "castrum:knight_lv1_sit" then + player:set_attribute("fightkill1", ""..(player:get_attribute("fightkill1")+1)) + dd = 1 + if minetest.get_node({x=j*(-1)-1, y=9, z=i*(-1)+1}).name == "castrum:horse1" then + player:set_attribute("fighthkill1", ""..(player:get_attribute("fighthkill1")+1)) + end + minetest.set_node({x=j*(-1)-1, y=9, z=i*(-1)+1}, {name="air"}) + minetest.set_node({x=j*(-1)-1, y=10, z=i*(-1)+1}, {name="air"}) + end + if minetest.get_node({x=j*(-1)+1, y=9, z=i*(-1)+1}).name == "castrum:knight_lv1" or minetest.get_node({x=j*(-1)+1, y=10, z=i*(-1)+1}).name == "castrum:knight_lv1_sit" then + player:set_attribute("fightkill1", ""..(player:get_attribute("fightkill1")+1)) + dd = 1 + if minetest.get_node({x=j*(-1)+1, y=9, z=i*(-1)+1}).name == "castrum:horse1" then + player:set_attribute("fighthkill1", ""..(player:get_attribute("fighthkill1")+1)) + end + minetest.set_node({x=j*(-1)+1, y=9, z=i*(-1)+1}, {name="air"}) + minetest.set_node({x=j*(-1)+1, y=10, z=i*(-1)+1}, {name="air"}) + end + if minetest.get_node({x=j*(-1), y=9, z=i*(-1)+1}).name == "castrum:knight_lv1" or minetest.get_node({x=j*(-1), y=10, z=i*(-1)+1}).name == "castrum:knight_lv1_sit" then + player:set_attribute("fightkill1", ""..(player:get_attribute("fightkill1")+1)) + dd = 1 + if minetest.get_node({x=j*(-1), y=9, z=i*(-1)+1}).name == "castrum:horse1" then + player:set_attribute("fighthkill1", ""..(player:get_attribute("fighthkill1")+1)) + end + minetest.set_node({x=j*(-1), y=9, z=i*(-1)+1}, {name="air"}) + minetest.set_node({x=j*(-1), y=10, z=i*(-1)+1}, {name="air"}) + end + if minetest.get_node({x=j*(-1)+1, y=9, z=i*(-1)}).name == "castrum:castrum_knight1" and dd == 0 then minetest.set_node({x=j*(-1)+1, y=9, z=i*(-1)}, {name="air"}) - player:set_attribute("fightkill", ""..(player:get_attribute("fightkill")+1)) + player:set_attribute("fightkill1", ""..(player:get_attribute("fightkill1")+1)) dd = 1 end - if (minetest.get_node({x=j*(-1)-1, y=9, z=i*(-1)}).name == "castrum:knight_lv1" or minetest.get_node({x=j*(-1)-1, y=9, z=i*(-1)}).name == "castrum:castrum_knight1") and dd == 0 then + if minetest.get_node({x=j*(-1)-1, y=9, z=i*(-1)}).name == "castrum:castrum_knight1" and dd == 0 then minetest.set_node({x=j*(-1)-1, y=9, z=i*(-1)}, {name="air"}) - player:set_attribute("fightkill", ""..(player:get_attribute("fightkill")+1)) + player:set_attribute("fightkill1", ""..(player:get_attribute("fightkill1")+1)) dd = 1 end - if (minetest.get_node({x=j*(-1), y=9, z=i*(-1)}).name == "castrum:knight_lv1" or minetest.get_node({x=j*(-1), y=9, z=i*(-1)}).name == "castrum:castrum_knight1") and dd == 0 then + if minetest.get_node({x=j*(-1), y=9, z=i*(-1)}).name == "castrum:castrum_knight1" and dd == 0 then minetest.set_node({x=j*(-1), y=9, z=i*(-1)}, {name="air"}) - player:set_attribute("fightkill", ""..(player:get_attribute("fightkill")+1)) + player:set_attribute("fightkill1", ""..(player:get_attribute("fightkill1")+1)) dd = 1 end - if (minetest.get_node({x=j*(-1)+1, y=9, z=i*(-1)-1}).name == "castrum:knight_lv1" or minetest.get_node({x=j*(-1)+1, y=9, z=i*(-1)-1}).name == "castrum:castrum_knight1") and dd == 0 then + if minetest.get_node({x=j*(-1)+1, y=9, z=i*(-1)-1}).name == "castrum:castrum_knight1" and dd == 0 then minetest.set_node({x=j*(-1)+1, y=9, z=i*(-1)-1}, {name="air"}) - player:set_attribute("fightkill", ""..(player:get_attribute("fightkill")+1)) + player:set_attribute("fightkill1", ""..(player:get_attribute("fightkill1")+1)) dd = 1 end - if (minetest.get_node({x=j*(-1)-1, y=9, z=i*(-1)-1}).name == "castrum:knight_lv1" or minetest.get_node({x=j*(-1)-1, y=9, z=i*(-1)-1}).name == "castrum:castrum_knight1") and dd == 0 then + if minetest.get_node({x=j*(-1)-1, y=9, z=i*(-1)-1}).name == "castrum:castrum_knight1" and dd == 0 then minetest.set_node({x=j*(-1)-1, y=9, z=i*(-1)-1}, {name="air"}) - player:set_attribute("fightkill", ""..(player:get_attribute("fightkill")+1)) + player:set_attribute("fightkill1", ""..(player:get_attribute("fightkill1")+1)) dd = 1 end - if (minetest.get_node({x=j*(-1), y=9, z=i*(-1)-1}).name == "castrum:knight_lv1" or minetest.get_node({x=j*(-1), y=9, z=i*(-1)-1}).name == "castrum:castrum_knight1") and dd == 0 then + if minetest.get_node({x=j*(-1), y=9, z=i*(-1)-1}).name == "castrum:castrum_knight1" and dd == 0 then minetest.set_node({x=j*(-1), y=9, z=i*(-1)-1}, {name="air"}) - player:set_attribute("fightkill", ""..(player:get_attribute("fightkill")+1)) + player:set_attribute("fightkill1", ""..(player:get_attribute("fightkill1")+1)) dd = 1 end - if (minetest.get_node({x=j*(-1)+1, y=9, z=i*(-1)+1}).name == "castrum:knight_lv1" or minetest.get_node({x=j*(-1)+1, y=9, z=i*(-1)+1}).name == "castrum:castrum_knight1") and dd == 0 then + if minetest.get_node({x=j*(-1)+1, y=9, z=i*(-1)+1}).name == "castrum:castrum_knight1" and dd == 0 then minetest.set_node({x=j*(-1)+1, y=9, z=i*(-1)+1}, {name="air"}) - player:set_attribute("fightkill", ""..(player:get_attribute("fightkill")+1)) + player:set_attribute("fightkill1", ""..(player:get_attribute("fightkill1")+1)) dd = 1 end - if (minetest.get_node({x=j*(-1)-1, y=9, z=i*(-1)+1}).name == "castrum:knight_lv1" or minetest.get_node({x=j*(-1)-1, y=9, z=i*(-1)+1}).name == "castrum:castrum_knight1") and dd == 0 then + if minetest.get_node({x=j*(-1)-1, y=9, z=i*(-1)+1}).name == "castrum:castrum_knight1" and dd == 0 then minetest.set_node({x=j*(-1)-1, y=9, z=i*(-1)+1}, {name="air"}) - player:set_attribute("fightkill", ""..(player:get_attribute("fightkill")+1)) + player:set_attribute("fightkill1", ""..(player:get_attribute("fightkill1")+1)) dd = 1 end - if (minetest.get_node({x=j*(-1), y=9, z=i*(-1)+1}).name == "castrum:knight_lv1" or minetest.get_node({x=j*(-1), y=9, z=i*(-1)+1}).name == "castrum:castrum_knight1") and dd == 0 then + if minetest.get_node({x=j*(-1), y=9, z=i*(-1)+1}).name == "castrum:castrum_knight1" and dd == 0 then minetest.set_node({x=j*(-1), y=9, z=i*(-1)+1}, {name="air"}) - player:set_attribute("fightkill", ""..(player:get_attribute("fightkill")+1)) + player:set_attribute("fightkill1", ""..(player:get_attribute("fightkill1")+1)) dd = 1 end - + end + if minetest.get_node({x=j*(-1), y=9, z=i*(-1)}).name == "castrum:knight_lv1_dark" and dignum < 2 then + if minetest.get_node({x=j*(-1)+1, y=9, z=i*(-1)}).name == "castrum:knight_lv2" or minetest.get_node({x=j*(-1)+1, y=10, z=i*(-1)}).name == "castrum:knight_lv2_sit" then + player:set_attribute("fightkill2", ""..(player:get_attribute("fightkill2")+1)) + dd = 1 + if minetest.get_node({x=j*(-1)+1, y=9, z=i*(-1)}).name == "castrum:horse1" then + player:set_attribute("fighthkill1", ""..(player:get_attribute("fighthkill1")+1)) + end + minetest.set_node({x=j*(-1)+1, y=9, z=i*(-1)}, {name="air"}) + minetest.set_node({x=j*(-1)+1, y=10, z=i*(-1)}, {name="air"}) + end + if minetest.get_node({x=j*(-1)-1, y=9, z=i*(-1)}).name == "castrum:knight_lv2" or minetest.get_node({x=j*(-1)-1, y=10, z=i*(-1)}).name == "castrum:knight_lv2_sit" then + player:set_attribute("fightkill2", ""..(player:get_attribute("fightkill2")+1)) + dd = 1 + if minetest.get_node({x=j*(-1)-1, y=9, z=i*(-1)}).name == "castrum:horse1" then + player:set_attribute("fighthkill1", ""..(player:get_attribute("fighthkill1")+1)) + end + minetest.set_node({x=j*(-1)-1, y=9, z=i*(-1)}, {name="air"}) + minetest.set_node({x=j*(-1)-1, y=10, z=i*(-1)}, {name="air"}) + end + if minetest.get_node({x=j*(-1), y=9, z=i*(-1)}).name == "castrum:knight_lv2" or minetest.get_node({x=j*(-1), y=10, z=i*(-1)}).name == "castrum:knight_lv2_sit" then + player:set_attribute("fightkill2", ""..(player:get_attribute("fightkill2")+1)) + dd = 1 + if minetest.get_node({x=j*(-1), y=9, z=i*(-1)}).name == "castrum:horse1" then + player:set_attribute("fighthkill1", ""..(player:get_attribute("fighthkill1")+1)) + end + minetest.set_node({x=j*(-1), y=9, z=i*(-1)}, {name="air"}) + minetest.set_node({x=j*(-1), y=10, z=i*(-1)}, {name="air"}) + end + if minetest.get_node({x=j*(-1)+1, y=9, z=i*(-1)-1}).name == "castrum:knight_lv2" or minetest.get_node({x=j*(-1)+1, y=10, z=i*(-1)-1}).name == "castrum:knight_lv2_sit" then + player:set_attribute("fightkill2", ""..(player:get_attribute("fightkill2")+1)) + dd = 1 + if minetest.get_node({x=j*(-1)+1, y=9, z=i*(-1)-1}).name == "castrum:horse1" then + player:set_attribute("fighthkill1", ""..(player:get_attribute("fighthkill1")+1)) + end + minetest.set_node({x=j*(-1)+1, y=9, z=i*(-1)-1}, {name="air"}) + minetest.set_node({x=j*(-1)+1, y=10, z=i*(-1)-1}, {name="air"}) + end + if minetest.get_node({x=j*(-1)-1, y=9, z=i*(-1)-1}).name == "castrum:knight_lv2" or minetest.get_node({x=j*(-1)-1, y=10, z=i*(-1)-1}).name == "castrum:knight_lv2_sit" then + player:set_attribute("fightkill2", ""..(player:get_attribute("fightkill2")+1)) + dd = 1 + if minetest.get_node({x=j*(-1)-1, y=9, z=i*(-1)-1}).name == "castrum:horse1" then + player:set_attribute("fighthkill1", ""..(player:get_attribute("fighthkill1")+1)) + end + minetest.set_node({x=j*(-1)-1, y=9, z=i*(-1)-1}, {name="air"}) + minetest.set_node({x=j*(-1)-1, y=10, z=i*(-1)-1}, {name="air"}) + end + if minetest.get_node({x=j*(-1), y=9, z=i*(-1)-1}).name == "castrum:knight_lv2" or minetest.get_node({x=j*(-1), y=10, z=i*(-1)-1}).name == "castrum:knight_lv2_sit" then + player:set_attribute("fightkill2", ""..(player:get_attribute("fightkill2")+1)) + dd = 1 + if minetest.get_node({x=j*(-1), y=9, z=i*(-1)-1}).name == "castrum:horse1" then + player:set_attribute("fighthkill1", ""..(player:get_attribute("fighthkill1")+1)) + end + minetest.set_node({x=j*(-1), y=9, z=i*(-1)-1}, {name="air"}) + minetest.set_node({x=j*(-1), y=10, z=i*(-1)-1}, {name="air"}) + end + if minetest.get_node({x=j*(-1)-1, y=9, z=i*(-1)+1}).name == "castrum:knight_lv2" or minetest.get_node({x=j*(-1)-1, y=10, z=i*(-1)+1}).name == "castrum:knight_lv2_sit" then + player:set_attribute("fightkill2", ""..(player:get_attribute("fightkill2")+1)) + dd = 1 + if minetest.get_node({x=j*(-1)-1, y=9, z=i*(-1)+1}).name == "castrum:horse1" then + player:set_attribute("fighthkill1", ""..(player:get_attribute("fighthkill1")+1)) + end + minetest.set_node({x=j*(-1)-1, y=9, z=i*(-1)+1}, {name="air"}) + minetest.set_node({x=j*(-1)-1, y=10, z=i*(-1)+1}, {name="air"}) + end + if minetest.get_node({x=j*(-1)+1, y=9, z=i*(-1)+1}).name == "castrum:knight_lv2" or minetest.get_node({x=j*(-1)+1, y=10, z=i*(-1)+1}).name == "castrum:knight_lv12_sit" then + player:set_attribute("fightkill2", ""..(player:get_attribute("fightkill2")+1)) + dd = 1 + if minetest.get_node({x=j*(-1)+1, y=9, z=i*(-1)+1}).name == "castrum:horse1" then + player:set_attribute("fighthkill1", ""..(player:get_attribute("fighthkill1")+1)) + end + minetest.set_node({x=j*(-1)+1, y=9, z=i*(-1)+1}, {name="air"}) + minetest.set_node({x=j*(-1)+1, y=10, z=i*(-1)+1}, {name="air"}) + end + if minetest.get_node({x=j*(-1), y=9, z=i*(-1)+1}).name == "castrum:knight_lv2" or minetest.get_node({x=j*(-1), y=10, z=i*(-1)+1}).name == "castrum:knight_lv2_sit" then + player:set_attribute("fightkill2", ""..(player:get_attribute("fightkill2")+1)) + dd = 1 + if minetest.get_node({x=j*(-1), y=9, z=i*(-1)+1}).name == "castrum:horse1" then + player:set_attribute("fighthkill1", ""..(player:get_attribute("fighthkill1")+1)) + end + minetest.set_node({x=j*(-1), y=9, z=i*(-1)+1}, {name="air"}) + minetest.set_node({x=j*(-1), y=10, z=i*(-1)+1}, {name="air"}) + end + if minetest.get_node({x=j*(-1)+1, y=9, z=i*(-1)}).name == "castrum:knight_lv2" and dd == 0 then + minetest.set_node({x=j*(-1)+1, y=9, z=i*(-1)}, {name="air"}) + player:set_attribute("fightkill2", ""..(player:get_attribute("fightkill2")+1)) + dd = 1 + end + if minetest.get_node({x=j*(-1)-1, y=9, z=i*(-1)}).name == "castrum:knight_lv2" and dd == 0 then + minetest.set_node({x=j*(-1)-1, y=9, z=i*(-1)}, {name="air"}) + player:set_attribute("fightkill2", ""..(player:get_attribute("fightkill2")+1)) + dd = 1 + end + if minetest.get_node({x=j*(-1), y=9, z=i*(-1)}).name == "castrum:knight_lv2" and dd == 0 then + minetest.set_node({x=j*(-1), y=9, z=i*(-1)}, {name="air"}) + player:set_attribute("fightkill2", ""..(player:get_attribute("fightkill2")+1)) + dd = 1 + end + if minetest.get_node({x=j*(-1)+1, y=9, z=i*(-1)-1}).name == "castrum:knight_lv2" and dd == 0 then + minetest.set_node({x=j*(-1)+1, y=9, z=i*(-1)-1}, {name="air"}) + player:set_attribute("fightkill2", ""..(player:get_attribute("fightkill2")+1)) + dd = 1 + end + if minetest.get_node({x=j*(-1)-1, y=9, z=i*(-1)-1}).name == "castrum:knight_lv2" and dd == 0 then + minetest.set_node({x=j*(-1)-1, y=9, z=i*(-1)-1}, {name="air"}) + player:set_attribute("fightkill2", ""..(player:get_attribute("fightkill2")+1)) + dd = 1 + end + if minetest.get_node({x=j*(-1), y=9, z=i*(-1)-1}).name == "castrum:knight_lv2" and dd == 0 then + minetest.set_node({x=j*(-1), y=9, z=i*(-1)-1}, {name="air"}) + player:set_attribute("fightkill2", ""..(player:get_attribute("fightkill2")+1)) + dd = 1 + end + if minetest.get_node({x=j*(-1)+1, y=9, z=i*(-1)+1}).name == "castrum:knight_lv2" and dd == 0 then + minetest.set_node({x=j*(-1)+1, y=9, z=i*(-1)+1}, {name="air"}) + player:set_attribute("fightkill2", ""..(player:get_attribute("fightkill2")+1)) + dd = 1 + end + if minetest.get_node({x=j*(-1)-1, y=9, z=i*(-1)+1}).name == "castrum:knight_lv2" and dd == 0 then + minetest.set_node({x=j*(-1)-1, y=9, z=i*(-1)+1}, {name="air"}) + player:set_attribute("fightkill2", ""..(player:get_attribute("fightkill2")+1)) + dd = 1 + end + if minetest.get_node({x=j*(-1), y=9, z=i*(-1)+1}).name == "castrum:knight_lv2" and dd == 0 then + minetest.set_node({x=j*(-1), y=9, z=i*(-1)+1}, {name="air"}) + player:set_attribute("fightkill2", ""..(player:get_attribute("fightkill2")+1)) + dd = 1 + end + end + if minetest.get_node({x=j*(-1), y=9, z=i*(-1)}).name == "castrum:knight_lv2_dark" and dignum < 4 then + if minetest.get_node({x=j*(-1)+1, y=9, z=i*(-1)}).name == "castrum:knight_lv1" or minetest.get_node({x=j*(-1)+1, y=10, z=i*(-1)}).name == "castrum:knight_lv1_sit" then + player:set_attribute("fightkill1", ""..(player:get_attribute("fightkill1")+1)) + dd = 1 + if minetest.get_node({x=j*(-1)+1, y=9, z=i*(-1)}).name == "castrum:horse1" then + player:set_attribute("fighthkill1", ""..(player:get_attribute("fighthkill1")+1)) + end + minetest.set_node({x=j*(-1)+1, y=9, z=i*(-1)}, {name="air"}) + minetest.set_node({x=j*(-1)+1, y=10, z=i*(-1)}, {name="air"}) + end + if minetest.get_node({x=j*(-1)-1, y=9, z=i*(-1)}).name == "castrum:knight_lv1" or minetest.get_node({x=j*(-1)-1, y=10, z=i*(-1)}).name == "castrum:knight_lv1_sit" then + player:set_attribute("fightkill1", ""..(player:get_attribute("fightkill1")+1)) + dd = 1 + if minetest.get_node({x=j*(-1)-1, y=9, z=i*(-1)}).name == "castrum:horse1" then + player:set_attribute("fighthkill1", ""..(player:get_attribute("fighthkill1")+1)) + end + minetest.set_node({x=j*(-1)-1, y=9, z=i*(-1)}, {name="air"}) + minetest.set_node({x=j*(-1)-1, y=10, z=i*(-1)}, {name="air"}) + end + if minetest.get_node({x=j*(-1), y=9, z=i*(-1)}).name == "castrum:knight_lv1" or minetest.get_node({x=j*(-1), y=10, z=i*(-1)}).name == "castrum:knight_lv1_sit" then + player:set_attribute("fightkill1", ""..(player:get_attribute("fightkill1")+1)) + dd = 1 + if minetest.get_node({x=j*(-1), y=9, z=i*(-1)}).name == "castrum:horse1" then + player:set_attribute("fighthkill1", ""..(player:get_attribute("fighthkill1")+1)) + end + minetest.set_node({x=j*(-1), y=9, z=i*(-1)}, {name="air"}) + minetest.set_node({x=j*(-1), y=10, z=i*(-1)}, {name="air"}) + end + if minetest.get_node({x=j*(-1)+1, y=9, z=i*(-1)-1}).name == "castrum:knight_lv1" or minetest.get_node({x=j*(-1)+1, y=10, z=i*(-1)-1}).name == "castrum:knight_lv1_sit" then + player:set_attribute("fightkill1", ""..(player:get_attribute("fightkill1")+1)) + dd = 1 + if minetest.get_node({x=j*(-1)+1, y=9, z=i*(-1)-1}).name == "castrum:horse1" then + player:set_attribute("fighthkill1", ""..(player:get_attribute("fighthkill1")+1)) + end + minetest.set_node({x=j*(-1)+1, y=9, z=i*(-1)-1}, {name="air"}) + minetest.set_node({x=j*(-1)+1, y=10, z=i*(-1)-1}, {name="air"}) + end + if minetest.get_node({x=j*(-1)-1, y=9, z=i*(-1)-1}).name == "castrum:knight_lv1" or minetest.get_node({x=j*(-1)-1, y=10, z=i*(-1)-1}).name == "castrum:knight_lv1_sit" then + player:set_attribute("fightkill1", ""..(player:get_attribute("fightkill1")+1)) + dd = 1 + if minetest.get_node({x=j*(-1)-1, y=9, z=i*(-1)-1}).name == "castrum:horse1" then + player:set_attribute("fighthkill1", ""..(player:get_attribute("fighthkill1")+1)) + end + minetest.set_node({x=j*(-1)-1, y=9, z=i*(-1)-1}, {name="air"}) + minetest.set_node({x=j*(-1)-1, y=10, z=i*(-1)-1}, {name="air"}) + end + if minetest.get_node({x=j*(-1), y=9, z=i*(-1)-1}).name == "castrum:knight_lv1" or minetest.get_node({x=j*(-1), y=10, z=i*(-1)-1}).name == "castrum:knight_lv1_sit" then + player:set_attribute("fightkill1", ""..(player:get_attribute("fightkill1")+1)) + dd = 1 + if minetest.get_node({x=j*(-1), y=9, z=i*(-1)-1}).name == "castrum:horse1" then + player:set_attribute("fighthkill1", ""..(player:get_attribute("fighthkill1")+1)) + end + minetest.set_node({x=j*(-1), y=9, z=i*(-1)-1}, {name="air"}) + minetest.set_node({x=j*(-1), y=10, z=i*(-1)-1}, {name="air"}) + end + if minetest.get_node({x=j*(-1)-1, y=9, z=i*(-1)+1}).name == "castrum:knight_lv1" or minetest.get_node({x=j*(-1)-1, y=10, z=i*(-1)+1}).name == "castrum:knight_lv1_sit" then + player:set_attribute("fightkill1", ""..(player:get_attribute("fightkill1")+1)) + dd = 1 + if minetest.get_node({x=j*(-1)-1, y=9, z=i*(-1)+1}).name == "castrum:horse1" then + player:set_attribute("fighthkill1", ""..(player:get_attribute("fighthkill1")+1)) + end + minetest.set_node({x=j*(-1)-1, y=9, z=i*(-1)+1}, {name="air"}) + minetest.set_node({x=j*(-1)-1, y=10, z=i*(-1)+1}, {name="air"}) + end + if minetest.get_node({x=j*(-1)+1, y=9, z=i*(-1)+1}).name == "castrum:knight_lv1" or minetest.get_node({x=j*(-1)+1, y=10, z=i*(-1)+1}).name == "castrum:knight_lv1_sit" then + player:set_attribute("fightkill1", ""..(player:get_attribute("fightkill1")+1)) + dd = 1 + if minetest.get_node({x=j*(-1)+1, y=9, z=i*(-1)+1}).name == "castrum:horse1" then + player:set_attribute("fighthkill1", ""..(player:get_attribute("fighthkill1")+1)) + end + minetest.set_node({x=j*(-1)+1, y=9, z=i*(-1)+1}, {name="air"}) + minetest.set_node({x=j*(-1)+1, y=10, z=i*(-1)+1}, {name="air"}) + end + if minetest.get_node({x=j*(-1), y=9, z=i*(-1)+1}).name == "castrum:knight_lv1" or minetest.get_node({x=j*(-1), y=10, z=i*(-1)+1}).name == "castrum:knight_lv1_sit" then + player:set_attribute("fightkill1", ""..(player:get_attribute("fightkill1")+1)) + dd = 1 + if minetest.get_node({x=j*(-1), y=9, z=i*(-1)+1}).name == "castrum:horse1" then + player:set_attribute("fighthkill1", ""..(player:get_attribute("fighthkill1")+1)) + end + minetest.set_node({x=j*(-1), y=9, z=i*(-1)+1}, {name="air"}) + minetest.set_node({x=j*(-1), y=10, z=i*(-1)+1}, {name="air"}) + end + if minetest.get_node({x=j*(-1)+1, y=9, z=i*(-1)}).name == "castrum:castrum_knight1" and dd == 0 then + minetest.set_node({x=j*(-1)+1, y=9, z=i*(-1)}, {name="air"}) + player:set_attribute("fightkill1", ""..(player:get_attribute("fightkill1")+1)) + dd = 1 + end + if minetest.get_node({x=j*(-1)-1, y=9, z=i*(-1)}).name == "castrum:castrum_knight1" and dd == 0 then + minetest.set_node({x=j*(-1)-1, y=9, z=i*(-1)}, {name="air"}) + player:set_attribute("fightkill1", ""..(player:get_attribute("fightkill1")+1)) + dd = 1 + end + if minetest.get_node({x=j*(-1), y=9, z=i*(-1)}).name == "castrum:castrum_knight1" and dd == 0 then + minetest.set_node({x=j*(-1), y=9, z=i*(-1)}, {name="air"}) + player:set_attribute("fightkill1", ""..(player:get_attribute("fightkill1")+1)) + dd = 1 + end + if minetest.get_node({x=j*(-1)+1, y=9, z=i*(-1)-1}).name == "castrum:castrum_knight1" and dd == 0 then + minetest.set_node({x=j*(-1)+1, y=9, z=i*(-1)-1}, {name="air"}) + player:set_attribute("fightkill1", ""..(player:get_attribute("fightkill1")+1)) + dd = 1 + end + if minetest.get_node({x=j*(-1)-1, y=9, z=i*(-1)-1}).name == "castrum:castrum_knight1" and dd == 0 then + minetest.set_node({x=j*(-1)-1, y=9, z=i*(-1)-1}, {name="air"}) + player:set_attribute("fightkill1", ""..(player:get_attribute("fightkill1")+1)) + dd = 1 + end + if minetest.get_node({x=j*(-1), y=9, z=i*(-1)-1}).name == "castrum:castrum_knight1" and dd == 0 then + minetest.set_node({x=j*(-1), y=9, z=i*(-1)-1}, {name="air"}) + player:set_attribute("fightkill1", ""..(player:get_attribute("fightkill1")+1)) + dd = 1 + end + if minetest.get_node({x=j*(-1)+1, y=9, z=i*(-1)+1}).name == "castrum:castrum_knight1" and dd == 0 then + minetest.set_node({x=j*(-1)+1, y=9, z=i*(-1)+1}, {name="air"}) + player:set_attribute("fightkill1", ""..(player:get_attribute("fightkill1")+1)) + dd = 1 + end + if minetest.get_node({x=j*(-1)-1, y=9, z=i*(-1)+1}).name == "castrum:castrum_knight1" and dd == 0 then + minetest.set_node({x=j*(-1)-1, y=9, z=i*(-1)+1}, {name="air"}) + player:set_attribute("fightkill1", ""..(player:get_attribute("fightkill1")+1)) + dd = 1 + end + if minetest.get_node({x=j*(-1), y=9, z=i*(-1)+1}).name == "castrum:castrum_knight1" and dd == 0 then + minetest.set_node({x=j*(-1), y=9, z=i*(-1)+1}, {name="air"}) + player:set_attribute("fightkill1", ""..(player:get_attribute("fightkill1")+1)) + dd = 1 + end + end + if minetest.get_node({x=j*(-1), y=9, z=i*(-1)}).name == "castrum:knight_lv2_dark" and dignum < 3 then + if minetest.get_node({x=j*(-1)+1, y=9, z=i*(-1)}).name == "castrum:knight_lv2" or minetest.get_node({x=j*(-1)+1, y=10, z=i*(-1)}).name == "castrum:knight_lv2_sit" then + player:set_attribute("fightkill2", ""..(player:get_attribute("fightkill2")+1)) + dd = 1 + if minetest.get_node({x=j*(-1)+1, y=9, z=i*(-1)}).name == "castrum:horse1" then + player:set_attribute("fighthkill1", ""..(player:get_attribute("fighthkill1")+1)) + end + minetest.set_node({x=j*(-1)+1, y=9, z=i*(-1)}, {name="air"}) + minetest.set_node({x=j*(-1)+1, y=10, z=i*(-1)}, {name="air"}) + end + if minetest.get_node({x=j*(-1)-1, y=9, z=i*(-1)}).name == "castrum:knight_lv2" or minetest.get_node({x=j*(-1)-1, y=10, z=i*(-1)}).name == "castrum:knight_lv2_sit" then + player:set_attribute("fightkill2", ""..(player:get_attribute("fightkill2")+1)) + dd = 1 + if minetest.get_node({x=j*(-1)-1, y=9, z=i*(-1)}).name == "castrum:horse1" then + player:set_attribute("fighthkill1", ""..(player:get_attribute("fighthkill1")+1)) + end + minetest.set_node({x=j*(-1)-1, y=9, z=i*(-1)}, {name="air"}) + minetest.set_node({x=j*(-1)-1, y=10, z=i*(-1)}, {name="air"}) + end + if minetest.get_node({x=j*(-1), y=9, z=i*(-1)}).name == "castrum:knight_lv2" or minetest.get_node({x=j*(-1), y=10, z=i*(-1)}).name == "castrum:knight_lv2_sit" then + player:set_attribute("fightkill2", ""..(player:get_attribute("fightkill2")+1)) + dd = 1 + if minetest.get_node({x=j*(-1), y=9, z=i*(-1)}).name == "castrum:horse1" then + player:set_attribute("fighthkill1", ""..(player:get_attribute("fighthkill1")+1)) + end + minetest.set_node({x=j*(-1), y=9, z=i*(-1)}, {name="air"}) + minetest.set_node({x=j*(-1), y=10, z=i*(-1)}, {name="air"}) + end + if minetest.get_node({x=j*(-1)+1, y=9, z=i*(-1)-1}).name == "castrum:knight_lv2" or minetest.get_node({x=j*(-1)+1, y=10, z=i*(-1)-1}).name == "castrum:knight_lv2_sit" then + player:set_attribute("fightkill2", ""..(player:get_attribute("fightkill2")+1)) + dd = 1 + if minetest.get_node({x=j*(-1)+1, y=9, z=i*(-1)-1}).name == "castrum:horse1" then + player:set_attribute("fighthkill1", ""..(player:get_attribute("fighthkill1")+1)) + end + minetest.set_node({x=j*(-1)+1, y=9, z=i*(-1)-1}, {name="air"}) + minetest.set_node({x=j*(-1)+1, y=10, z=i*(-1)-1}, {name="air"}) + end + if minetest.get_node({x=j*(-1)-1, y=9, z=i*(-1)-1}).name == "castrum:knight_lv2" or minetest.get_node({x=j*(-1)-1, y=10, z=i*(-1)-1}).name == "castrum:knight_lv2_sit" then + player:set_attribute("fightkill2", ""..(player:get_attribute("fightkill2")+1)) + dd = 1 + if minetest.get_node({x=j*(-1)-1, y=9, z=i*(-1)-1}).name == "castrum:horse1" then + player:set_attribute("fighthkill1", ""..(player:get_attribute("fighthkill1")+1)) + end + minetest.set_node({x=j*(-1)-1, y=9, z=i*(-1)-1}, {name="air"}) + minetest.set_node({x=j*(-1)-1, y=10, z=i*(-1)-1}, {name="air"}) + end + if minetest.get_node({x=j*(-1), y=9, z=i*(-1)-1}).name == "castrum:knight_lv2" or minetest.get_node({x=j*(-1), y=10, z=i*(-1)-1}).name == "castrum:knight_lv2_sit" then + player:set_attribute("fightkill2", ""..(player:get_attribute("fightkill2")+1)) + dd = 1 + if minetest.get_node({x=j*(-1), y=9, z=i*(-1)-1}).name == "castrum:horse1" then + player:set_attribute("fighthkill1", ""..(player:get_attribute("fighthkill1")+1)) + end + minetest.set_node({x=j*(-1), y=9, z=i*(-1)-1}, {name="air"}) + minetest.set_node({x=j*(-1), y=10, z=i*(-1)-1}, {name="air"}) + end + if minetest.get_node({x=j*(-1)-1, y=9, z=i*(-1)+1}).name == "castrum:knight_lv2" or minetest.get_node({x=j*(-1)-1, y=10, z=i*(-1)+1}).name == "castrum:knight_lv2_sit" then + player:set_attribute("fightkill2", ""..(player:get_attribute("fightkill2")+1)) + dd = 1 + if minetest.get_node({x=j*(-1)-1, y=9, z=i*(-1)+1}).name == "castrum:horse1" then + player:set_attribute("fighthkill1", ""..(player:get_attribute("fighthkill1")+1)) + end + minetest.set_node({x=j*(-1)-1, y=9, z=i*(-1)+1}, {name="air"}) + minetest.set_node({x=j*(-1)-1, y=10, z=i*(-1)+1}, {name="air"}) + end + if minetest.get_node({x=j*(-1)+1, y=9, z=i*(-1)+1}).name == "castrum:knight_lv2" or minetest.get_node({x=j*(-1)+1, y=10, z=i*(-1)+1}).name == "castrum:knight_lv12_sit" then + player:set_attribute("fightkill2", ""..(player:get_attribute("fightkill2")+1)) + dd = 1 + if minetest.get_node({x=j*(-1)+1, y=9, z=i*(-1)+1}).name == "castrum:horse1" then + player:set_attribute("fighthkill1", ""..(player:get_attribute("fighthkill1")+1)) + end + minetest.set_node({x=j*(-1)+1, y=9, z=i*(-1)+1}, {name="air"}) + minetest.set_node({x=j*(-1)+1, y=10, z=i*(-1)+1}, {name="air"}) + end + if minetest.get_node({x=j*(-1), y=9, z=i*(-1)+1}).name == "castrum:knight_lv2" or minetest.get_node({x=j*(-1), y=10, z=i*(-1)+1}).name == "castrum:knight_lv2_sit" then + player:set_attribute("fightkill2", ""..(player:get_attribute("fightkill2")+1)) + dd = 1 + if minetest.get_node({x=j*(-1), y=9, z=i*(-1)+1}).name == "castrum:horse1" then + player:set_attribute("fighthkill1", ""..(player:get_attribute("fighthkill1")+1)) + end + minetest.set_node({x=j*(-1), y=9, z=i*(-1)+1}, {name="air"}) + minetest.set_node({x=j*(-1), y=10, z=i*(-1)+1}, {name="air"}) + end end end end @@ -301,15 +831,28 @@ function fight_step2(player) move2 = move2+1 end end + while d == 0 and move2 < 300 and dd == 0 and tonumber(chapter) == 3 do + if minetest.get_node(list[move2][2]).name == "castrum:knight_lv2_dark" then + minetest.set_node(list[move2][2], {name="air"}) + minetest.set_node(list[move2][3], {name="castrum:knight_lv2_dark"}) + player:set_attribute("fightmove", ""..(move2+1)) + screwdriver_handler(player, {type="node", under=list[move2][3], above=list[move2][3]}, 1) + screwdriver_handler(player, {type="node", under=list[move2][3], above=list[move2][3]}, 1) + screwdriver_handler(player, {type="node", under=list[move2][3], above=list[move2][3]}, 1) + d = 1 + else + move2 = move2+1 + end + end local kg = 0 local ky = 0 local tg = 0 local ty = 0 for j=144,174 do for i=51,81 do - if minetest.get_node({x=j*(-1), y=9, z=i*(-1)}).name == "castrum:knight_lv1_dark" then + if minetest.get_node({x=j*(-1), y=9, z=i*(-1)}).name == "castrum:knight_lv1_dark" or minetest.get_node({x=j*(-1), y=9, z=i*(-1)}).name == "castrum:knight_lv2_dark" then tg = 1 - elseif minetest.get_node({x=j*(-1), y=9, z=i*(-1)}).name == "castrum:knight_lv1" then + elseif minetest.get_node({x=j*(-1), y=9, z=i*(-1)}).name == "castrum:knight_lv1" or minetest.get_node({x=j*(-1), y=9, z=i*(-1)}).name == "castrum:knight_lv2" or minetest.get_node({x=j*(-1), y=10, z=i*(-1)}).name == "castrum:knight_lv1_sit" or minetest.get_node({x=j*(-1), y=10, z=i*(-1)}).name == "castrum:knight_lv2_sit" then ty = 1 elseif minetest.get_node({x=j*(-1), y=9, z=i*(-1)}).name == "castrum:castrum_knight1" then ky = 1 @@ -323,6 +866,9 @@ function fight_step2(player) player:setpos({x=-74, y=8.5, z=-77}) local inv = player:get_inventory() inv:remove_item("main", "castrum:knight_lv1 80") + inv:remove_item("main", "castrum:knight_lv2 80") + inv:remove_item("main", "castrum:horse1_item_1 5") + inv:remove_item("main", "castrum:horse1_item_2 5") file = io.open(minetest.get_worldpath().."/SAVE/Chapter.txt", "r") local chapter = file:read("*l") file:close() @@ -333,29 +879,157 @@ function fight_step2(player) local knight_1 = file:read("*l") file:close() file = io.open(minetest.get_worldpath().."/SAVE/Knight_1.txt", "w") - file:write((tonumber(knight_1)-player:get_attribute("fightkill"))) + file:write((tonumber(knight_1)-player:get_attribute("fightkill1"))) + file:close() + file = io.open(minetest.get_worldpath().."/SAVE/Knight_2.txt", "r") + local knight_2 = file:read("*l") + file:close() + file = io.open(minetest.get_worldpath().."/SAVE/Knight_2.txt", "w") + file:write((tonumber(knight_2)-player:get_attribute("fightkill2"))) + file:close() + file = io.open(minetest.get_worldpath().."/SAVE/Horse_1.txt", "r") + local horse_1 = file:read("*l") + file:close() + file = io.open(minetest.get_worldpath().."/SAVE/Horse_1.txt", "w") + file:write((tonumber(horse_1)-player:get_attribute("fighthkill1"))) file:close() Update_knight(player) + Update_horse(player) elseif ky == 0 or ty == 0 then minetest.chat_send_player(player:get_player_name(), "you lose") player:setpos({x=-74, y=8.5, z=-77}) local inv = player:get_inventory() inv:remove_item("main", "castrum:knight_lv1 80") + inv:remove_item("main", "castrum:knight_lv2 80") + inv:remove_item("main", "castrum:horse1_item_1 5") + inv:remove_item("main", "castrum:horse1_item_2 5") file = io.open(minetest.get_worldpath().."/SAVE/Knight_1.txt", "r") local knight_1 = file:read("*l") file:close() file = io.open(minetest.get_worldpath().."/SAVE/Knight_1.txt", "w") - file:write((tonumber(knight_1)-player:get_attribute("fightkill"))) + file:write((tonumber(knight_1)-player:get_attribute("fightkill1"))) + file:close() + file = io.open(minetest.get_worldpath().."/SAVE/Knight_2.txt", "r") + local knight_2 = file:read("*l") + file:close() + file = io.open(minetest.get_worldpath().."/SAVE/Knight_2.txt", "w") + file:write((tonumber(knight_2)-player:get_attribute("fightkill2"))) + file:close() + file = io.open(minetest.get_worldpath().."/SAVE/Horse_1.txt", "r") + local horse_1 = file:read("*l") + file:close() + file = io.open(minetest.get_worldpath().."/SAVE/Horse_1.txt", "w") + file:write((tonumber(horse_1)-player:get_attribute("fighthkill1"))) file:close() Update_knight(player) + Update_horse(player) end end +local start_fight = {} +start_fight.get_formspec = function(player, pos) + if player == nil then + return + end + formspec = "size[5,6.5]" + .."background[5,6.5;1,1;gui_formbg.png;true]" + .."listcolors[#00000069;#5A5A5A;#141318;#30434C;#FFF]" + .."bgcolor[#080808BB;true]" + .."button[0,2;5,1;;Start Fight]" + .."button[0,3;5,1;;Go Back]" + .."image_button[4.5,-0.3;0.8,0.8;;esc;X]" + return formspec +end +local go_back = {} +go_back.get_formspec = function(player, pos) + if player == nil then + return + end + formspec = "size[5,6.5]" + .."background[5,6.5;1,1;gui_formbg.png;true]" + .."listcolors[#00000069;#5A5A5A;#141318;#30434C;#FFF]" + .."bgcolor[#080808BB;true]" + .."label[0,1.4;If you go back, you will lose your placed knights and horses!]" + .."label[0,1.7;Go Back?]" + .."button[0,2;2.5,1;;Yes]" + .."button[2.5,2;2.5,1;;No]" + .."image_button[4.5,-0.3;0.8,0.8;;esc;X]" + return formspec +end minetest.register_node("castrum:start_fight",{ - tiles = {"castrum_bridge_status.png"}, + tiles = {"default_diamond_block.png"}, description = "Start fight", --groups = {snappy=1,choppy=2,oddly_breakable_by_hand=2,flammable=3}, on_punch = function(pos, node, player, pointed_thing) - fight_step1(player) - + minetest.show_formspec(player:get_player_name(), "start_fight" , start_fight.get_formspec(player)) end, -}) \ No newline at end of file +}) +minetest.register_on_player_receive_fields(function(player, formname, fields) + local player_inv = player:get_inventory() + if formname == "start_fight" then + for k, v in pairs(fields) do + if v == "Start Fight" then + fight_step1(player) + minetest.show_formspec(player:get_player_name(), "", "") + elseif v == "Go Back" then + minetest.show_formspec(player:get_player_name(), "go_back", go_back.get_formspec(player)) + elseif v == "X" then + minetest.show_formspec(player:get_player_name(), "", "") + end + end + end + if formname == "go_back" then + for k, v in pairs(fields) do + if v == "Yes" then + local k1 = player:get_attribute("fightkill1") + local k2 = player:get_attribute("fightkill2") + local h1 = player:get_attribute("fighthkill1") + for j=144,174 do + for i=51,81 do + if minetest.get_node({x=j*(-1), y=9, z=i*(-1)}).name == "castrum:knight_lv1" or minetest.get_node({x=j*(-1), y=10, z=i*(-1)}).name == "castrum:knight_lv1_sit" then + k1 = k1+1 + end + if minetest.get_node({x=j*(-1), y=9, z=i*(-1)}).name == "castrum:knight_lv2" or minetest.get_node({x=j*(-1), y=10, z=i*(-1)}).name == "castrum:knight_lv2_sit" then + k2 = k2+1 + end + if minetest.get_node({x=j*(-1), y=9, z=i*(-1)}).name == "castrum:horse1" then + h1 = h1+1 + end + end + end + file = io.open(minetest.get_worldpath().."/SAVE/Knight_1.txt", "r") + local knight_1 = file:read("*l") + file:close() + file = io.open(minetest.get_worldpath().."/SAVE/Knight_1.txt", "w") + file:write((tonumber(knight_1)-k1)) + file:close() + file = io.open(minetest.get_worldpath().."/SAVE/Knight_2.txt", "r") + local knight_2 = file:read("*l") + file:close() + file = io.open(minetest.get_worldpath().."/SAVE/Knight_2.txt", "w") + file:write((tonumber(knight_2)-k2)) + file:close() + file = io.open(minetest.get_worldpath().."/SAVE/Horse_1.txt", "r") + local horse_1 = file:read("*l") + file:close() + file = io.open(minetest.get_worldpath().."/SAVE/Horse_1.txt", "w") + file:write((tonumber(horse_1)-h1)) + file:close() + Update_knight(player) + Update_horse(player) + player:setpos({x=-74, y=8.5, z=-77}) + local inv = player:get_inventory() + inv:remove_item("main", "castrum:knight_lv1 80") + inv:remove_item("main", "castrum:knight_lv2 80") + inv:remove_item("main", "castrum:horse1_item 5") + inv:remove_item("main", "castrum:horse1_item_1 5") + inv:remove_item("main", "castrum:horse1_item_2 5") + + minetest.show_formspec(player:get_player_name(), "", "") + elseif v == "No" then + minetest.show_formspec(player:get_player_name(), "", "") + elseif v == "X" then + minetest.show_formspec(player:get_player_name(), "", "") + end + end + end +end) \ No newline at end of file diff --git a/mods/castrum/init.lua b/mods/castrum/init.lua index bac4d2d..607e7e9 100644 --- a/mods/castrum/init.lua +++ b/mods/castrum/init.lua @@ -6,7 +6,7 @@ minetest.register_on_joinplayer(function(player) offset = {x=0, y=10}, alignment = {x=1, y=0}, number = 0xFFFFFF , - text = "For Minetest : 0.4.16", + text = "For Minetest : 0.4.17.x", }) player:hud_add({ hud_elem_type = "text", @@ -14,15 +14,15 @@ minetest.register_on_joinplayer(function(player) offset = {x=0, y=30}, alignment = {x=1, y=0}, number = 0xFFFFFF , - text = "Game Version : 1.3.0", + text = "Game Version : 1.5.0", }) - player:hud_add({ + player:hud_add({ hud_elem_type = "text", position = {x=0, y=0.85}, offset = {x=0, y=50}, alignment = {x=1, y=0}, number = 0xFFFFFF , - text = "Map Version : 4", + text = "Map Version : 8", }) end) function file_check(file_name) @@ -107,9 +107,65 @@ minetest.register_on_joinplayer(function(player) file:write("0") file:close() end + if file_check(minetest.get_worldpath().."/SAVE/Cactusfarm.txt") == true then + else + file = io.open(minetest.get_worldpath().."/SAVE/Cactusfarm.txt", "w") + file:write("0") + file:close() + end + if file_check(minetest.get_worldpath().."/SAVE/Camp2.txt") == true then + else + file = io.open(minetest.get_worldpath().."/SAVE/Camp2.txt", "w") + file:write("0") + file:close() + end + if file_check(minetest.get_worldpath().."/SAVE/Island_Smithy.txt") == true then + else + file = io.open(minetest.get_worldpath().."/SAVE/Island_Smithy.txt", "w") + file:write("0") + file:close() + end + if file_check(minetest.get_worldpath().."/SAVE/Knight_2.txt") == true then + else + file = io.open(minetest.get_worldpath().."/SAVE/Knight_2.txt", "w") + file:write("0") + file:close() + end + if file_check(minetest.get_worldpath().."/SAVE/Lake2.txt") == true then + else + file = io.open(minetest.get_worldpath().."/SAVE/Lake2.txt", "w") + file:write("0") + file:close() + end + + if file_check(minetest.get_worldpath().."/SAVE/Horse_1.txt") == true then + else + file = io.open(minetest.get_worldpath().."/SAVE/Horse_1.txt", "w") + file:write("0") + file:close() + end + if file_check(minetest.get_worldpath().."/SAVE/Mountain_Quarry.txt") == true then + else + file = io.open(minetest.get_worldpath().."/SAVE/Mountain_Quarry.txt", "w") + file:write("0") + file:close() + end + if file_check(minetest.get_worldpath().."/SAVE/Mountain_Fountain.txt") == true then + else + file = io.open(minetest.get_worldpath().."/SAVE/Mountain_Fountain.txt", "w") + file:write("0") + file:close() + end + if file_check(minetest.get_worldpath().."/SAVE/Island_Home1.txt") == true then + else + file = io.open(minetest.get_worldpath().."/SAVE/Island_Home1.txt", "w") + file:write("0") + file:close() + end end) dofile(minetest.get_modpath("castrum").."/Chapter1.lua") dofile(minetest.get_modpath("castrum").."/Chapter2.lua") +dofile(minetest.get_modpath("castrum").."/Chapter3.lua") dofile(minetest.get_modpath("castrum").."/fight.lua") dofile(minetest.get_modpath("castrum").."/update.lua") local timer = 0 @@ -118,11 +174,14 @@ local timer3 = 0 local timer4 = 0 local timer5 = 0 local timer6 = 0 +local timer7 = 0 +local timer8 = 0 +local timer9 = 0 local tree2 = 0 local quarry2 = 0 local mine2 = 0 local sandmine2 = 0 -local last = {x=0,y=0,z=0} +local last = {x=-40,y=8.5,z=-5} minetest.register_globalstep(function(dtime) timer = timer + dtime; timer2 = timer2 + dtime; @@ -130,26 +189,71 @@ minetest.register_globalstep(function(dtime) timer4 = timer4 + dtime; timer5 = timer5 + dtime; timer6 = timer6 + dtime; + timer7 = timer7 + dtime; + timer8 = timer8 + dtime; + timer9 = timer9 + dtime; local players = minetest.get_connected_players() for _,player in ipairs(players) do local pos = player:getpos() - if pos.x < -9.5 and pos.x > -15.5 and pos.z > -62.5 and pos.z < -54 then + file = io.open(minetest.get_worldpath().."/SAVE/Ship1.txt", "r") + local ship1 = file:read("*l") + file:close() + if pos.x < -9.5 and pos.x > -15.5 and pos.z > -62.5 and pos.z < -54 and tonumber(ship1) > 1 then last = pos - elseif pos.x < -10.5 and pos.x > -14.5 and pos.z > -63.5 and pos.z < -62.5 then + elseif pos.x < -10.5 and pos.x > -14.5 and pos.z > -63.5 and pos.z < -62.5 and tonumber(ship1) > 1 then last = pos - elseif pos.x < -11.5 and pos.x > -13.5 and pos.z > -64.5 and pos.z < -63.5 then + elseif pos.x < -11.5 and pos.x > -13.5 and pos.z > -64.5 and pos.z < -63.5 and tonumber(ship1) > 1 then last = pos elseif pos.x < 132.5 and pos.x > 127.5 and pos.z > 39.5 and pos.z < 48.5 then last = pos elseif pos.x < 131.5 and pos.x > 128.5 and pos.z > 48.5 and pos.z < 49.5 then last = pos elseif pos.x < 130.5 and pos.x > 129.5 and pos.z > 49.5 and pos.z < 50.5 then + last = pos + elseif pos.x < 320.5 and pos.x > 315.5 and pos.z > 39.5 and pos.z < 48.5 then + last = pos + elseif pos.x < 319.5 and pos.x > 316.5 and pos.z > 48.5 and pos.z < 49.5 then + last = pos + elseif pos.x < 318.5 and pos.x > 317.5 and pos.z > 49.5 and pos.z < 50.5 then last = pos elseif pos.y < 8 then player:setpos(last) elseif minetest.get_node({x=pos.x, y=(pos.y-0.5),z=pos.z}).name ~= "air" then last = pos end + + if minetest.get_node({x=-4, y=8,z=-52}).name == "default:wood" or minetest.get_node({x=-8, y=8,z=-65}).name == "default:wood" or minetest.get_node({x=121, y=8,z=38}).name == "default:wood" or minetest.get_node({x=125, y=8,z=51}).name == "default:wood" then + file = io.open(minetest.get_worldpath().."/SAVE/Pier.txt", "r") + local level = file:read("*l") + file:close() + if tonumber(level) > 5 then + Pier(6,player) + end + end + if minetest.get_node({x=-13, y=8,z=-65}).name == "default:wood" or minetest.get_node({x=-13, y=8,z=-53}).name == "default:wood" or minetest.get_node({x=130, y=8,z=51}).name == "default:wood" or minetest.get_node({x=130, y=8,z=39}).name == "default:wood" then + file = io.open(minetest.get_worldpath().."/SAVE/Ship1.txt", "r") + local level = file:read("*l") + file:close() + if tonumber(level) > 5 then + Ship1(6,player) + end + end + if minetest.get_node({x=-4, y=8,z=-52}).name == "default:junglewood" or minetest.get_node({x=-8, y=8,z=-65}).name == "default:junglewood" or minetest.get_node({x=121, y=8,z=38}).name == "default:junglewood" or minetest.get_node({x=125, y=8,z=51}).name == "default:junglewood" then + file = io.open(minetest.get_worldpath().."/SAVE/Pier.txt", "r") + local level = file:read("*l") + file:close() + if tonumber(level) < 6 then + Pier(0,player) + end + end + if minetest.get_node({x=-13, y=8,z=-65}).name == "default:junglewood" or minetest.get_node({x=-13, y=8,z=-53}).name == "default:junglewood" or minetest.get_node({x=130, y=8,z=51}).name == "default:junglewood" or minetest.get_node({x=130, y=8,z=39}).name == "default:junglewood" then + file = io.open(minetest.get_worldpath().."/SAVE/Ship1.txt", "r") + local level = file:read("*l") + file:close() + if tonumber(level) < 6 then + Ship1(0,player) + end + end file = io.open(minetest.get_worldpath().."/SAVE/Ship1.txt", "r") local ship1 = file:read("*l") file:close() @@ -168,6 +272,15 @@ minetest.register_globalstep(function(dtime) file = io.open(minetest.get_worldpath().."/SAVE/Sandmine.txt", "r") local sandmine = file:read("*l") file:close() + file = io.open(minetest.get_worldpath().."/SAVE/Lake2.txt", "r") + local lake2 = file:read("*l") + file:close() + file = io.open(minetest.get_worldpath().."/SAVE/Cactusfarm.txt", "r") + local cactusfarm = file:read("*l") + file:close() + file = io.open(minetest.get_worldpath().."/SAVE/Mountain_Quarry.txt", "r") + local mountain_quarry = file:read("*l") + file:close() local quarrytime = 0 local quarrynum = 1 if tonumber(quarry) == 0 then @@ -178,6 +291,9 @@ minetest.register_globalstep(function(dtime) quarrynum = 1 elseif tonumber(quarry) == 2 then quarrytime = 2.5 + quarrynum = 2 + elseif tonumber(quarry) == 3 then + quarrytime = 2 quarrynum = 2 end local treetime = 0 @@ -190,6 +306,9 @@ minetest.register_globalstep(function(dtime) treenum = 1 elseif tonumber(tree) == 3 then treetime = 4 + treenum = 2 + elseif tonumber(tree) == 4 then + treetime = 3 treenum = 2 end local minetime = 0 @@ -211,6 +330,8 @@ minetest.register_globalstep(function(dtime) laketime = 9 elseif tonumber(lake) == 3 then laketime = 6.5 + elseif tonumber(lake) == 4 then + laketime = 5 end local sandminetime = 0 local sandminenum = 1 @@ -223,6 +344,24 @@ minetest.register_globalstep(function(dtime) elseif tonumber(quarry) == 2 then sandminetime = 2.5 sandminenum = 2 + end + local lake2time = 0 + if tonumber(lake2) == 1 then + lake2time = 18 + elseif tonumber(lake2) == 2 then + lake2time = 13.5 + end + local cactusfarmtime = 0 + if tonumber(cactusfarm) == 1 then + cactusfarmtime = 15 + elseif tonumber(cactusfarm) == 2 then + cactusfarmtime = 11.5 + end + local mountain_quarrytime = 0 + local mountain_quarrynum = 1 + if tonumber(mountain_quarry) == 0 then + mountain_quarrytime = 8 + mountain_quarrynum = 1 end if timer >= quarrytime then if tonumber(quarry) > -1 then @@ -297,6 +436,33 @@ minetest.register_globalstep(function(dtime) end timer6 = 0 end + if timer7 >= lake2time then + if tonumber(lake2) > 0 then + local inv = minetest.get_inventory({type="node", pos={x=-34, y=9, z=-67}}) + if inv then + inv:add_item("main", "castrum:bucket_river_water") + end + end + timer7 = 0 + end + if timer8 >= cactusfarmtime then + if tonumber(cactusfarm) > 0 then + local inv = minetest.get_inventory({type="node", pos={x=132, y=9, z=1}}) + if inv then + inv:add_item("main", "default:cactus") + end + end + timer8 = 0 + end + if timer9 >= mountain_quarrytime then + if tonumber(mountain_quarry) > -1 and tonumber(ship1) > 5 then + local inv = minetest.get_inventory({type="node", pos={x=345, y=40, z=-16}}) + if inv then + inv:add_item("main", "default:mossycobble") + end + end + timer9 = 0 + end end end) minetest.register_on_joinplayer(function(player) @@ -342,63 +508,161 @@ end) minetest.register_on_dignode(function(pos, node, digger) local fightdig = digger:get_attribute("fightdig") local fight = digger:get_attribute("fight") - if node.name == "castrum:knight_lv1" and fightdig ~= "true" and fight == "true" then + if (node.name == "castrum:knight_lv1" or node.name == "castrum:knight_lv2") and fightdig ~= "true" and fight == "true" then local inv = digger:get_inventory() inv:add_item("main", ""..node.name) digger:set_attribute("fightpos", minetest.pos_to_string(pos)) - if minetest.get_node({x=pos.x-1, y=9, z=pos.z}).name == "castrum:knight_lv1_dark" or minetest.get_node({x=pos.x-1, y=9, z=pos.z}).name == "castrum:knight_dark" then + if minetest.get_node({x=pos.x-1, y=9, z=pos.z}).name == "castrum:knight_lv1_dark" or minetest.get_node({x=pos.x-1, y=9, z=pos.z}).name == "castrum:knight_lv2_dark" or minetest.get_node({x=pos.x-1, y=9, z=pos.z}).name == "castrum:knight_dark" then minetest.set_node({x=pos.x-1, y=8, z=pos.z}, {name="castrum:fight2"}) - elseif minetest.get_node({x=pos.x-1, y=9, z=pos.z}).name ~= "castrum:knight_lv1" and minetest.get_node({x=pos.x-1, y=8, z=pos.z}).name ~= "default:gravel" then + elseif (minetest.get_node({x=pos.x-1, y=9, z=pos.z}).name ~= "castrum:knight_lv1" or minetest.get_node({x=pos.x-1, y=9, z=pos.z}).name ~= "castrum:knight_lv2") and minetest.get_node({x=pos.x-1, y=8, z=pos.z}).name ~= "default:gravel" then minetest.set_node({x=pos.x-1, y=8, z=pos.z}, {name="castrum:fight1"}) end - if minetest.get_node({x=pos.x-1, y=9, z=pos.z-1}).name == "castrum:knight_lv1_dark" or minetest.get_node({x=pos.x-1, y=9, z=pos.z-1}).name == "castrum:knight_dark" then + if minetest.get_node({x=pos.x-1, y=9, z=pos.z-1}).name == "castrum:knight_lv1_dark" or minetest.get_node({x=pos.x-1, y=9, z=pos.z-1}).name == "castrum:knight_lv2_dark" or minetest.get_node({x=pos.x-1, y=9, z=pos.z-1}).name == "castrum:knight_dark" then minetest.set_node({x=pos.x-1, y=8, z=pos.z-1}, {name="castrum:fight2"}) - elseif minetest.get_node({x=pos.x-1, y=9, z=pos.z-1}).name ~= "castrum:knight_lv1" and minetest.get_node({x=pos.x-1, y=8, z=pos.z-1}).name ~= "default:gravel" then + elseif (minetest.get_node({x=pos.x-1, y=9, z=pos.z-1}).name ~= "castrum:knight_lv1" or minetest.get_node({x=pos.x-1, y=9, z=pos.z-1}).name ~= "castrum:knight_lv2") and minetest.get_node({x=pos.x-1, y=8, z=pos.z-1}).name ~= "default:gravel" then minetest.set_node({x=pos.x-1, y=8, z=pos.z-1}, {name="castrum:fight1"}) end - if minetest.get_node({x=pos.x-1, y=9, z=pos.z+1}).name == "castrum:knight_lv1_dark" or minetest.get_node({x=pos.x-1, y=9, z=pos.z+1}).name == "castrum:knight_dark" then + if minetest.get_node({x=pos.x-1, y=9, z=pos.z+1}).name == "castrum:knight_lv1_dark" or minetest.get_node({x=pos.x-1, y=9, z=pos.z+1}).name == "castrum:knight_lv2_dark" or minetest.get_node({x=pos.x-1, y=9, z=pos.z+1}).name == "castrum:knight_dark" then minetest.set_node({x=pos.x-1, y=8, z=pos.z+1}, {name="castrum:fight2"}) - elseif minetest.get_node({x=pos.x-1, y=9, z=pos.z+1}).name ~= "castrum:knight_lv1" and minetest.get_node({x=pos.x-1, y=8, z=pos.z+1}).name ~= "default:gravel" then + elseif (minetest.get_node({x=pos.x-1, y=9, z=pos.z+1}).name ~= "castrum:knight_lv1" or minetest.get_node({x=pos.x-1, y=9, z=pos.z+1}).name ~= "castrum:knight_lv2") and minetest.get_node({x=pos.x-1, y=8, z=pos.z+1}).name ~= "default:gravel" then minetest.set_node({x=pos.x-1, y=8, z=pos.z+1}, {name="castrum:fight1"}) end - if minetest.get_node({x=pos.x, y=9, z=pos.z}).name == "castrum:knight_lv1_dark" or minetest.get_node({x=pos.x, y=9, z=pos.z}).name == "castrum:knight_dark" then + if minetest.get_node({x=pos.x, y=9, z=pos.z}).name == "castrum:knight_lv1_dark" or minetest.get_node({x=pos.x, y=9, z=pos.z}).name == "castrum:knight_lv2_dark" or minetest.get_node({x=pos.x, y=9, z=pos.z}).name == "castrum:knight_dark" then minetest.set_node({x=pos.x, y=8, z=pos.z}, {name="castrum:fight2"}) - elseif minetest.get_node({x=pos.x, y=9, z=pos.z}).name ~= "castrum:knight_lv1" and minetest.get_node({x=pos.x, y=8, z=pos.z}).name ~= "default:gravel" then + elseif (minetest.get_node({x=pos.x, y=9, z=pos.z}).name ~= "castrum:knight_lv1" or minetest.get_node({x=pos.x, y=9, z=pos.z}).name ~= "castrum:knight_lv2") and minetest.get_node({x=pos.x, y=8, z=pos.z}).name ~= "default:gravel" then minetest.set_node({x=pos.x, y=8, z=pos.z}, {name="castrum:fight1"}) end - if minetest.get_node({x=pos.x, y=9, z=pos.z-1}).name == "castrum:knight_lv1_dark" or minetest.get_node({x=pos.x, y=9, z=pos.z-1}).name == "castrum:knight_dark" then + if minetest.get_node({x=pos.x, y=9, z=pos.z-1}).name == "castrum:knight_lv1_dark" or minetest.get_node({x=pos.x, y=9, z=pos.z-1}).name == "castrum:knight_lv2_dark" or minetest.get_node({x=pos.x, y=9, z=pos.z-1}).name == "castrum:knight_dark" then minetest.set_node({x=pos.x, y=8, z=pos.z-1}, {name="castrum:fight2"}) - elseif minetest.get_node({x=pos.x, y=9, z=pos.z-1}).name ~= "castrum:knight_lv1" and minetest.get_node({x=pos.x, y=8, z=pos.z-1}).name ~= "default:gravel" then + elseif (minetest.get_node({x=pos.x, y=9, z=pos.z-1}).name ~= "castrum:knight_lv1" or minetest.get_node({x=pos.x, y=9, z=pos.z-1}).name ~= "castrum:knight_lv2") and minetest.get_node({x=pos.x, y=8, z=pos.z-1}).name ~= "default:gravel" then minetest.set_node({x=pos.x, y=8, z=pos.z-1}, {name="castrum:fight1"}) end - if minetest.get_node({x=pos.x, y=9, z=pos.z+1}).name == "castrum:knight_lv1_dark" or minetest.get_node({x=pos.x, y=9, z=pos.z+1}).name == "castrum:knight_dark" then + if minetest.get_node({x=pos.x, y=9, z=pos.z+1}).name == "castrum:knight_lv1_dark" or minetest.get_node({x=pos.x, y=9, z=pos.z+1}).name == "castrum:knight_lv2_dark" or minetest.get_node({x=pos.x, y=9, z=pos.z+1}).name == "castrum:knight_dark" then minetest.set_node({x=pos.x, y=8, z=pos.z+1}, {name="castrum:fight2"}) - elseif minetest.get_node({x=pos.x, y=9, z=pos.z+1}).name ~= "castrum:knight_lv1" and minetest.get_node({x=pos.x, y=8, z=pos.z+1}).name ~= "default:gravel" then + elseif (minetest.get_node({x=pos.x, y=9, z=pos.z+1}).name ~= "castrum:knight_lv1" or minetest.get_node({x=pos.x, y=9, z=pos.z+1}).name ~= "castrum:knight_lv2") and minetest.get_node({x=pos.x, y=8, z=pos.z+1}).name ~= "default:gravel" then minetest.set_node({x=pos.x, y=8, z=pos.z+1}, {name="castrum:fight1"}) end - if minetest.get_node({x=pos.x+1, y=9, z=pos.z}).name == "castrum:knight_lv1_dark" or minetest.get_node({x=pos.x+1, y=9, z=pos.z}).name == "castrum:knight_dark" then + if minetest.get_node({x=pos.x+1, y=9, z=pos.z}).name == "castrum:knight_lv1_dark" or minetest.get_node({x=pos.x+1, y=9, z=pos.z}).name == "castrum:knight_lv2_dark" or minetest.get_node({x=pos.x+1, y=9, z=pos.z}).name == "castrum:knight_dark" then minetest.set_node({x=pos.x+1, y=8, z=pos.z}, {name="castrum:fight2"}) - elseif minetest.get_node({x=pos.x+1, y=9, z=pos.z}).name ~= "castrum:knight_lv1" and minetest.get_node({x=pos.x+1, y=8, z=pos.z}).name ~= "default:gravel" then + elseif (minetest.get_node({x=pos.x+1, y=9, z=pos.z}).name ~= "castrum:knight_lv1" or minetest.get_node({x=pos.x+1, y=9, z=pos.z}).name ~= "castrum:knight_lv2") and minetest.get_node({x=pos.x+1, y=8, z=pos.z}).name ~= "default:gravel" then minetest.set_node({x=pos.x+1, y=8, z=pos.z}, {name="castrum:fight1"}) end - if minetest.get_node({x=pos.x+1, y=9, z=pos.z-1}).name == "castrum:knight_lv1_dark" or minetest.get_node({x=pos.x+1, y=9, z=pos.z-1}).name == "castrum:knight_dark" then + if minetest.get_node({x=pos.x+1, y=9, z=pos.z-1}).name == "castrum:knight_lv1_dark" or minetest.get_node({x=pos.x+1, y=9, z=pos.z-1}).name == "castrum:knight_lv2_dark" or minetest.get_node({x=pos.x+1, y=9, z=pos.z-1}).name == "castrum:knight_dark" then minetest.set_node({x=pos.x+1, y=8, z=pos.z-1}, {name="castrum:fight2"}) - elseif minetest.get_node({x=pos.x+1, y=9, z=pos.z-1}).name ~= "castrum:knight_lv1" and minetest.get_node({x=pos.x+1, y=8, z=pos.z-1}).name ~= "default:gravel" then + elseif (minetest.get_node({x=pos.x+1, y=9, z=pos.z-1}).name ~= "castrum:knight_lv1" or minetest.get_node({x=pos.x+1, y=9, z=pos.z-1}).name ~= "castrum:knight_lv2") and minetest.get_node({x=pos.x+1, y=8, z=pos.z-1}).name ~= "default:gravel" then minetest.set_node({x=pos.x+1, y=8, z=pos.z-1}, {name="castrum:fight1"}) end - if minetest.get_node({x=pos.x+1, y=9, z=pos.z+1}).name == "castrum:knight_lv1_dark" or minetest.get_node({x=pos.x+1, y=9, z=pos.z+1}).name == "castrum:knight_dark" then + if minetest.get_node({x=pos.x+1, y=9, z=pos.z+1}).name == "castrum:knight_lv1_dark" or minetest.get_node({x=pos.x+1, y=9, z=pos.z+1}).name == "castrum:knight_lv2_dark" or minetest.get_node({x=pos.x+1, y=9, z=pos.z+1}).name == "castrum:knight_dark" then minetest.set_node({x=pos.x+1, y=8, z=pos.z+1}, {name="castrum:fight2"}) - elseif minetest.get_node({x=pos.x+1, y=9, z=pos.z+1}).name ~= "castrum:knight_lv1" and minetest.get_node({x=pos.x+1, y=8, z=pos.z+1}).name ~= "default:gravel" then + elseif (minetest.get_node({x=pos.x+1, y=9, z=pos.z+1}).name ~= "castrum:knight_lv1" or minetest.get_node({x=pos.x+1, y=9, z=pos.z+1}).name ~= "castrum:knight_lv2") and minetest.get_node({x=pos.x+1, y=8, z=pos.z+1}).name ~= "default:gravel" then minetest.set_node({x=pos.x+1, y=8, z=pos.z+1}, {name="castrum:fight1"}) end if node.name == "castrum:knight_lv1" then digger:set_attribute("fightnode", "1") end + if node.name == "castrum:knight_lv2" then + digger:set_attribute("fightnode", "2") + end + digger:set_attribute("fightdig", "true") + elseif node.name == "castrum:horse1" and fightdig ~= "true" and fight == "true" and pos.x < -134 then + local inv = digger:get_inventory() + local knight = 0 + if minetest.get_node({x=pos.x, y=10, z=pos.z}).name == "castrum:knight_lv1_sit" then + minetest.set_node({x=pos.x, y=10, z=pos.z}, {name="air"}) + knight = 1 + elseif minetest.get_node({x=pos.x, y=10, z=pos.z}).name == "castrum:knight_lv2_sit" then + minetest.set_node({x=pos.x, y=10, z=pos.z}, {name="air"}) + knight = 2 + end + inv:add_item("main", "castrum:horse1_item_"..knight) + digger:set_attribute("fightpos", minetest.pos_to_string(pos)) + + local list = { + {x=pos.x-2, y=9, z=pos.z}, + {x=pos.x-2, y=9, z=pos.z-1}, + {x=pos.x-2, y=9, z=pos.z-2}, + {x=pos.x-2, y=9, z=pos.z+1}, + {x=pos.x-2, y=9, z=pos.z+2}, + {x=pos.x+2, y=9, z=pos.z}, + {x=pos.x+2, y=9, z=pos.z-1}, + {x=pos.x+2, y=9, z=pos.z-2}, + {x=pos.x+2, y=9, z=pos.z+1}, + {x=pos.x+2, y=9, z=pos.z+2}, + {x=pos.x-1, y=9, z=pos.z-2}, + {x=pos.x-1, y=9, z=pos.z+2}, + {x=pos.x, y=9, z=pos.z-2}, + {x=pos.x, y=9, z=pos.z+2}, + {x=pos.x+1, y=9, z=pos.z-2}, + {x=pos.x+1, y=9, z=pos.z+2}, + {x=pos.x-1, y=9, z=pos.z}, + {x=pos.x-1, y=9, z=pos.z-1}, + {x=pos.x-1, y=9, z=pos.z+1}, + {x=pos.x, y=9, z=pos.z}, + {x=pos.x, y=9, z=pos.z-1}, + {x=pos.x, y=9, z=pos.z+1}, + {x=pos.x+1, y=9, z=pos.z}, + {x=pos.x+1, y=9, z=pos.z-1}, + {x=pos.x+1, y=9, z=pos.z+1}, + } + local list2 = { + {x=pos.x-2, y=8, z=pos.z}, + {x=pos.x-2, y=8, z=pos.z-1}, + {x=pos.x-2, y=8, z=pos.z-2}, + {x=pos.x-2, y=8, z=pos.z+1}, + {x=pos.x-2, y=8, z=pos.z+2}, + {x=pos.x+2, y=8, z=pos.z}, + {x=pos.x+2, y=8, z=pos.z-1}, + {x=pos.x+2, y=8, z=pos.z-2}, + {x=pos.x+2, y=8, z=pos.z+1}, + {x=pos.x+2, y=8, z=pos.z+2}, + {x=pos.x-1, y=8, z=pos.z-2}, + {x=pos.x-1, y=8, z=pos.z+2}, + {x=pos.x, y=8, z=pos.z-2}, + {x=pos.x, y=8, z=pos.z+2}, + {x=pos.x+1, y=8, z=pos.z-2}, + {x=pos.x+1, y=8, z=pos.z+2}, + {x=pos.x-1, y=8, z=pos.z}, + {x=pos.x-1, y=8, z=pos.z-1}, + {x=pos.x-1, y=8, z=pos.z+1}, + {x=pos.x, y=8, z=pos.z}, + {x=pos.x, y=8, z=pos.z-1}, + {x=pos.x, y=8, z=pos.z+1}, + {x=pos.x+1, y=8, z=pos.z}, + {x=pos.x+1, y=8, z=pos.z-1}, + {x=pos.x+1, y=8, z=pos.z+1}, + + + } + for i=1,25 do + if (minetest.get_node(list[i]).name == "castrum:knight_lv1_dark" or minetest.get_node(list[i]).name == "castrum:knight_lv2_dark" or minetest.get_node(list[i]).name == "castrum:knight_dark") and i > 16 then + minetest.set_node(list2[i], {name="castrum:fight2"}) + elseif minetest.get_node(list[i]).name == "air" and minetest.get_node(list2[i]).name ~= "default:gravel" then + minetest.set_node(list2[i], {name="castrum:fight1"}) + end + end + if node.name == "castrum:knight_lv1" then + digger:set_attribute("fightnode", "1") + end + if node.name == "castrum:knight_lv2" then + digger:set_attribute("fightnode", "2") + end + if node.name == "castrum:horse1" then + digger:set_attribute("fightnode", ""..(knight+5)) + end digger:set_attribute("fightdig", "true") else minetest.set_node(pos, {name=node.name}) - if node.name == "castrum:knight_lv1" then + if node.name == "castrum:knight_lv1" or node.name == "castrum:knight_lv2" then screwdriver_handler(digger, {type="node", under=pos, above=pos}, 1) + end + if node.name == "castrum:horse1" then + screwdriver_handler(digger, {type="node", under=pos, above=pos}, 1) + screwdriver_handler(digger, {type="node", under=pos, above=pos}, 1) + end + if node.name == "doors:gate_wood_closed" or node.name == "doors:gate_wood_open" then + screwdriver_handler(digger, {type="node", under=pos, above=pos}, 1) + screwdriver_handler(digger, {type="node", under=pos, above=pos}, 1) + screwdriver_handler(digger, {type="node", under=pos, above=pos}, 1) end end end) @@ -421,6 +685,21 @@ minetest.register_on_placenode(function(pos, newnode, placer, oldnode, itemstack end fight_step2(placer) end + elseif minetest.get_node({x=pos.x, y=pos.y-1, z=pos.z}).name == "castrum:fight1" and newnode.name == "castrum:knight_lv2" then + minetest.set_node(pos, {name="castrum:knight_lv2"}) + screwdriver_handler(placer, {type="node", under=pos, above=pos}, 1) + local inv = placer:get_inventory() + inv:remove_item("main", "castrum:knight_lv2") + local fight = placer:get_attribute("fight") + placer:set_attribute("fightdig", "false") + if fight == "true" then + for j=144,174 do + for i=51,81 do + minetest.set_node({x=j*(-1), y=8, z=i*(-1)}, {name="default:dirt_with_grass"}) + end + end + fight_step2(placer) + end else minetest.set_node(pos, {name=oldnode.name}) return itemstack @@ -572,6 +851,16 @@ function Home2(v,player) minetest.set_node({x=-54, y=9, z=-19}, {name="castrum:character1"}) screwdriver_handler(player, {type="node", under={x=-54, y=9, z=-19}, above={x=-54, y=9, z=-19}}, 1) screwdriver_handler(player, {type="node", under={x=-54, y=9, z=-19}, above={x=-54, y=9, z=-19}}, 1) + elseif v+0 == 7 then + for i=48,54 do + for j=19,25 do + for k=9,14 do + if minetest.get_node({x=i*(-1), y=k, z=j*(-1)}).name == "default:wood" then + minetest.set_node({x=i*(-1), y=k, z=j*(-1)}, {name="default:junglewood"}) + end + end + end + end elseif v+0 == 0 then for i=48,54 do for j=19,25 do @@ -683,7 +972,7 @@ end function Moat_south(v,player) if v+0 == 1 then for i=0,83 do - if minetest.get_node({x=i*(-1), y=8, z=-36}).name ~= "default:wood" and minetest.get_node({x=i*(-1), y=8, z=-36}).name ~= "castrum:bridge" then + if minetest.get_node({x=i*(-1), y=8, z=-36}).name ~= "default:wood" and minetest.get_node({x=i*(-1), y=8, z=-36}).name ~= "castrum:bridge" and minetest.get_node({x=i*(-1), y=8, z=-36}).name ~= "default:junglewood" then minetest.set_node({x=i*(-1), y=8, z=-36}, {name="air"}) end end @@ -693,7 +982,7 @@ function Moat_south(v,player) elseif v+0 == 2 then for j=35,37 do for i=0,83 do - if minetest.get_node({x=i*(-1), y=8, z=j*(-1)}).name ~= "default:wood" and minetest.get_node({x=i*(-1), y=8, z=j*(-1)}).name ~= "castrum:bridge" then + if minetest.get_node({x=i*(-1), y=8, z=j*(-1)}).name ~= "default:wood" and minetest.get_node({x=i*(-1), y=8, z=j*(-1)}).name ~= "castrum:bridge" and minetest.get_node({x=i*(-1), y=8, z=j*(-1)}).name ~= "default:junglewood" then minetest.set_node({x=i*(-1), y=8, z=j*(-1)}, {name="air"}) end end @@ -702,9 +991,7 @@ function Moat_south(v,player) end end for i=0,83 do - if minetest.get_node({x=i*(-1), y=7, z=-36}).name ~= "default:wood" and minetest.get_node({x=i*(-1), y=7, z=-36}).name ~= "castrum:bridge" then - minetest.set_node({x=i*(-1), y=7, z=-36}, {name="air"}) - end + minetest.set_node({x=i*(-1), y=7, z=-36}, {name="air"}) end for i=1,3 do minetest.set_node({x=i, y=7, z=-36}, {name="air"}) @@ -712,7 +999,7 @@ function Moat_south(v,player) elseif v+0 == 3 then for j=34,38 do for i=0,83 do - if minetest.get_node({x=i*(-1), y=8, z=j*(-1)}).name ~= "default:wood" and minetest.get_node({x=i*(-1), y=8, z=j*(-1)}).name ~= "castrum:bridge" then + if minetest.get_node({x=i*(-1), y=8, z=j*(-1)}).name ~= "default:wood" and minetest.get_node({x=i*(-1), y=8, z=j*(-1)}).name ~= "castrum:bridge" and minetest.get_node({x=i*(-1), y=8, z=j*(-1)}).name ~= "default:junglewood" then minetest.set_node({x=i*(-1), y=8, z=j*(-1)}, {name="air"}) end end @@ -722,18 +1009,14 @@ function Moat_south(v,player) end for j=35,37 do for i=0,83 do - if minetest.get_node({x=i*(-1), y=7, z=j*(-1)}).name ~= "default:wood" and minetest.get_node({x=i*(-1), y=7, z=j*(-1)}).name ~= "castrum:bridge" then - minetest.set_node({x=i*(-1), y=7, z=j*(-1)}, {name="air"}) - end + minetest.set_node({x=i*(-1), y=7, z=j*(-1)}, {name="air"}) end for i=1,3 do minetest.set_node({x=i, y=7, z=j*(-1)}, {name="air"}) end end for i=0,83 do - if minetest.get_node({x=i*(-1), y=6, z=-36}).name ~= "default:wood" and minetest.get_node({x=i*(-1), y=6, z=-36}).name ~= "castrum:bridge" then - minetest.set_node({x=i*(-1), y=6, z=-36}, {name="air"}) - end + minetest.set_node({x=i*(-1), y=6, z=-36}, {name="air"}) end for i=1,3 do minetest.set_node({x=i, y=6, z=-36}, {name="air"}) @@ -741,7 +1024,7 @@ function Moat_south(v,player) elseif v+0 == 4 then for j=33,39 do for i=0,83 do - if minetest.get_node({x=i*(-1), y=8, z=j*(-1)}).name ~= "default:wood" and minetest.get_node({x=i*(-1), y=8, z=j*(-1)}).name ~= "castrum:bridge" then + if minetest.get_node({x=i*(-1), y=8, z=j*(-1)}).name ~= "default:wood" and minetest.get_node({x=i*(-1), y=8, z=j*(-1)}).name ~= "castrum:bridge" and minetest.get_node({x=i*(-1), y=8, z=j*(-1)}).name ~= "default:junglewood" then minetest.set_node({x=i*(-1), y=8, z=j*(-1)}, {name="air"}) end end @@ -751,9 +1034,7 @@ function Moat_south(v,player) end for j=34,38 do for i=0,83 do - if minetest.get_node({x=i*(-1), y=7, z=j*(-1)}).name ~= "default:wood" and minetest.get_node({x=i*(-1), y=7, z=j*(-1)}).name ~= "castrum:bridge" then - minetest.set_node({x=i*(-1), y=7, z=j*(-1)}, {name="air"}) - end + minetest.set_node({x=i*(-1), y=7, z=j*(-1)}, {name="air"}) end for i=1,3 do minetest.set_node({x=i, y=7, z=j*(-1)}, {name="air"}) @@ -761,18 +1042,14 @@ function Moat_south(v,player) end for j=35,37 do for i=0,83 do - if minetest.get_node({x=i*(-1), y=6, z=j*(-1)}).name ~= "default:wood" and minetest.get_node({x=i*(-1), y=6, z=j*(-1)}).name ~= "castrum:bridge" then - minetest.set_node({x=i*(-1), y=6, z=j*(-1)}, {name="air"}) - end + minetest.set_node({x=i*(-1), y=6, z=j*(-1)}, {name="air"}) end for i=1,3 do minetest.set_node({x=i, y=6, z=j*(-1)}, {name="air"}) end end for i=0,83 do - if minetest.get_node({x=i*(-1), y=5, z=-36}).name ~= "default:wood" and minetest.get_node({x=i*(-1), y=5, z=-36}).name ~= "castrum:bridge" then - minetest.set_node({x=i*(-1), y=5, z=-36}, {name="air"}) - end + minetest.set_node({x=i*(-1), y=5, z=-36}, {name="air"}) end for i=1,3 do minetest.set_node({x=i, y=5, z=-36}, {name="air"}) @@ -780,7 +1057,7 @@ function Moat_south(v,player) elseif v+0 == 5 then for j=32,40 do for i=0,83 do - if minetest.get_node({x=i*(-1), y=8, z=j*(-1)}).name ~= "default:wood" and minetest.get_node({x=i*(-1), y=8, z=j*(-1)}).name ~= "castrum:bridge" then + if minetest.get_node({x=i*(-1), y=8, z=j*(-1)}).name ~= "default:wood" and minetest.get_node({x=i*(-1), y=8, z=j*(-1)}).name ~= "castrum:bridge" and minetest.get_node({x=i*(-1), y=8, z=j*(-1)}).name ~= "default:junglewood" then minetest.set_node({x=i*(-1), y=8, z=j*(-1)}, {name="air"}) end end @@ -790,9 +1067,7 @@ function Moat_south(v,player) end for j=33,39 do for i=0,83 do - if minetest.get_node({x=i*(-1), y=7, z=j*(-1)}).name ~= "default:wood" and minetest.get_node({x=i*(-1), y=7, z=j*(-1)}).name ~= "castrum:bridge" then - minetest.set_node({x=i*(-1), y=7, z=j*(-1)}, {name="air"}) - end + minetest.set_node({x=i*(-1), y=7, z=j*(-1)}, {name="air"}) end for i=1,3 do minetest.set_node({x=i, y=7, z=j*(-1)}, {name="air"}) @@ -800,9 +1075,7 @@ function Moat_south(v,player) end for j=34,38 do for i=0,83 do - if minetest.get_node({x=i*(-1), y=6, z=j*(-1)}).name ~= "default:wood" and minetest.get_node({x=i*(-1), y=6, z=j*(-1)}).name ~= "castrum:bridge" then - minetest.set_node({x=i*(-1), y=6, z=j*(-1)}, {name="air"}) - end + minetest.set_node({x=i*(-1), y=6, z=j*(-1)}, {name="air"}) end for i=1,3 do minetest.set_node({x=i, y=6, z=j*(-1)}, {name="air"}) @@ -810,18 +1083,14 @@ function Moat_south(v,player) end for j=35,37 do for i=0,83 do - if minetest.get_node({x=i*(-1), y=5, z=j*(-1)}).name ~= "default:wood" and minetest.get_node({x=i*(-1), y=5, z=j*(-1)}).name ~= "castrum:bridge" then - minetest.set_node({x=i*(-1), y=5, z=j*(-1)}, {name="air"}) - end + minetest.set_node({x=i*(-1), y=5, z=j*(-1)}, {name="air"}) end for i=1,3 do minetest.set_node({x=i, y=5, z=j*(-1)}, {name="air"}) end end for i=0,83 do - if minetest.get_node({x=i*(-1), y=4, z=-36}).name ~= "default:wood" and minetest.get_node({x=i*(-1), y=4, z=-36}).name ~= "castrum:bridge" then - minetest.set_node({x=i*(-1), y=4, z=-36}, {name="air"}) - end + minetest.set_node({x=i*(-1), y=4, z=-36}, {name="air"}) end for i=1,3 do minetest.set_node({x=i, y=4, z=-36}, {name="air"}) @@ -829,9 +1098,7 @@ function Moat_south(v,player) elseif v+0 == 6 then for j=32,40 do for i=0,83 do - if minetest.get_node({x=i*(-1), y=7, z=j*(-1)}).name ~= "default:wood" and minetest.get_node({x=i*(-1), y=7, z=j*(-1)}).name ~= "castrum:bridge" then - minetest.set_node({x=i*(-1), y=7, z=j*(-1)}, {name="air"}) - end + minetest.set_node({x=i*(-1), y=7, z=j*(-1)}, {name="air"}) end for i=1,3 do minetest.set_node({x=i, y=7, z=j*(-1)}, {name="air"}) @@ -839,9 +1106,7 @@ function Moat_south(v,player) end for j=33,39 do for i=0,83 do - if minetest.get_node({x=i*(-1), y=6, z=j*(-1)}).name ~= "default:wood" and minetest.get_node({x=i*(-1), y=6, z=j*(-1)}).name ~= "castrum:bridge" then - minetest.set_node({x=i*(-1), y=6, z=j*(-1)}, {name="air"}) - end + minetest.set_node({x=i*(-1), y=6, z=j*(-1)}, {name="air"}) end for i=1,3 do minetest.set_node({x=i, y=6, z=j*(-1)}, {name="air"}) @@ -849,9 +1114,7 @@ function Moat_south(v,player) end for j=34,38 do for i=0,83 do - if minetest.get_node({x=i*(-1), y=5, z=j*(-1)}).name ~= "default:wood" and minetest.get_node({x=i*(-1), y=5, z=j*(-1)}).name ~= "castrum:bridge" then - minetest.set_node({x=i*(-1), y=5, z=j*(-1)}, {name="air"}) - end + minetest.set_node({x=i*(-1), y=5, z=j*(-1)}, {name="air"}) end for i=1,3 do minetest.set_node({x=i, y=5, z=j*(-1)}, {name="air"}) @@ -859,9 +1122,7 @@ function Moat_south(v,player) end for j=35,37 do for i=0,83 do - if minetest.get_node({x=i*(-1), y=4, z=j*(-1)}).name ~= "default:wood" and minetest.get_node({x=i*(-1), y=4, z=j*(-1)}).name ~= "castrum:bridge" then - minetest.set_node({x=i*(-1), y=4, z=j*(-1)}, {name="air"}) - end + minetest.set_node({x=i*(-1), y=4, z=j*(-1)}, {name="air"}) end for i=1,3 do minetest.set_node({x=i, y=4, z=j*(-1)}, {name="air"}) @@ -870,9 +1131,7 @@ function Moat_south(v,player) elseif v+0 == 7 then for j=32,40 do for i=0,83 do - if minetest.get_node({x=i*(-1), y=6, z=j*(-1)}).name ~= "default:wood" and minetest.get_node({x=i*(-1), y=6, z=j*(-1)}).name ~= "castrum:bridge" then - minetest.set_node({x=i*(-1), y=6, z=j*(-1)}, {name="air"}) - end + minetest.set_node({x=i*(-1), y=6, z=j*(-1)}, {name="air"}) end for i=1,3 do minetest.set_node({x=i, y=6, z=j*(-1)}, {name="air"}) @@ -880,9 +1139,7 @@ function Moat_south(v,player) end for j=33,39 do for i=0,83 do - if minetest.get_node({x=i*(-1), y=5, z=j*(-1)}).name ~= "default:wood" and minetest.get_node({x=i*(-1), y=5, z=j*(-1)}).name ~= "castrum:bridge" then - minetest.set_node({x=i*(-1), y=5, z=j*(-1)}, {name="air"}) - end + minetest.set_node({x=i*(-1), y=5, z=j*(-1)}, {name="air"}) end for i=1,3 do minetest.set_node({x=i, y=5, z=j*(-1)}, {name="air"}) @@ -890,9 +1147,7 @@ function Moat_south(v,player) end for j=34,38 do for i=0,83 do - if minetest.get_node({x=i*(-1), y=4, z=j*(-1)}).name ~= "default:wood" and minetest.get_node({x=i*(-1), y=4, z=j*(-1)}).name ~= "castrum:bridge" then - minetest.set_node({x=i*(-1), y=4, z=j*(-1)}, {name="air"}) - end + minetest.set_node({x=i*(-1), y=4, z=j*(-1)}, {name="air"}) end for i=1,3 do minetest.set_node({x=i, y=4, z=j*(-1)}, {name="air"}) @@ -901,9 +1156,7 @@ function Moat_south(v,player) elseif v+0 == 8 then for j=32,40 do for i=0,83 do - if minetest.get_node({x=i*(-1), y=5, z=j*(-1)}).name ~= "default:wood" and minetest.get_node({x=i*(-1), y=5, z=j*(-1)}).name ~= "castrum:bridge" then - minetest.set_node({x=i*(-1), y=5, z=j*(-1)}, {name="air"}) - end + minetest.set_node({x=i*(-1), y=5, z=j*(-1)}, {name="air"}) end for i=1,3 do minetest.set_node({x=i, y=5, z=j*(-1)}, {name="air"}) @@ -911,9 +1164,7 @@ function Moat_south(v,player) end for j=33,39 do for i=0,83 do - if minetest.get_node({x=i*(-1), y=4, z=j*(-1)}).name ~= "default:wood" and minetest.get_node({x=i*(-1), y=4, z=j*(-1)}).name ~= "castrum:bridge" then - minetest.set_node({x=i*(-1), y=4, z=j*(-1)}, {name="air"}) - end + minetest.set_node({x=i*(-1), y=4, z=j*(-1)}, {name="air"}) end for i=1,3 do minetest.set_node({x=i, y=4, z=j*(-1)}, {name="air"}) @@ -922,9 +1173,7 @@ function Moat_south(v,player) elseif v+0 == 9 then for j=32,40 do for i=0,83 do - if minetest.get_node({x=i*(-1), y=4, z=j*(-1)}).name ~= "default:wood" and minetest.get_node({x=i*(-1), y=4, z=j*(-1)}).name ~= "castrum:bridge" then - minetest.set_node({x=i*(-1), y=4, z=j*(-1)}, {name="air"}) - end + minetest.set_node({x=i*(-1), y=4, z=j*(-1)}, {name="air"}) end for i=1,3 do minetest.set_node({x=i, y=4, z=j*(-1)}, {name="air"}) @@ -953,11 +1202,11 @@ function Moat_south(v,player) for j=32,40 do for i=0,83 do if minetest.get_node({x=i*(-1), y=8, z=j*(-1)}).name ~= "default:wood" and minetest.get_node({x=i*(-1), y=8, z=j*(-1)}).name ~= "castrum:bridge" then - minetest.set_node({x=i*(-1), y=8, z=j*(-1)}, {name="default:dirt_with_grass"}) + minetest.set_node({x=i*(-1), y=8, z=j*(-1)}, {name="castrum:dirt_with_grass"}) end end for i=1,3 do - minetest.set_node({x=i, y=8, z=j*(-1)}, {name="default:dirt_with_grass"}) + minetest.set_node({x=i, y=8, z=j*(-1)}, {name="castrum:dirt_with_grass"}) end end end @@ -1310,18 +1559,18 @@ function Moat_east(v,player) end for j=0,5 do for i=0,31 do - minetest.set_node({x=j*(-1), y=8, z=i*(-1)}, {name="default:dirt_with_grass"}) + minetest.set_node({x=j*(-1), y=8, z=i*(-1)}, {name="castrum:dirt_with_grass"}) end for i=0,37 do - minetest.set_node({x=j*(-1), y=8, z=i}, {name="default:dirt_with_grass"}) + minetest.set_node({x=j*(-1), y=8, z=i}, {name="castrum:dirt_with_grass"}) end end for j=0,3 do for i=0,31 do - minetest.set_node({x=j, y=8, z=i*(-1)}, {name="default:dirt_with_grass"}) + minetest.set_node({x=j, y=8, z=i*(-1)}, {name="castrum:dirt_with_grass"}) end for i=0,37 do - minetest.set_node({x=j, y=8, z=i}, {name="default:dirt_with_grass"}) + minetest.set_node({x=j, y=8, z=i}, {name="castrum:dirt_with_grass"}) end end end @@ -1548,10 +1797,10 @@ function Moat_north(v,player) end for j=38,46 do for i=0,83 do - minetest.set_node({x=i*(-1), y=8, z=j}, {name="default:dirt_with_grass"}) + minetest.set_node({x=i*(-1), y=8, z=j}, {name="castrum:dirt_with_grass"}) end for i=1,3 do - minetest.set_node({x=i, y=8, z=j}, {name="default:dirt_with_grass"}) + minetest.set_node({x=i, y=8, z=j}, {name="castrum:dirt_with_grass"}) end end end @@ -1791,6 +2040,76 @@ function Wall_south(v,player) end end end + elseif v+0 == 17 then + for i=45,66 do + if i%4 == 2 then + minetest.set_node({x=i*(-1), y=20, z=-31}, {name="default:desert_cobble"}) + minetest.set_node({x=i*(-1), y=16, z=-31}, {name="default:desert_cobble"}) + minetest.set_node({x=i*(-1), y=12, z=-31}, {name="default:desert_cobble"}) + end + end + for i=14,35 do + if i%4 == 2 then + minetest.set_node({x=i*(-1), y=20, z=-31}, {name="default:desert_cobble"}) + minetest.set_node({x=i*(-1), y=16, z=-31}, {name="default:desert_cobble"}) + minetest.set_node({x=i*(-1), y=12, z=-31}, {name="default:desert_cobble"}) + + end + end + for i=45,66 do + if i%2 == 1 then + minetest.set_node({x=i*(-1), y=19, z=-31}, {name="default:desert_cobble"}) + minetest.set_node({x=i*(-1), y=17, z=-31}, {name="default:desert_cobble"}) + minetest.set_node({x=i*(-1), y=15, z=-31}, {name="default:desert_cobble"}) + minetest.set_node({x=i*(-1), y=13, z=-31}, {name="default:desert_cobble"}) + minetest.set_node({x=i*(-1), y=11, z=-31}, {name="default:desert_cobble"}) + minetest.set_node({x=i*(-1), y=9, z=-31}, {name="default:desert_cobble"}) + end + end + for i=14,35 do + if i%2 == 1 then + minetest.set_node({x=i*(-1), y=19, z=-31}, {name="default:desert_cobble"}) + minetest.set_node({x=i*(-1), y=17, z=-31}, {name="default:desert_cobble"}) + minetest.set_node({x=i*(-1), y=15, z=-31}, {name="default:desert_cobble"}) + minetest.set_node({x=i*(-1), y=13, z=-31}, {name="default:desert_cobble"}) + minetest.set_node({x=i*(-1), y=11, z=-31}, {name="default:desert_cobble"}) + minetest.set_node({x=i*(-1), y=9, z=-31}, {name="default:desert_cobble"}) + end + end + for i=45,66 do + if i%4 == 0 then + minetest.set_node({x=i*(-1), y=18, z=-31}, {name="default:desert_cobble"}) + minetest.set_node({x=i*(-1), y=14, z=-31}, {name="default:desert_cobble"}) + minetest.set_node({x=i*(-1), y=10, z=-31}, {name="default:desert_cobble"}) + end + end + for i=14,35 do + if i%4 == 0 then + minetest.set_node({x=i*(-1), y=18, z=-31}, {name="default:desert_cobble"}) + minetest.set_node({x=i*(-1), y=14, z=-31}, {name="default:desert_cobble"}) + minetest.set_node({x=i*(-1), y=10, z=-31}, {name="default:desert_cobble"}) + end + end + minetest.set_node({x=-42, y=20, z=-31}, {name="default:desert_cobble"}) + minetest.set_node({x=-43, y=19, z=-31}, {name="default:desert_cobble"}) + minetest.set_node({x=-44, y=18, z=-31}, {name="default:desert_cobble"}) + minetest.set_node({x=-38, y=20, z=-31}, {name="default:desert_cobble"}) + minetest.set_node({x=-37, y=19, z=-31}, {name="default:desert_cobble"}) + minetest.set_node({x=-36, y=18, z=-31}, {name="default:desert_cobble"}) + for k=9,20 do + if k%2 == 1 then + minetest.set_node({x=-45, y=k, z=-29}, {name="default:desert_cobble"}) + minetest.set_node({x=-35, y=k, z=-29}, {name="default:desert_cobble"}) + end + end + minetest.set_node({x=-35, y=10, z=-30}, {name="default:desert_cobble"}) + minetest.set_node({x=-35, y=14, z=-30}, {name="default:desert_cobble"}) + minetest.set_node({x=-35, y=18, z=-30}, {name="default:desert_cobble"}) + minetest.set_node({x=-45, y=10, z=-30}, {name="default:desert_cobble"}) + minetest.set_node({x=-45, y=14, z=-30}, {name="default:desert_cobble"}) + minetest.set_node({x=-45, y=18, z=-30}, {name="default:desert_cobble"}) + minetest.set_node({x=-37, y=19, z=-29}, {name="default:desert_cobble"}) + minetest.set_node({x=-43, y=19, z=-29}, {name="default:desert_cobble"}) elseif v+0 == 0 then for i=14,66 do for j=28,31 do @@ -1914,6 +2233,35 @@ function Fountain(v,player) end end end + elseif v+0 == 7 then + minetest.set_node({x=-41, y=9, z=-2}, {name="default:desert_cobble"}) + minetest.set_node({x=-40, y=10, z=-2}, {name="default:desert_cobble"}) + minetest.set_node({x=-39, y=9, z=-2}, {name="default:desert_cobble"}) + minetest.set_node({x=-38, y=10, z=-1}, {name="default:desert_cobble"}) + minetest.set_node({x=-37, y=9, z=-1}, {name="default:desert_cobble"}) + minetest.set_node({x=-36, y=10, z=0}, {name="default:desert_cobble"}) + minetest.set_node({x=-36, y=9, z=1}, {name="default:desert_cobble"}) + minetest.set_node({x=-35, y=10, z=2}, {name="default:desert_cobble"}) + minetest.set_node({x=-35, y=9, z=3}, {name="default:desert_cobble"}) + minetest.set_node({x=-35, y=10, z=4}, {name="default:desert_cobble"}) + minetest.set_node({x=-36, y=9, z=5}, {name="default:desert_cobble"}) + minetest.set_node({x=-36, y=10, z=6}, {name="default:desert_cobble"}) + minetest.set_node({x=-37, y=9, z=7}, {name="default:desert_cobble"}) + minetest.set_node({x=-38, y=10, z=7}, {name="default:desert_cobble"}) + minetest.set_node({x=-39, y=9, z=8}, {name="default:desert_cobble"}) + minetest.set_node({x=-40, y=10, z=8}, {name="default:desert_cobble"}) + minetest.set_node({x=-41, y=9, z=8}, {name="default:desert_cobble"}) + minetest.set_node({x=-42, y=10, z=7}, {name="default:desert_cobble"}) + minetest.set_node({x=-43, y=9, z=7}, {name="default:desert_cobble"}) + minetest.set_node({x=-44, y=10, z=6}, {name="default:desert_cobble"}) + minetest.set_node({x=-44, y=9, z=5}, {name="default:desert_cobble"}) + minetest.set_node({x=-45, y=10, z=4}, {name="default:desert_cobble"}) + minetest.set_node({x=-45, y=9, z=3}, {name="default:desert_cobble"}) + minetest.set_node({x=-45, y=10, z=2}, {name="default:desert_cobble"}) + minetest.set_node({x=-44, y=9, z=1}, {name="default:desert_cobble"}) + minetest.set_node({x=-44, y=10, z=0}, {name="default:desert_cobble"}) + minetest.set_node({x=-43, y=9, z=-1}, {name="default:desert_cobble"}) + minetest.set_node({x=-42, y=10, z=-1}, {name="default:desert_cobble"}) elseif v+0 == 0 then for k=9,14 do for i=35,45 do @@ -2268,6 +2616,74 @@ function Tower1(v,player) end end end + elseif v+0 == 21 then + for i=6,13 do + if i%4 == 2 then + minetest.set_node({x=i*(-1), y=20, z=-31}, {name="default:desert_cobble"}) + minetest.set_node({x=i*(-1), y=16, z=-31}, {name="default:desert_cobble"}) + minetest.set_node({x=i*(-1), y=12, z=-31}, {name="default:desert_cobble"}) + end + end + for i=6,13 do + if i%2 == 1 then + minetest.set_node({x=i*(-1), y=19, z=-31}, {name="default:desert_cobble"}) + minetest.set_node({x=i*(-1), y=17, z=-31}, {name="default:desert_cobble"}) + minetest.set_node({x=i*(-1), y=15, z=-31}, {name="default:desert_cobble"}) + minetest.set_node({x=i*(-1), y=13, z=-31}, {name="default:desert_cobble"}) + minetest.set_node({x=i*(-1), y=11, z=-31}, {name="default:desert_cobble"}) + minetest.set_node({x=i*(-1), y=9, z=-31}, {name="default:desert_cobble"}) + end + end + for i=6,13 do + if i%4 == 0 then + minetest.set_node({x=i*(-1), y=18, z=-31}, {name="default:desert_cobble"}) + minetest.set_node({x=i*(-1), y=14, z=-31}, {name="default:desert_cobble"}) + minetest.set_node({x=i*(-1), y=10, z=-31}, {name="default:desert_cobble"}) + end + end + for i=24,31 do + if i%4 == 3 then + minetest.set_node({x=-6, y=20, z=i*(-1)}, {name="default:desert_cobble"}) + minetest.set_node({x=-6, y=16, z=i*(-1)}, {name="default:desert_cobble"}) + minetest.set_node({x=-6, y=12, z=i*(-1)}, {name="default:desert_cobble"}) + end + end + for i=24,31 do + if i%2 == 0 then + minetest.set_node({x=-6, y=19, z=i*(-1)}, {name="default:desert_cobble"}) + minetest.set_node({x=-6, y=17, z=i*(-1)}, {name="default:desert_cobble"}) + minetest.set_node({x=-6, y=15, z=i*(-1)}, {name="default:desert_cobble"}) + minetest.set_node({x=-6, y=13, z=i*(-1)}, {name="default:desert_cobble"}) + minetest.set_node({x=-6, y=11, z=i*(-1)}, {name="default:desert_cobble"}) + minetest.set_node({x=-6, y=9, z=i*(-1)}, {name="default:desert_cobble"}) + end + end + for i=24,31 do + if i%4 == 1 then + minetest.set_node({x=-6, y=18, z=i*(-1)}, {name="default:desert_cobble"}) + minetest.set_node({x=-6, y=14, z=i*(-1)}, {name="default:desert_cobble"}) + minetest.set_node({x=-6, y=10, z=i*(-1)}, {name="default:desert_cobble"}) + end + end + for k=9,20 do + if k%2 == 1 then + minetest.set_node({x=-7, y=k, z=-24}, {name="default:desert_cobble"}) + minetest.set_node({x=-9, y=k, z=-25}, {name="default:desert_cobble"}) + minetest.set_node({x=-11, y=k, z=-26}, {name="default:desert_cobble"}) + minetest.set_node({x=-12, y=k, z=-28}, {name="default:desert_cobble"}) + minetest.set_node({x=-13, y=k, z=-30}, {name="default:desert_cobble"}) + end + end + minetest.set_node({x=-8, y=10, z=-24}, {name="default:desert_cobble"}) + minetest.set_node({x=-8, y=14, z=-24}, {name="default:desert_cobble"}) + minetest.set_node({x=-8, y=18, z=-24}, {name="default:desert_cobble"}) + minetest.set_node({x=-10, y=12, z=-25}, {name="default:desert_cobble"}) + minetest.set_node({x=-10, y=16, z=-25}, {name="default:desert_cobble"}) + minetest.set_node({x=-13, y=10, z=-29}, {name="default:desert_cobble"}) + minetest.set_node({x=-13, y=14, z=-29}, {name="default:desert_cobble"}) + minetest.set_node({x=-13, y=18, z=-29}, {name="default:desert_cobble"}) + minetest.set_node({x=-12, y=12, z=-27}, {name="default:desert_cobble"}) + minetest.set_node({x=-12, y=16, z=-27}, {name="default:desert_cobble"}) elseif v+0 == 0 then for j=6,13 do for i=24,31 do @@ -2618,6 +3034,75 @@ function Tower2(v,player) end end end + elseif v+0 == 21 then + for i=67,74 do + if i%4 == 2 then + minetest.set_node({x=i*(-1), y=20, z=-31}, {name="default:desert_cobble"}) + minetest.set_node({x=i*(-1), y=16, z=-31}, {name="default:desert_cobble"}) + minetest.set_node({x=i*(-1), y=12, z=-31}, {name="default:desert_cobble"}) + end + end + for i=67,74 do + if i%2 == 1 then + minetest.set_node({x=i*(-1), y=19, z=-31}, {name="default:desert_cobble"}) + minetest.set_node({x=i*(-1), y=17, z=-31}, {name="default:desert_cobble"}) + minetest.set_node({x=i*(-1), y=15, z=-31}, {name="default:desert_cobble"}) + minetest.set_node({x=i*(-1), y=13, z=-31}, {name="default:desert_cobble"}) + minetest.set_node({x=i*(-1), y=11, z=-31}, {name="default:desert_cobble"}) + minetest.set_node({x=i*(-1), y=9, z=-31}, {name="default:desert_cobble"}) + end + end + for i=67,74 do + if i%4 == 0 then + minetest.set_node({x=i*(-1), y=18, z=-31}, {name="default:desert_cobble"}) + minetest.set_node({x=i*(-1), y=14, z=-31}, {name="default:desert_cobble"}) + minetest.set_node({x=i*(-1), y=10, z=-31}, {name="default:desert_cobble"}) + end + end + for i=24,31 do + if i%4 == 3 then + minetest.set_node({x=-74, y=20, z=i*(-1)}, {name="default:desert_cobble"}) + minetest.set_node({x=-74, y=16, z=i*(-1)}, {name="default:desert_cobble"}) + minetest.set_node({x=-74, y=12, z=i*(-1)}, {name="default:desert_cobble"}) + end + end + for i=24,31 do + if i%2 == 0 then + minetest.set_node({x=-74, y=19, z=i*(-1)}, {name="default:desert_cobble"}) + minetest.set_node({x=-74, y=17, z=i*(-1)}, {name="default:desert_cobble"}) + minetest.set_node({x=-74, y=15, z=i*(-1)}, {name="default:desert_cobble"}) + minetest.set_node({x=-74, y=13, z=i*(-1)}, {name="default:desert_cobble"}) + minetest.set_node({x=-74, y=11, z=i*(-1)}, {name="default:desert_cobble"}) + minetest.set_node({x=-74, y=9, z=i*(-1)}, {name="default:desert_cobble"}) + end + end + for i=24,31 do + if i%4 == 1 then + minetest.set_node({x=-74, y=18, z=i*(-1)}, {name="default:desert_cobble"}) + minetest.set_node({x=-74, y=14, z=i*(-1)}, {name="default:desert_cobble"}) + minetest.set_node({x=-74, y=10, z=i*(-1)}, {name="default:desert_cobble"}) + end + end + for k=9,20 do + if k%2 == 1 then + minetest.set_node({x=-73, y=k, z=-24}, {name="default:desert_cobble"}) + minetest.set_node({x=-71, y=k, z=-25}, {name="default:desert_cobble"}) + minetest.set_node({x=-69, y=k, z=-26}, {name="default:desert_cobble"}) + minetest.set_node({x=-68, y=k, z=-28}, {name="default:desert_cobble"}) + minetest.set_node({x=-67, y=k, z=-30}, {name="default:desert_cobble"}) + end + end + + minetest.set_node({x=-72, y=10, z=-24}, {name="default:desert_cobble"}) + minetest.set_node({x=-72, y=14, z=-24}, {name="default:desert_cobble"}) + minetest.set_node({x=-72, y=18, z=-24}, {name="default:desert_cobble"}) + minetest.set_node({x=-70, y=12, z=-25}, {name="default:desert_cobble"}) + minetest.set_node({x=-70, y=16, z=-25}, {name="default:desert_cobble"}) + minetest.set_node({x=-67, y=10, z=-29}, {name="default:desert_cobble"}) + minetest.set_node({x=-67, y=14, z=-29}, {name="default:desert_cobble"}) + minetest.set_node({x=-67, y=18, z=-29}, {name="default:desert_cobble"}) + minetest.set_node({x=-68, y=12, z=-27}, {name="default:desert_cobble"}) + minetest.set_node({x=-68, y=16, z=-27}, {name="default:desert_cobble"}) elseif v+0 == 0 then for j=67,74 do for i=24,31 do @@ -2969,6 +3454,74 @@ function Tower3(v,player) end end end + elseif v+0 == 21 then + for i=30,37 do + if i%4 == 1 then + minetest.set_node({x=-74, y=20, z=i}, {name="default:desert_cobble"}) + minetest.set_node({x=-74, y=16, z=i}, {name="default:desert_cobble"}) + minetest.set_node({x=-74, y=12, z=i}, {name="default:desert_cobble"}) + end + end + for i=30,37 do + if i%2 == 0 then + minetest.set_node({x=-74, y=19, z=i}, {name="default:desert_cobble"}) + minetest.set_node({x=-74, y=17, z=i}, {name="default:desert_cobble"}) + minetest.set_node({x=-74, y=15, z=i}, {name="default:desert_cobble"}) + minetest.set_node({x=-74, y=13, z=i}, {name="default:desert_cobble"}) + minetest.set_node({x=-74, y=11, z=i}, {name="default:desert_cobble"}) + minetest.set_node({x=-74, y=9, z=i}, {name="default:desert_cobble"}) + end + end + for i=30,37 do + if i%4 == 3 then + minetest.set_node({x=-74, y=18, z=i}, {name="default:desert_cobble"}) + minetest.set_node({x=-74, y=14, z=i}, {name="default:desert_cobble"}) + minetest.set_node({x=-74, y=10, z=i}, {name="default:desert_cobble"}) + end + end + for i=67,74 do + if i%4 == 2 then + minetest.set_node({x=i*(-1), y=20, z=37}, {name="default:desert_cobble"}) + minetest.set_node({x=i*(-1), y=16, z=37}, {name="default:desert_cobble"}) + minetest.set_node({x=i*(-1), y=12, z=37}, {name="default:desert_cobble"}) + end + end + for i=67,74 do + if i%2 == 1 then + minetest.set_node({x=i*(-1), y=19, z=37}, {name="default:desert_cobble"}) + minetest.set_node({x=i*(-1), y=17, z=37}, {name="default:desert_cobble"}) + minetest.set_node({x=i*(-1), y=15, z=37}, {name="default:desert_cobble"}) + minetest.set_node({x=i*(-1), y=13, z=37}, {name="default:desert_cobble"}) + minetest.set_node({x=i*(-1), y=11, z=37}, {name="default:desert_cobble"}) + minetest.set_node({x=i*(-1), y=9, z=37}, {name="default:desert_cobble"}) + end + end + for i=67,74 do + if i%4 == 0 then + minetest.set_node({x=i*(-1), y=18, z=37}, {name="default:desert_cobble"}) + minetest.set_node({x=i*(-1), y=14, z=37}, {name="default:desert_cobble"}) + minetest.set_node({x=i*(-1), y=10, z=37}, {name="default:desert_cobble"}) + end + end + for k=9,20 do + if k%2 == 1 then + minetest.set_node({x=-73, y=k, z=30}, {name="default:desert_cobble"}) + minetest.set_node({x=-71, y=k, z=31}, {name="default:desert_cobble"}) + minetest.set_node({x=-69, y=k, z=32}, {name="default:desert_cobble"}) + minetest.set_node({x=-68, y=k, z=34}, {name="default:desert_cobble"}) + minetest.set_node({x=-67, y=k, z=36}, {name="default:desert_cobble"}) + end + end + minetest.set_node({x=-72, y=10, z=30}, {name="default:desert_cobble"}) + minetest.set_node({x=-72, y=14, z=30}, {name="default:desert_cobble"}) + minetest.set_node({x=-72, y=18, z=30}, {name="default:desert_cobble"}) + minetest.set_node({x=-70, y=12, z=31}, {name="default:desert_cobble"}) + minetest.set_node({x=-70, y=16, z=31}, {name="default:desert_cobble"}) + minetest.set_node({x=-67, y=10, z=35}, {name="default:desert_cobble"}) + minetest.set_node({x=-67, y=14, z=35}, {name="default:desert_cobble"}) + minetest.set_node({x=-67, y=18, z=35}, {name="default:desert_cobble"}) + minetest.set_node({x=-68, y=12, z=33}, {name="default:desert_cobble"}) + minetest.set_node({x=-68, y=16, z=33}, {name="default:desert_cobble"}) elseif v+0 == 0 then for j=67,74 do for i=30,37 do @@ -3323,6 +3876,75 @@ function Tower4(v,player) end end end + elseif v+0 == 21 then + for i=30,37 do + if i%4 == 1 then + minetest.set_node({x=-6, y=20, z=i}, {name="default:desert_cobble"}) + minetest.set_node({x=-6, y=16, z=i}, {name="default:desert_cobble"}) + minetest.set_node({x=-6, y=12, z=i}, {name="default:desert_cobble"}) + end + end + for i=30,37 do + if i%2 == 0 then + minetest.set_node({x=-6, y=19, z=i}, {name="default:desert_cobble"}) + minetest.set_node({x=-6, y=17, z=i}, {name="default:desert_cobble"}) + minetest.set_node({x=-6, y=15, z=i}, {name="default:desert_cobble"}) + minetest.set_node({x=-6, y=13, z=i}, {name="default:desert_cobble"}) + minetest.set_node({x=-6, y=11, z=i}, {name="default:desert_cobble"}) + minetest.set_node({x=-6, y=9, z=i}, {name="default:desert_cobble"}) + end + end + for i=30,37 do + if i%4 == 3 then + minetest.set_node({x=-6, y=18, z=i}, {name="default:desert_cobble"}) + minetest.set_node({x=-6, y=14, z=i}, {name="default:desert_cobble"}) + minetest.set_node({x=-6, y=10, z=i}, {name="default:desert_cobble"}) + end + end + for i=6,13 do + if i%4 == 2 then + minetest.set_node({x=i*(-1), y=20, z=37}, {name="default:desert_cobble"}) + minetest.set_node({x=i*(-1), y=16, z=37}, {name="default:desert_cobble"}) + minetest.set_node({x=i*(-1), y=12, z=37}, {name="default:desert_cobble"}) + end + end + for i=6,13 do + if i%2 == 1 then + minetest.set_node({x=i*(-1), y=19, z=37}, {name="default:desert_cobble"}) + minetest.set_node({x=i*(-1), y=17, z=37}, {name="default:desert_cobble"}) + minetest.set_node({x=i*(-1), y=15, z=37}, {name="default:desert_cobble"}) + minetest.set_node({x=i*(-1), y=13, z=37}, {name="default:desert_cobble"}) + minetest.set_node({x=i*(-1), y=11, z=37}, {name="default:desert_cobble"}) + minetest.set_node({x=i*(-1), y=9, z=37}, {name="default:desert_cobble"}) + end + end + for i=6,13 do + if i%4 == 0 then + minetest.set_node({x=i*(-1), y=18, z=37}, {name="default:desert_cobble"}) + minetest.set_node({x=i*(-1), y=14, z=37}, {name="default:desert_cobble"}) + minetest.set_node({x=i*(-1), y=10, z=37}, {name="default:desert_cobble"}) + end + end + + for k=9,20 do + if k%2 == 1 then + minetest.set_node({x=-7, y=k, z=30}, {name="default:desert_cobble"}) + minetest.set_node({x=-9, y=k, z=31}, {name="default:desert_cobble"}) + minetest.set_node({x=-11, y=k, z=32}, {name="default:desert_cobble"}) + minetest.set_node({x=-12, y=k, z=34}, {name="default:desert_cobble"}) + minetest.set_node({x=-13, y=k, z=36}, {name="default:desert_cobble"}) + end + end + minetest.set_node({x=-8, y=10, z=30}, {name="default:desert_cobble"}) + minetest.set_node({x=-8, y=14, z=30}, {name="default:desert_cobble"}) + minetest.set_node({x=-8, y=18, z=30}, {name="default:desert_cobble"}) + minetest.set_node({x=-10, y=12, z=31}, {name="default:desert_cobble"}) + minetest.set_node({x=-10, y=16, z=31}, {name="default:desert_cobble"}) + minetest.set_node({x=-13, y=10, z=35}, {name="default:desert_cobble"}) + minetest.set_node({x=-13, y=14, z=35}, {name="default:desert_cobble"}) + minetest.set_node({x=-13, y=18, z=35}, {name="default:desert_cobble"}) + minetest.set_node({x=-12, y=12, z=33}, {name="default:desert_cobble"}) + minetest.set_node({x=-12, y=16, z=33}, {name="default:desert_cobble"}) elseif v+0 == 0 then for j=6,13 do for i=30,37 do @@ -3520,6 +4142,55 @@ function Wall_east(v,player) end end end + elseif v+0 == 17 then + for i=0,29 do + if i%4 == 1 then + minetest.set_node({x=-6, y=20, z=i}, {name="default:desert_cobble"}) + minetest.set_node({x=-6, y=16, z=i}, {name="default:desert_cobble"}) + minetest.set_node({x=-6, y=12, z=i}, {name="default:desert_cobble"}) + end + end + for i=0,23 do + if i%4 == 3 then + minetest.set_node({x=-6, y=20, z=i*(-1)}, {name="default:desert_cobble"}) + minetest.set_node({x=-6, y=16, z=i*(-1)}, {name="default:desert_cobble"}) + minetest.set_node({x=-6, y=12, z=i*(-1)}, {name="default:desert_cobble"}) + end + end + for i=0,29 do + if i%2 == 0 then + minetest.set_node({x=-6, y=19, z=i}, {name="default:desert_cobble"}) + minetest.set_node({x=-6, y=17, z=i}, {name="default:desert_cobble"}) + minetest.set_node({x=-6, y=15, z=i}, {name="default:desert_cobble"}) + minetest.set_node({x=-6, y=13, z=i}, {name="default:desert_cobble"}) + minetest.set_node({x=-6, y=11, z=i}, {name="default:desert_cobble"}) + minetest.set_node({x=-6, y=9, z=i}, {name="default:desert_cobble"}) + end + end + for i=0,23 do + if i%2 == 0 then + minetest.set_node({x=-6, y=19, z=i*(-1)}, {name="default:desert_cobble"}) + minetest.set_node({x=-6, y=17, z=i*(-1)}, {name="default:desert_cobble"}) + minetest.set_node({x=-6, y=15, z=i*(-1)}, {name="default:desert_cobble"}) + minetest.set_node({x=-6, y=13, z=i*(-1)}, {name="default:desert_cobble"}) + minetest.set_node({x=-6, y=11, z=i*(-1)}, {name="default:desert_cobble"}) + minetest.set_node({x=-6, y=9, z=i*(-1)}, {name="default:desert_cobble"}) + end + end + for i=0,29 do + if i%4 == 3 then + minetest.set_node({x=-6, y=18, z=i}, {name="default:desert_cobble"}) + minetest.set_node({x=-6, y=14, z=i}, {name="default:desert_cobble"}) + minetest.set_node({x=-6, y=10, z=i}, {name="default:desert_cobble"}) + end + end + for i=0,23 do + if i%4 == 1 then + minetest.set_node({x=-6, y=18, z=i*(-1)}, {name="default:desert_cobble"}) + minetest.set_node({x=-6, y=14, z=i*(-1)}, {name="default:desert_cobble"}) + minetest.set_node({x=-6, y=10, z=i*(-1)}, {name="default:desert_cobble"}) + end + end elseif v+0 == 0 then for i=6,9 do for k=9,21 do @@ -3708,6 +4379,55 @@ function Wall_west(v,player) end end end + elseif v+0 == 17 then + for i=0,29 do + if i%4 == 1 then + minetest.set_node({x=-74, y=20, z=i}, {name="default:desert_cobble"}) + minetest.set_node({x=-74, y=16, z=i}, {name="default:desert_cobble"}) + minetest.set_node({x=-74, y=12, z=i}, {name="default:desert_cobble"}) + end + end + for i=0,23 do + if i%4 == 3 then + minetest.set_node({x=-74, y=20, z=i*(-1)}, {name="default:desert_cobble"}) + minetest.set_node({x=-74, y=16, z=i*(-1)}, {name="default:desert_cobble"}) + minetest.set_node({x=-74, y=12, z=i*(-1)}, {name="default:desert_cobble"}) + end + end + for i=0,29 do + if i%2 == 0 then + minetest.set_node({x=-74, y=19, z=i}, {name="default:desert_cobble"}) + minetest.set_node({x=-74, y=17, z=i}, {name="default:desert_cobble"}) + minetest.set_node({x=-74, y=15, z=i}, {name="default:desert_cobble"}) + minetest.set_node({x=-74, y=13, z=i}, {name="default:desert_cobble"}) + minetest.set_node({x=-74, y=11, z=i}, {name="default:desert_cobble"}) + minetest.set_node({x=-74, y=9, z=i}, {name="default:desert_cobble"}) + end + end + for i=0,23 do + if i%2 == 0 then + minetest.set_node({x=-74, y=19, z=i*(-1)}, {name="default:desert_cobble"}) + minetest.set_node({x=-74, y=17, z=i*(-1)}, {name="default:desert_cobble"}) + minetest.set_node({x=-74, y=15, z=i*(-1)}, {name="default:desert_cobble"}) + minetest.set_node({x=-74, y=13, z=i*(-1)}, {name="default:desert_cobble"}) + minetest.set_node({x=-74, y=11, z=i*(-1)}, {name="default:desert_cobble"}) + minetest.set_node({x=-74, y=9, z=i*(-1)}, {name="default:desert_cobble"}) + end + end + for i=0,29 do + if i%4 == 3 then + minetest.set_node({x=-74, y=18, z=i}, {name="default:desert_cobble"}) + minetest.set_node({x=-74, y=14, z=i}, {name="default:desert_cobble"}) + minetest.set_node({x=-74, y=10, z=i}, {name="default:desert_cobble"}) + end + end + for i=0,23 do + if i%4 == 1 then + minetest.set_node({x=-74, y=18, z=i*(-1)}, {name="default:desert_cobble"}) + minetest.set_node({x=-74, y=14, z=i*(-1)}, {name="default:desert_cobble"}) + minetest.set_node({x=-74, y=10, z=i*(-1)}, {name="default:desert_cobble"}) + end + end elseif v+0 == 0 then for i=71,74 do for k=9,21 do @@ -3833,6 +4553,31 @@ function Wall_north(v,player) end end end + elseif v+0 == 17 then + for i=14,66 do + if i%4 == 2 then + minetest.set_node({x=i*(-1), y=20, z=37}, {name="default:desert_cobble"}) + minetest.set_node({x=i*(-1), y=16, z=37}, {name="default:desert_cobble"}) + minetest.set_node({x=i*(-1), y=12, z=37}, {name="default:desert_cobble"}) + end + end + for i=14,66 do + if i%2 == 1 then + minetest.set_node({x=i*(-1), y=19, z=37}, {name="default:desert_cobble"}) + minetest.set_node({x=i*(-1), y=17, z=37}, {name="default:desert_cobble"}) + minetest.set_node({x=i*(-1), y=15, z=37}, {name="default:desert_cobble"}) + minetest.set_node({x=i*(-1), y=13, z=37}, {name="default:desert_cobble"}) + minetest.set_node({x=i*(-1), y=11, z=37}, {name="default:desert_cobble"}) + minetest.set_node({x=i*(-1), y=9, z=37}, {name="default:desert_cobble"}) + end + end + for i=14,66 do + if i%4 == 0 then + minetest.set_node({x=i*(-1), y=18, z=37}, {name="default:desert_cobble"}) + minetest.set_node({x=i*(-1), y=14, z=37}, {name="default:desert_cobble"}) + minetest.set_node({x=i*(-1), y=10, z=37}, {name="default:desert_cobble"}) + end + end elseif v+0 == 0 then for i=14,66 do for j=34,37 do @@ -4066,10 +4811,10 @@ function Moat_west(v,player) end for j=75,83 do for i=0,31 do - minetest.set_node({x=j*(-1), y=8, z=i*(-1)}, {name="default:dirt_with_grass"}) + minetest.set_node({x=j*(-1), y=8, z=i*(-1)}, {name="castrum:dirt_with_grass"}) end for i=0,37 do - minetest.set_node({x=j*(-1), y=8, z=i}, {name="default:dirt_with_grass"}) + minetest.set_node({x=j*(-1), y=8, z=i}, {name="castrum:dirt_with_grass"}) end end end @@ -4156,6 +4901,25 @@ function Smithy(v,player) end minetest.set_node({x=-68, y=10, z=-13}, {name="default:lava_source"}) minetest.set_node({x=-68, y=10, z=-12}, {name="default:lava_source"}) + elseif v+0 == 7 then + for j=61,69 do + for i=6,14 do + for k=9,14 do + if minetest.get_node({x=j*(-1), y=k, z=i*(-1)}).name == "default:cobble" then + minetest.set_node({x=j*(-1), y=k, z=i*(-1)}, {name="default:stone_block"}) + end + end + end + end + minetest.set_node({x=-61, y=9, z=-8}, {name="stairs:stair_stone_block"}) + minetest.set_node({x=-61, y=9, z=-9}, {name="stairs:stair_stone_block"}) + screwdriver_handler(player, {type="node", under={x=-61, y=9, z=-8}, above={x=-61, y=9, z=-8}}, 1) + screwdriver_handler(player, {type="node", under={x=-61, y=9, z=-8}, above={x=-61, y=9, z=-8}}, 1) + screwdriver_handler(player, {type="node", under={x=-61, y=9, z=-8}, above={x=-61, y=9, z=-8}}, 1) + + screwdriver_handler(player, {type="node", under={x=-61, y=9, z=-9}, above={x=-61, y=9, z=-9}}, 1) + screwdriver_handler(player, {type="node", under={x=-61, y=9, z=-9}, above={x=-61, y=9, z=-9}}, 1) + screwdriver_handler(player, {type="node", under={x=-61, y=9, z=-9}, above={x=-61, y=9, z=-9}}, 1) elseif v+0 == 0 then for j=61,69 do for i=6,14 do @@ -4363,6 +5127,37 @@ function Quarry(v,player) minetest.set_node({x=-14, y=9, z=7}, {name="default:desert_stone"}) minetest.set_node({x=-12, y=9, z=1}, {name="default:desert_stone"}) minetest.set_node({x=-11, y=9, z=6}, {name="default:desert_stone"}) + elseif v+0 == 3 then + minetest.set_node({x=-19, y=10, z=1}, {name="default:desert_stone"}) + minetest.set_node({x=-18, y=10, z=5}, {name="default:desert_stone"}) + minetest.set_node({x=-15, y=10, z=4}, {name="default:desert_stone"}) + minetest.set_node({x=-15, y=10, z=0}, {name="default:desert_stone"}) + minetest.set_node({x=-14, y=10, z=7}, {name="default:desert_stone"}) + minetest.set_node({x=-12, y=10, z=1}, {name="default:desert_stone"}) + minetest.set_node({x=-11, y=10, z=6}, {name="default:desert_stone"}) + minetest.set_node({x=-11, y=9, z=7}, {name="default:desert_stone"}) + minetest.set_node({x=-11, y=9, z=5}, {name="default:desert_stone"}) + minetest.set_node({x=-12, y=9, z=6}, {name="default:desert_stone"}) + minetest.set_node({x=-13, y=9, z=7}, {name="default:desert_stone"}) + minetest.set_node({x=-15, y=9, z=7}, {name="default:desert_stone"}) + minetest.set_node({x=-14, y=9, z=6}, {name="default:desert_stone"}) + minetest.set_node({x=-13, y=9, z=1}, {name="default:desert_stone"}) + minetest.set_node({x=-11, y=9, z=1}, {name="default:desert_stone"}) + minetest.set_node({x=-12, y=9, z=2}, {name="default:desert_stone"}) + minetest.set_node({x=-12, y=9, z=0}, {name="default:desert_stone"}) + minetest.set_node({x=-14, y=9, z=4}, {name="default:desert_stone"}) + minetest.set_node({x=-16, y=9, z=4}, {name="default:desert_stone"}) + minetest.set_node({x=-15, y=9, z=3}, {name="default:desert_stone"}) + minetest.set_node({x=-15, y=9, z=5}, {name="default:desert_stone"}) + minetest.set_node({x=-14, y=9, z=0}, {name="default:desert_stone"}) + minetest.set_node({x=-15, y=9, z=1}, {name="default:desert_stone"}) + minetest.set_node({x=-15, y=9, z=-1}, {name="default:desert_stone"}) + minetest.set_node({x=-17, y=9, z=5}, {name="default:desert_stone"}) + minetest.set_node({x=-19, y=9, z=5}, {name="default:desert_stone"}) + minetest.set_node({x=-18, y=9, z=6}, {name="default:desert_stone"}) + minetest.set_node({x=-18, y=9, z=1}, {name="default:desert_stone"}) + minetest.set_node({x=-19, y=9, z=2}, {name="default:desert_stone"}) + minetest.set_node({x=-19, y=9, z=0}, {name="default:desert_stone"}) elseif v+0 == 0 then for j=11,19 do for i=0,7 do @@ -4444,6 +5239,24 @@ function Tree(v,player) minetest.set_node({x=-13, y=9, z=19}, {name="default:jungleleaves"}) minetest.set_node({x=-12, y=9, z=18}, {name="default:jungleleaves"}) minetest.set_node({x=-12, y=9, z=20}, {name="default:jungleleaves"}) + elseif v+0 == 4 then + minetest.set_node({x=-12, y=10, z=19}, {name="default:jungletree"}) + minetest.set_node({x=-12, y=11, z=19}, {name="default:jungletree"}) + + minetest.set_node({x=-11, y=11, z=18}, {name="default:jungleleaves"}) + minetest.set_node({x=-12, y=11, z=18}, {name="default:jungleleaves"}) + minetest.set_node({x=-13, y=11, z=18}, {name="default:jungleleaves"}) + minetest.set_node({x=-11, y=11, z=19}, {name="default:jungleleaves"}) + minetest.set_node({x=-12, y=11, z=19}, {name="default:jungletree"}) + minetest.set_node({x=-13, y=11, z=19}, {name="default:jungleleaves"}) + minetest.set_node({x=-11, y=11, z=20}, {name="default:jungleleaves"}) + minetest.set_node({x=-12, y=11, z=20}, {name="default:jungleleaves"}) + minetest.set_node({x=-13, y=11, z=20}, {name="default:jungleleaves"}) + minetest.set_node({x=-12, y=12, z=19}, {name="default:jungleleaves"}) + minetest.set_node({x=-11, y=9, z=19}, {name="air"}) + minetest.set_node({x=-13, y=9, z=19}, {name="air"}) + minetest.set_node({x=-12, y=9, z=18}, {name="air"}) + minetest.set_node({x=-12, y=9, z=20}, {name="air"}) elseif v+0 == 0 then for j=11,19 do for i=12,20 do @@ -4609,6 +5422,31 @@ function Ship1(v,player) minetest.set_node({x=j*(-1), y=13, z=-60}, {name="wool:white"}) minetest.set_node({x=j*(-1), y=12, z=-59}, {name="wool:white"}) end + elseif v+0 == 6 then + for j=10,16 do + for i=53,65 do + for k=7,15 do + if minetest.get_node({x=j*(-1), y=k, z=i*(-1)}).name == "default:wood" then + minetest.set_node({x=j*(-1), y=k, z=i*(-1)}, {name="default:junglewood"}) + end + if minetest.get_node({x=j*(-1), y=k, z=i*(-1)}).name == "default:fence_wood" then + minetest.set_node({x=j*(-1), y=k, z=i*(-1)}, {name="default:fence_junglewood"}) + end + end + end + end + for j=127,133 do + for i=29,51 do + for k=7,15 do + if minetest.get_node({x=j, y=k, z=i}).name == "default:wood" then + minetest.set_node({x=j, y=k, z=i}, {name="default:junglewood"}) + end + if minetest.get_node({x=j, y=k, z=i}).name == "default:fence_wood" then + minetest.set_node({x=j, y=k, z=i}, {name="default:fence_junglewood"}) + end + end + end + end elseif v+0 == 0 then for j=10,16 do for i=53,65 do @@ -4618,6 +5456,18 @@ function Ship1(v,player) minetest.set_node({x=j*(-1), y=7, z=i*(-1)}, {name="default:water_source"}) end end + for j=127,133 do + for i=29,51 do + for k=7,15 do + if minetest.get_node({x=j, y=k, z=i}).name == "default:junglewood" then + minetest.set_node({x=j, y=k, z=i}, {name="default:wood"}) + end + if minetest.get_node({x=j, y=k, z=i}).name == "default:fence_junglewood" then + minetest.set_node({x=j, y=k, z=i}, {name="default:fence_wood"}) + end + end + end + end end end function Lake(v,player) @@ -4639,17 +5489,48 @@ function Lake(v,player) minetest.set_node({x=-29, y=8, z=-55}, {name="default:water_source"}) minetest.set_node({x=-30, y=8, z=-54}, {name="default:water_source"}) minetest.set_node({x=-31, y=8, z=-53}, {name="default:water_source"}) + elseif v+0 == 4 then + minetest.set_node({x=-30, y=8, z=-53}, {name="default:water_source"}) + minetest.set_node({x=-29, y=8, z=-54}, {name="default:water_source"}) + minetest.set_node({x=-29, y=8, z=-56}, {name="default:water_source"}) + minetest.set_node({x=-30, y=8, z=-57}, {name="default:water_source"}) + + minetest.set_node({x=-32, y=8, z=-57}, {name="default:water_source"}) + minetest.set_node({x=-33, y=8, z=-56}, {name="default:water_source"}) + minetest.set_node({x=-33, y=8, z=-54}, {name="default:water_source"}) + minetest.set_node({x=-32, y=8, z=-53}, {name="default:water_source"}) elseif v+0 == 0 then for j=29,33 do for i=53,57 do for k=8,8 do - minetest.set_node({x=j*(-1), y=k, z=i*(-1)}, {name="default:dirt_with_grass"}) + minetest.set_node({x=j*(-1), y=k, z=i*(-1)}, {name="castrum:dirt_with_grass"}) end end end minetest.set_node({x=-34, y=9, z=-58}, {name="air"}) end end +function Lake2(v,player) + if v+0 == 1 then + minetest.set_node({x=-31, y=8, z=-64}, {name="default:river_water_source"}) + minetest.set_node({x=-34, y=9, z=-67}, {name="default:chest"}) + screwdriver_handler(player, {type="node", under={x=-34, y=9, z=-67}, above={x=-34, y=9, z=-67}}, 1) + elseif v+0 == 2 then + minetest.set_node({x=-30, y=8, z=-64}, {name="default:river_water_source"}) + minetest.set_node({x=-32, y=8, z=-64}, {name="default:river_water_source"}) + minetest.set_node({x=-31, y=8, z=-65}, {name="default:river_water_source"}) + minetest.set_node({x=-31, y=8, z=-63}, {name="default:river_water_source"}) + elseif v+0 == 0 then + for j=29,33 do + for i=62,66 do + for k=8,8 do + minetest.set_node({x=j*(-1), y=k, z=i*(-1)}, {name="castrum:dirt_with_grass"}) + end + end + end + minetest.set_node({x=-34, y=9, z=-67}, {name="air"}) + end +end function Barracks(v,player) if v+0 == 1 then for j=37,43 do @@ -4696,6 +5577,16 @@ function Barracks(v,player) screwdriver_handler(player, {type="node", under={x=-42, y=10, z=28}, above={x=-42, y=10, z=28}}, 1) screwdriver_handler(player, {type="node", under={x=-42, y=10, z=28}, above={x=-42, y=10, z=28}}, 1) screwdriver_handler(player, {type="node", under={x=-42, y=10, z=28}, above={x=-42, y=10, z=28}}, 1) + elseif v+0 == 7 then + for j=37,43 do + for i=25,31 do + for k=9,13 do + if minetest.get_node({x=j*(-1), y=k, z=i}).name == "default:cobble" then + minetest.set_node({x=j*(-1), y=k, z=i}, {name="default:stone_block"}) + end + end + end + end elseif v+0 == 0 then for j=37,43 do for i=25,31 do @@ -4719,6 +5610,19 @@ function Camp1(v,player) end end end +function Camp2(v,player) + if v+0 == 1 then + minetest.set_node({x=-63, y=9, z=-70}, {name="castrum:fire"}) + elseif v+0 == 0 then + for j=59,67 do + for i=66,74 do + for k=9,9 do + minetest.set_node({x=j*(-1), y=k, z=i*(-1)}, {name="air"}) + end + end + end + end +end function Island_Walle(v,player) if v+0 == 1 then for i=0,33 do @@ -5126,6 +6030,16 @@ function Battleground(v,player) minetest.set_node({x=-72, y=10, z=-83}, {name="default:stone_block"}) minetest.set_node({x=-73, y=10, z=-84}, {name="default:stone_block"}) minetest.set_node({x=-75, y=10, z=-84}, {name="default:stone_block"}) + elseif v+0 == 6 then + for j=72,76 do + for i=80,84 do + for k=9,12 do + if minetest.get_node({x=j*(-1), y=k, z=i*(-1)}).name == "default:cobble" then + minetest.set_node({x=j*(-1), y=k, z=i*(-1)}, {name="default:stone_block"}) + end + end + end + end elseif v+0 == 0 then for j=72,76 do for i=80,84 do @@ -5136,6 +6050,229 @@ function Battleground(v,player) end end end +function Island_Smithy(v,player) + if v+0 == 1 then + for j=166,173 do + for i=20,28 do + minetest.set_node({x=j, y=9, z=i}, {name="default:sandstone"}) + end + end + minetest.set_node({x=165, y=9, z=23}, {name="stairs:stair_sandstone"}) + minetest.set_node({x=165, y=9, z=22}, {name="stairs:stair_sandstone"}) + screwdriver_handler(player, {type="node", under={x=165, y=9, z=23}, above={x=165, y=9, z=23}}, 1) + screwdriver_handler(player, {type="node", under={x=165, y=9, z=22}, above={x=165, y=9, z=22}}, 1) + elseif v+0 == 2 then + for j=166,173 do + minetest.set_node({x=j, y=10, z=20}, {name="default:sandstone"}) + minetest.set_node({x=j, y=10, z=25}, {name="default:sandstone"}) + end + for i=20,28 do + minetest.set_node({x=173, y=10, z=i}, {name="default:sandstone"}) + end + for j=167,173 do + minetest.set_node({x=j, y=10, z=28}, {name="default:sandstone"}) + end + minetest.set_node({x=166, y=10, z=21}, {name="default:sandstone"}) + minetest.set_node({x=166, y=10, z=24}, {name="default:sandstone"}) + minetest.set_node({x=171, y=10, z=27}, {name="default:sandstone"}) + minetest.set_node({x=171, y=10, z=26}, {name="default:sandstone"}) + elseif v+0 == 3 then + for j=166,173 do + minetest.set_node({x=j, y=11, z=20}, {name="default:sandstone"}) + minetest.set_node({x=j, y=11, z=25}, {name="default:sandstone"}) + end + for i=20,28 do + minetest.set_node({x=173, y=11, z=i}, {name="default:sandstone"}) + end + for j=168,173 do + minetest.set_node({x=j, y=11, z=28}, {name="default:sandstone"}) + end + minetest.set_node({x=166, y=11, z=21}, {name="default:sandstone"}) + minetest.set_node({x=166, y=11, z=24}, {name="default:sandstone"}) + minetest.set_node({x=166, y=10, z=22}, {name="doors:door_wood_b"}) + minetest.set_node({x=166, y=10, z=23}, {name="doors:door_wood_a"}) + screwdriver_handler(player, {type="node", under={x=166, y=10, z=22}, above={x=166, y=10, z=22}}, 1) + screwdriver_handler(player, {type="node", under={x=166, y=10, z=23}, above={x=166, y=10, z=23}}, 1) + elseif v+0 == 4 then + for j=166,173 do + minetest.set_node({x=j, y=12, z=20}, {name="default:sandstone"}) + minetest.set_node({x=j, y=12, z=25}, {name="default:sandstone"}) + end + for i=20,28 do + minetest.set_node({x=173, y=12, z=i}, {name="default:sandstone"}) + end + for i=20,25 do + minetest.set_node({x=166, y=12, z=i}, {name="default:sandstone"}) + end + for j=169,173 do + minetest.set_node({x=j, y=12, z=28}, {name="default:sandstone"}) + end + elseif v+0 == 5 then + for j=167,172 do + minetest.set_node({x=j, y=13, z=21}, {name="default:sandstone"}) + minetest.set_node({x=j, y=13, z=24}, {name="default:sandstone"}) + end + for i=21,24 do + minetest.set_node({x=167, y=13, z=i}, {name="default:sandstone"}) + minetest.set_node({x=172, y=13, z=i}, {name="default:sandstone"}) + end + elseif v+0 == 6 then + for j=168,171 do + minetest.set_node({x=j, y=14, z=22}, {name="default:sandstone"}) + minetest.set_node({x=j, y=14, z=23}, {name="default:sandstone"}) + end + minetest.set_node({x=172, y=10, z=27}, {name="default:lava_source"}) + minetest.set_node({x=172, y=10, z=26}, {name="default:lava_source"}) + elseif v+0 == 0 then + for j=165,173 do + for i=20,28 do + for k=9,14 do + minetest.set_node({x=j, y=k, z=i}, {name="air"}) + end + end + end + end +end +function Cactusfarm(v,player) + if v+0 == 1 then + minetest.set_node({x=130, y=9, z=-7}, {name="castrum:cactus"}) + minetest.set_node({x=130, y=9, z=-1}, {name="castrum:cactus"}) + minetest.set_node({x=124, y=9, z=-1}, {name="castrum:cactus"}) + minetest.set_node({x=124, y=9, z=-7}, {name="castrum:cactus"}) + minetest.set_node({x=127, y=9, z=-4}, {name="castrum:cactus"}) + minetest.set_node({x=127, y=10, z=-4}, {name="castrum:cactus"}) + minetest.set_node({x=132, y=9, z=1}, {name="default:chest"}) + screwdriver_handler(player, {type="node", under={x=132, y=9, z=1}, above={x=132, y=9, z=1}}, 1) + screwdriver_handler(player, {type="node", under={x=132, y=9, z=1}, above={x=132, y=9, z=1}}, 1) + screwdriver_handler(player, {type="node", under={x=132, y=9, z=1}, above={x=132, y=9, z=1}}, 1) + elseif v+0 == 2 then + minetest.set_node({x=130, y=10, z=-7}, {name="castrum:cactus"}) + minetest.set_node({x=130, y=10, z=-1}, {name="castrum:cactus"}) + minetest.set_node({x=124, y=10, z=-1}, {name="castrum:cactus"}) + minetest.set_node({x=124, y=10, z=-7}, {name="castrum:cactus"}) + minetest.set_node({x=127, y=11, z=-4}, {name="castrum:cactus"}) + elseif v+0 == 0 then + for j=123,131 do + for i=0,8 do + for k=9,13 do + minetest.set_node({x=j, y=k, z=i*(-1)}, {name="air"}) + end + end + end + minetest.set_node({x=132, y=9, z=1}, {name="air"}) + end +end +function Mountain_Fountain(v,player) + if v+0 == 1 then + for i=334,338 do + for j=3,5 do + minetest.set_node({x=i, y=40, z=j*(-1)}, {name="default:mossycobble"}) + end + end + for i=335,337 do + minetest.set_node({x=i, y=40, z=-2}, {name="default:mossycobble"}) + minetest.set_node({x=i, y=40, z=-6}, {name="default:mossycobble"}) + end + elseif v+0 == 2 then + minetest.set_node({x=334, y=41, z=-3}, {name="default:mossycobble"}) + minetest.set_node({x=334, y=41, z=-4}, {name="default:mossycobble"}) + minetest.set_node({x=334, y=41, z=-5}, {name="default:mossycobble"}) + minetest.set_node({x=338, y=41, z=-3}, {name="default:mossycobble"}) + minetest.set_node({x=338, y=41, z=-4}, {name="default:mossycobble"}) + minetest.set_node({x=338, y=41, z=-5}, {name="default:mossycobble"}) + minetest.set_node({x=335, y=41, z=-2}, {name="default:mossycobble"}) + minetest.set_node({x=336, y=41, z=-2}, {name="default:mossycobble"}) + minetest.set_node({x=337, y=41, z=-2}, {name="default:mossycobble"}) + minetest.set_node({x=335, y=41, z=-6}, {name="default:mossycobble"}) + minetest.set_node({x=336, y=41, z=-6}, {name="default:mossycobble"}) + minetest.set_node({x=337, y=41, z=-6}, {name="default:mossycobble"}) + elseif v+0 == 3 then + minetest.set_node({x=336, y=41, z=-4}, {name="default:mossycobble"}) + minetest.set_node({x=336, y=42, z=-4}, {name="default:mossycobble"}) + minetest.set_node({x=336, y=43, z=-4}, {name="default:water_source"}) + elseif v+0 == 0 then + for i=334,338 do + for k=40,43 do + for j=2,6 do + minetest.set_node({x=i, y=k, z=j*(-1)}, {name="air"}) + end + end + end + end +end +function Island_Home1(v,player) + if v+0 == 1 then + minetest.set_node({x=144, y=9, z=-14}, {name="default:sandstone"}) + minetest.set_node({x=138, y=9, z=-14}, {name="default:sandstone"}) + minetest.set_node({x=138, y=9, z=-21}, {name="default:sandstone"}) + minetest.set_node({x=144, y=9, z=-21}, {name="default:sandstone"}) + for j=15,20 do + minetest.set_node({x=145, y=9, z=j*(-1)}, {name="default:sandstone"}) + minetest.set_node({x=137, y=9, z=j*(-1)}, {name="default:sandstone"}) + end + for i=139,143 do + minetest.set_node({x=i, y=9, z=-22}, {name="default:sandstone"}) + end + elseif v+0 == 2 then + minetest.set_node({x=144, y=10, z=-14}, {name="default:sandstone"}) + minetest.set_node({x=138, y=10, z=-14}, {name="default:sandstone"}) + minetest.set_node({x=138, y=10, z=-21}, {name="default:sandstone"}) + minetest.set_node({x=144, y=10, z=-21}, {name="default:sandstone"}) + for j=15,20 do + minetest.set_node({x=145, y=10, z=j*(-1)}, {name="default:sandstone"}) + minetest.set_node({x=137, y=10, z=j*(-1)}, {name="default:sandstone"}) + end + for i=139,143 do + minetest.set_node({x=i, y=10, z=-22}, {name="default:sandstone"}) + end + minetest.set_node({x=145, y=10, z=-17}, {name="default:glass"}) + minetest.set_node({x=145, y=10, z=-18}, {name="default:glass"}) + minetest.set_node({x=141, y=10, z=-22}, {name="default:glass"}) + minetest.set_node({x=137, y=10, z=-17}, {name="default:glass"}) + minetest.set_node({x=137, y=10, z=-18}, {name="default:glass"}) + elseif v+0 == 3 then + minetest.set_node({x=144, y=11, z=-14}, {name="default:sandstone"}) + minetest.set_node({x=138, y=11, z=-14}, {name="default:sandstone"}) + minetest.set_node({x=138, y=11, z=-21}, {name="default:sandstone"}) + minetest.set_node({x=144, y=11, z=-21}, {name="default:sandstone"}) + for j=15,20 do + minetest.set_node({x=145, y=11, z=j*(-1)}, {name="default:sandstone"}) + minetest.set_node({x=137, y=11, z=j*(-1)}, {name="default:sandstone"}) + end + for i=139,143 do + minetest.set_node({x=i, y=11, z=-22}, {name="default:sandstone"}) + end + elseif v+0 == 4 then + minetest.set_node({x=143, y=12, z=-14}, {name="default:sandstone"}) + minetest.set_node({x=139, y=12, z=-14}, {name="default:sandstone"}) + for j=15,20 do + minetest.set_node({x=144, y=12, z=j*(-1)}, {name="default:sandstone"}) + minetest.set_node({x=138, y=12, z=j*(-1)}, {name="default:sandstone"}) + end + for i=139,143 do + minetest.set_node({x=i, y=12, z=-21}, {name="default:sandstone"}) + end + elseif v+0 == 5 then + for j=14,20 do + for i=139,143 do + minetest.set_node({x=i, y=13, z=j*(-1)}, {name="default:sandstone"}) + end + end + minetest.set_node({x=143, y=13, z=-14}, {name="air"}) + minetest.set_node({x=139, y=13, z=-14}, {name="air"}) + minetest.set_node({x=141, y=13, z=-18}, {name="air"}) + minetest.set_node({x=141, y=9, z=-18}, {name="castrum:fire"}) + elseif v+0 == 0 then + for i=137,145 do + for k=9,13 do + for j=14,22 do + minetest.set_node({x=i, y=k, z=j*(-1)}, {name="air"}) + end + end + end + end +end + function Bridge_Status(player) file = io.open(minetest.get_worldpath().."/SAVE/Bridge.txt", "r") local level = file:read("*l") @@ -5228,29 +6365,33 @@ local knight_pos = { {3, -63, -54, 0}, {4, -62, -54, 0}, {5, -61, -54, 0}, - {6, -60, -55, 1}, {7, -60, -56, 1}, {8, -60, -57, 1}, {9, -60, -58, 1}, {10, -60, -59, 1}, - {11, -61, -60, 2}, {12, -62, -60, 2}, {13, -63, -60, 2}, {14, -64, -60, 2}, {15, -65, -60, 2}, - {16, -66, -59, 3}, {17, -66, -58, 3}, {18, -66, -57, 3}, {19, -66, -56, 3}, + {20, -66, -55, 3}, + {21, -65, -67, 0}, + {22, -64, -67, 0}, + {23, -63, -67, 0}, } function Update_knight(player) file = io.open(minetest.get_worldpath().."/SAVE/Knight_1.txt", "r") local knight1 = file:read("*l") file:close() + file = io.open(minetest.get_worldpath().."/SAVE/Knight_2.txt", "r") + local knight2 = file:read("*l") + file:close() for j=59,67 do for i=53,61 do for k=9,9 do @@ -5259,13 +6400,64 @@ function Update_knight(player) end end minetest.set_node({x=-63, y=9, z=-57}, {name="castrum:fire"}) - for i=1,tonumber(knight1) do + file = io.open(minetest.get_worldpath().."/SAVE/Camp2.txt", "r") + local camp2 = file:read("*l") + file:close() + if tonumber(camp2) > 0 then + for j=59,67 do + for i=66,74 do + for k=9,9 do + minetest.set_node({x=j*(-1), y=k, z=i*(-1)}, {name="air"}) + end + end + end + minetest.set_node({x=-63, y=9, z=-70}, {name="castrum:fire"}) + end + for i=1,tonumber(knight2) do + minetest.set_node({x=knight_pos[i][2], y=9, z=knight_pos[i][3]}, {name="castrum:knight_lv2_sit"}) + for j=1,tonumber(knight_pos[i][4]) do + screwdriver_handler(player, {type="node", under={x=knight_pos[i][2], y=9, z=knight_pos[i][3]}, above={x=knight_pos[i][2], y=9, z=knight_pos[i][3]}}, 1) + end + end + for i=(tonumber(knight2)+1),(tonumber(knight1)+tonumber(knight2)) do minetest.set_node({x=knight_pos[i][2], y=9, z=knight_pos[i][3]}, {name="castrum:knight_lv1_sit"}) for j=1,tonumber(knight_pos[i][4]) do screwdriver_handler(player, {type="node", under={x=knight_pos[i][2], y=9, z=knight_pos[i][3]}, above={x=knight_pos[i][2], y=9, z=knight_pos[i][3]}}, 1) end end end + + + +function Add_horse(player,lv,state) + if state == true then + file = io.open(minetest.get_worldpath().."/SAVE/Horse_"..lv..".txt", "r") + local horse = file:read("*l") + file:close() + file = io.open(minetest.get_worldpath().."/SAVE/Horse_"..lv..".txt", "w") + file:write(tonumber(horse)+1) + file:close() + Update_horse(player) + end +end +local horse_pos = { + {1, -65, 1}, +} +function Update_horse(player) + file = io.open(minetest.get_worldpath().."/SAVE/Horse_1.txt", "r") + local horse1 = file:read("*l") + file:close() + for j=62,65 do + for i=0,6 do + minetest.set_node({x=j*(-1), y=9, z=i}, {name="air"}) + end + end + for i=1,tonumber(horse1) do + minetest.set_node({x=horse_pos[i][2], y=9, z=horse_pos[i][3]}, {name="castrum:horse1"}) + screwdriver_handler(player, {type="node", under={x=horse_pos[i][2], y=9, z=horse_pos[i][3]}, above={x=horse_pos[i][2], y=9, z=horse_pos[i][3]}}, 1) + screwdriver_handler(player, {type="node", under={x=horse_pos[i][2], y=9, z=horse_pos[i][3]}, above={x=horse_pos[i][2], y=9, z=horse_pos[i][3]}}, 1) + end +end function nextrange(x, max) x = x + 1 if x > max then @@ -5333,7 +6525,7 @@ home1.get_formspec = function(player, pos) label2 = "Upgrade" need1 = "64 Cobblestone" need2 = "80 Jungle Wood Planks" - need3 = "Fountain lv.3" + need3 = "Fountain lv.2" else label = (level-5).."/2" label2 = "Upgrade (comming soon)" @@ -5373,8 +6565,14 @@ home2.get_formspec = function(player, pos) need1 = "8 Cobblestone" need2 = "10 Wooden Planks" need3 = "Fountain lv.3" + elseif tonumber(level) == 6 then + label = (level-5).."/2" + label2 = "Upgrade" + need1 = "64 Cobblestone" + need2 = "80 Jungle Wood Planks" + need3 = "Fountain lv.4" else - label = (level-5).."/1" + label = (level-5).."/2" label2 = "Upgrade (comming soon)" end formspec = "size[5,6.5]" @@ -5410,10 +6608,12 @@ bridge.get_formspec = function(player, pos) label = "not build yet ("..math.floor((level/9)*100).."%)" label2 = "Build" need1 = "3 Wooden Planks" + need2 = "Fountain lv.1" elseif tonumber(level) == 9 then label = (level-8).."/2" label2 = "Upgrade" need1 = "27 Jungle Wood Planks" + need2 = "Fountain lv.3" else label = (level-8).."/2" label2 = "Upgrade (comming soon)" @@ -5455,8 +6655,9 @@ moats.get_formspec = function(player, pos) elseif tonumber(level) == 9 then label = (level-8).."/2" label2 = "Upgrade" - need1 = "30 Water Buckets" - need2 = "Bridge lv.2" + need1 = "27 Steel Shovel" + need2 = "30 Water Buckets" + need3 = "Bridge lv.2" else label = (level-8).."/2" label2 = "Upgrade (comming soon)" @@ -5494,11 +6695,13 @@ moate.get_formspec = function(player, pos) label = "not build yet ("..math.floor((level/9)*100).."%)" label2 = "Build" need1 = "3 Stone Shovel" + need2 = "Bridge lv.1" elseif tonumber(level) == 9 then label = (level-8).."/2" label2 = "Upgrade" - need1 = "30 Water Buckets" - need2 = "Bridge lv.2" + need1 = "27 Steel Shovel" + need2 = "30 Water Buckets" + need3 = "Bridge lv.2" else label = (level-8).."/2" label2 = "Upgrade (comming soon)" @@ -5536,11 +6739,13 @@ moatw.get_formspec = function(player, pos) label = "not build yet ("..math.floor((level/9)*100).."%)" label2 = "Build" need1 = "3 Stone Shovel" + need2 = "Bridge lv.1" elseif tonumber(level) == 9 then label = (level-8).."/2" label2 = "Upgrade" - need1 = "30 Water Buckets" - need2 = "Bridge lv.2" + need1 = "27 Steel Shovel" + need2 = "30 Water Buckets" + need3 = "Bridge lv.2" else label = (level-8).."/2" label2 = "Upgrade (comming soon)" @@ -5578,11 +6783,13 @@ moatn.get_formspec = function(player, pos) label = "not build yet ("..math.floor((level/9)*100).."%)" label2 = "Build" need1 = "3 Stone Shovel" + need2 = "Bridge lv.1" elseif tonumber(level) == 9 then label = (level-8).."/2" label2 = "Upgrade" - need1 = "30 Water Buckets" - need2 = "Bridge lv.2" + need1 = "27 Steel Shovel" + need2 = "30 Water Buckets" + need3 = "Bridge lv.2" else label = (level-8).."/2" label2 = "Upgrade (comming soon)" @@ -5621,19 +6828,25 @@ walls.get_formspec = function(player, pos) label2 = "Build" need1 = "3 Cobblestone" elseif tonumber(level) == 14 then - label = (level-13).."/3" + label = (level-13).."/4" label2 = "Upgrade" need1 = "10 Cobblestone" need2 = "3 Stone Sword" need3 = "Fountain lv.1" elseif tonumber(level) == 15 then - label = (level-13).."/3" + label = (level-13).."/4" label2 = "Upgrade" need1 = "40 Cobblestone" need2 = "12 Stone Sword" need3 = "Fountain lv.2" + elseif tonumber(level) == 16 then + label = (level-13).."/4" + label2 = "Upgrade" + need1 = "40 Desert Cobblestone" + need2 = "12 Steel Sword" + need3 = "Fountain lv.3" else - label = (level-13).."/3" + label = (level-13).."/4" label2 = "Upgrade (comming soon)" end formspec = "size[5,6.5]" @@ -5670,19 +6883,25 @@ wallw.get_formspec = function(player, pos) label2 = "Build" need1 = "3 Cobblestone" elseif tonumber(level) == 14 then - label = (level-13).."/3" + label = (level-13).."/4" label2 = "Upgrade" need1 = "10 Cobblestone" need2 = "3 Stone Sword" need3 = "Fountain lv.1" elseif tonumber(level) == 15 then - label = (level-13).."/3" + label = (level-13).."/4" label2 = "Upgrade" need1 = "40 Cobblestone" need2 = "12 Stone Sword" need3 = "Fountain lv.2" + elseif tonumber(level) == 16 then + label = (level-13).."/4" + label2 = "Upgrade" + need1 = "40 Desert Cobblestone" + need2 = "12 Steel Sword" + need3 = "Fountain lv.3" else - label = (level-13).."/3" + label = (level-13).."/4" label2 = "Upgrade (comming soon)" end formspec = "size[5,6.5]" @@ -5719,19 +6938,25 @@ walln.get_formspec = function(player, pos) label2 = "Build" need1 = "3 Cobblestone" elseif tonumber(level) == 14 then - label = (level-13).."/3" + label = (level-13).."/4" label2 = "Upgrade" need1 = "10 Cobblestone" need2 = "3 Stone Sword" need3 = "Fountain lv.1" elseif tonumber(level) == 15 then - label = (level-13).."/3" + label = (level-13).."/4" label2 = "Upgrade" need1 = "40 Cobblestone" need2 = "12 Stone Sword" need3 = "Fountain lv.2" + elseif tonumber(level) == 16 then + label = (level-13).."/4" + label2 = "Upgrade" + need1 = "40 Desert Cobblestone" + need2 = "12 Steel Sword" + need3 = "Fountain lv.3" else - label = (level-13).."/3" + label = (level-13).."/4" label2 = "Upgrade (comming soon)" end formspec = "size[5,6.5]" @@ -5768,19 +6993,25 @@ walle.get_formspec = function(player, pos) label2 = "Build" need1 = "3 Cobblestone" elseif tonumber(level) == 14 then - label = (level-13).."/3" + label = (level-13).."/4" label2 = "Upgrade" need1 = "10 Cobblestone" need2 = "3 Stone Sword" need3 = "Fountain lv.1" elseif tonumber(level) == 15 then - label = (level-13).."/3" + label = (level-13).."/4" label2 = "Upgrade" need1 = "40 Cobblestone" need2 = "12 Stone Sword" need3 = "Fountain lv.3" + elseif tonumber(level) == 16 then + label = (level-13).."/4" + label2 = "Upgrade" + need1 = "40 Desert Cobblestone" + need2 = "12 Steel Sword" + need3 = "Fountain lv.3" else - label = (level-13).."/3" + label = (level-13).."/4" label2 = "Upgrade (comming soon)" end formspec = "size[5,6.5]" @@ -5816,20 +7047,29 @@ fountain.get_formspec = function(player, pos) label = "not build yet ("..math.floor((level/4)*100).."%)" label2 = "Build" need1 = "10 Cobblestone" + need2 = "Walls and Towers lv.1" elseif tonumber(level) == 4 then - label = (level-3).."/3" + label = (level-3).."/4" label2 = "Upgrade" need1 = "25 Cobblestone" need2 = "8 Stone Pickaxe" need3 = "Walls and Towers lv.2" + need4 = "Moats lv.1" elseif tonumber(level) == 5 then - label = (level-3).."/3" + label = (level-3).."/4" label2 = "Upgrade" need1 = "100 Cobblestone" need2 = "32 Stone Pickaxe" need3 = "Walls and Towers lv.3" + elseif tonumber(level) == 6 then + label = (level-3).."/4" + label2 = "Upgrade" + need1 = "100 Desert Cobblestone" + need2 = "32 Steel Pickaxe" + need3 = "Walls and Towers lv.4" + need4 = "Moats lv.2" else - label = (level-3).."/3" + label = (level-3).."/4" label2 = "Upgrade (comming soon)" end formspec = "size[5,6.5]" @@ -5866,19 +7106,25 @@ tower1.get_formspec = function(player, pos) label2 = "Build" need1 = "3 Cobblestone" elseif tonumber(level) == 18 then - label = (level-17).."/3" + label = (level-17).."/4" label2 = "Upgrade" need1 = "10 Cobblestone" need2 = "3 Stone Sword" need3 = "Fountain lv.1" elseif tonumber(level) == 19 then - label = (level-17).."/3" + label = (level-17).."/4" label2 = "Upgrade" need1 = "40 Cobblestone" need2 = "12 Stone Sword" + need3 = "Fountain lv.2" + elseif tonumber(level) == 20 then + label = (level-17).."/4" + label2 = "Upgrade" + need1 = "40 Desert Cobblestone" + need2 = "12 Steel Sword" need3 = "Fountain lv.3" else - label = (level-17).."/3" + label = (level-17).."/4" label2 = "Upgrade (comming soon)" end formspec = "size[5,6.5]" @@ -5915,19 +7161,25 @@ tower2.get_formspec = function(player, pos) label2 = "Build" need1 = "3 Cobblestone" elseif tonumber(level) == 18 then - label = (level-17).."/3" + label = (level-17).."/4" label2 = "Upgrade" need1 = "10 Cobblestone" need2 = "3 Stone Sword" need3 = "Fountain lv.1" elseif tonumber(level) == 19 then - label = (level-17).."/3" + label = (level-17).."/4" label2 = "Upgrade" need1 = "40 Cobblestone" need2 = "12 Stone Sword" + need3 = "Fountain lv.2" + elseif tonumber(level) == 20 then + label = (level-17).."/4" + label2 = "Upgrade" + need1 = "40 Desert Cobblestone" + need2 = "12 Steel Sword" need3 = "Fountain lv.3" else - label = (level-17).."/3" + label = (level-17).."/4" label2 = "Upgrade (comming soon)" end formspec = "size[5,6.5]" @@ -5964,19 +7216,25 @@ tower3.get_formspec = function(player, pos) label2 = "Build" need1 = "3 Cobblestone" elseif tonumber(level) == 18 then - label = (level-17).."/3" + label = (level-17).."/4" label2 = "Upgrade" need1 = "10 Cobblestone" need2 = "3 Stone Sword" need3 = "Fountain lv.1" elseif tonumber(level) == 19 then - label = (level-17).."/3" + label = (level-17).."/4" label2 = "Upgrade" need1 = "40 Cobblestone" need2 = "12 Stone Sword" + need3 = "Fountain lv.2" + elseif tonumber(level) == 20 then + label = (level-17).."/4" + label2 = "Upgrade" + need1 = "40 Desert Cobblestone" + need2 = "12 Steel Sword" need3 = "Fountain lv.3" else - label = (level-17).."/3" + label = (level-17).."/4" label2 = "Upgrade (comming soon)" end formspec = "size[5,6.5]" @@ -6013,19 +7271,25 @@ tower4.get_formspec = function(player, pos) label2 = "Build" need1 = "3 Cobblestone" elseif tonumber(level) == 18 then - label = (level-17).."/3" + label = (level-17).."/4" label2 = "Upgrade" need1 = "10 Cobblestone" need2 = "3 Stone Sword" need3 = "Fountain lv.1" elseif tonumber(level) == 19 then - label = (level-17).."/3" + label = (level-17).."/4" label2 = "Upgrade" need1 = "40 Cobblestone" need2 = "12 Stone Sword" + need3 = "Fountain lv.2" + elseif tonumber(level) == 20 then + label = (level-17).."/4" + label2 = "Upgrade" + need1 = "40 Desert Cobblestone" + need2 = "12 Steel Sword" need3 = "Fountain lv.3" else - label = (level-17).."/3" + label = (level-17).."/4" label2 = "Upgrade (comming soon)" end formspec = "size[5,6.5]" @@ -6062,8 +7326,15 @@ smithy.get_formspec = function(player, pos) label2 = "Build" need1 = "8 Cobblestone" need2 = "6 Wooden Planks" + need3 = "Fountain lv.1" + elseif tonumber(level) == 6 then + label = (level-5).."/2" + label2 = "Upgrade" + need1 = "80 Cobblestone" + need2 = "60 Wooden Planks" + need3 = "Fountain lv.3" else - label = (level-5).."/1" + label = (level-5).."/2" label2 = "Upgrade (comming soon)" end formspec = "size[5,6.5]" @@ -6080,7 +7351,7 @@ smithy.get_formspec = function(player, pos) if tonumber(level) > 5 then formspec = formspec.."button[0,3;5,1;;Crafting]" end - formspec = formspec.."button[0,4;5,1;;del]" + formspec = formspec--.."button[0,4;5,1;;del]" .."image_button[4.5,-0.3;0.8,0.8;;esc;X]" return formspec end @@ -6093,19 +7364,78 @@ stable.get_formspec = function(player, pos) local level = file:read("*l") file:close() local label = "" + local label2 = "" + local need1 = "" + local need2 = "" + local need3 = "" + local need4 = "" if tonumber(level) < 7 then label = "not build yet ("..math.floor((level/7)*100).."%)" + label2 = "Build" + need1 = "100 Wooden Planks" + need2 = "25 River Water Buckets" + need3 = "Fountain lv.4" else label = (level-6).."/1" + label2 = "Upgrade (comming soon)" end formspec = "size[5,6.5]" .."background[5,6.5;1,1;gui_formbg.png;true]" .."listcolors[#00000069;#5A5A5A;#141318;#30434C;#FFF]" .."bgcolor[#080808BB;true]" .."label[0,0;Level: "..label.."]" - .."button[0,1;5,1;;Upgrade]" - --.."button[0,5;5,1;;del]" + .."label[0,0.5;You need:]" + .."label[0,0.8;"..need1.."]" + .."label[0,1.1;"..need2.."]" + .."label[0,1.4;"..need3.."]" + .."label[0,1.7;"..need4.."]" + .."button[0,2;5,1;;"..label2.."]" + --.."button[0,4;5,1;;del]" .."image_button[4.5,-0.3;0.8,0.8;;esc;X]" + if tonumber(level) > 6 then + formspec = formspec.."button[0,3;5,1;;Get Horse]" + end + return formspec +end +local horse = {} +horse.get_formspec = function(player, pos) + if player == nil then + return + end + item = "" + need1 = "" + need2 = "" + max = 0 + max1 = 0 + max2 = 0 + file = io.open(minetest.get_worldpath().."/SAVE/Stable.txt", "r") + local stable = file:read("*l") + file:close() + file = io.open(minetest.get_worldpath().."/SAVE/Horse_1.txt", "r") + local horse_1 = file:read("*l") + file:close() + if player:get_attribute("4item") ~= nil then + item = player:get_attribute("4item") + end + if player:get_attribute("4need1") ~= nil then + need1 = player:get_attribute("4need1") + end + if player:get_attribute("4need2") ~= nil then + need2 = player:get_attribute("4need2") + end + formspec = "size[5,6.5]" + .."background[5,6.5;1,1;gui_formbg.png;true]" + .."listcolors[#00000069;#5A5A5A;#141318;#30434C;#FFF]" + .."bgcolor[#080808BB;true]" + .."label[0,0;For: "..item.."]" + .."label[0,0.5;You need:]" + .."label[0,0.8;"..need1.."]" + .."label[0,1.1;"..need2.."]" + .."label[3.9,0.5;You have:"..horse_1.."/"..(stable-6).."]" + .."button[0,2;5,1;;Get Horse]" + .."button[0,3;1,1;;Horse\nlv.1]" + .."image_button[4.5,-0.3;0.8,0.8;;esc;X]" + .."image_button[3.9,-0.3;0.8,0.8;;back;<]" return formspec end local mine = {} @@ -6129,11 +7459,11 @@ mine.get_formspec = function(player, pos) elseif tonumber(level) == 1 then label = (level).."/3" label2 = "Upgrade" - need1 = "Completed chapter 1" + need1 = "Completed chapter 2" elseif tonumber(level) == 2 then label = (level).."/3" label2 = "Upgrade" - need1 = "Completed chapter 2" + need1 = "Completed chapter 3" else label = (level).."/3" label2 = "Upgrade (comming soon)" @@ -6167,16 +7497,19 @@ quarry.get_formspec = function(player, pos) local need3 = "" local need4 = "" if tonumber(level) == 0 then - label = (level+1).."/3" + label = (level+1).."/4" label2 = "Upgrade" need1 = "Completed chapter 1" elseif tonumber(level) == 1 then - label = (level+1).."/3" + label = (level+1).."/4" label2 = "Upgrade" need1 = "Completed chapter 2" - need2 = "Fountain lv.1" + elseif tonumber(level) == 2 then + label = (level+1).."/4" + label2 = "Upgrade" + need1 = "Completed chapter 3" else - label = (level+1).."/3" + label = (level+1).."/4" label2 = "Upgrade (comming soon)" end formspec = "size[5,6.5]" @@ -6213,16 +7546,19 @@ tree.get_formspec = function(player, pos) label2 = "Build" need1 = "Fountain lv.1" elseif tonumber(level) == 1 then - label = (level).."/3" + label = (level).."/4" label2 = "Upgrade" need1 = "Completed chapter 1" elseif tonumber(level) == 2 then - label = (level).."/3" + label = (level).."/4" label2 = "Upgrade" need1 = "Completed chapter 2" - need2 = "Fountain lv.2" + elseif tonumber(level) == 3 then + label = (level).."/4" + label2 = "Upgrade" + need1 = "Completed chapter 3" else - label = (level).."/3" + label = (level).."/4" label2 = "Upgrade (comming soon)" end formspec = "size[5,6.5]" @@ -6300,8 +7636,13 @@ ship1.get_formspec = function(player, pos) label2 = "Build" need1 = "10 Wooden Planks" need2 = "Fountain lv.2" + elseif tonumber(level) == 5 then + label = (level-4).."/2" + label2 = "Upgrade" + need1 = "50 Jungle Wood Planks" + need2 = "Fountain lv.4" else - label = (level-4).."/1" + label = (level-4).."/2" label2 = "Upgrade (comming soon)" end formspec = "size[5,6.5]" @@ -6315,8 +7656,12 @@ ship1.get_formspec = function(player, pos) .."label[0,1.4;"..need3.."]" .."label[0,1.7;"..need4.."]" .."button[0,2;5,1;;"..label2.."]" - if tonumber(level) > 4 then + if tonumber(level) > 5 then + formspec = formspec.."button[0,3;2.5,1;;Go to Island]" + formspec = formspec.."button[2.5,3;2.5,1;;Go to Mountain]" + elseif tonumber(level) > 4 then formspec = formspec.."button[0,3;5,1;;Go to Island]" + end formspec = formspec--.."button[0,4;5,1;;del]" .."image_button[4.5,-0.3;0.8,0.8;;esc;X]" @@ -6339,6 +7684,9 @@ craft.get_formspec = function(player, pos) if player:get_attribute("need2") ~= nil then need2 = player:get_attribute("need2") end + file = io.open(minetest.get_worldpath().."/SAVE/Smithy.txt", "r") + local level = file:read("*l") + file:close() formspec = "size[5,6.5]" .."background[5,6.5;1,1;gui_formbg.png;true]" .."listcolors[#00000069;#5A5A5A;#141318;#30434C;#FFF]" @@ -6355,6 +7703,11 @@ craft.get_formspec = function(player, pos) .."button[2,4;1,1;;Stone\nSword]" .."image_button[4.5,-0.3;0.8,0.8;;esc;X]" .."image_button[3.9,-0.3;0.8,0.8;;back;<]" + if tonumber(level) == 7 then + formspec = formspec .."button[0,5;1,1;;Steel\nShovel]" + .."button[1,5;1,1;;Steel\nPickaxe]" + .."button[2,5;1,1;;Steel\nSword]" + end return formspec end local lake = {} @@ -6376,16 +7729,60 @@ lake.get_formspec = function(player, pos) label2 = "Build" need1 = "Fountain lv.2" elseif tonumber(level) == 1 then - label = (level).."/3" + label = (level).."/4" label2 = "Upgrade" need1 = "Completed chapter 1" elseif tonumber(level) == 2 then - label = (level).."/3" + label = (level).."/4" label2 = "Upgrade" need1 = "Completed chapter 2" - need2 = "Fountain lv.3" + elseif tonumber(level) == 3 then + label = (level).."/4" + label2 = "Upgrade" + need1 = "Completed chapter 3" else - label = (level).."/3" + label = (level).."/4" + label2 = "Upgrade (comming soon)" + end + formspec = "size[5,6.5]" + .."background[5,6.5;1,1;gui_formbg.png;true]" + .."listcolors[#00000069;#5A5A5A;#141318;#30434C;#FFF]" + .."bgcolor[#080808BB;true]" + .."label[0,0;Level: "..label.."]" + .."label[0,0.5;You need:]" + .."label[0,0.8;"..need1.."]" + .."label[0,1.1;"..need2.."]" + .."label[0,1.4;"..need3.."]" + .."label[0,1.7;"..need4.."]" + .."button[0,2;5,1;;"..label2.."]" + --.."button[0,3;5,1;;del]" + .."image_button[4.5,-0.3;0.8,0.8;;esc;X]" + return formspec +end +local lake2 = {} +lake2.get_formspec = function(player, pos) + if player == nil then + return + end + file = io.open(minetest.get_worldpath().."/SAVE/Lake2.txt", "r") + local level = file:read("*l") + file:close() + local label = "" + local label2 = "" + local need1 = "" + local need2 = "" + local need3 = "" + local need4 = "" + if tonumber(level) < 1 then + label = "not build yet ("..math.floor((level/1)*100).."%)" + label2 = "Build" + need1 = "Fountain lv.4" + elseif tonumber(level) == 1 then + label = (level).."/2" + label2 = "Upgrade" + need1 = "Completed chapter 3" + else + label = (level).."/2" label2 = "Upgrade (comming soon)" end formspec = "size[5,6.5]" @@ -6420,11 +7817,18 @@ barracks.get_formspec = function(player, pos) if tonumber(level) < 6 then label = "not build yet ("..math.floor((level/6)*100).."%)" label2 = "Build" - need1 = "5 Water Buckets" - need2 = "20 Cobblestone" - need3 = "20 Wooden Planks" + need1 = "20 Cobblestone" + need2 = "20 Wooden Planks" + need3 = "Fountain lv.1" + elseif tonumber(level) == 6 then + label = (level-5).."/2" + label2 = "Upgrade" + need1 = "50 Water Buckets" + need2 = "200 Cobblestone" + need3 = "200 Wooden Planks" + need4 = "Fountain lv.3" else - label = (level-5).."/1" + label = (level-5).."/2" label2 = "Upgrade (comming soon)" end formspec = "size[5,6.5]" @@ -6482,6 +7886,44 @@ camp1.get_formspec = function(player, pos) .."image_button[4.5,-0.3;0.8,0.8;;esc;X]" return formspec end +local camp2 = {} +camp2.get_formspec = function(player, pos) + if player == nil then + return + end + file = io.open(minetest.get_worldpath().."/SAVE/Camp2.txt", "r") + local level = file:read("*l") + file:close() + local label = "" + local label2 = "" + local need1 = "" + local need2 = "" + local need3 = "" + local need4 = "" + if tonumber(level) < 1 then + label = "not build yet ("..math.floor((level/1)*100).."%)" + label2 = "Build" + need1 = "Home 2 lv.1" + need2 = "Camp 1 lv.1" + else + label = (level).."/1" + label2 = "Upgrade (comming soon)" + end + formspec = "size[5,6.5]" + .."background[5,6.5;1,1;gui_formbg.png;true]" + .."listcolors[#00000069;#5A5A5A;#141318;#30434C;#FFF]" + .."bgcolor[#080808BB;true]" + .."label[0,0;Level: "..label.."]" + .."label[0,0.5;You need:]" + .."label[0,0.8;"..need1.."]" + .."label[0,1.1;"..need2.."]" + .."label[0,1.4;"..need3.."]" + .."label[0,1.7;"..need4.."]" + .."button[0,2;5,1;;"..label2.."]" + --.."button[0,3;5,1;;del]" + .."image_button[4.5,-0.3;0.8,0.8;;esc;X]" + return formspec +end local knight = {} knight.get_formspec = function(player, pos) if player == nil then @@ -6499,6 +7941,9 @@ knight.get_formspec = function(player, pos) file = io.open(minetest.get_worldpath().."/SAVE/Home2.txt", "r") local home2 = file:read("*l") file:close() + file = io.open(minetest.get_worldpath().."/SAVE/Barracks.txt", "r") + local barracks = file:read("*l") + file:close() if tonumber(home1) == 6 then max1 = max1+8 elseif tonumber(home1) == 7 then @@ -6506,13 +7951,21 @@ knight.get_formspec = function(player, pos) end if tonumber(home2) == 6 then max1 = max1+8 + elseif tonumber(home2) == 7 then + max1 = max1+11 end file = io.open(minetest.get_worldpath().."/SAVE/Camp1.txt", "r") local camp1 = file:read("*l") file:close() + file = io.open(minetest.get_worldpath().."/SAVE/Camp2.txt", "r") + local camp2 = file:read("*l") + file:close() if tonumber(camp1) == 1 then max2 = max2+20 end + if tonumber(camp2) == 1 then + max2 = max2+20 + end if max1 > max2 then max = max2 elseif max2 > max1 then @@ -6523,7 +7976,9 @@ knight.get_formspec = function(player, pos) file = io.open(minetest.get_worldpath().."/SAVE/Knight_1.txt", "r") local knight_1 = file:read("*l") file:close() - + file = io.open(minetest.get_worldpath().."/SAVE/Knight_2.txt", "r") + local knight_2 = file:read("*l") + file:close() if player:get_attribute("2item") ~= nil then item = player:get_attribute("2item") end @@ -6541,11 +7996,14 @@ knight.get_formspec = function(player, pos) .."label[0,0.5;You need:]" .."label[0,0.8;"..need1.."]" .."label[0,1.1;"..need2.."]" - .."label[3.9,0.5;You have:"..knight_1.."/"..max.."]" + .."label[3.9,0.5;You have:"..(knight_1+knight_2).."/"..max.."]" .."button[0,2;5,1;;Get Knight]" .."button[0,3;1,1;;Knight\nlv.1]" .."image_button[4.5,-0.3;0.8,0.8;;esc;X]" .."image_button[3.9,-0.3;0.8,0.8;;back;<]" + if tonumber(barracks) > 6 then + formspec = formspec.."button[1,3;1,1;;Knight\nlv.2]" + end return formspec end local battleground = {} @@ -6568,16 +8026,22 @@ battleground.get_formspec = function(player, pos) if tonumber(level) < 4 then label = "not build yet ("..math.floor((level/4)*100).."%)" label2 = "Build" - need1 = "Fountain lv.1" - need2 = "4 Cobblestone" + need1 = "4 Cobblestone" + need2 = "Fountain lv.1" elseif tonumber(level) == 4 then - label = (level-3).."/2" + label = (level-3).."/3" label2 = "Upgrade" need1 = "Completed chapter 1" - need2 = "Fountain lv.2" - need3 = "40 Cobblestone" + need2 = "40 Cobblestone" + need3 = "Fountain lv.2" + elseif tonumber(level) == 5 then + label = (level-3).."/3" + label2 = "Upgrade" + need1 = "Completed chapter 2" + need2 = "400 Cobblestone" + need3 = "Fountain lv.3" else - label = (level-3).."/2" + label = (level-3).."/3" label2 = "Upgrade (comming soon)" end formspec = "size[5,6.5]" @@ -6595,10 +8059,12 @@ battleground.get_formspec = function(player, pos) formspec = formspec.."button[0,3;5,1;;Start Chapter 1]" elseif tonumber(chapter) == 2 and tonumber(level) > 4 then formspec = formspec.."button[0,3;5,1;;Start Chapter 2]" - elseif tonumber(chapter) == 2 and tonumber(level) > 3 then + elseif tonumber(chapter) == 2 then formspec = formspec.."button[0,3;5,1;;Start Chapter 2 (battleground lv.2 needed)]" - elseif tonumber(chapter) == 3 and tonumber(level) > 4 then - formspec = formspec.."button[0,3;5,1;;Start Chapter 3 (comming soon)]" + elseif tonumber(chapter) == 3 and tonumber(level) > 5 then + formspec = formspec.."button[0,3;5,1;;Start Chapter 3]" + elseif tonumber(chapter) == 3 then + formspec = formspec.."button[0,3;5,1;;Start Chapter 3 (battleground lv.3 needed)]" end formspec = formspec--.."button[0,4;5,1;;del]" .."image_button[4.5,-0.3;0.8,0.8;;esc;X]" @@ -6766,8 +8232,15 @@ island_ship1.get_formspec = function(player, pos) local need2 = "" local need3 = "" local need4 = "" - label = (level-4).."/1" - label2 = "Upgrade (comming soon)" + if tonumber(level) == 5 then + label = (level-4).."/2" + label2 = "Upgrade" + need1 = "50 Jungle Wood Planks" + need2 = "Fountain lv.4" + else + label = (level-4).."/2" + label2 = "Upgrade (comming soon)" + end formspec = "size[5,6.5]" .."background[5,6.5;1,1;gui_formbg.png;true]" .."listcolors[#00000069;#5A5A5A;#141318;#30434C;#FFF]" @@ -6780,6 +8253,7 @@ island_ship1.get_formspec = function(player, pos) .."label[0,1.7;"..need4.."]" .."button[0,2;5,1;;"..label2.."]" .."button[0,3;5,1;;Go Back]" + --.."button[0,4;5,1;;del]" .."image_button[4.5,-0.3;0.8,0.8;;esc;X]" return formspec end @@ -6820,6 +8294,87 @@ island_fountain.get_formspec = function(player, pos) .."image_button[4.5,-0.3;0.8,0.8;;esc;X]" return formspec end +local island_smithy = {} +island_smithy.get_formspec = function(player, pos) + if player == nil then + return + end + file = io.open(minetest.get_worldpath().."/SAVE/Island_Smithy.txt", "r") + local level = file:read("*l") + file:close() + local label = "" + local label2 = "" + local need1 = "" + local need2 = "" + local need3 = "" + local need4 = "" + if tonumber(level) < 6 then + label = "not build yet ("..math.floor((level/6)*100).."%)" + label2 = "Build" + need1 = "80 Sand" + need2 = "60 Wood" + need3 = "Island Fountain lv.1" + else + label = (level-5).."/1" + label2 = "Upgrade (comming soon)" + end + formspec = "size[5,6.5]" + .."background[5,6.5;1,1;gui_formbg.png;true]" + .."listcolors[#00000069;#5A5A5A;#141318;#30434C;#FFF]" + .."bgcolor[#080808BB;true]" + .."label[0,0;Level: "..label.."]" + .."label[0,0.5;You need:]" + .."label[0,0.8;"..need1.."]" + .."label[0,1.1;"..need2.."]" + .."label[0,1.4;"..need3.."]" + .."label[0,1.7;"..need4.."]" + .."button[0,2;5,1;;"..label2.."]" + --.."button[0,4;5,1;;del]" + .."image_button[4.5,-0.3;0.8,0.8;;esc;X]" + if tonumber(level) > 5 then + formspec = formspec.."button[0,3;5,1;;Crafting]" + end + return formspec +end +local craft2 = {} +craft2.get_formspec = function(player, pos) + if player == nil then + return + end + item = "" + need1 = "" + need2 = "" + need3 = "" + if player:get_attribute("3item") ~= nil then + item = player:get_attribute("3item") + end + if player:get_attribute("3need1") ~= nil then + need1 = player:get_attribute("3need1") + end + if player:get_attribute("3need2") ~= nil then + need2 = player:get_attribute("3need2") + end + if player:get_attribute("3need3") ~= nil then + need3 = player:get_attribute("3need3") + end + file = io.open(minetest.get_worldpath().."/SAVE/Smithy.txt", "r") + local level = file:read("*l") + file:close() + formspec = "size[5,6.5]" + .."background[5,6.5;1,1;gui_formbg.png;true]" + .."listcolors[#00000069;#5A5A5A;#141318;#30434C;#FFF]" + .."bgcolor[#080808BB;true]" + .."label[0,0;For: "..item.."]" + .."label[0,0.5;You need:]" + .."label[0,0.8;"..need1.."]" + .."label[0,1.1;"..need2.."]" + .."label[0,1.4;"..need3.."]" + .."button[0,2;5,1;;Craft]" + .."button[0,3;1,1;;Glass]" + .."image_button[4.5,-0.3;0.8,0.8;;esc;X]" + .."image_button[3.9,-0.3;0.8,0.8;;back;<]" + return formspec +end local sandmine = {} sandmine.get_formspec = function(player, pos) if player == nil then @@ -6834,16 +8389,163 @@ sandmine.get_formspec = function(player, pos) local need3 = "" local need4 = "" if tonumber(level) == 0 then - label = (level+1).."/3" + label = (level+1).."/2" label2 = "Upgrade" - need1 = "Completed chapter 1" - elseif tonumber(level) == 1 then - label = (level+1).."/3" - label2 = "Upgrade" - need1 = "Completed chapter 2" - need2 = "Island Fountain lv.1" + need1 = "Completed chapter 3" + --elseif tonumber(level) == 1 then + -- label = (level+1).."/3" + -- label2 = "Upgrade" + -- need1 = "Completed chapter 2" + -- need2 = "Island Fountain lv.1" else - label = (level+1).."/3" + label = (level+1).."/2" + label2 = "Upgrade (comming soon)" + end + formspec = "size[5,6.5]" + .."background[5,6.5;1,1;gui_formbg.png;true]" + .."listcolors[#00000069;#5A5A5A;#141318;#30434C;#FFF]" + .."bgcolor[#080808BB;true]" + .."label[0,0;Level: "..label.."]" + .."label[0,0.5;You need:]" + .."label[0,0.8;"..need1.."]" + .."label[0,1.1;"..need2.."]" + .."label[0,1.4;"..need3.."]" + .."label[0,1.7;"..need4.."]" + .."button[0,2;5,1;;"..label2.."]" + --.."button[0,3;5,1;;del]" + .."image_button[4.5,-0.3;0.8,0.8;;esc;X]" + return formspec +end +local cactusfarm = {} +cactusfarm.get_formspec = function(player, pos) + if player == nil then + return + end + file = io.open(minetest.get_worldpath().."/SAVE/Cactusfarm.txt", "r") + local level = file:read("*l") + file:close() + local label = "" + local label2 = "" + local need1 = "" + local need2 = "" + local need3 = "" + local need4 = "" + if tonumber(level) < 1 then + label = "not build yet ("..math.floor((level/1)*100).."%)" + label2 = "Build" + need1 = "Island Fountain lv.1" + elseif tonumber(level) == 1 then + label = (level).."/2" + label2 = "Upgrade" + need1 = "Completed chapter 3" + else + label = (level).."/2" + label2 = "Upgrade (comming soon)" + end + formspec = "size[5,6.5]" + .."background[5,6.5;1,1;gui_formbg.png;true]" + .."listcolors[#00000069;#5A5A5A;#141318;#30434C;#FFF]" + .."bgcolor[#080808BB;true]" + .."label[0,0;Level: "..label.."]" + .."label[0,0.5;You need:]" + .."label[0,0.8;"..need1.."]" + .."label[0,1.1;"..need2.."]" + .."label[0,1.4;"..need3.."]" + .."label[0,1.7;"..need4.."]" + .."button[0,2;5,1;;"..label2.."]" + --.."button[0,3;5,1;;del]" + .."image_button[4.5,-0.3;0.8,0.8;;esc;X]" + return formspec +end +local mountain_quarry = {} +mountain_quarry.get_formspec = function(player, pos) + if player == nil then + return + end + file = io.open(minetest.get_worldpath().."/SAVE/Mountain_Quarry.txt", "r") + local level = file:read("*l") + file:close() + local label2 = "" + local need1 = "" + local need2 = "" + local need3 = "" + local need4 = "" + label = (level+1).."/1" + label2 = "Upgrade (comming soon)" + formspec = "size[5,6.5]" + .."background[5,6.5;1,1;gui_formbg.png;true]" + .."listcolors[#00000069;#5A5A5A;#141318;#30434C;#FFF]" + .."bgcolor[#080808BB;true]" + .."label[0,0;Level: "..label.."]" + .."label[0,0.5;You need:]" + .."label[0,0.8;"..need1.."]" + .."label[0,1.1;"..need2.."]" + .."label[0,1.4;"..need3.."]" + .."label[0,1.7;"..need4.."]" + .."button[0,2;5,1;;"..label2.."]" + --.."button[0,3;5,1;;del]" + .."image_button[4.5,-0.3;0.8,0.8;;esc;X]" + return formspec +end +local mountain_fountain = {} +mountain_fountain.get_formspec = function(player, pos) + if player == nil then + return + end + file = io.open(minetest.get_worldpath().."/SAVE/Mountain_Fountain.txt", "r") + local level = file:read("*l") + file:close() + local label = "" + local label2 = "" + local need1 = "" + local need2 = "" + local need3 = "" + local need4 = "" + if tonumber(level) < 3 then + label = "not build yet ("..math.floor((level/3)*100).."%)" + label2 = "Build" + need1 = "50 Moosy Cobblestone" + else + label = (level-2).."/1" + label2 = "Upgrade (comming soon)" + end + formspec = "size[5,6.5]" + .."background[5,6.5;1,1;gui_formbg.png;true]" + .."listcolors[#00000069;#5A5A5A;#141318;#30434C;#FFF]" + .."bgcolor[#080808BB;true]" + .."label[0,0;Level: "..label.."]" + .."label[0,0.5;You need:]" + .."label[0,0.8;"..need1.."]" + .."label[0,1.1;"..need2.."]" + .."label[0,1.4;"..need3.."]" + .."label[0,1.7;"..need4.."]" + .."button[0,2;5,1;;"..label2.."]" + --.."button[0,3;5,1;;del]" + .."image_button[4.5,-0.3;0.8,0.8;;esc;X]" + return formspec +end +local island_home1 = {} +island_home1.get_formspec = function(player, pos) + if player == nil then + return + end + file = io.open(minetest.get_worldpath().."/SAVE/Island_Home1.txt", "r") + local level = file:read("*l") + file:close() + local label = "" + local label2 = "" + local need1 = "" + local need2 = "" + local need3 = "" + local need4 = "" + if tonumber(level) < 5 then + label = "not build yet ("..math.floor((level/5)*100).."%)" + label2 = "Build" + need1 = "80 Sand" + need2 = "10 Glass" + need3 = "Island Fountain lv.1" + else + label = (level-4).."/1" label2 = "Upgrade (comming soon)" end formspec = "size[5,6.5]" @@ -7012,7 +8714,7 @@ minetest.register_node("castrum:smithy",{ minetest.register_node("castrum:stable",{ tiles = {"default_diamond_block.png"}, description = "Configurate Stable", - groups = {snappy=1,choppy=2,oddly_breakable_by_hand=2,flammable=3}, + --groups = {snappy=1,choppy=2,oddly_breakable_by_hand=2,flammable=3}, on_punch = function(pos, node, player, pointed_thing) minetest.show_formspec(player:get_player_name(), "stable" , stable.get_formspec(player)) end, @@ -7065,6 +8767,14 @@ minetest.register_node("castrum:lake",{ minetest.show_formspec(player:get_player_name(), "lake" , lake.get_formspec(player)) end, }) +minetest.register_node("castrum:lake2",{ + tiles = {"default_diamond_block.png"}, + description = "Configurate Lake 2", + --groups = {snappy=1,choppy=2,oddly_breakable_by_hand=2,flammable=3}, + on_punch = function(pos, node, player, pointed_thing) + minetest.show_formspec(player:get_player_name(), "lake2" , lake2.get_formspec(player)) + end, +}) minetest.register_node("castrum:barracks",{ tiles = {"default_diamond_block.png"}, description = "Configurate Barracks", @@ -7081,6 +8791,14 @@ minetest.register_node("castrum:camp1",{ minetest.show_formspec(player:get_player_name(), "camp1" , camp1.get_formspec(player)) end, }) +minetest.register_node("castrum:camp2",{ + tiles = {"default_diamond_block.png"}, + description = "Configurate Camp 2", + --groups = {snappy=1,choppy=2,oddly_breakable_by_hand=2,flammable=3}, + on_punch = function(pos, node, player, pointed_thing) + minetest.show_formspec(player:get_player_name(), "camp2" , camp2.get_formspec(player)) + end, +}) minetest.register_node("castrum:island_walle",{ tiles = {"default_diamond_block.png"}, description = "Configurate Island Walle", @@ -7121,6 +8839,14 @@ minetest.register_node("castrum:island_fountain",{ minetest.show_formspec(player:get_player_name(), "island_fountain" , island_fountain.get_formspec(player)) end, }) +minetest.register_node("castrum:island_smithy",{ + tiles = {"default_diamond_block.png"}, + description = "Configurate Island Smithy", + --groups = {snappy=1,choppy=2,oddly_breakable_by_hand=2,flammable=3}, + on_punch = function(pos, node, player, pointed_thing) + minetest.show_formspec(player:get_player_name(), "island_smithy" , island_smithy.get_formspec(player)) + end, +}) minetest.register_node("castrum:island_ship1",{ tiles = {"default_diamond_block.png"}, description = "Configurate Island Ship 1", @@ -7137,6 +8863,14 @@ minetest.register_node("castrum:sandmine",{ minetest.show_formspec(player:get_player_name(), "sandmine" , sandmine.get_formspec(player)) end, }) +minetest.register_node("castrum:cactusfarm",{ + tiles = {"default_diamond_block.png"}, + description = "Configurate Cactusfarm", + --groups = {snappy=1,choppy=2,oddly_breakable_by_hand=2,flammable=3}, + on_punch = function(pos, node, player, pointed_thing) + minetest.show_formspec(player:get_player_name(), "cactusfarm" , cactusfarm.get_formspec(player)) + end, +}) minetest.register_node("castrum:battleground",{ tiles = {"default_diamond_block.png"}, description = "Configurate Battleground", @@ -7153,16 +8887,41 @@ minetest.register_node("castrum:bridge_status",{ Bridge_Status(player) end, }) +minetest.register_node("castrum:mountain_quarry",{ + tiles = {"default_diamond_block.png"}, + description = "Configurate Mountain Quarry", + --groups = {snappy=1,choppy=2,oddly_breakable_by_hand=2,flammable=3}, + on_punch = function(pos, node, player, pointed_thing) + minetest.show_formspec(player:get_player_name(), "mountain_quarry" , mountain_quarry.get_formspec(player)) + end, +}) +minetest.register_node("castrum:mountain_fountain",{ + tiles = {"default_diamond_block.png"}, + description = "Configurate Mountain Fountain", + --groups = {snappy=1,choppy=2,oddly_breakable_by_hand=2,flammable=3}, + on_punch = function(pos, node, player, pointed_thing) + minetest.show_formspec(player:get_player_name(), "mountain_fountain" , mountain_fountain.get_formspec(player)) + end, +}) +minetest.register_node("castrum:island_home1",{ + tiles = {"default_diamond_block.png"}, + description = "Configurate Island Home 1", + --groups = {snappy=1,choppy=2,oddly_breakable_by_hand=2,flammable=3}, + on_punch = function(pos, node, player, pointed_thing) + minetest.show_formspec(player:get_player_name(), "island_home1" , island_home1.get_formspec(player)) + end, +}) minetest.register_node("castrum:fight1",{ tiles = {"castrum_fight1.png"}, description = "Fight 1", - groups = {snappy=1,choppy=2,oddly_breakable_by_hand=2,flammable=3}, + --groups = {snappy=1,choppy=2,oddly_breakable_by_hand=2,flammable=3}, }) minetest.register_node("castrum:fight2",{ tiles = {"castrum_fight2.png"}, description = "Fight 2", --groups = {snappy=1,choppy=2,oddly_breakable_by_hand=2,flammable=3}, }) + minetest.register_craftitem("castrum:soul", { description = "Soul", inventory_image = "castrum_soul.png", @@ -7179,10 +8938,102 @@ minetest.register_craftitem("castrum:pick_stone", { description = "Stone Pickaxe", inventory_image = "default_tool_stonepick.png", }) +minetest.register_craftitem("castrum:shovel_steel", { + description = "Steel Shovel", + inventory_image = "default_tool_steelshovel.png", +}) +minetest.register_craftitem("castrum:sword_steel", { + description = "Steel Sword", + inventory_image = "default_tool_steelsword.png", +}) +minetest.register_craftitem("castrum:pick_steel", { + description = "Steel Pickaxe", + inventory_image = "default_tool_steelpick.png", +}) + minetest.register_craftitem("castrum:bucket_water", { description = "Water Bucket", inventory_image = "bucket_water.png", }) +minetest.register_craftitem("castrum:bucket_river_water", { + description = "River Water Bucket", + inventory_image = "bucket_river_water.png", +}) + +minetest.register_craftitem("castrum:horse1_item", { + description = "Horse lv.1", + inventory_image = "castrum_horse_inv.png", + on_place = function(itemstack, placer, pointed_thing) + local pos = pointed_thing.under + if minetest.get_node(pos).name == "castrum:knight_lv1" then + itemstack:take_item() + minetest.set_node(pos, {name="castrum:horse1"}) + minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z}, {name="castrum:knight_lv1_sit"}) + screwdriver_handler(placer, {type="node", under={x=pos.x,y=pos.y+1,z=pos.z}, above={x=pos.x,y=pos.y+1,z=pos.z}}, 1) + return itemstack + end + if minetest.get_node(pos).name == "castrum:knight_lv2" then + itemstack:take_item() + minetest.set_node(pos, {name="castrum:horse1"}) + minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z}, {name="castrum:knight_lv2_sit"}) + screwdriver_handler(placer, {type="node", under={x=pos.x,y=pos.y+1,z=pos.z}, above={x=pos.x,y=pos.y+1,z=pos.z}}, 1) + return itemstack + end + end, +}) + +minetest.register_craftitem("castrum:horse1_item_1", { + description = "Horse lv.1 with knight lv.1", + inventory_image = "castrum_horse_inv.png^castrum_num1.png", + on_place = function(itemstack, placer, pointed_thing) + local pos = pointed_thing.under + if minetest.get_node(pos).name == "castrum:fight1" then + itemstack:take_item() + minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z}, {name="castrum:horse1"}) + minetest.set_node({x=pos.x,y=pos.y+2,z=pos.z}, {name="castrum:knight_lv1_sit"}) + screwdriver_handler(placer, {type="node", under={x=pos.x,y=pos.y+2,z=pos.z}, above={x=pos.x,y=pos.y+2,z=pos.z}}, 1) + local inv = placer:get_inventory() + inv:remove_item("main", "castrum:knight_lv2") + local fight = placer:get_attribute("fight") + placer:set_attribute("fightdig", "false") + if fight == "true" then + for j=144,174 do + for i=51,81 do + minetest.set_node({x=j*(-1), y=8, z=i*(-1)}, {name="default:dirt_with_grass"}) + end + end + fight_step2(placer) + end + return itemstack + end + end, +}) +minetest.register_craftitem("castrum:horse1_item_2", { + description = "Horse lv.1 with knight lv.2", + inventory_image = "castrum_horse_inv.png^castrum_num2.png", + on_place = function(itemstack, placer, pointed_thing) + local pos = pointed_thing.under + if minetest.get_node(pos).name == "castrum:fight1" then + itemstack:take_item() + minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z}, {name="castrum:horse1"}) + minetest.set_node({x=pos.x,y=pos.y+2,z=pos.z}, {name="castrum:knight_lv2_sit"}) + screwdriver_handler(placer, {type="node", under={x=pos.x,y=pos.y+2,z=pos.z}, above={x=pos.x,y=pos.y+2,z=pos.z}}, 1) + local inv = placer:get_inventory() + inv:remove_item("main", "castrum:knight_lv2") + local fight = placer:get_attribute("fight") + placer:set_attribute("fightdig", "false") + if fight == "true" then + for j=144,174 do + for i=51,81 do + minetest.set_node({x=j*(-1), y=8, z=i*(-1)}, {name="default:dirt_with_grass"}) + end + end + fight_step2(placer) + end + return itemstack + end + end, +}) minetest.register_node("castrum:cobble",{ tiles = {"default_cobble.png"}, description = "Cobble", @@ -7193,6 +9044,16 @@ minetest.register_node("castrum:comming_soon",{ description = "Comming soon", groups = {snappy=1,choppy=2,oddly_breakable_by_hand=2,flammable=3}, }) +minetest.register_node("castrum:cactus",{ + tiles = {"default_cactus_top.png", "default_cactus_top.png","default_cactus_side.png"}, + description = "Cactus", + groups = {snappy=1,choppy=2,oddly_breakable_by_hand=2,flammable=3}, +}) +minetest.register_node("castrum:dirt_with_grass", { + description = "Dirt with Grass", + tiles = {"default_grass.png", "default_dirt.png",{name = "default_dirt.png^default_grass_side.png",tileable_vertical = false}}, + groups = {crumbly = 3}, +}) minetest.register_node("castrum:character1", { description = "character", drawtype = "mesh", @@ -7202,6 +9063,18 @@ minetest.register_node("castrum:character1", { paramtype2 = "facedir", --groups = {cracky=3, oddly_breakable_by_hand=2}, }) + +minetest.register_node("castrum:horse1", { + description = "Horse lv.1", + drawtype = "mesh", + mesh = "horse.obj", + tiles = {"castrum_horse.png"}, + paramtype = "light", + paramtype2 = "facedir", + groups = {snappy=3}, + +}) + minetest.register_node("castrum:castrum_knight1", { description = "character", drawtype = "mesh", @@ -7209,7 +9082,7 @@ minetest.register_node("castrum:castrum_knight1", { tiles = {"castrum_knight.png"}, paramtype = "light", paramtype2 = "facedir", - groups = {cracky=3, oddly_breakable_by_hand=2}, + --groups = {cracky=3, oddly_breakable_by_hand=2}, }) minetest.register_node("castrum:castrum_knight2", { description = "character", @@ -7247,6 +9120,15 @@ minetest.register_node("castrum:knight_lv1", { paramtype2 = "facedir", groups = {snappy=3}, }) +minetest.register_node("castrum:knight_lv2", { + description = "character", + drawtype = "mesh", + mesh = "character.obj", + tiles = {"castrum_knight_lv2.png"}, + paramtype = "light", + paramtype2 = "facedir", + groups = {snappy=3}, +}) minetest.register_node("castrum:knight_lv1_sit", { description = "character", drawtype = "mesh", @@ -7256,6 +9138,15 @@ minetest.register_node("castrum:knight_lv1_sit", { paramtype2 = "facedir", --groups = {cracky=3, oddly_breakable_by_hand=2}, }) +minetest.register_node("castrum:knight_lv2_sit", { + description = "character", + drawtype = "mesh", + mesh = "character2.obj", + tiles = {"castrum_knight_lv2.png"}, + paramtype = "light", + paramtype2 = "facedir", + --groups = {cracky=3, oddly_breakable_by_hand=2}, +}) minetest.register_node("castrum:knight_lv1_dark", { description = "character", drawtype = "mesh", @@ -7263,7 +9154,16 @@ minetest.register_node("castrum:knight_lv1_dark", { tiles = {"castrum_knight_lv1_dark.png"}, paramtype = "light", paramtype2 = "facedir", - groups = {cracky=3, oddly_breakable_by_hand=2}, + --groups = {cracky=3, oddly_breakable_by_hand=2}, +}) +minetest.register_node("castrum:knight_lv2_dark", { + description = "character", + drawtype = "mesh", + mesh = "character.obj", + tiles = {"castrum_knight_lv2_dark.png"}, + paramtype = "light", + paramtype2 = "facedir", + --groups = {cracky=3, oddly_breakable_by_hand=2}, }) minetest.register_node("castrum:fire", { description = "Fire", @@ -7356,12 +9256,12 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) upgrade = true elseif tonumber(level) < 6 and inv:contains_item("main", "default:cobble 8") and inv:contains_item("main", "default:wood 10") then txt = "build fountain first" - elseif tonumber(level) == 6 and inv:contains_item("main", "default:cobble 64") and inv:contains_item("main", "default:junglewood 80") and tonumber(fountain) > 5 then + elseif tonumber(level) == 6 and inv:contains_item("main", "default:cobble 64") and inv:contains_item("main", "default:junglewood 80") and tonumber(fountain) > 4 then inv:remove_item("main", "default:junglewood 80") inv:remove_item("main", "default:wood 64") upgrade = true elseif tonumber(level) == 6 and inv:contains_item("main", "default:cobble 64") and inv:contains_item("main", "default:junglewood 80") then - txt = "upgrade fountain to lv.3 first" + txt = "upgrade fountain to lv.2 first" end if upgrade == false then minetest.chat_send_player(player:get_player_name(), txt) @@ -7402,11 +9302,17 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) upgrade = true elseif tonumber(level) < 6 and inv:contains_item("main", "default:cobble 8") and inv:contains_item("main", "default:wood 10") then txt = "upgrade fountain to lv.3 first" + elseif tonumber(level) == 6 and inv:contains_item("main", "default:cobble 64") and inv:contains_item("main", "default:junglewood 80") and tonumber(fountain) > 6 then + inv:remove_item("main", "default:junglewood 80") + inv:remove_item("main", "default:wood 64") + upgrade = true + elseif tonumber(level) == 6 and inv:contains_item("main", "default:cobble 64") and inv:contains_item("main", "default:junglewood 80") then + txt = "upgrade fountain to lv.4 first" end if upgrade == false then minetest.chat_send_player(player:get_player_name(), txt) end - if (tonumber(level)) < 6 and upgrade then + if (tonumber(level)) < 7 and upgrade then Home2(tonumber(level)+1,player) file = io.open(minetest.get_worldpath().."/SAVE/Home2.txt", "w") file:write(tonumber(level)+1) @@ -7430,17 +9336,26 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) file = io.open(minetest.get_worldpath().."/SAVE/Bridge.txt", "r") local level = file:read("*l") file:close() + file = io.open(minetest.get_worldpath().."/SAVE/Fountain.txt", "r") + local fountain = file:read("*l") + file:close() + local inv = player:get_inventory() local upgrade = false - if tonumber(level) < 9 and inv:contains_item("main", "default:wood 3") then + local txt = "not enough items" + if tonumber(level) < 9 and inv:contains_item("main", "default:wood 3") and tonumber(fountain) > 3 then inv:remove_item("main", "default:wood 3") upgrade = true - elseif tonumber(level) == 9 and inv:contains_item("main", "default:junglewood 27") then + elseif tonumber(level) < 9 and inv:contains_item("main", "default:wood 3") then + txt = "build fountain first" + elseif tonumber(level) == 9 and inv:contains_item("main", "default:junglewood 27") and tonumber(fountain) > 5 then inv:remove_item("main", "default:junglewood 27") upgrade = true + elseif tonumber(level) == 9 and inv:contains_item("main", "default:junglewood 27") then + txt = "upgrade fountain to lv.3 first" end if upgrade == false then - minetest.chat_send_player(player:get_player_name(), "not enough items") + minetest.chat_send_player(player:get_player_name(), txt) end if (tonumber(level)) < 10 and upgrade then Bridge(tonumber(level)+1,player) @@ -7465,15 +9380,21 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) elseif v == "Upgrade" then file = io.open(minetest.get_worldpath().."/SAVE/Bridge.txt", "r") local level = file:read("*l") + file:close() + file = io.open(minetest.get_worldpath().."/SAVE/Fountain.txt", "r") + local fountain = file:read("*l") file:close() local inv = player:get_inventory() local upgrade = false - if tonumber(level) == 9 and inv:contains_item("main", "default:junglewood 27") then + local txt = "not enough items" + if tonumber(level) == 9 and inv:contains_item("main", "default:junglewood 27") and tonumber(fountain) > 5 then inv:remove_item("main", "default:junglewood 27") upgrade = true + elseif tonumber(level) == 9 and inv:contains_item("main", "default:junglewood 27") then + txt = "upgrade fountain to lv.3 first" end if upgrade == false then - minetest.chat_send_player(player:get_player_name(), "not enough items") + minetest.chat_send_player(player:get_player_name(), txt) end if (tonumber(level)) < 10 and upgrade then Bridge2(tonumber(level)+1,player) @@ -7510,10 +9431,11 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) upgrade = true elseif tonumber(level) < 9 and inv:contains_item("main", "castrum:shovel_stone 3") then txt = "build bridge first" - elseif tonumber(level) == 9 and inv:contains_item("main", "castrum:bucket_water 30") and tonumber(bridge) > 9 then - inv:remove_item("main", "castrum:bucket_water 30") + elseif tonumber(level) == 9 and inv:contains_item("main", "castrum:shovel_steel 27") and inv:contains_item("main", "castrum:bucket_water 30") and tonumber(bridge) > 9 then + inv:remove_item("main", "castrum:shovel_steel 27") + inv:remove_item("main", "castrum:bucket_water 30") upgrade = true - elseif tonumber(level) == 9 and inv:contains_item("main", "castrum:bucket_water 30") then + elseif tonumber(level) == 9 and inv:contains_item("main", "castrum:shovel_steel 27") and inv:contains_item("main", "castrum:bucket_water 30") then txt = "upgrade bridge to lv.2 first" end if upgrade == false then @@ -7564,11 +9486,17 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) upgrade = true elseif tonumber(level) == 15 and inv:contains_item("main", "default:cobble 40") and inv:contains_item("main", "castrum:sword_stone 12") then txt = "upgrade fountain to lv.2 first" + elseif tonumber(level) == 16 and inv:contains_item("main", "default:desert_cobble 40") and inv:contains_item("main", "castrum:sword_steel 12") and tonumber(fountain) > 5 then + inv:remove_item("main", "default:desert_cobble 40") + inv:remove_item("main", "castrum:sword_steel 12") + upgrade = true + elseif tonumber(level) == 16 and inv:contains_item("main", "default:desert_cobble 40") and inv:contains_item("main", "castrum:sword_steel 12") then + txt = "upgrade fountain to lv.3 first" end if upgrade == false then minetest.chat_send_player(player:get_player_name(), txt) end - if (tonumber(level)) < 16 and upgrade then + if (tonumber(level)) < 17 and upgrade then Wall_south(tonumber(level)+1,player) file = io.open(minetest.get_worldpath().."/SAVE/Walls.txt", "w") file:write(tonumber(level)+1) @@ -7617,29 +9545,55 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) file = io.open(minetest.get_worldpath().."/SAVE/Wallw.txt", "r") local wallw = file:read("*l") file:close() + file = io.open(minetest.get_worldpath().."/SAVE/Moate.txt", "r") + local moate = file:read("*l") + file:close() + file = io.open(minetest.get_worldpath().."/SAVE/Moats.txt", "r") + local moats = file:read("*l") + file:close() + file = io.open(minetest.get_worldpath().."/SAVE/Moatn.txt", "r") + local moatn = file:read("*l") + file:close() + file = io.open(minetest.get_worldpath().."/SAVE/Moatw.txt", "r") + local moatw = file:read("*l") + file:close() + local inv = player:get_inventory() local upgrade = false local txt = "not enough items" - if tonumber(level) < 4 and inv:contains_item("main", "default:cobble 10") then + if tonumber(level) < 4 and inv:contains_item("main", "default:cobble 10") and tonumber(tower1) > 17 and tonumber(tower2) > 17 and tonumber(tower3) > 17 and tonumber(tower4) > 17 and tonumber(walle) > 13 and tonumber(wallw) > 13 and tonumber(walln) > 13 and tonumber(walls) > 13 then inv:remove_item("main", "default:cobble 10") upgrade = true - elseif tonumber(level) == 4 and inv:contains_item("main", "default:cobble 25") and inv:contains_item("main", "castrum:pick_stone 8") and tonumber(tower1) > 18 and tonumber(tower2) > 18 and tonumber(tower3) > 18 and tonumber(tower4) > 18 and tonumber(walle) > 14 and tonumber(wallw) > 14 and tonumber(walln) > 14 and tonumber(walls) > 14 then + elseif tonumber(level) < 4 and inv:contains_item("main", "default:cobble 10") then + txt = "build walls and towers first" + elseif tonumber(level) == 4 and inv:contains_item("main", "default:cobble 25") and inv:contains_item("main", "castrum:pick_stone 8") and tonumber(tower1) > 18 and tonumber(tower2) > 18 and tonumber(tower3) > 18 and tonumber(tower4) > 18 and tonumber(walle) > 14 and tonumber(wallw) > 14 and tonumber(walln) > 14 and tonumber(walls) > 14 and tonumber(moate) > 8 and tonumber(moatw) > 8 and tonumber(moats) > 8 and tonumber(moatn) > 8 then inv:remove_item("main", "default:cobble 25") inv:remove_item("main", "castrum:pick_stone 8") upgrade = true + elseif tonumber(level) == 4 and inv:contains_item("main", "default:cobble 25") and inv:contains_item("main", "castrum:pick_stone 8") and tonumber(tower1) > 18 and tonumber(tower2) > 18 and tonumber(tower3) > 18 and tonumber(tower4) > 18 and tonumber(walle) > 14 and tonumber(wallw) > 14 and tonumber(walln) > 14 and tonumber(walls) > 14 then + txt = "upgrade moats to lv.1 first" elseif tonumber(level) == 4 and inv:contains_item("main", "default:cobble 25") and inv:contains_item("main", "castrum:pick_stone 8") then txt = "upgrade walls and towers to lv.2 first" + elseif tonumber(level) == 5 and inv:contains_item("main", "default:cobble 100") and inv:contains_item("main", "castrum:pick_stone 32") and tonumber(tower1) > 19 and tonumber(tower2) > 19 and tonumber(tower3) > 19 and tonumber(tower4) > 19 and tonumber(walle) > 15 and tonumber(wallw) > 15 and tonumber(walln) > 15 and tonumber(walls) > 15 then inv:remove_item("main", "default:cobble 100") inv:remove_item("main", "castrum:pick_stone 32") upgrade = true elseif tonumber(level) == 5 and inv:contains_item("main", "default:cobble 100") and inv:contains_item("main", "castrum:pick_stone 32") then txt = "upgrade walls and towers to lv.3 first" + elseif tonumber(level) == 6 and inv:contains_item("main", "default:desert_cobble 100") and inv:contains_item("main", "castrum:pick_steel 32") and tonumber(tower1) > 20 and tonumber(tower2) > 20 and tonumber(tower3) > 20 and tonumber(tower4) > 20 and tonumber(walle) > 16 and tonumber(wallw) > 16 and tonumber(walln) > 16 and tonumber(walls) > 16 and tonumber(moate) > 9 and tonumber(moatw) > 9 and tonumber(moats) > 9 and tonumber(moatn) > 9 then + inv:remove_item("main", "default:desert_cobble 100") + inv:remove_item("main", "castrum:pick_steel 32") + upgrade = true + elseif tonumber(level) == 6 and inv:contains_item("main", "default:desert_cobble 100") and inv:contains_item("main", "castrum:pick_steel 32") and tonumber(tower1) > 20 and tonumber(tower2) > 20 and tonumber(tower3) > 20 and tonumber(tower4) > 20 and tonumber(walle) > 16 and tonumber(wallw) > 16 and tonumber(walln) > 16 and tonumber(walls) > 16 then + txt = "upgrade moats to lv.2 first" + elseif tonumber(level) == 6 and inv:contains_item("main", "default:desert_cobble 100") and inv:contains_item("main", "castrum:pick_steel 32") then + txt = "upgrade walls and towers to lv.4 first" end if upgrade == false then minetest.chat_send_player(player:get_player_name(), txt) end - if (tonumber(level)) < 6 and upgrade then + if (tonumber(level)) < 7 and upgrade then Fountain(tonumber(level)+1,player) file = io.open(minetest.get_worldpath().."/SAVE/Fountain.txt", "w") file:write(tonumber(level)+1) @@ -7684,11 +9638,17 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) upgrade = true elseif tonumber(level) == 19 and inv:contains_item("main", "default:cobble 40") and inv:contains_item("main", "castrum:sword_stone 12") then txt = "upgrade fountain to lv.2 first" + elseif tonumber(level) == 20 and inv:contains_item("main", "default:desert_cobble 40") and inv:contains_item("main", "castrum:sword_steel 12") and tonumber(fountain) > 5 then + inv:remove_item("main", "default:desert_cobble 40") + inv:remove_item("main", "castrum:sword_steel 12") + upgrade = true + elseif tonumber(level) == 20 and inv:contains_item("main", "default:desert_cobble 40") and inv:contains_item("main", "castrum:sword_steel 12") then + txt = "upgrade fountain to lv.3 first" end if upgrade == false then minetest.chat_send_player(player:get_player_name(), txt) end - if (tonumber(level)) < 20 and upgrade then + if (tonumber(level)) < 21 and upgrade then Tower1(tonumber(level)+1,player) file = io.open(minetest.get_worldpath().."/SAVE/Tower1.txt", "w") file:write(tonumber(level)+1) @@ -7733,11 +9693,17 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) upgrade = true elseif tonumber(level) == 15 and inv:contains_item("main", "default:cobble 40") and inv:contains_item("main", "castrum:sword_stone 12") then txt = "upgrade fountain to lv.2 first" + elseif tonumber(level) == 16 and inv:contains_item("main", "default:desert_cobble 40") and inv:contains_item("main", "castrum:sword_steel 12") and tonumber(fountain) > 5 then + inv:remove_item("main", "default:desert_cobble 40") + inv:remove_item("main", "castrum:sword_steel 12") + upgrade = true + elseif tonumber(level) == 16 and inv:contains_item("main", "default:desert_cobble 40") and inv:contains_item("main", "castrum:sword_steel 12") then + txt = "upgrade fountain to lv.3 first" end if upgrade == false then minetest.chat_send_player(player:get_player_name(), txt) end - if (tonumber(level)) < 16 and upgrade then + if (tonumber(level)) < 17 and upgrade then Wall_east(tonumber(level)+1,player) file = io.open(minetest.get_worldpath().."/SAVE/Walle.txt", "w") file:write(tonumber(level)+1) @@ -7782,11 +9748,17 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) upgrade = true elseif tonumber(level) == 19 and inv:contains_item("main", "default:cobble 40") and inv:contains_item("main", "castrum:sword_stone 12") then txt = "upgrade fountain to lv.2 first" + elseif tonumber(level) == 20 and inv:contains_item("main", "default:desert_cobble 40") and inv:contains_item("main", "castrum:sword_steel 12") and tonumber(fountain) > 5 then + inv:remove_item("main", "default:desert_cobble 40") + inv:remove_item("main", "castrum:sword_steel 12") + upgrade = true + elseif tonumber(level) == 20 and inv:contains_item("main", "default:desert_cobble 40") and inv:contains_item("main", "castrum:sword_steel 12") then + txt = "upgrade fountain to lv.3 first" end if upgrade == false then minetest.chat_send_player(player:get_player_name(), txt) end - if (tonumber(level)) < 20 and upgrade then + if (tonumber(level)) < 21 and upgrade then Tower2(tonumber(level)+1,player) file = io.open(minetest.get_worldpath().."/SAVE/Tower2.txt", "w") file:write(tonumber(level)+1) @@ -7831,11 +9803,17 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) upgrade = true elseif tonumber(level) == 15 and inv:contains_item("main", "default:cobble 40") and inv:contains_item("main", "castrum:sword_stone 12") then txt = "upgrade fountain to lv.2 first" + elseif tonumber(level) == 16 and inv:contains_item("main", "default:desert_cobble 40") and inv:contains_item("main", "castrum:sword_steel 12") and tonumber(fountain) > 5 then + inv:remove_item("main", "default:desert_cobble 40") + inv:remove_item("main", "castrum:sword_steel 12") + upgrade = true + elseif tonumber(level) == 16 and inv:contains_item("main", "default:desert_cobble 40") and inv:contains_item("main", "castrum:sword_steel 12") then + txt = "upgrade fountain to lv.3 first" end if upgrade == false then minetest.chat_send_player(player:get_player_name(), txt) end - if (tonumber(level)) < 16 and upgrade then + if (tonumber(level)) < 17 and upgrade then Wall_west(tonumber(level)+1,player) file = io.open(minetest.get_worldpath().."/SAVE/Wallw.txt", "w") file:write(tonumber(level)+1) @@ -7880,11 +9858,17 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) upgrade = true elseif tonumber(level) == 15 and inv:contains_item("main", "default:cobble 40") and inv:contains_item("main", "castrum:sword_stone 12") then txt = "upgrade fountain to lv.2 first" + elseif tonumber(level) == 16 and inv:contains_item("main", "default:desert_cobble 40") and inv:contains_item("main", "castrum:sword_steel 12") and tonumber(fountain) > 5 then + inv:remove_item("main", "default:desert_cobble 40") + inv:remove_item("main", "castrum:sword_steel 12") + upgrade = true + elseif tonumber(level) == 16 and inv:contains_item("main", "default:desert_cobble 40") and inv:contains_item("main", "castrum:sword_steel 12") then + txt = "upgrade fountain to lv.3 first" end if upgrade == false then minetest.chat_send_player(player:get_player_name(), txt) end - if (tonumber(level)) < 16 and upgrade then + if (tonumber(level)) < 17 and upgrade then Wall_north(tonumber(level)+1,player) file = io.open(minetest.get_worldpath().."/SAVE/Walln.txt", "w") file:write(tonumber(level)+1) @@ -7913,13 +9897,17 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) file:close() local inv = player:get_inventory() local upgrade = false - if tonumber(level) < 9 and inv:contains_item("main", "castrum:shovel_stone 3") then + local txt = "not enough items" + if tonumber(level) < 9 and inv:contains_item("main", "castrum:shovel_stone 3") and tonumber(bridge) > 8 then inv:remove_item("main", "castrum:shovel_stone 3") upgrade = true - elseif tonumber(level) == 9 and inv:contains_item("main", "castrum:bucket_water 30") and tonumber(bridge) > 9 then - inv:remove_item("main", "castrum:bucket_water 30") + elseif tonumber(level) < 9 and inv:contains_item("main", "castrum:shovel_stone 3") then + txt = "build bridge first" + elseif tonumber(level) == 9 and inv:contains_item("main", "castrum:shovel_steel 27") and inv:contains_item("main", "castrum:bucket_water 30") and tonumber(bridge) > 9 then + inv:remove_item("main", "castrum:shovel_steel 27") + inv:remove_item("main", "castrum:bucket_water 30") upgrade = true - elseif tonumber(level) == 9 and inv:contains_item("main", "castrum:bucket_water 30") then + elseif tonumber(level) == 9 and inv:contains_item("main", "castrum:shovel_steel 27") and inv:contains_item("main", "castrum:bucket_water 30") then txt = "upgrade bridge to lv.2 first" end if upgrade == false then @@ -7970,11 +9958,17 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) upgrade = true elseif tonumber(level) == 19 and inv:contains_item("main", "default:cobble 40") and inv:contains_item("main", "castrum:sword_stone 12") then txt = "upgrade fountain to lv.2 first" + elseif tonumber(level) == 20 and inv:contains_item("main", "default:desert_cobble 40") and inv:contains_item("main", "castrum:sword_steel 12") and tonumber(fountain) > 5 then + inv:remove_item("main", "default:desert_cobble 40") + inv:remove_item("main", "castrum:sword_steel 12") + upgrade = true + elseif tonumber(level) == 20 and inv:contains_item("main", "default:desert_cobble 40") and inv:contains_item("main", "castrum:sword_steel 12") then + txt = "upgrade fountain to lv.3 first" end if upgrade == false then minetest.chat_send_player(player:get_player_name(), txt) end - if (tonumber(level)) < 20 and upgrade then + if (tonumber(level)) < 21 and upgrade then Tower3(tonumber(level)+1,player) file = io.open(minetest.get_worldpath().."/SAVE/Tower3.txt", "w") file:write(tonumber(level)+1) @@ -8003,13 +9997,17 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) file:close() local inv = player:get_inventory() local upgrade = false - if tonumber(level) < 9 and inv:contains_item("main", "castrum:shovel_stone 3") then + local txt = "not enough items" + if tonumber(level) < 9 and inv:contains_item("main", "castrum:shovel_stone 3") and tonumber(bridge) > 8 then inv:remove_item("main", "castrum:shovel_stone 3") upgrade = true - elseif tonumber(level) == 9 and inv:contains_item("main", "castrum:bucket_water 30") and tonumber(bridge) > 9 then - inv:remove_item("main", "castrum:bucket_water 30") + elseif tonumber(level) < 9 and inv:contains_item("main", "castrum:shovel_stone 3") then + txt = "build bridge first" + elseif tonumber(level) == 9 and inv:contains_item("main", "castrum:shovel_steel 27") and inv:contains_item("main", "castrum:bucket_water 30") and tonumber(bridge) > 9 then + inv:remove_item("main", "castrum:shovel_steel 27") + inv:remove_item("main", "castrum:bucket_water 30") upgrade = true - elseif tonumber(level) == 9 and inv:contains_item("main", "castrum:bucket_water 30") then + elseif tonumber(level) == 9 and inv:contains_item("main", "castrum:shovel_steel 27") and inv:contains_item("main", "castrum:bucket_water 30") then txt = "upgrade bridge to lv.2 first" end if upgrade == false then @@ -8044,14 +10042,18 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) file:close() local inv = player:get_inventory() local upgrade = false - if tonumber(level) < 9 and inv:contains_item("main", "castrum:shovel_stone 3") then + local txt = "not enough items" + if tonumber(level) < 9 and inv:contains_item("main", "castrum:shovel_stone 3") and tonumber(bridge) > 8 then inv:remove_item("main", "castrum:shovel_stone 3") upgrade = true - elseif tonumber(level) == 9 and inv:contains_item("main", "castrum:bucket_water 30") and tonumber(bridge) > 9 then - inv:remove_item("main", "castrum:bucket_water 30") + elseif tonumber(level) < 9 and inv:contains_item("main", "castrum:shovel_stone 3") then + txt = "build bridge first" + elseif tonumber(level) == 9 and inv:contains_item("main", "castrum:shovel_steel 27") and inv:contains_item("main", "castrum:bucket_water 30") and tonumber(bridge) > 9 then + inv:remove_item("main", "castrum:shovel_steel 27") + inv:remove_item("main", "castrum:bucket_water 30") upgrade = true - elseif tonumber(level) == 9 and inv:contains_item("main", "castrum:bucket_water 30") then - txt = "upgrade bridge to lv.2 first" + elseif tonumber(level) == 9 and inv:contains_item("main", "castrum:shovel_steel 27") and inv:contains_item("main", "castrum:bucket_water 30") then + txt = "upgrade bridge to lv.2 first" end if upgrade == false then minetest.chat_send_player(player:get_player_name(), txt) @@ -8101,11 +10103,17 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) upgrade = true elseif tonumber(level) == 19 and inv:contains_item("main", "default:cobble 40") and inv:contains_item("main", "castrum:sword_stone 12") then txt = "upgrade fountain to lv.2 first" + elseif tonumber(level) == 20 and inv:contains_item("main", "default:desert_cobble 40") and inv:contains_item("main", "castrum:sword_steel 12") and tonumber(fountain) > 5 then + inv:remove_item("main", "default:desert_cobble 40") + inv:remove_item("main", "castrum:sword_steel 12") + upgrade = true + elseif tonumber(level) == 20 and inv:contains_item("main", "default:desert_cobble 40") and inv:contains_item("main", "castrum:sword_steel 12") then + txt = "upgrade fountain to lv.3 first" end if upgrade == false then minetest.chat_send_player(player:get_player_name(), txt) end - if (tonumber(level)) < 20 and upgrade then + if (tonumber(level)) < 21 and upgrade then Tower4(tonumber(level)+1,player) file = io.open(minetest.get_worldpath().."/SAVE/Tower4.txt", "w") file:write(tonumber(level)+1) @@ -8129,17 +10137,29 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) file = io.open(minetest.get_worldpath().."/SAVE/Smithy.txt", "r") local level = file:read("*l") file:close() + file = io.open(minetest.get_worldpath().."/SAVE/Fountain.txt", "r") + local fountain = file:read("*l") + file:close() local inv = player:get_inventory() local upgrade = false - if tonumber(level) < 6 and inv:contains_item("main", "default:cobble 8") and inv:contains_item("main", "default:wood 6") then + local txt = "not enough items" + if tonumber(level) < 6 and inv:contains_item("main", "default:cobble 8") and inv:contains_item("main", "default:wood 6") and tonumber(fountain) > 3 then inv:remove_item("main", "default:cobble 8") inv:remove_item("main", "default:wood 6") upgrade = true + elseif tonumber(level) == 6 and inv:contains_item("main", "default:cobble 80") and inv:contains_item("main", "default:wood 60") and tonumber(fountain) > 5 then + inv:remove_item("main", "default:cobble 80") + inv:remove_item("main", "default:wood 60") + upgrade = true + elseif tonumber(level) < 6 and inv:contains_item("main", "default:cobble 8") and inv:contains_item("main", "default:wood 6") then + txt = "build fountain first" + elseif tonumber(level) == 6 and inv:contains_item("main", "default:cobble 80") and inv:contains_item("main", "default:wood 60") then + txt = "upgrade fountain to lv.3 first" end if upgrade == false then - minetest.chat_send_player(player:get_player_name(), "not enough items") + minetest.chat_send_player(player:get_player_name(), txt) end - if (tonumber(level)) < 6 and upgrade then + if (tonumber(level)) < 7 and upgrade then Smithy(tonumber(level)+1,player) file = io.open(minetest.get_worldpath().."/SAVE/Smithy.txt", "w") file:write(tonumber(level)+1) @@ -8153,7 +10173,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) end end end - if formname == "stable" then + if formname == "stable" then for k, v in pairs(fields) do if v == "del" then Stable(0,player) @@ -8161,22 +10181,80 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) file:write("0") file:close() minetest.show_formspec(player:get_player_name(), "stable" , stable.get_formspec(player)) - elseif v == "Upgrade" then + elseif v == "Upgrade" or v == "Build" then file = io.open(minetest.get_worldpath().."/SAVE/Stable.txt", "r") local level = file:read("*l") file:close() - if (tonumber(level)) < 7 then + file = io.open(minetest.get_worldpath().."/SAVE/Fountain.txt", "r") + local fountain = file:read("*l") + file:close() + local inv = player:get_inventory() + local upgrade = false + local txt = "not enough items" + if tonumber(level) < 7 and inv:contains_item("main", "default:wood 100") and inv:contains_item("main", "castrum:bucket_river_water 25") and tonumber(fountain) > 6 then + inv:remove_item("main", "default:wood 100") + inv:remove_item("main", "castrum:bucket_river_water 25") + upgrade = true + elseif tonumber(level) < 7 and inv:contains_item("main", "default:wood 100") and inv:contains_item("main", "castrum:bucket_river_water 25") then + txt = "upgrade fountain to lv.4 first" + end + if upgrade == false then + minetest.chat_send_player(player:get_player_name(), txt) + end + if (tonumber(level)) < 7 and upgrade then Stable(tonumber(level)+1,player) file = io.open(minetest.get_worldpath().."/SAVE/Stable.txt", "w") file:write(tonumber(level)+1) file:close() end minetest.show_formspec(player:get_player_name(), "stable" , stable.get_formspec(player)) + elseif v == "Get Horse" then + minetest.show_formspec(player:get_player_name(), "horse" , horse.get_formspec(player)) elseif v == "X" then minetest.show_formspec(player:get_player_name(), "", "") end end end + if formname == "horse" then + for k, v in pairs(fields) do + if v == "Get Horse" then + file = io.open(minetest.get_worldpath().."/SAVE/Stable.txt", "r") + local stable = file:read("*l") + file:close() + file = io.open(minetest.get_worldpath().."/SAVE/Horse_1.txt", "r") + local horse_1 = file:read("*l") + file:close() + if tonumber(horse_1) < (stable-6) then + if player:get_attribute("4need1string") then + if player:get_inventory():contains_item("main", player:get_attribute("4need1string")) and player:get_inventory():contains_item("main", player:get_attribute("4need2string")) then + player:get_inventory():remove_item("main", player:get_attribute("4need1string")) + player:get_inventory():remove_item("main", player:get_attribute("4need2string")) + Add_horse(player,player:get_attribute("horselv"),true) + else + minetest.chat_send_player(player:get_player_name(), "not enough items") + end + else + minetest.chat_send_player(player:get_player_name(), "select horse first") + end + else + minetest.chat_send_player(player:get_player_name(), "you can only have "..(stable-6).." horse") + end + minetest.show_formspec(player:get_player_name(), "horse" , horse.get_formspec(player)) + elseif v == "Horse\nlv.1" then + player:set_attribute("4item", "Horse lv.1") + player:set_attribute("4need1", "7 Souls") + player:set_attribute("4need2", "15 River Water Buckets") + player:set_attribute("4need1string", "castrum:soul 7") + player:set_attribute("4need2string", "castrum:bucket_river_water 15") + player:set_attribute("horselv", "1") + minetest.show_formspec(player:get_player_name(), "horse" , horse.get_formspec(player)) + elseif v == "X" then + minetest.show_formspec(player:get_player_name(), "", "") + elseif v == "<" then + minetest.show_formspec(player:get_player_name(), "stable" , stable.get_formspec(player)) + end + end + end if formname == "mine" then for k, v in pairs(fields) do if v == "del" then @@ -8202,14 +10280,14 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) upgrade = true elseif tonumber(level) < 1 then txt = "upgrade fountain to lv.3 first" - elseif tonumber(level) == 1 and tonumber(chapter) > 1 then + elseif tonumber(level) == 1 and tonumber(chapter) > 2 then upgrade = true - elseif tonumber(level) == 2 and tonumber(chapter) > 2 then + elseif tonumber(level) == 2 and tonumber(chapter) > 3 then upgrade = true elseif tonumber(level) == 1 then - txt = "complete chapter 1 first" - elseif tonumber(level) == 2 then txt = "complete chapter 2 first" + elseif tonumber(level) == 2 then + txt = "complete chapter 3 first" end if upgrade == false then minetest.chat_send_player(player:get_player_name(), txt) @@ -8249,19 +10327,21 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) local upgrade = false if tonumber(level) == 0 and tonumber(chapter) > 1 then upgrade = true - elseif tonumber(level) == 1 and tonumber(chapter) > 2 and tonumber(fountain) > 3 then + elseif tonumber(level) == 1 and tonumber(chapter) > 2 then + upgrade = true + elseif tonumber(level) == 2 and tonumber(chapter) > 3 then upgrade = true elseif tonumber(level) == 0 then txt = "complete chapter 1 first" - elseif tonumber(level) == 1 and tonumber(fountain) > 3 then - txt = "complete chapter 2 first" elseif tonumber(level) == 1 then - txt = "build fountain first" + txt = "complete chapter 2 first" + elseif tonumber(level) == 2 then + txt = "complete chapter 3 first" end if upgrade == false then minetest.chat_send_player(player:get_player_name(), txt) end - if (tonumber(level)) < 2 and upgrade then + if (tonumber(level)) < 3 and upgrade then Quarry(tonumber(level)+1,player) file = io.open(minetest.get_worldpath().."/SAVE/Quarry.txt", "w") file:write(tonumber(level)+1) @@ -8300,19 +10380,21 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) txt = "upgrade fountain to lv.1 first" elseif tonumber(level) == 1 and tonumber(chapter) > 1 then upgrade = true - elseif tonumber(level) == 2 and tonumber(chapter) > 2 and tonumber(fountain) > 4 then + elseif tonumber(level) == 2 and tonumber(chapter) > 2 then + upgrade = true + elseif tonumber(level) == 3 and tonumber(chapter) > 3 then upgrade = true elseif tonumber(level) == 1 then txt = "complete chapter 1 first" - elseif tonumber(level) == 2 and tonumber(fountain) > 4 then - txt = "complete chapter 2 first" elseif tonumber(level) == 2 then - txt = "upgrade fountain to lv.2 first" + txt = "complete chapter 2 first" + elseif tonumber(level) == 3 then + txt = "complete chapter 3 first" end if upgrade == false then minetest.chat_send_player(player:get_player_name(), txt) end - if (tonumber(level)) < 3 and upgrade then + if (tonumber(level)) < 4 and upgrade then Tree(tonumber(level)+1,player) file = io.open(minetest.get_worldpath().."/SAVE/Tree.txt", "w") file:write(tonumber(level)+1) @@ -8384,11 +10466,16 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) upgrade = true elseif tonumber(level) < 5 and inv:contains_item("main", "default:wood 10") then txt = "upgrade fountain to lv.2 first" + elseif tonumber(level) == 5 and inv:contains_item("main", "default:junglewood 50") and tonumber(fountain) > 6 then + inv:remove_item("main", "default:junglewood 50") + upgrade = true + elseif tonumber(level) == 5 and inv:contains_item("main", "default:junglewood 50") then + txt = "upgrade fountain to lv.4 first" end if upgrade == false then minetest.chat_send_player(player:get_player_name(), txt) end - if (tonumber(level)) < 5 and upgrade then + if (tonumber(level)) < 6 and upgrade then Ship1(tonumber(level)+1,player) file = io.open(minetest.get_worldpath().."/SAVE/Ship1.txt", "w") file:write(tonumber(level)+1) @@ -8397,6 +10484,9 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) minetest.show_formspec(player:get_player_name(), "ship1" , ship1.get_formspec(player)) elseif v == "Go to Island" then player:setpos({x=124, y=8.5, z=44}) + minetest.show_formspec(player:get_player_name(), "", "") + elseif v == "Go to Mountain" then + player:setpos({x=312, y=8.5, z=44}) minetest.show_formspec(player:get_player_name(), "", "") elseif v == "X" then minetest.show_formspec(player:get_player_name(), "", "") @@ -8414,14 +10504,15 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) else minetest.chat_send_player(player:get_player_name(), "not enough items") end + else minetest.chat_send_player(player:get_player_name(), "select item first") end elseif v == "Soul" then player:set_attribute("item", "Soul") player:set_attribute("need1", "25 Cobblestone") - player:set_attribute("need2", "5 Water Buckets") + player:set_attribute("need2", "15 Wooden Planks") player:set_attribute("need1string", "default:cobble 25") - player:set_attribute("need2string", "castrum:bucket_water 5") + player:set_attribute("need2string", "default:wood 15") player:set_attribute("itemstring", "castrum:soul") minetest.show_formspec(player:get_player_name(), "craft" , craft.get_formspec(player)) elseif v == "Steel\nIngot" then @@ -8456,6 +10547,30 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) player:set_attribute("need2string", "default:wood") player:set_attribute("itemstring", "castrum:sword_stone") minetest.show_formspec(player:get_player_name(), "craft" , craft.get_formspec(player)) + elseif v == "Steel\nShovel" then + player:set_attribute("item", "Steel Shovel") + player:set_attribute("need1", "1 Steel Ingot") + player:set_attribute("need2", "2 Jungle Wooden Planks") + player:set_attribute("need1string", "default:steel_ingot") + player:set_attribute("need2string", "default:junglewood 2") + player:set_attribute("itemstring", "castrum:shovel_steel") + minetest.show_formspec(player:get_player_name(), "craft" , craft.get_formspec(player)) + elseif v == "Steel\nPickaxe" then + player:set_attribute("item", "Steel Pickaxe") + player:set_attribute("need1", "3 Steel Ingot") + player:set_attribute("need2", "2 Jungle Wooden Planks") + player:set_attribute("need1string", "default:steel_ingot 3") + player:set_attribute("need2string", "default:junglewood 2") + player:set_attribute("itemstring", "castrum:pick_steel") + minetest.show_formspec(player:get_player_name(), "craft" , craft.get_formspec(player)) + elseif v == "Steel\nSword" then + player:set_attribute("item", "Steel Sword") + player:set_attribute("need1", "2 Steel Ingot") + player:set_attribute("need2", "1 Jungle Wooden Planks") + player:set_attribute("need1string", "default:steel_ingot 2") + player:set_attribute("need2string", "default:junglewood") + player:set_attribute("itemstring", "castrum:sword_steel") + minetest.show_formspec(player:get_player_name(), "craft" , craft.get_formspec(player)) elseif v == "X" then minetest.show_formspec(player:get_player_name(), "", "") elseif v == "<" then @@ -8493,20 +10608,22 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) txt = "upgrade fountain to lv.2 first" elseif tonumber(level) == 1 and tonumber(chapter) > 1 then upgrade = true - elseif tonumber(level) == 2 and tonumber(chapter) > 2 and tonumber(fountain) > 5 then + elseif tonumber(level) == 2 and tonumber(chapter) > 2 then + upgrade = true + elseif tonumber(level) == 3 and tonumber(chapter) > 3 then upgrade = true elseif tonumber(level) == 1 then txt = "complete chapter 1 first" - elseif tonumber(level) == 2 and tonumber(fountain) > 5 then - txt = "complete chapter 2 first" elseif tonumber(level) == 2 then - txt = "upgrade fountain to lv.3 first" + txt = "complete chapter 2 first" + elseif tonumber(level) == 3 then + txt = "complete chapter 3 first" end if upgrade == false then minetest.chat_send_player(player:get_player_name(), txt) end - if (tonumber(level)) < 3 and upgrade then + if (tonumber(level)) < 4 and upgrade then Lake(tonumber(level)+1,player) file = io.open(minetest.get_worldpath().."/SAVE/Lake.txt", "w") file:write(tonumber(level)+1) @@ -8530,19 +10647,30 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) file = io.open(minetest.get_worldpath().."/SAVE/Barracks.txt", "r") local level = file:read("*l") file:close() + file = io.open(minetest.get_worldpath().."/SAVE/Fountain.txt", "r") + local fountain = file:read("*l") + file:close() local inv = player:get_inventory() local upgrade = false local txt = "not enough items" - if tonumber(level) < 6 and inv:contains_item("main", "default:wood 20") and inv:contains_item("main", "default:cobble 20") and inv:contains_item("main", "castrum:bucket_water 5") then + if tonumber(level) < 6 and inv:contains_item("main", "default:wood 20") and inv:contains_item("main", "default:cobble 20") and tonumber(fountain) > 3 then inv:remove_item("main", "default:wood 20") inv:remove_item("main", "default:cobble 20") - inv:remove_item("main", "castrum:bucket_water 5") upgrade = true + elseif tonumber(level) == 6 and inv:contains_item("main", "default:wood 200") and inv:contains_item("main", "default:cobble 200") and inv:contains_item("main", "castrum:bucket_water 50") and tonumber(fountain) > 5 then + inv:remove_item("main", "default:wood 200") + inv:remove_item("main", "default:cobble 200") + inv:remove_item("main", "castrum:bucket_water 50") + upgrade = true + elseif tonumber(level) < 6 and inv:contains_item("main", "default:wood 20") and inv:contains_item("main", "default:cobble 20") then + txt = "build fountain first" + elseif tonumber(level) == 6 and inv:contains_item("main", "default:wood 200") and inv:contains_item("main", "default:cobble 200") and inv:contains_item("main", "castrum:bucket_water 50") then + txt = "upgrade fountain to lv.3 first" end if upgrade == false then minetest.chat_send_player(player:get_player_name(), txt) end - if (tonumber(level)) < 6 and upgrade then + if (tonumber(level)) < 7 and upgrade then Barracks(tonumber(level)+1,player) file = io.open(minetest.get_worldpath().."/SAVE/Barracks.txt", "w") file:write(tonumber(level)+1) @@ -8594,6 +10722,49 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) end end end + if formname == "camp2" then + for k, v in pairs(fields) do + if v == "del" then + Camp2(0,player) + file = io.open(minetest.get_worldpath().."/SAVE/Camp2.txt", "w") + file:write("0") + file:close() + minetest.show_formspec(player:get_player_name(), "camp2" , camp2.get_formspec(player)) + elseif v == "Upgrade" or v == "Build" then + file = io.open(minetest.get_worldpath().."/SAVE/Camp2.txt", "r") + local level = file:read("*l") + file:close() + local inv = player:get_inventory() + local upgrade = false + file = io.open(minetest.get_worldpath().."/SAVE/Home2.txt", "r") + local home2 = file:read("*l") + file:close() + file = io.open(minetest.get_worldpath().."/SAVE/Camp1.txt", "r") + local camp1 = file:read("*l") + file:close() + local txt = "not enough items" + if tonumber(level) < 1 and tonumber(home2) > 5 and tonumber(camp1) > 0 then + upgrade = true + elseif tonumber(level) < 1 and tonumber(home2) > 5 then + txt = "build camp 1 first" + elseif tonumber(level) < 1 then + txt = "build home 2 first" + end + if upgrade == false then + minetest.chat_send_player(player:get_player_name(), txt) + end + if (tonumber(level)) < 1 and upgrade then + Camp2(tonumber(level)+1,player) + file = io.open(minetest.get_worldpath().."/SAVE/Camp2.txt", "w") + file:write(tonumber(level)+1) + file:close() + end + minetest.show_formspec(player:get_player_name(), "camp2" , camp2.get_formspec(player)) + elseif v == "X" then + minetest.show_formspec(player:get_player_name(), "", "") + end + end + end if formname == "knight" then for k, v in pairs(fields) do if v == "Get Knight" then @@ -8613,13 +10784,21 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) end if tonumber(home2) == 6 then max1 = max1+8 + elseif tonumber(home2) == 7 then + max1 = max1+11 end file = io.open(minetest.get_worldpath().."/SAVE/Camp1.txt", "r") local camp1 = file:read("*l") file:close() + file = io.open(minetest.get_worldpath().."/SAVE/Camp2.txt", "r") + local camp2 = file:read("*l") + file:close() if tonumber(camp1) == 1 then max2 = max2+20 end + if tonumber(camp2) == 1 then + max2 = max2+20 + end if max1 > max2 then max = max2 elseif max2 > max1 then @@ -8630,7 +10809,10 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) file = io.open(minetest.get_worldpath().."/SAVE/Knight_1.txt", "r") local knight_1 = file:read("*l") file:close() - if tonumber(knight_1) < max then + file = io.open(minetest.get_worldpath().."/SAVE/Knight_2.txt", "r") + local knight_2 = file:read("*l") + file:close() + if (tonumber(knight_1)+tonumber(knight_2)) < max then if player:get_attribute("2need1string") then if player:get_inventory():contains_item("main", player:get_attribute("2need1string")) and player:get_inventory():contains_item("main", player:get_attribute("2need2string")) then player:get_inventory():remove_item("main", player:get_attribute("2need1string")) @@ -8649,11 +10831,19 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) elseif v == "Knight\nlv.1" then player:set_attribute("2item", "Knight lv.1") player:set_attribute("2need1", "1 Soul") - player:set_attribute("2need2", "3 Water Bucket") + player:set_attribute("2need2", "") player:set_attribute("2need1string", "castrum:soul") - player:set_attribute("2need2string", "castrum:bucket_water 3") + player:set_attribute("2need2string", "") player:set_attribute("knightlv", "1") minetest.show_formspec(player:get_player_name(), "knight" , knight.get_formspec(player)) + elseif v == "Knight\nlv.2" then + player:set_attribute("2item", "Knight lv.2") + player:set_attribute("2need1", "8 Soul") + player:set_attribute("2need2", "") + player:set_attribute("2need1string", "castrum:soul 8") + player:set_attribute("2need2string", "") + player:set_attribute("knightlv", "2") + minetest.show_formspec(player:get_player_name(), "knight" , knight.get_formspec(player)) elseif v == "X" then minetest.show_formspec(player:get_player_name(), "", "") elseif v == "<" then @@ -8681,7 +10871,6 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) file = io.open(minetest.get_worldpath().."/SAVE/Chapter.txt", "r") local chapter = file:read("*l") file:close() - local txt = "not enough items" if tonumber(level) < 4 and tonumber(fountain) > 3 and inv:contains_item("main", "default:cobble 4") then upgrade = true @@ -8695,12 +10884,18 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) txt = "complete chapter 1 first" elseif tonumber(level) == 4 and inv:contains_item("main", "default:cobble 40") then txt = "upgrade fountain to lv.2 first" + elseif tonumber(level) == 5 and tonumber(fountain) > 5 and inv:contains_item("main", "default:cobble 400") and tonumber(chapter) > 2 then + upgrade = true + inv:remove_item("main", "default:cobble 400") + elseif tonumber(level) == 5 and inv:contains_item("main", "default:cobble 400") and tonumber(fountain) > 5 then + txt = "complete chapter 2 first" + elseif tonumber(level) == 5 and inv:contains_item("main", "default:cobble 400") then + txt = "upgrade fountain to lv.3 first" end - if upgrade == false then minetest.chat_send_player(player:get_player_name(), txt) end - if (tonumber(level)) < 5 and upgrade then + if (tonumber(level)) < 6 and upgrade then Battleground(tonumber(level)+1,player) file = io.open(minetest.get_worldpath().."/SAVE/Battleground.txt", "w") file:write(tonumber(level)+1) @@ -8708,11 +10903,15 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) end minetest.show_formspec(player:get_player_name(), "battleground" , battleground.get_formspec(player)) elseif v == "Start Chapter 1" then + get_fight(1,player) minetest.show_formspec(player:get_player_name(), "", "") elseif v == "Start Chapter 2" then get_fight(2,player) minetest.show_formspec(player:get_player_name(), "", "") + elseif v == "Start Chapter 3" then + get_fight(3,player) + minetest.show_formspec(player:get_player_name(), "", "") elseif v == "X" then minetest.show_formspec(player:get_player_name(), "", "") end @@ -8911,21 +11110,20 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) local txt = "not enough items" local inv = player:get_inventory() local upgrade = false - if tonumber(level) == 0 and tonumber(chapter) > 1 then + if tonumber(level) == 0 and tonumber(chapter) > 3 then upgrade = true elseif tonumber(level) == 0 then - txt = "complete chapter 1 first" - elseif tonumber(level) == 1 and tonumber(chapter) > 2 and tonumber(fountain) > 3 then + txt = "complete chapter 3 first" + elseif tonumber(level) == 1 and tonumber(chapter) > 2 then upgrade = true - elseif tonumber(level) == 1 and tonumber(fountain) > 3 then - txt = "complete chapter 2 first" elseif tonumber(level) == 1 then - txt = "build island fountain first" + --txt = "complete chapter 2 first" + end if upgrade == false then minetest.chat_send_player(player:get_player_name(), txt) end - if (tonumber(level)) < 2 and upgrade then + if (tonumber(level)) < 1 and upgrade then Sandmine(tonumber(level)+1,player) file = io.open(minetest.get_worldpath().."/SAVE/Sandmine.txt", "w") file:write(tonumber(level)+1) @@ -8939,7 +11137,44 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) end if formname == "island_ship1" then for k, v in pairs(fields) do - if v == "X" then + if v == "del" then + Ship1(0,player) + file = io.open(minetest.get_worldpath().."/SAVE/Ship1.txt", "w") + file:write("0") + file:close() + minetest.show_formspec(player:get_player_name(), "island_ship1" , island_ship1.get_formspec(player)) + elseif v == "Upgrade" or v == "Build" then + file = io.open(minetest.get_worldpath().."/SAVE/Ship1.txt", "r") + local level = file:read("*l") + file:close() + file = io.open(minetest.get_worldpath().."/SAVE/Fountain.txt", "r") + local fountain = file:read("*l") + file:close() + local inv = player:get_inventory() + local upgrade = false + local txt = "not enough items" + if tonumber(level) < 5 and inv:contains_item("main", "default:wood 10") and tonumber(fountain) > 4 then + inv:remove_item("main", "default:wood 10") + upgrade = true + elseif tonumber(level) < 5 and inv:contains_item("main", "default:wood 10") then + txt = "upgrade fountain to lv.2 first" + elseif tonumber(level) == 5 and inv:contains_item("main", "default:junglewood 50") and tonumber(fountain) > 6 then + inv:remove_item("main", "default:junglewood 50") + upgrade = true + elseif tonumber(level) == 5 and inv:contains_item("main", "default:junglewood 50") then + txt = "upgrade fountain to lv.4 first" + end + if upgrade == false then + minetest.chat_send_player(player:get_player_name(), txt) + end + if (tonumber(level)) < 6 and upgrade then + Ship1(tonumber(level)+1,player) + file = io.open(minetest.get_worldpath().."/SAVE/Ship1.txt", "w") + file:write(tonumber(level)+1) + file:close() + end + minetest.show_formspec(player:get_player_name(), "island_ship1" , island_ship1.get_formspec(player)) + elseif v == "X" then minetest.show_formspec(player:get_player_name(), "", "") elseif v == "Go Back" then player:setpos({x=-7, y=8.5, z=-58}) @@ -8947,4 +11182,249 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) end end end + if formname == "lake2" then + for k, v in pairs(fields) do + if v == "del" then + Lake2(0,player) + file = io.open(minetest.get_worldpath().."/SAVE/Lake2.txt", "w") + file:write("0") + file:close() + minetest.show_formspec(player:get_player_name(), "lake2" , lake2.get_formspec(player)) + elseif v == "Upgrade" or v == "Build" then + file = io.open(minetest.get_worldpath().."/SAVE/Lake2.txt", "r") + local level = file:read("*l") + file:close() + local inv = player:get_inventory() + local upgrade = false + file = io.open(minetest.get_worldpath().."/SAVE/Fountain.txt", "r") + local fountain = file:read("*l") + file:close() + file = io.open(minetest.get_worldpath().."/SAVE/Chapter.txt", "r") + local chapter = file:read("*l") + file:close() + local txt = "not enough items" + if tonumber(level) < 1 and tonumber(fountain) > 6 then + upgrade = true + elseif tonumber(level) < 1 then + txt = "upgrade fountain to lv.4 first" + elseif tonumber(level) == 1 and tonumber(chapter) > 3 then + upgrade = true + elseif tonumber(level) == 1 then + txt = "complete chapter 3 first" + end + if upgrade == false then + minetest.chat_send_player(player:get_player_name(), txt) + end + if (tonumber(level)) < 3 and upgrade then + Lake2(tonumber(level)+1,player) + file = io.open(minetest.get_worldpath().."/SAVE/Lake2.txt", "w") + file:write(tonumber(level)+1) + file:close() + end + minetest.show_formspec(player:get_player_name(), "lake2" , lake2.get_formspec(player)) + elseif v == "X" then + minetest.show_formspec(player:get_player_name(), "", "") + end + end + end + if formname == "island_smithy" then + for k, v in pairs(fields) do + if v == "del" then + Island_Smithy(0,player) + file = io.open(minetest.get_worldpath().."/SAVE/Island_Smithy.txt", "w") + file:write("0") + file:close() + minetest.show_formspec(player:get_player_name(), "island_smithy" , island_smithy.get_formspec(player)) + elseif v == "Upgrade" or v == "Build" then + file = io.open(minetest.get_worldpath().."/SAVE/Island_Smithy.txt", "r") + local level = file:read("*l") + file:close() + file = io.open(minetest.get_worldpath().."/SAVE/Island_Fountain.txt", "r") + local fountain = file:read("*l") + file:close() + local inv = player:get_inventory() + local upgrade = false + local txt = "not enough items" + if tonumber(level) < 6 and inv:contains_item("main", "default:sand 80") and inv:contains_item("main", "default:wood 60") and tonumber(fountain) > 3 then + inv:remove_item("main", "default:sand 80") + inv:remove_item("main", "default:wood 60") + upgrade = true + elseif tonumber(level) < 6 and inv:contains_item("main", "default:sand 80") and inv:contains_item("main", "default:wood 60") then + txt = "build island fountain first" + end + if upgrade == false then + minetest.chat_send_player(player:get_player_name(), txt) + end + if (tonumber(level)) < 6 and upgrade then + Island_Smithy(tonumber(level)+1,player) + file = io.open(minetest.get_worldpath().."/SAVE/Island_Smithy.txt", "w") + file:write(tonumber(level)+1) + file:close() + end + minetest.show_formspec(player:get_player_name(), "island_smithy" , island_smithy.get_formspec(player)) + elseif v == "Crafting" then + minetest.show_formspec(player:get_player_name(), "craft2" , craft2.get_formspec(player)) + elseif v == "X" then + minetest.show_formspec(player:get_player_name(), "", "") + end + end + end + if formname == "cactusfarm" then + for k, v in pairs(fields) do + if v == "del" then + Cactusfarm(0,player) + file = io.open(minetest.get_worldpath().."/SAVE/Cactusfarm.txt", "w") + file:write("0") + file:close() + minetest.show_formspec(player:get_player_name(), "cactusfarm" , cactusfarm.get_formspec(player)) + elseif v == "Upgrade" or v == "Build" then + file = io.open(minetest.get_worldpath().."/SAVE/Cactusfarm.txt", "r") + local level = file:read("*l") + file:close() + local inv = player:get_inventory() + local upgrade = false + file = io.open(minetest.get_worldpath().."/SAVE/Island_Fountain.txt", "r") + local fountain = file:read("*l") + file:close() + file = io.open(minetest.get_worldpath().."/SAVE/Chapter.txt", "r") + local chapter = file:read("*l") + file:close() + local txt = "not enough items" + if tonumber(level) < 1 and tonumber(fountain) > 3 then + upgrade = true + elseif tonumber(level) < 1 then + txt = "build island fountain first" + elseif tonumber(level) == 1 and tonumber(chapter) > 3 then + upgrade = true + elseif tonumber(level) == 1 then + txt = "complete chapter 3 first" + end + if upgrade == false then + minetest.chat_send_player(player:get_player_name(), txt) + end + if (tonumber(level)) < 2 and upgrade then + Cactusfarm(tonumber(level)+1,player) + file = io.open(minetest.get_worldpath().."/SAVE/Cactusfarm.txt", "w") + file:write(tonumber(level)+1) + file:close() + end + minetest.show_formspec(player:get_player_name(), "cactusfarm" , cactusfarm.get_formspec(player)) + elseif v == "X" then + minetest.show_formspec(player:get_player_name(), "", "") + end + end + end + if formname == "craft2" then + for k, v in pairs(fields) do + if v == "Craft" then + if player:get_attribute("3need1string") then + if player:get_inventory():contains_item("main", player:get_attribute("3need1string")) and player:get_inventory():contains_item("main", player:get_attribute("3need2string")) and player:get_inventory():contains_item("main", player:get_attribute("3need3string")) then + player:get_inventory():remove_item("main", player:get_attribute("3need1string")) + player:get_inventory():remove_item("main", player:get_attribute("3need2string")) + player:get_inventory():remove_item("main", player:get_attribute("3need3string")) + player:get_inventory():add_item("main", player:get_attribute("3itemstring")) + else + minetest.chat_send_player(player:get_player_name(), "not enough items") + end + else + minetest.chat_send_player(player:get_player_name(), "select item first") + end + elseif v == "Glass" then + player:set_attribute("3item", "Glass") + player:set_attribute("3need1", "25 Sand") + player:set_attribute("3need2", "10 River Water Bucket") + player:set_attribute("3need3", "5 Coal Lump") + player:set_attribute("3need1string", "default:sand 25") + player:set_attribute("3need2string", "castrum:bucket_river_water 10") + player:set_attribute("3need3string", "default:coal_lump 5") + player:set_attribute("3itemstring", "default:glass") + minetest.show_formspec(player:get_player_name(), "craft2" , craft2.get_formspec(player)) + elseif v == "X" then + minetest.show_formspec(player:get_player_name(), "", "") + elseif v == "<" then + minetest.show_formspec(player:get_player_name(), "island_smithy" , island_smithy.get_formspec(player)) + end + end + end + if formname == "mountain_quarry" then + for k, v in pairs(fields) do + if v == "X" then + minetest.show_formspec(player:get_player_name(), "", "") + end + end + end + if formname == "mountain_fountain" then + for k, v in pairs(fields) do + if v == "del" then + Mountain_Fountain(0,player) + file = io.open(minetest.get_worldpath().."/SAVE/Mountain_Fountain.txt", "w") + file:write("0") + file:close() + minetest.show_formspec(player:get_player_name(), "mountain_fountain" , mountain_fountain.get_formspec(player)) + elseif v == "Upgrade" or v == "Build" then + file = io.open(minetest.get_worldpath().."/SAVE/Mountain_Fountain.txt", "r") + local level = file:read("*l") + file:close() + local inv = player:get_inventory() + local upgrade = false + local txt = "not enough items" + if tonumber(level) < 3 and inv:contains_item("main", "default:mossycobble 50") then + inv:remove_item("main", "default:mossycobble 50") + upgrade = true + end + if upgrade == false then + minetest.chat_send_player(player:get_player_name(), txt) + end + if (tonumber(level)) < 3 and upgrade then + Mountain_Fountain(tonumber(level)+1,player) + file = io.open(minetest.get_worldpath().."/SAVE/Mountain_Fountain.txt", "w") + file:write(tonumber(level)+1) + file:close() + end + minetest.show_formspec(player:get_player_name(), "mountain_fountain" , mountain_fountain.get_formspec(player)) + elseif v == "X" then + minetest.show_formspec(player:get_player_name(), "", "") + end + end + end + if formname == "island_home1" then + for k, v in pairs(fields) do + if v == "del" then + Island_Home1(0,player) + file = io.open(minetest.get_worldpath().."/SAVE/Island_Home1.txt", "w") + file:write("0") + file:close() + minetest.show_formspec(player:get_player_name(), "island_home1" , island_home1.get_formspec(player)) + elseif v == "Upgrade" or v == "Build" then + file = io.open(minetest.get_worldpath().."/SAVE/Island_Home1.txt", "r") + local level = file:read("*l") + file:close() + file = io.open(minetest.get_worldpath().."/SAVE/Island_Fountain.txt", "r") + local fountain = file:read("*l") + file:close() + local inv = player:get_inventory() + local upgrade = false + local txt = "not enough items" + if tonumber(level) < 5 and inv:contains_item("main", "default:sand 80") and inv:contains_item("main", "default:glass 10") and tonumber(fountain) > 3 then + inv:remove_item("main", "default:sand 80") + inv:remove_item("main", "default:glass 10") + upgrade = true + elseif tonumber(level) < 5 and inv:contains_item("main", "default:sand 80") and inv:contains_item("main", "default:glass 10") then + txt = "build island fountain first" + end + if upgrade == false then + minetest.chat_send_player(player:get_player_name(), txt) + end + if (tonumber(level)) < 5 and upgrade then + Island_Home1(tonumber(level)+1,player) + file = io.open(minetest.get_worldpath().."/SAVE/Island_Home1.txt", "w") + file:write(tonumber(level)+1) + file:close() + end + minetest.show_formspec(player:get_player_name(), "island_home1" , island_home1.get_formspec(player)) + elseif v == "X" then + minetest.show_formspec(player:get_player_name(), "", "") + end + end + end end) \ No newline at end of file diff --git a/mods/castrum/models/castrum_horse.png b/mods/castrum/models/castrum_horse.png new file mode 100644 index 0000000000000000000000000000000000000000..b05a73acad824eb12a7ec8cd87a778091a654fe0 GIT binary patch literal 1639 zcmV-t2AKJYP)WFU8GbZ8()Nlj2>E@cM*00qlQL_t(o!?jr3jvO@* zJyovmx$Fi45+DK+g1qJz_yxWm#1rHt5&{WnLw09&y6q|++~u~Xdq{T4`enDL-LC67 zRb~3=$8QXeSY`$ydelBMLsEkThWLZpa&t;nKF~_dzus?M1>F$ zBoLAs04f5KT0TJM50bVA)z3-S1-U-w282Lh0>lp*Mnz1sG$MkTmH%snQZg{-gWO|o zt$W11;vP}U%J}}23f)G503?M-*$CfDn9ixFsoBVJAjYU;xl2+EMA!)*<3+Ov;6qm+|NoZ|}C#Pci zy>g=jE<(7^`#mvB$g1S_P`f9)K#-(Xw9lGnA#PA$g4q&UV+2&^!(1^BW!_`u%wDpx zTsc4u5Vyd!PRWqYpy!$FmNNrFGh%93&N)ILnmr*QOTHg+@?7sEqaZL90lN^8l3|F7 z7!93J5nKzZ;aB5+7_~uzbAt=76;5gh!Z`=BfUG$JVap8k++=#~I%aA-QVtAM5ORnS zy@Yws^lsCI^(6FIYnmbGLdTd%YTI+eV$Ksu(ZCDgDrA zY`QSVYfP>7jip^!t^ZDDAVS{Jq6Pqdef=&gU}hLoE5M)YexPPACP0Ksp&6n!)ik4K zCNST(-%3MR03buug7=s-Hzzs^RckZYAyyMuFN|T-IqrgTW(b7ML_S_$8Xl0q7*tEv zy6{|v34NCd>3B++(>q4rW$P1wUI<@)zQuQ&P|m1X(9DW*9{V?c9cBgI9mY}x-D(#u zfk8y*1ONhJ(xy4_m^x(_Qmbl0N?GY))I~=H0P_60$Ib2Fyi^WV%WTJ~tp#eC^S!Q{ z8Q%PPz?iHQG^YIhX-FU<>^7k=qZ`*y@w0u`bU|ax1O`MYt35GXC!v|3x&Wj^*`WcewCgN-K0`>|N~dJF-b>lA+k^r= z=A2mdp*1RYH5E^BcSa0MO(<*Tl;bIffO+QXVbs#+t6}1YEadK(mFO*ka$oIQ*wmQM z#VU8t{`(LWA`B6RnPI=pb>EZj+>l0rUU)7R{QjA44T4@^a`so#@P)itB;lnxURStF zGhn@b`Tgw&&5esB^t(cj*+bUrKkfhk-+z7e;3=vUqr3Z9-4#WA_N;sKRQ!;A4Wq{? zkwPFGPia9Qm)2t}ZyJ*0DIvyX-`>lU%&yB2ZvQ_y@GlD(PaNKM#Wnx{002ovPDHLkV1fj7@CX0^ literal 0 HcmV?d00001 diff --git a/mods/castrum/models/castrum_knight_lv2_dark.png b/mods/castrum/models/castrum_knight_lv2_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..196b5e0a10177815202ddad45f3b5157403a2096 GIT binary patch literal 2902 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%0D9QXQaIP1aQw7hAUVL0nr|NeVevTuob z1oB!!7t(BnDSJR#W43{|AZ=y|_a?cwW!8d?weLyTpWB$j1$L(m%bwovdxG1ePlv!j zzO?rCCt1&B?*lA_7-X8iha`K6doTx<_X9okj%>#3guKq=LB?U(?<;#Ex&+GpU^nlB zkU?u!BM7Oha%V3d6V_4w1Nx;CdvCg3&Mr#*(Jo>&9Up4-;Ubk)G(?n_sBtO~34I zj7##IF$w?4vEgLRhcyerPesl&+^54pt|iYiFlTbznS9Pd2RZv_Hs&1M=i)vu(0rF7 z@4V*+_A~A=3-Fsn++cpSz#sS;$CGw%eIb5}z|F53Ov99P&F@@!R>wXyaDbl3h|AoG zbe53DQp{zr99Fb#!Z!T32lm!?VBd*-7yJscHohBk5A4P7J~C&hL9{c`-7KqpxbLS<4+IWo z9cVCl9_-1p8RjPU!h`hHLxF?z!-O?;9b$wz5;#=%Q$vX}lxt}tW?zy$5l0Do435Kz zz+u$$Fv1NZ9Q&Vf^X}1c^Oi-{a-=<;BJaW6YfqD&tVNz7oSR>p2v7s`vw?l}bGU!k zWuShZJb!WZ*Dv6Hk+7HGa^MiXl5MztC2)kEgI|qcH$Q30nY!}p5oOhH#+c)MzGS}& z_UcgIu1+U=^yoGo09zGCX&PlSeUi>>UKfWugLuVTLR|z{TFWEKn`Hhf(j}fEd1b%75<Ei;%(zeD@e`BdXX&0=SBPSu@5(SOnSy94_(Gv%aBfW8i8%H>K zgT>kdVNNhVlQ_NDInUD*{^RkNx^}6gK`xanXsjNBoaE?n1&Q#d#QNNRjJBhgR+`$?%M<;;~tLex}@di zt9UcK#AVI^^@C>oBfRM@;b$@r{ZYO*&W|!@kyi;L`%Qk7JKM;I>F(9f8((D4p{;x4 z{ipwr^5=T=V@`v<4e7Vvb)WYS-OVr}fBt{yE^b~K%!!cIIB0<SI4D4)c3M~sqf|g zkZSg%`^*I&DbUNL>n~P(3;q5nRmGPRUfndnG2F% zd4|8lGm@KM`tiDpo6MudkKU)7=vyCJhXVP*X6f!Py8-(KKt zBfYWr!M!izOF!rj17IKwg2DI=fuV#O#j6eI?>%y--i3X#6A3qo`-;31o{Z@|*M15*$o%XC U^HO;pcw;M7v1D-q{o~*N1GLxWFU8GbZ8()Nlj2>E@cM*00MtWL_t(I%bk)-dQDpk$B-28E?R@Z{FhsFf*4aR#7ODC*ve z3!5FwWId+Sx0r$BbaRx&b;Gt%WTrqVL47nPQi2e`x?&kXdZa1Ea=9EytY>5B{Hvra zu>PM3cT537P|_NLAOQW`QUtvTAO}>}N?OjAld&tA=^Z;Xk=_ji{&>@+QH=q?_*g_W z(Uc;=jZ9j>4rhP(>DJZ3 z(1pR!_P5Ni*w?^$FNB0r9Lqq!*7aPPn-sM8+ zOoRfhqIc@Q&aJKhEAvZRyz|O?xjg$}Gk2lU%hrC6;`r&@i)@kb~6&=PO!yXe8c zHM4tofFS8y(0|UAsYwzE2Co_d*?D#_XH4Q<%KY^I|9@X*Km2^QzhL8eb9OYgtw zPm^6Wr%A5N-RZRH*8kAh(;ruHYImnp7nkJhfD000McNliru;tC20E-q?S*MI;30jo(w zK~z}7?bJU=TTv7S@b4xeR+A2y-UYEyf*^ttP;hb)GL#IZLL@G45nFIc#w-$WX`zL7 z>FC<&IaCN;0v&`xj-rDIF@uX54CO`XQ&b-MIY>)u|4ezA?r*&Jz<2IF+^Z0P$;nlo zo$cWA@)$QaR|tio=;^VLNK9aR`=$D|R&_c&oqo@FJcVL04Xqy`8V$ks3D5IUE`P!4 z=_VSDcM3u2@1LcJ%WAd7>FLkZI?Ji4kKEY!MiG~bi(4EYf5RX3p-wjtizU%$oFku~ zgXitzewqMjoS9 zYok=kptm=Pa5xG82#5R7Y<^OKH83!c=i1tb|JK;{Th!~XR3Hu9f5*@1``@9|pRfGk g4H$-D7=~dOcZB$>YJ_uBQ~&?~07*qoM6N<$f<_1PHUIzs literal 0 HcmV?d00001 diff --git a/mods/castrum/textures/castrum_num3.png b/mods/castrum/textures/castrum_num3.png new file mode 100644 index 0000000000000000000000000000000000000000..1cc8c841d76cd1fac497ef352b75f26b927375d3 GIT binary patch literal 606 zcmV-k0-^nhP)000McNliru;tC20FBdFJZpi=u0qaRb zK~z}7?bJ<3R8bfP;P=dJw84I40=teCfpzV78o>k?Mpz63iXkMpsf98N%SE#=DyoH3 zxDg{YK_n1e1tNiqg4~G~LopysML*!6!`1AjZM2zj?%Tp<7-;Kpbsjj2bNJxAeBa>+ zNbtO;iXY}ykyzS5Ds4m41l+|1I9stFosZ{4e(kR9zI-5DNl%Fj{`+^}Dk_C=I6*s& z%;p9X-(KR{r{5f#hzrPatL-?K<5P^i?P4fsu)a=bf0vKT@hMtng!8dchJpqm(~axp z40oR4_)rb=&nz=S%Y4U%%cYby0st5s{r+Ezlc@{(|RYK|%(AIMFU(2`F&%_L0kJYliPM16Xd{_J)1}^FxAFAQX;xsKY z!r95I?0tA{=RyF$-J2&k(tDnk8R5#}G@Ba^trs9RT0}?KD!!HO#(wgqimio(z8x(gI{dL}RO1`tb)g s0ZkL|l000McNliru;tC20FEEKg+oAvf0Y^zh zK~z}7?Uk`=!cY{3|AZSChbl-Q*Re~6K!-j+1`DD~+QkQO6C657X%Sq^0~B;@=_7;= zeE`R1sMJoG>Y~^oq$O1llAcZt#fn`_ru$9za(*s9Kj)k)A!Yi8L65!H zlTK%+mZf3fBZ{EaYPf5)P*9X?6Rpvh62m}IwKp+5sZ{53VgAj1YJpcdz07*qoM6N<$f-SwbQ~&?~ literal 0 HcmV?d00001 diff --git a/mods/castrum/textures/castrum_num5.png b/mods/castrum/textures/castrum_num5.png new file mode 100644 index 0000000000000000000000000000000000000000..c6c8e3d482796bfb3b24e510135bd6c79f35985b GIT binary patch literal 522 zcmV+l0`>igP)000McNliru;tC20Fc0#5_yGU_0hdWc zK~z}7?UGL@!(kZ5zwd8r3zO!+n3}(hn=Q5+Oeq|cMF|JQO8!K0*uf6U%}p$&kQH%| zgHptSI3UZvl)}nE+SF>9Ka+VJWJAft>-2t3Z_jghKhO7h7&u|p)=((?@TI1d#R33! zuNT=zP0r(UleU`XmL`7eH&lT>B)AAXy#%8&#ra5$*F$2m|4ZOADXJVCd)L@ceeMD` z!E+cjm84Q8B3o_3)L}Q{E+A)$$a`nw0FsR1`7w-5*A=|?y|jEj9FdTC2qdX85b%XC z&@zcSYcp1y7mzC?l(lD~yr3Sf`J==;dDP@OsHv2 z-zm{Gk;m;PkK0d1O(k(%!EZ1Yy+bYnR=u5U24`f-(sUd3b@c-P9`9a|piJgBomFqA zlXWi*Rc%pGS}j?0jkGX$N|*cZ@%NZ#zwDp=wSdjwq`V9R$~&?Ur&fS5;5AGL_(B+Q z%)@om$G8drK$~%#F8q54guEak$Rs%uW3*Vk9Agj&1OkCTAP{`x4PL>IcH!~-rvLx| M07*qoM6N<$f-Y|3j{pDw literal 0 HcmV?d00001 diff --git a/mods/castrum/update.lua b/mods/castrum/update.lua index abba922..bb18644 100644 --- a/mods/castrum/update.lua +++ b/mods/castrum/update.lua @@ -32,13 +32,6 @@ minetest.register_chatcommand("update", { Battleground(i,player) end - file = io.open(minetest.get_worldpath().."/SAVE/Bridge.txt", "r") - local level = file:read("*l") - file:close() - for i=1,tonumber(level) do - Bridge(i,player) - end - file = io.open(minetest.get_worldpath().."/SAVE/Camp1.txt", "r") local level = file:read("*l") file:close() @@ -234,5 +227,60 @@ minetest.register_chatcommand("update", { if tonumber(level) > 0 then Update_knight(player) end + + file = io.open(minetest.get_worldpath().."/SAVE/Camp2.txt", "r") + local level = file:read("*l") + file:close() + for i=1,tonumber(level) do + Camp2(i,player) + end + file = io.open(minetest.get_worldpath().."/SAVE/Cactusfarm.txt", "r") + local level = file:read("*l") + file:close() + for i=1,tonumber(level) do + Cactusfarm(i,player) + end + file = io.open(minetest.get_worldpath().."/SAVE/Island_Smithy.txt", "r") + local level = file:read("*l") + file:close() + for i=1,tonumber(level) do + Island_Smithy(i,player) + end + file = io.open(minetest.get_worldpath().."/SAVE/Lake2.txt", "r") + local level = file:read("*l") + file:close() + for i=1,tonumber(level) do + Lake2(i,player) + end + file = io.open(minetest.get_worldpath().."/SAVE/Bridge.txt", "r") + local level = file:read("*l") + file:close() + for i=1,tonumber(level) do + Bridge(i,player) + end + file = io.open(minetest.get_worldpath().."/SAVE/Stable.txt", "r") + local level = file:read("*l") + file:close() + for i=1,tonumber(level) do + Stable(i,player) + end + file = io.open(minetest.get_worldpath().."/SAVE/Mountain_Quarry.txt", "r") + local level = file:read("*l") + file:close() + for i=1,tonumber(level) do + Mountain_Quarry(i,player) + end + file = io.open(minetest.get_worldpath().."/SAVE/Mountain_Fountain.txt", "r") + local level = file:read("*l") + file:close() + for i=1,tonumber(level) do + Mountain_Fountain(i,player) + end + file = io.open(minetest.get_worldpath().."/SAVE/Island_Home1.txt", "r") + local level = file:read("*l") + file:close() + for i=1,tonumber(level) do + Island_Home1(i,player) + end end, }) \ No newline at end of file diff --git a/mods/creative/init.lua b/mods/creative/init.lua index 51d6f79..2a590e3 100644 --- a/mods/creative/init.lua +++ b/mods/creative/init.lua @@ -40,16 +40,16 @@ end -- Unlimited node placement minetest.register_on_placenode(function(pos, newnode, placer, oldnode, itemstack) - return creative.is_enabled_for(placer:get_player_name()) + if placer and placer:is_player() then + return creative.is_enabled_for(placer:get_player_name()) + end end) -- Don't pick up if the item is already in the inventory local old_handle_node_drops = minetest.handle_node_drops function minetest.handle_node_drops(pos, drops, digger) - if not digger or not digger:is_player() then - return - end - if not creative.is_enabled_for(digger:get_player_name()) then + if not digger or not digger:is_player() or + not creative.is_enabled_for(digger:get_player_name()) then return old_handle_node_drops(pos, drops, digger) end local inv = digger:get_inventory() diff --git a/mods/creative/inventory.lua b/mods/creative/inventory.lua index 0e1d813..0aad92b 100644 --- a/mods/creative/inventory.lua +++ b/mods/creative/inventory.lua @@ -1,4 +1,19 @@ local player_inventory = {} +local inventory_cache = {} + +local function init_creative_cache(items) + inventory_cache[items] = {} + local i_cache = inventory_cache[items] + + for name, def in pairs(items) do + if def.groups.not_in_creative_inventory ~= 1 and + def.description and def.description ~= "" then + i_cache[name] = def + end + end + table.sort(i_cache) + return i_cache +end function creative.init_creative_inventory(player) local player_name = player:get_player_name() @@ -10,22 +25,25 @@ function creative.init_creative_inventory(player) minetest.create_detached_inventory("creative_" .. player_name, { allow_move = function(inv, from_list, from_index, to_list, to_index, count, player2) - if not to_list == "main" then - return count - else + local name = player2 and player2:get_player_name() or "" + if not creative.is_enabled_for(name) or + to_list == "main" then return 0 end + return count end, allow_put = function(inv, listname, index, stack, player2) return 0 end, allow_take = function(inv, listname, index, stack, player2) + local name = player2 and player2:get_player_name() or "" + if not creative.is_enabled_for(name) then + return 0 + end return -1 end, on_move = function(inv, from_list, from_index, to_list, to_index, count, player2) end, - on_put = function(inv, listname, index, stack, player2) - end, on_take = function(inv, listname, index, stack, player2) if stack and stack:get_count() > 0 then minetest.log("action", player_name .. " takes " .. stack:get_name().. " from creative inventory") @@ -42,11 +60,11 @@ function creative.update_creative_inventory(player_name, tab_content) creative.init_creative_inventory(minetest.get_player_by_name(player_name)) local player_inv = minetest.get_inventory({type = "detached", name = "creative_" .. player_name}) - for name, def in pairs(tab_content) do - if not (def.groups.not_in_creative_inventory == 1) and - def.description and def.description ~= "" and - (def.name:find(inv.filter, 1, true) or - def.description:lower():find(inv.filter, 1, true)) then + local items = inventory_cache[tab_content] or init_creative_cache(tab_content) + + for name, def in pairs(items) do + if def.name:find(inv.filter, 1, true) or + def.description:lower():find(inv.filter, 1, true) then creative_list[#creative_list+1] = name end end @@ -100,6 +118,8 @@ function creative.register_tab(name, title, items) button[2.75,3.4;0.8,0.5;creative_clear;X] tooltip[creative_search;Search] tooltip[creative_clear;Reset] + tooltip[creative_prev;Previous page] + tooltip[creative_next;Next page] listring[current_player;main] field_close_on_enter[creative_filter;false] ]] .. @@ -158,10 +178,6 @@ function creative.register_tab(name, title, items) }) end -minetest.register_on_joinplayer(function(player) - creative.update_creative_inventory(player:get_player_name(), minetest.registered_items) -end) - creative.register_tab("all", "All", minetest.registered_items) creative.register_tab("nodes", "Nodes", minetest.registered_nodes) creative.register_tab("tools", "Tools", minetest.registered_tools) diff --git a/mods/default/README.txt b/mods/default/README.txt index 8af65a9..75f869d 100644 --- a/mods/default/README.txt +++ b/mods/default/README.txt @@ -119,6 +119,7 @@ paramat (CC BY-SA 3.0): default_silver_sandstone.png -- Derived from a texture by GreenXenith (CC-BY-SA 3.0) default_silver_sandstone_brick.png -- Derived from a texture by GreenXenith (CC-BY-SA 3.0) default_silver_sandstone_block.png -- Derived from a texture by GreenXenith (CC-BY-SA 3.0) + default_bookshelf_slot.png -- Derived from a texture by Gambit (CC-BY-SA 3.0) brunob.santos (CC BY-SA 4.0): default_desert_cobble.png @@ -131,7 +132,6 @@ BlockMen (CC BY-SA 3.0): default_gold_ingot.png default_tool_steelsword.png default_diamond.png - default_book.png default_tool_*.png default_lava_source_animated.png default_lava_flowing_animated.png @@ -145,11 +145,7 @@ BlockMen (CC BY-SA 3.0): bubble.png gui_*.png -Wuzzy (CC BY-SA 3.0): - default_bookshelf_slot.png (based on default_book.png) - sofar (CC BY-SA 3.0): - default_book_written.png, based on default_book.png default_aspen_sapling default_aspen_tree default_aspen_tree_top, derived from default_pine_tree_top (by paramat) @@ -186,6 +182,7 @@ Gambit (CC BY-SA 3.0): default_snowball.png default_key.png default_key_skeleton.png + default_book.png asl97 (CC BY-SA 3.0): default_ice.png @@ -221,6 +218,9 @@ kilbith (CC BY-SA 3.0): default_tin_ingot.png default_tin_lump.png +CloudyProton (CC BY-SA 3.0): + default_book_written.png, based on default_book.png by Gambit + Glass breaking sounds (CC BY 3.0): 1: http://www.freesound.org/people/cmusounddesign/sounds/71947/ 2: http://www.freesound.org/people/Tomlija/sounds/97669/ diff --git a/mods/default/crafting.lua b/mods/default/crafting.lua index 50ffb1a..2d11d26 100644 --- a/mods/default/crafting.lua +++ b/mods/default/crafting.lua @@ -190,6 +190,9 @@ minetest.register_craft({ } }) +-- Axes +-- Recipes face left to match appearence in textures and inventory + minetest.register_craft({ output = 'default:axe_wood', recipe = { @@ -244,60 +247,6 @@ minetest.register_craft({ } }) -minetest.register_craft({ - output = 'default:axe_wood', - recipe = { - {'group:wood', 'group:wood'}, - {'group:stick', 'group:wood'}, - {'group:stick',''}, - } -}) - -minetest.register_craft({ - output = 'default:axe_stone', - recipe = { - {'group:stone', 'group:stone'}, - {'group:stick', 'group:stone'}, - {'group:stick', ''}, - } -}) - -minetest.register_craft({ - output = 'default:axe_steel', - recipe = { - {'default:steel_ingot', 'default:steel_ingot'}, - {'group:stick', 'default:steel_ingot'}, - {'group:stick', ''}, - } -}) - -minetest.register_craft({ - output = 'default:axe_bronze', - recipe = { - {'default:bronze_ingot', 'default:bronze_ingot'}, - {'group:stick', 'default:bronze_ingot'}, - {'group:stick', ''}, - } -}) - -minetest.register_craft({ - output = 'default:axe_mese', - recipe = { - {'default:mese_crystal', 'default:mese_crystal'}, - {'group:stick', 'default:mese_crystal'}, - {'group:stick', ''}, - } -}) - -minetest.register_craft({ - output = 'default:axe_diamond', - recipe = { - {'default:diamond', 'default:diamond'}, - {'group:stick', 'default:diamond'}, - {'group:stick', ''}, - } -}) - minetest.register_craft({ output = 'default:sword_wood', recipe = { @@ -904,7 +853,7 @@ minetest.register_craft({ -- Fuels -- --- Support use of group:tree +-- Support use of group:tree, includes default:tree which has the same burn time minetest.register_craft({ type = "fuel", recipe = "group:tree", @@ -927,12 +876,6 @@ minetest.register_craft({ burntime = 26, }) -minetest.register_craft({ - type = "fuel", - recipe = "default:tree", - burntime = 30, -}) - minetest.register_craft({ type = "fuel", recipe = "default:acacia_tree", @@ -946,7 +889,7 @@ minetest.register_craft({ }) --- Support use of group:wood +-- Support use of group:wood, includes default:wood which has the same burn time minetest.register_craft({ type = "fuel", recipe = "group:wood", @@ -965,12 +908,6 @@ minetest.register_craft({ burntime = 6, }) -minetest.register_craft({ - type = "fuel", - recipe = "default:wood", - burntime = 7, -}) - minetest.register_craft({ type = "fuel", recipe = "default:acacia_wood", @@ -984,53 +921,47 @@ minetest.register_craft({ }) --- Support use of group:sapling +-- Support use of group:sapling, includes default:sapling which has the same burn time minetest.register_craft({ type = "fuel", recipe = "group:sapling", - burntime = 10, + burntime = 5, }) minetest.register_craft({ type = "fuel", recipe = "default:bush_sapling", - burntime = 6, + burntime = 3, }) minetest.register_craft({ type = "fuel", recipe = "default:acacia_bush_sapling", - burntime = 7, + burntime = 4, }) minetest.register_craft({ type = "fuel", recipe = "default:aspen_sapling", - burntime = 8, + burntime = 4, }) minetest.register_craft({ type = "fuel", recipe = "default:pine_sapling", - burntime = 9, -}) - -minetest.register_craft({ - type = "fuel", - recipe = "default:sapling", - burntime = 10, + burntime = 5, }) minetest.register_craft({ type = "fuel", recipe = "default:acacia_sapling", - burntime = 11, + burntime = 6, }) minetest.register_craft({ type = "fuel", recipe = "default:junglesapling", - burntime = 12, + burntime = 6, }) @@ -1080,13 +1011,13 @@ minetest.register_craft({ minetest.register_craft({ type = "fuel", recipe = "default:junglegrass", - burntime = 2, + burntime = 3, }) minetest.register_craft({ type = "fuel", recipe = "group:leaves", - burntime = 1, + burntime = 4, }) minetest.register_craft({ @@ -1098,7 +1029,7 @@ minetest.register_craft({ minetest.register_craft({ type = "fuel", recipe = "default:papyrus", - burntime = 1, + burntime = 3, }) minetest.register_craft({ @@ -1110,7 +1041,7 @@ minetest.register_craft({ minetest.register_craft({ type = "fuel", recipe = "default:ladder_wood", - burntime = 2, + burntime = 7, }) minetest.register_craft({ @@ -1143,12 +1074,6 @@ minetest.register_craft({ burntime = 30, }) -minetest.register_craft({ - type = "fuel", - recipe = "default:apple", - burntime = 3, -}) - minetest.register_craft({ type = "fuel", recipe = "default:coal_lump", diff --git a/mods/default/craftitems.lua b/mods/default/craftitems.lua index 33cdd5f..e1d224d 100644 --- a/mods/default/craftitems.lua +++ b/mods/default/craftitems.lua @@ -75,12 +75,16 @@ local function book_on_use(itemstack, user) return itemstack end +local max_text_size = 10000 +local max_title_size = 80 +local short_title_size = 35 minetest.register_on_player_receive_fields(function(player, formname, fields) if formname ~= "default:book" then return end local inv = player:get_inventory() local stack = player:get_wielded_item() - if fields.save and fields.title ~= "" and fields.text ~= "" then + if fields.save and fields.title and fields.text + and fields.title ~= "" and fields.text ~= "" then local new_stack, data if stack:get_name() ~= "default:book_written" then local count = stack:get_count() @@ -99,11 +103,16 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) end if not data then data = {} end - data.title = fields.title + data.title = fields.title:sub(1, max_title_size) data.owner = player:get_player_name() - data.description = "\""..fields.title.."\" by "..data.owner - data.text = fields.text - data.text_len = #data.text + local short_title = data.title + -- Don't bother triming the title if the trailing dots would make it longer + if #short_title > short_title_size + 3 then + short_title = short_title:sub(1, short_title_size) .. "..." + end + data.description = "\""..short_title.."\" by "..data.owner + data.text = fields.text:sub(1, max_text_size) + data.text = data.text:gsub("\r\n", "\n"):gsub("\r", "\n") data.page = 1 data.page_max = math.ceil((#data.text:gsub("[^\n]", "") + 1) / lpp) diff --git a/mods/default/functions.lua b/mods/default/functions.lua index 5dc22ca..4c8d2f0 100644 --- a/mods/default/functions.lua +++ b/mods/default/functions.lua @@ -136,10 +136,12 @@ if minetest.settings:get_bool("enable_lavacooling") ~= false then label = "Lava cooling", nodenames = {"default:lava_source", "default:lava_flowing"}, neighbors = {"group:cools_lava", "group:water"}, - interval = 1, + interval = 2, chance = 2, catch_up = false, - action = default.cool_lava, + action = function(...) + default.cool_lava(...) + end, }) end @@ -222,7 +224,9 @@ minetest.register_abm({ neighbors = {"group:sand"}, interval = 12, chance = 83, - action = default.grow_cactus + action = function(...) + default.grow_cactus(...) + end }) minetest.register_abm({ @@ -231,7 +235,9 @@ minetest.register_abm({ neighbors = {"default:dirt", "default:dirt_with_grass"}, interval = 14, chance = 71, - action = default.grow_papyrus + action = function(...) + default.grow_papyrus(...) + end }) @@ -291,7 +297,7 @@ function default.register_fence(name, def) groups = {}, } for k, v in pairs(default_fields) do - if not def[k] then + if def[k] == nil then def[k] = v end end @@ -313,7 +319,7 @@ end -- Prevent decay of placed leaves default.after_place_leaves = function(pos, placer, itemstack, pointed_thing) - if placer and not placer:get_player_control().sneak then + if placer and placer:is_player() and not placer:get_player_control().sneak then local node = minetest.get_node(pos) node.param2 = 1 minetest.set_node(pos, node) diff --git a/mods/default/furnace.lua b/mods/default/furnace.lua index 4b82205..05056e6 100644 --- a/mods/default/furnace.lua +++ b/mods/default/furnace.lua @@ -119,7 +119,7 @@ local function furnace_node_timer(pos, elapsed) local fuel local update = true - while update do + while elapsed > 0 and update do update = false srclist = inv:get_list("src") @@ -134,13 +134,18 @@ local function furnace_node_timer(pos, elapsed) cooked, aftercooked = minetest.get_craft_result({method = "cooking", width = 1, items = srclist}) cookable = cooked.time ~= 0 + local el = math.min(elapsed, fuel_totaltime - fuel_time) + if cookable then -- fuel lasts long enough, adjust el to cooking duration + el = math.min(el, cooked.time - src_time) + end + -- Check if we have enough fuel to burn if fuel_time < fuel_totaltime then -- The furnace is currently active and has enough fuel - fuel_time = fuel_time + elapsed + fuel_time = fuel_time + el -- If there is a cookable item then check if it is ready yet if cookable then - src_time = src_time + elapsed + src_time = src_time + el if src_time >= cooked.time then -- Place result in dst list if possible if inv:room_for_item("dst", cooked.item) then @@ -149,6 +154,9 @@ local function furnace_node_timer(pos, elapsed) src_time = src_time - cooked.time update = true end + else + -- Item could not be cooked: probably missing fuel + update = true end end else @@ -166,8 +174,7 @@ local function furnace_node_timer(pos, elapsed) -- Take fuel from fuel list inv:set_stack("fuel", 1, afterfuel.items[1]) update = true - fuel_totaltime = fuel.time + (fuel_time - fuel_totaltime) - src_time = src_time + elapsed + fuel_totaltime = fuel.time + (fuel_totaltime - fuel_time) end else -- We don't need to get new fuel since there is no cookable item @@ -177,7 +184,7 @@ local function furnace_node_timer(pos, elapsed) fuel_time = 0 end - elapsed = 0 + elapsed = elapsed - el end if fuel and fuel_totaltime > fuel.time then diff --git a/mods/default/license.txt b/mods/default/license.txt index 72af728..7dcd24c 100644 --- a/mods/default/license.txt +++ b/mods/default/license.txt @@ -19,7 +19,7 @@ Licenses of media (textures, models and sounds) ----------------------------------------------- Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) -Copyright (C) 2010-2016: +Copyright (C) 2010-2017: celeron55, Perttu Ahola Cisoun G4JC @@ -44,6 +44,7 @@ Copyright (C) 2010-2016: GreenXenith kaeza kilbith + CloudyProton You are free to: Share — copy and redistribute the material in any medium or format. @@ -111,7 +112,6 @@ http://creativecommons.org/licenses/by-sa/4.0/ Attribution-ShareAlike 2.0 Generic (CC BY-SA 2.0) Copyright (C) 2014-2016 Neuromancer - You are free to: Share — copy and redistribute the material in any medium or format. Adapt — remix, transform, and build upon the material for any purpose, even commercially. diff --git a/mods/default/nodes.lua b/mods/default/nodes.lua index ceaa802..cea61af 100644 --- a/mods/default/nodes.lua +++ b/mods/default/nodes.lua @@ -440,7 +440,7 @@ minetest.register_node("default:dirt_with_snow", { tiles = {"default_snow.png", "default_dirt.png", {name = "default_dirt.png^default_snow_side.png", tileable_vertical = false}}, - groups = {crumbly = 3, spreading_dirt_type = 1, snowy = 1}, + groups = {crumbly = 3, soil = 1, spreading_dirt_type = 1, snowy = 1}, drop = 'default:dirt', sounds = default.node_sound_dirt_defaults({ footstep = {name = "default_snow_footstep", gain = 0.15}, @@ -608,7 +608,7 @@ minetest.register_node("default:sapling", { sounds = default.node_sound_leaves_defaults(), on_construct = function(pos) - minetest.get_node_timer(pos):start(math.random(2400,4800)) + minetest.get_node_timer(pos):start(math.random(300, 1500)) end, on_place = function(itemstack, placer, pointed_thing) @@ -673,9 +673,7 @@ minetest.register_node("default:apple", { sounds = default.node_sound_leaves_defaults(), after_place_node = function(pos, placer, itemstack) - if placer:is_player() then - minetest.set_node(pos, {name = "default:apple", param2 = 1}) - end + minetest.set_node(pos, {name = "default:apple", param2 = 1}) end, }) @@ -742,7 +740,7 @@ minetest.register_node("default:junglesapling", { sounds = default.node_sound_leaves_defaults(), on_construct = function(pos) - minetest.get_node_timer(pos):start(math.random(2400,4800)) + minetest.get_node_timer(pos):start(math.random(300, 1500)) end, on_place = function(itemstack, placer, pointed_thing) @@ -821,7 +819,7 @@ minetest.register_node("default:pine_sapling", { sounds = default.node_sound_leaves_defaults(), on_construct = function(pos) - minetest.get_node_timer(pos):start(math.random(2400,4800)) + minetest.get_node_timer(pos):start(math.random(300, 1500)) end, on_place = function(itemstack, placer, pointed_thing) @@ -901,7 +899,7 @@ minetest.register_node("default:acacia_sapling", { sounds = default.node_sound_leaves_defaults(), on_construct = function(pos) - minetest.get_node_timer(pos):start(math.random(2400,4800)) + minetest.get_node_timer(pos):start(math.random(300, 1500)) end, on_place = function(itemstack, placer, pointed_thing) @@ -979,7 +977,7 @@ minetest.register_node("default:aspen_sapling", { sounds = default.node_sound_leaves_defaults(), on_construct = function(pos) - minetest.get_node_timer(pos):start(math.random(2400,4800)) + minetest.get_node_timer(pos):start(math.random(300, 1500)) end, on_place = function(itemstack, placer, pointed_thing) @@ -1362,7 +1360,7 @@ minetest.register_node("default:bush_sapling", { sounds = default.node_sound_leaves_defaults(), on_construct = function(pos) - minetest.get_node_timer(pos):start(math.random(1200, 2400)) + minetest.get_node_timer(pos):start(math.random(300, 1500)) end, on_place = function(itemstack, placer, pointed_thing) @@ -1433,7 +1431,7 @@ minetest.register_node("default:acacia_bush_sapling", { sounds = default.node_sound_leaves_defaults(), on_construct = function(pos) - minetest.get_node_timer(pos):start(math.random(1200, 2400)) + minetest.get_node_timer(pos):start(math.random(300, 1500)) end, on_place = function(itemstack, placer, pointed_thing) @@ -1783,13 +1781,14 @@ local function get_chest_formspec(pos) end local function chest_lid_obstructed(pos) - local above = { x = pos.x, y = pos.y + 1, z = pos.z } + local above = {x = pos.x, y = pos.y + 1, z = pos.z} local def = minetest.registered_nodes[minetest.get_node(above).name] -- allow ladders, signs, wallmounted things and torches to not obstruct - if def.drawtype == "airlike" or + if def and + (def.drawtype == "airlike" or def.drawtype == "signlike" or def.drawtype == "torchlike" or - (def.drawtype == "nodebox" and def.paramtype2 == "wallmounted") then + (def.drawtype == "nodebox" and def.paramtype2 == "wallmounted")) then return false end return true @@ -1797,6 +1796,24 @@ end local open_chests = {} +local function chest_lid_close(pn) + local pos = open_chests[pn].pos + local sound = open_chests[pn].sound + local swap = open_chests[pn].swap + + open_chests[pn] = nil + for k, v in pairs(open_chests) do + if v.pos.x == pos.x and v.pos.y == pos.y and v.pos.z == pos.z then + return true + end + end + + local node = minetest.get_node(pos) + minetest.after(0.2, minetest.swap_node, pos, { name = "default:" .. swap, + param2 = node.param2 }) + minetest.sound_play(sound, {gain = 0.3, pos = pos, max_hear_distance = 10}) +end + minetest.register_on_player_receive_fields(function(player, formname, fields) if formname ~= "default:chest" then return @@ -1810,23 +1827,17 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) return end - local pos = open_chests[pn].pos - local sound = open_chests[pn].sound - local swap = open_chests[pn].swap - local node = minetest.get_node(pos) - - open_chests[pn] = nil - for k, v in pairs(open_chests) do - if v.pos.x == pos.x and v.pos.y == pos.y and v.pos.z == pos.z then - return true - end - end - minetest.after(0.2, minetest.swap_node, pos, { name = "default:" .. swap, - param2 = node.param2 }) - minetest.sound_play(sound, {gain = 0.3, pos = pos, max_hear_distance = 10}) + chest_lid_close(pn) return true end) +minetest.register_on_leaveplayer(function(player) + local pn = player:get_player_name() + if open_chests[pn] then + chest_lid_close(pn) + end +end) + function default.register_chest(name, d) local def = table.copy(d) def.drawtype = "mesh" @@ -1960,6 +1971,13 @@ function default.register_chest(name, d) open_chests[clicker:get_player_name()] = { pos = pos, sound = def.sound_close, swap = name } end + def.on_blast = function(pos) + local drops = {} + default.get_inventory_drops(pos, "main", drops) + drops[#drops+1] = "default:" .. name + minetest.remove_node(pos) + return drops + end end def.on_metadata_inventory_move = function(pos, from_list, from_index, @@ -1977,27 +1995,28 @@ function default.register_chest(name, d) " takes " .. stack:get_name() .. " from chest at " .. minetest.pos_to_string(pos)) end - def.on_blast = function(pos) - local drops = {} - default.get_inventory_drops(pos, "main", drops) - drops[#drops+1] = "default:chest" - minetest.remove_node(pos) - return drops - end local def_opened = table.copy(def) local def_closed = table.copy(def) def_opened.mesh = "chest_open.obj" + for i = 1, #def_opened.tiles do + if type(def_opened.tiles[i]) == "string" then + def_opened.tiles[i] = {name = def_opened.tiles[i], backface_culling = true} + elseif def_opened.tiles[i].backface_culling == nil then + def_opened.tiles[i].backface_culling = true + end + end def_opened.drop = "default:" .. name def_opened.groups.not_in_creative_inventory = 1 def_opened.selection_box = { type = "fixed", fixed = { -1/2, -1/2, -1/2, 1/2, 3/16, 1/2 }, - } + } def_opened.can_dig = function() return false end + def_opened.on_blast = function() end def_closed.mesh = nil def_closed.drawtype = nil diff --git a/mods/default/textures/default_book.png b/mods/default/textures/default_book.png index 448a7df0287088582d9e12eaa1189052ace175e2..bcf1e6a00f20d78ba884b85432ca9760292f04dc 100644 GIT binary patch delta 176 zcmV;h08jt_0n7oAB!4GROjJbx002u96J8h?a~&OsA|jV2CYC8FoT8MWsG6y-qOY~6 z%+SZ(;M%&0gf{>H00DGTPE!Ct=GbNc002`-L_t&t*JEHn0?fuxMv4oB#pW6UVWqgZ zhB!h6T-0F#T|faBAkbLEz`!Kr;^NpP05oK_kc-A7kZE&vD=AhAfOIRJ*|`v6u+UBc es1=F~SOEa}KM_%$!pyb+0000(Yh7ML)4Eal|aXmS~fvt%tAj&gF(9N2&Ayd^|aDl+$Ns|_JEttg6ykPRA zNfRb5Vrae~qPk#C0aNpYrNR@;d=nCQ#27DiI^+tq3CwETcypCN(k6>3X$c|;2e=q? X-*blutaO|Qw1dIZ)z4*}Q$iB}@j6Ps diff --git a/mods/default/textures/default_book_written.png b/mods/default/textures/default_book_written.png index 9196ac64764e2ada74ef8d7c3684716b680239ff..f23d122575be2970be79e02bdbc7aa8b9afd9c6c 100644 GIT binary patch delta 246 zcmVh} zh$14FCMK3CDRWE%oT8MVprE0snyIg%ueGSl%gfBr$I;Qz-Qe2p?(X#T^ul@h8UO$Q z0d!JMQvg8b*k%9#0CGu0K~xyih0ehagdhw>QObi>tAZWI|8M`*ff0=^jNSF5X|8h* z6GFJ{qljE-lwr6KGuN#Vbx{3ml>}42kE`l83N88gCvzp{j0PYyVpiT?gk+6Sp(mwc w2AWQAKq;0od+(1ff+hO*oT;F_FuM2o0R_ARwI5qZZ2$lO07*qoM6N<$g6}A2mjD0& delta 267 zcmZo;n#D9hqMn7Bfq~)e-A6${N;kkK#IYh7ML)4ruu{l3pP$z%n{HL=vlF@Yr!Oj<^_{yeN<6(Wn^2Z>~)?;)>T@fC25XGuj^rH z2?=jknbxDyjklICxwaluGt%P~ZkwUAH&7sneKEs@l9KF328KUId@Ac#r?>%aWbkzL Lb75KMl+XkKRjXKP diff --git a/mods/default/textures/default_bookshelf_slot.png b/mods/default/textures/default_bookshelf_slot.png index 715a3dce79d22d9e3d73db7cb18d1ab4dd435a29..cd2c8bceb3832f799198366b569798d872ee252e 100644 GIT binary patch delta 80 zcmdnb*uyx%+0(?+#W95AdU65~*c>>Ja^S$N!v`iFQaE;afko><$JT`hnh&NkHE(8W jZe(WmXJ$5LW?^7hu!l|Q%BHP>3_#%N>gTe~DWM4fRRteF delta 131 zcmeBS+|M|{xrQ;x+uensgH_gpfq{Xuz$3Dlfq`2Xgc%uT&5-~KvX^-Jy0SlHmE`48 zU(8?~02DIvba4#fxSpKA(8SJjhKa{Uj)zT?r_YUt{g#B7hoO&0(ubVnfXN909tjU} e5)zUd7#I%qvHS9@GpGjYX7F_Nb6Mw<&;$UUeju;_ diff --git a/mods/default/tools.lua b/mods/default/tools.lua index 45c779f..77ea969 100644 --- a/mods/default/tools.lua +++ b/mods/default/tools.lua @@ -389,7 +389,8 @@ minetest.register_tool("default:key", { local node = minetest.get_node(under) local def = minetest.registered_nodes[node.name] if def and def.on_rightclick and - not (placer and placer:get_player_control().sneak) then + not (placer and placer:is_player() and + placer:get_player_control().sneak) then return def.on_rightclick(under, node, placer, itemstack, pointed_thing) or itemstack end diff --git a/mods/default/torch.lua b/mods/default/torch.lua index 3c3ae96..a7b83cf 100644 --- a/mods/default/torch.lua +++ b/mods/default/torch.lua @@ -63,7 +63,8 @@ minetest.register_node("default:torch", { local node = minetest.get_node(under) local def = minetest.registered_nodes[node.name] if def and def.on_rightclick and - ((not placer) or (placer and not placer:get_player_control().sneak)) then + not (placer and placer:is_player() and + placer:get_player_control().sneak) then return def.on_rightclick(under, node, placer, itemstack, pointed_thing) or itemstack end diff --git a/mods/default/trees.lua b/mods/default/trees.lua index 81c9831..44176d7 100644 --- a/mods/default/trees.lua +++ b/mods/default/trees.lua @@ -31,12 +31,12 @@ local function is_snow_nearby(pos) end --- Sapling ABM +-- Grow sapling function default.grow_sapling(pos) if not default.can_grow(pos) then - -- try a bit later again - minetest.get_node_timer(pos):start(math.random(240, 600)) + -- try again 5 min later + minetest.get_node_timer(pos):start(300) return end @@ -94,7 +94,7 @@ minetest.register_lbm({ "default:pine_sapling", "default:acacia_sapling", "default:aspen_sapling"}, action = function(pos) - minetest.get_node_timer(pos):start(math.random(1200, 2400)) + minetest.get_node_timer(pos):start(math.random(300, 1500)) end }) @@ -468,7 +468,9 @@ function default.sapling_on_place(itemstack, placer, pointed_thing, local node = minetest.get_node_or_nil(pos) local pdef = node and minetest.registered_nodes[node.name] - if pdef and pdef.on_rightclick and not placer:get_player_control().sneak then + if pdef and pdef.on_rightclick and + not (placer and placer:is_player() and + placer:get_player_control().sneak) then return pdef.on_rightclick(pos, node, placer, itemstack, pointed_thing) end @@ -481,7 +483,7 @@ function default.sapling_on_place(itemstack, placer, pointed_thing, end end - local player_name = placer:get_player_name() + local player_name = placer and placer:get_player_name() or "" -- Check sapling position for protection if minetest.is_protected(pos, player_name) then minetest.record_protection_violation(pos, player_name) diff --git a/mods/doors/init.lua b/mods/doors/init.lua index a07b4ae..798a6dd 100644 --- a/mods/doors/init.lua +++ b/mods/doors/init.lua @@ -203,12 +203,7 @@ end local function can_dig_door(pos, digger) replace_old_owner_information(pos) - if default.can_interact_with_node(digger, pos) then - return true - else - minetest.record_protection_violation(pos, digger:get_player_name()) - return false - end + return default.can_interact_with_node(digger, pos) end function doors.register(name, def) @@ -266,7 +261,8 @@ function doors.register(name, def) local node = minetest.get_node(pointed_thing.under) local pdef = minetest.registered_nodes[node.name] if pdef and pdef.on_rightclick and - not placer:get_player_control().sneak then + not (placer and placer:is_player() and + placer:get_player_control().sneak) then return pdef.on_rightclick(pointed_thing.under, node, placer, itemstack, pointed_thing) end @@ -290,12 +286,12 @@ function doors.register(name, def) return itemstack end - local pn = placer:get_player_name() + local pn = placer and placer:get_player_name() or "" if minetest.is_protected(pos, pn) or minetest.is_protected(above, pn) then return itemstack end - local dir = minetest.dir_to_facedir(placer:get_look_dir()) + local dir = placer and minetest.dir_to_facedir(placer:get_look_dir()) or 0 local ref = { {x = -1, y = 0, z = 0}, @@ -712,7 +708,7 @@ function doors.register_fencegate(name, def) local fence = { description = def.description, drawtype = "mesh", - tiles = {def.texture}, + tiles = {}, paramtype = "light", paramtype2 = "facedir", sunlight_propagates = true, @@ -734,6 +730,16 @@ function doors.register_fencegate(name, def) }, } + + if type(def.texture) == "string" then + fence.tiles[1] = {name = def.texture, backface_culling = true} + elseif def.texture.backface_culling == nil then + fence.tiles[1] = table.copy(def.texture) + fence.tiles[1].backface_culling = true + else + fence.tiles[1] = def.texture + end + if not fence.sounds then fence.sounds = default.node_sound_wood_defaults() end diff --git a/mods/farming/api.lua b/mods/farming/api.lua index 35a77e9..1c63ee3 100644 --- a/mods/farming/api.lua +++ b/mods/farming/api.lua @@ -118,15 +118,6 @@ farming.register_hoe = function(name, def) {"", "group:stick", ""} } }) - -- Reverse Recipe - minetest.register_craft({ - output = name:sub(2), - recipe = { - {"", def.material, def.material}, - {"", "group:stick", ""}, - {"", "group:stick", ""} - } - }) end end @@ -153,12 +144,14 @@ farming.place_seed = function(itemstack, placer, pointed_thing, plantname) local under = minetest.get_node(pt.under) local above = minetest.get_node(pt.above) - if minetest.is_protected(pt.under, placer:get_player_name()) then - minetest.record_protection_violation(pt.under, placer:get_player_name()) + local player_name = placer and placer:get_player_name() or "" + + if minetest.is_protected(pt.under, player_name) then + minetest.record_protection_violation(pt.under, player_name) return end - if minetest.is_protected(pt.above, placer:get_player_name()) then - minetest.record_protection_violation(pt.above, placer:get_player_name()) + if minetest.is_protected(pt.above, player_name) then + minetest.record_protection_violation(pt.above, player_name) return end @@ -189,7 +182,7 @@ farming.place_seed = function(itemstack, placer, pointed_thing, plantname) minetest.add_node(pt.above, {name = plantname, param2 = 1}) tick(pt.above) if not (creative and creative.is_enabled_for - and creative.is_enabled_for(placer:get_player_name())) then + and creative.is_enabled_for(player_name)) then itemstack:take_item() end return itemstack @@ -319,7 +312,8 @@ farming.register_plant = function(name, def) local node = minetest.get_node(under) local udef = minetest.registered_nodes[node.name] if udef and udef.on_rightclick and - not (placer and placer:get_player_control().sneak) then + not (placer and placer:is_player() and + placer:get_player_control().sneak) then return udef.on_rightclick(under, node, placer, itemstack, pointed_thing) or itemstack end diff --git a/mods/farming/depends.txt b/mods/farming/depends.txt index 470ec30..301d971 100644 --- a/mods/farming/depends.txt +++ b/mods/farming/depends.txt @@ -1,2 +1,3 @@ default wool +stairs diff --git a/mods/farming/nodes.lua b/mods/farming/nodes.lua index c969d31..1e746ec 100644 --- a/mods/farming/nodes.lua +++ b/mods/farming/nodes.lua @@ -98,6 +98,16 @@ minetest.register_node("farming:straw", { sounds = default.node_sound_leaves_defaults(), }) +stairs.register_stair_and_slab( + "straw", + "farming:straw", + {snappy = 3, flammable = 4}, + {"farming_straw.png"}, + "Straw Stair", + "Straw Slab", + default.node_sound_leaves_defaults() +) + minetest.register_abm({ label = "Farming soil", nodenames = {"group:field"}, diff --git a/mods/flowers/init.lua b/mods/flowers/init.lua index cb5b219..1f55a3f 100644 --- a/mods/flowers/init.lua +++ b/mods/flowers/init.lua @@ -127,24 +127,29 @@ function flowers.flower_spread(pos, node) local pos0 = vector.subtract(pos, 4) local pos1 = vector.add(pos, 4) - if #minetest.find_nodes_in_area(pos0, pos1, "group:flora") > 3 then + -- Maximum flower density created by mapgen is 13 per 9x9 area. + -- The limit of 7 below was tuned by in-game testing to result in a maximum + -- flower density by ABM spread of 13 per 9x9 area. + -- Warning: Setting this limit theoretically without in-game testing + -- results in a maximum flower density by ABM spread that is far too high. + if #minetest.find_nodes_in_area(pos0, pos1, "group:flora") > 7 then return end local soils = minetest.find_nodes_in_area_under_air( pos0, pos1, "group:soil") - if #soils > 0 then - local seedling = soils[math.random(#soils)] - local seedling_above = - {x = seedling.x, y = seedling.y + 1, z = seedling.z} - light = minetest.get_node_light(seedling_above) - if not light or light < 13 or - -- Desert sand is in the soil group - minetest.get_node(seedling).name == "default:desert_sand" then - return + local num_soils = #soils + if num_soils >= 1 then + for si = 1, math.min(3, num_soils) do + local soil = soils[math.random(num_soils)] + local soil_above = {x = soil.x, y = soil.y + 1, z = soil.z} + light = minetest.get_node_light(soil_above) + if light and light >= 13 and + -- Desert sand is in the soil group + minetest.get_node(soil).name ~= "default:desert_sand" then + minetest.set_node(soil_above, {name = node.name}) + end end - - minetest.set_node(seedling_above, {name = node.name}) end end @@ -152,7 +157,7 @@ minetest.register_abm({ label = "Flower spread", nodenames = {"group:flora"}, interval = 13, - chance = 96, + chance = 300, action = function(...) flowers.flower_spread(...) end, @@ -204,38 +209,34 @@ minetest.register_node("flowers:mushroom_brown", { -- Mushroom spread and death +function flowers.mushroom_spread(pos, node) + if minetest.get_node_light(pos, nil) == 15 then + minetest.remove_node(pos) + return + end + local positions = minetest.find_nodes_in_area_under_air( + {x = pos.x - 1, y = pos.y - 2, z = pos.z - 1}, + {x = pos.x + 1, y = pos.y + 1, z = pos.z + 1}, + {"group:soil", "group:tree"}) + if #positions == 0 then + return + end + local pos2 = positions[math.random(#positions)] + pos2.y = pos2.y + 1 + if minetest.get_node_light(pos, 0.5) <= 3 and + minetest.get_node_light(pos2, 0.5) <= 3 then + minetest.set_node(pos2, {name = node.name}) + end +end + minetest.register_abm({ label = "Mushroom spread", nodenames = {"flowers:mushroom_brown", "flowers:mushroom_red"}, interval = 11, - chance = 50, - action = function(pos, node) - if minetest.get_node_light(pos, nil) == 15 then - minetest.remove_node(pos) - return - end - local random = { - x = pos.x + math.random(-2, 2), - y = pos.y + math.random(-1, 1), - z = pos.z + math.random(-2, 2) - } - local random_node = minetest.get_node_or_nil(random) - if not random_node or random_node.name ~= "air" then - return - end - local node_under = minetest.get_node_or_nil({x = random.x, - y = random.y - 1, z = random.z}) - if not node_under then - return - end - - if (minetest.get_item_group(node_under.name, "soil") ~= 0 or - minetest.get_item_group(node_under.name, "tree") ~= 0) and - minetest.get_node_light(pos, 0.5) <= 3 and - minetest.get_node_light(random, 0.5) <= 3 then - minetest.set_node(random, {name = node.name}) - end - end + chance = 150, + action = function(...) + flowers.mushroom_spread(...) + end, }) @@ -280,12 +281,17 @@ minetest.register_node("flowers:waterlily", { on_place = function(itemstack, placer, pointed_thing) local pos = pointed_thing.above - local node = minetest.get_node(pointed_thing.under).name - local def = minetest.registered_nodes[node] - local player_name = placer:get_player_name() + local node = minetest.get_node(pointed_thing.under) + local def = minetest.registered_nodes[node.name] + local player_name = placer and placer:get_player_name() or "" + + if def and def.on_rightclick then + return def.on_rightclick(pointed_thing.under, node, placer, itemstack, + pointed_thing) + end if def and def.liquidtype == "source" and - minetest.get_item_group(node, "water") > 0 then + minetest.get_item_group(node.name, "water") > 0 then if not minetest.is_protected(pos, player_name) then minetest.set_node(pos, {name = "flowers:waterlily", param2 = math.random(0, 3)}) diff --git a/mods/screwdriver/init.lua b/mods/screwdriver/init.lua index e76f054..634edf8 100644 --- a/mods/screwdriver/init.lua +++ b/mods/screwdriver/init.lua @@ -85,9 +85,10 @@ screwdriver.handler = function(itemstack, user, pointed_thing, mode, uses) end local pos = pointed_thing.under + local player_name = user and user:get_player_name() or "" - if minetest.is_protected(pos, user:get_player_name()) then - minetest.record_protection_violation(pos, user:get_player_name()) + if minetest.is_protected(pos, player_name) then + minetest.record_protection_violation(pos, player_name) return end @@ -133,8 +134,8 @@ screwdriver.handler = function(itemstack, user, pointed_thing, mode, uses) minetest.check_for_falling(pos) end - if not (creative and creative.is_enabled_for - and creative.is_enabled_for(user:get_player_name())) then + if not (creative and creative.is_enabled_for and + creative.is_enabled_for(player_name)) then itemstack:add_wear(65535 / ((uses or 200) - 1)) end diff --git a/mods/sfinv/api.lua b/mods/sfinv/api.lua index bd6de1e..fdb652b 100644 --- a/mods/sfinv/api.lua +++ b/mods/sfinv/api.lua @@ -29,7 +29,8 @@ end function sfinv.get_nav_fs(player, context, nav, current_idx) -- Only show tabs if there is more than one page if #nav > 1 then - return "tabheader[0,0;tabs;" .. table.concat(nav, ",") .. ";" .. current_idx .. ";true;false]" + return "tabheader[0,0;sfinv_nav_tabs;" .. table.concat(nav, ",") .. + ";" .. current_idx .. ";true;false]" else return "" end @@ -84,9 +85,20 @@ function sfinv.get_formspec(player, context) return page:get(player, context) else local old_page = context.page - context.page = sfinv.get_homepage_name(player) + local home_page = sfinv.get_homepage_name(player) + + if old_page == home_page then + minetest.log("error", "[sfinv] Couldn't find " .. dump(old_page) .. + ", which is also the old page") + + return "" + end + + context.page = home_page assert(sfinv.pages[context.page], "[sfinv] Invalid homepage") - minetest.log("warning", "[sfinv] Couldn't find " .. dump(old_page) .. " so using switching to homepage") + minetest.log("warning", "[sfinv] Couldn't find " .. dump(old_page) .. + " so switching to homepage") + return sfinv.get_formspec(player, context) end end @@ -151,8 +163,8 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) end -- Was a tab selected? - if fields.tabs and context.nav then - local tid = tonumber(fields.tabs) + if fields.sfinv_nav_tabs and context.nav then + local tid = tonumber(fields.sfinv_nav_tabs) if tid and tid > 0 then local id = context.nav[tid] local page = sfinv.pages[id] diff --git a/mods/stairs/depends.txt b/mods/stairs/depends.txt index d77ba25..4ad96d5 100644 --- a/mods/stairs/depends.txt +++ b/mods/stairs/depends.txt @@ -1,2 +1 @@ default -farming diff --git a/mods/stairs/init.lua b/mods/stairs/init.lua index 90172ef..6e98d74 100644 --- a/mods/stairs/init.lua +++ b/mods/stairs/init.lua @@ -22,21 +22,23 @@ local function rotate_and_place(itemstack, placer, pointed_thing) local p1 = pointed_thing.above local param2 = 0 - local placer_pos = placer:getpos() - if placer_pos then - param2 = minetest.dir_to_facedir(vector.subtract(p1, placer_pos)) - end + if placer then + local placer_pos = placer:getpos() + if placer_pos then + param2 = minetest.dir_to_facedir(vector.subtract(p1, placer_pos)) + end - local finepos = minetest.pointed_thing_to_face_pos(placer, pointed_thing) - local fpos = finepos.y % 1 + local finepos = minetest.pointed_thing_to_face_pos(placer, pointed_thing) + local fpos = finepos.y % 1 - if p0.y - 1 == p1.y or (fpos > 0 and fpos < 0.5) - or (fpos < -0.5 and fpos > -0.999999999) then - param2 = param2 + 20 - if param2 == 21 then - param2 = 23 - elseif param2 == 23 then - param2 = 21 + if p0.y - 1 == p1.y or (fpos > 0 and fpos < 0.5) + or (fpos < -0.5 and fpos > -0.999999999) then + param2 = param2 + 20 + if param2 == 21 then + param2 = 23 + elseif param2 == 23 then + param2 = 21 + end end end return minetest.item_place(itemstack, placer, pointed_thing, param2) @@ -46,16 +48,29 @@ end -- Node will be called stairs:stair_ function stairs.register_stair(subname, recipeitem, groups, images, description, sounds) - groups.stair = 1 + local stair_images = {} + for i, image in ipairs(images) do + if type(image) == "string" then + stair_images[i] = { + name = image, + backface_culling = true, + } + elseif image.backface_culling == nil then -- override using any other value + stair_images[i] = table.copy(image) + stair_images[i].backface_culling = true + end + end + local new_groups = table.copy(groups) + new_groups.stair = 1 minetest.register_node(":stairs:stair_" .. subname, { description = description, drawtype = "mesh", mesh = "stairs_stair.obj", - tiles = images, + tiles = stair_images, paramtype = "light", paramtype2 = "facedir", is_ground_content = false, - groups = groups, + groups = new_groups, sounds = sounds, selection_box = { type = "fixed", @@ -89,16 +104,7 @@ function stairs.register_stair(subname, recipeitem, groups, images, description, end if recipeitem then - minetest.register_craft({ - output = 'stairs:stair_' .. subname .. ' 8', - recipe = { - {recipeitem, "", ""}, - {recipeitem, recipeitem, ""}, - {recipeitem, recipeitem, recipeitem}, - }, - }) - - -- Flipped recipe for the silly minecrafters + -- Recipe matches appearence in inventory minetest.register_craft({ output = 'stairs:stair_' .. subname .. ' 8', recipe = { @@ -132,7 +138,8 @@ local slab_trans_dir = {[0] = 8, 0, 2, 1, 3, 4} -- Node will be called stairs:slab_ function stairs.register_slab(subname, recipeitem, groups, images, description, sounds) - groups.slab = 1 + local new_groups = table.copy(groups) + new_groups.slab = 1 minetest.register_node(":stairs:slab_" .. subname, { description = description, drawtype = "nodebox", @@ -140,7 +147,7 @@ function stairs.register_slab(subname, recipeitem, groups, images, description, paramtype = "light", paramtype2 = "facedir", is_ground_content = false, - groups = groups, + groups = new_groups, sounds = sounds, node_box = { type = "fixed", @@ -149,8 +156,9 @@ function stairs.register_slab(subname, recipeitem, groups, images, description, on_place = function(itemstack, placer, pointed_thing) local under = minetest.get_node(pointed_thing.under) local wield_item = itemstack:get_name() + local player_name = placer and placer:get_player_name() or "" local creative_enabled = (creative and creative.is_enabled_for - and creative.is_enabled_for(placer:get_player_name())) + and creative.is_enabled_for(player_name)) if under and under.name:find("stairs:slab_") then -- place slab using under node orientation @@ -166,9 +174,8 @@ function stairs.register_slab(subname, recipeitem, groups, images, description, if not recipeitem then return itemstack end - local player_name = placer:get_player_name() if minetest.is_protected(pointed_thing.under, player_name) and not - minetest.check_player_privs(placer, "protection_bypass") then + minetest.check_player_privs(player_name, "protection_bypass") then minetest.record_protection_violation(pointed_thing.under, player_name) return @@ -538,16 +545,6 @@ stairs.register_stair_and_slab( default.node_sound_stone_defaults() ) -stairs.register_stair_and_slab( - "straw", - "farming:straw", - {snappy = 3, flammable = 4}, - {"farming_straw.png"}, - "Straw Stair", - "Straw Slab", - default.node_sound_leaves_defaults() -) - stairs.register_stair_and_slab( "steelblock", "default:steelblock", diff --git a/mods/tnt/init.lua b/mods/tnt/init.lua index f54b2f1..d12e814 100644 --- a/mods/tnt/init.lua +++ b/mods/tnt/init.lua @@ -86,8 +86,8 @@ end local basic_flame_on_construct -- cached value local function destroy(drops, npos, cid, c_air, c_fire, on_blast_queue, on_construct_queue, - ignore_protection, ignore_on_blast) - if not ignore_protection and minetest.is_protected(npos, "") then + ignore_protection, ignore_on_blast, owner) + if not ignore_protection and minetest.is_protected(npos, owner) then return cid end @@ -208,6 +208,7 @@ local function add_effects(pos, radius, drops) collisiondetection = false, vertical = false, texture = "tnt_boom.png", + glow = 15, }) minetest.add_particlespawner({ amount = 64, @@ -266,13 +267,13 @@ function tnt.burn(pos, nodename) elseif def.on_ignite then def.on_ignite(pos) elseif minetest.get_item_group(name, "tnt") > 0 then + minetest.swap_node(pos, {name = name .. "_burning"}) minetest.sound_play("tnt_ignite", {pos = pos}) - minetest.set_node(pos, {name = name .. "_burning"}) minetest.get_node_timer(pos):start(1) end end -local function tnt_explode(pos, radius, ignore_protection, ignore_on_blast) +local function tnt_explode(pos, radius, ignore_protection, ignore_on_blast, owner, explode_center) pos = vector.round(pos) -- scan for adjacent TNT nodes first, and enlarge the explosion local vm1 = VoxelManip() @@ -286,6 +287,10 @@ local function tnt_explode(pos, radius, ignore_protection, ignore_on_blast) local c_tnt_burning = minetest.get_content_id("tnt:tnt_burning") local c_tnt_boom = minetest.get_content_id("tnt:boom") local c_air = minetest.get_content_id("air") + -- make sure we still have explosion even when centre node isnt tnt related + if explode_center then + count = 1 + end for z = pos.z - 2, pos.z + 2 do for y = pos.y - 2, pos.y + 2 do @@ -333,7 +338,7 @@ local function tnt_explode(pos, radius, ignore_protection, ignore_on_blast) if cid ~= c_air then data[vi] = destroy(drops, p, cid, c_air, c_fire, on_blast_queue, on_construct_queue, - ignore_protection, ignore_on_blast) + ignore_protection, ignore_on_blast, owner) end end vi = vi + 1 @@ -375,16 +380,26 @@ local function tnt_explode(pos, radius, ignore_protection, ignore_on_blast) queued_data.fn(queued_data.pos) end + minetest.log("action", "TNT owned by " .. owner .. " detonated at " .. + minetest.pos_to_string(pos) .. " with radius " .. radius) + return drops, radius end function tnt.boom(pos, def) + def = def or {} + def.radius = def.radius or 1 + def.damage_radius = def.damage_radius or def.radius * 2 + local meta = minetest.get_meta(pos) + local owner = meta:get_string("owner") + if not def.explode_center then + minetest.set_node(pos, {name = "tnt:boom"}) + end minetest.sound_play("tnt_explode", {pos = pos, gain = 1.5, max_hear_distance = 2*64}) - minetest.set_node(pos, {name = "tnt:boom"}) local drops, radius = tnt_explode(pos, def.radius, def.ignore_protection, - def.ignore_on_blast) + def.ignore_on_blast, owner, def.explode_center) -- append entity drops - local damage_radius = (radius / def.radius) * def.damage_radius + local damage_radius = (radius / math.max(1, def.radius)) * def.damage_radius entity_physics(pos, damage_radius, drops) if not def.disable_drops then eject_drops(drops, pos, radius) @@ -400,12 +415,6 @@ minetest.register_node("tnt:boom", { walkable = false, drop = "", groups = {dig_immediate = 3}, - on_construct = function(pos) - minetest.get_node_timer(pos):start(0.4) - end, - on_timer = function(pos, elapsed) - minetest.remove_node(pos) - end, -- unaffected by explosions on_blast = function() end, }) @@ -508,17 +517,17 @@ minetest.register_node("tnt:gunpowder_burning", { on_timer = function(pos, elapsed) for dx = -1, 1 do for dz = -1, 1 do - for dy = -1, 1 do - if not (dx == 0 and dz == 0) then - tnt.burn({ - x = pos.x + dx, - y = pos.y + dy, - z = pos.z + dz, - }) + if math.abs(dx) + math.abs(dz) == 1 then + for dy = -1, 1 do + tnt.burn({ + x = pos.x + dx, + y = pos.y + dy, + z = pos.z + dz, + }) + end end end end - end minetest.remove_node(pos) end, -- unaffected by explosions @@ -579,9 +588,16 @@ function tnt.register_tnt(def) is_ground_content = false, groups = {dig_immediate = 2, mesecon = 2, tnt = 1, flammable = 5}, sounds = default.node_sound_wood_defaults(), + after_place_node = function(pos, placer) + if placer:is_player() then + local meta = minetest.get_meta(pos) + meta:set_string("owner", placer:get_player_name()) + end + end, on_punch = function(pos, node, puncher) if puncher:get_wielded_item():get_name() == "default:torch" then - minetest.set_node(pos, {name = name .. "_burning"}) + minetest.swap_node(pos, {name = name .. "_burning"}) + minetest.registered_nodes[name .. "_burning"].on_construct(pos) minetest.log("action", puncher:get_player_name() .. " ignites " .. node.name .. " at " .. minetest.pos_to_string(pos)) @@ -600,10 +616,12 @@ function tnt.register_tnt(def) } }, on_burn = function(pos) - minetest.set_node(pos, {name = name .. "_burning"}) + minetest.swap_node(pos, {name = name .. "_burning"}) + minetest.registered_nodes[name .. "_burning"].on_construct(pos) end, on_ignite = function(pos, igniter) - minetest.set_node(pos, {name = name .. "_burning"}) + minetest.swap_node(pos, {name = name .. "_burning"}) + minetest.registered_nodes[name .. "_burning"].on_construct(pos) end, }) end