From 5cf82131a93710a048f9cc32686ae2d6b29b017a Mon Sep 17 00:00:00 2001 From: Der1248 Date: Wed, 6 May 2020 23:03:05 +0200 Subject: [PATCH] Regnum 3.5.0 upload --- menu/Thumbs.db | Bin 35328 -> 35328 bytes mods/3d_armor/3d_armor/armor.lua | 32 +- mods/3d_armor/3d_armor/tutorial.lua | 64 +- mods/3d_armor/3d_armor/tutorial_craft.lua | 123 + mods/3d_armor/shields/init.lua | 8 +- mods/3d_armor/shields/tutorial.lua | 27 +- mods/3d_armor/shields/tutorial_craft.lua | 44 + mods/ban_hammer/init.lua | 40 +- mods/beds/api.lua | 2 + mods/beds/beds.lua | 6 +- mods/beds/functions.lua | 8 +- mods/beds/init.lua | 4 +- mods/beds/locale/beds.ms.tr | 8 + mods/beds/locale/beds.ru.tr | 8 + mods/beds/locale/beds.se.tr | 8 + mods/beds/locale/beds.zh_CN.tr | 8 + mods/beds/locale/beds.zh_TW.tr | 9 + mods/beds/spawns.lua | 9 + mods/binoculars/locale/binoculars.ms.tr | 3 + mods/binoculars/locale/binoculars.ru.tr | 3 + mods/binoculars/locale/binoculars.se.tr | 3 + mods/binoculars/locale/binoculars.zh_CN.tr | 3 + mods/binoculars/locale/binoculars.zh_TW.tr | 3 + mods/boats/init.lua | 30 +- mods/boats/locale/boats.ms.tr | 4 + mods/boats/locale/boats.ru.tr | 4 + mods/boats/locale/boats.se.tr | 4 + mods/boats/locale/boats.zh_CN.tr | 4 + mods/boats/locale/boats.zh_TW.tr | 4 + mods/bones/locale/bones.ms.tr | 8 + mods/bones/locale/bones.ru.tr | 8 + mods/bones/locale/bones.se.tr | 8 + mods/bones/locale/bones.zh_CN.tr | 8 + mods/bones/locale/bones.zh_TW.tr | 8 + mods/bucket/init.lua | 13 + mods/bucket/locale/bucket.ms.tr | 5 + mods/bucket/locale/bucket.ru.tr | 5 + mods/bucket/locale/bucket.se.tr | 5 + mods/bucket/locale/bucket.zh_CN.tr | 5 + mods/bucket/locale/bucket.zh_TW.tr | 5 + mods/bucket/mod.conf | 1 + mods/butterflies/init.lua | 2 +- mods/butterflies/locale/butterflies.ms.tr | 4 + mods/butterflies/locale/butterflies.ru.tr | 4 + mods/butterflies/locale/butterflies.se.tr | 4 + mods/butterflies/locale/butterflies.zh_CN.tr | 4 + mods/butterflies/locale/butterflies.zh_TW.tr | 4 + mods/carts/cart_entity.lua | 2 +- mods/carts/init.lua | 7 + mods/carts/locale/carts.ms.tr | 6 + mods/carts/locale/carts.ru.tr | 6 + mods/carts/locale/carts.se.tr | 6 + mods/carts/locale/carts.zh_CN.tr | 6 + mods/carts/locale/carts.zh_TW.tr | 6 + mods/carts/mod.conf | 1 + mods/creative/inventory.lua | 65 +- mods/creative/locale/creative.ms.tr | 10 + mods/creative/locale/creative.ru.tr | 10 + mods/creative/locale/creative.se.tr | 10 + mods/creative/locale/creative.zh_CN.tr | 10 + mods/creative/locale/creative.zh_TW.tr | 10 + mods/default/README.txt | 11 +- mods/default/chests.lua | 43 +- mods/default/crafting.lua | 504 --- mods/default/craftitems.lua | 472 ++- mods/default/functions.lua | 38 +- mods/default/furnace.lua | 9 + mods/default/init.lua | 19 +- mods/default/item_entity.lua | 2 +- mods/default/locale/default.ms.tr | 211 ++ mods/default/locale/default.ru.tr | 211 ++ mods/default/locale/default.se.tr | 211 ++ mods/default/locale/default.zh_CN.tr | 211 ++ mods/default/locale/default.zh_TW.tr | 211 ++ mods/default/mapgen.lua | 180 +- mods/default/nodes.lua | 14 +- .../{papyrus.mts => papyrus_on_dirt.mts} | Bin .../schematics/papyrus_on_dry_dirt.mts | Bin 0 -> 77 bytes .../sounds/default_grass_footstep.1.ogg | Bin 10273 -> 10019 bytes .../sounds/default_grass_footstep.2.ogg | Bin 8759 -> 10164 bytes .../sounds/default_grass_footstep.3.ogg | Bin 8473 -> 9989 bytes .../sounds/player_damage.ogg | Bin .../textures/gui_hotbar.png | Bin .../textures/gui_hotbar_selected.png | Bin mods/default/tools.lua | 75 + mods/default/torch.lua | 20 +- mods/doors/init.lua | 12 +- mods/doors/locale/doors.ms.tr | 18 + mods/doors/locale/doors.ru.tr | 18 + mods/doors/locale/doors.se.tr | 19 + mods/doors/locale/doors.zh_CN.tr | 18 + mods/doors/locale/doors.zh_TW.tr | 18 + mods/dungeon_loot/loot.lua | 19 +- mods/dungeon_loot/mapgen.lua | 26 +- mods/dye/locale/dye.ms.tr | 16 + mods/dye/locale/dye.ru.tr | 16 + mods/dye/locale/dye.se.tr | 16 + mods/dye/locale/dye.zh_CN.tr | 16 + mods/dye/locale/dye.zh_TW.tr | 16 + mods/farming/api.lua | 7 +- mods/farming/init.lua | 10 + mods/farming/locale/farming.ms.tr | 25 + mods/farming/locale/farming.ru.tr | 25 + mods/farming/locale/farming.se.tr | 25 + mods/farming/locale/farming.zh_CN.tr | 25 + mods/farming/locale/farming.zh_TW.tr | 25 + mods/farming/mod.conf | 1 + mods/fire/init.lua | 8 +- mods/fire/locale/fire.ms.tr | 3 + mods/fire/locale/fire.ru.tr | 3 + mods/fire/locale/fire.se.tr | 3 + mods/fire/locale/fire.zh_CN.tr | 3 + mods/fire/locale/fire.zh_TW.tr | 3 + mods/fireflies/locale/fireflies.ms.tr | 5 + mods/fireflies/locale/fireflies.ru.tr | 5 + mods/fireflies/locale/fireflies.se.tr | 5 + mods/fireflies/locale/fireflies.zh_CN.tr | 5 + mods/fireflies/locale/fireflies.zh_TW.tr | 5 + mods/flowers/locale/flowers.ms.tr | 12 + mods/flowers/locale/flowers.ru.tr | 12 + mods/flowers/locale/flowers.se.tr | 12 + mods/flowers/locale/flowers.zh_CN.tr | 12 + mods/flowers/locale/flowers.zh_TW.tr | 12 + mods/flowers/mapgen.lua | 5 +- mods/game_commands/init.lua | 2 +- mods/game_commands/locale/game_commands.ms.tr | 4 + mods/game_commands/locale/game_commands.ru.tr | 4 + mods/game_commands/locale/game_commands.se.tr | 4 + .../locale/game_commands.zh_CN.tr | 4 + .../locale/game_commands.zh_TW.tr | 4 + mods/inventory_plus/inventory_plus/init.lua | 12 +- mods/map/locale/map.ms.tr | 3 + mods/map/locale/map.ru.tr | 3 + mods/map/locale/map.se.tr | 3 + mods/map/locale/map.zh_CN.tr | 3 + mods/map/locale/map.zh_TW.tr | 3 + mods/mobs/api.lua | 363 +- mods/mobs/{api__.lua => api_.lua} | 727 ++-- mods/mobs/init.lua | 103 +- mods/pipeworks/crafts.lua | 21 +- mods/player_api/README.txt | 13 +- mods/player_api/api.lua | 9 + mods/player_api/init.lua | 2 - mods/player_api/license.txt | 33 +- mods/player_api/models/character.b3d | Bin 73433 -> 73433 bytes mods/player_api/models/character.blend | Bin 698016 -> 632188 bytes mods/screwdriver/locale/screwdriver.ms.tr | 3 + mods/screwdriver/locale/screwdriver.ru.tr | 3 + mods/screwdriver/locale/screwdriver.se.tr | 3 + mods/screwdriver/locale/screwdriver.zh_CN.tr | 3 + mods/screwdriver/locale/screwdriver.zh_TW.tr | 3 + mods/sethome/locale/sethome.ms.tr | 8 + mods/sethome/locale/sethome.ru.tr | 8 + mods/sethome/locale/sethome.se.tr | 8 + mods/sethome/locale/sethome.zh_CN.tr | 8 + mods/sethome/locale/sethome.zh_TW.tr | 8 + mods/sfinv/api.lua | 22 +- mods/sfinv/locale/sfinv.ms.tr | 2 + mods/sfinv/locale/sfinv.ru.tr | 2 + mods/sfinv/locale/sfinv.se.tr | 2 + mods/sfinv/locale/sfinv.zh_CN.tr | 2 + mods/sfinv/locale/sfinv.zh_TW.tr | 2 + mods/spawn/init.lua | 5 +- mods/stairs/locale/stairs.fr.tr | 2 +- mods/stairs/locale/stairs.ms.tr | 145 + mods/stairs/locale/stairs.ru.tr | 145 + mods/stairs/locale/stairs.se.tr | 144 + mods/stairs/locale/stairs.zh_CN.tr | 149 + mods/stairs/locale/stairs.zh_TW.tr | 149 + mods/technic/technic/tools/mining_drill.lua | 76 +- mods/tnt/init.lua | 60 +- mods/tnt/locale/tnt.ms.tr | 4 + mods/tnt/locale/tnt.ru.tr | 4 + mods/tnt/locale/tnt.se.tr | 4 + mods/tnt/locale/tnt.zh_CN.tr | 4 + mods/tnt/locale/tnt.zh_TW.tr | 4 + mods/tutorial/chatcommand.lua | 8 +- mods/tutorial/craft.lua | 36 +- mods/tutorial/craftitem.lua | 2 +- mods/tutorial/init.lua | 3052 +++++++++-------- mods/tutorial/node.lua | 192 +- mods/tutorial/other.lua | 1044 ++---- .../textures/tutorial_gem_fragment2.png | Bin 203 -> 188 bytes .../textures/tutorial_geschenk_gem2.png | Bin 322 -> 318 bytes .../textures/tutorial_geschenk_tortoise.png | Bin 0 -> 204 bytes .../textures/tutorial_trophy_year1.png | Bin 0 -> 470 bytes .../textures/tutorial_trophy_year2.png | Bin 0 -> 517 bytes .../textures/tutorial_trophy_year3.png | Bin 0 -> 508 bytes .../textures/tutorial_trophy_year4.png | Bin 0 -> 493 bytes mods/tutorial/tool.lua | 58 +- mods/vessels/init.lua | 7 + mods/vessels/locale/vessels.ms.tr | 8 + mods/vessels/locale/vessels.ru.tr | 8 + mods/vessels/locale/vessels.se.tr | 8 + mods/vessels/locale/vessels.zh_CN.tr | 8 + mods/vessels/locale/vessels.zh_TW.tr | 8 + mods/vessels/mod.conf | 1 + mods/walls/locale/walls.ms.tr | 4 + mods/walls/locale/walls.ru.tr | 4 + mods/walls/locale/walls.se.tr | 4 + mods/walls/locale/walls.zh_CN.tr | 4 + mods/walls/locale/walls.zh_TW.tr | 4 + mods/weather/README.txt | 4 + mods/weather/init.lua | 116 + mods/weather/license.txt | 24 + mods/weather/mod.conf | 2 + mods/wool/locale/wool.ms.tr | 16 + mods/wool/locale/wool.ru.tr | 16 + mods/wool/locale/wool.se.tr | 16 + mods/wool/locale/wool.zh_CN.tr | 16 + mods/wool/locale/wool.zh_TW.tr | 16 + mods/xpanes/init.lua | 24 +- mods/xpanes/locale/xpanes.ms.tr | 6 + mods/xpanes/locale/xpanes.ru.tr | 6 + mods/xpanes/locale/xpanes.se.tr | 6 + mods/xpanes/locale/xpanes.zh_CN.tr | 6 + mods/xpanes/locale/xpanes.zh_TW.tr | 6 + mods/xpanes/textures/xpanes_bar_top.png | Bin 3516 -> 101 bytes mods/xpanes/textures/xpanes_pane_half.png | Bin 83 -> 0 bytes mods/xpanes/textures/xpanes_space.png | Bin 149 -> 0 bytes 220 files changed, 6966 insertions(+), 3731 deletions(-) create mode 100644 mods/beds/locale/beds.ms.tr create mode 100644 mods/beds/locale/beds.ru.tr create mode 100644 mods/beds/locale/beds.se.tr create mode 100644 mods/beds/locale/beds.zh_CN.tr create mode 100644 mods/beds/locale/beds.zh_TW.tr create mode 100644 mods/binoculars/locale/binoculars.ms.tr create mode 100644 mods/binoculars/locale/binoculars.ru.tr create mode 100644 mods/binoculars/locale/binoculars.se.tr create mode 100644 mods/binoculars/locale/binoculars.zh_CN.tr create mode 100644 mods/binoculars/locale/binoculars.zh_TW.tr create mode 100644 mods/boats/locale/boats.ms.tr create mode 100644 mods/boats/locale/boats.ru.tr create mode 100644 mods/boats/locale/boats.se.tr create mode 100644 mods/boats/locale/boats.zh_CN.tr create mode 100644 mods/boats/locale/boats.zh_TW.tr create mode 100644 mods/bones/locale/bones.ms.tr create mode 100644 mods/bones/locale/bones.ru.tr create mode 100644 mods/bones/locale/bones.se.tr create mode 100644 mods/bones/locale/bones.zh_CN.tr create mode 100644 mods/bones/locale/bones.zh_TW.tr create mode 100644 mods/bucket/locale/bucket.ms.tr create mode 100644 mods/bucket/locale/bucket.ru.tr create mode 100644 mods/bucket/locale/bucket.se.tr create mode 100644 mods/bucket/locale/bucket.zh_CN.tr create mode 100644 mods/bucket/locale/bucket.zh_TW.tr create mode 100644 mods/butterflies/locale/butterflies.ms.tr create mode 100644 mods/butterflies/locale/butterflies.ru.tr create mode 100644 mods/butterflies/locale/butterflies.se.tr create mode 100644 mods/butterflies/locale/butterflies.zh_CN.tr create mode 100644 mods/butterflies/locale/butterflies.zh_TW.tr create mode 100644 mods/carts/locale/carts.ms.tr create mode 100644 mods/carts/locale/carts.ru.tr create mode 100644 mods/carts/locale/carts.se.tr create mode 100644 mods/carts/locale/carts.zh_CN.tr create mode 100644 mods/carts/locale/carts.zh_TW.tr create mode 100644 mods/creative/locale/creative.ms.tr create mode 100644 mods/creative/locale/creative.ru.tr create mode 100644 mods/creative/locale/creative.se.tr create mode 100644 mods/creative/locale/creative.zh_CN.tr create mode 100644 mods/creative/locale/creative.zh_TW.tr create mode 100644 mods/default/locale/default.ms.tr create mode 100644 mods/default/locale/default.ru.tr create mode 100644 mods/default/locale/default.se.tr create mode 100644 mods/default/locale/default.zh_CN.tr create mode 100644 mods/default/locale/default.zh_TW.tr rename mods/default/schematics/{papyrus.mts => papyrus_on_dirt.mts} (100%) create mode 100644 mods/default/schematics/papyrus_on_dry_dirt.mts rename mods/{player_api => default}/sounds/player_damage.ogg (100%) rename mods/{player_api => default}/textures/gui_hotbar.png (100%) rename mods/{player_api => default}/textures/gui_hotbar_selected.png (100%) create mode 100644 mods/doors/locale/doors.ms.tr create mode 100644 mods/doors/locale/doors.ru.tr create mode 100644 mods/doors/locale/doors.se.tr create mode 100644 mods/doors/locale/doors.zh_CN.tr create mode 100644 mods/doors/locale/doors.zh_TW.tr create mode 100644 mods/dye/locale/dye.ms.tr create mode 100644 mods/dye/locale/dye.ru.tr create mode 100644 mods/dye/locale/dye.se.tr create mode 100644 mods/dye/locale/dye.zh_CN.tr create mode 100644 mods/dye/locale/dye.zh_TW.tr create mode 100644 mods/farming/locale/farming.ms.tr create mode 100644 mods/farming/locale/farming.ru.tr create mode 100644 mods/farming/locale/farming.se.tr create mode 100644 mods/farming/locale/farming.zh_CN.tr create mode 100644 mods/farming/locale/farming.zh_TW.tr create mode 100644 mods/fire/locale/fire.ms.tr create mode 100644 mods/fire/locale/fire.ru.tr create mode 100644 mods/fire/locale/fire.se.tr create mode 100644 mods/fire/locale/fire.zh_CN.tr create mode 100644 mods/fire/locale/fire.zh_TW.tr create mode 100644 mods/fireflies/locale/fireflies.ms.tr create mode 100644 mods/fireflies/locale/fireflies.ru.tr create mode 100644 mods/fireflies/locale/fireflies.se.tr create mode 100644 mods/fireflies/locale/fireflies.zh_CN.tr create mode 100644 mods/fireflies/locale/fireflies.zh_TW.tr create mode 100644 mods/flowers/locale/flowers.ms.tr create mode 100644 mods/flowers/locale/flowers.ru.tr create mode 100644 mods/flowers/locale/flowers.se.tr create mode 100644 mods/flowers/locale/flowers.zh_CN.tr create mode 100644 mods/flowers/locale/flowers.zh_TW.tr create mode 100644 mods/game_commands/locale/game_commands.ms.tr create mode 100644 mods/game_commands/locale/game_commands.ru.tr create mode 100644 mods/game_commands/locale/game_commands.se.tr create mode 100644 mods/game_commands/locale/game_commands.zh_CN.tr create mode 100644 mods/game_commands/locale/game_commands.zh_TW.tr create mode 100644 mods/map/locale/map.ms.tr create mode 100644 mods/map/locale/map.ru.tr create mode 100644 mods/map/locale/map.se.tr create mode 100644 mods/map/locale/map.zh_CN.tr create mode 100644 mods/map/locale/map.zh_TW.tr rename mods/mobs/{api__.lua => api_.lua} (84%) create mode 100644 mods/screwdriver/locale/screwdriver.ms.tr create mode 100644 mods/screwdriver/locale/screwdriver.ru.tr create mode 100644 mods/screwdriver/locale/screwdriver.se.tr create mode 100644 mods/screwdriver/locale/screwdriver.zh_CN.tr create mode 100644 mods/screwdriver/locale/screwdriver.zh_TW.tr create mode 100644 mods/sethome/locale/sethome.ms.tr create mode 100644 mods/sethome/locale/sethome.ru.tr create mode 100644 mods/sethome/locale/sethome.se.tr create mode 100644 mods/sethome/locale/sethome.zh_CN.tr create mode 100644 mods/sethome/locale/sethome.zh_TW.tr create mode 100644 mods/sfinv/locale/sfinv.ms.tr create mode 100644 mods/sfinv/locale/sfinv.ru.tr create mode 100644 mods/sfinv/locale/sfinv.se.tr create mode 100644 mods/sfinv/locale/sfinv.zh_CN.tr create mode 100644 mods/sfinv/locale/sfinv.zh_TW.tr create mode 100644 mods/stairs/locale/stairs.ms.tr create mode 100644 mods/stairs/locale/stairs.ru.tr create mode 100644 mods/stairs/locale/stairs.se.tr create mode 100644 mods/stairs/locale/stairs.zh_CN.tr create mode 100644 mods/stairs/locale/stairs.zh_TW.tr create mode 100644 mods/tnt/locale/tnt.ms.tr create mode 100644 mods/tnt/locale/tnt.ru.tr create mode 100644 mods/tnt/locale/tnt.se.tr create mode 100644 mods/tnt/locale/tnt.zh_CN.tr create mode 100644 mods/tnt/locale/tnt.zh_TW.tr create mode 100644 mods/tutorial/textures/tutorial_geschenk_tortoise.png create mode 100644 mods/tutorial/textures/tutorial_trophy_year1.png create mode 100644 mods/tutorial/textures/tutorial_trophy_year2.png create mode 100644 mods/tutorial/textures/tutorial_trophy_year3.png create mode 100644 mods/tutorial/textures/tutorial_trophy_year4.png create mode 100644 mods/vessels/locale/vessels.ms.tr create mode 100644 mods/vessels/locale/vessels.ru.tr create mode 100644 mods/vessels/locale/vessels.se.tr create mode 100644 mods/vessels/locale/vessels.zh_CN.tr create mode 100644 mods/vessels/locale/vessels.zh_TW.tr create mode 100644 mods/walls/locale/walls.ms.tr create mode 100644 mods/walls/locale/walls.ru.tr create mode 100644 mods/walls/locale/walls.se.tr create mode 100644 mods/walls/locale/walls.zh_CN.tr create mode 100644 mods/walls/locale/walls.zh_TW.tr create mode 100644 mods/weather/README.txt create mode 100644 mods/weather/init.lua create mode 100644 mods/weather/license.txt create mode 100644 mods/weather/mod.conf create mode 100644 mods/wool/locale/wool.ms.tr create mode 100644 mods/wool/locale/wool.ru.tr create mode 100644 mods/wool/locale/wool.se.tr create mode 100644 mods/wool/locale/wool.zh_CN.tr create mode 100644 mods/wool/locale/wool.zh_TW.tr create mode 100644 mods/xpanes/locale/xpanes.ms.tr create mode 100644 mods/xpanes/locale/xpanes.ru.tr create mode 100644 mods/xpanes/locale/xpanes.se.tr create mode 100644 mods/xpanes/locale/xpanes.zh_CN.tr create mode 100644 mods/xpanes/locale/xpanes.zh_TW.tr delete mode 100644 mods/xpanes/textures/xpanes_pane_half.png delete mode 100644 mods/xpanes/textures/xpanes_space.png diff --git a/menu/Thumbs.db b/menu/Thumbs.db index f673c86675f729b119b2a4f16901eff0036d743e..b1b4a514953282b019d091349d2da39cda6d2eb6 100644 GIT binary patch delta 71 zcmZpe!qhN@X+sVR+XwSyci4nC7qQG^=7_z=&8O(wS-n|;V+RLE=FU%x3qGuK-TY8M Uo^i4P3+Lnm0s;t8385F|0MfD?rvLx| delta 71 zcmZpe!qhN@X+sVRn}Lk%-D`I@7qQG^=8$@Nq U&p6qDg>&)&0Re=lgwTs}0LTa$Qvd(} diff --git a/mods/3d_armor/3d_armor/armor.lua b/mods/3d_armor/3d_armor/armor.lua index 441681a..7245424 100644 --- a/mods/3d_armor/3d_armor/armor.lua +++ b/mods/3d_armor/3d_armor/armor.lua @@ -7,7 +7,7 @@ minetest.register_tool("3d_armor:helmet_admin", { wield_image = "3d_armor_inv_helmet_admin.png", groups = {armor_head=20, armor_heal=20, armor_use=0, armor_fire=1, armor_water=0.2}, wear = 0, - on_use = function(itemstack, user, pointed_thing) + on_secondary_use = function(itemstack, user, pointed_thing) local keys = user:get_player_control() if keys["sneak"] == true then itemstack:set_name("3d_armor:helmet_admin2") @@ -22,7 +22,7 @@ minetest.register_tool("3d_armor:helmet_admin2", { wield_image = "3d_armor_inv_helmet_admin.png", groups = {armor_head=20, armor_heal=20, armor_use=0, armor_fire=1, physics_speed=0.25, armor_water=0.2, not_in_creative_inventory=1}, wear = 0, - on_use = function(itemstack, user, pointed_thing) + on_secondary_use = function(itemstack, user, pointed_thing) local keys = user:get_player_control() if keys["sneak"] == true then itemstack:set_name("3d_armor:helmet_admin3") @@ -37,7 +37,7 @@ minetest.register_tool("3d_armor:helmet_admin3", { wield_image = "3d_armor_inv_helmet_admin.png", groups = {armor_head=20, armor_heal=20, armor_use=0, armor_fire=1, physics_jump=0.25, armor_water=0.2, not_in_creative_inventory=1}, wear = 0, - on_use = function(itemstack, user, pointed_thing) + on_secondary_use = function(itemstack, user, pointed_thing) local keys = user:get_player_control() if keys["sneak"] == true then itemstack:set_name("3d_armor:helmet_admin4") @@ -52,7 +52,7 @@ minetest.register_tool("3d_armor:helmet_admin4", { wield_image = "3d_armor_inv_helmet_admin.png", groups = {armor_head=20, armor_heal=20, armor_use=0, armor_fire=1, physics_jump=0.25, physics_speed=0.25, armor_water=0.2, not_in_creative_inventory=1}, wear = 0, - on_use = function(itemstack, user, pointed_thing) + on_secondary_use = function(itemstack, user, pointed_thing) local keys = user:get_player_control() if keys["sneak"] == true then itemstack:set_name("3d_armor:helmet_admin") @@ -67,7 +67,7 @@ minetest.register_tool("3d_armor:chestplate_admin", { wield_image = "3d_armor_inv_chestplate_admin.png", groups = {armor_torso=20, armor_heal=20, armor_use=0, armor_fire=1, armor_water=0.2}, wear = 0, - on_use = function(itemstack, user, pointed_thing) + on_secondary_use = function(itemstack, user, pointed_thing) local keys = user:get_player_control() if keys["sneak"] == true then itemstack:set_name("3d_armor:chestplate_admin2") @@ -82,7 +82,7 @@ minetest.register_tool("3d_armor:chestplate_admin2", { wield_image = "3d_armor_inv_chestplate_admin.png", groups = {armor_torso=20, armor_heal=20, armor_use=0, armor_fire=1, physics_speed=0.25, armor_water=0.2, not_in_creative_inventory=1}, wear = 0, - on_use = function(itemstack, user, pointed_thing) + on_secondary_use = function(itemstack, user, pointed_thing) local keys = user:get_player_control() if keys["sneak"] == true then itemstack:set_name("3d_armor:chestplate_admin3") @@ -96,7 +96,7 @@ minetest.register_tool("3d_armor:chestplate_admin3", { wield_image = "3d_armor_inv_chestplate_admin.png", groups = {armor_torso=20, armor_heal=20, armor_use=0, armor_fire=1, physics_jump=0.25, armor_water=0.2, not_in_creative_inventory=1}, wear = 0, - on_use = function(itemstack, user, pointed_thing) + on_secondary_use = function(itemstack, user, pointed_thing) local keys = user:get_player_control() if keys["sneak"] == true then itemstack:set_name("3d_armor:chestplate_admin4") @@ -110,7 +110,7 @@ minetest.register_tool("3d_armor:chestplate_admin4", { wield_image = "3d_armor_inv_chestplate_admin.png", groups = {armor_torso=20, armor_heal=20, armor_use=0, armor_fire=1, physics_jump=0.25, physics_speed=0.25, armor_water=0.2, not_in_creative_inventory=1}, wear = 0, - on_use = function(itemstack, user, pointed_thing) + on_secondary_use = function(itemstack, user, pointed_thing) local keys = user:get_player_control() if keys["sneak"] == true then itemstack:set_name("3d_armor:chestplate_admin") @@ -124,7 +124,7 @@ minetest.register_tool("3d_armor:leggings_admin", { inventory_image = "3d_armor_inv_leggings_admin.png^technic_tool_mode1.png", groups = {armor_legs=20, armor_heal=20, armor_use=0, armor_fire=1, armor_water=0.2}, wear = 0, - on_use = function(itemstack, user, pointed_thing) + on_secondary_use = function(itemstack, user, pointed_thing) local keys = user:get_player_control() if keys["sneak"] == true then itemstack:set_name("3d_armor:leggings_admin2") @@ -139,7 +139,7 @@ minetest.register_tool("3d_armor:leggings_admin2", { inventory_image = "3d_armor_inv_leggings_admin.png^technic_tool_mode2.png", groups = {armor_legs=20, armor_heal=20, armor_use=0, armor_fire=1, physics_speed=0.25, armor_water=0.2, not_in_creative_inventory=1}, wear = 0, - on_use = function(itemstack, user, pointed_thing) + on_secondary_use = function(itemstack, user, pointed_thing) local keys = user:get_player_control() if keys["sneak"] == true then itemstack:set_name("3d_armor:leggings_admin3") @@ -154,7 +154,7 @@ minetest.register_tool("3d_armor:leggings_admin3", { inventory_image = "3d_armor_inv_leggings_admin.png^technic_tool_mode3.png", groups = {armor_legs=20, armor_heal=20, armor_use=0, armor_fire=1, physics_jump=0.25, armor_water=0.2, not_in_creative_inventory=1}, wear = 0, - on_use = function(itemstack, user, pointed_thing) + on_secondary_use = function(itemstack, user, pointed_thing) local keys = user:get_player_control() if keys["sneak"] == true then itemstack:set_name("3d_armor:leggings_admin4") @@ -169,7 +169,7 @@ minetest.register_tool("3d_armor:leggings_admin4", { wield_image = "3d_armor_inv_leggings_admin.png", groups = {armor_legs=20, armor_heal=20, armor_use=0, armor_fire=1, physics_jump=0.25, physics_speed=0.25, armor_water=0.2, not_in_creative_inventory=1}, wear = 0, - on_use = function(itemstack, user, pointed_thing) + on_secondary_use = function(itemstack, user, pointed_thing) local keys = user:get_player_control() if keys["sneak"] == true then itemstack:set_name("3d_armor:leggings_admin") @@ -186,7 +186,7 @@ minetest.register_tool("3d_armor:boots_admin", { wield_image = "3d_armor_inv_boots_admin.png", groups = {armor_feet=20, armor_heal=20, armor_use=0, armor_fire=1, armor_water=0.2}, wear = 0, - on_use = function(itemstack, user, pointed_thing) + on_secondary_use = function(itemstack, user, pointed_thing) local keys = user:get_player_control() if keys["sneak"] == true then itemstack:set_name("3d_armor:boots_admin2") @@ -201,7 +201,7 @@ minetest.register_tool("3d_armor:boots_admin2", { wield_image = "3d_armor_inv_boots_admin.png", groups = {armor_feet=20, armor_heal=20, armor_use=0, armor_fire=1, physics_speed=0.25, armor_water=0.2, not_in_creative_inventory=1}, wear = 0, - on_use = function(itemstack, user, pointed_thing) + on_secondary_use = function(itemstack, user, pointed_thing) local keys = user:get_player_control() if keys["sneak"] == true then itemstack:set_name("3d_armor:boots_admin3") @@ -216,7 +216,7 @@ minetest.register_tool("3d_armor:boots_admin3", { wield_image = "3d_armor_inv_boots_admin.png", groups = {armor_feet=20, armor_heal=20, armor_use=0, armor_fire=1, physics_jump=0.25, armor_water=0.2, not_in_creative_inventory=1}, wear = 0, - on_use = function(itemstack, user, pointed_thing) + on_secondary_use = function(itemstack, user, pointed_thing) local keys = user:get_player_control() if keys["sneak"] == true then itemstack:set_name("3d_armor:boots_admin4") @@ -231,7 +231,7 @@ minetest.register_tool("3d_armor:boots_admin4", { wield_image = "3d_armor_inv_boots_admin.png", groups = {armor_feet=20, armor_heal=20, armor_use=0, armor_fire=1, physics_jump=0.25, physics_speed=0.25, armor_water=0.2, not_in_creative_inventory=1}, wear = 0, - on_use = function(itemstack, user, pointed_thing) + on_secondary_use = function(itemstack, user, pointed_thing) local keys = user:get_player_control() if keys["sneak"] == true then itemstack:set_name("3d_armor:boots_admin") diff --git a/mods/3d_armor/3d_armor/tutorial.lua b/mods/3d_armor/3d_armor/tutorial.lua index b67336e..d4f3df4 100644 --- a/mods/3d_armor/3d_armor/tutorial.lua +++ b/mods/3d_armor/3d_armor/tutorial.lua @@ -342,7 +342,7 @@ minetest.register_tool("3d_armor:superlegendenboots", { groups = {armor_feet=12.2, armor_heal=12, armor_use=0,armor_fire=0.61, armor_water=0.2, not_in_creative_inventory=1}, wear = 0, wield_image = "3d_armor_inv_superlegendenboots.png", - on_use = function(itemstack, user, pointed_thing) + on_secondary_use = function(itemstack, user, pointed_thing) local keys = user:get_player_control() if keys["sneak"] == true then itemstack:set_name("3d_armor:superlegendenboots2") @@ -356,7 +356,7 @@ minetest.register_tool("3d_armor:superlegendenboots2", { groups = {armor_feet=12.2, armor_heal=12, armor_use=0,armor_fire=0.61, physics_speed=0.25, armor_water=0.2, not_in_creative_inventory=1}, wear = 0, wield_image = "3d_armor_inv_superlegendenboots.png", - on_use = function(itemstack, user, pointed_thing) + on_secondary_use = function(itemstack, user, pointed_thing) local keys = user:get_player_control() if keys["sneak"] == true then itemstack:set_name("3d_armor:superlegendenboots3") @@ -370,7 +370,7 @@ minetest.register_tool("3d_armor:superlegendenboots3", { groups = {armor_feet=12.2, armor_heal=12, armor_use=0,armor_fire=0.61, physics_jump=0.25, armor_water=0.2, not_in_creative_inventory=1}, wear = 0, wield_image = "3d_armor_inv_superlegendenboots.png", - on_use = function(itemstack, user, pointed_thing) + on_secondary_use = function(itemstack, user, pointed_thing) local keys = user:get_player_control() if keys["sneak"] == true then itemstack:set_name("3d_armor:superlegendenboots4") @@ -384,7 +384,7 @@ minetest.register_tool("3d_armor:superlegendenboots4", { groups = {armor_feet=12.2, armor_heal=12, armor_use=0,armor_fire=0.61, physics_jump=0.25, physics_speed=0.25, armor_water=0.2, not_in_creative_inventory=1}, wear = 0, wield_image = "3d_armor_inv_superlegendenboots.png", - on_use = function(itemstack, user, pointed_thing) + on_secondary_use = function(itemstack, user, pointed_thing) local keys = user:get_player_control() if keys["sneak"] == true then itemstack:set_name("3d_armor:superlegendenboots") @@ -399,7 +399,7 @@ minetest.register_tool("3d_armor:superlegendenchestplate", { groups = {armor_torso=12.2, armor_heal=12, armor_use=0, armor_fire=0.61, armor_water=0.2, not_in_creative_inventory=1}, wear = 0, wield_image = "3d_armor_inv_superlegendenchestplate.png", - on_use = function(itemstack, user, pointed_thing) + on_secondary_use = function(itemstack, user, pointed_thing) local keys = user:get_player_control() if keys["sneak"] == true then itemstack:set_name("3d_armor:superlegendenchestplate2") @@ -413,7 +413,7 @@ minetest.register_tool("3d_armor:superlegendenchestplate2", { groups = {armor_torso=12.2, armor_heal=12, armor_use=0, armor_fire=0.61, physics_speed=0.25, armor_water=0.2, not_in_creative_inventory=1}, wear = 0, wield_image = "3d_armor_inv_superlegendenchestplate.png", - on_use = function(itemstack, user, pointed_thing) + on_secondary_use = function(itemstack, user, pointed_thing) local keys = user:get_player_control() if keys["sneak"] == true then itemstack:set_name("3d_armor:superlegendenchestplate3") @@ -427,7 +427,7 @@ minetest.register_tool("3d_armor:superlegendenchestplate3", { groups = {armor_torso=12.2, armor_heal=12, armor_use=0, armor_fire=0.61, physics_jump=0.25, armor_water=0.2, not_in_creative_inventory=1}, wear = 0, wield_image = "3d_armor_inv_superlegendenchestplate.png", - on_use = function(itemstack, user, pointed_thing) + on_secondary_use = function(itemstack, user, pointed_thing) local keys = user:get_player_control() if keys["sneak"] == true then itemstack:set_name("3d_armor:superlegendenchestplate4") @@ -441,7 +441,7 @@ minetest.register_tool("3d_armor:superlegendenchestplate4", { groups = {armor_torso=12.2, armor_heal=12, armor_use=0, armor_fire=0.61, physics_jump=0.25, physics_speed=0.25, armor_water=0.2, not_in_creative_inventory=1}, wear = 0, wield_image = "3d_armor_inv_superlegendenchestplate.png", - on_use = function(itemstack, user, pointed_thing) + on_secondary_use = function(itemstack, user, pointed_thing) local keys = user:get_player_control() if keys["sneak"] == true then itemstack:set_name("3d_armor:superlegendenchestplate") @@ -456,7 +456,7 @@ minetest.register_tool("3d_armor:superlegendenhelmet", { groups = {armor_head=12.2, armor_heal=12, armor_use=0,armor_fire=0.61, armor_water=0.2, not_in_creative_inventory=1}, wear = 0, wield_image = "3d_armor_inv_superlegendenhelmet.png", - on_use = function(itemstack, user, pointed_thing) + on_secondary_use = function(itemstack, user, pointed_thing) local keys = user:get_player_control() if keys["sneak"] == true then itemstack:set_name("3d_armor:superlegendenhelmet2") @@ -470,7 +470,7 @@ minetest.register_tool("3d_armor:superlegendenhelmet2", { groups = {armor_head=12.2, armor_heal=12, armor_use=0,armor_fire=0.61, physics_speed=0.25, armor_water=0.2, not_in_creative_inventory=1}, wear = 0, wield_image = "3d_armor_inv_superlegendenhelmet.png", - on_use = function(itemstack, user, pointed_thing) + on_secondary_use = function(itemstack, user, pointed_thing) local keys = user:get_player_control() if keys["sneak"] == true then itemstack:set_name("3d_armor:superlegendenhelmet3") @@ -484,7 +484,7 @@ minetest.register_tool("3d_armor:superlegendenhelmet3", { groups = {armor_head=12.2, armor_heal=12, armor_use=0,armor_fire=0.61, physics_jump=0.25, armor_water=0.2, not_in_creative_inventory=1}, wear = 0, wield_image = "3d_armor_inv_superlegendenhelmet.png", - on_use = function(itemstack, user, pointed_thing) + on_secondary_use = function(itemstack, user, pointed_thing) local keys = user:get_player_control() if keys["sneak"] == true then itemstack:set_name("3d_armor:superlegendenhelmet4") @@ -498,7 +498,7 @@ minetest.register_tool("3d_armor:superlegendenhelmet4", { groups = {armor_head=12.2, armor_heal=12, armor_use=0,armor_fire=0.61, physics_jump=0.25, physics_speed=0.25, armor_water=0.2, not_in_creative_inventory=1}, wear = 0, wield_image = "3d_armor_inv_superlegendenhelmet.png", - on_use = function(itemstack, user, pointed_thing) + on_secondary_use = function(itemstack, user, pointed_thing) local keys = user:get_player_control() if keys["sneak"] == true then itemstack:set_name("3d_armor:superlegendenhelmet") @@ -513,7 +513,7 @@ minetest.register_tool("3d_armor:superlegendenleggings", { groups = {armor_legs=12.2, armor_heal=12, armor_use=0,armor_fire=0.61, armor_water=0.2, not_in_creative_inventory=1}, wear = 0, wield_image = "3d_armor_inv_superlegendenleggings.png", - on_use = function(itemstack, user, pointed_thing) + on_secondary_use = function(itemstack, user, pointed_thing) local keys = user:get_player_control() if keys["sneak"] == true then itemstack:set_name("3d_armor:superlegendenleggings2") @@ -527,7 +527,7 @@ minetest.register_tool("3d_armor:superlegendenleggings2", { groups = {armor_legs=12.2, armor_heal=12, armor_use=0,armor_fire=0.61, physics_speed=0.25, armor_water=0.2, not_in_creative_inventory=1}, wear = 0, wield_image = "3d_armor_inv_superlegendenleggings.png", - on_use = function(itemstack, user, pointed_thing) + on_secondary_use = function(itemstack, user, pointed_thing) local keys = user:get_player_control() if keys["sneak"] == true then itemstack:set_name("3d_armor:superlegendenleggings3") @@ -541,7 +541,7 @@ minetest.register_tool("3d_armor:superlegendenleggings3", { groups = {armor_legs=12.2, armor_heal=12, armor_use=0,armor_fire=0.61, physics_jump=0.25, armor_water=0.2, not_in_creative_inventory=1}, wear = 0, wield_image = "3d_armor_inv_superlegendenleggings.png", - on_use = function(itemstack, user, pointed_thing) + on_secondary_use = function(itemstack, user, pointed_thing) local keys = user:get_player_control() if keys["sneak"] == true then itemstack:set_name("3d_armor:superlegendenleggings4") @@ -555,7 +555,7 @@ minetest.register_tool("3d_armor:superlegendenleggings4", { groups = {armor_legs=12.2, armor_heal=12, armor_use=0,armor_fire=0.61, physics_jump=0.25, physics_speed=0.25, armor_water=0.2, not_in_creative_inventory=1}, wear = 0, wield_image = "3d_armor_inv_superlegendenleggings.png", - on_use = function(itemstack, user, pointed_thing) + on_secondary_use = function(itemstack, user, pointed_thing) local keys = user:get_player_control() if keys["sneak"] == true then itemstack:set_name("3d_armor:superlegendenleggings") @@ -571,7 +571,7 @@ minetest.register_tool("3d_armor:regnumboots", { groups = {armor_feet=15.0, armor_heal=13, armor_use=0,armor_fire=1, armor_water=0.2}, wear = 0, wield_image = "3d_armor_inv_regnumboots.png", - on_use = function(itemstack, user, pointed_thing) + on_secondary_use = function(itemstack, user, pointed_thing) local keys = user:get_player_control() if keys["sneak"] == true then itemstack:set_name("3d_armor:regnumboots2") @@ -585,7 +585,7 @@ minetest.register_tool("3d_armor:regnumboots2", { groups = {armor_feet=15.0, armor_heal=13, armor_use=0,armor_fire=1, physics_speed=0.25, armor_water=0.2, not_in_creative_inventory=1}, wear = 0, wield_image = "3d_armor_inv_regnumboots.png", - on_use = function(itemstack, user, pointed_thing) + on_secondary_use = function(itemstack, user, pointed_thing) local keys = user:get_player_control() if keys["sneak"] == true then itemstack:set_name("3d_armor:regnumboots3") @@ -599,7 +599,7 @@ minetest.register_tool("3d_armor:regnumboots3", { groups = {armor_feet=15.0, armor_heal=13, armor_use=0,armor_fire=1, physics_jump=0.25, armor_water=0.2, not_in_creative_inventory=1}, wear = 0, wield_image = "3d_armor_inv_regnumboots.png", - on_use = function(itemstack, user, pointed_thing) + on_secondary_use = function(itemstack, user, pointed_thing) local keys = user:get_player_control() if keys["sneak"] == true then itemstack:set_name("3d_armor:regnumboots4") @@ -613,7 +613,7 @@ minetest.register_tool("3d_armor:regnumboots4", { groups = {armor_feet=15.0, armor_heal=13, armor_use=0,armor_fire=1, physics_jump=0.25, physics_speed=0.25, armor_water=0.2, not_in_creative_inventory=1}, wear = 0, wield_image = "3d_armor_inv_regnumboots.png", - on_use = function(itemstack, user, pointed_thing) + on_secondary_use = function(itemstack, user, pointed_thing) local keys = user:get_player_control() if keys["sneak"] == true then itemstack:set_name("3d_armor:regnumboots") @@ -628,7 +628,7 @@ minetest.register_tool("3d_armor:regnumchestplate", { groups = {armor_torso=15.0, armor_heal=13, armor_use=0, armor_fire=1, armor_water=0.2}, wear = 0, wield_image = "3d_armor_inv_regnumchestplate.png", - on_use = function(itemstack, user, pointed_thing) + on_secondary_use = function(itemstack, user, pointed_thing) local keys = user:get_player_control() if keys["sneak"] == true then itemstack:set_name("3d_armor:regnumchestplate2") @@ -642,7 +642,7 @@ minetest.register_tool("3d_armor:regnumchestplate2", { groups = {armor_torso=15.0, armor_heal=13, armor_use=0, armor_fire=1, physics_speed=0.25, armor_water=0.2, not_in_creative_inventory=1}, wear = 0, wield_image = "3d_armor_inv_regnumchestplate.png", - on_use = function(itemstack, user, pointed_thing) + on_secondary_use = function(itemstack, user, pointed_thing) local keys = user:get_player_control() if keys["sneak"] == true then itemstack:set_name("3d_armor:regnumchestplate3") @@ -656,7 +656,7 @@ minetest.register_tool("3d_armor:regnumchestplate3", { groups = {armor_torso=15.0, armor_heal=13, armor_use=0, armor_fire=1, physics_jump=0.25, armor_water=0.2, not_in_creative_inventory=1}, wear = 0, wield_image = "3d_armor_inv_regnumchestplate.png", - on_use = function(itemstack, user, pointed_thing) + on_secondary_use = function(itemstack, user, pointed_thing) local keys = user:get_player_control() if keys["sneak"] == true then itemstack:set_name("3d_armor:regnumchestplate4") @@ -670,7 +670,7 @@ minetest.register_tool("3d_armor:regnumchestplate4", { groups = {armor_torso=15.0, armor_heal=13, armor_use=0, armor_fire=1, physics_jump=0.25, physics_speed=0.25, armor_water=0.2, not_in_creative_inventory=1}, wear = 0, wield_image = "3d_armor_inv_regnumchestplate.png", - on_use = function(itemstack, user, pointed_thing) + on_secondary_use = function(itemstack, user, pointed_thing) local keys = user:get_player_control() if keys["sneak"] == true then itemstack:set_name("3d_armor:regnumchestplate") @@ -685,7 +685,7 @@ minetest.register_tool("3d_armor:regnumhelmet", { groups = {armor_head=15.0, armor_heal=13, armor_use=0,armor_fire=1, armor_water=0.2}, wear = 0, wield_image = "3d_armor_inv_regnumhelmet.png", - on_use = function(itemstack, user, pointed_thing) + on_secondary_use = function(itemstack, user, pointed_thing) local keys = user:get_player_control() if keys["sneak"] == true then itemstack:set_name("3d_armor:regnumhelmet2") @@ -699,7 +699,7 @@ minetest.register_tool("3d_armor:regnumhelmet2", { groups = {armor_head=15.0, armor_heal=13, armor_use=0,armor_fire=1, physics_speed=0.25, armor_water=0.2, not_in_creative_inventory=1}, wear = 0, wield_image = "3d_armor_inv_regnumhelmet.png", - on_use = function(itemstack, user, pointed_thing) + on_secondary_use = function(itemstack, user, pointed_thing) local keys = user:get_player_control() if keys["sneak"] == true then itemstack:set_name("3d_armor:regnumhelmet3") @@ -713,7 +713,7 @@ minetest.register_tool("3d_armor:regnumhelmet3", { groups = {armor_head=15.0, armor_heal=13, armor_use=0,armor_fire=1, physics_jump=0.25, armor_water=0.2, not_in_creative_inventory=1}, wear = 0, wield_image = "3d_armor_inv_regnumhelmet.png", - on_use = function(itemstack, user, pointed_thing) + on_secondary_use = function(itemstack, user, pointed_thing) local keys = user:get_player_control() if keys["sneak"] == true then itemstack:set_name("3d_armor:regnumhelmet4") @@ -727,7 +727,7 @@ minetest.register_tool("3d_armor:regnumhelmet4", { groups = {armor_head=15.0, armor_heal=13, armor_use=0,armor_fire=1, physics_jump=0.25, physics_speed=0.25, armor_water=0.2, not_in_creative_inventory=1}, wear = 0, wield_image = "3d_armor_inv_regnumhelmet.png", - on_use = function(itemstack, user, pointed_thing) + on_secondary_use = function(itemstack, user, pointed_thing) local keys = user:get_player_control() if keys["sneak"] == true then itemstack:set_name("3d_armor:regnumhelmet") @@ -742,7 +742,7 @@ minetest.register_tool("3d_armor:regnumleggings", { groups = {armor_legs=15.0, armor_heal=13, armor_use=0,armor_fire=1, armor_water=0.2}, wear = 0, wield_image = "3d_armor_inv_regnumleggings.png", - on_use = function(itemstack, user, pointed_thing) + on_secondary_use = function(itemstack, user, pointed_thing) local keys = user:get_player_control() if keys["sneak"] == true then itemstack:set_name("3d_armor:regnumleggings2") @@ -756,7 +756,7 @@ minetest.register_tool("3d_armor:regnumleggings2", { groups = {armor_legs=15.0, armor_heal=13, armor_use=0,armor_fire=1, physics_speed=0.25, armor_water=0.2, not_in_creative_inventory=1}, wear = 0, wield_image = "3d_armor_inv_regnumleggings.png", - on_use = function(itemstack, user, pointed_thing) + on_secondary_use = function(itemstack, user, pointed_thing) local keys = user:get_player_control() if keys["sneak"] == true then itemstack:set_name("3d_armor:regnumleggings3") @@ -770,7 +770,7 @@ minetest.register_tool("3d_armor:regnumleggings3", { groups = {armor_legs=15.0, armor_heal=13, armor_use=0,armor_fire=1, physics_jump=0.25, armor_water=0.2, not_in_creative_inventory=1}, wear = 0, wield_image = "3d_armor_inv_regnumleggings.png", - on_use = function(itemstack, user, pointed_thing) + on_secondary_use = function(itemstack, user, pointed_thing) local keys = user:get_player_control() if keys["sneak"] == true then itemstack:set_name("3d_armor:regnumleggings4") @@ -784,7 +784,7 @@ minetest.register_tool("3d_armor:regnumleggings4", { groups = {armor_legs=15.0, armor_heal=13, armor_use=0,armor_fire=1, physics_jump=0.25, physics_speed=0.25, armor_water=0.2, not_in_creative_inventory=1}, wear = 0, wield_image = "3d_armor_inv_regnumleggings.png", - on_use = function(itemstack, user, pointed_thing) + on_secondary_use = function(itemstack, user, pointed_thing) local keys = user:get_player_control() if keys["sneak"] == true then itemstack:set_name("3d_armor:regnumleggings") diff --git a/mods/3d_armor/3d_armor/tutorial_craft.lua b/mods/3d_armor/3d_armor/tutorial_craft.lua index 63e90af..7172276 100644 --- a/mods/3d_armor/3d_armor/tutorial_craft.lua +++ b/mods/3d_armor/3d_armor/tutorial_craft.lua @@ -3625,3 +3625,126 @@ minetest.register_craft({ {'', '', 'tutorial:regnum', '', ''}, } }) + +minetest.register_craft({ + output = '3d_armor:regnumboots2', + recipe = { + {'', '', 'tutorial:regnum', '', ''}, + {'', '', 'tutorial:bottleSS', '', ''}, + {'tutorial:regnum', 'tutorial:bottleSS', '3d_armor:superlegendenboots2', 'tutorial:bottleSS', 'tutorial:regnum'}, + {'', '', 'tutorial:bottleSS', '', ''}, + {'', '', 'tutorial:regnum', '', ''}, + } +}) +minetest.register_craft({ + output = '3d_armor:regnumchestplate2', + recipe = { + {'', '', 'tutorial:regnum', '', ''}, + {'', '', 'tutorial:bottleSS', '', ''}, + {'tutorial:regnum', 'tutorial:bottleSS', '3d_armor:superlegendenchestplate2', 'tutorial:bottleSS', 'tutorial:regnum'}, + {'', '', 'tutorial:bottleSS', '', ''}, + {'', '', 'tutorial:regnum', '', ''}, + } +}) +minetest.register_craft({ + output = '3d_armor:regnumhelmet2', + recipe = { + {'', '', 'tutorial:regnum', '', ''}, + {'', '', 'tutorial:bottleSS', '', ''}, + {'tutorial:regnum', 'tutorial:bottleSS', '3d_armor:superlegendenhelmet2', 'tutorial:bottleSS', 'tutorial:regnum'}, + {'', '', 'tutorial:bottleSS', '', ''}, + {'', '', 'tutorial:regnum', '', ''}, + } +}) +minetest.register_craft({ + output = '3d_armor:regnumleggings2', + recipe = { + {'', '', 'tutorial:regnum', '', ''}, + {'', '', 'tutorial:bottleSS', '', ''}, + {'tutorial:regnum', 'tutorial:bottleSS', '3d_armor:superlegendenleggings2', 'tutorial:bottleSS', 'tutorial:regnum'}, + {'', '', 'tutorial:bottleSS', '', ''}, + {'', '', 'tutorial:regnum', '', ''}, + } +}) + +minetest.register_craft({ + output = '3d_armor:regnumboots3', + recipe = { + {'', '', 'tutorial:regnum', '', ''}, + {'', '', 'tutorial:bottleSS', '', ''}, + {'tutorial:regnum', 'tutorial:bottleSS', '3d_armor:superlegendenboots3', 'tutorial:bottleSS', 'tutorial:regnum'}, + {'', '', 'tutorial:bottleSS', '', ''}, + {'', '', 'tutorial:regnum', '', ''}, + } +}) +minetest.register_craft({ + output = '3d_armor:regnumchestplate3', + recipe = { + {'', '', 'tutorial:regnum', '', ''}, + {'', '', 'tutorial:bottleSS', '', ''}, + {'tutorial:regnum', 'tutorial:bottleSS', '3d_armor:superlegendenchestplate3', 'tutorial:bottleSS', 'tutorial:regnum'}, + {'', '', 'tutorial:bottleSS', '', ''}, + {'', '', 'tutorial:regnum', '', ''}, + } +}) +minetest.register_craft({ + output = '3d_armor:regnumhelmet3', + recipe = { + {'', '', 'tutorial:regnum', '', ''}, + {'', '', 'tutorial:bottleSS', '', ''}, + {'tutorial:regnum', 'tutorial:bottleSS', '3d_armor:superlegendenhelmet3', 'tutorial:bottleSS', 'tutorial:regnum'}, + {'', '', 'tutorial:bottleSS', '', ''}, + {'', '', 'tutorial:regnum', '', ''}, + } +}) +minetest.register_craft({ + output = '3d_armor:regnumleggings3', + recipe = { + {'', '', 'tutorial:regnum', '', ''}, + {'', '', 'tutorial:bottleSS', '', ''}, + {'tutorial:regnum', 'tutorial:bottleSS', '3d_armor:superlegendenleggings3', 'tutorial:bottleSS', 'tutorial:regnum'}, + {'', '', 'tutorial:bottleSS', '', ''}, + {'', '', 'tutorial:regnum', '', ''}, + } +}) + +minetest.register_craft({ + output = '3d_armor:regnumboots4', + recipe = { + {'', '', 'tutorial:regnum', '', ''}, + {'', '', 'tutorial:bottleSS', '', ''}, + {'tutorial:regnum', 'tutorial:bottleSS', '3d_armor:superlegendenboots4', 'tutorial:bottleSS', 'tutorial:regnum'}, + {'', '', 'tutorial:bottleSS', '', ''}, + {'', '', 'tutorial:regnum', '', ''}, + } +}) +minetest.register_craft({ + output = '3d_armor:regnumchestplate4', + recipe = { + {'', '', 'tutorial:regnum', '', ''}, + {'', '', 'tutorial:bottleSS', '', ''}, + {'tutorial:regnum', 'tutorial:bottleSS', '3d_armor:superlegendenchestplate4', 'tutorial:bottleSS', 'tutorial:regnum'}, + {'', '', 'tutorial:bottleSS', '', ''}, + {'', '', 'tutorial:regnum', '', ''}, + } +}) +minetest.register_craft({ + output = '3d_armor:regnumhelmet4', + recipe = { + {'', '', 'tutorial:regnum', '', ''}, + {'', '', 'tutorial:bottleSS', '', ''}, + {'tutorial:regnum', 'tutorial:bottleSS', '3d_armor:superlegendenhelmet4', 'tutorial:bottleSS', 'tutorial:regnum'}, + {'', '', 'tutorial:bottleSS', '', ''}, + {'', '', 'tutorial:regnum', '', ''}, + } +}) +minetest.register_craft({ + output = '3d_armor:regnumleggings4', + recipe = { + {'', '', 'tutorial:regnum', '', ''}, + {'', '', 'tutorial:bottleSS', '', ''}, + {'tutorial:regnum', 'tutorial:bottleSS', '3d_armor:superlegendenleggings4', 'tutorial:bottleSS', 'tutorial:regnum'}, + {'', '', 'tutorial:bottleSS', '', ''}, + {'', '', 'tutorial:regnum', '', ''}, + } +}) diff --git a/mods/3d_armor/shields/init.lua b/mods/3d_armor/shields/init.lua index dc0d627..49e0612 100644 --- a/mods/3d_armor/shields/init.lua +++ b/mods/3d_armor/shields/init.lua @@ -31,7 +31,7 @@ minetest.register_tool("shields:shield_admin", { wield_image = "shields_inv_shield_admin.png", groups = {armor_shield=20, armor_heal=20, armor_use=0, armor_fire=1, armor_water=0.2}, wear = 0, - on_use = function(itemstack, user, pointed_thing) + on_secondary_use = function(itemstack, user, pointed_thing) local keys = user:get_player_control() if keys["sneak"] == true then itemstack:set_name("shields:shield_admin2") @@ -46,7 +46,7 @@ minetest.register_tool("shields:shield_admin2", { wield_image = "shields_inv_shield_admin.png", groups = {armor_shield=20, armor_heal=20, armor_use=0, armor_fire=1, physics_speed=0.25, armor_water=0.2, not_in_creative_inventory=1}, wear = 0, - on_use = function(itemstack, user, pointed_thing) + on_secondary_use = function(itemstack, user, pointed_thing) local keys = user:get_player_control() if keys["sneak"] == true then itemstack:set_name("shields:shield_admin3") @@ -61,7 +61,7 @@ minetest.register_tool("shields:shield_admin3", { wield_image = "shields_inv_shield_admin.png", groups = {armor_shield=20, armor_heal=20, armor_use=0, armor_fire=1, physics_jump=0.25, armor_water=0.2, not_in_creative_inventory=1}, wear = 0, - on_use = function(itemstack, user, pointed_thing) + on_secondary_use = function(itemstack, user, pointed_thing) local keys = user:get_player_control() if keys["sneak"] == true then itemstack:set_name("shields:shield_admin4") @@ -76,7 +76,7 @@ minetest.register_tool("shields:shield_admin4", { wield_image = "shields_inv_shield_admin.png", groups = {armor_shield=20, armor_heal=20, armor_use=0, armor_fire=1, physics_jump=0.25, physics_speed=0.25, armor_water=0.2, not_in_creative_inventory=1}, wear = 0, - on_use = function(itemstack, user, pointed_thing) + on_secondary_use = function(itemstack, user, pointed_thing) local keys = user:get_player_control() if keys["sneak"] == true then itemstack:set_name("shields:shield_admin") diff --git a/mods/3d_armor/shields/tutorial.lua b/mods/3d_armor/shields/tutorial.lua index 74ddbfc..5434da2 100644 --- a/mods/3d_armor/shields/tutorial.lua +++ b/mods/3d_armor/shields/tutorial.lua @@ -104,7 +104,7 @@ minetest.register_tool("shields:superlegendenshield", { groups = {armor_shield=12.2, armor_heal=12, armor_use=0,armor_fire=0.61, armor_water=0.2, not_in_creative_inventory=1}, wear = 0, wield_image = "shields_inv_superlegendenshield.png", - on_use = function(itemstack, user, pointed_thing) + on_secondary_use = function(itemstack, user, pointed_thing) local keys = user:get_player_control() if keys["sneak"] == true then itemstack:set_name("shields:superlegendenshield2") @@ -118,7 +118,7 @@ minetest.register_tool("shields:superlegendenshield2", { groups = {armor_shield=12.2, armor_heal=12, armor_use=0,armor_fire=0.61, physics_speed=0.25, armor_water=0.2, not_in_creative_inventory=1}, wear = 0, wield_image = "shields_inv_superlegendenshield.png", - on_use = function(itemstack, user, pointed_thing) + on_secondary_use = function(itemstack, user, pointed_thing) local keys = user:get_player_control() if keys["sneak"] == true then itemstack:set_name("shields:superlegendenshield3") @@ -132,7 +132,7 @@ minetest.register_tool("shields:superlegendenshield3", { groups = {armor_shield=12.2, armor_heal=12, armor_use=0,armor_fire=0.61, physics_jump=0.25, armor_water=0.2, not_in_creative_inventory=1}, wear = 0, wield_image = "shields_inv_superlegendenshield.png", - on_use = function(itemstack, user, pointed_thing) + on_secondary_use = function(itemstack, user, pointed_thing) local keys = user:get_player_control() if keys["sneak"] == true then itemstack:set_name("shields:superlegendenshield4") @@ -146,7 +146,7 @@ minetest.register_tool("shields:superlegendenshield4", { groups = {armor_shield=12.2, armor_heal=12, armor_use=0,armor_fire=0.61, physics_jump=0.25, physics_speed=0.25, armor_water=0.2, not_in_creative_inventory=1}, wear = 0, wield_image = "shields_inv_superlegendenshield.png", - on_use = function(itemstack, user, pointed_thing) + on_secondary_use = function(itemstack, user, pointed_thing) local keys = user:get_player_control() if keys["sneak"] == true then itemstack:set_name("shields:superlegendenshield") @@ -161,7 +161,7 @@ minetest.register_tool("shields:regnumshield", { groups = {armor_shield=15.0, armor_heal=13, armor_use=0,armor_fire=1, armor_water=0.2}, wear = 0, wield_image = "shields_inv_regnumshield.png", - on_use = function(itemstack, user, pointed_thing) + on_secondary_use = function(itemstack, user, pointed_thing) local keys = user:get_player_control() if keys["sneak"] == true then itemstack:set_name("shields:regnumshield2") @@ -175,7 +175,7 @@ minetest.register_tool("shields:regnumshield2", { groups = {armor_shield=15.0, armor_heal=13, armor_use=0,armor_fire=1, physics_speed=0.25, armor_water=0.2, not_in_creative_inventory=1}, wear = 0, wield_image = "shields_inv_regnumshield.png", - on_use = function(itemstack, user, pointed_thing) + on_secondary_use = function(itemstack, user, pointed_thing) local keys = user:get_player_control() if keys["sneak"] == true then itemstack:set_name("shields:regnumshield3") @@ -189,7 +189,7 @@ minetest.register_tool("shields:regnumshield3", { groups = {armor_shield=15.0, armor_heal=13, armor_use=0,armor_fire=1, physics_jump=0.25, armor_water=0.2, not_in_creative_inventory=1}, wear = 0, wield_image = "shields_inv_regnumshield.png", - on_use = function(itemstack, user, pointed_thing) + on_secondary_use = function(itemstack, user, pointed_thing) local keys = user:get_player_control() if keys["sneak"] == true then itemstack:set_name("shields:regnumshield4") @@ -203,7 +203,7 @@ minetest.register_tool("shields:regnumshield4", { groups = {armor_shield=15.0, armor_heal=13, armor_use=0,armor_fire=1, physics_jump=0.25, physics_speed=0.25, armor_water=0.2, not_in_creative_inventory=1}, wear = 0, wield_image = "shields_inv_regnumshield.png", - on_use = function(itemstack, user, pointed_thing) + on_secondary_use = function(itemstack, user, pointed_thing) local keys = user:get_player_control() if keys["sneak"] == true then itemstack:set_name("shields:regnumshield") @@ -212,13 +212,4 @@ minetest.register_tool("shields:regnumshield4", { end, }) -minetest.register_craft({ - output = 'shields:regnumshield', - recipe = { - {'', '', 'tutorial:regnum', '', ''}, - {'', '', 'tutorial:bottleSS', '', ''}, - {'tutorial:regnum', 'tutorial:bottleSS', 'shields:superlegendenshield', 'tutorial:bottleSS', 'tutorial:regnum'}, - {'', '', 'tutorial:bottleSS', '', ''}, - {'', '', 'tutorial:regnum', '', ''}, - } -}) + diff --git a/mods/3d_armor/shields/tutorial_craft.lua b/mods/3d_armor/shields/tutorial_craft.lua index 9104a30..2474bf2 100644 --- a/mods/3d_armor/shields/tutorial_craft.lua +++ b/mods/3d_armor/shields/tutorial_craft.lua @@ -891,4 +891,48 @@ minetest.register_craft({ recipe = { {'tutorial:lilabattleaxe2', 'shields:legendenshield6'}, } +}) + +minetest.register_craft({ + output = 'shields:regnumshield', + recipe = { + {'', '', 'tutorial:regnum', '', ''}, + {'', '', 'tutorial:bottleSS', '', ''}, + {'tutorial:regnum', 'tutorial:bottleSS', 'shields:superlegendenshield', 'tutorial:bottleSS', 'tutorial:regnum'}, + {'', '', 'tutorial:bottleSS', '', ''}, + {'', '', 'tutorial:regnum', '', ''}, + } +}) + +minetest.register_craft({ + output = 'shields:regnumshield2', + recipe = { + {'', '', 'tutorial:regnum', '', ''}, + {'', '', 'tutorial:bottleSS', '', ''}, + {'tutorial:regnum', 'tutorial:bottleSS', 'shields:superlegendenshield2', 'tutorial:bottleSS', 'tutorial:regnum'}, + {'', '', 'tutorial:bottleSS', '', ''}, + {'', '', 'tutorial:regnum', '', ''}, + } +}) + +minetest.register_craft({ + output = 'shields:regnumshield3', + recipe = { + {'', '', 'tutorial:regnum', '', ''}, + {'', '', 'tutorial:bottleSS', '', ''}, + {'tutorial:regnum', 'tutorial:bottleSS', 'shields:superlegendenshield3', 'tutorial:bottleSS', 'tutorial:regnum'}, + {'', '', 'tutorial:bottleSS', '', ''}, + {'', '', 'tutorial:regnum', '', ''}, + } +}) + +minetest.register_craft({ + output = 'shields:regnumshield4', + recipe = { + {'', '', 'tutorial:regnum', '', ''}, + {'', '', 'tutorial:bottleSS', '', ''}, + {'tutorial:regnum', 'tutorial:bottleSS', 'shields:superlegendenshield4', 'tutorial:bottleSS', 'tutorial:regnum'}, + {'', '', 'tutorial:bottleSS', '', ''}, + {'', '', 'tutorial:regnum', '', ''}, + } }) \ No newline at end of file diff --git a/mods/ban_hammer/init.lua b/mods/ban_hammer/init.lua index 29070e9..562a96c 100644 --- a/mods/ban_hammer/init.lua +++ b/mods/ban_hammer/init.lua @@ -7,17 +7,16 @@ dofile(minetest.get_modpath("ban_hammer").."/settings.txt") ----------------------------------------------------------------------------------------------- local mode_text = { - {"Ban punched player."}, - {"Kick punched player."}, - {"Remove shout privilege of punched player."}, - {"Remove fly privilege of punched player."}, - {"Remove noclip privilege of punched player."}, + {"ban punched player"}, + {"kick punched player"}, + {"remove shout privilege of punched player"}, + {"remove fly privilege of punched player"}, + {"remove noclip privilege of punched player"}, } local function ban_hammer_setmode(user, itemstack, mode, keys) local puncher = user:get_player_name() if keys["sneak"] == false and mode == 0 then - minetest.chat_send_player(puncher, "Hold shift and use to change ban hammer modes.") return end if keys["sneak"] == true then @@ -25,7 +24,6 @@ local function ban_hammer_setmode(user, itemstack, mode, keys) if mode == 6 then mode = 1 end - minetest.chat_send_player(puncher, "Ban hammer mode : "..mode.." - "..mode_text[mode][1] ) end itemstack:set_name("ban_hammer:hammer"..mode) itemstack:set_metadata(mode) @@ -92,7 +90,12 @@ end minetest.register_craftitem("ban_hammer:hammer", { description = "Admin tool 1: Ban Hammer", inventory_image = "ban_hammer.png", - + groups = {not_in_creative_inventory=1}, + on_secondary_use = function(itemstack, user, pointed_thing) + local mode = 0 + ban_hammer_handler(itemstack, user, pointed_thing, mode) + return itemstack + end, on_use = function(itemstack, user, pointed_thing) local mode = 0 ban_hammer_handler(itemstack, user, pointed_thing, mode) @@ -100,20 +103,31 @@ minetest.register_craftitem("ban_hammer:hammer", { end, }) -for i = 1, 5 do +for i = 2, 5 do minetest.register_craftitem("ban_hammer:hammer"..i, { - description = "Admin tool 1: Ban Hammer in Mode "..i, + description = "Admin tool 1: Ban Hammer Mode "..i.." ("..mode_text[i][1]..")", inventory_image = "ban_hammer.png^technic_tool_mode"..i..".png", wield_image = "ban_hammer.png", groups = {not_in_creative_inventory=1}, - stack_max = 1, - on_use = function(itemstack, user, pointed_thing) + stack_max = 1, + on_secondary_use = function(itemstack, user, pointed_thing) local mode = i ban_hammer_handler(itemstack, user, pointed_thing, mode) return itemstack end, - }) + }) end + +minetest.register_craftitem("ban_hammer:hammer1", { + description = "Admin tool 1: Ban Hammer Mode 1 ("..mode_text[1][1]..")", + inventory_image = "ban_hammer.png^technic_tool_mode1.png", + wield_image = "ban_hammer.png", + stack_max = 1, + on_secondary_use = function(itemstack, user, pointed_thing) + ban_hammer_handler(itemstack, user, pointed_thing, 1) + return itemstack + end, +}) ----------------------------------------------------------------------------------------------- print("[Mod] "..title.." ["..version.."] ["..mname.."] Loaded...") ----------------------------------------------------------------------------------------------- diff --git a/mods/beds/api.lua b/mods/beds/api.lua index c545a20..cab2def 100644 --- a/mods/beds/api.lua +++ b/mods/beds/api.lua @@ -17,6 +17,8 @@ local function destruct_bed(pos, n) reverse = not reverse minetest.remove_node(other) minetest.check_for_falling(other) + beds.remove_spawns_at(pos) + beds.remove_spawns_at(other) else reverse = not reverse end diff --git a/mods/beds/beds.lua b/mods/beds/beds.lua index 276c05e..dc044a3 100644 --- a/mods/beds/beds.lua +++ b/mods/beds/beds.lua @@ -79,10 +79,10 @@ beds.register_bed("beds:bed", { } }, nodebox = { - bottom = {-0.5, -0.5, -0.5, 0.5, 0.06, 0.5}, - top = {-0.5, -0.5, -0.5, 0.5, 0.06, 0.5}, + bottom = {-0.5, -0.5, -0.5, 0.5, 0.0625, 0.5}, + top = {-0.5, -0.5, -0.5, 0.5, 0.0625, 0.5}, }, - selectionbox = {-0.5, -0.5, -0.5, 0.5, 0.06, 1.5}, + selectionbox = {-0.5, -0.5, -0.5, 0.5, 0.0625, 1.5}, recipe = { {"wool:white", "wool:white", "wool:white"}, {"group:wood", "group:wood", "group:wood"} diff --git a/mods/beds/functions.lua b/mods/beds/functions.lua index 0b79bfb..6ee0474 100644 --- a/mods/beds/functions.lua +++ b/mods/beds/functions.lua @@ -90,7 +90,13 @@ local function lay_down(player, pos, bed_pos, state, skip) local yaw, param2 = get_look_yaw(bed_pos) player:set_look_horizontal(yaw) local dir = minetest.facedir_to_dir(param2) - local p = {x = bed_pos.x + dir.x / 2, y = bed_pos.y, z = bed_pos.z + dir.z / 2} + -- p.y is just above the nodebox height of the 'Simple Bed' (the highest bed), + -- to avoid sinking down through the bed. + local p = { + x = bed_pos.x + dir.x / 2, + y = bed_pos.y + 0.07, + z = bed_pos.z + dir.z / 2 + } player:set_physics_override(0, 0, 0) player:set_pos(p) default.player_attached[name] = true diff --git a/mods/beds/init.lua b/mods/beds/init.lua index 869ff0f..a1a46ce 100644 --- a/mods/beds/init.lua +++ b/mods/beds/init.lua @@ -2,7 +2,7 @@ -- Load support for MT game translation. local S = minetest.get_translator("beds") - +local esc = minetest.formspec_escape beds = {} beds.player = {} @@ -14,7 +14,7 @@ beds.get_translator = S beds.formspec = "size[8,11;true]" .. "no_prepend[]" .. "bgcolor[#080808BB;true]" .. - "button_exit[2,10;4,0.75;leave;" .. S("Leave Bed") .. "]" + "button_exit[2,10;4,0.75;leave;" .. esc(S("Leave Bed")) .. "]" local modpath = minetest.get_modpath("beds") diff --git a/mods/beds/locale/beds.ms.tr b/mods/beds/locale/beds.ms.tr new file mode 100644 index 0000000..797e3a6 --- /dev/null +++ b/mods/beds/locale/beds.ms.tr @@ -0,0 +1,8 @@ +# textdomain: beds +Fancy Bed=Katil Beragam +Simple Bed=Katil Biasa +Leave Bed=Bangun +Good morning.=Selamat pagi. +@1 of @2 players are in bed=@1 daripada @2 pemain sedang tidur +Force night skip=Paksa langkau malam +You can only sleep at night.=Anda hanya boleh tidur pada waktu malam. diff --git a/mods/beds/locale/beds.ru.tr b/mods/beds/locale/beds.ru.tr new file mode 100644 index 0000000..1974b3d --- /dev/null +++ b/mods/beds/locale/beds.ru.tr @@ -0,0 +1,8 @@ +# textdomain: beds +Fancy Bed=Детализированная Кровать +Simple Bed=Обычная Кровать +Leave Bed=Встать с кровати +Good morning.=Доброе утро. +@1 of @2 players are in bed=@1 из @2 игроков в кровати +Force night skip=Пропустить ночь +You can only sleep at night.=Вы можете спать только ночью. diff --git a/mods/beds/locale/beds.se.tr b/mods/beds/locale/beds.se.tr new file mode 100644 index 0000000..53f4f2d --- /dev/null +++ b/mods/beds/locale/beds.se.tr @@ -0,0 +1,8 @@ +# textdomain: beds +Fancy Bed=Fin säng +Simple Bed=Enkel Säng +Leave Bed=Lämna Säng +Good morning.= God morgon. +@1 of @2 players are in bed=@1 av @2 spelar försöker sover. +Force night skip=Tvinga över natten +You can only sleep at night.=Du kan bara sova på natten. diff --git a/mods/beds/locale/beds.zh_CN.tr b/mods/beds/locale/beds.zh_CN.tr new file mode 100644 index 0000000..609524d --- /dev/null +++ b/mods/beds/locale/beds.zh_CN.tr @@ -0,0 +1,8 @@ +# textdomain: beds +Fancy Bed=花式床 +Simple Bed=简易床 +Leave Bed=离开床 +Good morning.=早安! +@1 of @2 players are in bed=@2位玩家中的@1位在床上 +Force night skip=强制跳过夜晚 +You can only sleep at night.=你只能在晚上睡觉。 diff --git a/mods/beds/locale/beds.zh_TW.tr b/mods/beds/locale/beds.zh_TW.tr new file mode 100644 index 0000000..4e7d687 --- /dev/null +++ b/mods/beds/locale/beds.zh_TW.tr @@ -0,0 +1,9 @@ +# textdomain: beds +Fancy Bed=花式床 +Simple Bed=簡易床 +Leave Bed=離開床 +Good morning.=早安! +@1 of @2 players are in bed=@2位玩家中的@1位在床上 +Force night skip=強制跳過夜晚 +You can only sleep at night.=你只能在晚上睡覺。 + diff --git a/mods/beds/spawns.lua b/mods/beds/spawns.lua index baee364..1a2ce81 100644 --- a/mods/beds/spawns.lua +++ b/mods/beds/spawns.lua @@ -61,3 +61,12 @@ function beds.set_spawns() end beds.save_spawns() end + +function beds.remove_spawns_at(pos) + for name, p in pairs(beds.spawn) do + if vector.equals(vector.round(p), pos) then + beds.spawn[name] = nil + end + end + beds.save_spawns() +end diff --git a/mods/binoculars/locale/binoculars.ms.tr b/mods/binoculars/locale/binoculars.ms.tr new file mode 100644 index 0000000..d38e64f --- /dev/null +++ b/mods/binoculars/locale/binoculars.ms.tr @@ -0,0 +1,3 @@ +# textdomain: binoculars +Binoculars=Binokular +Use with 'Zoom' key=Guna dengan kekunci 'Zum' diff --git a/mods/binoculars/locale/binoculars.ru.tr b/mods/binoculars/locale/binoculars.ru.tr new file mode 100644 index 0000000..6b3aa9e --- /dev/null +++ b/mods/binoculars/locale/binoculars.ru.tr @@ -0,0 +1,3 @@ +# textdomain: binoculars +Binoculars=Бинокль +Use with 'Zoom' key=Используется с привилегией 'Zoom' diff --git a/mods/binoculars/locale/binoculars.se.tr b/mods/binoculars/locale/binoculars.se.tr new file mode 100644 index 0000000..291afd5 --- /dev/null +++ b/mods/binoculars/locale/binoculars.se.tr @@ -0,0 +1,3 @@ +# textdomain: binoculars +Binoculars=Kikare +Use with 'Zoom' key=Används med 'Zoom' knappen \ No newline at end of file diff --git a/mods/binoculars/locale/binoculars.zh_CN.tr b/mods/binoculars/locale/binoculars.zh_CN.tr new file mode 100644 index 0000000..ec46cf8 --- /dev/null +++ b/mods/binoculars/locale/binoculars.zh_CN.tr @@ -0,0 +1,3 @@ +# textdomain: binoculars +Binoculars=望远镜 +Use with 'Zoom' key=与“缩放”键一起使用 diff --git a/mods/binoculars/locale/binoculars.zh_TW.tr b/mods/binoculars/locale/binoculars.zh_TW.tr new file mode 100644 index 0000000..bbe3b39 --- /dev/null +++ b/mods/binoculars/locale/binoculars.zh_TW.tr @@ -0,0 +1,3 @@ +# textdomain: binoculars +Binoculars=望遠鏡 +Use with 'Zoom' key=與“縮放”鍵一起使用 diff --git a/mods/boats/init.lua b/mods/boats/init.lua index a785bdc..f9ae8e0 100644 --- a/mods/boats/init.lua +++ b/mods/boats/init.lua @@ -13,15 +13,6 @@ local function is_water(pos) end -local function get_sign(i) - if i == 0 then - return 0 - else - return i / math.abs(i) - end -end - - local function get_velocity(v, yaw, y) local x = -math.sin(yaw) * v local z = math.cos(yaw) * v @@ -146,7 +137,7 @@ end function boat.on_step(self, dtime) - self.v = get_v(self.object:get_velocity()) * get_sign(self.v) + self.v = get_v(self.object:get_velocity()) * math.sign(self.v) if self.driver then local driver_objref = minetest.get_player_by_name(self.driver) if driver_objref then @@ -157,13 +148,13 @@ function boat.on_step(self, dtime) minetest.chat_send_player(self.driver, S("Boat cruise mode on")) end elseif ctrl.down then - self.v = self.v - dtime * 1.8 + self.v = self.v - dtime * 2.0 if self.auto then self.auto = false minetest.chat_send_player(self.driver, S("Boat cruise mode off")) end elseif ctrl.up or self.auto then - self.v = self.v + dtime * 1.8 + self.v = self.v + dtime * 2.0 end if ctrl.left then if self.v < -0.001 then @@ -185,15 +176,14 @@ function boat.on_step(self, dtime) self.object:set_pos(self.object:get_pos()) return end - local s = get_sign(self.v) - self.v = self.v - dtime * 0.6 * s - if s ~= get_sign(self.v) then - self.object:set_velocity({x = 0, y = 0, z = 0}) + -- We need to preserve velocity sign to properly apply drag force + -- while moving backward + local drag = dtime * math.sign(self.v) * (0.01 + 0.0796 * self.v * self.v) + -- If drag is larger than velocity, then stop horizontal movement + if math.abs(self.v) <= math.abs(drag) then self.v = 0 - return - end - if math.abs(self.v) > 5 then - self.v = 5 * get_sign(self.v) + else + self.v = self.v - drag end local p = self.object:get_pos() diff --git a/mods/boats/locale/boats.ms.tr b/mods/boats/locale/boats.ms.tr new file mode 100644 index 0000000..d11a68b --- /dev/null +++ b/mods/boats/locale/boats.ms.tr @@ -0,0 +1,4 @@ +# textdomain: boats +Boat cruise mode on=Mod bot layar makan angin dibolehkan +Boat cruise mode off=Mod bot layar makan angin dilumpuhkan +Boat=Bot diff --git a/mods/boats/locale/boats.ru.tr b/mods/boats/locale/boats.ru.tr new file mode 100644 index 0000000..4327098 --- /dev/null +++ b/mods/boats/locale/boats.ru.tr @@ -0,0 +1,4 @@ +# textdomain: boats +Boat cruise mode on=Режим путешествия на лодке включен +Boat cruise mode off=Режим путешествия на лодке выключен +Boat=Лодка diff --git a/mods/boats/locale/boats.se.tr b/mods/boats/locale/boats.se.tr new file mode 100644 index 0000000..4ca7c80 --- /dev/null +++ b/mods/boats/locale/boats.se.tr @@ -0,0 +1,4 @@ +# textdomain: boats +Boat cruise mode on=Båtkryssningsläge på +Boat cruise mode off=Båtkryssningsläge av +Boat=Båt \ No newline at end of file diff --git a/mods/boats/locale/boats.zh_CN.tr b/mods/boats/locale/boats.zh_CN.tr new file mode 100644 index 0000000..254f2df --- /dev/null +++ b/mods/boats/locale/boats.zh_CN.tr @@ -0,0 +1,4 @@ +# textdomain: boats +Boat cruise mode on=巡航模式开启 +Boat cruise mode off=巡航模式关闭 +Boat=船 diff --git a/mods/boats/locale/boats.zh_TW.tr b/mods/boats/locale/boats.zh_TW.tr new file mode 100644 index 0000000..97b3471 --- /dev/null +++ b/mods/boats/locale/boats.zh_TW.tr @@ -0,0 +1,4 @@ +# textdomain: boats +Boat cruise mode on=巡航模式開啟 +Boat cruise mode off=巡航模式關閉 +Boat=船 diff --git a/mods/bones/locale/bones.ms.tr b/mods/bones/locale/bones.ms.tr new file mode 100644 index 0000000..e4b8712 --- /dev/null +++ b/mods/bones/locale/bones.ms.tr @@ -0,0 +1,8 @@ +# textdomain: bones +Bones=Tulang +@1's old bones=Tulang lama @1 +@1 died at @2.=@1 mati di @2. +@1 died at @2, and dropped their inventory.=@1 mati di @2, dan menjatuhkan inventorinya. +@1 died at @2, and bones were placed.=@1 mati di @2, dan tulang diletakkan. +@1's fresh bones=Tulang segar @1 +@1's bones=Tulang @1 diff --git a/mods/bones/locale/bones.ru.tr b/mods/bones/locale/bones.ru.tr new file mode 100644 index 0000000..98691c5 --- /dev/null +++ b/mods/bones/locale/bones.ru.tr @@ -0,0 +1,8 @@ +# textdomain: bones +Bones=Кости +@1's old bones=Старые кости @1 +@1 died at @2.=@1 умер в @2. +@1 died at @2, and dropped their inventory.=@1 умер в @2 и потерял содержимое своего инвентаря. +@1 died at @2, and bones were placed.=@1 умер в @2, помещены кости. +@1's fresh bones=новые кости @1 +@1's bones=кости @1 diff --git a/mods/bones/locale/bones.se.tr b/mods/bones/locale/bones.se.tr new file mode 100644 index 0000000..1323c59 --- /dev/null +++ b/mods/bones/locale/bones.se.tr @@ -0,0 +1,8 @@ +# textdomain: bones +Bones=Ben +@1's old bones=@1s Gamla ben +@1 died at @2.=@1 dog på @a. +@1 died at @2, and dropped their inventory.=@1 dog på @a, och tappade deras saker. +@1 died at @2, and bones were placed.=@1 dog på @2, och deras ben var placerade. +@1's fresh bones=@1s färska ben +@1's bones=@1s ben diff --git a/mods/bones/locale/bones.zh_CN.tr b/mods/bones/locale/bones.zh_CN.tr new file mode 100644 index 0000000..dadf55e --- /dev/null +++ b/mods/bones/locale/bones.zh_CN.tr @@ -0,0 +1,8 @@ +# textdomain: bones +Bones=骨骸 +@1's old bones=@1的旧骨骸 +@1 died at @2.=@1在@2死亡。 +@1 died at @2, and dropped their inventory.=@1在@2死亡,丢掉了物品栏。 +@1 died at @2, and bones were placed.=@1在@2死亡,骨骸被放置。 +@1's fresh bones=@1的新鲜骨骸 +@1's bones=@1的骨骸 diff --git a/mods/bones/locale/bones.zh_TW.tr b/mods/bones/locale/bones.zh_TW.tr new file mode 100644 index 0000000..1a94d2f --- /dev/null +++ b/mods/bones/locale/bones.zh_TW.tr @@ -0,0 +1,8 @@ +# textdomain: bones +Bones=骨骸 +@1's old bones=@1的舊骨骸 +@1 died at @2.=@1在@2死亡。 +@1 died at @2, and dropped their inventory.=@1在@2死亡,丟掉了物品欄。 +@1 died at @2, and bones were placed.=@1在@2死亡,骨骸被放置。 +@1's fresh bones=@1的新鮮骨骸 +@1's bones=@1的骨骸 diff --git a/mods/bucket/init.lua b/mods/bucket/init.lua index 2cf431c..ebdf2e7 100644 --- a/mods/bucket/init.lua +++ b/mods/bucket/init.lua @@ -225,3 +225,16 @@ minetest.register_craft({ replacements = {{"bucket:bucket_lava", "bucket:bucket_empty"}}, }) +-- Register buckets as dungeon loot +if minetest.global_exists("dungeon_loot") then + dungeon_loot.register({ + {name = "bucket:bucket_empty", chance = 0.55}, + -- water in deserts/ice or above ground, lava otherwise + {name = "bucket:bucket_water", chance = 0.45, + types = {"sandstone", "desert", "ice"}}, + {name = "bucket:bucket_water", chance = 0.45, y = {0, 32768}, + types = {"normal"}}, + {name = "bucket:bucket_lava", chance = 0.45, y = {-32768, -1}, + types = {"normal"}}, + }) +end diff --git a/mods/bucket/locale/bucket.ms.tr b/mods/bucket/locale/bucket.ms.tr new file mode 100644 index 0000000..02ba38a --- /dev/null +++ b/mods/bucket/locale/bucket.ms.tr @@ -0,0 +1,5 @@ +# textdomain: bucket +Empty Bucket=Baldi Kosong +Water Bucket=Baldi Air +River Water Bucket=Baldi Air Sungai +Lava Bucket=Baldi Lava diff --git a/mods/bucket/locale/bucket.ru.tr b/mods/bucket/locale/bucket.ru.tr new file mode 100644 index 0000000..8ede280 --- /dev/null +++ b/mods/bucket/locale/bucket.ru.tr @@ -0,0 +1,5 @@ +# textdomain: bucket +Empty Bucket=Пустое Ведро +Water Bucket=Ведро с Водой +River Water Bucket=Ведро с Речной Водой +Lava Bucket=Ведро с Лавой diff --git a/mods/bucket/locale/bucket.se.tr b/mods/bucket/locale/bucket.se.tr new file mode 100644 index 0000000..06e9ea3 --- /dev/null +++ b/mods/bucket/locale/bucket.se.tr @@ -0,0 +1,5 @@ +# textdomain: bucket +Empty Bucket=Tom hink +Water Bucket=Vatten hink +River Water Bucket=Flodvatten hink +Lava Bucket=Lava hink \ No newline at end of file diff --git a/mods/bucket/locale/bucket.zh_CN.tr b/mods/bucket/locale/bucket.zh_CN.tr new file mode 100644 index 0000000..fda5bfc --- /dev/null +++ b/mods/bucket/locale/bucket.zh_CN.tr @@ -0,0 +1,5 @@ +# textdomain: bucket +Empty Bucket=空桶 +Water Bucket=水桶 +River Water Bucket=河水桶 +Lava Bucket=岩浆桶 diff --git a/mods/bucket/locale/bucket.zh_TW.tr b/mods/bucket/locale/bucket.zh_TW.tr new file mode 100644 index 0000000..965d657 --- /dev/null +++ b/mods/bucket/locale/bucket.zh_TW.tr @@ -0,0 +1,5 @@ +# textdomain: bucket +Empty Bucket=空桶 +Water Bucket=水桶 +River Water Bucket=河水桶 +Lava Bucket=岩漿桶 diff --git a/mods/bucket/mod.conf b/mods/bucket/mod.conf index 1c60a09..fef4687 100644 --- a/mods/bucket/mod.conf +++ b/mods/bucket/mod.conf @@ -1,3 +1,4 @@ name = bucket description = Minetest Game mod: bucket depends = default +optional_depends = dungeon_loot diff --git a/mods/butterflies/init.lua b/mods/butterflies/init.lua index 6fd839f..650e7da 100644 --- a/mods/butterflies/init.lua +++ b/mods/butterflies/init.lua @@ -102,7 +102,7 @@ minetest.register_decoration({ place_offset_y = 2, sidelen = 80, fill_ratio = 0.005, - biomes = {"grassland", "deciduous_forest", "floatland_grassland"}, + biomes = {"grassland", "deciduous_forest"}, y_max = 31000, y_min = 1, decoration = { diff --git a/mods/butterflies/locale/butterflies.ms.tr b/mods/butterflies/locale/butterflies.ms.tr new file mode 100644 index 0000000..b8bde85 --- /dev/null +++ b/mods/butterflies/locale/butterflies.ms.tr @@ -0,0 +1,4 @@ +# textdomain: butterflies +White Butterfly=Rama-Rama Putih +Red Butterfly=Rama-Rama Merah +Violet Butterfly=Rama-Rama Ungu diff --git a/mods/butterflies/locale/butterflies.ru.tr b/mods/butterflies/locale/butterflies.ru.tr new file mode 100644 index 0000000..7a79ed8 --- /dev/null +++ b/mods/butterflies/locale/butterflies.ru.tr @@ -0,0 +1,4 @@ +# textdomain: butterflies +White Butterfly=Белая Бабочка +Red Butterfly=Красная Бабочка +Violet Butterfly=Фиолетовая Бабочка diff --git a/mods/butterflies/locale/butterflies.se.tr b/mods/butterflies/locale/butterflies.se.tr new file mode 100644 index 0000000..08cb94c --- /dev/null +++ b/mods/butterflies/locale/butterflies.se.tr @@ -0,0 +1,4 @@ +# textdomain: butterflies +White Butterfly=Vit fjäril +Red Butterfly=Röd fjäril +Violet Butterfly=Violett fjäril \ No newline at end of file diff --git a/mods/butterflies/locale/butterflies.zh_CN.tr b/mods/butterflies/locale/butterflies.zh_CN.tr new file mode 100644 index 0000000..24e0bd1 --- /dev/null +++ b/mods/butterflies/locale/butterflies.zh_CN.tr @@ -0,0 +1,4 @@ +# textdomain: butterflies +White Butterfly=白蝴蝶 +Red Butterfly=红蝴蝶 +Violet Butterfly=紫蝴蝶 diff --git a/mods/butterflies/locale/butterflies.zh_TW.tr b/mods/butterflies/locale/butterflies.zh_TW.tr new file mode 100644 index 0000000..8d927c1 --- /dev/null +++ b/mods/butterflies/locale/butterflies.zh_TW.tr @@ -0,0 +1,4 @@ +# textdomain: butterflies +White Butterfly=白蝴蝶 +Red Butterfly=紅蝴蝶 +Violet Butterfly=紫蝴蝶 diff --git a/mods/carts/cart_entity.lua b/mods/carts/cart_entity.lua index 3c131a6..02ff6cd 100644 --- a/mods/carts/cart_entity.lua +++ b/mods/carts/cart_entity.lua @@ -414,7 +414,7 @@ minetest.register_craftitem("carts:cart", { end minetest.sound_play({name = "default_place_node_metal", gain = 0.5}, - {pos = pointed_thing.above}) + {pos = pointed_thing.above}, true) if not (creative and creative.is_enabled_for and creative.is_enabled_for(placer:get_player_name())) then diff --git a/mods/carts/init.lua b/mods/carts/init.lua index a5aa9cb..69d59d9 100644 --- a/mods/carts/init.lua +++ b/mods/carts/init.lua @@ -19,3 +19,10 @@ carts.path_distance_max = 3 dofile(carts.modpath.."/functions.lua") dofile(carts.modpath.."/rails.lua") dofile(carts.modpath.."/cart_entity.lua") + +-- Register rails as dungeon loot +if minetest.global_exists("dungeon_loot") then + dungeon_loot.register({ + name = "carts:rail", chance = 0.35, count = {1, 6} + }) +end diff --git a/mods/carts/locale/carts.ms.tr b/mods/carts/locale/carts.ms.tr new file mode 100644 index 0000000..e8944e9 --- /dev/null +++ b/mods/carts/locale/carts.ms.tr @@ -0,0 +1,6 @@ +# textdomain: carts +Cart=Pedati +(Sneak+Click to pick up)=(Selinap+Klik untuk ambil balik) +Rail=Landasan +Powered Rail=Landasan Berkuasa +Brake Rail=Landasan Brek diff --git a/mods/carts/locale/carts.ru.tr b/mods/carts/locale/carts.ru.tr new file mode 100644 index 0000000..6ff5be6 --- /dev/null +++ b/mods/carts/locale/carts.ru.tr @@ -0,0 +1,6 @@ +# textdomain: carts +Cart=Вагонетка +(Sneak+Click to pick up)=(Пригнитесь и кликните по вагонетке, чтобы забрать) +Rail=Рельса +Powered Rail=Механизированная Рельса +Brake Rail=Рельса с тормозом diff --git a/mods/carts/locale/carts.se.tr b/mods/carts/locale/carts.se.tr new file mode 100644 index 0000000..e40f8ca --- /dev/null +++ b/mods/carts/locale/carts.se.tr @@ -0,0 +1,6 @@ +# textdomain: carts +Cart=Vagn +(Sneak+Click to pick up)=(Shift+Klicka för att plocka upp) +Rail=Räls +Powered Rail=Aktiverad räls +Brake Rail=Broms räls \ No newline at end of file diff --git a/mods/carts/locale/carts.zh_CN.tr b/mods/carts/locale/carts.zh_CN.tr new file mode 100644 index 0000000..953cdef --- /dev/null +++ b/mods/carts/locale/carts.zh_CN.tr @@ -0,0 +1,6 @@ +# textdomain: carts +Cart=矿车 +(Sneak+Click to pick up)=(潜行+单击以捡起) +Rail=铁轨 +Powered Rail=动力铁轨 +Brake Rail=制动铁轨 diff --git a/mods/carts/locale/carts.zh_TW.tr b/mods/carts/locale/carts.zh_TW.tr new file mode 100644 index 0000000..f6300d4 --- /dev/null +++ b/mods/carts/locale/carts.zh_TW.tr @@ -0,0 +1,6 @@ +# textdomain: carts +Cart=礦車 +(Sneak+Click to pick up)=(潛行+單擊以撿起) +Rail=鐵軌 +Powered Rail=動力鐵軌 +Brake Rail=制動鐵軌 diff --git a/mods/carts/mod.conf b/mods/carts/mod.conf index 20357e3..0eab35c 100644 --- a/mods/carts/mod.conf +++ b/mods/carts/mod.conf @@ -1,3 +1,4 @@ name = carts description = Carts (formerly boost_cart) depends = default, player_api +optional_depends = dungeon_loot diff --git a/mods/creative/inventory.lua b/mods/creative/inventory.lua index 27dee78..2e93e5f 100644 --- a/mods/creative/inventory.lua +++ b/mods/creative/inventory.lua @@ -25,7 +25,9 @@ function creative.init_creative_inventory(player) player_inventory[player_name] = { size = 0, filter = "", - start_i = 0 + start_i = 0, + old_filter = nil, -- use only for caching in update_creative_inventory + old_content = nil } minetest.create_detached_inventory("creative_" .. player_name, { @@ -59,22 +61,42 @@ function creative.init_creative_inventory(player) return player_inventory[player_name] end +local function match(s, filter) + if filter == "" then + return 0 + end + if s:lower():find(filter, 1, true) then + return #s - #filter + end + return nil +end + function creative.update_creative_inventory(player_name, tab_content) - local creative_list = {} local inv = player_inventory[player_name] or creative.init_creative_inventory(minetest.get_player_by_name(player_name)) local player_inv = minetest.get_inventory({type = "detached", name = "creative_" .. player_name}) + if inv.filter == inv.old_filter and tab_content == inv.old_content then + return + end + inv.old_filter = inv.filter + inv.old_content = tab_content + local items = inventory_cache[tab_content] or init_creative_cache(tab_content) + local creative_list = {} + local order = {} 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 + local m = match(def.description, inv.filter) or match(def.name, inv.filter) + if m then creative_list[#creative_list+1] = name + -- Sort by description length first so closer matches appear earlier + order[name] = string.format("%02d", m) .. name end end - table.sort(creative_list) + table.sort(creative_list, function(a, b) return order[a] < order[b] end) + player_inv:set_size("main", #creative_list) player_inv:set_list("main", creative_list) inv.size = #creative_list @@ -105,21 +127,20 @@ function creative.register_tab(name, title, items) local player_name = player:get_player_name() creative.update_creative_inventory(player_name, items) local inv = player_inventory[player_name] - local start_i = inv.start_i or 0 - local pagenum = math.floor(start_i / (3*8) + 1) - local pagemax = math.ceil(inv.size / (3*8)) + local pagenum = math.floor(inv.start_i / (4*8) + 1) + local pagemax = math.ceil(inv.size / (4*8)) local esc = minetest.formspec_escape return sfinv.make_formspec(player, context, - "label[6.2,3.35;" .. minetest.colorize("#FFFF00", tostring(pagenum)) .. " / " .. tostring(pagemax) .. "]" .. + "label[5.8,4.15;" .. minetest.colorize("#FFFF00", tostring(pagenum)) .. " / " .. tostring(pagemax) .. "]" .. [[ - image[4.06,3.4;0.8,0.8;creative_trash_icon.png] + image[4.08,4.2;0.8,0.8;creative_trash_icon.png] listcolors[#00000069;#5A5A5A;#141318;#30434C;#FFF] - list[detached:creative_trash;main;4,3.3;1,1;] + list[detached:creative_trash;main;4.02,4.1;1,1;] listring[] - image_button[5.4,3.25;0.8,0.8;creative_prev_icon.png;creative_prev;] - image_button[7.2,3.25;0.8,0.8;creative_next_icon.png;creative_next;] - image_button[2.1,3.25;0.8,0.8;creative_search_icon.png;creative_search;] - image_button[2.75,3.25;0.8,0.8;creative_clear_icon.png;creative_clear;] + image_button[5,4.05;0.8,0.8;creative_prev_icon.png;creative_prev;] + image_button[7.2,4.05;0.8,0.8;creative_next_icon.png;creative_next;] + image_button[2.63,4.05;0.8,0.8;creative_search_icon.png;creative_search;] + image_button[3.25,4.05;0.8,0.8;creative_clear_icon.png;creative_clear;] ]] .. "tooltip[creative_search;" .. esc(S("Search")) .. "]" .. "tooltip[creative_clear;" .. esc(S("Reset")) .. "]" .. @@ -127,9 +148,9 @@ function creative.register_tab(name, title, items) "tooltip[creative_next;" .. esc(S("Next page")) .. "]" .. "listring[current_player;main]" .. "field_close_on_enter[creative_filter;false]" .. - "field[0.3,3.5;2.2,1;creative_filter;;" .. esc(inv.filter) .. "]" .. + "field[0.3,4.2;2.8,1.2;creative_filter;;" .. esc(inv.filter) .. "]" .. "listring[detached:creative_" .. player_name .. ";main]" .. - "list[detached:creative_" .. player_name .. ";main;0,0;8,3;" .. tostring(start_i) .. "]" .. + "list[detached:creative_" .. player_name .. ";main;0,0;8,4;" .. tostring(inv.start_i) .. "]" .. creative.formspec_add, true) end, on_enter = function(self, player, context) @@ -147,27 +168,25 @@ function creative.register_tab(name, title, items) if fields.creative_clear then inv.start_i = 0 inv.filter = "" - creative.update_creative_inventory(player_name, items) sfinv.set_player_inventory_formspec(player, context) elseif fields.creative_search or fields.key_enter_field == "creative_filter" then inv.start_i = 0 inv.filter = fields.creative_filter:lower() - creative.update_creative_inventory(player_name, items) sfinv.set_player_inventory_formspec(player, context) elseif not fields.quit then local start_i = inv.start_i or 0 if fields.creative_prev then - start_i = start_i - 3*8 + start_i = start_i - 4*8 if start_i < 0 then - start_i = inv.size - (inv.size % (3*8)) + start_i = inv.size - (inv.size % (4*8)) if inv.size == start_i then - start_i = math.max(0, inv.size - (3*8)) + start_i = math.max(0, inv.size - (4*8)) end end elseif fields.creative_next then - start_i = start_i + 3*8 + start_i = start_i + 4*8 if start_i >= inv.size then start_i = 0 end diff --git a/mods/creative/locale/creative.ms.tr b/mods/creative/locale/creative.ms.tr new file mode 100644 index 0000000..a2aef80 --- /dev/null +++ b/mods/creative/locale/creative.ms.tr @@ -0,0 +1,10 @@ +# textdomain: creative +Allow player to use creative inventory=Benarkan pemain menggunakan inventori kreatif +Search=Cari +Reset=Set semula +Previous page=Halaman sebelumnya +Next page=Halaman seterusnya +All=Semua +Nodes=Nod +Tools=Alatan +Items=Item diff --git a/mods/creative/locale/creative.ru.tr b/mods/creative/locale/creative.ru.tr new file mode 100644 index 0000000..f649dbc --- /dev/null +++ b/mods/creative/locale/creative.ru.tr @@ -0,0 +1,10 @@ +# textdomain: creative +Allow player to use creative inventory=Разрешить игроку использовать творческий инвентарь +Search=Поиск +Reset=Сброс +Previous page=Предыдущая страница +Next page=Следующая страница +All=Всё +Nodes=Ноды +Tools=Инструменты +Items=Предметы diff --git a/mods/creative/locale/creative.se.tr b/mods/creative/locale/creative.se.tr new file mode 100644 index 0000000..e78bc2c --- /dev/null +++ b/mods/creative/locale/creative.se.tr @@ -0,0 +1,10 @@ +# textdomain: creative +Allow player to use creative inventory=Tilllåt spelare att används kreativa saker +Search=Sök +Reset=Återställ +Previous page=Förra sidan +Next page=Nästa sidan +All=Alla +Nodes=Noder +Tools=Verktyg +Items=Saker \ No newline at end of file diff --git a/mods/creative/locale/creative.zh_CN.tr b/mods/creative/locale/creative.zh_CN.tr new file mode 100644 index 0000000..1ca424e --- /dev/null +++ b/mods/creative/locale/creative.zh_CN.tr @@ -0,0 +1,10 @@ +# textdomain: creative +Allow player to use creative inventory=允许玩家使用创造模式物品栏 +Search=搜索 +Reset=重置 +Previous page=上一页 +Next page=下一页 +All=所有 +Nodes=节点 +Tools=工具 +Items=物品 diff --git a/mods/creative/locale/creative.zh_TW.tr b/mods/creative/locale/creative.zh_TW.tr new file mode 100644 index 0000000..c5746d4 --- /dev/null +++ b/mods/creative/locale/creative.zh_TW.tr @@ -0,0 +1,10 @@ +# textdomain: creative +Allow player to use creative inventory=允許玩家使用創造模式物品欄 +Search=搜索 +Reset=重置 +Previous page=上一頁 +Next page=下一頁 +All=所有 +Nodes=節點 +Tools=工具 +Items=物品 diff --git a/mods/default/README.txt b/mods/default/README.txt index 1bc899b..5f89f74 100644 --- a/mods/default/README.txt +++ b/mods/default/README.txt @@ -123,6 +123,8 @@ paramat (CC BY-SA 3.0): default_fence_rail_junglewood default_fence_rail_pine_wood default_fence_rail_wood -- Derived from a texture by BlockMen (CC BY-SA 3.0) + gui_hotbar.png + gui_hotbar_selected.png TumeniNodes (CC BY-SA 3.0): default_desert_cobble.png -- Derived from a texture by brunob.santos (CC BY-SA 3.0) @@ -150,7 +152,10 @@ BlockMen (CC BY-SA 3.0): default_mineral_mese.png default_meselamp.png bubble.png - gui_*.png + gui_formbg.png + gui_furnace_arrow_bg.png + gui_furnace_arrow_fg.png + gui_hb_bg.png sofar (CC BY-SA 3.0): default_aspen_sapling @@ -330,6 +335,10 @@ http://freesound.org/people/Ryding/sounds/94337/ Ferk (CC0 1.0): default_item_smoke.ogg, based on a sound by http://opengameart.org/users/bart +sonictechtonic (CC BY 3.0): +https://www.freesound.org/people/sonictechtonic/sounds/241872/ + player_damage.ogg + Models ------ diff --git a/mods/default/chests.lua b/mods/default/chests.lua index 8dbf9d8..3fe9c1a 100644 --- a/mods/default/chests.lua +++ b/mods/default/chests.lua @@ -46,7 +46,8 @@ function default.chest.chest_lid_close(pn) 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}) + minetest.sound_play(sound, {gain = 0.3, pos = pos, + max_hear_distance = 10}, true) end default.chest.open_chests = {} @@ -128,7 +129,7 @@ function default.chest.register_chest(name, d) end minetest.sound_play(def.sound_open, {gain = 0.3, - pos = pos, max_hear_distance = 10}) + pos = pos, max_hear_distance = 10}, true) if not default.chest.chest_lid_obstructed(pos) then minetest.swap_node(pos, { name = "default:" .. name .. "_open", @@ -199,7 +200,7 @@ function default.chest.register_chest(name, d) end def.on_rightclick = function(pos, node, clicker) minetest.sound_play(def.sound_open, {gain = 0.3, pos = pos, - max_hear_distance = 10}) + max_hear_distance = 10}, true) if not default.chest.chest_lid_obstructed(pos) then minetest.swap_node(pos, { name = "default:" .. name .. "_open", @@ -318,3 +319,39 @@ default.chest.register_chest("chest_locked", { groups = {choppy = 2, oddly_breakable_by_hand = 2}, protected = true, }) + +minetest.register_craft({ + output = "default:chest", + recipe = { + {"group:wood", "group:wood", "group:wood"}, + {"group:wood", "", "group:wood"}, + {"group:wood", "group:wood", "group:wood"}, + } +}) + +minetest.register_craft({ + output = "default:chest_locked", + recipe = { + {"group:wood", "group:wood", "group:wood"}, + {"group:wood", "default:steel_ingot", "group:wood"}, + {"group:wood", "group:wood", "group:wood"}, + } +}) + +minetest.register_craft( { + type = "shapeless", + output = "default:chest_locked", + recipe = {"default:chest", "default:steel_ingot"}, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:chest", + burntime = 30, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:chest_locked", + burntime = 30, +}) diff --git a/mods/default/crafting.lua b/mods/default/crafting.lua index 9481133..bc436fc 100644 --- a/mods/default/crafting.lua +++ b/mods/default/crafting.lua @@ -56,13 +56,6 @@ minetest.register_craft({ } }) -minetest.register_craft({ - output = "default:stick 4", - recipe = { - {"group:wood"}, - } -}) - minetest.register_craft({ output = "default:sign_wall_steel 3", recipe = { @@ -81,273 +74,6 @@ minetest.register_craft({ } }) -minetest.register_craft({ - output = "default:torch 4", - recipe = { - {"default:coal_lump"}, - {"group:stick"}, - } -}) - -minetest.register_craft({ - output = "default:pick_wood", - recipe = { - {"group:wood", "group:wood", "group:wood"}, - {"", "group:stick", ""}, - {"", "group:stick", ""}, - } -}) - -minetest.register_craft({ - output = "default:pick_stone", - recipe = { - {"group:stone", "group:stone", "group:stone"}, - {"", "group:stick", ""}, - {"", "group:stick", ""}, - } -}) - -minetest.register_craft({ - output = "default:pick_steel", - recipe = { - {"default:steel_ingot", "default:steel_ingot", "default:steel_ingot"}, - {"", "group:stick", ""}, - {"", "group:stick", ""}, - } -}) - -minetest.register_craft({ - output = "default:pick_bronze", - recipe = { - {"default:bronze_ingot", "default:bronze_ingot", "default:bronze_ingot"}, - {"", "group:stick", ""}, - {"", "group:stick", ""}, - } -}) - -minetest.register_craft({ - output = "default:pick_mese", - recipe = { - {"default:mese_crystal", "default:mese_crystal", "default:mese_crystal"}, - {"", "group:stick", ""}, - {"", "group:stick", ""}, - } -}) - -minetest.register_craft({ - output = "default:pick_diamond", - recipe = { - {"default:diamond", "default:diamond", "default:diamond"}, - {"", "group:stick", ""}, - {"", "group:stick", ""}, - } -}) - -minetest.register_craft({ - output = "default:shovel_wood", - recipe = { - {"group:wood"}, - {"group:stick"}, - {"group:stick"}, - } -}) - -minetest.register_craft({ - output = "default:shovel_stone", - recipe = { - {"group:stone"}, - {"group:stick"}, - {"group:stick"}, - } -}) - -minetest.register_craft({ - output = "default:shovel_steel", - recipe = { - {"default:steel_ingot"}, - {"group:stick"}, - {"group:stick"}, - } -}) - -minetest.register_craft({ - output = "default:shovel_bronze", - recipe = { - {"default:bronze_ingot"}, - {"group:stick"}, - {"group:stick"}, - } -}) - -minetest.register_craft({ - output = "default:shovel_mese", - recipe = { - {"default:mese_crystal"}, - {"group:stick"}, - {"group:stick"}, - } -}) - -minetest.register_craft({ - output = "default:shovel_diamond", - recipe = { - {"default:diamond"}, - {"group:stick"}, - {"group:stick"}, - } -}) - --- Axes --- Recipes face left to match appearence in textures and inventory - -minetest.register_craft({ - output = "default:axe_wood", - recipe = { - {"group:wood", "group:wood"}, - {"group:wood", "group:stick"}, - {"", "group:stick"}, - } -}) - -minetest.register_craft({ - output = "default:axe_stone", - recipe = { - {"group:stone", "group:stone"}, - {"group:stone", "group:stick"}, - {"", "group:stick"}, - } -}) - -minetest.register_craft({ - output = "default:axe_steel", - recipe = { - {"default:steel_ingot", "default:steel_ingot"}, - {"default:steel_ingot", "group:stick"}, - {"", "group:stick"}, - } -}) - -minetest.register_craft({ - output = "default:axe_bronze", - recipe = { - {"default:bronze_ingot", "default:bronze_ingot"}, - {"default:bronze_ingot", "group:stick"}, - {"", "group:stick"}, - } -}) - -minetest.register_craft({ - output = "default:axe_mese", - recipe = { - {"default:mese_crystal", "default:mese_crystal"}, - {"default:mese_crystal", "group:stick"}, - {"", "group:stick"}, - } -}) - -minetest.register_craft({ - output = "default:axe_diamond", - recipe = { - {"default:diamond", "default:diamond"}, - {"default:diamond", "group:stick"}, - {"", "group:stick"}, - } -}) - -minetest.register_craft({ - output = "default:sword_wood", - recipe = { - {"group:wood"}, - {"group:wood"}, - {"group:stick"}, - } -}) - -minetest.register_craft({ - output = "default:sword_stone", - recipe = { - {"group:stone"}, - {"group:stone"}, - {"group:stick"}, - } -}) - -minetest.register_craft({ - output = "default:sword_steel", - recipe = { - {"default:steel_ingot"}, - {"default:steel_ingot"}, - {"group:stick"}, - } -}) - -minetest.register_craft({ - output = "default:sword_bronze", - recipe = { - {"default:bronze_ingot"}, - {"default:bronze_ingot"}, - {"group:stick"}, - } -}) - -minetest.register_craft({ - output = "default:sword_mese", - recipe = { - {"default:mese_crystal"}, - {"default:mese_crystal"}, - {"group:stick"}, - } -}) - -minetest.register_craft({ - output = "default:sword_diamond", - recipe = { - {"default:diamond"}, - {"default:diamond"}, - {"group:stick"}, - } -}) - -minetest.register_craft({ - output = "default:skeleton_key", - recipe = { - {"default:gold_ingot"}, - } -}) - -minetest.register_craft({ - output = "default:chest", - recipe = { - {"group:wood", "group:wood", "group:wood"}, - {"group:wood", "", "group:wood"}, - {"group:wood", "group:wood", "group:wood"}, - } -}) - -minetest.register_craft({ - output = "default:chest_locked", - recipe = { - {"group:wood", "group:wood", "group:wood"}, - {"group:wood", "default:steel_ingot", "group:wood"}, - {"group:wood", "group:wood", "group:wood"}, - } -}) - -minetest.register_craft( { - type = "shapeless", - output = "default:chest_locked", - recipe = {"default:chest", "default:steel_ingot"}, -}) - -minetest.register_craft({ - output = "default:furnace", - recipe = { - {"group:stone", "group:stone", "group:stone"}, - {"group:stone", "", "group:stone"}, - {"group:stone", "group:stone", "group:stone"}, - } -}) - minetest.register_craft({ output = "default:coalblock", recipe = { @@ -357,13 +83,6 @@ minetest.register_craft({ } }) -minetest.register_craft({ - output = "default:coal_lump 9", - recipe = { - {"default:coalblock"}, - } -}) - minetest.register_craft({ output = "default:steelblock", recipe = { @@ -373,13 +92,6 @@ minetest.register_craft({ } }) -minetest.register_craft({ - output = "default:steel_ingot 9", - recipe = { - {"default:steelblock"}, - } -}) - minetest.register_craft({ output = "default:copperblock", recipe = { @@ -389,13 +101,6 @@ minetest.register_craft({ } }) -minetest.register_craft({ - output = "default:copper_ingot 9", - recipe = { - {"default:copperblock"}, - } -}) - minetest.register_craft({ output = "default:tinblock", recipe = { @@ -405,22 +110,6 @@ minetest.register_craft({ } }) -minetest.register_craft({ - output = "default:tin_ingot 9", - recipe = { - {"default:tinblock"}, - } -}) - -minetest.register_craft({ - output = "default:bronze_ingot 9", - recipe = { - {"default:copper_ingot", "default:copper_ingot", "default:copper_ingot"}, - {"default:copper_ingot", "default:tin_ingot", "default:copper_ingot"}, - {"default:copper_ingot", "default:copper_ingot", "default:copper_ingot"}, - } -}) - minetest.register_craft({ output = "default:bronzeblock", recipe = { @@ -446,13 +135,6 @@ minetest.register_craft({ } }) -minetest.register_craft({ - output = "default:gold_ingot 9", - recipe = { - {"default:goldblock"}, - } -}) - minetest.register_craft({ output = "default:diamondblock", recipe = { @@ -462,13 +144,6 @@ minetest.register_craft({ } }) -minetest.register_craft({ - output = "default:diamond 9", - recipe = { - {"default:diamondblock"}, - } -}) - minetest.register_craft({ output = "default:sandstone", recipe = { @@ -573,13 +248,6 @@ minetest.register_craft({ } }) -minetest.register_craft({ - output = "default:clay_lump 4", - recipe = { - {"default:clay"}, - } -}) - minetest.register_craft({ output = "default:brick", recipe = { @@ -588,29 +256,6 @@ minetest.register_craft({ } }) -minetest.register_craft({ - output = "default:clay_brick 4", - recipe = { - {"default:brick"}, - } -}) - -minetest.register_craft({ - output = "default:paper", - recipe = { - {"default:papyrus", "default:papyrus", "default:papyrus"}, - } -}) - -minetest.register_craft({ - output = "default:book", - recipe = { - {"default:paper"}, - {"default:paper"}, - {"default:paper"}, - } -}) - minetest.register_craft({ output = "default:bookshelf", recipe = { @@ -647,29 +292,6 @@ minetest.register_craft({ } }) -minetest.register_craft({ - output = "default:mese_crystal 9", - recipe = { - {"default:mese"}, - } -}) - -minetest.register_craft({ - output = "default:mese_crystal_fragment 9", - recipe = { - {"default:mese_crystal"}, - } -}) - -minetest.register_craft({ - output = "default:mese_crystal", - recipe = { - {"default:mese_crystal_fragment", "default:mese_crystal_fragment", "default:mese_crystal_fragment"}, - {"default:mese_crystal_fragment", "default:mese_crystal_fragment", "default:mese_crystal_fragment"}, - {"default:mese_crystal_fragment", "default:mese_crystal_fragment", "default:mese_crystal_fragment"}, - } -}) - minetest.register_craft({ output = "default:meselamp", recipe = { @@ -687,13 +309,6 @@ minetest.register_craft({ } }) -minetest.register_craft({ - output = "default:obsidian_shard 9", - recipe = { - {"default:obsidian"} - } -}) - minetest.register_craft({ output = "default:obsidian", recipe = { @@ -833,50 +448,6 @@ minetest.register_craft({ recipe = "default:desert_cobble", }) -minetest.register_craft({ - type = "cooking", - output = "default:steel_ingot", - recipe = "default:iron_lump", -}) - -minetest.register_craft({ - type = "cooking", - output = "default:copper_ingot", - recipe = "default:copper_lump", -}) - -minetest.register_craft({ - type = "cooking", - output = "default:tin_ingot", - recipe = "default:tin_lump", -}) - -minetest.register_craft({ - type = "cooking", - output = "default:gold_ingot", - recipe = "default:gold_lump", -}) - -minetest.register_craft({ - type = "cooking", - output = "default:clay_brick", - recipe = "default:clay_lump", -}) - -minetest.register_craft({ - type = "cooking", - output = "default:gold_ingot", - recipe = "default:skeleton_key", - cooktime = 5, -}) - -minetest.register_craft({ - type = "cooking", - output = "default:gold_ingot", - recipe = "default:key", - cooktime = 5, -}) - -- -- Fuels @@ -1005,7 +576,6 @@ minetest.register_craft({ burntime = 7, }) - minetest.register_craft({ type = "fuel", recipe = "default:fence_aspen_wood", @@ -1067,7 +637,6 @@ minetest.register_craft({ burntime = 7, }) - minetest.register_craft({ type = "fuel", recipe = "default:bush_stem", @@ -1134,36 +703,12 @@ minetest.register_craft({ burntime = 60, }) -minetest.register_craft({ - type = "fuel", - recipe = "default:torch", - burntime = 4, -}) - minetest.register_craft({ type = "fuel", recipe = "default:sign_wall_wood", burntime = 10, }) -minetest.register_craft({ - type = "fuel", - recipe = "default:chest", - burntime = 30, -}) - -minetest.register_craft({ - type = "fuel", - recipe = "default:chest_locked", - burntime = 30, -}) - -minetest.register_craft({ - type = "fuel", - recipe = "default:coal_lump", - burntime = 40, -}) - minetest.register_craft({ type = "fuel", recipe = "default:coalblock", @@ -1194,57 +739,8 @@ minetest.register_craft({ burntime = 2, }) -minetest.register_craft({ - type = "fuel", - recipe = "default:paper", - burntime = 1, -}) - -minetest.register_craft({ - type = "fuel", - recipe = "default:book", - burntime = 3, -}) - -minetest.register_craft({ - type = "fuel", - recipe = "default:book_written", - burntime = 3, -}) - minetest.register_craft({ type = "fuel", recipe = "default:dry_shrub", burntime = 2, }) - -minetest.register_craft({ - type = "fuel", - recipe = "group:stick", - burntime = 1, -}) - - -minetest.register_craft({ - type = "fuel", - recipe = "default:pick_wood", - burntime = 6, -}) - -minetest.register_craft({ - type = "fuel", - recipe = "default:shovel_wood", - burntime = 4, -}) - -minetest.register_craft({ - type = "fuel", - recipe = "default:axe_wood", - burntime = 6, -}) - -minetest.register_craft({ - type = "fuel", - recipe = "default:sword_wood", - burntime = 5, -}) diff --git a/mods/default/craftitems.lua b/mods/default/craftitems.lua index e2e92bf..923d754 100644 --- a/mods/default/craftitems.lua +++ b/mods/default/craftitems.lua @@ -3,19 +3,6 @@ -- support for MT game translation. local S = default.get_translator -minetest.register_craftitem("default:stick", { - description = S("Stick"), - inventory_image = "default_stick.png", - groups = {stick = 1, flammable = 2}, -}) - -minetest.register_craftitem("default:paper", { - description = S("Paper"), - inventory_image = "default_paper.png", - groups = {flammable = 3}, -}) - - local lpp = 14 -- Lines per book's page local function book_on_use(itemstack, user) local player_name = user:get_player_name() @@ -158,54 +145,9 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) player:set_wielded_item(stack) end) -minetest.register_craftitem("default:book", { - description = S("Book"), - inventory_image = "default_book.png", - groups = {book = 1, flammable = 3}, - on_use = book_on_use, -}) - -minetest.register_craftitem("default:book_written", { - description = S("Book with Text"), - inventory_image = "default_book_written.png", - groups = {book = 1, not_in_creative_inventory = 1, flammable = 3}, - stack_max = 1, - on_use = book_on_use, -}) - -minetest.register_craft({ - type = "shapeless", - output = "default:book_written", - recipe = {"default:book", "default:book_written"} -}) - -minetest.register_on_craft(function(itemstack, player, old_craft_grid, craft_inv) - if itemstack:get_name() ~= "default:book_written" then - return - end - - local original - local index - for i = 1, player:get_inventory():get_size("craft") do - if old_craft_grid[i]:get_name() == "default:book_written" then - original = old_craft_grid[i] - index = i - end - end - if not original then - return - end - local copymeta = original:get_meta():to_table() - -- copy of the book held by player's mouse cursor - itemstack:get_meta():from_table(copymeta) - -- put the book with metadata back in the craft grid - craft_inv:set_stack("craft", index, original) -end) - minetest.register_craftitem("default:skeleton_key", { description = S("Skeleton Key"), inventory_image = "default_key_skeleton.png", - groups = {key = 1}, on_use = function(itemstack, user, pointed_thing) if pointed_thing.type ~= "node" then return itemstack @@ -258,91 +200,9 @@ minetest.register_craftitem("default:skeleton_key", { end }) -minetest.register_craftitem("default:coal_lump", { - description = S("Coal Lump"), - inventory_image = "default_coal_lump.png", - groups = {coal = 1, flammable = 1} -}) - -minetest.register_craftitem("default:iron_lump", { - description = S("Iron Lump"), - inventory_image = "default_iron_lump.png" -}) - -minetest.register_craftitem("default:copper_lump", { - description = S("Copper Lump"), - inventory_image = "default_copper_lump.png" -}) - -minetest.register_craftitem("default:tin_lump", { - description = S("Tin Lump"), - inventory_image = "default_tin_lump.png" -}) - -minetest.register_craftitem("default:mese_crystal", { - description = S("Mese Crystal"), - inventory_image = "default_mese_crystal.png", -}) - -minetest.register_craftitem("default:gold_lump", { - description = S("Gold Lump"), - inventory_image = "default_gold_lump.png" -}) - -minetest.register_craftitem("default:diamond", { - description = S("Diamond"), - inventory_image = "default_diamond.png", -}) - -minetest.register_craftitem("default:clay_lump", { - description = S("Clay Lump"), - inventory_image = "default_clay_lump.png", -}) - -minetest.register_craftitem("default:steel_ingot", { - description = S("Steel Ingot"), - inventory_image = "default_steel_ingot.png" -}) - -minetest.register_craftitem("default:copper_ingot", { - description = S("Copper Ingot"), - inventory_image = "default_copper_ingot.png" -}) - -minetest.register_craftitem("default:tin_ingot", { - description = S("Tin Ingot"), - inventory_image = "default_tin_ingot.png" -}) - -minetest.register_craftitem("default:bronze_ingot", { - description = S("Bronze Ingot"), - inventory_image = "default_bronze_ingot.png" -}) - -minetest.register_craftitem("default:gold_ingot", { - description = S("Gold Ingot"), - inventory_image = "default_gold_ingot.png" -}) - -minetest.register_craftitem("default:mese_crystal_fragment", { - description = S("Mese Crystal Fragment"), - inventory_image = "default_mese_crystal_fragment.png", -}) - -minetest.register_craftitem("default:clay_brick", { - description = S("Clay Brick"), - inventory_image = "default_clay_brick.png", -}) - -minetest.register_craftitem("default:obsidian_shard", { - description = S("Obsidian Shard"), - inventory_image = "default_obsidian_shard.png", -}) - -minetest.register_craftitem("default:flint", { - description = S("Flint"), - inventory_image = "default_flint.png" -}) +-- +-- Craftitem registry +-- minetest.register_craftitem("default:blueberries", { description = S("Blueberries"), @@ -350,3 +210,329 @@ minetest.register_craftitem("default:blueberries", { groups = {food_blueberries = 1, food_berry = 1}, on_use = minetest.item_eat(2), }) + +minetest.register_craftitem("default:book", { + description = S("Book"), + inventory_image = "default_book.png", + groups = {book = 1, flammable = 3}, + on_use = book_on_use, +}) + +minetest.register_craftitem("default:book_written", { + description = S("Book with Text"), + inventory_image = "default_book_written.png", + groups = {book = 1, not_in_creative_inventory = 1, flammable = 3}, + stack_max = 1, + on_use = book_on_use, +}) + +minetest.register_craftitem("default:bronze_ingot", { + description = S("Bronze Ingot"), + inventory_image = "default_bronze_ingot.png" +}) + +minetest.register_craftitem("default:clay_brick", { + description = S("Clay Brick"), + inventory_image = "default_clay_brick.png", +}) + +minetest.register_craftitem("default:clay_lump", { + description = S("Clay Lump"), + inventory_image = "default_clay_lump.png", +}) + +minetest.register_craftitem("default:coal_lump", { + description = S("Coal Lump"), + inventory_image = "default_coal_lump.png", + groups = {coal = 1, flammable = 1} +}) + +minetest.register_craftitem("default:copper_ingot", { + description = S("Copper Ingot"), + inventory_image = "default_copper_ingot.png" +}) + +minetest.register_craftitem("default:copper_lump", { + description = S("Copper Lump"), + inventory_image = "default_copper_lump.png" +}) + +minetest.register_craftitem("default:diamond", { + description = S("Diamond"), + inventory_image = "default_diamond.png", +}) + +minetest.register_craftitem("default:flint", { + description = S("Flint"), + inventory_image = "default_flint.png" +}) + +minetest.register_craftitem("default:gold_ingot", { + description = S("Gold Ingot"), + inventory_image = "default_gold_ingot.png" +}) + +minetest.register_craftitem("default:gold_lump", { + description = S("Gold Lump"), + inventory_image = "default_gold_lump.png" +}) + +minetest.register_craftitem("default:iron_lump", { + description = S("Iron Lump"), + inventory_image = "default_iron_lump.png" +}) + +minetest.register_craftitem("default:mese_crystal", { + description = S("Mese Crystal"), + inventory_image = "default_mese_crystal.png", +}) + +minetest.register_craftitem("default:mese_crystal_fragment", { + description = S("Mese Crystal Fragment"), + inventory_image = "default_mese_crystal_fragment.png", +}) + +minetest.register_craftitem("default:obsidian_shard", { + description = S("Obsidian Shard"), + inventory_image = "default_obsidian_shard.png", +}) + +minetest.register_craftitem("default:paper", { + description = S("Paper"), + inventory_image = "default_paper.png", + groups = {flammable = 3}, +}) + +minetest.register_craftitem("default:steel_ingot", { + description = S("Steel Ingot"), + inventory_image = "default_steel_ingot.png" +}) + +minetest.register_craftitem("default:stick", { + description = S("Stick"), + inventory_image = "default_stick.png", + groups = {stick = 1, flammable = 2}, +}) + +minetest.register_craftitem("default:tin_ingot", { + description = S("Tin Ingot"), + inventory_image = "default_tin_ingot.png" +}) + +minetest.register_craftitem("default:tin_lump", { + description = S("Tin Lump"), + inventory_image = "default_tin_lump.png" +}) + +-- +-- Crafting recipes +-- + +minetest.register_craft({ + output = "default:book", + recipe = { + {"default:paper"}, + {"default:paper"}, + {"default:paper"}, + } +}) + +default.register_craft_metadata_copy("default:book", "default:book_written") + +minetest.register_craft({ + output = "default:bronze_ingot 9", + recipe = { + {"default:copper_ingot", "default:copper_ingot", "default:copper_ingot"}, + {"default:copper_ingot", "default:tin_ingot", "default:copper_ingot"}, + {"default:copper_ingot", "default:copper_ingot", "default:copper_ingot"}, + } +}) + +minetest.register_craft({ + output = "default:clay_brick 4", + recipe = { + {"default:brick"}, + } +}) + +minetest.register_craft({ + output = "default:clay_lump 4", + recipe = { + {"default:clay"}, + } +}) + +minetest.register_craft({ + output = "default:coal_lump 9", + recipe = { + {"default:coalblock"}, + } +}) + +minetest.register_craft({ + output = "default:copper_ingot 9", + recipe = { + {"default:copperblock"}, + } +}) + +minetest.register_craft({ + output = "default:diamond 9", + recipe = { + {"default:diamondblock"}, + } +}) + +minetest.register_craft({ + output = "default:gold_ingot 9", + recipe = { + {"default:goldblock"}, + } +}) + +minetest.register_craft({ + output = "default:mese_crystal", + recipe = { + {"default:mese_crystal_fragment", "default:mese_crystal_fragment", "default:mese_crystal_fragment"}, + {"default:mese_crystal_fragment", "default:mese_crystal_fragment", "default:mese_crystal_fragment"}, + {"default:mese_crystal_fragment", "default:mese_crystal_fragment", "default:mese_crystal_fragment"}, + } +}) + +minetest.register_craft({ + output = "default:mese_crystal 9", + recipe = { + {"default:mese"}, + } +}) + +minetest.register_craft({ + output = "default:mese_crystal_fragment 9", + recipe = { + {"default:mese_crystal"}, + } +}) + +minetest.register_craft({ + output = "default:obsidian_shard 9", + recipe = { + {"default:obsidian"} + } +}) + +minetest.register_craft({ + output = "default:paper", + recipe = { + {"default:papyrus", "default:papyrus", "default:papyrus"}, + } +}) + +minetest.register_craft({ + output = "default:skeleton_key", + recipe = { + {"default:gold_ingot"}, + } +}) + +minetest.register_craft({ + output = "default:steel_ingot 9", + recipe = { + {"default:steelblock"}, + } +}) + +minetest.register_craft({ + output = "default:stick 4", + recipe = { + {"group:wood"}, + } +}) + +minetest.register_craft({ + output = "default:tin_ingot 9", + recipe = { + {"default:tinblock"}, + } +}) + +-- +-- Cooking recipes +-- + +minetest.register_craft({ + type = "cooking", + output = "default:clay_brick", + recipe = "default:clay_lump", +}) + +minetest.register_craft({ + type = "cooking", + output = "default:copper_ingot", + recipe = "default:copper_lump", +}) + +minetest.register_craft({ + type = "cooking", + output = "default:gold_ingot", + recipe = "default:gold_lump", +}) + +minetest.register_craft({ + type = "cooking", + output = "default:gold_ingot", + recipe = "default:key", + cooktime = 5, +}) + +minetest.register_craft({ + type = "cooking", + output = "default:gold_ingot", + recipe = "default:skeleton_key", + cooktime = 5, +}) + +minetest.register_craft({ + type = "cooking", + output = "default:steel_ingot", + recipe = "default:iron_lump", +}) + +minetest.register_craft({ + type = "cooking", + output = "default:tin_ingot", + recipe = "default:tin_lump", +}) + +-- +-- Fuels +-- + +minetest.register_craft({ + type = "fuel", + recipe = "default:book", + burntime = 3, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:book_written", + burntime = 3, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:coal_lump", + burntime = 40, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:paper", + burntime = 1, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "group:stick", + burntime = 1, +}) diff --git a/mods/default/functions.lua b/mods/default/functions.lua index 91f8bb3..f67eadf 100644 --- a/mods/default/functions.lua +++ b/mods/default/functions.lua @@ -141,7 +141,7 @@ default.cool_lava = function(pos, node) minetest.set_node(pos, {name = "default:stone"}) end minetest.sound_play("default_cool_lava", - {pos = pos, max_hear_distance = 16, gain = 0.25}) + {pos = pos, max_hear_distance = 16, gain = 0.25}, true) end if minetest.settings:get_bool("enable_lavacooling") ~= false then @@ -581,6 +581,40 @@ minetest.register_abm({ end }) +-- +-- Register a craft to copy the metadata of items +-- + +function default.register_craft_metadata_copy(ingredient, result) + minetest.register_craft({ + type = "shapeless", + output = result, + recipe = {ingredient, result} + }) + + minetest.register_on_craft(function(itemstack, player, old_craft_grid, craft_inv) + if itemstack:get_name() ~= result then + return + end + + local original + local index + for i = 1, #old_craft_grid do + if old_craft_grid[i]:get_name() == result then + original = old_craft_grid[i] + index = i + end + end + if not original then + return + end + local copymeta = original:get_meta():to_table() + itemstack:get_meta():from_table(copymeta) + -- put the book with metadata back in the craft grid + craft_inv:set_stack("craft", index, original) + end) +end + -- -- NOTICE: This method is not an official part of the API yet. @@ -605,7 +639,7 @@ function default.can_interact_with_node(player, pos) -- Is player wielding the right key? local item = player:get_wielded_item() - if item:get_name() == "default:key" then + if minetest.get_item_group(item:get_name(), "key") == 1 then local key_meta = item:get_meta() if key_meta:get_string("secret") == "" then diff --git a/mods/default/furnace.lua b/mods/default/furnace.lua index d133a3a..3c4ac9c 100644 --- a/mods/default/furnace.lua +++ b/mods/default/furnace.lua @@ -352,3 +352,12 @@ minetest.register_node("default:furnace_active", { allow_metadata_inventory_move = allow_metadata_inventory_move, allow_metadata_inventory_take = allow_metadata_inventory_take, }) + +minetest.register_craft({ + output = "default:furnace", + recipe = { + {"group:stone", "group:stone", "group:stone"}, + {"group:stone", "", "group:stone"}, + {"group:stone", "group:stone", "group:stone"}, + } +}) diff --git a/mods/default/init.lua b/mods/default/init.lua index a487383..d4388e5 100644 --- a/mods/default/init.lua +++ b/mods/default/init.lua @@ -14,11 +14,22 @@ default.get_translator = S -- GUI related stuff minetest.register_on_joinplayer(function(player) - player:set_formspec_prepend([[ + -- Set formspec prepend + local formspec = [[ bgcolor[#080808BB;true] - background[5,5;1,1;gui_formbg.png;true] - background9[5,5;1,1;gui_formbg.png;true;10] - listcolors[#00000069;#5A5A5A;#141318;#30434C;#FFF] ]]) + listcolors[#00000069;#5A5A5A;#141318;#30434C;#FFF] ]] + local name = player:get_player_name() + local info = minetest.get_player_information(name) + if info.formspec_version > 1 then + formspec = formspec .. "background9[5,5;1,1;gui_formbg.png;true;10]" + else + formspec = formspec .. "background[5,5;1,1;gui_formbg.png;true]" + end + player:set_formspec_prepend(formspec) + + -- Set hotbar textures + player:hud_set_hotbar_image("gui_hotbar.png") + player:hud_set_hotbar_selected_image("gui_hotbar_selected.png") end) function default.get_hotbar_bg(x,y) diff --git a/mods/default/item_entity.lua b/mods/default/item_entity.lua index 2a61f08..8545436 100644 --- a/mods/default/item_entity.lua +++ b/mods/default/item_entity.lua @@ -20,7 +20,7 @@ local item = { minetest.sound_play("default_item_smoke", { pos = p, max_hear_distance = 8, - }) + }, true) minetest.add_particlespawner({ amount = 3, time = 0.1, diff --git a/mods/default/locale/default.ms.tr b/mods/default/locale/default.ms.tr new file mode 100644 index 0000000..b82c201 --- /dev/null +++ b/mods/default/locale/default.ms.tr @@ -0,0 +1,211 @@ +# textdomain: default +Locked Chest=Peti Berkunci +Locked Chest (owned by @1)=Peti Berkunci (milik @1) +You do not own this chest.=Ini bukan peti milik anda. +a locked chest=peti berkunci +Chest=Peti +Stick=Serpihan Kayu +Paper=Kertas +"@1" by @2="@1" oleh @2 +Book=Buku +Book with Text=Buku Bertulisan +Skeleton Key=Kunci Induk +Key to @1's @2=Kunci @2 milik @1 +Coal Lump=Longgokan Batu Arang +Iron Lump=Longgokan Besi +Copper Lump=Longgokan Tembaga +Tin Lump=Longgokan Timah +Mese Crystal=Kristal Mese +Gold Lump=Longgokan Emas +Diamond=Berlian +Clay Lump=Longgokan Tanah Liat +Steel Ingot=Jongkong Keluli +Copper Ingot=Jongkong Tembaga +Tin Ingot=Jongkong Timah +Bronze Ingot=Jongkong Gangsa +Gold Ingot=Jongkong Emas +Mese Crystal Fragment=Serpihan Mese +Clay Brick=Bata Tanah Liat +Obsidian Shard=Serpihan Obsidia +Flint=Batu Api +Blueberries=Beri Biru +Furnace is empty=Relau masih kosong +100% (output full)=100% (keluaran penuh) +@1%=@1% +Empty=Kosong +Not cookable=Tidak boleh dimasak +Furnace active=Relau aktif +Furnace inactive=Relau tidak aktif +(Item: @1; Fuel: @2)=(Item: @1; Bahan api: @2) +Furnace=Relau +Stone=Batu +Cobblestone=Batu Buntar +Stone Brick=Bata Batu +Stone Block=Bongkah Batu +Mossy Cobblestone=Batu Buntar Berlumut +Desert Stone=Batu Gurun +Desert Cobblestone=Batu Buntar Gurun +Desert Stone Brick=Bata Batu Gurun +Desert Stone Block=Bongkah Batu Gurun +Sandstone=Batu Pasir +Sandstone Brick=Bata Batu Pasir +Sandstone Block=Bongkah Batu Pasir +Desert Sandstone=Batu Pasir Gurun +Desert Sandstone Brick=Bata Batu Pasir Gurun +Desert Sandstone Block=Bongkah Batu Pasir Gurun +Silver Sandstone=Batu Pasir Perak +Silver Sandstone Brick=Bata Batu Pasir Perak +Silver Sandstone Block=Bongkah Batu Pasir Perak +Obsidian=Obsidia +Obsidian Brick=Bata Obsidia +Obsidian Block=Bongkah Obsidia +Dirt=Tanah +Dirt with Grass=Tanah Berumput +Dirt with Grass and Footsteps=Tanah Berumput dan Tapak Kaki +Dirt with Dry Grass=Tanah Berumput Kering +Dirt with Snow=Tanah Bersalji +Dirt with Rainforest Litter=Tanah Bersarap Hutan Hujan +Dirt with Coniferous Litter=Tanah Bersarap Hutan Konifer +Dry Dirt=Tanah Kering +Dry Dirt with Dry Grass=Tanah Kering Berumput Kering +Permafrost=Ibun Abadi +Permafrost with Stones=Ibun Abadi Berbatu +Permafrost with Moss=Ibun Abadi Berlumut +Sand=Pasir +Desert Sand=Pasir Gurun +Silver Sand=Pasir Perak +Gravel=Kelikir +Clay=Tanah Liat +Snow=Salji +Snow Block=Bongkah Salji +Ice=Ais +Cave Ice=Ais Gua +Apple Tree=Kayu Pokok Epal +Apple Wood Planks=Papan Kayu Epal +Apple Tree Sapling=Anak Pokok Epal +Apple Tree Leaves=Daun Pokok Epal +Apple=Epal +Apple Marker=Penanda Epal +Jungle Tree=Kayu Pokok Hutan +Jungle Wood Planks=Papan Kayu Hutan +Jungle Tree Leaves=Daun Pokok Hutan +Jungle Tree Sapling=Anak Pokok Hutan +Emergent Jungle Tree Sapling=Anak Pokok Hutan Kembang +Pine Tree=Kayu Pokok Pain +Pine Wood Planks=Papan Kayu Pain +Pine Needles=Daun Pokok Pain +Pine Tree Sapling=Anak Pokok Pain +Acacia Tree=Kayu Pokok Akasia +Acacia Wood Planks=Papan Kayu Akasia +Acacia Tree Leaves=Daun Pokok Akasia +Acacia Tree Sapling=Anak Pokok Akasia +Aspen Tree=Kayu Pokok Aspen +Aspen Wood Planks=Papan Kayu Aspen +Aspen Tree Leaves=Daun Pokok Aspen +Aspen Tree Sapling=Anak Pokok Aspen +Coal Ore=Bijih Batu Arang +Coal Block=Bongkah Batu Arang +Iron Ore=Bijih Besi +Steel Block=Bongkah Keluli +Copper Ore=Bijih Tembaga +Copper Block=Bongkah Tembaga +Tin Ore=Bijih Timah +Tin Block=Bongkah Timah +Bronze Block=Bongkah Gangsa +Mese Ore=Bijih Mese +Mese Block=Bongkah Mese +Gold Ore=Bijih Emas +Gold Block=Bongkah Emas +Diamond Ore=Bijih Intan +Diamond Block=Bongkah Intan +Cactus=Kaktus +Large Cactus Seedling=Benih Kaktus Besar +Papyrus=Papirus +Dry Shrub=Pokok Renek Kering +Jungle Grass=Rumput Hutan +Grass=Rumput +Dry Grass=Rumput Kering +Fern=Paku Pakis +Marram Grass=Rumput Maram +Bush Stem=Batang Belukar +Bush Leaves=Daun Belukar +Bush Sapling=Anak Belukar +Blueberry Bush Leaves with Berries=Daun Belukar Beri Biru Berberi +Blueberry Bush Leaves=Daun Belukar Beri Biru +Blueberry Bush Sapling=Anak Belukar Beri Biru +Acacia Bush Stem=Batang Belukar Akasia +Acacia Bush Leaves=Daun Belukar Akasia +Acacia Bush Sapling=Anak Belukar Akasia +Pine Bush Stem=Batang Belukar Pain +Pine Bush Needles=Daun Belukar Pain +Pine Bush Sapling=Anak Belukar Pain +Kelp=Kelpa +Green Coral=Batu Karang Hijau +Pink Coral=Batu Karang Merah Jambu +Cyan Coral=Batu Karang Biru Kehijauan +Brown Coral=Batu Karang Perang +Orange Coral=Batu Karang Jingga +Coral Skeleton= Rangka Karang +Water Source=Sumber Air +Flowing Water=Air Mengalir +River Water Source=Sumber Air Sungai +Flowing River Water=Air Sungai Mengalir +Lava Source=Sumber Lava +Flowing Lava=Lava Mengalir +Empty Bookshelf=Rak Buku Kosong +Bookshelf (@1 written, @2 empty books)=Rak Buku (@1 buku bertulis, @2 buku kosong) +Bookshelf=Rak Buku +Text too long=Tulisan terlalu panjang +Wooden Sign=Papan Tanda Kayu +Steel Sign=Papan Tanda Keluli +Wooden Ladder=Tangga Panjat Kayu +Steel Ladder=Tangga Panjat Keluli +Apple Wood Fence=Pagar Kayu Epal +Acacia Wood Fence=Pagar Kayu Akasia +Jungle Wood Fence=Pagar Kayu Hutan +Pine Wood Fence=Pagar Kayu Pain +Aspen Wood Fence=Pagar Kayu Aspen +Apple Wood Fence Rail=Pagar Rel Kayu Epal +Acacia Wood Fence Rail=Pagar Rel Kayu Akasia +Jungle Wood Fence Rail=Pagar Rel Kayu Hutan +Pine Wood Fence Rail=Pagar Rel Kayu Pain +Aspen Wood Fence Rail=Pagar Rel Kayu Aspen +Glass=Kaca +Obsidian Glass=Kaca Obsidia +Brick Block=Bongkah Bata +Mese Lamp=Lampu Mese +Mese Post Light=Lampu Tiang Mese +Cloud=Awan +Wooden Pickaxe=Beliung Kayu +Stone Pickaxe=Beliung Batu +Bronze Pickaxe=Beliung Gangsa +Steel Pickaxe=Beliung Keluli +Mese Pickaxe=Beliung Mese +Diamond Pickaxe=Beliung Intan +Wooden Shovel=Penyodok Kayu +Stone Shovel=Penyodok Batu +Bronze Shovel=Penyodok Gangsa +Steel Shovel=Penyodok Keluli +Mese Shovel=Penyodok Mese +Diamond Shovel=Penyodok Intan +Wooden Axe=Kapak Kayu +Stone Axe=Kapak Batu +Bronze Axe=Kapak Gangsa +Steel Axe=Kapak Keluli +Mese Axe=Kapak Mese +Diamond Axe=Kapak Intan +Wooden Sword=Pedang Kayu +Stone Sword=Pedang Batu +Bronze Sword=Pedang Gangsa +Steel Sword=Pedang Keluli +Mese Sword=Pedang Mese +Diamond Sword=Pedang Intan +Key=Kunci +Torch=Obor +@1 will intersect protection on growth.=@1 akan masuk kawasan perlindungan lain apabila ia tumbuh. +Title:=Tajuk: +Contents:=Kandungan: +Save=Simpan +by @1=oleh @1 +Page @1 of @2=Ms. @1 / @2 +"@1"="@1" diff --git a/mods/default/locale/default.ru.tr b/mods/default/locale/default.ru.tr new file mode 100644 index 0000000..214f669 --- /dev/null +++ b/mods/default/locale/default.ru.tr @@ -0,0 +1,211 @@ +# textdomain: default +Locked Chest=Заблокированный Сундук +Locked Chest (owned by @1)=Заблокированный Сундук (владелец: @1) +You do not own this chest.=Вы не владелец этого сундука. +a locked chest=заблокированный сундук +Chest=Сундук +Stick=Палка +Paper=Бумага +"@1" by @2="@1" @2 +Book=Книга +Book with Text=Книга с Текстом +Skeleton Key=Ключ Скелета +Key to @1's @2=Ключ к @2 от @1 +Coal Lump=Кусок Угля +Iron Lump=Кусок Железа +Copper Lump=Кусок Меди +Tin Lump=Кусок Олова +Mese Crystal=Кристалл Месе +Gold Lump=Кусок Золота +Diamond=Алмаз +Clay Lump=Ком Глины +Steel Ingot=Железный Брусок +Copper Ingot=Медный Брусок +Tin Ingot=Оловянный Брусок +Bronze Ingot=Бронзовый Брусок +Gold Ingot=Золотой Брусок +Mese Crystal Fragment=Осколок Кристалла Месе +Clay Brick=Глиняный Кирпич +Obsidian Shard=Обсидиановый Осколок +Flint=Огниво +Blueberries=Черника +Furnace is empty=Печь пустая +100% (output full)=100% (полное приготовление) +@1%=@1% +Empty=Пустое +Not cookable=Не может быть приготовлено +Furnace active=Печь зажжена +Furnace inactive=Печь не зажжена +(Item: @1; Fuel: @2)=(Предмет: @1; Топливо: @2) +Furnace=Печь +Stone=Камень +Cobblestone=Булыжник +Stone Brick=Каменный Кирпич +Stone Block=Каменный Блок +Mossy Cobblestone=Мшистый Булыжник +Desert Stone=Пустынный Камень +Desert Cobblestone=Пустынный Булыжник +Desert Stone Brick=Пустынный Каменный Кирпич +Desert Stone Block=Пустынный Каменный Блок +Sandstone=Песчаник +Sandstone Brick=Песчаниковый Кирпич +Sandstone Block=Песчаниковый Блок +Desert Sandstone=Пустынный Песчаник +Desert Sandstone Brick=Пустынный Песчаниковый Кирпич +Desert Sandstone Block=Пустынный Песчаниковый Блок +Silver Sandstone=Серебряный Песчаник +Silver Sandstone Brick=Серебряный Песчаниковый Кирпич +Silver Sandstone Block=Серебряный Песчаниковый Блок +Obsidian=Обсидиан +Obsidian Brick=Обсидиановый Кирпич +Obsidian Block=Обсидиановый Блок +Dirt=Земля +Dirt with Grass=Земля с Травой +Dirt with Grass and Footsteps=Земля с Травой и Следами +Dirt with Dry Grass=Земля с Сухой Травой +Dirt with Snow=Земля Со Снегом +Dirt with Rainforest Litter=Земля с Тропической Подстилкой +Dirt with Coniferous Litter=Земля с Сосновой Подстилкой +Dry Dirt=Сухая Земля +Dry Dirt with Dry Grass=Сухая Земля с Сухой Травой +Permafrost=Замороженная Почва +Permafrost with Stones=Замороженная Почва с Камнями +Permafrost with Moss=Замороженная Почва с Мхом +Sand=Песок +Desert Sand=Пустынный Песок +Silver Sand=Серебряный Песок +Gravel=Гравий +Clay=Глиняный Блок +Snow=Снег +Snow Block=Снежный Блок +Ice=Лёд +Cave Ice=Пещерный Лёд +Apple Tree=Яблоневый Ствол +Apple Wood Planks=Яблоневые Деревянные Доски +Apple Tree Sapling=Яблоневый Саженец +Apple Tree Leaves=Яблоневая Листва +Apple=Яблоко +Apple Marker=Яблочная Метка +Jungle Tree=Ствол Тропического Дерева +Jungle Wood Planks=Деревянные Доски Тропического Дерева +Jungle Tree Leaves=Листва Тропического Дерева +Jungle Tree Sapling=Саженец Тропического Дерева +Emergent Jungle Tree Sapling=Выросший Саженец Тропического Дерева +Pine Tree=Сосновый Ствол +Pine Wood Planks=Сосновые Деревянные Доски +Pine Needles=Сосновая Хвоя +Pine Tree Sapling=Сосновый Саженец +Acacia Tree=Ствол Акации +Acacia Wood Planks=Деревянные Доски Акации +Acacia Tree Leaves=Листва Акации +Acacia Tree Sapling=Саженец Акации +Aspen Tree=Осиновый Ствол +Aspen Wood Planks=Осиновые Деревянные Доски +Aspen Tree Leaves=Осиновая Листва +Aspen Tree Sapling=Осиновый Саженец +Coal Ore=Уголь +Coal Block=Угольный Блок +Iron Ore=Железная Руда +Steel Block=Стальной Блок +Copper Ore=Медная Руда +Copper Block=Медный Блок +Tin Ore=Оловянная Руда +Tin Block=Оловянный Блок +Bronze Block=Бронзовый Блок +Mese Ore=Месевая Руда +Mese Block=Месевый Блок +Gold Ore=Золотая Руда +Gold Block=Золотой Блок +Diamond Ore=Алмаз +Diamond Block=Алмазный Блок +Cactus=Кактус +Large Cactus Seedling=Кактусовый Саженец +Papyrus=Папирус +Dry Shrub=Сухой Куст +Jungle Grass=Тропическая Трава +Grass=Трава +Dry Grass=Сухая Трава +Fern=Папоротник +Marram Grass=Песколюб +Bush Stem=Ствол Яблочного Деревца +Bush Leaves=Листья Яблочного Деревца +Bush Sapling=Саженца яблочного деревца +Blueberry Bush Leaves with Berries=Куст Черники с Ягодами +Blueberry Bush Leaves=Куст Черники +Blueberry Bush Sapling=Саженца Куста Черники +Acacia Bush Stem=Ствол Деревца Акации +Acacia Bush Leaves=Листья Деревца Акации +Acacia Bush Sapling=Саженца Деревца Акации +Pine Bush Stem=Сосновое Деревце +Pine Bush Needles=Хвоя Соснового Деревца +Pine Bush Sapling=Саженца Соснового Деревца +Kelp=Ламинария +Green Coral=Зеленый Коралл +Pink Coral=Розовый Коралл +Cyan Coral=Голубой Коралл +Brown Coral=Бурый Коралл +Orange Coral=Оранжевый Коралл +Coral Skeleton=Коралловый Остов +Water Source=Водный Источник +Flowing Water=Текущая Вода +River Water Source=Речной Водный Источник +Flowing River Water=Текущая Речная Вода +Lava Source=Лавовый Источник +Flowing Lava=Текущая Лава +Empty Bookshelf=Пустая Книжная Полка +Bookshelf (@1 written, @2 empty books)=Книжная Полка (@1 написано, @2 чистые книги) +Bookshelf=Книжная Полка +Text too long=Текст слишком длинный +Wooden Sign=Деревянная Табличка +Steel Sign=Стальная Табличка +Wooden Ladder=Деревянная Лестница +Steel Ladder=Стальная Лестница +Apple Wood Fence=Яблоневый Деревянный Забор +Acacia Wood Fence=Деревянный Забор Из Акации +Jungle Wood Fence=Деревянный Забор Из Тропического Дерева +Pine Wood Fence=Сосновый Деревянный Забор +Aspen Wood Fence=Осиновый Деревянный Забор +Apple Wood Fence Rail=Яблоневый Деревянный Реечный Забор +Acacia Wood Fence Rail=Деревянный Реечный Забор Из Акации +Jungle Wood Fence Rail=Деревянный Реечный Забор Из Тропического Дерева +Pine Wood Fence Rail=Сосновый Деревянный Реечный Забор +Aspen Wood Fence Rail=Осиновый Деревянный Реечный Забор +Glass=Стекло +Obsidian Glass=Обсидиановое Стекло +Brick Block=Кирпичный Блок +Mese Lamp=Месе Лампа +Mese Post Light=Столб с Месе Фонарем +Cloud=Облако +Wooden Pickaxe=Деревянная Кирка +Stone Pickaxe=Каменная Кирка +Bronze Pickaxe=Бронзовая Кирка +Steel Pickaxe=Стальная Кирка +Mese Pickaxe=Месе Кирка +Diamond Pickaxe=Алмазная Кирка +Wooden Shovel=Деревянная Лопата +Stone Shovel=Каменная Лопата +Bronze Shovel=Бронзовая Лопата +Steel Shovel=Стальная Лопата +Mese Shovel=Месе Лопата +Diamond Shovel=Алмазная Лопата +Wooden Axe=Деревянный Топор +Stone Axe=Каменный Топор +Bronze Axe=Бронзовый Топор +Steel Axe=Стальной Топор +Mese Axe=Месе Топор +Diamond Axe=Алмазный Топор +Wooden Sword=Деревянный Меч +Stone Sword=Каменный Меч +Bronze Sword=Бронзовый Меч +Steel Sword=Стальной Меч +Mese Sword=Месе Меч +Diamond Sword=Алмазный Меч +Key=Ключ +Torch=Факел +@1 will intersect protection on growth.=@1 пересечёт защиту по росту. +Title:=Заголовок: +Contents:=Содержимое: +Save=Сохранить +by @1=@1 +Page @1 of @2=Страница @1 из @2 +"@1"="@1" diff --git a/mods/default/locale/default.se.tr b/mods/default/locale/default.se.tr new file mode 100644 index 0000000..d123530 --- /dev/null +++ b/mods/default/locale/default.se.tr @@ -0,0 +1,211 @@ +## textdomain: default +Locked Chest=Låst kista +Locked Chest (owned by @1)=Låst kista (Ägd av @1) +You do not own this chest.=Du äger inte denna kistan. +a locked chest=en låst kista +Chest=Kista +Stick=Pinne +Paper=Papper +"@1" by @2="@1" av @2 +Book=Bok +Book with Text=Bok med text +Skeleton Key=Skelett Nyckel +Key to @1's @2=Nyckel till @1s @2 +Coal Lump=Kol Klumo +Iron Lump=Järn Klump +Copper Lump=Koppar Klump +Tin Lump=Tenn Klump +Mese Crystal=Mese Kristall +Gold Lump=Guld Klump +Diamond=Diamant +Clay Lump=Lerklump +Steel Ingot=Stål tacka +Copper Ingot=Koppar tacka +Tin Ingot=Tenn tacka +Bronze Ingot=Brons tacka +Gold Ingot=Guld tacka +Mese Crystal Fragment=Mese Kristall Fragment +Clay Brick=Tegelsten +Obsidian Shard=Obsidian Skärva +Flint=Flinta +Blueberries=Blåbär +Furnace is empty=Ugnen är tom +100% (output full)=100% (utgången full) +@1%=@1% +Empty=Tom +Not cookable=Inte kokbar +Furnace active=Ugn aktiv +Furnace inactive=Ugn inaktiv +(Item: @1; Fuel: @2)=(Sak: @1; Bränsle: @2) +Furnace=Ugn +Stone=Sten +Cobblestone=Kullersten +Stone Brick=Stentegel +Stone Block=Sten block +Mossy Cobblestone=Mossig kullersten +Desert Stone=Öken sten +Desert Cobblestone=Öken kullersten +Desert Stone Brick=Öken stentegel +Desert Stone Block=Öken sten block +Sandstone=Sandsten +Sandstone Brick=Sandstenstegel +Sandstone Block=Sandsten block +Desert Sandstone=Öken sandsten +Desert Sandstone Brick=Öken Sandstenstegel +Desert Sandstone Block=Öken sandsten block +Silver Sandstone=Silver sandsten +Silver Sandstone Brick=Silver Sandstenstegel +Silver Sandstone Block=Silver sandsten block +Obsidian=Obsidian +Obsidian Brick=Obsidiantegel +Obsidian Block=Obsidian block +Dirt=Jord +Dirt with Grass=Jord med gräs +Dirt with Grass and Footsteps=Jord med gräs och fotsteg +Dirt with Dry Grass=Jord med torrt gräs +Dirt with Snow=Jord med snö +Dirt with Rainforest Litter=Jord med regnskogströ +Dirt with Coniferous Litter=Jord med Barrträd +Dry Dirt=Torr jord +Dry Dirt with Dry Grass=Torr jord med torrt gräs +Permafrost=Permafrost +Permafrost with Stones=Permafrost med sten +Permafrost with Moss=Permafrost med mossa +Sand=Sand +Desert Sand=Öken sand +Silver Sand=Silver sand +Gravel=Grus +Clay=Lera +Snow=Snö +Snow Block=Snö block +Ice=Is +Cave Ice=Grott Is +Apple Tree=Äpple Träd +Apple Wood Planks=Äpple Plankor +Apple Tree Sapling=Äpple Planta +Apple Tree Leaves=Äpple Löv +Apple=Äpple +Apple Marker=Äpple Markör +Jungle Tree=Djungel Träd +Jungle Wood Planks=Djungel Plankor +Jungle Tree Leaves=Djungel Löv +Jungle Tree Sapling=Djungel Planta +Emergent Jungle Tree Sapling=Nybliven Djungel Planta +Pine Tree=Tall +Pine Wood Planks= Tall Plankor +Pine Needles=Granbarr +Pine Tree Sapling=Tall Planta +Acacia Tree=Akacia Träd +Acacia Wood Planks=Akacia Plankor +Acacia Tree Leaves=Akacia Löv +Acacia Tree Sapling=Akacia Planta +Aspen Tree=Asp +Aspen Wood Planks=Asp Plankor +Aspen Tree Leaves=Asp Löv +Aspen Tree Sapling=Asp Planta +Coal Ore=Kol Malm +Coal Block=Kol Block +Iron Ore=Järn Malm +Steel Block=Stål Block +Copper Ore=Koppar Malm +Copper Block=Koppar Block +Tin Ore=Tenn Malm +Tin Block=Tenn Block +Bronze Block=Brons Block +Mese Ore=Mese Malm +Mese Block=Mese Block +Gold Ore=Guld Malm +Gold Block=Guld Block +Diamond Ore=Diamant Malm +Diamond Block=Diamant Block +Cactus=Kaktus +Large Cactus Seedling=Stor kaktusplanta +Papyrus=Papyrus +Dry Shrub=Torr Buske +Jungle Grass=Djungel Gräs +Grass=Gräs +Dry Grass=Torrt Gräs +Fern=Ormbunke +Marram Grass=Marram Gräs +Bush Stem=Busk Stam +Bush Leaves=Busk Löv +Bush Sapling=Busk Planta +Blueberry Bush Leaves with Berries=Blåbärsbusks Löv med Bär +Blueberry Bush Leaves=Blåbärsbusks Löv +Blueberry Bush Sapling=Blåbärsbusks Plantga +Acacia Bush Stem=Akacia Busks Stam +Acacia Bush Leaves=Akacia Busks Löv +Acacia Bush Sapling=Akacia Busks Planta +Pine Bush Stem=Tall Busks Stam +Pine Bush Needles=Tall Busks Granbarr +Pine Bush Sapling=Tall Busks Planta +Kelp=Brunalg +Green Coral=Grön Korall +Pink Coral=Rosa Korall +Cyan Coral=Cyan Korall +Brown Coral=Brun Korall +Orange Coral=Orange Korall +Coral Skeleton=Korall Skelett +Water Source=Vattenkälla +Flowing Water=Flödande Vatten +River Water Source=Flodvattenkälla +Flowing River Water=Flödande Flodvatten +Lava Source=Lavakälla +Flowing Lava=Flödande Lava +Empty Bookshelf=Tom Bokhylla +Bookshelf (@1 written, @2 empty books)=Bokhylla (@1 skriva, @2 tomma böcker) +Bookshelf=Bokhylla +Text too long=Text för lång +Wooden Sign=Trä Skylt +Steel Sign=Stål Skylt +Wooden Ladder=Trä Stege +Steel Ladder=Stål Stege +Apple Wood Fence=Äpple Trä Staket +Acacia Wood Fence=Akacia Trä Staket +Jungle Wood Fence=Djungel Trä Staket +Pine Wood Fence=Tall Trä Staket +Aspen Wood Fence=Asp Trä Staket +Apple Wood Fence Rail=Äpple Trä Staket Pinne +Acacia Wood Fence Rail=Akacia Trä Staket Pinne +Jungle Wood Fence Rail=Djungel Trä Staket Pinne +Pine Wood Fence Rail=Tall Trä Staket Pinne +Aspen Wood Fence Rail=Asp Trä Staket Pinne +Glass=Glas +Obsidian Glass=Obsidian Glas +Brick Block=Tegelstens Block +Mese Lamp=Mese Lampa +Mese Post Light=Mese Postljus +Cloud=Moln +Wooden Pickaxe=Trä Hacka +Stone Pickaxe=Sten Hacka +Bronze Pickaxe=Brons Hacka +Steel Pickaxe=Stål Hacka +Mese Pickaxe=Mese Hacka +Diamond Pickaxe=Diamant Hacka +Wooden Shovel=Trä Spade +Stone Shovel=Sten Spade +Bronze Shovel=Brons Spade +Steel Shovel=Stål Spade +Mese Shovel=Mese Spade +Diamond Shovel=Diamant Spade +Wooden Axe=Trä Yxa +Stone Axe=Sten Yxa +Bronze Axe=Brons Yxa +Steel Axe=Stål Yxa +Mese Axe=Mese Yxa +Diamond Axe=Diamant Yxa +Wooden Sword=Trä Svärd +Stone Sword=Sten Svärd +Bronze Sword=Brons Svärd +Steel Sword=Stål Svärd +Mese Sword=Mese Svärd +Diamond Sword=Diamant Svärd +Key=Nyckel +Torch=Fakla +@1 will intersect protection on growth.=@1 kommer korsa skyddet mot tillväxt. +Title:=Titel: +Contents:=Innehåll: +Save=Spara +by @1=av @1 +Page @1 of @2=Sida @1 av @2 +"@1"="@1" \ No newline at end of file diff --git a/mods/default/locale/default.zh_CN.tr b/mods/default/locale/default.zh_CN.tr new file mode 100644 index 0000000..ddd9471 --- /dev/null +++ b/mods/default/locale/default.zh_CN.tr @@ -0,0 +1,211 @@ +# textdomain: default +Locked Chest=已上锁的箱子 +Locked Chest (owned by @1)=已上锁的箱子(属于@1所有) +You do not own this chest.=这个箱子不属于你所有。 +a locked chest=一个已上锁的箱子 +Chest=箱子 +Stick=棒 +Paper=纸 +"@1" by @2="@1" by @2 +Book=书 +Book with Text=带文字的书 +Skeleton Key=万能钥匙 +Key to @1's @2=@1的@2的钥匙 +Coal Lump=煤块 +Iron Lump=铁块 +Copper Lump=铜块 +Tin Lump=锡块 +Mese Crystal=黄石晶体 +Gold Lump=金块 +Diamond=钻石 +Clay Lump=粘土块 +Steel Ingot=铁锭 +Copper Ingot=铜锭 +Tin Ingot=锡锭 +Bronze Ingot=青铜锭 +Gold Ingot=金锭 +Mese Crystal Fragment=黄石晶体碎片 +Clay Brick=粘土砖 +Obsidian Shard=黑曜石碎片 +Flint=燧石 +Blueberries=蓝莓 +Furnace is empty=熔炉是空的 +100% (output full)=100%(输出已满) +@1%=@1% +Empty=空 +Not cookable=不可烹饪 +Furnace active=熔炉正在运转 +Furnace inactive=熔炉未使用 +(Item: @1; Fuel: @2)=(项目:@1;燃料:@2) +Furnace=熔炉 +Stone=石 +Cobblestone=鹅卵石 +Stone Brick=石砖 +Stone Block=石方块 +Mossy Cobblestone=苔藓覆盖的鹅卵石 +Desert Stone=沙漠石 +Desert Cobblestone=沙漠鹅卵石 +Desert Stone Brick=沙漠鹅卵石砖 +Desert Stone Block=沙漠鹅卵石方块 +Sandstone=砂岩 +Sandstone Brick=砂岩砖 +Sandstone Block=砂岩方块 +Desert Sandstone=沙漠砂岩 +Desert Sandstone Brick=沙漠砂岩砖 +Desert Sandstone Block=沙漠砂岩方块 +Silver Sandstone=银砂岩 +Silver Sandstone Brick=银砂岩砖 +Silver Sandstone Block=银砂岩方块 +Obsidian=黑曜石 +Obsidian Brick=黑曜石砖 +Obsidian Block=黑曜石方块 +Dirt=土 +Dirt with Grass=带草的土 +Dirt with Grass and Footsteps=带草的土及脚印 +Dirt with Dry Grass=带干草的土 +Dirt with Snow=带雪的土 +Dirt with Rainforest Litter=雨林腐土 +Dirt with Coniferous Litter=针叶林腐土 +Dry Dirt=干土 +Dry Dirt with Dry Grass=干土和干草 +Permafrost=多年冻土 +Permafrost with Stones=带石头的多年冻土 +Permafrost with Moss=生苔的多年冻土 +Sand=沙 +Desert Sand=沙漠沙 +Silver Sand=银沙 +Gravel=沙砾 +Clay=粘土 +Snow=雪 +Snow Block=雪方块 +Ice=冰 +Cave Ice=洞穴冰 +Apple Tree=苹果树 +Apple Wood Planks=苹果树木板 +Apple Tree Sapling=苹果树苗 +Apple Tree Leaves=苹果树叶 +Apple=苹果 +Apple Marker=苹果标记 +Jungle Tree=丛林树 +Jungle Wood Planks=丛林树木板 +Jungle Tree Leaves=丛林树叶 +Jungle Tree Sapling=丛林树苗 +Emergent Jungle Tree Sapling=应急丛林树苗 +Pine Tree=松树 +Pine Wood Planks=松树木板 +Pine Needles=松针 +Pine Tree Sapling=松树树苗 +Acacia Tree=相思树 +Acacia Wood Planks=相思树木板 +Acacia Tree Leaves=相思树叶 +Acacia Tree Sapling=相思树树苗 +Aspen Tree=白杨树 +Aspen Wood Planks=白杨树木板 +Aspen Tree Leaves=白杨树叶 +Aspen Tree Sapling=白杨树树苗 +Coal Ore=煤炭矿石 +Coal Block=煤炭方块 +Iron Ore=铁矿石 +Steel Block=钢方块 +Copper Ore=铜矿石 +Copper Block=铜方块 +Tin Ore=锡矿石 +Tin Block=锡方块 +Bronze Block=青铜方块 +Mese Ore=黄石矿石 +Mese Block=黄石方块 +Gold Ore=金矿石 +Gold Block=金方块 +Diamond Ore=钻石矿石 +Diamond Block=钻石方块 +Cactus=仙人掌 +Large Cactus Seedling=大仙人掌苗 +Papyrus=莎草纸 +Dry Shrub=干灌木 +Jungle Grass=丛林草 +Grass=草 +Dry Grass=干草 +Fern=蕨 +Marram Grass=滨草 +Bush Stem=灌木 +Bush Leaves=灌木叶 +Bush Sapling=灌木苗 +Blueberry Bush Leaves with Berries=蓝莓灌木叶与浆果 +Blueberry Bush Leaves=蓝莓灌木叶 +Blueberry Bush Sapling=蓝莓灌木苗 +Acacia Bush Stem=相思灌木 +Acacia Bush Leaves=相思灌木叶 +Acacia Bush Sapling=相思灌木苗 +Pine Bush Stem=松树灌木 +Pine Bush Needles=松树灌木针 +Pine Bush Sapling=松树灌木苗 +Kelp=海带 +Green Coral=绿珊瑚 +Pink Coral=淡红珊瑚 +Cyan Coral=青珊瑚 +Brown Coral=棕珊瑚 +Orange Coral=橙珊瑚 +Coral Skeleton=珊瑚骨架 +Water Source=水方块 +Flowing Water=流动的水 +River Water Source=河水方块 +Flowing River Water=流动的河水 +Lava Source=岩浆方块 +Flowing Lava=流动的岩浆 +Empty Bookshelf=空书架 +Bookshelf (@1 written, @2 empty books)=书架(@1本有字的书,@2本空书) +Bookshelf=书架 +Text too long=文字太长 +Wooden Sign=木牌 +Steel Sign=铁牌 +Wooden Ladder=木梯子 +Steel Ladder=铁梯子 +Apple Wood Fence=苹果木栅栏 +Acacia Wood Fence=相思木栅栏 +Jungle Wood Fence=丛林木栅栏 +Pine Wood Fence=松木栅栏 +Aspen Wood Fence=白杨木栅栏 +Apple Wood Fence Rail=苹果木栏杆 +Acacia Wood Fence Rail=相思木栏杆 +Jungle Wood Fence Rail=丛林木栏杆 +Pine Wood Fence Rail=松木栏杆 +Aspen Wood Fence Rail=白杨木栏杆 +Glass=玻璃 +Obsidian Glass=黑曜石玻璃 +Brick Block=砖方块 +Mese Lamp=黄石灯 +Mese Post Light=黄石柱灯 +Cloud=云 +Wooden Pickaxe=木镐 +Stone Pickaxe=石镐 +Bronze Pickaxe=青铜镐 +Steel Pickaxe=铁镐 +Mese Pickaxe=黄石镐 +Diamond Pickaxe=钻石镐 +Wooden Shovel=木铲 +Stone Shovel=石铲 +Bronze Shovel=青铜铲 +Steel Shovel=铁铲 +Mese Shovel=黄石铲 +Diamond Shovel=钻石铲 +Wooden Axe=木斧 +Stone Axe=石斧 +Bronze Axe=青铜斧 +Steel Axe=铁斧 +Mese Axe=黄石斧 +Diamond Axe=钻石斧 +Wooden Sword=木剑 +Stone Sword=石剑 +Bronze Sword=青铜剑 +Steel Sword=铁剑 +Mese Sword=黄石剑 +Diamond Sword=钻石剑 +Key=钥匙 +Torch=火把 +@1 will intersect protection on growth.=@1将与增长的保护相交。 +Title:=标题: +Contents:=内容: +Save=保存 +by @1=由@1 +Page @1 of @2=第@1页,共@2页。 +"@1"="@1" diff --git a/mods/default/locale/default.zh_TW.tr b/mods/default/locale/default.zh_TW.tr new file mode 100644 index 0000000..6b06b8a --- /dev/null +++ b/mods/default/locale/default.zh_TW.tr @@ -0,0 +1,211 @@ +# textdomain: default +Locked Chest=已上鎖的箱子 +Locked Chest (owned by @1)=已上鎖的箱子(屬於@1所有) +You do not own this chest.=這個箱子不屬於你所有。 +a locked chest=一個已上鎖的箱子 +Chest=箱子 +Stick=棒 +Paper=紙 +"@1" by @2="@1" by @2 +Book=書 +Book with Text=帶文字的書 +Skeleton Key=萬能鑰匙 +Key to @1's @2=@1的@2的鑰匙 +Coal Lump=煤塊 +Iron Lump=鐵塊 +Copper Lump=銅塊 +Tin Lump=錫塊 +Mese Crystal=黃石晶體 +Gold Lump=金塊 +Diamond=鑽石 +Clay Lump=粘土塊 +Steel Ingot=鐵錠 +Copper Ingot=銅錠 +Tin Ingot=錫錠 +Bronze Ingot=青銅錠 +Gold Ingot=金錠 +Mese Crystal Fragment=黃石晶體碎片 +Clay Brick=粘土磚 +Obsidian Shard=黑曜石碎片 +Flint=燧石 +Blueberries=藍莓 +Furnace is empty=熔爐是空的 +100% (output full)=100%(輸出已滿) +@1%=@1% +Empty=空 +Not cookable=不可烹飪 +Furnace active=熔爐正在運轉 +Furnace inactive=熔爐未使用 +(Item: @1; Fuel: @2)=(項目:@1;燃料:@2) +Furnace=熔爐 +Stone=石 +Cobblestone=鵝卵石 +Stone Brick=石磚 +Stone Block=石方塊 +Mossy Cobblestone=苔蘚覆蓋的鵝卵石 +Desert Stone=沙漠石 +Desert Cobblestone=沙漠鵝卵石 +Desert Stone Brick=沙漠鵝卵石磚 +Desert Stone Block=沙漠鵝卵石方塊 +Sandstone=砂岩 +Sandstone Brick=砂岩磚 +Sandstone Block=砂岩方塊 +Desert Sandstone=沙漠砂岩 +Desert Sandstone Brick=沙漠砂岩磚 +Desert Sandstone Block=沙漠砂岩方塊 +Silver Sandstone=銀砂岩 +Silver Sandstone Brick=銀砂岩磚 +Silver Sandstone Block=銀砂岩方塊 +Obsidian=黑曜石 +Obsidian Brick=黑曜石磚 +Obsidian Block=黑曜石方塊 +Dirt=土 +Dirt with Grass=帶草的土 +Dirt with Grass and Footsteps=帶草的土及腳印 +Dirt with Dry Grass=帶乾草的土 +Dirt with Snow=帶雪的土 +Dirt with Rainforest Litter=雨林腐土 +Dirt with Coniferous Litter=針葉林腐土 +Dry Dirt=乾土 +Dry Dirt with Dry Grass=乾土和乾草 +Permafrost=多年凍土 +Permafrost with Stones=帶石頭的多年凍土 +Permafrost with Moss=生苔的多年凍土 +Sand=沙 +Desert Sand=沙漠沙 +Silver Sand=銀沙 +Gravel=沙礫 +Clay=粘土 +Snow=雪 +Snow Block=雪方塊 +Ice=冰 +Cave Ice=洞穴冰 +Apple Tree=蘋果樹 +Apple Wood Planks=蘋果樹木板 +Apple Tree Sapling=蘋果樹苗 +Apple Tree Leaves=蘋果樹葉 +Apple=蘋果 +Apple Marker=蘋果標記 +Jungle Tree=叢林樹 +Jungle Wood Planks=叢林樹木板 +Jungle Tree Leaves=叢林樹葉 +Jungle Tree Sapling=叢林樹苗 +Emergent Jungle Tree Sapling=應急叢林樹苗 +Pine Tree=松樹 +Pine Wood Planks=松樹木板 +Pine Needles=松針 +Pine Tree Sapling=松樹樹苗 +Acacia Tree=相思樹 +Acacia Wood Planks=相思樹木板 +Acacia Tree Leaves=相思樹葉 +Acacia Tree Sapling=相思樹樹苗 +Aspen Tree=白楊樹 +Aspen Wood Planks=白楊樹木板 +Aspen Tree Leaves=白楊樹葉 +Aspen Tree Sapling=白楊樹樹苗 +Coal Ore=煤炭礦石 +Coal Block=煤炭方塊 +Iron Ore=鐵礦石 +Steel Block=鋼方塊 +Copper Ore=銅礦石 +Copper Block=銅方塊 +Tin Ore=錫礦石 +Tin Block=錫方塊 +Bronze Block=青銅方塊 +Mese Ore=黃石礦石 +Mese Block=黃石方塊 +Gold Ore=金礦石 +Gold Block=金方塊 +Diamond Ore=鑽石礦石 +Diamond Block=鑽石方塊 +Cactus=仙人掌 +Large Cactus Seedling=大仙人掌苗 +Papyrus=莎草紙 +Dry Shrub=幹灌木 +Jungle Grass=叢林草 +Grass=草 +Dry Grass=乾草 +Fern=蕨 +Marram Grass=濱草 +Bush Stem=灌木 +Bush Leaves=灌木葉 +Bush Sapling=灌木苗 +Blueberry Bush Leaves with Berries=藍莓灌木葉與漿果 +Blueberry Bush Leaves=藍莓灌木葉 +Blueberry Bush Sapling=藍莓灌木苗 +Acacia Bush Stem=相思灌木 +Acacia Bush Leaves=相思灌木葉 +Acacia Bush Sapling=相思灌木苗 +Pine Bush Stem=松樹灌木 +Pine Bush Needles=松樹灌木針 +Pine Bush Sapling=松樹灌木苗 +Kelp=海帶 +Green Coral=綠珊瑚 +Pink Coral=淡紅珊瑚 +Cyan Coral=青珊瑚 +Brown Coral=棕珊瑚 +Orange Coral=橙珊瑚 +Coral Skeleton=珊瑚骨架 +Water Source=水方塊 +Flowing Water=流動的水 +River Water Source=河水方塊 +Flowing River Water=流動的河水 +Lava Source=岩漿方塊 +Flowing Lava=流動的岩漿 +Empty Bookshelf=空書架 +Bookshelf (@1 written, @2 empty books)=書架(@1本有字的書,@2本空書) +Bookshelf=書架 +Text too long=文字太長 +Wooden Sign=木牌 +Steel Sign=鐵牌 +Wooden Ladder=木梯子 +Steel Ladder=鐵梯子 +Apple Wood Fence=蘋果木柵欄 +Acacia Wood Fence=相思木柵欄 +Jungle Wood Fence=叢林木柵欄 +Pine Wood Fence=松木柵欄 +Aspen Wood Fence=白楊木柵欄 +Apple Wood Fence Rail=蘋果木欄杆 +Acacia Wood Fence Rail=相思木欄杆 +Jungle Wood Fence Rail=叢林木欄杆 +Pine Wood Fence Rail=松木欄杆 +Aspen Wood Fence Rail=白楊木欄杆 +Glass=玻璃 +Obsidian Glass=黑曜石玻璃 +Brick Block=磚方塊 +Mese Lamp=黃石燈 +Mese Post Light=黃石柱燈 +Cloud=雲 +Wooden Pickaxe=木鎬 +Stone Pickaxe=石鎬 +Bronze Pickaxe=青銅鎬 +Steel Pickaxe=鐵鎬 +Mese Pickaxe=黃石鎬 +Diamond Pickaxe=鑽石鎬 +Wooden Shovel=木鏟 +Stone Shovel=石鏟 +Bronze Shovel=青銅鏟 +Steel Shovel=鐵鏟 +Mese Shovel=黃石鏟 +Diamond Shovel=鑽石鏟 +Wooden Axe=木斧 +Stone Axe=石斧 +Bronze Axe=青銅斧 +Steel Axe=鐵斧 +Mese Axe=黃石斧 +Diamond Axe=鑽石斧 +Wooden Sword=木劍 +Stone Sword=石劍 +Bronze Sword=青銅劍 +Steel Sword=鐵劍 +Mese Sword=黃石劍 +Diamond Sword=鑽石劍 +Key=鑰匙 +Torch=火把 +@1 will intersect protection on growth.=@1將與增長的保護相交。 +Title:=標題: +Contents:=內容: +Save=保存 +by @1=由@1 +Page @1 of @2=第@1頁,共@2頁。 +"@1"="@1" diff --git a/mods/default/mapgen.lua b/mods/default/mapgen.lua index a361f89..8c161d1 100644 --- a/mods/default/mapgen.lua +++ b/mods/default/mapgen.lua @@ -576,7 +576,7 @@ function default.register_ores() -- Only where default:dirt is present as surface material biomes = {"taiga", "snowy_grassland", "grassland", "coniferous_forest", "deciduous_forest", "deciduous_forest_shore", "rainforest", - "rainforest_swamp", "floatland_coniferous_forest"} + "rainforest_swamp"} }) -- Gravel @@ -890,7 +890,7 @@ end -- All mapgens except mgv6 -function default.register_biomes(upper_limit) +function default.register_biomes() -- Icesheet @@ -909,7 +909,7 @@ function default.register_biomes(upper_limit) depth_riverbed = 2, node_dungeon = "default:ice", node_dungeon_stair = "stairs:stair_ice", - y_max = upper_limit, + y_max = 31000, y_min = -8, heat_point = 0, humidity_point = 73, @@ -956,7 +956,7 @@ function default.register_biomes(upper_limit) node_dungeon = "default:cobble", node_dungeon_alt = "default:mossycobble", node_dungeon_stair = "stairs:stair_cobble", - y_max = upper_limit, + y_max = 31000, y_min = 47, heat_point = 0, humidity_point = 40, @@ -1043,7 +1043,7 @@ function default.register_biomes(upper_limit) node_dungeon = "default:cobble", node_dungeon_alt = "default:mossycobble", node_dungeon_stair = "stairs:stair_cobble", - y_max = upper_limit, + y_max = 31000, y_min = 4, heat_point = 25, humidity_point = 70, @@ -1095,7 +1095,7 @@ function default.register_biomes(upper_limit) node_dungeon = "default:cobble", node_dungeon_alt = "default:mossycobble", node_dungeon_stair = "stairs:stair_cobble", - y_max = upper_limit, + y_max = 31000, y_min = 4, heat_point = 20, humidity_point = 35, @@ -1146,7 +1146,7 @@ function default.register_biomes(upper_limit) node_dungeon = "default:cobble", node_dungeon_alt = "default:mossycobble", node_dungeon_stair = "stairs:stair_cobble", - y_max = upper_limit, + y_max = 31000, y_min = 6, heat_point = 50, humidity_point = 35, @@ -1213,7 +1213,7 @@ function default.register_biomes(upper_limit) node_dungeon = "default:cobble", node_dungeon_alt = "default:mossycobble", node_dungeon_stair = "stairs:stair_cobble", - y_max = upper_limit, + y_max = 31000, y_min = 6, heat_point = 45, humidity_point = 70, @@ -1280,7 +1280,7 @@ function default.register_biomes(upper_limit) node_dungeon = "default:cobble", node_dungeon_alt = "default:mossycobble", node_dungeon_stair = "stairs:stair_cobble", - y_max = upper_limit, + y_max = 31000, y_min = 1, heat_point = 60, humidity_point = 68, @@ -1347,7 +1347,7 @@ function default.register_biomes(upper_limit) depth_riverbed = 2, node_dungeon = "default:desert_stone", node_dungeon_stair = "stairs:stair_desert_stone", - y_max = upper_limit, + y_max = 31000, y_min = 4, heat_point = 92, humidity_point = 16, @@ -1397,7 +1397,7 @@ function default.register_biomes(upper_limit) depth_riverbed = 2, node_dungeon = "default:sandstonebrick", node_dungeon_stair = "stairs:stair_sandstone_block", - y_max = upper_limit, + y_max = 31000, y_min = 4, heat_point = 60, humidity_point = 0, @@ -1446,7 +1446,7 @@ function default.register_biomes(upper_limit) node_dungeon = "default:cobble", node_dungeon_alt = "default:mossycobble", node_dungeon_stair = "stairs:stair_cobble", - y_max = upper_limit, + y_max = 31000, y_min = 4, heat_point = 40, humidity_point = 0, @@ -1496,7 +1496,7 @@ function default.register_biomes(upper_limit) node_dungeon = "default:cobble", node_dungeon_alt = "default:mossycobble", node_dungeon_stair = "stairs:stair_cobble", - y_max = upper_limit, + y_max = 31000, y_min = 1, heat_point = 89, humidity_point = 42, @@ -1563,7 +1563,7 @@ function default.register_biomes(upper_limit) node_dungeon = "default:cobble", node_dungeon_alt = "default:mossycobble", node_dungeon_stair = "stairs:stair_cobble", - y_max = upper_limit, + y_max = 31000, y_min = 1, heat_point = 86, humidity_point = 65, @@ -1619,59 +1619,6 @@ function default.register_biomes(upper_limit) end --- Biomes for floatlands - --- TODO Temporary simple biomes to be replaced by special floatland biomes later. - -function default.register_floatland_biomes(floatland_level, shadow_limit) - - minetest.register_biome({ - name = "floatland_grassland", - node_top = "default:dirt_with_grass", - depth_top = 1, - node_filler = "default:dirt", - depth_filler = 1, - node_dungeon = "default:cobble", - node_dungeon_alt = "default:mossycobble", - node_dungeon_stair = "stairs:stair_cobble", - y_max = 31000, - y_min = floatland_level + 2, - heat_point = 50, - humidity_point = 25, - }) - - minetest.register_biome({ - name = "floatland_coniferous_forest", - node_top = "default:dirt_with_coniferous_litter", - depth_top = 1, - node_filler = "default:dirt", - depth_filler = 3, - node_dungeon = "default:cobble", - node_dungeon_alt = "default:mossycobble", - node_dungeon_stair = "stairs:stair_cobble", - y_max = 31000, - y_min = floatland_level + 2, - heat_point = 50, - humidity_point = 75, - }) - - minetest.register_biome({ - name = "floatland_ocean", - node_top = "default:sand", - depth_top = 1, - node_filler = "default:sand", - depth_filler = 3, - node_dungeon = "default:cobble", - node_dungeon_alt = "default:mossycobble", - node_dungeon_stair = "stairs:stair_cobble", - y_max = floatland_level + 1, - y_min = shadow_limit, - heat_point = 50, - humidity_point = 50, - }) -end - - -- -- Register decorations -- @@ -1787,7 +1734,7 @@ local function register_grass_decoration(offset, scale, length) octaves = 3, persist = 0.6 }, - biomes = {"grassland", "deciduous_forest", "floatland_grassland"}, + biomes = {"grassland", "deciduous_forest"}, y_max = 31000, y_min = 1, decoration = "default:grass_" .. length, @@ -1829,7 +1776,7 @@ local function register_fern_decoration(seed, length) octaves = 3, persist = 0.7 }, - biomes = {"coniferous_forest", "floatland_coniferous_forest"}, + biomes = {"coniferous_forest"}, y_max = 31000, y_min = 6, decoration = "default:fern_" .. length, @@ -1944,11 +1891,35 @@ function default.register_decorations() minetest.register_decoration({ name = "default:jungle_tree", deco_type = "schematic", - place_on = {"default:dirt_with_rainforest_litter", "default:dirt"}, + place_on = {"default:dirt_with_rainforest_litter"}, sidelen = 80, fill_ratio = 0.1, - biomes = {"rainforest", "rainforest_swamp"}, + biomes = {"rainforest"}, y_max = 31000, + y_min = 1, + schematic = minetest.get_modpath("default") .. "/schematics/jungle_tree.mts", + flags = "place_center_x, place_center_z", + rotation = "random", + }) + + -- Swamp jungle trees + + minetest.register_decoration({ + name = "default:jungle_tree(swamp)", + deco_type = "schematic", + place_on = {"default:dirt"}, + sidelen = 16, + -- Noise tuned to place swamp trees where papyrus is absent + noise_params = { + offset = 0.0, + scale = -0.1, + spread = {x = 200, y = 200, z = 200}, + seed = 354, + octaves = 1, + persist = 0.5 + }, + biomes = {"rainforest_swamp"}, + y_max = 0, y_min = -1, schematic = minetest.get_modpath("default") .. "/schematics/jungle_tree.mts", flags = "place_center_x, place_center_z", @@ -1962,7 +1933,7 @@ function default.register_decorations() place_offset_y = 1, sidelen = 80, fill_ratio = 0.005, - biomes = {"rainforest", "rainforest_swamp"}, + biomes = {"rainforest"}, y_max = 31000, y_min = 1, schematic = minetest.get_modpath("default") .. "/schematics/jungle_log.mts", @@ -1987,7 +1958,7 @@ function default.register_decorations() octaves = 3, persist = 0.66 }, - biomes = {"taiga", "coniferous_forest", "floatland_coniferous_forest"}, + biomes = {"taiga", "coniferous_forest"}, y_max = 31000, y_min = 4, schematic = minetest.get_modpath("default") .. "/schematics/pine_tree.mts", @@ -2007,7 +1978,7 @@ function default.register_decorations() octaves = 3, persist = 0.66 }, - biomes = {"taiga", "coniferous_forest", "floatland_coniferous_forest"}, + biomes = {"taiga", "coniferous_forest"}, y_max = 31000, y_min = 4, schematic = minetest.get_modpath("default") .. "/schematics/small_pine_tree.mts", @@ -2021,7 +1992,7 @@ function default.register_decorations() place_offset_y = 1, sidelen = 80, fill_ratio = 0.0018, - biomes = {"taiga", "coniferous_forest", "floatland_coniferous_forest"}, + biomes = {"taiga", "coniferous_forest"}, y_max = 31000, y_min = 4, schematic = minetest.get_modpath("default") .. "/schematics/pine_log.mts", @@ -2172,8 +2143,10 @@ function default.register_decorations() -- Papyrus + -- Dirt version for rainforest swamp + minetest.register_decoration({ - name = "default:papyrus", + name = "default:papyrus_on_dirt", deco_type = "schematic", place_on = {"default:dirt"}, sidelen = 16, @@ -2185,10 +2158,32 @@ function default.register_decorations() octaves = 3, persist = 0.7 }, + biomes = {"rainforest_swamp"}, + y_max = 0, + y_min = 0, + schematic = minetest.get_modpath("default") .. "/schematics/papyrus_on_dirt.mts", + }) + + -- Dry dirt version for savanna shore + + minetest.register_decoration({ + name = "default:papyrus_on_dry_dirt", + deco_type = "schematic", + place_on = {"default:dry_dirt"}, + sidelen = 16, + noise_params = { + offset = -0.3, + scale = 0.7, + spread = {x = 200, y = 200, z = 200}, + seed = 354, + octaves = 3, + persist = 0.7 + }, biomes = {"savanna_shore"}, y_max = 0, y_min = 0, - schematic = minetest.get_modpath("default") .. "/schematics/papyrus.mts", + schematic = minetest.get_modpath("default") .. + "/schematics/papyrus_on_dry_dirt.mts", }) -- Bush @@ -2206,8 +2201,7 @@ function default.register_decorations() octaves = 3, persist = 0.7, }, - biomes = {"grassland", "deciduous_forest", - "floatland_grassland"}, + biomes = {"grassland", "deciduous_forest"}, y_max = 31000, y_min = 1, schematic = minetest.get_modpath("default") .. "/schematics/bush.mts", @@ -2479,22 +2473,9 @@ end -- --- Detect mapgen, flags and parameters to select functions +-- Detect mapgen to select functions -- --- Get setting or default -local mgv7_spflags = minetest.get_mapgen_setting("mgv7_spflags") or - "mountains, ridges, nofloatlands, caverns" -local captures_float = string.match(mgv7_spflags, "floatlands") -local captures_nofloat = string.match(mgv7_spflags, "nofloatlands") - --- Get setting or default --- Make global for mods to use to register floatland biomes -default.mgv7_floatland_level = - minetest.get_mapgen_setting("mgv7_floatland_level") or 1280 -default.mgv7_shadow_limit = - minetest.get_mapgen_setting("mgv7_shadow_limit") or 1024 - minetest.clear_registered_biomes() minetest.clear_registered_ores() minetest.clear_registered_decorations() @@ -2504,19 +2485,8 @@ local mg_name = minetest.get_mapgen_setting("mg_name") if mg_name == "v6" then default.register_mgv6_ores() default.register_mgv6_decorations() --- Need to check for 'nofloatlands' because that contains --- 'floatlands' which makes the second condition true. -elseif mg_name == "v7" and - captures_float == "floatlands" and - captures_nofloat ~= "nofloatlands" then - -- Mgv7 with floatlands and floatland biomes - default.register_biomes(default.mgv7_shadow_limit - 1) - default.register_floatland_biomes( - default.mgv7_floatland_level, default.mgv7_shadow_limit) - default.register_ores() - default.register_decorations() else - default.register_biomes(31000) + default.register_biomes() default.register_ores() default.register_decorations() end diff --git a/mods/default/nodes.lua b/mods/default/nodes.lua index cee1242..cd46593 100644 --- a/mods/default/nodes.lua +++ b/mods/default/nodes.lua @@ -2031,7 +2031,7 @@ local function coral_on_place(itemstack, placer, pointed_thing) local def_under = minetest.registered_nodes[node_under.name] if def_under and def_under.on_rightclick and not placer:get_player_control().sneak then - return def_under.on_rightclick(pos_under, node_under.name, + return def_under.on_rightclick(pos_under, node_under, placer, itemstack, pointed_thing) or itemstack end @@ -2203,7 +2203,7 @@ minetest.register_node("default:water_source", { }, }, }, - alpha = 160, + alpha = 191, paramtype = "light", walkable = false, pointable = false, @@ -2234,7 +2234,7 @@ minetest.register_node("default:water_flowing", { type = "vertical_frames", aspect_w = 16, aspect_h = 16, - length = 0.8, + length = 0.5, }, }, { @@ -2244,11 +2244,11 @@ minetest.register_node("default:water_flowing", { type = "vertical_frames", aspect_w = 16, aspect_h = 16, - length = 0.8, + length = 0.5, }, }, }, - alpha = 160, + alpha = 191, paramtype = "light", paramtype2 = "flowingliquid", walkable = false, @@ -2330,7 +2330,7 @@ minetest.register_node("default:river_water_flowing", { type = "vertical_frames", aspect_w = 16, aspect_h = 16, - length = 0.8, + length = 0.5, }, }, { @@ -2340,7 +2340,7 @@ minetest.register_node("default:river_water_flowing", { type = "vertical_frames", aspect_w = 16, aspect_h = 16, - length = 0.8, + length = 0.5, }, }, }, diff --git a/mods/default/schematics/papyrus.mts b/mods/default/schematics/papyrus_on_dirt.mts similarity index 100% rename from mods/default/schematics/papyrus.mts rename to mods/default/schematics/papyrus_on_dirt.mts diff --git a/mods/default/schematics/papyrus_on_dry_dirt.mts b/mods/default/schematics/papyrus_on_dry_dirt.mts new file mode 100644 index 0000000000000000000000000000000000000000..36265802444a73000daad6a51a4e17e619b12768 GIT binary patch literal 77 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 L3j7y?v-E!euae<+ literal 10273 zcmch6XH-*7wD!S57ZH&rASgjX4^@yNMM{ujC`u3zLa)-hpkM(5QbG}sA_R;Ol#)P@ zq5?s>w9rB6NK;V|Dc%!!-+R~nethe$b=SIQot*5MJ+t@Ber7*2Coy(*HU*9V|6KbQ z4+X@z19&kdc;_lU9&Xq8i`@KUa;kjJ2;KR5cvD?HxrBPyvkq z2UmYrZ!b`$IeutNNK?y#2DkzMT$-$+$ML8H<&S3s(cCZcG~1!Ae43vG3xu>DE0g70 zxlp@dU<(|6WmGF*k@v7pK+fR|kO%;I`66-CA}p*t6^y_~0ARi1!>*ge zZcxtK(JOR<{)FXmYQ*Wmc6tvB_2RHM6P#RgghOA5WWEqBsc>zt5bvm1u9ZCKt_J`n z*V$X{u+ts%a{vJP+ahrVml9@gCSxsg=wcq09s!~N;27ABS+|_s@VijY50##c|Mxz0 zD*yn%eGvz)qyIucFUZ5K^&G)=i;+W<_mmc&X15j&8~qvj0D|f>E!ChG3}08>nhaY% zgn$(Q?AR|ozSk;5FBoIbeo@<}NC1@Pgl@KnEDF(2M6+tvWQTQ-z#a#o0O$BlAcj>F zYy&=^g&2e$v?#+q4%*7=*9mJCh-Q{q%u6v+ZYxYSQf?P2NISY zMWv&XdK(UC8=f&AH1{0Z^t9ddoEmhT+H@QnbhJ)$oFI5wQ>?9r0{;7bF!iWoKvcpk z7&-%_*jW{pwX*5$@G1x6C5f|Nng?U$6uK7yy8;)rVKthqu*-I;(>S3mgRm06^ZbzUZD1%sAw@;MU(WDE(1rb;!!$W!i3^PL3{Rr9Qa38#HTQ5zGu`^pHY!O+BbRv*vs@rc()u z#ZWY%xT|Q5kJ%~7N*5uRJ_Hm?FoC;6QinC6;KFh<#JBLkT_rGmNKi3=jF%uHFMz}7 z)^E#BK_Fc5m;oecibWI77lT2-CDJg+&g_&v4P9(>B0?WROh%vuQ@IS_ur!RlhXi>X zS*iq@I#fW5c&yM$y8k-IQhneE;HW@T%5;!ajJ-I7kfC%D2b!W2#3my=pjhgt4i&@p zo$}aWHz<@0`hZ}$tk4AFu-l4I6$c^~hUv3^Qcj`Rso^4lVY3o}kSRz!z9m}=T7KZXWz@ct zM7Ze(D*n?sna9r%KL{%1LE!O(g<-cC0|gC zCQ1YVK5${VqCW`~VotamcaJ)Gh zoIhwqA4iCTk+VVifkFvsARQmpQDhbl>#!6gNE9Y;C<5bm%v1Y92q*15wd2sjj!5botI83;IzKmps4k*07cD1mi1-QB>oWDoKa(%lf0 zkZ2g?raK-aciu}NA#-V5bcs?kDJf6w+pq5#h$rYU<$% zFxN#PX*{xUND-U+vHSvdM7u~Tk3k7HmJJn)1%Nk4>A(+D{-?xL;0iwg+)G5D!8w9q zAZPor2)1ycx|NE#P@UjjWC{iZ+>j0wn)KYD0*o2BKT$~-+^Ikk&ZkCRFy_-ikTgN8 zUcRFN1m5W+busANXFOra02G3mMwSN6u)IBd>h!|LuUpNB1 zJIxD3F?!tO`%>s4{^nqgwBR{Gzfu1mL3b{t{cqhlfFKbz=7(bt|K=Xd00aP1kfH`9&Lhv z<3SWfuviXMDU3{AQ7t^EcnFrm9Z#Yl4ZtEeND>DS_31MJ1m14?N`LVx>fVEgrN@9D z;0^>XZ4i7A4H!AYPY;TvVgNo8Kp?0J@I*pYbSr@e84!bP6o}eC;DAM{0xVKd110c0 zbesh|6)41c7)i649n2AAyDQ*Q=khbsgvTSg_36PVBR$zcTowf|6a+|62yosl!!ip3 zST;>j3GAqb9t4X(#Nml7nr_h4K7>2o2~0L@VVZrZ1PDHe6~ztzJO)fB0^z1Rvmgco zHX-u3L$TO2x6*RTO)V%6J8WM{AR|FuBk;JF;z24fzz-t9?U)0&{R0d`>g^e3F@5I; z1@8~y;CmFHkKv*&DhP&}LfY`dloSDjkBFsaJY7Br1IWqApu!)_c&b7l0)~oC5Cf(p z6{LfNr7GZ}kko@Ud)Na3k|v1lVUJWZWpLphC=duyYz&(w6p~6Ug2xKRLsNyxa5yxT zjq1Y;Ozc!M1QdGc+zbwffM)2arl2@b3-&v3ZU&A8tkefTR4Sl8Q!!Md;8>toGb9`b zR)Ja!60F34ehb0q9Sj=Og6k~x-y*fEKCaLV0d`A9fOyhT@zgOxK7Q_WE96*$h(kuy zL4L&?1%Q7{#G+kJQ1i%@S{drbTB?6T3SmuNyzRf#F6rVQ zoK&C%Fan8XNrN#EIR^-k$U%Jvz^0}l!91p%KZd1pB$f8uA>bLzjY^MTv0I-};!vU> z7ljBQc^)*uM`PgsNCXbJ8xCaTgCdjQzm5OZ{-gMx6#o~Ii{p(+&^!$NDVc7ii}_$G zfW?pWz!mfz@ObhjX4stctk6dFEL+p8P(<7pH|D7$0L%`}Ks~)TgNLaYE^-EVECtj0 zAdeF?76qtGOHF2HJe5O1UIT-A`-YS2ppK8}#gJaQd&Y~8yFMlw;4<1`^K{)_w!q(L ziPgMkdiU??iWNM3#9g(dhtB6g<^)mf(HWRWXpMGD6CO>nfKy8_8XALPzo5Cujxa&T z!2;15QZih*n)L4%?a>M492dY*X#i1C;0wsnW5;EIcb@^f*(-S$qTc170Hj$3W$$SS z%3b<+EQ;!i9erd%U)Vq(!l@0#mBd>Bnm?rD7YzNx9MuC5x_Dfi&rU!5#K z+H5IL%w&$fGR_BGeudZP)_wVBI0YN40#Mc9} zs@{Z0Vd-MkkEE7oYQ2MQ4E2N>re+dyR%3lHUzQ1~7#oY+EtD`a44(+8-7Xc4T+iwC z`T<;24>mg6^Y}|Fs>A=JW_8SN_s;ijWWs*uW{D}unE8u6u%g2CZ2bf0y_iDUimAk} zmJ!)}>Ws)2Z)5*{T^$M|b{RI2iDQu*lVa%%eR992hjGNU9Mzq{%ew9-Q9p}A&P7Nc z^Yh!6S|9wzu<`t*e4pCBx>tBQ$+h9vr@I~dn~eLRRz2OjYzBH|CqFLi3wN`Af5AX; z%QPO|&MBbLGA;|~O=miK9_fDkr%p{_q}dA%tIzl6J;zOFS?^@;=BGIFcTaOheDEUv zP(HDh7Fu>!B}g|w%!ahmw#z&IH@GcsN~0`1a`QThKmBh2{6%E1taUb#;z^uRuP~+c zb`Ad37Fj+zSt;E}>RjvII`7!S@LYB4x#APlO#Mdb!Z4S&S^)b+gBuMIBR@EU&gOh| z71B8}@9DNfLUVsxOqe zPH%7jos@DO*E#!lsY&Io>Rmfo*|5rxxms^^ws4h{ZR=e zjd#!4hKu+2Z)SG*oaJvs*(mpwH3?gud)k#=LgfE*ZTxPbQJ*}5)=c+F}w033~(j~Lz znlgphyxNnFY*QHs>I|dF`FhRu#;Nt|-0D%*YO)jL+wu)N;ooB& zyAPfpdsWtzpgXiXFus`a3~l&*Tn^dt-E~O2qY3|ju1{}0_M}_JM6pckX>X={Z~o5Y zkVzSL#z)$niM%qR@-=f25oOL;^vZc5w*L0NWj|hv{q8SVtrNG}YJRD4qCBpUxUKu3 zuw8d~{AyvRa?9sPNyhnUqZ!1?msrJkJmG?U5wk>f1^{ZM{izG6&<->nXG^f?! zv1ajc{%xUJ=9e6GZ?2xQwYXXX_oof=JI!RIZk>b6=`U)&*!@kaNR205sd1_^>DL2) z=d}v`TQ_yxH(Ya1Uf{8MY4xOQRp*?CqkDguo2oIpc|%>1o6iVmQ~Xs|dCR?P*F;wX zzS_Bj_dC6^&As^^|NU0($cJ-2>NRq$`9XZO(0iez`34N6GK3GGJ9htfBHw(Ws7&u< ze6ivB$-M`*b`84{u(|DhED`INkj_C{nM?nw=}kK-Cw@kC*2!b;_`20tkQkuW?qB6k zqpZ^s`(&sfZ1iId4kb2Km{nQRqP!KhI`ME#`AFMTfYH>DtN$kmlB#e_;dKVU58gIjN7glBg~B$ zT6>ldHx{5+J$@5SA#}?4kw->;2sIZ>EAk&ghDRF{eP6=)L#juO%3*1~-FiI5sV6 zA7@F2@ohGW@uqKfMFdKz*s!~rmJcFXoGm}J)AxkTD&I{<@3{zCqe**GNzMExv-+BU zddS*}_U}5GZv=nNpsnS7%Z(=8vfCQ|Bak=7A`82^>*6%2bJ}*L?cTjFld@(u%w=av z_@ zF|=xP!^$_sD$*u|>2j|0jWXFG@rlwD-egNz0S?6lb>i|%$(@l)1b?0%f#tdJ?{~db z?ni9RJO8zO(X8?6h>Yq*r*C)tlJuL_vJ%7^#&!B5)^gm#eXTZsCJs~P&9A4Lo^f!| zz;?8M>`)NH7EM{b9LX+VIMs@`WtzTS9<(xX(>LA43nmB4rQ^%&6;4xyolxy^pEpE_ zn~4BvvEu_RS4I5apb=YNILql4PBL%xU?%x_IC42n*5(za?iz$=jWH1BDtY#ifj^ZV z--YCjnv9*O;NRTrU3+%$XK8F7-YG%xH3p^JjTkk)3=epml%VbN~n2D>Th1`uyYv|}S4xdkt*i?8Hx#7H} z4Cx}|ZlCE{vb3so{BFH2z8|PSQRtRmj$fyQJib*oJ3<#8*!in^>eqrXe>knRqp{yHxQfZ*;c(G+U`uAQNrw)ZKbNq5TzE=daiWFLGL??^g1d zQTFeYF_d_DdYQN3+!CxK-*D}hWU~&c!=r5|(m$+r@N0jr-_pCueXFURlDq46Q>}kj zD%E<_cd}P??I<7LuI5~iX5g+^=&TGN#f>u%=dc}%bP7M0iTlnoH<(5 z-3j|05+QdkyLX>FnG(@8wg=56WctWe^E_3Utf|qT&o!}33O;$ZxWe4o@#ZmDsM&XD z@5^dBi)AN^iQhD^d>OedKQq%&hYl;ec8UjPSZ-kN0zLMx!sPe5h(z6>SatiY6kM$| zHr4pd&RkFa&y`5nqezw4xwn{af4Q}PW8Sx>yrR|re7~8JO~<_dzPvSKP8+lG znHacWaw)|+OJS?>dWWPJxu+xDdGb-D`d8hqb8G9n8h=VgcI{0rJ%&FPo8K=B5MBTX;-}sHCPPlsVqW7~*b5fa{G`mLhmSw~fVpsTL10k{uX?nlG7>2IL zcb%!9nf$i(>4dS^@3sDN@zHVF=`h$4mLBMa zw0e#_zTdsdw-s@dls?k2v1k0qsJ+E*eeXi#Psv&ikj%3K-j-dtu_Tn%F2DNMy!P3% zjl{CUJhGx#IA1{wn@ykZhXcS=F9UP!E@J~hCQuZ#}iasUF*VwE34#m zW;W)@#fgo{Zc1Ze6@jg{ZPoBzT%D7J8n3Hqd)N|$D?1pGCw@q|LpR3R1J^mEm3~zj zf5r0WI!5d!??l2A#pQlp>ULU$C%z`9YZ*Rty+SL@aSr}UAt_%)X)bH>C4Z~Fml6KA zI{eRliNFSyjOF60&$dkTmw6Z4qkA@4F+H)VD47uaV-7exoBgFtf2bs5G}&@iT)% z!92bIf99>yMhmAK5ov9MV{dC32|XEaAIDC3)pFIeMA?RQKUmnQHFWMSvT2*WhOAQc z_sK-TE!6%%3yhpyH&XDk?-}rg=eDG~=3$cwv^v)m#}Flp(vYKl7G^^e-h(N&lIeD` z?{^7v_?{iuSydjZ(eB}gJ3nQTwDvySD((*%m%$q9EZa0IK(sn@P{S`AH|}^{Z;H7a zVr9F@nH9LYA3aSMBcxT2TWG5K6_t={I5lvm%*#o(%c0TWW$n^P7%ewbL)$gi>}#J& z8JFnS)Wo2r{4a>>(=3WXeq*|E3w-K2^b1?EId&u0w4_qTm)##??x}7to?RfAXOE>> zT^wQDVkDn4o*9_Qe#sJA5sz!mRxxbk_$fNfU{(7w!o$wRCv#KZ`;WEI2??UjrhcCc zk9~LRZ>P6>JEuYip&rc~a}MII!M-bR1>YVm@Svz#2;1e%JQMzeX)TIO0H9wdc238;_jLdbs$6O)FZBZ>a5wiSo=HvFUbXQEy9sGrD>EPCDUI z@eWkX2HKZmo^ibYyK%I|8N)|`?O9xgGdVkZ+5Vp|JC-p}D*ntha{q?lt~{DuRS%#1 z*3XRH-Ak+6U3`$q*p|@xycl1TB{;}W+gr2hasJo5(}n|QW#w)+T=^*Uds%>+)J$b* z?b|(eNT&DT?H>RW(6D`Zd$VltvpuP`Jg8#-7w0NcCz3or_7%!K-FYxTzy332tS_$h3D)ARn~d(c&4S| z{+t^{Hw4no5xr$&d*vmUUafK#-@28yn6%~b-GzwVy`1C!r)*WcCX1H6#JqIZ8vIu+ z;HjyDWs9*GBGvp)j`@hBQN9spS?*h(`oKi~2HM)xyG6X*aaovN@{Y{qw3g11Je%%; zHS4{A-j2jeV+nrtePJ@hcG%@2CE1MMT0vu}Pqvo#1V@=-E;^{~hrGPc&sz(z;NzR8fc@4BO0wpxQbk6+G0) zHD0e^@u@p(=>&pan3tJsVJz3G_ldAK_uNCW_v)S}PjRWuE-*lXjm1>TI9?F*uGLuP z#=?&_P)N<@Xj-Gl!ik9t?sqtHk6n=BfSxnY%*<-aNFTE!kLB*GVL#d1FKsrJgHpRJ z7T(>oo+u~Cp;G3IMP7S22B)752uAy4N!aUfb5^Vy7DL7^J+63wdr@^;F71Mwd8F6G zo)cy^xJ#pX7`|e&b15<@ceC2NzhWs^0M-A9H_Y};(guHHJES;cS&?&N2b}_O6~3o9 zuR02Qs+HWzb5dHQA@jz@;eX=C&>9CnSOC;tC%~WSfLQ6CVU{v{aS0xWD=RI-y?Q~@ zKqRFf2fpM@T-9d2Epy+SH5RW6;q?-}tm?Vbb8Qp0!0+#|<9XRuQR(CUWPSgQ*Q;v9 zzRME{RqhvF2Fc2u&$G0jT?T$(rv&!bH3jfoFskyqk@wSTLx?|(C+}%Nv z(JIkz?XBLOt=pIVmp*Gy;F;f&wl*WXD*Hr+9DSrb1K!Qk%=UYRLv7_m5Q0uuY*juy&u6DKVmLyg@R*O?0HQ^>fo)@Mbjs#JjoB?`v=i7&OvrS zYfgQ+@*CIBJm?x^`odo#DVf=!De&!@-7rtKM8C|D*x0U)6I;5KaRWv&a+hN*n2|aA z43D_RxJl;D(Utxg`~z_v9&QeQ6c9O{+d@Yc6GXC!)9%tmSnk7iDYRY zZzsmGoVa13Nn*;P8Qr*3iNEnjJ>_XZ{L{dc*#4ZX`2IC}(#5Y<0V~t?(`S>4Zer#e zN{S7h_LyGTA!1*|e(dn=MElhhsU|7fPd<-(lDXH^F?{ueTzg3@dGdQ3tl08v&(H$W zK5X1S$ynE|&0M}v`?xpH*sw2gpPkZMv7mQd4L|$K>p9V+esSC>qLM5>KT2#O2qwzx z$X~4c7TBg8JK|k732A2rwvP$caKF8WV)?aeyi^b}w;HG4bcc0nMf|r-zn-N* z|EpxfhAkz2!3dVunc9*u4li&?Mj|O9f#O?BwXGIgZI2bX|M*>W5r3%kSlDyz$+f=d zp<8JWG#gEr7J`r=A>}!Wy_Mo#j|ZH-`$%u|VUb7W5rr0N>bRlbXB)_*h2y}bZ*0zXG~X(cy3c&Q z*|8f@X6m%F6S*9Jfh%P=rC#>3t4?(M1(|sVD+EI|XD*|$oDFieeEq$~TY}u!^N9sk znd5IHQK6!HJcDkgt%U}r%lu-L`RRu@(ZKN>D7y5y~DxW@*al6%}ajX2SJXQ)h5`L^(q0qQxDuTV#QoHMzoN3L3C zaHQB_VJkVc@k~Pz6@HatiVTvpdfwji3dJ4O-DlJdBs|=W-cE2C2JX6zPyFouDS-~p zxxey0Z&h-FH}}sfy||cIQVQi0I&l9=-^)mL{ zG|zQ{Rdg)$XHor&kwEkwhSM@Z&blR(SiTW4xnVl&&|7K=I{>Awqdqc$?+$&}*kD%$K6rE9bzEdu=_O8qjdK)Hv zvEELhN;dUFql+$55H1)M?CT>tq$v5X$>zCe`bEJ&*Ap8{tRzDpT)VK*8}5idY@1*mER&? zQxt!FQ65IDK^m}zJyU12Vp-O1Yi*$HUlr1d877%{Ms8V#W^|2qaM45hvtOM}di#x% zPNoRqUQQkxy<^mx<&teLDn&k*u-Ex{pI1hc@Sw(0O9)BeCUg8@I-{Cn}KBwnc0^w*Za z1W5%{#d|f;d7FU{^J$IAdso&e*O4-@fsNhqn2eHbxje-x23?p)IxlAJo9pJc zoaL<8bH=!AB=cnIyrED?cKh&+^6Ky*Mv67gP--^xH`Exf9y0x|%B1`p7Q^vo zV8H0%9gj+`N`Kb! zOfJexOGw??aVNq3kBZm?cGFm=o~|<1T|Ot?TwKGxw2j@f?rh1&zKy$azg(W0=^0n) z{WSkBO?p`x>>GP6bRcVNHPB$zhyG7ay!M0o-k26~+>>FBUy>aRJnGhb6b2fW{{XdR BN$LOq diff --git a/mods/default/sounds/default_grass_footstep.2.ogg b/mods/default/sounds/default_grass_footstep.2.ogg index 4ccd8a0f3afeec92946a52bb3cff1127c0dbbcb9..d193068d21e54fa1c1f7761bfa32e2efaf8de749 100644 GIT binary patch literal 10164 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 I-jMEp0J9O8F#rGn diff --git a/mods/default/sounds/default_grass_footstep.3.ogg b/mods/default/sounds/default_grass_footstep.3.ogg index 20db84eda39a89f8a13b4bdd074fad02df71e6d9..e1897ea383afb15f8435cac901e89d08161b66a5 100644 GIT binary patch literal 9989 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 literal 8473 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 0) then minetest.sound_play( "default_cool_lava", - {pos = pos, max_hear_distance = 16, gain = 0.1} + {pos = pos, max_hear_distance = 16, gain = 0.1}, + true ) end -- Remove the torch node @@ -70,6 +71,7 @@ minetest.register_node("default:torch", { end, floodable = true, on_flood = on_flood, + on_rotate = false }) minetest.register_node("default:torch_wall", { @@ -93,6 +95,7 @@ minetest.register_node("default:torch_wall", { sounds = default.node_sound_wood_defaults(), floodable = true, on_flood = on_flood, + on_rotate = false }) minetest.register_node("default:torch_ceiling", { @@ -116,6 +119,7 @@ minetest.register_node("default:torch_ceiling", { sounds = default.node_sound_wood_defaults(), floodable = true, on_flood = on_flood, + on_rotate = false }) minetest.register_lbm({ @@ -134,3 +138,17 @@ minetest.register_lbm({ end end }) + +minetest.register_craft({ + output = "default:torch 4", + recipe = { + {"default:coal_lump"}, + {"group:stick"}, + } +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:torch", + burntime = 4, +}) diff --git a/mods/doors/init.lua b/mods/doors/init.lua index 85af0ef..ee4a188 100644 --- a/mods/doors/init.lua +++ b/mods/doors/init.lua @@ -176,10 +176,10 @@ function doors.door_toggle(pos, node, clicker) if state % 2 == 0 then minetest.sound_play(def.door.sounds[1], - {pos = pos, gain = 0.3, max_hear_distance = 10}) + {pos = pos, gain = 0.3, max_hear_distance = 10}, true) else minetest.sound_play(def.door.sounds[2], - {pos = pos, gain = 0.3, max_hear_distance = 10}) + {pos = pos, gain = 0.3, max_hear_distance = 10}, true) end minetest.swap_node(pos, { @@ -340,7 +340,7 @@ function doors.register(name, def) itemstack:take_item() end - minetest.sound_play(def.sounds.place, {pos = pos}) + minetest.sound_play(def.sounds.place, {pos = pos}, true) on_place_node(pos, minetest.get_node(pos), placer, node, itemstack, pointed_thing) @@ -550,12 +550,12 @@ function doors.trapdoor_toggle(pos, node, clicker) if string.sub(node.name, -5) == "_open" then minetest.sound_play(def.sound_close, - {pos = pos, gain = 0.3, max_hear_distance = 10}) + {pos = pos, gain = 0.3, max_hear_distance = 10}, true) minetest.swap_node(pos, {name = string.sub(node.name, 1, string.len(node.name) - 5), param1 = node.param1, param2 = node.param2}) else minetest.sound_play(def.sound_open, - {pos = pos, gain = 0.3, max_hear_distance = 10}) + {pos = pos, gain = 0.3, max_hear_distance = 10}, true) minetest.swap_node(pos, {name = node.name .. "_open", param1 = node.param1, param2 = node.param2}) end @@ -744,7 +744,7 @@ function doors.register_fencegate(name, def) local node_def = minetest.registered_nodes[node.name] minetest.swap_node(pos, {name = node_def.gate, param2 = node.param2}) minetest.sound_play(node_def.sound, {pos = pos, gain = 0.3, - max_hear_distance = 8}) + max_hear_distance = 8}, true) return itemstack end, selection_box = { diff --git a/mods/doors/locale/doors.ms.tr b/mods/doors/locale/doors.ms.tr new file mode 100644 index 0000000..93d6df2 --- /dev/null +++ b/mods/doors/locale/doors.ms.tr @@ -0,0 +1,18 @@ +# textdomain: doors +Hidden Door Segment=Segmen Pintu Tersembunyi +Owned by @1=Milik @1 +You do not own this locked door.=Anda bukan pemilik pintu berkunci ini. +a locked door=pintu berkunci +Wooden Door=Pintu Kayu +Steel Door=Pintu Keluli +Glass Door=Pintu Kaca +Obsidian Glass Door=Pintu Kaca Obsidia +You do not own this trapdoor.=Anda bukan pemilik pintu kolong ini. +a locked trapdoor=pintu kolong berkunci +Wooden Trapdoor=Pintu Kolong Kayu +Steel Trapdoor=Pintu Kolong Keluli +Apple Wood Fence Gate=Pintu Pagar Kayu Epal +Acacia Wood Fence Gate=Pintu Pagar Kayu Akasia +Jungle Wood Fence Gate=Pintu Pagar Kayu Hutan +Pine Wood Fence Gate=Pintu Pagar Kayu Pain +Aspen Wood Fence Gate=Pintu Pagar Kayu Aspen diff --git a/mods/doors/locale/doors.ru.tr b/mods/doors/locale/doors.ru.tr new file mode 100644 index 0000000..dc5c3c0 --- /dev/null +++ b/mods/doors/locale/doors.ru.tr @@ -0,0 +1,18 @@ +# textdomain: doors +Hidden Door Segment=Спрятанная Часть Двери +Owned by @1=Владелец: @1 +You do not own this locked door.=Вы не владелец этой заблокированной двери. +a locked door=заблокированная дверь +Wooden Door=Деревянная Дверь +Steel Door=Стальная Дверь +Glass Door=Стеклянная Дверь +Obsidian Glass Door=Дверь Из Обсидианового Стекла +You do not own this trapdoor.=Вы не владелец этого люка. +a locked trapdoor=заблокированный люк +Wooden Trapdoor=Деревянный Люк +Steel Trapdoor=Стальной Люк +Apple Wood Fence Gate=Яблоневая Деревянная Калитка +Acacia Wood Fence Gate=Деревянная Калитка Из Акации +Jungle Wood Fence Gate=Деревянная Калитка Из Тропического Дерева +Pine Wood Fence Gate=Сосновая Деревянная Калитка +Aspen Wood Fence Gate=Осиновая Деревянная Калитка diff --git a/mods/doors/locale/doors.se.tr b/mods/doors/locale/doors.se.tr new file mode 100644 index 0000000..1ecbead --- /dev/null +++ b/mods/doors/locale/doors.se.tr @@ -0,0 +1,19 @@ +# textdomain: doors +Hidden Door Segment=Dold dörrsegment +Owned by @1=Ägd av @1 +You do not own this locked door.=Du äger inte denna låsta dörr. +a locked door=en låst dörr +Wooden Door=Trä Dörr +Steel Door=Stål Dörr +Glass Door=Glas Dörr +Obsidian Glass Door=Obsidian Glas Dörr +Owned by @1=Ägd av @1 +You do not own this trapdoor.=Du äger inte denna fallucka +a locked trapdoor=en låst fallucka +Wooden Trapdoor=Trä Fallucka +Steel Trapdoor=Stål Fallucka +Apple Wood Fence Gate=Äpple Trä Fallucka +Acacia Wood Fence Gate=Akacia Trä Fallucka +Jungle Wood Fence Gate=Djungel Trä Fallucka +Pine Wood Fence Gate=Tall Trä Fallucka +Aspen Wood Fence Gate=Asp Trä Fallucka \ No newline at end of file diff --git a/mods/doors/locale/doors.zh_CN.tr b/mods/doors/locale/doors.zh_CN.tr new file mode 100644 index 0000000..5294558 --- /dev/null +++ b/mods/doors/locale/doors.zh_CN.tr @@ -0,0 +1,18 @@ +# textdomain: doors +Hidden Door Segment=隐藏门段 +Owned by @1=由@1拥有 +You do not own this locked door.=这个门不属于你所有。 +a locked door=一扇已上锁的门 +Wooden Door=木门 +Steel Door=铁门 +Glass Door=玻璃门 +Obsidian Glass Door=黑曜石玻璃门 +You do not own this trapdoor.=这个活板门不属于你所有。 +a locked trapdoor=一扇已上锁的活板门 +Wooden Trapdoor=木活板门 +Steel Trapdoor=铁活板门 +Apple Wood Fence Gate=用苹果树做的木栅栏门 +Acacia Wood Fence Gate=相思木栅栏门 +Jungle Wood Fence Gate=丛林木栅栏门 +Pine Wood Fence Gate=松木栅栏门 +Aspen Wood Fence Gate=白杨木栅栏门 diff --git a/mods/doors/locale/doors.zh_TW.tr b/mods/doors/locale/doors.zh_TW.tr new file mode 100644 index 0000000..47959ee --- /dev/null +++ b/mods/doors/locale/doors.zh_TW.tr @@ -0,0 +1,18 @@ +# textdomain: doors +Hidden Door Segment=隱藏門段 +Owned by @1=由@1擁有 +You do not own this locked door.=這個門不屬於你所有。 +a locked door=一扇已上鎖的門 +Wooden Door=木門 +Steel Door=鐵門 +Glass Door=玻璃門 +Obsidian Glass Door=黑曜石玻璃門 +You do not own this trapdoor.=這個活板門不屬於你所有。 +a locked trapdoor=一扇已上鎖的活板門 +Wooden Trapdoor=木活板門 +Steel Trapdoor=鐵活板門 +Apple Wood Fence Gate=用蘋果樹做的木柵欄門 +Acacia Wood Fence Gate=相思木柵欄門 +Jungle Wood Fence Gate=叢林木柵欄門 +Pine Wood Fence Gate=松木柵欄門 +Aspen Wood Fence Gate=白楊木柵欄門 diff --git a/mods/dungeon_loot/loot.lua b/mods/dungeon_loot/loot.lua index 7eb08cd..a5a4097 100644 --- a/mods/dungeon_loot/loot.lua +++ b/mods/dungeon_loot/loot.lua @@ -1,26 +1,13 @@ -dungeon_loot.registered_loot = { - -- buckets - {name = "bucket:bucket_empty", chance = 0.55}, - -- water in deserts/ice or above ground, lava otherwise - {name = "bucket:bucket_water", chance = 0.45, - types = {"sandstone", "desert", "ice"}}, - {name = "bucket:bucket_water", chance = 0.45, y = {0, 32768}, - types = {"normal"}}, - {name = "bucket:bucket_lava", chance = 0.45, y = {-32768, -1}, - types = {"normal"}}, +-- Loot from the `default` mod is registered here, +-- with the rest being registered in the respective mods +dungeon_loot.registered_loot = { -- various items {name = "default:stick", chance = 0.6, count = {3, 6}}, {name = "default:flint", chance = 0.4, count = {1, 3}}, - {name = "vessels:glass_fragments", chance = 0.35, count = {1, 4}}, - {name = "carts:rail", chance = 0.35, count = {1, 6}}, -- farming / consumable - {name = "farming:string", chance = 0.5, count = {1, 8}}, - {name = "farming:wheat", chance = 0.5, count = {2, 5}}, {name = "default:apple", chance = 0.4, count = {1, 4}}, - {name = "farming:seed_cotton", chance = 0.4, count = {1, 4}, - types = {"normal"}}, {name = "default:cactus", chance = 0.4, count = {1, 4}, types = {"sandstone", "desert"}}, diff --git a/mods/dungeon_loot/mapgen.lua b/mods/dungeon_loot/mapgen.lua index 624e9a8..b2c80fa 100644 --- a/mods/dungeon_loot/mapgen.lua +++ b/mods/dungeon_loot/mapgen.lua @@ -89,20 +89,20 @@ local function populate_chest(pos, rand, dungeontype) amount = rand:next(loot.count[1], loot.count[2]) end - if itemdef then - if itemdef.tool_capabilities then - for n = 1, amount do - local wear = rand:next(0.20 * 65535, 0.75 * 65535) -- 20% to 75% wear - table.insert(items, ItemStack({name = loot.name, wear = wear})) - end - elseif itemdef.stack_max == 1 then - -- not stackable, add separately - for n = 1, amount do - table.insert(items, loot.name) - end - else - table.insert(items, ItemStack({name = loot.name, count = amount})) + if not itemdef then + minetest.log("warning", "Registered loot item " .. loot.name .. " does not exist") + elseif itemdef.tool_capabilities then + for n = 1, amount do + local wear = rand:next(0.20 * 65535, 0.75 * 65535) -- 20% to 75% wear + table.insert(items, ItemStack({name = loot.name, wear = wear})) end + elseif itemdef.stack_max == 1 then + -- not stackable, add separately + for n = 1, amount do + table.insert(items, loot.name) + end + else + table.insert(items, ItemStack({name = loot.name, count = amount})) end end end diff --git a/mods/dye/locale/dye.ms.tr b/mods/dye/locale/dye.ms.tr new file mode 100644 index 0000000..50c0473 --- /dev/null +++ b/mods/dye/locale/dye.ms.tr @@ -0,0 +1,16 @@ +# textdomain: dye +White Dye=Pewarna Putih +Grey Dye=Pewarna Kelabu +Dark Grey Dye=Pewarna Kelabu Gelap +Black Dye=Pewarna Hitam +Violet Dye=Pewarna Ungu +Blue Dye=Pewarna Biru +Cyan Dye=Pewarna Biru Kehijauan +Dark Green Dye=Pewarna Hijau Gelap +Green Dye=Pewarna Hijau +Yellow Dye=Pewarna Kuning +Brown Dye=Pewarna Perang +Orange Dye=Pewarna Jingga +Red Dye=Pewarna Merah +Magenta Dye=Pewarna Merah Lembayung +Pink Dye=Pewarna Merah Jambu diff --git a/mods/dye/locale/dye.ru.tr b/mods/dye/locale/dye.ru.tr new file mode 100644 index 0000000..fa3c5c4 --- /dev/null +++ b/mods/dye/locale/dye.ru.tr @@ -0,0 +1,16 @@ +# textdomain: dye +White Dye=Белая Краска +Grey Dye=Серая Краска +Dark Grey Dye=Тёмно-Серая Краска +Black Dye=Черная Краска +Violet Dye=Фиолетовая Краска +Blue Dye=Синяя Краска +Cyan Dye=Голубая Краска +Dark Green Dye=Тёмно-Зелёная Краска +Green Dye=Зелёная Краска +Yellow Dye=Жёлтая Краска +Brown Dye=Бурая Краска +Orange Dye=Оранжевая Краска +Red Dye=Красная Краска +Magenta Dye=Пурпурная Краска +Pink Dye=Розовая Краска diff --git a/mods/dye/locale/dye.se.tr b/mods/dye/locale/dye.se.tr new file mode 100644 index 0000000..27adb10 --- /dev/null +++ b/mods/dye/locale/dye.se.tr @@ -0,0 +1,16 @@ +# textdomain: dye +White Dye=Vit Färg +Grey Dye=Grå Färg +Dark Grey Dye=Mörk Grå Färg +Black Dye=Svart Färg +Violet Dye=Violett Färg +Blue Dye=Blå Färg +Cyan Dye=Cyan Färg +Dark Green Dye=Mörk Grön Färg +Green Dye=Grön Färg +Yellow Dye=Gul Färg +Brown Dye=Brun Färg +Orange Dye=Orange Färg +Red Dye=Röd Färg +Magenta Dye=Magenta Färg +Pink Dye=Rosa Färg \ No newline at end of file diff --git a/mods/dye/locale/dye.zh_CN.tr b/mods/dye/locale/dye.zh_CN.tr new file mode 100644 index 0000000..8dcf311 --- /dev/null +++ b/mods/dye/locale/dye.zh_CN.tr @@ -0,0 +1,16 @@ +# textdomain: dye +White Dye=白染料 +Grey Dye=灰染料 +Dark Grey Dye=暗灰染料 +Black Dye=黑染料 +Violet Dye=紫染料 +Blue Dye=蓝染料 +Cyan Dye=青染料 +Dark Green Dye=暗绿染料 +Green Dye=绿染料 +Yellow Dye=黄染料 +Brown Dye=棕染料 +Orange Dye=橙染料 +Red Dye=红染料 +Magenta Dye=品红染料 +Pink Dye=粉红染料 diff --git a/mods/dye/locale/dye.zh_TW.tr b/mods/dye/locale/dye.zh_TW.tr new file mode 100644 index 0000000..cc60a21 --- /dev/null +++ b/mods/dye/locale/dye.zh_TW.tr @@ -0,0 +1,16 @@ +# textdomain: dye +White Dye=白染料 +Grey Dye=灰染料 +Dark Grey Dye=暗灰染料 +Black Dye=黑染料 +Violet Dye=紫染料 +Blue Dye=藍染料 +Cyan Dye=青染料 +Dark Green Dye=暗綠染料 +Green Dye=綠染料 +Yellow Dye=黃染料 +Brown Dye=棕染料 +Orange Dye=橙染料 +Red Dye=紅染料 +Magenta Dye=品紅染料 +Pink Dye=粉紅染料 diff --git a/mods/farming/api.lua b/mods/farming/api.lua index c2c549e..91d557c 100644 --- a/mods/farming/api.lua +++ b/mods/farming/api.lua @@ -59,7 +59,7 @@ farming.hoe_on_use = function(itemstack, user, pointed_thing, uses) minetest.sound_play("default_dig_crumbly", { pos = pt.under, gain = 0.5, - }) + }, true) if not (creative and creative.is_enabled_for and creative.is_enabled_for(user:get_player_name())) then @@ -68,7 +68,8 @@ farming.hoe_on_use = function(itemstack, user, pointed_thing, uses) itemstack:add_wear(65535/(uses-1)) -- tool break sound if itemstack:get_count() == 0 and wdef.sound and wdef.sound.breaks then - minetest.sound_play(wdef.sound.breaks, {pos = pt.above, gain = 0.5}) + minetest.sound_play(wdef.sound.breaks, {pos = pt.above, + gain = 0.5}, true) end end return itemstack @@ -176,6 +177,8 @@ farming.place_seed = function(itemstack, placer, pointed_thing, plantname) end -- add the node and remove 1 item from the itemstack + minetest.log("action", player_name .. " places node " .. plantname .. " at " .. + minetest.pos_to_string(pt.above)) minetest.add_node(pt.above, {name = plantname, param2 = 1}) tick(pt.above) if not (creative and creative.is_enabled_for diff --git a/mods/farming/init.lua b/mods/farming/init.lua index e6dfd57..96672fa 100644 --- a/mods/farming/init.lua +++ b/mods/farming/init.lua @@ -144,3 +144,13 @@ minetest.register_craft({ recipe = "farming:hoe_wood", burntime = 5, }) + +-- Register farming items as dungeon loot +if minetest.global_exists("dungeon_loot") then + dungeon_loot.register({ + {name = "farming:string", chance = 0.5, count = {1, 8}}, + {name = "farming:wheat", chance = 0.5, count = {2, 5}}, + {name = "farming:seed_cotton", chance = 0.4, count = {1, 4}, + types = {"normal"}}, + }) +end diff --git a/mods/farming/locale/farming.ms.tr b/mods/farming/locale/farming.ms.tr new file mode 100644 index 0000000..408f495 --- /dev/null +++ b/mods/farming/locale/farming.ms.tr @@ -0,0 +1,25 @@ +# textdomain: farming +Wooden Hoe=Cangkul Kayu +Stone Hoe=Cangkul Batu +Steel Hoe=Cangkul Keluli +Bronze Hoe=Cangkul Gangsa +Mese Hoe=Cangkul Mese +Diamond Hoe=Cangkul Intan +Wheat Seed=Benih Gandum +Flour=Tepung +Bread=Roti +Cotton Seed=Benih Kapas +String=Benang +Soil=Tanih +Wet Soil=Tanih Lembap +Dry Soil=Tanih Kering +Wet Dry Soil=Tanih Kering Lembap +Desert Sand Soil=Tanih Pasir Gurun +Wet Desert Sand Soil=Tanih Pasir Gurun Lembap +Straw=Jerami +Straw Stair=Tangga Jerami +Inner Straw Stair=Tangga Jerami Dalaman +Outer Straw Stair=Tangga Jerami Luaran +Straw Slab=Papak Jerami +Wheat=Gandum +Cotton=Kapas diff --git a/mods/farming/locale/farming.ru.tr b/mods/farming/locale/farming.ru.tr new file mode 100644 index 0000000..ad6249b --- /dev/null +++ b/mods/farming/locale/farming.ru.tr @@ -0,0 +1,25 @@ +# textdomain: farming +Wooden Hoe=Деревянная Мотыга +Stone Hoe=Каменная Мотыга +Steel Hoe=Стальная Мотыга +Bronze Hoe=Бронзовая Мотыга +Mese Hoe=Месе Мотыга +Diamond Hoe=Алмазная Мотыга +Wheat Seed=Семена Пшеницы +Flour=Мука +Bread=Хлеб +Cotton Seed=Семена Хлопка +String=Нить +Soil=Почва +Wet Soil=Влажная Почва +Dry Soil=Сухая Почва +Wet Dry Soil=Влажная Сухая Почва +Desert Sand Soil=Пустынная Песчаная Почва +Wet Desert Sand Soil=Влажная Пустынная Песчаная Почва +Straw=Солома +Straw Stair=Соломенная Ступень +Inner Straw Stair=Угловая Соломенная Ступень (Внутренний Угол) +Outer Straw Stair=Угловая Соломенная Ступень (Внешний Угол) +Straw Slab=Соломенная Плита +Wheat=Пшеница +Cotton=Хлопок diff --git a/mods/farming/locale/farming.se.tr b/mods/farming/locale/farming.se.tr new file mode 100644 index 0000000..6218e3a --- /dev/null +++ b/mods/farming/locale/farming.se.tr @@ -0,0 +1,25 @@ +# textdomain: farming +Wooden Hoe=Träsko +Stone Hoe=Stensko +Steel Hoe=Stålsko +Bronze Hoe=Bronssko +Mese Hoe=Mesesko +Diamond Hoe=Diamantsko +Wheat Seed=Vetefrö +Flour=Mjöl +Bread=Bröd +Cotton Seed=Bollumsfrö +String=Snöra +Soil=Odlningsmark +Wet Soil=Våt Odlningsmark +Dry Soil=Torr Odlningsmark +Wet Dry Soil=Våt Torr Odlningsmark +Desert Sand Soil=Öken Sand Odlningsmark +Wet Desert Sand Soil=Våt Öken Sand Odlningsmark +Straw=Halm +Straw Stair=Halmstrappa +Inner Straw Stair=Inre Halmstrappa +Outer Straw Stair=Yttre Halmstrappa +Straw Slab=Halmplatta +Wheat=Vete +Cotton=Bomull \ No newline at end of file diff --git a/mods/farming/locale/farming.zh_CN.tr b/mods/farming/locale/farming.zh_CN.tr new file mode 100644 index 0000000..d856288 --- /dev/null +++ b/mods/farming/locale/farming.zh_CN.tr @@ -0,0 +1,25 @@ +# textdomain: farming +Wooden Hoe=木锄头 +Stone Hoe=石锄头 +Steel Hoe=铁锄头 +Bronze Hoe=青铜锄头 +Mese Hoe=黄石锄头 +Diamond Hoe=钻石锄头 +Wheat Seed=小麦种子 +Flour=面粉 +Bread=面包 +Cotton Seed=棉花种子 +String=线 +Soil=土 +Wet Soil=湿土 +Dry Soil=干土 +Wet Dry Soil=湿干土 +Desert Sand Soil=沙漠沙土 +Wet Desert Sand Soil=湿沙漠沙土 +Straw=稻草 +Straw Stair=稻草台阶 +Inner Straw Stair=稻草内楼梯 +Outer Straw Stair=稻草外楼梯 +Straw Slab=稻草板 +Wheat=小麦 +Cotton=棉 diff --git a/mods/farming/locale/farming.zh_TW.tr b/mods/farming/locale/farming.zh_TW.tr new file mode 100644 index 0000000..f1b7a7a --- /dev/null +++ b/mods/farming/locale/farming.zh_TW.tr @@ -0,0 +1,25 @@ +# textdomain: farming +Wooden Hoe=木鋤頭 +Stone Hoe=石鋤頭 +Steel Hoe=鐵鋤頭 +Bronze Hoe=青銅鋤頭 +Mese Hoe=黃石鋤頭 +Diamond Hoe=鑽石鋤頭 +Wheat Seed=小麥種子 +Flour=麵粉 +Bread=麵包 +Cotton Seed=棉花種子 +String=線 +Soil=土 +Wet Soil=溼土 +Dry Soil=乾土 +Wet Dry Soil=溼乾土 +Desert Sand Soil=沙漠沙土 +Wet Desert Sand Soil=溼沙漠沙土 +Straw=稻草 +Straw Stair=稻草臺階 +Inner Straw Stair=稻草內樓梯 +Outer Straw Stair=稻草外樓梯 +Straw Slab=稻草板 +Wheat=小麥 +Cotton=棉 diff --git a/mods/farming/mod.conf b/mods/farming/mod.conf index c26c28f..9a76a6a 100644 --- a/mods/farming/mod.conf +++ b/mods/farming/mod.conf @@ -1,3 +1,4 @@ name = farming description = Minetest Game mod: farming depends = default, wool, stairs +optional_depends = dungeon_loot diff --git a/mods/fire/init.lua b/mods/fire/init.lua index 3c8a8fc..c35207e 100644 --- a/mods/fire/init.lua +++ b/mods/fire/init.lua @@ -34,7 +34,7 @@ local function flood_flame(pos, oldnode, newnode) if not (nodedef and nodedef.groups and nodedef.groups.igniter and nodedef.groups.igniter > 0) then minetest.sound_play("fire_extinguish_flame", - {pos = pos, max_hear_distance = 16, gain = 0.15}) + {pos = pos, max_hear_distance = 16, gain = 0.15}, true) end -- Remove the flame return false @@ -127,7 +127,8 @@ minetest.register_tool("fire:flint_and_steel", { local sound_pos = pointed_thing.above or user:get_pos() minetest.sound_play( "fire_flint_and_steel", - {pos = sound_pos, gain = 0.5, max_hear_distance = 8} + {pos = sound_pos, gain = 0.5, max_hear_distance = 8}, + true ) local player_name = user:get_player_name() if pointed_thing.type == "node" then @@ -154,7 +155,8 @@ minetest.register_tool("fire:flint_and_steel", { itemstack:add_wear(1000) -- Tool break sound if itemstack:get_count() == 0 and wdef.sound and wdef.sound.breaks then - minetest.sound_play(wdef.sound.breaks, {pos = sound_pos, gain = 0.5}) + minetest.sound_play(wdef.sound.breaks, {pos = sound_pos, + gain = 0.5}, true) end return itemstack end diff --git a/mods/fire/locale/fire.ms.tr b/mods/fire/locale/fire.ms.tr new file mode 100644 index 0000000..67b5bbe --- /dev/null +++ b/mods/fire/locale/fire.ms.tr @@ -0,0 +1,3 @@ +# textdomain: fire +Permanent Flame=Api Abadi +Flint and Steel=Pemetik Api diff --git a/mods/fire/locale/fire.ru.tr b/mods/fire/locale/fire.ru.tr new file mode 100644 index 0000000..e10813b --- /dev/null +++ b/mods/fire/locale/fire.ru.tr @@ -0,0 +1,3 @@ +# textdomain: fire +Permanent Flame=Вечный Огонь +Flint and Steel=Огниво и Сталь diff --git a/mods/fire/locale/fire.se.tr b/mods/fire/locale/fire.se.tr new file mode 100644 index 0000000..622925d --- /dev/null +++ b/mods/fire/locale/fire.se.tr @@ -0,0 +1,3 @@ +# textdomain: fire +Permanent Flame=Permanent Eld +Flint and Steel=Flinta och Stål \ No newline at end of file diff --git a/mods/fire/locale/fire.zh_CN.tr b/mods/fire/locale/fire.zh_CN.tr new file mode 100644 index 0000000..89aff0e --- /dev/null +++ b/mods/fire/locale/fire.zh_CN.tr @@ -0,0 +1,3 @@ +# textdomain: fire +Permanent Flame=永久火焰 +Flint and Steel=火石和钢 diff --git a/mods/fire/locale/fire.zh_TW.tr b/mods/fire/locale/fire.zh_TW.tr new file mode 100644 index 0000000..4c7a293 --- /dev/null +++ b/mods/fire/locale/fire.zh_TW.tr @@ -0,0 +1,3 @@ +# textdomain: fire +Permanent Flame=永久火焰 +Flint and Steel=火石和鋼 diff --git a/mods/fireflies/locale/fireflies.ms.tr b/mods/fireflies/locale/fireflies.ms.tr new file mode 100644 index 0000000..509d03d --- /dev/null +++ b/mods/fireflies/locale/fireflies.ms.tr @@ -0,0 +1,5 @@ +# textdomain: fireflies +Firefly=Kelip-Kelip +Hidden Firefly=Kelip-Kelip Tersembunyi +Bug Net=Jaring Pepijat +Firefly in a Bottle=Kelip-Kelip dalam Botol diff --git a/mods/fireflies/locale/fireflies.ru.tr b/mods/fireflies/locale/fireflies.ru.tr new file mode 100644 index 0000000..c05f288 --- /dev/null +++ b/mods/fireflies/locale/fireflies.ru.tr @@ -0,0 +1,5 @@ +# textdomain: fireflies +Firefly=Светлячок +Hidden Firefly=Притаившийся Светлячок +Bug Net=Сачок Для Ловли Насекомых +Firefly in a Bottle=Светлячок в Бутылке diff --git a/mods/fireflies/locale/fireflies.se.tr b/mods/fireflies/locale/fireflies.se.tr new file mode 100644 index 0000000..1bff782 --- /dev/null +++ b/mods/fireflies/locale/fireflies.se.tr @@ -0,0 +1,5 @@ +# textdomain: fireflies +Firefly=Eldfluga +Hidden Firefly=Gömd Eldfluga +Bug Net=Buggernät +Firefly in a Bottle=Eldfluga i en flaska \ No newline at end of file diff --git a/mods/fireflies/locale/fireflies.zh_CN.tr b/mods/fireflies/locale/fireflies.zh_CN.tr new file mode 100644 index 0000000..5971785 --- /dev/null +++ b/mods/fireflies/locale/fireflies.zh_CN.tr @@ -0,0 +1,5 @@ +# textdomain: fireflies +Firefly=萤火虫 +Hidden Firefly=隐藏的萤火虫 +Bug Net=虫网 +Firefly in a Bottle=放在瓶子里的萤火虫 diff --git a/mods/fireflies/locale/fireflies.zh_TW.tr b/mods/fireflies/locale/fireflies.zh_TW.tr new file mode 100644 index 0000000..af754a9 --- /dev/null +++ b/mods/fireflies/locale/fireflies.zh_TW.tr @@ -0,0 +1,5 @@ +# textdomain: fireflies +Firefly=螢火蟲 +Hidden Firefly=隱藏的螢火蟲 +Bug Net=蟲網 +Firefly in a Bottle=放在瓶子裡的螢火蟲 diff --git a/mods/flowers/locale/flowers.ms.tr b/mods/flowers/locale/flowers.ms.tr new file mode 100644 index 0000000..4e846eb --- /dev/null +++ b/mods/flowers/locale/flowers.ms.tr @@ -0,0 +1,12 @@ +# textdomain: flowers +Red Rose=Ros Merah +Orange Tulip=Tulip Jingga +Yellow Dandelion=Dandelion Kuning +Green Chrysanthemum=Kekwa Hijau +Blue Geranium=Geranium Biru +Viola=Violet +White Dandelion=Dandelion Putih +Black Tulip=Tulip Hitam +Red Mushroom=Cendawan Merah +Brown Mushroom=Cendawan Perang +Waterlily=Teratai diff --git a/mods/flowers/locale/flowers.ru.tr b/mods/flowers/locale/flowers.ru.tr new file mode 100644 index 0000000..d861e2a --- /dev/null +++ b/mods/flowers/locale/flowers.ru.tr @@ -0,0 +1,12 @@ +# textdomain: flowers +Red Rose=Красная Роза +Orange Tulip=Оранжевый Тюльпан +Yellow Dandelion=Желтый Одуванчик +Green Chrysanthemum=Зелёная Хризантема +Blue Geranium=Синяя Герань +Viola=Фиалка +White Dandelion=Белый Одуванчик +Black Tulip=Черный Тюльпан +Red Mushroom=Мухомор +Brown Mushroom=Коричневый Гриб +Waterlily=Кувшинка diff --git a/mods/flowers/locale/flowers.se.tr b/mods/flowers/locale/flowers.se.tr new file mode 100644 index 0000000..1bee645 --- /dev/null +++ b/mods/flowers/locale/flowers.se.tr @@ -0,0 +1,12 @@ +# textdomain: flowers +Red Rose=Röd ros +Orange Tulip=Orange Tulpan +Yellow Dandelion=Gul Maskros +Green Chrysanthemum=Grön Krysantemum +Blue Geranium=Blå Geranium +Viola=Violett Viola +White Dandelion=Vit Maskros +Black Tulip=Svart Tulpan +Red Mushroom=Röd Svamp +Brown Mushroom=Brun Svamp +Waterlily=Näckros \ No newline at end of file diff --git a/mods/flowers/locale/flowers.zh_CN.tr b/mods/flowers/locale/flowers.zh_CN.tr new file mode 100644 index 0000000..3139dfb --- /dev/null +++ b/mods/flowers/locale/flowers.zh_CN.tr @@ -0,0 +1,12 @@ +# textdomain: flowers +Red Rose=红玫瑰 +Orange Tulip=橙郁金香 +Yellow Dandelion=黄蒲公英 +Green Chrysanthemum=绿菊花 +Blue Geranium=蓝天竺葵 +Viola=三色堇 +White Dandelion=白蒲公英 +Black Tulip=黑郁金香 +Red Mushroom=红蘑菇 +Brown Mushroom=棕蘑菇 +Waterlily=睡莲 diff --git a/mods/flowers/locale/flowers.zh_TW.tr b/mods/flowers/locale/flowers.zh_TW.tr new file mode 100644 index 0000000..a3a3ec5 --- /dev/null +++ b/mods/flowers/locale/flowers.zh_TW.tr @@ -0,0 +1,12 @@ +# textdomain: flowers +Red Rose=紅玫瑰 +Orange Tulip=橙鬱金香 +Yellow Dandelion=黃蒲公英 +Green Chrysanthemum=綠菊花 +Blue Geranium=藍天竺葵 +Viola=三色堇 +White Dandelion=白蒲公英 +Black Tulip=黑鬱金香 +Red Mushroom=紅蘑菇 +Brown Mushroom=棕蘑菇 +Waterlily=睡蓮 diff --git a/mods/flowers/mapgen.lua b/mods/flowers/mapgen.lua index 85e19b7..f282f50 100644 --- a/mods/flowers/mapgen.lua +++ b/mods/flowers/mapgen.lua @@ -100,7 +100,7 @@ local function register_flower(seed, flower_name) octaves = 3, persist = 0.6 }, - biomes = {"grassland", "deciduous_forest", "floatland_grassland"}, + biomes = {"grassland", "deciduous_forest"}, y_max = 31000, y_min = 1, decoration = "flowers:"..flower_name, @@ -121,8 +121,7 @@ local function register_mushroom(mushroom_name) octaves = 3, persist = 0.66 }, - biomes = {"deciduous_forest", "coniferous_forest", - "floatland_coniferous_forest"}, + biomes = {"deciduous_forest", "coniferous_forest"}, y_max = 31000, y_min = 1, decoration = "flowers:"..mushroom_name, diff --git a/mods/game_commands/init.lua b/mods/game_commands/init.lua index 139a879..e038be1 100644 --- a/mods/game_commands/init.lua +++ b/mods/game_commands/init.lua @@ -13,7 +13,7 @@ minetest.register_chatcommand("killme", { player:set_hp(0) return true else - for _, callback in pairs(core.registered_on_respawnplayers) do + for _, callback in pairs(minetest.registered_on_respawnplayers) do if callback(player) then return true end diff --git a/mods/game_commands/locale/game_commands.ms.tr b/mods/game_commands/locale/game_commands.ms.tr new file mode 100644 index 0000000..ed4a0bd --- /dev/null +++ b/mods/game_commands/locale/game_commands.ms.tr @@ -0,0 +1,4 @@ +# textdomain: game_commands +Kill yourself to respawn=Bunuh diri anda untuk lahir semula +No static_spawnpoint defined=Tiada titik permulaan statik (tetapan static_spawnpoint) ditakrifkan +You need to be online to be killed!=Anda mesti berada dalam talian untuk dibunuh! diff --git a/mods/game_commands/locale/game_commands.ru.tr b/mods/game_commands/locale/game_commands.ru.tr new file mode 100644 index 0000000..26d9e08 --- /dev/null +++ b/mods/game_commands/locale/game_commands.ru.tr @@ -0,0 +1,4 @@ +# textdomain: game_commands +Kill yourself to respawn=Убейте себя, чтобы возродиться +No static_spawnpoint defined=static_spawnpoint не определён +You need to be online to be killed!=Вы должны быть онлайн, чтобы убить себя! diff --git a/mods/game_commands/locale/game_commands.se.tr b/mods/game_commands/locale/game_commands.se.tr new file mode 100644 index 0000000..259e1db --- /dev/null +++ b/mods/game_commands/locale/game_commands.se.tr @@ -0,0 +1,4 @@ +# textdomain: game_commands +Kill yourself to respawn=Döda dig själv för att respawna +No static_spawnpoint defined=Ingen static_spawnpoint definierat +You need to be online to be killed!=Du måsta vara online för att bli dödad! \ No newline at end of file diff --git a/mods/game_commands/locale/game_commands.zh_CN.tr b/mods/game_commands/locale/game_commands.zh_CN.tr new file mode 100644 index 0000000..3c69dfb --- /dev/null +++ b/mods/game_commands/locale/game_commands.zh_CN.tr @@ -0,0 +1,4 @@ +# textdomain: game_commands +Kill yourself to respawn=杀死自己并重生 +No static_spawnpoint defined=static_spawnpoint 未定义 +You need to be online to be killed!=您需要在线才能被杀死! diff --git a/mods/game_commands/locale/game_commands.zh_TW.tr b/mods/game_commands/locale/game_commands.zh_TW.tr new file mode 100644 index 0000000..34e148d --- /dev/null +++ b/mods/game_commands/locale/game_commands.zh_TW.tr @@ -0,0 +1,4 @@ +# textdomain: game_commands +Kill yourself to respawn=殺死自己並重生 +No static_spawnpoint defined=static_spawnpoint 未定義 +You need to be online to be killed!=您需要在線才能被殺死! diff --git a/mods/inventory_plus/inventory_plus/init.lua b/mods/inventory_plus/inventory_plus/init.lua index b38f21f..11b6e0f 100644 --- a/mods/inventory_plus/inventory_plus/init.lua +++ b/mods/inventory_plus/inventory_plus/init.lua @@ -117,11 +117,13 @@ end inventory_plus.set_inventory_formspec = function(player,formspec) if minetest.setting_getbool("creative_mode") then -- if creative mode is on then wait a bit - minetest.after(0.01,function() + minetest.after(0.05,function() player:set_inventory_formspec(formspec) end) else - player:set_inventory_formspec(formspec) + minetest.after(0.05,function() + player:set_inventory_formspec(formspec) + end) end end @@ -146,7 +148,8 @@ inventory_plus.get_formspec = function(player,page) end -- craft page if page=="main" or page==""then - if minetest.setting_getbool("creative_mode") then + local pri = minetest.get_player_privs(player:get_player_name()) + if minetest.setting_getbool("creative_mode") or pri.creative then sfinv.set_player_inventory_formspec(player) return player:get_inventory_formspec() --.. get_buttons(6,0,2) @@ -171,7 +174,8 @@ end) minetest.register_on_player_receive_fields(function(player, formname, fields) -- main if fields.main then - if minetest.setting_getbool("creative_mode") then + local pri = minetest.get_player_privs(player:get_player_name()) + if minetest.setting_getbool("creative_mode") or pri.creative then minetest.after(0.01,function() inventory_plus.set_inventory_formspec(player, inventory_plus.get_formspec(player,"main")) end) diff --git a/mods/map/locale/map.ms.tr b/mods/map/locale/map.ms.tr new file mode 100644 index 0000000..8564f91 --- /dev/null +++ b/mods/map/locale/map.ms.tr @@ -0,0 +1,3 @@ +# textdomain: map +Mapping Kit=Alat Pemetaan +Use with 'Minimap' key=Guna dengan kekunci 'Peta Mini' diff --git a/mods/map/locale/map.ru.tr b/mods/map/locale/map.ru.tr new file mode 100644 index 0000000..73120b6 --- /dev/null +++ b/mods/map/locale/map.ru.tr @@ -0,0 +1,3 @@ +# textdomain: map +Mapping Kit=Картографический комплект +Use with 'Minimap' key=Используйте с ключом 'Minimap' diff --git a/mods/map/locale/map.se.tr b/mods/map/locale/map.se.tr new file mode 100644 index 0000000..c1bb01a --- /dev/null +++ b/mods/map/locale/map.se.tr @@ -0,0 +1,3 @@ +# textdomain: map +Mapping Kit=Kartläggningssats +Use with 'Minimap' key=Använd med 'Minimap' tangent \ No newline at end of file diff --git a/mods/map/locale/map.zh_CN.tr b/mods/map/locale/map.zh_CN.tr new file mode 100644 index 0000000..cec95bb --- /dev/null +++ b/mods/map/locale/map.zh_CN.tr @@ -0,0 +1,3 @@ +# textdomain: map +Mapping Kit=地图绘制工具包 +Use with 'Minimap' key=与“迷你地图”键一起使用 diff --git a/mods/map/locale/map.zh_TW.tr b/mods/map/locale/map.zh_TW.tr new file mode 100644 index 0000000..a098124 --- /dev/null +++ b/mods/map/locale/map.zh_TW.tr @@ -0,0 +1,3 @@ +# textdomain: map +Mapping Kit=地圖繪製工具包 +Use with 'Minimap' key=與“迷你地圖”鍵一起使用 diff --git a/mods/mobs/api.lua b/mods/mobs/api.lua index 2a8d742..feb9857 100644 --- a/mods/mobs/api.lua +++ b/mods/mobs/api.lua @@ -6,9 +6,9 @@ local use_cmi = minetest.global_exists("cmi") mobs = { mod = "redo", - version = "20190124", + version = "20200412", intllib = S, - invis = minetest.global_exists("invisibility") and invisibility or {}, + invis = minetest.global_exists("invisibility") and invisibility or {} } -- creative check @@ -79,11 +79,11 @@ local node_snow = "default:snow" mobs.fallback_node = minetest.registered_aliases["mapgen_dirt"] or "default:dirt" local mob_class = { - stepheight = 1.1, -- was 0.6 + stepheight = 1.1, fly_in = "air", owner = "", order = "", - jump_height = 4, -- was 6 + jump_height = 4, lifetimer = 180, -- 3 minutes physical = true, collisionbox = {-0.25, -0.25, -0.25, 0.25, 0.25, 0.25}, @@ -106,6 +106,7 @@ local mob_class = { jump = true, knock_back = true, walk_chance = 50, + stand_chance = 30, attack_chance = 5, passive = false, blood_amount = 5, @@ -114,7 +115,7 @@ local mob_class = { floats = 1, -- floats in water by default replace_offset = 0, timer = 0, - metadata3 = 0, + metadata3 = 0, env_damage_timer = 0, -- only used when state = "attack" tamed = false, pause_timer = 0, @@ -142,8 +143,9 @@ local mob_class = { attack_players = true, attack_npcs = true, facing_fence = false, - _cmi_is_mob = true, + _cmi_is_mob = true } + local mob_class_meta = {__index = mob_class} -- play sound @@ -229,10 +231,16 @@ function mob_class:set_velocity(v) local yaw = (self.object:get_yaw() or 0) + self.rotate + -- nil check for velocity + v = v or 0 + + -- set velocity with hard limit of 10 + local vel = self.object:get_velocity() + self.object:set_velocity({ - x = (sin(yaw) * -v) + c_x, - y = self.object:get_velocity().y, - z = (cos(yaw) * v) + c_y, + x = max(-10, min((sin(yaw) * -v) + c_x, 10)), + y = max(-10, min((vel and vel.y or 0), 10)), + z = max(-10, min((cos(yaw) * v) + c_y, 10)) }) end @@ -247,6 +255,8 @@ function mob_class:get_velocity() local v = self.object:get_velocity() + if not v then return 0 end + return (v.x * v.x + v.z * v.z) ^ 0.5 end @@ -278,15 +288,15 @@ end -- set defined animation -function mob_class:set_animation(anim) +function mob_class:set_animation(anim, force) if not self.animation or not anim then return end self.animation.current = self.animation.current or "" - -- only set different animation for attacks when setting to same set - if anim ~= "punch" and anim ~= "shoot" + -- only use different animation for attacks when using same set + if force ~= true and anim ~= "punch" and anim ~= "shoot" and string.find(self.animation.current, anim) then return end @@ -330,7 +340,7 @@ end -- check line of sight (BrunoMine) -function mob_class:line_of_sight(pos1, pos2, stepsize) +local line_of_sight = function(self, pos1, pos2, stepsize) stepsize = stepsize or 1 @@ -393,7 +403,6 @@ function mob_class:line_of_sight(pos1, pos2, stepsize) -- New Nodename found nn = minetest.get_node(pos).name - end return false @@ -401,7 +410,7 @@ end -- check line of sight (by BrunoMine, tweaked by Astrobe) -function mob_class:NEW_line_of_sight(pos1, pos2, stepsize) +local new_line_of_sight = function(self, pos1, pos2, stepsize) if not pos1 or not pos2 then return end @@ -447,10 +456,47 @@ function mob_class:NEW_line_of_sight(pos1, pos2, stepsize) return false end +-- check line of sight using raycasting (thanks Astrobe) +local ray_line_of_sight = function(self, pos1, pos2) + + local ray = minetest.raycast(pos1, pos2, true, false) + local thing = ray:next() + + while thing do + +-- if thing.type == "object" +-- and thing.ref ~= self.object +-- and not thing.ref:is_player() then return false end + + if thing.type == "node" then + + local name = minetest.get_node(thing.under).name + + if minetest.registered_items[name] + and minetest.registered_items[name].walkable then return false end + end + + thing = ray:next() + end + + return true +end + +-- detect if using minetest 5.0 by searching for permafrost node +local is_50 = minetest.registered_nodes["default:permafrost"] + +function mob_class:line_of_sight(pos1, pos2, stepsize) + + if is_50 then -- only use if minetest 5.0 is detected + return ray_line_of_sight(self, pos1, pos2) + end + + return line_of_sight(self, pos1, pos2, stepsize) +end + -- global function function mobs:line_of_sight(entity, pos1, pos2, stepsize) - - return mob_class.line_of_sight(entity, pos1, pos2, stepsize) + return entity:line_of_sight(pos1, pos2, stepsize) end @@ -491,7 +537,7 @@ function mob_class:flight_check() local def = minetest.registered_nodes[self.standing_in] - if not def then return false end -- nil check + if not def then return false end if type(self.fly_in) == "string" and self.standing_in == self.fly_in then @@ -549,11 +595,7 @@ function mob_class:do_stay_near() local target = nearby_nodes[math.random(1, #nearby_nodes)] local direction = vector.direction(pos, target) - - local vec = { - x = target.x - pos.x, - z = target.z - pos.z - } + local vec = {x = target.x - pos.x, z = target.z - pos.z} yaw = (atan(vec.z / vec.x) + pi / 2) - self.rotate @@ -594,7 +636,7 @@ local effect = function(pos, amount, texture, min_size, max_size, radius, gravit minsize = min_size, maxsize = max_size, texture = texture, - glow = glow, + glow = glow }) end @@ -627,6 +669,11 @@ end -- drop items function mob_class:item_drop() + local pos = self.object:get_pos() + + -- check for drops function + self.drops = type(self.drops) == "function" and self.drops(pos) or self.drops + -- check for nil or no drops if not self.drops or #self.drops == 0 then return @@ -643,7 +690,6 @@ function mob_class:item_drop() and self.cause_of_death.puncher:is_player() or nil local obj, item, num - local pos = self.object:get_pos() for n = 1, #self.drops do @@ -676,7 +722,7 @@ function mob_class:item_drop() obj:set_velocity({ x = random(-10, 10) / 9, y = 6, - z = random(-10, 10) / 9, + z = random(-10, 10) / 9 }) elseif obj then @@ -694,7 +740,7 @@ function mob_class:check_for_death(cmi_cause) -- has health actually changed? if self.health == self.old_health and self.health > 0 then - return + return false end self.old_health = self.health @@ -802,6 +848,11 @@ function mob_class:is_at_cliff() return false end + -- if object no longer exists then return + if not self.object:get_luaentity() then + return false + end + local yaw = self.object:get_yaw() local dir_x = -sin(yaw) * (self.collisionbox[4] + 0.5) local dir_z = cos(yaw) * (self.collisionbox[4] + 0.5) @@ -810,8 +861,7 @@ function mob_class:is_at_cliff() if minetest.line_of_sight( {x = pos.x + dir_x, y = ypos, z = pos.z + dir_z}, - {x = pos.x + dir_x, y = ypos - self.fear_height, z = pos.z + dir_z} - , 1) then + {x = pos.x + dir_x, y = ypos - self.fear_height, z = pos.z + dir_z}, 1) then return true end @@ -862,21 +912,21 @@ function mob_class:do_env_damage() else self.object:remove() end - return + return true end -- is mob light sensative, or scared of the dark :P if self.light_damage ~= 0 then + local light = minetest.get_node_light(pos) or 0 + if light >= self.light_damage_min and light <= self.light_damage_max then if self.name == "mobs:dog" or self.name == "mobs:cat" or self.name == "mobs:sheep" or self.name == "mobs:dragon" or self.name == "mobs:knight_1248" or self.name == "mobs:fox" or self.name == "mobs:tortoise" then else self.health = self.health - self.light_damage effect(pos, 5, "tnt_smoke.png") - if self:check_for_death({type = "light"}) then - return - end + if self:check_for_death({type = "light"}) then return true end end end end @@ -888,44 +938,49 @@ function mob_class:do_env_damage() -- water if self.water_damage and nodef.groups.water then + if self.water_damage ~= 0 then if self.name == "mobs:dog" or self.name == "mobs:cat" or self.name == "mobs:sheep" or self.name == "mobs:dragon" or self.name == "mobs:knight_1248" or self.name == "mobs:fox" or self.name == "mobs:tortoise" then else self.health = self.health - self.water_damage - effect(pos, 5, "bubble.png", nil, nil, 1, nil) - if self:check_for_death({type = "environment",pos = pos, node = self.standing_in}) then - return - end - end - + effect(pos, 5, "bubble.png", nil, nil, 1, nil) + + if self:check_for_death({type = "environment", + pos = pos, node = self.standing_in}) then return true end + end end + -- lava or fire or ignition source elseif self.lava_damage and nodef.groups.igniter then -- and (nodef.groups.lava -- or self.standing_in == node_fire -- or self.standing_in == node_permanent_flame) then + if self.lava_damage ~= 0 then if self.name == "mobs:dog" or self.name == "mobs:cat" or self.name == "mobs:sheep" or self.name == "mobs:dragon" or self.name == "mobs:knight_1248" or self.name == "mobs:fox" or self.name == "mobs:tortoise" then else self.health = self.health - self.lava_damage + effect(pos, 5, "fire_basic_flame.png", nil, nil, 1, nil) - if self:check_for_death({type = "environment",pos = pos, node = self.standing_in, hot = true}) then - return - end + + if self:check_for_death({type = "environment", pos = pos, + node = self.standing_in, hot = true}) then return true end end + end -- damage_per_second node check elseif nodef.damage_per_second ~= 0 then if self.name == "mobs:dog" or self.name == "mobs:cat" or self.name == "mobs:sheep" or self.name == "mobs:dragon" or self.name == "mobs:knight_1248" or self.name == "mobs:fox" or self.name == "mobs:tortoise" then - else + else self.health = self.health - nodef.damage_per_second + effect(pos, 5, "tnt_smoke.png") - if self:check_for_death({type = "environment",pos = pos, node = self.standing_in}) then - return - end + + if self:check_for_death({type = "environment", + pos = pos, node = self.standing_in}) then return true end end end --[[ @@ -938,10 +993,10 @@ function mob_class:do_env_damage() self.health = self.health - self.suffocation if self:check_for_death({type = "environment", - pos = pos, node = self.standing_in}) then return end + pos = pos, node = self.standing_in}) then return true end end ]] - self:check_for_death({type = "unknown"}) + return self:check_for_death({type = "unknown"}) end @@ -968,6 +1023,9 @@ function mob_class:do_jump() local pos = self.object:get_pos() local yaw = self.object:get_yaw() + -- sanity check + if not yaw then return false end + -- what is mob standing on? pos.y = pos.y + self.collisionbox[2] - 0.2 @@ -1017,9 +1075,9 @@ function mob_class:do_jump() if self.object:get_luaentity() then self.object:set_acceleration({ - x = v.x * 2,--1.5, + x = v.x * 2, y = 0, - z = v.z * 2,--1.5 + z = v.z * 2 }) end end, self, v) @@ -1130,7 +1188,7 @@ function mob_class:breed() mesh = self.base_mesh, visual_size = self.base_size, collisionbox = self.base_colbox, - selectionbox = self.base_selbox, + selectionbox = self.base_selbox }) -- custom function when child grows up @@ -1245,7 +1303,7 @@ function mob_class:breed() textures = textures, visual_size = { x = self.base_size.x * .5, - y = self.base_size.y * .5, + y = self.base_size.y * .5 }, collisionbox = { self.base_colbox[1] * .5, @@ -1253,7 +1311,7 @@ function mob_class:breed() self.base_colbox[3] * .5, self.base_colbox[4] * .5, self.base_colbox[5] * .5, - self.base_colbox[6] * .5, + self.base_colbox[6] * .5 }, selectionbox = { self.base_selbox[1] * .5, @@ -1261,7 +1319,7 @@ function mob_class:breed() self.base_selbox[3] * .5, self.base_selbox[4] * .5, self.base_selbox[5] * .5, - self.base_selbox[6] * .5, + self.base_selbox[6] * .5 }, }) -- tamed and owned by parents' owner @@ -1312,17 +1370,22 @@ function mob_class:replace(pos) -- print ("replace node = ".. minetest.get_node(pos).name, pos.y) - local oldnode = {name = what} - local newnode = {name = with} - local on_replace_return - if self.on_replace then - on_replace_return = self:on_replace(pos, oldnode, newnode) + + local oldnode = what + local newnode = with + + -- convert any group: replacements to actual node name + if oldnode:find("group:") then + oldnode = minetest.get_node(pos).name + end + + if self:on_replace(pos, oldnode, newnode) == false then + return + end end - if on_replace_return ~= false then - minetest.set_node(pos, {name = with}) - end + minetest.set_node(pos, {name = with}) end end @@ -1619,7 +1682,7 @@ local specific_attack = function(list, what) end --- general attack function for all mobs ========== +-- general attack function for all mobs function mob_class:general_attack() -- return if already attacking, passive or docile during day @@ -1996,7 +2059,7 @@ function mob_class:do_states(dtime) and self.walk_chance ~= 0 and self.facing_fence ~= true and random(1, 100) <= self.walk_chance - and self:is_at_cliff() == false then + and self.at_cliff == false then self:set_velocity(self.walk_velocity) self.state = "walk" @@ -2077,15 +2140,13 @@ function mob_class:do_states(dtime) end -- stand for great fall in front - local temp_is_cliff = self:is_at_cliff() - if self.facing_fence == true - or temp_is_cliff - or random(1, 100) <= 30 then + or self.at_cliff + or random(1, 100) <= self.stand_chance then self:set_velocity(0) self.state = "stand" - self:set_animation("stand") + self:set_animation("stand", true) else self:set_velocity(self.walk_velocity) @@ -2106,7 +2167,7 @@ function mob_class:do_states(dtime) -- stop after 5 seconds or when at cliff if self.runaway_timer > 5 - or self:is_at_cliff() + or self.at_cliff or self.order == "stand" then self.runaway_timer = 0 self:set_velocity(0) @@ -2208,9 +2269,9 @@ function mob_class:do_states(dtime) self.blinktimer = 0 if self.blinkstatus then - self.object:settexturemod("") + self.object:set_texture_mod("") else - self.object:settexturemod("^[brighten") + self.object:set_texture_mod("^[brighten") end self.blinkstatus = not self.blinkstatus @@ -2232,13 +2293,14 @@ function mob_class:do_states(dtime) else self.object:remove() end + if minetest.get_modpath("tnt") and tnt and tnt.boom and not minetest.is_protected(pos, "") then tnt.boom(pos, { radius = node_break_radius, damage_radius = entity_damage_radius, - sound = self.sounds.explode, + sound = self.sounds.explode }) else @@ -2357,7 +2419,7 @@ function mob_class:do_states(dtime) self:smart_mobs(s, p, dist, dtime) end - if self:is_at_cliff() then + if self.at_cliff then self:set_velocity(0) self:set_animation("stand") @@ -2389,13 +2451,7 @@ function mob_class:do_states(dtime) if self.timer > 1 then self.timer = 0 - --- if self.double_melee_attack --- and random(1, 2) == 1 then --- self:set_animation("punch2") --- else - self:set_animation("punch") --- end + self:set_animation("punch") local p2 = p local s2 = s @@ -2500,6 +2556,9 @@ function mob_class:falling(pos) -- floating in water (or falling) local v = self.object:get_velocity() + -- sanity check + if not v then return end + if v.y > 0 then -- apply gravity when moving up @@ -2546,13 +2605,15 @@ function mob_class:falling(pos) if self.name == "mobs:dog" or self.name == "mobs:cat" or self.name == "mobs:sheep" or self.name == "mobs:dragon" or self.name == "mobs:knight_1248" or self.name == "mobs:fox" or self.name == "mobs:tortoise" then else self.health = self.health - floor(d - 5) + effect(pos, 5, "tnt_smoke.png", 1, 2, 2, nil) + if self:check_for_death({type = "fall"}) then return end end end - + self.old_y = self.object:get_pos().y end end @@ -2652,7 +2713,7 @@ function mob_class:on_punch(hitter, tflp, tool_capabilities, dir) -- add weapon wear punch_interval = tool_capabilities.full_punch_interval or 1.4 - --[[ toolrank support + -- toolrank support local wear = floor((punch_interval / 75) * 9000) if mobs.is_creative(hitter:get_player_name()) then @@ -2673,7 +2734,7 @@ function mob_class:on_punch(hitter, tflp, tool_capabilities, dir) end hitter:set_wielded_item(weapon) ---]] + -- only play hit sound and show blood effects if damage is 1 or over if damage >= 1 then @@ -2713,9 +2774,9 @@ function mob_class:on_punch(hitter, tflp, tool_capabilities, dir) -- do damage if self.name == "mobs:dog" or self.name == "mobs:cat" or self.name == "mobs:sheep" or self.name == "mobs:dragon" or self.name == "mobs:knight_1248" or self.name == "mobs:fox" or self.name == "mobs:tortoise" then - else + else self.health = self.health - floor(damage) - end + end -- exit here if dead, check for tools with fire damage local hot = tool_capabilities and tool_capabilities.damage_groups @@ -2741,11 +2802,14 @@ function mob_class:on_punch(hitter, tflp, tool_capabilities, dir) end -- END if damage -- knock back effect (only on full punch) - --[[ if self.knock_back and tflp >= punch_interval then local v = self.object:get_velocity() + + -- sanity check + if not v then return end + local kb = damage or 1 local up = 2 @@ -2769,7 +2833,7 @@ function mob_class:on_punch(hitter, tflp, tool_capabilities, dir) self.pause_timer = 0.25 end - --]] + -- if skittish then run away if self.runaway == true and self.order ~= "stand" then @@ -2913,6 +2977,12 @@ function mob_class:mob_activate(staticdata, def, dtime) end end + -- force current model into mob + self.mesh = def.mesh + self.base_mesh = def.mesh + self.collisionbox = def.collisionbox + self.selectionbox = def.selectionbox + -- select random texture, set model and size if not self.base_texture then @@ -2983,7 +3053,7 @@ function mob_class:mob_activate(staticdata, def, dtime) end if self.health == 0 then - self.health = random (self.hp_min, self.hp_max) + self.health = random(self.hp_min, self.hp_max) end -- pathfinding init @@ -3258,6 +3328,8 @@ function mob_class:on_step(dtime) minetest.get_player_by_name(self.owner):set_attribute("dragonx", ""..math.floor(self.object:getpos().x+0.5)) minetest.get_player_by_name(self.owner):set_attribute("dragony", ""..math.floor(self.object:getpos().y+0.5)) minetest.get_player_by_name(self.owner):set_attribute("dragonz", ""..math.floor(self.object:getpos().z+0.5)) + minetest.get_player_by_name(self.owner):set_attribute("dragon_meta1", ""..self.metadata) + minetest.get_player_by_name(self.owner):set_attribute("dragon_meta2", ""..self.metadata2) end end if self.name == "mobs:sheep" then @@ -3265,6 +3337,8 @@ function mob_class:on_step(dtime) minetest.get_player_by_name(self.owner):set_attribute("sheepx", ""..math.floor(self.object:getpos().x+0.5)) minetest.get_player_by_name(self.owner):set_attribute("sheepy", ""..math.floor(self.object:getpos().y+0.5)) minetest.get_player_by_name(self.owner):set_attribute("sheepz", ""..math.floor(self.object:getpos().z+0.5)) + minetest.get_player_by_name(self.owner):set_attribute("sheep_meta1", ""..self.metadata) + minetest.get_player_by_name(self.owner):set_attribute("sheep_meta2", ""..self.metadata2) end end @@ -3273,6 +3347,8 @@ function mob_class:on_step(dtime) minetest.get_player_by_name(self.owner):set_attribute("foxx", ""..math.floor(self.object:getpos().x+0.5)) minetest.get_player_by_name(self.owner):set_attribute("foxy", ""..math.floor(self.object:getpos().y+0.5)) minetest.get_player_by_name(self.owner):set_attribute("foxz", ""..math.floor(self.object:getpos().z+0.5)) + minetest.get_player_by_name(self.owner):set_attribute("fox_meta1", ""..self.metadata) + minetest.get_player_by_name(self.owner):set_attribute("fox_meta2", ""..self.metadata2) end end if self.name == "mobs:tortoise" then @@ -3280,6 +3356,8 @@ function mob_class:on_step(dtime) minetest.get_player_by_name(self.owner):set_attribute("tortoisex", ""..math.floor(self.object:getpos().x+0.5)) minetest.get_player_by_name(self.owner):set_attribute("tortoisey", ""..math.floor(self.object:getpos().y+0.5)) minetest.get_player_by_name(self.owner):set_attribute("tortoisez", ""..math.floor(self.object:getpos().z+0.5)) + minetest.get_player_by_name(self.owner):set_attribute("tortoise_meta1", ""..self.metadata) + minetest.get_player_by_name(self.owner):set_attribute("tortoise_meta2", ""..self.metadata2) end end if self.name == "mobs:knight_1248" then @@ -3287,16 +3365,30 @@ function mob_class:on_step(dtime) minetest.get_player_by_name(self.owner):set_attribute("knightx", ""..math.floor(self.object:getpos().x+0.5)) minetest.get_player_by_name(self.owner):set_attribute("knighty", ""..math.floor(self.object:getpos().y+0.5)) minetest.get_player_by_name(self.owner):set_attribute("knightz", ""..math.floor(self.object:getpos().z+0.5)) + minetest.get_player_by_name(self.owner):set_attribute("knight_meta1", ""..self.metadata) + minetest.get_player_by_name(self.owner):set_attribute("knight_meta2", ""..self.metadata2) end - end - - if self.name == "mobs:dog" and self.metadata2 == 1 then + if self.name == "mobs:dog" then if self.owner and minetest.get_player_by_name(self.owner) then minetest.get_player_by_name(self.owner):set_attribute("dogx", ""..math.floor(self.object:getpos().x+0.5)) minetest.get_player_by_name(self.owner):set_attribute("dogy", ""..math.floor(self.object:getpos().y+0.5)) minetest.get_player_by_name(self.owner):set_attribute("dogz", ""..math.floor(self.object:getpos().z+0.5)) + minetest.get_player_by_name(self.owner):set_attribute("dog_meta1", ""..self.metadata) + minetest.get_player_by_name(self.owner):set_attribute("dog_meta2", ""..self.metadata2) end + end + if self.name == "mobs:cat" then + if self.owner and minetest.get_player_by_name(self.owner) then + minetest.get_player_by_name(self.owner):set_attribute("catx", ""..math.floor(self.object:getpos().x+0.5)) + minetest.get_player_by_name(self.owner):set_attribute("caty", ""..math.floor(self.object:getpos().y+0.5)) + minetest.get_player_by_name(self.owner):set_attribute("catz", ""..math.floor(self.object:getpos().z+0.5)) + minetest.get_player_by_name(self.owner):set_attribute("cat_meta1", ""..self.metadata) + minetest.get_player_by_name(self.owner):set_attribute("cat_meta2", ""..self.metadata2) + end + end + + if self.name == "mobs:dog" and self.metadata2 == 1 then local pos = self.object:getpos() local all_objects = minetest.get_objects_inside_radius(pos, 15) local players = {} @@ -3316,11 +3408,6 @@ function mob_class:on_step(dtime) end end if self.name == "mobs:cat" and self.metadata2 == 1 then - if self.owner and minetest.get_player_by_name(self.owner) then - minetest.get_player_by_name(self.owner):set_attribute("catx", ""..math.floor(self.object:getpos().x+0.5)) - minetest.get_player_by_name(self.owner):set_attribute("caty", ""..math.floor(self.object:getpos().y+0.5)) - minetest.get_player_by_name(self.owner):set_attribute("catz", ""..math.floor(self.object:getpos().z+0.5)) - end local pos = self.object:getpos() local all_objects = minetest.get_objects_inside_radius(pos, 15) local players = {} @@ -3358,7 +3445,7 @@ function mob_class:on_step(dtime) minetest.get_player_by_name(self.owner):get_inventory():set_size("dragon2",1) self.object:setpos({x = minetest.get_player_by_name(self.owner):getpos().x, y = minetest.get_player_by_name(self.owner):getpos().y+1, z = minetest.get_player_by_name(self.owner):getpos().z+1}) local numd = minetest.get_player_by_name(self.owner):get_inventory():get_stack("dragon2", 1):get_count() - if numd > 50 then + if numd > 25 then if minetest.get_player_by_name(self.owner):get_inventory():get_stack("dragon", 1):get_name() == "tutorial:dragon_crystal" then minetest.get_player_by_name(self.owner):get_inventory():add_item("main", "tutorial:geschenk_gem") else @@ -3392,7 +3479,7 @@ function mob_class:on_step(dtime) minetest.get_player_by_name(self.owner):get_inventory():set_size("sheep3",1) self.object:setpos({x = minetest.get_player_by_name(self.owner):getpos().x, y = minetest.get_player_by_name(self.owner):getpos().y+1, z = minetest.get_player_by_name(self.owner):getpos().z+1}) local numd = minetest.get_player_by_name(self.owner):get_inventory():get_stack("sheep2", 1):get_count() - if numd > 50 then + if numd > 25 then minetest.get_player_by_name(self.owner):get_inventory():add_item("main", minetest.get_player_by_name(self.owner):get_inventory():get_stack("sheep3", 1)) minetest.get_player_by_name(self.owner):get_inventory():set_stack("sheep2", 1, "") else @@ -3491,7 +3578,7 @@ function mob_class:on_step(dtime) self.object:setpos({x = minetest.get_player_by_name(self.owner):getpos().x, y = minetest.get_player_by_name(self.owner):getpos().y+1, z = minetest.get_player_by_name(self.owner):getpos().z+1}) minetest.get_player_by_name(self.owner):get_inventory():set_size("tortoise2",1) local numd = minetest.get_player_by_name(self.owner):get_inventory():get_stack("tortoise2", 1):get_count() - if numd > 50 then + if numd > 25 then if minetest.get_player_by_name(self.owner):get_inventory():get_stack("tortoise", 1):get_name() == "tutorial:dragon_crystal" then minetest.get_player_by_name(self.owner):get_inventory():add_item("main", "tutorial:geschenk_gem2") else @@ -3567,7 +3654,10 @@ function mob_class:on_step(dtime) end local pos = self.object:get_pos() - local yaw = 0 + local yaw = self.object:get_yaw() + + -- early warning check, if no yaw then no entity, skip rest of function + if not yaw then return end -- get node at foot level every quarter second self.node_timer = (self.node_timer or 0) + dtime @@ -3587,6 +3677,24 @@ function mob_class:on_step(dtime) x = pos.x, y = pos.y + y_level + 0.25, z = pos.z}, "air").name -- print ("standing in " .. self.standing_in) + -- if standing inside solid block then jump to escape + if minetest.registered_nodes[self.standing_in].walkable and + minetest.registered_nodes[self.standing_in].drawtype == "normal" then + + self.object:set_velocity({ + x = 0, + y = self.jump_height, + z = 0 + }) + end + + -- check and stop if standing at cliff and fear of heights + self.at_cliff = self:is_at_cliff() + + if self.at_cliff then + self:set_velocity(0) + end + -- check for mob expiration (0.25 instead of dtime since were in a timer) self:mob_expire(pos, 0.25) end @@ -3598,8 +3706,6 @@ function mob_class:on_step(dtime) if self.delay and self.delay > 0 then - local yaw = self.object:get_yaw() - if self.delay == 1 then yaw = self.target_yaw else @@ -3682,7 +3788,7 @@ function mob_class:on_step(dtime) self.env_damage_timer = 0 -- check for environmental damage (water, fire, lava etc.) - self:do_env_damage() + if self:do_env_damage() then return end -- node replace check (cow eats grass etc.) self:replace(pos) @@ -3703,7 +3809,6 @@ function mob_class:on_step(dtime) self:do_stay_near() end - function update(self, clicker) if self.name == "mobs:dog" then if self.owner ~= clicker:get_player_name() then @@ -3970,7 +4075,8 @@ function mob_class:on_blast(damage) damage_groups = {fleshy = damage}, }, nil) - return false, true, {} + -- return no damage, no knockback, no item drops, mob api handles all + return false, false, {} end @@ -3996,6 +4102,7 @@ minetest.register_entity(name, setmetatable({ jump_height = def.jump_height, drawtype = def.drawtype, -- DEPRECATED, use rotate instead rotate = math.rad(def.rotate or 0), -- 0=front, 90=side, 180=back, 270=side2 + glow = def.glow, lifetimer = def.lifetimer, hp_min = max(1, (def.hp_min or 5) * difficulty), hp_max = max(1, (def.hp_max or 10) * difficulty), @@ -4027,6 +4134,7 @@ minetest.register_entity(name, setmetatable({ follow = def.follow, jump = def.jump, walk_chance = def.walk_chance, + stand_chance = def.stand_chance, attack_chance = def.attack_chance, passive = def.passive, knock_back = def.knock_back, @@ -4085,7 +4193,6 @@ minetest.register_entity(name, setmetatable({ on_activate = function(self, staticdata, dtime) return self:mob_activate(staticdata, def, dtime) end, - on_receive_fields = function(self, fields, sender) if self.owner == sender:get_player_name() then if fields.leave then @@ -4181,11 +4288,13 @@ end -- END mobs:register_mob function -- count how many mobs of one type are inside an area +-- will also return true for second value if player is inside area local count_mobs = function(pos, type) local total = 0 local objs = minetest.get_objects_inside_radius(pos, aoc_range * 2) local ent + local players for n = 1, #objs do @@ -4197,10 +4306,12 @@ local count_mobs = function(pos, type) if ent and ent.name and ent.name == type then total = total + 1 end + else + players = true end end - return total + return total, players end @@ -4269,7 +4380,12 @@ function mobs:spawn_specific(name, nodes, neighbors, min_light, max_light, end -- get total number of this mob in area - local num_mob = count_mobs(pos, name) + local num_mob, is_pla = count_mobs(pos, name) + + if not is_pla then +--print ("--- no players within active area, will not spawn " .. name) + return + end if num_mob >= aoc then --print ("--- too many " .. name .. " in area", num_mob .. "/" .. aoc) @@ -4316,7 +4432,7 @@ function mobs:spawn_specific(name, nodes, neighbors, min_light, max_light, end -- only spawn away from player - local objs = minetest.get_objects_inside_radius(pos, 10) + local objs = minetest.get_objects_inside_radius(pos, 8) for n = 1, #objs do @@ -4370,7 +4486,8 @@ end -- compatibility with older mob registration -function mobs:register_spawn(name, nodes, max_light, min_light, chance, active_object_count, max_height, day_toggle) +function mobs:register_spawn(name, nodes, max_light, min_light, chance, + active_object_count, max_height, day_toggle) mobs:spawn_specific(name, nodes, {"air"}, min_light, max_light, 30, chance, active_object_count, -31000, max_height, day_toggle) @@ -4392,8 +4509,7 @@ function mobs:spawn(def) def.min_height or -31000, def.max_height or 31000, def.day_toggle, - def.on_spawn - ) + def.on_spawn) end @@ -4455,7 +4571,7 @@ function mobs:register_arrow(name, def) collisiondetection = false, texture = def.tail_texture, size = def.tail_size or 5, - glow = def.glow or 0, + glow = def.glow or 0 }) end @@ -4620,6 +4736,8 @@ function mobs:register_egg(mob, desc, background, addegg, no_creative) local mob = minetest.add_entity(pos, mob, data) local ent = mob:get_luaentity() + if not ent then return end -- sanity check + -- set owner if not a monster if ent.type ~= "monster" then ent.owner = placer:get_player_name() @@ -4665,6 +4783,8 @@ function mobs:register_egg(mob, desc, background, addegg, no_creative) local mob = minetest.add_entity(pos, mob) local ent = mob:get_luaentity() + if not ent then return end -- sanity check + -- don't set owner if monster or sneak pressed if ent.type ~= "monster" and not placer:get_player_control().sneak then @@ -4990,8 +5110,6 @@ function mobs:feed_tame(self, clicker, feed_count, breed, tame) local tag = self.nametag or "" minetest.show_formspec(name, "mobs_nametag", "size[8,4]" - .. default.gui_bg - .. default.gui_bg_img .. "field[0.5,1;7.5,0;name;" .. minetest.formspec_escape(S("Enter name:")) .. ";" .. tag .. "]" .. "button_exit[2.5,3.5;3,1;mob_rename;" @@ -5052,6 +5170,11 @@ end) -- compatibility function for old entities to new modpack entities function mobs:alias_mob(old_name, new_name) + -- check old_name entity doesnt already exist + if minetest.registered_entities[old_name] then + return + end + -- spawn egg minetest.register_alias(old_name, new_name) @@ -5060,15 +5183,19 @@ function mobs:alias_mob(old_name, new_name) physical = false, - on_activate = function(self) + on_activate = function(self, staticdata) if minetest.registered_entities[new_name] then - minetest.add_entity(self.object:get_pos(), new_name) + minetest.add_entity(self.object:get_pos(), new_name, staticdata) end if self.name == "mobs:dog" or self.name == "mobs:cat" or self.name == "mobs:sheep" or self.name == "mobs:dragon" or self.name == "mobs:knight_1248" or self.name == "mobs:fox" or self.name == "mobs:tortoise" then else self.object:remove() end + end, + + get_staticdata = function(self) + return self end }) end diff --git a/mods/mobs/api__.lua b/mods/mobs/api_.lua similarity index 84% rename from mods/mobs/api__.lua rename to mods/mobs/api_.lua index 0213acc..f6695c6 100644 --- a/mods/mobs/api__.lua +++ b/mods/mobs/api_.lua @@ -743,9 +743,10 @@ function mob_class:check_for_death(cmi_cause) if use_cmi then cmi.notify_die(self.object, cmi_cause) end - - self.object:remove() - + if self.name == "mobs:dog" or self.name == "mobs:cat" or self.name == "mobs:sheep" or self.name == "mobs:dragon" or self.name == "mobs:knight_1248" or self.name == "mobs:fox" or self.name == "mobs:tortoise" then + else + self.object:remove() + end return true end @@ -772,16 +773,20 @@ function mob_class:check_for_death(cmi_cause) if use_cmi and self.object:get_luaentity() then cmi.notify_die(self.object, cmi_cause) end - - self.object:remove() + if self.name == "mobs:dog" or self.name == "mobs:cat" or self.name == "mobs:sheep" or self.name == "mobs:dragon" or self.name == "mobs:knight_1248" or self.name == "mobs:fox" or self.name == "mobs:tortoise" then + else + self.object:remove() + end end, self) else if use_cmi then cmi.notify_die(self.object, cmi_cause) end - - self.object:remove() + if self.name == "mobs:dog" or self.name == "mobs:cat" or self.name == "mobs:sheep" or self.name == "mobs:dragon" or self.name == "mobs:knight_1248" or self.name == "mobs:fox" or self.name == "mobs:tortoise" then + else + self.object:remove() + end end effect(pos, 20, "tnt_smoke.png") @@ -853,7 +858,10 @@ function mob_class:do_env_damage() -- remove mob if standing inside ignore node if self.standing_in == "ignore" then - self.object:remove() + if self.name == "mobs:dog" or self.name == "mobs:cat" or self.name == "mobs:sheep" or self.name == "mobs:dragon" or self.name == "mobs:knight_1248" or self.name == "mobs:fox" or self.name == "mobs:tortoise" then + else + self.object:remove() + end return end @@ -2220,9 +2228,10 @@ function mob_class:do_states(dtime) node_break_radius = 1 end - - self.object:remove() - + if self.name == "mobs:dog" or self.name == "mobs:cat" or self.name == "mobs:sheep" or self.name == "mobs:dragon" or self.name == "mobs:knight_1248" or self.name == "mobs:fox" or self.name == "mobs:tortoise" then + else + self.object:remove() + end if minetest.get_modpath("tnt") and tnt and tnt.boom and not minetest.is_protected(pos, "") then @@ -2839,8 +2848,10 @@ function mob_class:get_staticdata() and self.lifetimer < 20000 then --print ("REMOVED " .. self.name) - - self.object:remove() + if self.name == "mobs:dog" or self.name == "mobs:cat" or self.name == "mobs:sheep" or self.name == "mobs:dragon" or self.name == "mobs:knight_1248" or self.name == "mobs:fox" or self.name == "mobs:tortoise" then + else + self.object:remove() + end return ""-- nil end @@ -2885,8 +2896,10 @@ function mob_class:mob_activate(staticdata, def, dtime) -- remove monsters in peaceful mode if self.type == "monster" and peaceful_only then - - self.object:remove() + if self.name == "mobs:dog" or self.name == "mobs:cat" or self.name == "mobs:sheep" or self.name == "mobs:dragon" or self.name == "mobs:knight_1248" or self.name == "mobs:fox" or self.name == "mobs:tortoise" then + else + self.object:remove() + end return end @@ -3189,8 +3202,10 @@ function mob_class:mob_expire(pos, dtime) -- S("lifetimer expired, removed @1", self.name)) effect(pos, 15, "tnt_smoke.png", 2, 4, 2, 0) - - self.object:remove() + if self.name == "mobs:dog" or self.name == "mobs:cat" or self.name == "mobs:sheep" or self.name == "mobs:dragon" or self.name == "mobs:knight_1248" or self.name == "mobs:fox" or self.name == "mobs:tortoise" then + else + self.object:remove() + end return end @@ -3200,15 +3215,10 @@ end -- main mob function function mob_class:on_step(dtime) -self.metadata3 = self.metadata3 + dtime + self.metadata3 = self.metadata3 + dtime if self.metadata3 > 1 then self.metadata3 = 0 if self.name == "mobs:dog" then - if self.owner and minetest.get_player_by_name(self.owner) then - minetest.get_player_by_name(self.owner):set_attribute("dogx", ""..math.floor(self.object:getpos().x+0.5)) - minetest.get_player_by_name(self.owner):set_attribute("dogy", ""..math.floor(self.object:getpos().y+0.5)) - minetest.get_player_by_name(self.owner):set_attribute("dogz", ""..math.floor(self.object:getpos().z+0.5)) - end local pos = self.object:getpos() if minetest.get_player_by_name(self.owner) then local inv = minetest.get_player_by_name(self.owner):get_inventory() @@ -3226,11 +3236,6 @@ self.metadata3 = self.metadata3 + dtime end end if self.name == "mobs:cat" then - if self.owner and minetest.get_player_by_name(self.owner) then - minetest.get_player_by_name(self.owner):set_attribute("catx", ""..math.floor(self.object:getpos().x+0.5)) - minetest.get_player_by_name(self.owner):set_attribute("caty", ""..math.floor(self.object:getpos().y+0.5)) - minetest.get_player_by_name(self.owner):set_attribute("catz", ""..math.floor(self.object:getpos().z+0.5)) - end local pos = self.object:getpos() if minetest.get_player_by_name(self.owner) then local inv = minetest.get_player_by_name(self.owner):get_inventory() @@ -3247,304 +3252,333 @@ self.metadata3 = self.metadata3 + dtime end end end - if self.name == "mobs:dragon" then - if self.owner and minetest.get_player_by_name(self.owner) then - minetest.get_player_by_name(self.owner):set_attribute("dragonx", ""..math.floor(self.object:getpos().x+0.5)) - minetest.get_player_by_name(self.owner):set_attribute("dragony", ""..math.floor(self.object:getpos().y+0.5)) - minetest.get_player_by_name(self.owner):set_attribute("dragonz", ""..math.floor(self.object:getpos().z+0.5)) - end - end - if self.name == "mobs:sheep" then - if self.owner and minetest.get_player_by_name(self.owner) then - minetest.get_player_by_name(self.owner):set_attribute("sheepx", ""..math.floor(self.object:getpos().x+0.5)) - minetest.get_player_by_name(self.owner):set_attribute("sheepy", ""..math.floor(self.object:getpos().y+0.5)) - minetest.get_player_by_name(self.owner):set_attribute("sheepz", ""..math.floor(self.object:getpos().z+0.5)) - - end - end - if self.name == "mobs:fox" then - if self.owner and minetest.get_player_by_name(self.owner) then - minetest.get_player_by_name(self.owner):set_attribute("foxx", ""..math.floor(self.object:getpos().x+0.5)) - minetest.get_player_by_name(self.owner):set_attribute("foxy", ""..math.floor(self.object:getpos().y+0.5)) - minetest.get_player_by_name(self.owner):set_attribute("foxz", ""..math.floor(self.object:getpos().z+0.5)) - end - end - if self.name == "mobs:tortoise" then - if self.owner and minetest.get_player_by_name(self.owner) then - minetest.get_player_by_name(self.owner):set_attribute("tortoisex", ""..math.floor(self.object:getpos().x+0.5)) - minetest.get_player_by_name(self.owner):set_attribute("tortoisey", ""..math.floor(self.object:getpos().y+0.5)) - minetest.get_player_by_name(self.owner):set_attribute("tortoisez", ""..math.floor(self.object:getpos().z+0.5)) - end - end - if self.name == "mobs:knight_1248" then - if self.owner and minetest.get_player_by_name(self.owner) then - minetest.get_player_by_name(self.owner):set_attribute("knightx", ""..math.floor(self.object:getpos().x+0.5)) - minetest.get_player_by_name(self.owner):set_attribute("knighty", ""..math.floor(self.object:getpos().y+0.5)) - minetest.get_player_by_name(self.owner):set_attribute("knightz", ""..math.floor(self.object:getpos().z+0.5)) - end - - end - if self.name == "mobs:dog" and self.metadata2 == 1 then - local pos = self.object:getpos() - local all_objects = minetest.get_objects_inside_radius(pos, 15) - local players = {} - local k = 0 - local _,obj - for _,obj in ipairs(all_objects) do - if obj:is_player() then - if self.owner == obj:get_player_name() then - k = 1 - end - end - end - if k == 0 then - if minetest.get_player_by_name(self.owner) then - self.object:setpos({x = minetest.get_player_by_name(self.owner):getpos().x, y = minetest.get_player_by_name(self.owner):getpos().y+1, z = minetest.get_player_by_name(self.owner):getpos().z+1}) - end - end - end - if self.name == "mobs:cat" and self.metadata2 == 1 then - local pos = self.object:getpos() - local all_objects = minetest.get_objects_inside_radius(pos, 15) - local players = {} - local k = 0 - local _,obj - for _,obj in ipairs(all_objects) do - if obj:is_player() then - if self.owner == obj:get_player_name() then - k = 1 - end - end - end - if k == 0 then - if minetest.get_player_by_name(self.owner) then - self.object:setpos({x = minetest.get_player_by_name(self.owner):getpos().x, y = minetest.get_player_by_name(self.owner):getpos().y+1, z = minetest.get_player_by_name(self.owner):getpos().z+1}) - end - end - end - if self.name == "mobs:dragon" and self.metadata2 == 1 then - local pos = self.object:getpos() - local all_objects = minetest.get_objects_inside_radius(pos, 15) - local players = {} - local k = 0 - local _,obj - for _,obj in ipairs(all_objects) do - if obj:is_player() then - if self.owner == obj:get_player_name() then - k = 1 - end - end - end - if k == 0 then - if self.owner then - if minetest.get_player_by_name(self.owner) then - minetest.get_player_by_name(self.owner):get_inventory():set_size("dragon2",1) - self.object:setpos({x = minetest.get_player_by_name(self.owner):getpos().x, y = minetest.get_player_by_name(self.owner):getpos().y+1, z = minetest.get_player_by_name(self.owner):getpos().z+1}) - local numd = minetest.get_player_by_name(self.owner):get_inventory():get_stack("dragon2", 1):get_count() - if numd > 50 then - if minetest.get_player_by_name(self.owner):get_inventory():get_stack("dragon", 1):get_name() == "tutorial:dragon_crystal" then - minetest.get_player_by_name(self.owner):get_inventory():add_item("main", "tutorial:geschenk_gem") - else - minetest.get_player_by_name(self.owner):get_inventory():add_item("main", "tutorial:geschenk_dragon") - end - minetest.get_player_by_name(self.owner):get_inventory():set_stack("dragon2", 1, "") - else - minetest.get_player_by_name(self.owner):get_inventory():set_stack("dragon2", 1, "default:dirt "..1+numd) - end - end - end - end - end - if self.name == "mobs:sheep" and self.metadata2 == 1 then - local pos = self.object:getpos() - local all_objects = minetest.get_objects_inside_radius(pos, 15) - local players = {} - local k = 0 - local _,obj - for _,obj in ipairs(all_objects) do - if obj:is_player() then - if self.owner == obj:get_player_name() then - k = 1 - end - end - end - if k == 0 then - if self.owner then - if minetest.get_player_by_name(self.owner) then - minetest.get_player_by_name(self.owner):get_inventory():set_size("sheep2",1) - minetest.get_player_by_name(self.owner):get_inventory():set_size("sheep3",1) - self.object:setpos({x = minetest.get_player_by_name(self.owner):getpos().x, y = minetest.get_player_by_name(self.owner):getpos().y+1, z = minetest.get_player_by_name(self.owner):getpos().z+1}) - local numd = minetest.get_player_by_name(self.owner):get_inventory():get_stack("sheep2", 1):get_count() - if numd > 50 then - minetest.get_player_by_name(self.owner):get_inventory():add_item("main", minetest.get_player_by_name(self.owner):get_inventory():get_stack("sheep3", 1)) - minetest.get_player_by_name(self.owner):get_inventory():set_stack("sheep2", 1, "") - else - minetest.get_player_by_name(self.owner):get_inventory():set_stack("sheep2", 1, "default:dirt "..1+numd) - end - end - end - end - end - if self.name == "mobs:knight_1248" and self.metadata2 == 1 then - local pos = self.object:getpos() - local all_objects = minetest.get_objects_inside_radius(pos, 15) - local players = {} - local k = 0 - local _,obj - for _,obj in ipairs(all_objects) do - if obj:is_player() then - if self.owner == obj:get_player_name() then - k = 1 - end - end - end - if k == 0 then - if minetest.get_player_by_name(self.owner) then - self.object:setpos({x = minetest.get_player_by_name(self.owner):getpos().x, y = minetest.get_player_by_name(self.owner):getpos().y+1, z = minetest.get_player_by_name(self.owner):getpos().z+1}) - end - end - end - if self.name == "mobs:fox" and self.metadata2 == 1 then - local pos = self.object:getpos() - local all_objects = minetest.get_objects_inside_radius(pos, 15) - local players = {} - local k = 0 - local _,obj - for _,obj in ipairs(all_objects) do - if obj:is_player() then - if self.owner == obj:get_player_name() then - k = 1 - end - end - end - if k == 0 then - if self.owner then - if minetest.get_player_by_name(self.owner) then - minetest.get_player_by_name(self.owner):get_inventory():set_size("fox",1) - minetest.get_player_by_name(self.owner):get_inventory():set_size("foxfox",1) - minetest.get_player_by_name(self.owner):get_inventory():set_size("r1248",6) - self.object:setpos({x = minetest.get_player_by_name(self.owner):getpos().x, y = minetest.get_player_by_name(self.owner):getpos().y+1, z = minetest.get_player_by_name(self.owner):getpos().z+1}) - local numd = minetest.get_player_by_name(self.owner):get_inventory():get_stack("fox", 1):get_count() - if numd == 50 then - minetest.get_player_by_name(self.owner):get_inventory():add_item("main", "tutorial:fox_schluessel") - minetest.get_player_by_name(self.owner):get_inventory():set_stack("fox", 1, "default:dirt 80") - elseif numd == 80 then - else - minetest.get_player_by_name(self.owner):get_inventory():set_stack("fox", 1, "default:dirt "..1+numd) - end - local numdd = minetest.get_player_by_name(self.owner):get_inventory():get_stack("foxfox", 1):get_count() - if numdd == 256 then - local ra = math.random(6) - if ra == 1 then - minetest.get_player_by_name(self.owner):get_inventory():set_stack("r1248", 1, "default:dirt") - elseif ra == 2 then - minetest.get_player_by_name(self.owner):get_inventory():set_stack("r1248", 2, "default:dirt") - elseif ra == 3 then - minetest.get_player_by_name(self.owner):get_inventory():set_stack("r1248", 3, "default:dirt") - elseif ra == 4 then - minetest.get_player_by_name(self.owner):get_inventory():set_stack("r1248", 4, "default:dirt") - elseif ra == 5 then - minetest.get_player_by_name(self.owner):get_inventory():set_stack("r1248", 5, "default:dirt") - elseif ra == 6 then - minetest.get_player_by_name(self.owner):get_inventory():set_stack("r1248", 6, "default:dirt") - end - minetest.get_player_by_name(self.owner):get_inventory():set_stack("foxfox", 1, "") - else - minetest.get_player_by_name(self.owner):get_inventory():set_stack("foxfox", 1, "default:dirt "..1+numdd) - end - end - end - end - end - if self.name == "mobs:tortoise" and self.metadata2 == 1 then - local pos = self.object:getpos() - local all_objects = minetest.get_objects_inside_radius(pos, 15) - local players = {} - local k = 0 - local _,obj - for _,obj in ipairs(all_objects) do - if obj:is_player() then - if self.owner == obj:get_player_name() then - k = 1 - end - end - end - if k == 0 then - if minetest.get_player_by_name(self.owner) then - self.object:setpos({x = minetest.get_player_by_name(self.owner):getpos().x, y = minetest.get_player_by_name(self.owner):getpos().y+1, z = minetest.get_player_by_name(self.owner):getpos().z+1}) - minetest.get_player_by_name(self.owner):get_inventory():set_size("tortoise2",1) - local numd = minetest.get_player_by_name(self.owner):get_inventory():get_stack("tortoise2", 1):get_count() - if numd > 50 then - if minetest.get_player_by_name(self.owner):get_inventory():get_stack("tortoise", 1):get_name() == "tutorial:dragon_crystal" then - minetest.get_player_by_name(self.owner):get_inventory():add_item("main", "tutorial:geschenk_gem2") - else - minetest.get_player_by_name(self.owner):get_inventory():add_item("main", "tutorial:geschenk_tortoise") - end - minetest.get_player_by_name(self.owner):get_inventory():set_stack("tortoise2", 1, "") - else - minetest.get_player_by_name(self.owner):get_inventory():set_stack("tortoise2", 1, "default:dirt "..1+numd) - end - end - end - end - if self.name == "mobs:sheep" then - if self.owner then - self.object:set_properties({infotext=self.owner.."'s Sheep"}) - if minetest.get_player_by_name(self.owner) then - local col = minetest.get_player_by_name(self.owner):get_inventory():get_stack("sheep", 1):get_name() - if col == "dye:white" then - minetest.get_player_by_name(self.owner):get_inventory():set_stack("sheep3", 1,"wool:white") - self.object:set_properties({textures={"mobs_sheep_white.png"}}) - elseif col == "dye:grey" then - minetest.get_player_by_name(self.owner):get_inventory():set_stack("sheep3", 1,"wool:grey") - self.object:set_properties({textures={"mobs_sheep_grey.png"}}) - elseif col == "dye:dark_grey" then - minetest.get_player_by_name(self.owner):get_inventory():set_stack("sheep3", 1,"wool:dark_grey") - self.object:set_properties({textures={"mobs_sheep_dark_grey.png"}}) - elseif col == "dye:black" then - minetest.get_player_by_name(self.owner):get_inventory():set_stack("sheep3", 1,"wool:black") - self.object:set_properties({textures={"mobs_sheep_black.png"}}) - elseif col == "dye:violet" then - minetest.get_player_by_name(self.owner):get_inventory():set_stack("sheep3", 1,"wool:violet") - self.object:set_properties({textures={"mobs_sheep_violet.png"}}) - elseif col == "dye:blue" then - minetest.get_player_by_name(self.owner):get_inventory():set_stack("sheep3", 1,"wool:blue") - self.object:set_properties({textures={"mobs_sheep_blue.png"}}) - elseif col == "dye:cyan" then - minetest.get_player_by_name(self.owner):get_inventory():set_stack("sheep3", 1,"wool:cyan") - self.object:set_properties({textures={"mobs_sheep_cyan.png"}}) - elseif col == "dye:dark_green" then - minetest.get_player_by_name(self.owner):get_inventory():set_stack("sheep3", 1,"wool:dark_green") - self.object:set_properties({textures={"mobs_sheep_dark_green.png"}}) - elseif col == "dye:green" then - minetest.get_player_by_name(self.owner):get_inventory():set_stack("sheep3", 1,"wool:green") - self.object:set_properties({textures={"mobs_sheep_green.png"}}) - elseif col == "dye:yellow" then - minetest.get_player_by_name(self.owner):get_inventory():set_stack("sheep3", 1,"wool:yellow") - self.object:set_properties({textures={"mobs_sheep_yellow.png"}}) - elseif col == "dye:brown" then - minetest.get_player_by_name(self.owner):get_inventory():set_stack("sheep3", 1,"wool:brown") - self.object:set_properties({textures={"mobs_sheep_brown.png"}}) - elseif col == "dye:orange" then - minetest.get_player_by_name(self.owner):get_inventory():set_stack("sheep3", 1,"wool:orange") - self.object:set_properties({textures={"mobs_sheep_orange.png"}}) - elseif col == "dye:red" then - minetest.get_player_by_name(self.owner):get_inventory():set_stack("sheep3", 1,"wool:red") - self.object:set_properties({textures={"mobs_sheep_red.png"}}) - elseif col == "dye:magenta" then - minetest.get_player_by_name(self.owner):get_inventory():set_stack("sheep3", 1,"wool:magenta") - self.object:set_properties({textures={"mobs_sheep_magenta.png"}}) - elseif col == "dye:pink" then - minetest.get_player_by_name(self.owner):get_inventory():set_stack("sheep3", 1,"wool:pink") - self.object:set_properties({textures={"mobs_sheep_pink.png"}}) - else - minetest.get_player_by_name(self.owner):get_inventory():set_stack("sheep3", 1,"") - self.object:set_properties({textures={"mobs_sheep.png"}}) - end - end - end - end - end + + if self.name == "mobs:dragon" then + if self.owner and minetest.get_player_by_name(self.owner) then + minetest.get_player_by_name(self.owner):set_attribute("dragonx", ""..math.floor(self.object:getpos().x+0.5)) + minetest.get_player_by_name(self.owner):set_attribute("dragony", ""..math.floor(self.object:getpos().y+0.5)) + minetest.get_player_by_name(self.owner):set_attribute("dragonz", ""..math.floor(self.object:getpos().z+0.5)) + minetest.get_player_by_name(self.owner):set_attribute("dragon_meta1", ""..self.metadata) + minetest.get_player_by_name(self.owner):set_attribute("dragon_meta2", ""..self.metadata2) + end + end + if self.name == "mobs:sheep" then + if self.owner and minetest.get_player_by_name(self.owner) then + minetest.get_player_by_name(self.owner):set_attribute("sheepx", ""..math.floor(self.object:getpos().x+0.5)) + minetest.get_player_by_name(self.owner):set_attribute("sheepy", ""..math.floor(self.object:getpos().y+0.5)) + minetest.get_player_by_name(self.owner):set_attribute("sheepz", ""..math.floor(self.object:getpos().z+0.5)) + minetest.get_player_by_name(self.owner):set_attribute("sheep_meta1", ""..self.metadata) + minetest.get_player_by_name(self.owner):set_attribute("sheep_meta2", ""..self.metadata2) + + end + end + if self.name == "mobs:fox" then + if self.owner and minetest.get_player_by_name(self.owner) then + minetest.get_player_by_name(self.owner):set_attribute("foxx", ""..math.floor(self.object:getpos().x+0.5)) + minetest.get_player_by_name(self.owner):set_attribute("foxy", ""..math.floor(self.object:getpos().y+0.5)) + minetest.get_player_by_name(self.owner):set_attribute("foxz", ""..math.floor(self.object:getpos().z+0.5)) + minetest.get_player_by_name(self.owner):set_attribute("fox_meta1", ""..self.metadata) + minetest.get_player_by_name(self.owner):set_attribute("fox_meta2", ""..self.metadata2) + end + end + if self.name == "mobs:tortoise" then + if self.owner and minetest.get_player_by_name(self.owner) then + minetest.get_player_by_name(self.owner):set_attribute("tortoisex", ""..math.floor(self.object:getpos().x+0.5)) + minetest.get_player_by_name(self.owner):set_attribute("tortoisey", ""..math.floor(self.object:getpos().y+0.5)) + minetest.get_player_by_name(self.owner):set_attribute("tortoisez", ""..math.floor(self.object:getpos().z+0.5)) + minetest.get_player_by_name(self.owner):set_attribute("tortoise_meta1", ""..self.metadata) + minetest.get_player_by_name(self.owner):set_attribute("tortoise_meta2", ""..self.metadata2) + end + end + if self.name == "mobs:knight_1248" then + if self.owner and minetest.get_player_by_name(self.owner) then + minetest.get_player_by_name(self.owner):set_attribute("knightx", ""..math.floor(self.object:getpos().x+0.5)) + minetest.get_player_by_name(self.owner):set_attribute("knighty", ""..math.floor(self.object:getpos().y+0.5)) + minetest.get_player_by_name(self.owner):set_attribute("knightz", ""..math.floor(self.object:getpos().z+0.5)) + minetest.get_player_by_name(self.owner):set_attribute("knight_meta1", ""..self.metadata) + minetest.get_player_by_name(self.owner):set_attribute("knight_meta2", ""..self.metadata2) + end + end + if self.name == "mobs:dog" then + if self.owner and minetest.get_player_by_name(self.owner) then + minetest.get_player_by_name(self.owner):set_attribute("dogx", ""..math.floor(self.object:getpos().x+0.5)) + minetest.get_player_by_name(self.owner):set_attribute("dogy", ""..math.floor(self.object:getpos().y+0.5)) + minetest.get_player_by_name(self.owner):set_attribute("dogz", ""..math.floor(self.object:getpos().z+0.5)) + minetest.get_player_by_name(self.owner):set_attribute("dog_meta1", ""..self.metadata) + minetest.get_player_by_name(self.owner):set_attribute("dog_meta2", ""..self.metadata2) + end + end + if self.name == "mobs:cat" then + if self.owner and minetest.get_player_by_name(self.owner) then + minetest.get_player_by_name(self.owner):set_attribute("catx", ""..math.floor(self.object:getpos().x+0.5)) + minetest.get_player_by_name(self.owner):set_attribute("caty", ""..math.floor(self.object:getpos().y+0.5)) + minetest.get_player_by_name(self.owner):set_attribute("catz", ""..math.floor(self.object:getpos().z+0.5)) + minetest.get_player_by_name(self.owner):set_attribute("cat_meta1", ""..self.metadata) + minetest.get_player_by_name(self.owner):set_attribute("cat_meta2", ""..self.metadata2) + end + end + + if self.name == "mobs:dog" and self.metadata2 == 1 then + local pos = self.object:getpos() + local all_objects = minetest.get_objects_inside_radius(pos, 15) + local players = {} + local k = 0 + local _,obj + for _,obj in ipairs(all_objects) do + if obj:is_player() then + if self.owner == obj:get_player_name() then + k = 1 + end + end + end + if k == 0 then + if minetest.get_player_by_name(self.owner) then + self.object:setpos({x = minetest.get_player_by_name(self.owner):getpos().x, y = minetest.get_player_by_name(self.owner):getpos().y+1, z = minetest.get_player_by_name(self.owner):getpos().z+1}) + end + end + end + if self.name == "mobs:cat" and self.metadata2 == 1 then + local pos = self.object:getpos() + local all_objects = minetest.get_objects_inside_radius(pos, 15) + local players = {} + local k = 0 + local _,obj + for _,obj in ipairs(all_objects) do + if obj:is_player() then + if self.owner == obj:get_player_name() then + k = 1 + end + end + end + if k == 0 then + if minetest.get_player_by_name(self.owner) then + self.object:setpos({x = minetest.get_player_by_name(self.owner):getpos().x, y = minetest.get_player_by_name(self.owner):getpos().y+1, z = minetest.get_player_by_name(self.owner):getpos().z+1}) + end + end + end + if self.name == "mobs:dragon" and self.metadata2 == 1 then + local pos = self.object:getpos() + local all_objects = minetest.get_objects_inside_radius(pos, 15) + local players = {} + local k = 0 + local _,obj + for _,obj in ipairs(all_objects) do + if obj:is_player() then + if self.owner == obj:get_player_name() then + k = 1 + end + end + end + if k == 0 then + if self.owner then + if minetest.get_player_by_name(self.owner) then + minetest.get_player_by_name(self.owner):get_inventory():set_size("dragon2",1) + self.object:setpos({x = minetest.get_player_by_name(self.owner):getpos().x, y = minetest.get_player_by_name(self.owner):getpos().y+1, z = minetest.get_player_by_name(self.owner):getpos().z+1}) + local numd = minetest.get_player_by_name(self.owner):get_inventory():get_stack("dragon2", 1):get_count() + if numd > 25 then + if minetest.get_player_by_name(self.owner):get_inventory():get_stack("dragon", 1):get_name() == "tutorial:dragon_crystal" then + minetest.get_player_by_name(self.owner):get_inventory():add_item("main", "tutorial:geschenk_gem") + else + minetest.get_player_by_name(self.owner):get_inventory():add_item("main", "tutorial:geschenk_dragon") + end + minetest.get_player_by_name(self.owner):get_inventory():set_stack("dragon2", 1, "") + else + minetest.get_player_by_name(self.owner):get_inventory():set_stack("dragon2", 1, "default:dirt "..1+numd) + end + end + end + end + end + if self.name == "mobs:sheep" and self.metadata2 == 1 then + local pos = self.object:getpos() + local all_objects = minetest.get_objects_inside_radius(pos, 15) + local players = {} + local k = 0 + local _,obj + for _,obj in ipairs(all_objects) do + if obj:is_player() then + if self.owner == obj:get_player_name() then + k = 1 + end + end + end + if k == 0 then + if self.owner then + if minetest.get_player_by_name(self.owner) then + minetest.get_player_by_name(self.owner):get_inventory():set_size("sheep2",1) + minetest.get_player_by_name(self.owner):get_inventory():set_size("sheep3",1) + self.object:setpos({x = minetest.get_player_by_name(self.owner):getpos().x, y = minetest.get_player_by_name(self.owner):getpos().y+1, z = minetest.get_player_by_name(self.owner):getpos().z+1}) + local numd = minetest.get_player_by_name(self.owner):get_inventory():get_stack("sheep2", 1):get_count() + if numd > 25 then + minetest.get_player_by_name(self.owner):get_inventory():add_item("main", minetest.get_player_by_name(self.owner):get_inventory():get_stack("sheep3", 1)) + minetest.get_player_by_name(self.owner):get_inventory():set_stack("sheep2", 1, "") + else + minetest.get_player_by_name(self.owner):get_inventory():set_stack("sheep2", 1, "default:dirt "..1+numd) + end + end + end + end + end + if self.name == "mobs:knight_1248" and self.metadata2 == 1 then + local pos = self.object:getpos() + local all_objects = minetest.get_objects_inside_radius(pos, 15) + local players = {} + local k = 0 + local _,obj + for _,obj in ipairs(all_objects) do + if obj:is_player() then + if self.owner == obj:get_player_name() then + k = 1 + end + end + end + if k == 0 then + if minetest.get_player_by_name(self.owner) then + self.object:setpos({x = minetest.get_player_by_name(self.owner):getpos().x, y = minetest.get_player_by_name(self.owner):getpos().y+1, z = minetest.get_player_by_name(self.owner):getpos().z+1}) + end + end + end + if self.name == "mobs:fox" and self.metadata2 == 1 then + local pos = self.object:getpos() + local all_objects = minetest.get_objects_inside_radius(pos, 15) + local players = {} + local k = 0 + local _,obj + for _,obj in ipairs(all_objects) do + if obj:is_player() then + if self.owner == obj:get_player_name() then + k = 1 + end + end + end + if k == 0 then + if self.owner then + if minetest.get_player_by_name(self.owner) then + minetest.get_player_by_name(self.owner):get_inventory():set_size("fox",1) + minetest.get_player_by_name(self.owner):get_inventory():set_size("foxfox",1) + minetest.get_player_by_name(self.owner):get_inventory():set_size("r1248",6) + self.object:setpos({x = minetest.get_player_by_name(self.owner):getpos().x, y = minetest.get_player_by_name(self.owner):getpos().y+1, z = minetest.get_player_by_name(self.owner):getpos().z+1}) + local numd = minetest.get_player_by_name(self.owner):get_inventory():get_stack("fox", 1):get_count() + if numd == 50 then + minetest.get_player_by_name(self.owner):get_inventory():add_item("main", "tutorial:fox_schluessel") + minetest.get_player_by_name(self.owner):get_inventory():set_stack("fox", 1, "default:dirt 80") + elseif numd == 80 then + else + minetest.get_player_by_name(self.owner):get_inventory():set_stack("fox", 1, "default:dirt "..1+numd) + end + local numdd = minetest.get_player_by_name(self.owner):get_inventory():get_stack("foxfox", 1):get_count() + if numdd == 256 then + local ra = math.random(6) + if ra == 1 then + minetest.get_player_by_name(self.owner):get_inventory():set_stack("r1248", 1, "default:dirt") + elseif ra == 2 then + minetest.get_player_by_name(self.owner):get_inventory():set_stack("r1248", 2, "default:dirt") + elseif ra == 3 then + minetest.get_player_by_name(self.owner):get_inventory():set_stack("r1248", 3, "default:dirt") + elseif ra == 4 then + minetest.get_player_by_name(self.owner):get_inventory():set_stack("r1248", 4, "default:dirt") + elseif ra == 5 then + minetest.get_player_by_name(self.owner):get_inventory():set_stack("r1248", 5, "default:dirt") + elseif ra == 6 then + minetest.get_player_by_name(self.owner):get_inventory():set_stack("r1248", 6, "default:dirt") + end + minetest.get_player_by_name(self.owner):get_inventory():set_stack("foxfox", 1, "") + else + minetest.get_player_by_name(self.owner):get_inventory():set_stack("foxfox", 1, "default:dirt "..1+numdd) + end + end + end + end + end + if self.name == "mobs:tortoise" and self.metadata2 == 1 then + local pos = self.object:getpos() + local all_objects = minetest.get_objects_inside_radius(pos, 15) + local players = {} + local k = 0 + local _,obj + for _,obj in ipairs(all_objects) do + if obj:is_player() then + if self.owner == obj:get_player_name() then + k = 1 + end + end + end + if k == 0 then + if minetest.get_player_by_name(self.owner) then + self.object:setpos({x = minetest.get_player_by_name(self.owner):getpos().x, y = minetest.get_player_by_name(self.owner):getpos().y+1, z = minetest.get_player_by_name(self.owner):getpos().z+1}) + minetest.get_player_by_name(self.owner):get_inventory():set_size("tortoise2",1) + local numd = minetest.get_player_by_name(self.owner):get_inventory():get_stack("tortoise2", 1):get_count() + if numd > 25 then + if minetest.get_player_by_name(self.owner):get_inventory():get_stack("tortoise", 1):get_name() == "tutorial:dragon_crystal" then + minetest.get_player_by_name(self.owner):get_inventory():add_item("main", "tutorial:geschenk_gem2") + else + minetest.get_player_by_name(self.owner):get_inventory():add_item("main", "tutorial:geschenk_tortoise") + end + minetest.get_player_by_name(self.owner):get_inventory():set_stack("tortoise2", 1, "") + else + minetest.get_player_by_name(self.owner):get_inventory():set_stack("tortoise2", 1, "default:dirt "..1+numd) + end + end + end + end + if self.name == "mobs:sheep" then + if self.owner then + self.object:set_properties({infotext=self.owner.."'s Sheep"}) + if minetest.get_player_by_name(self.owner) then + local col = minetest.get_player_by_name(self.owner):get_inventory():get_stack("sheep", 1):get_name() + if col == "dye:white" then + minetest.get_player_by_name(self.owner):get_inventory():set_stack("sheep3", 1,"wool:white") + self.object:set_properties({textures={"mobs_sheep_white.png"}}) + elseif col == "dye:grey" then + minetest.get_player_by_name(self.owner):get_inventory():set_stack("sheep3", 1,"wool:grey") + self.object:set_properties({textures={"mobs_sheep_grey.png"}}) + elseif col == "dye:dark_grey" then + minetest.get_player_by_name(self.owner):get_inventory():set_stack("sheep3", 1,"wool:dark_grey") + self.object:set_properties({textures={"mobs_sheep_dark_grey.png"}}) + elseif col == "dye:black" then + minetest.get_player_by_name(self.owner):get_inventory():set_stack("sheep3", 1,"wool:black") + self.object:set_properties({textures={"mobs_sheep_black.png"}}) + elseif col == "dye:violet" then + minetest.get_player_by_name(self.owner):get_inventory():set_stack("sheep3", 1,"wool:violet") + self.object:set_properties({textures={"mobs_sheep_violet.png"}}) + elseif col == "dye:blue" then + minetest.get_player_by_name(self.owner):get_inventory():set_stack("sheep3", 1,"wool:blue") + self.object:set_properties({textures={"mobs_sheep_blue.png"}}) + elseif col == "dye:cyan" then + minetest.get_player_by_name(self.owner):get_inventory():set_stack("sheep3", 1,"wool:cyan") + self.object:set_properties({textures={"mobs_sheep_cyan.png"}}) + elseif col == "dye:dark_green" then + minetest.get_player_by_name(self.owner):get_inventory():set_stack("sheep3", 1,"wool:dark_green") + self.object:set_properties({textures={"mobs_sheep_dark_green.png"}}) + elseif col == "dye:green" then + minetest.get_player_by_name(self.owner):get_inventory():set_stack("sheep3", 1,"wool:green") + self.object:set_properties({textures={"mobs_sheep_green.png"}}) + elseif col == "dye:yellow" then + minetest.get_player_by_name(self.owner):get_inventory():set_stack("sheep3", 1,"wool:yellow") + self.object:set_properties({textures={"mobs_sheep_yellow.png"}}) + elseif col == "dye:brown" then + minetest.get_player_by_name(self.owner):get_inventory():set_stack("sheep3", 1,"wool:brown") + self.object:set_properties({textures={"mobs_sheep_brown.png"}}) + elseif col == "dye:orange" then + minetest.get_player_by_name(self.owner):get_inventory():set_stack("sheep3", 1,"wool:orange") + self.object:set_properties({textures={"mobs_sheep_orange.png"}}) + elseif col == "dye:red" then + minetest.get_player_by_name(self.owner):get_inventory():set_stack("sheep3", 1,"wool:red") + self.object:set_properties({textures={"mobs_sheep_red.png"}}) + elseif col == "dye:magenta" then + minetest.get_player_by_name(self.owner):get_inventory():set_stack("sheep3", 1,"wool:magenta") + self.object:set_properties({textures={"mobs_sheep_magenta.png"}}) + elseif col == "dye:pink" then + minetest.get_player_by_name(self.owner):get_inventory():set_stack("sheep3", 1,"wool:pink") + self.object:set_properties({textures={"mobs_sheep_pink.png"}}) + else + minetest.get_player_by_name(self.owner):get_inventory():set_stack("sheep3", 1,"") + self.object:set_properties({textures={"mobs_sheep.png"}}) + end + end + end + end + end if use_cmi then cmi.notify_step(self.object, dtime) end @@ -4417,8 +4451,10 @@ function mobs:register_arrow(name, def) if self.switch == 0 or self.timer > 150 then - - self.object:remove() ; -- print ("removed arrow") + if self.name == "mobs:dog" or self.name == "mobs:cat" or self.name == "mobs:sheep" or self.name == "mobs:dragon" or self.name == "mobs:knight_1248" or self.name == "mobs:fox" or self.name == "mobs:tortoise" then + else + self.object:remove() ; -- print ("removed arrow") + end return end @@ -4456,8 +4492,10 @@ function mobs:register_arrow(name, def) minetest.add_item(self.lastpos, self.object:get_luaentity().name) end - - self.object:remove() ; -- print ("hit node") + if self.name == "mobs:dog" or self.name == "mobs:cat" or self.name == "mobs:sheep" or self.name == "mobs:dragon" or self.name == "mobs:knight_1248" or self.name == "mobs:fox" or self.name == "mobs:tortoise" then + else + self.object:remove() ; -- print ("hit node") + end return end @@ -4471,7 +4509,10 @@ function mobs:register_arrow(name, def) and player:is_player() then self:hit_player(player) - self.object:remove() ; -- print ("hit player") + if self.name == "mobs:dog" or self.name == "mobs:cat" or self.name == "mobs:sheep" or self.name == "mobs:dragon" or self.name == "mobs:knight_1248" or self.name == "mobs:fox" or self.name == "mobs:tortoise" then + else + self.object:remove() ; -- print ("hit player") + end return end @@ -4484,8 +4525,10 @@ function mobs:register_arrow(name, def) and entity.name ~= self.object:get_luaentity().name then self:hit_mob(player) - - self.object:remove() ; --print ("hit mob") + if self.name == "mobs:dog" or self.name == "mobs:cat" or self.name == "mobs:sheep" or self.name == "mobs:dragon" or self.name == "mobs:knight_1248" or self.name == "mobs:fox" or self.name == "mobs:tortoise" then + else + self.object:remove() ; --print ("hit mob") + end return end @@ -4687,8 +4730,10 @@ function mobs:force_capture(self, clicker) else minetest.add_item(clicker:get_pos(), new_stack) end - - self.object:remove() + if self.name == "mobs:dog" or self.name == "mobs:cat" or self.name == "mobs:sheep" or self.name == "mobs:dragon" or self.name == "mobs:knight_1248" or self.name == "mobs:fox" or self.name == "mobs:tortoise" then + else + self.object:remove() + end self:mob_sound("default_place_node_hard") end @@ -4801,8 +4846,10 @@ function mobs:capture_mob(self, clicker, chance_hand, chance_net, chance_lasso, else minetest.add_item(clicker:get_pos(), new_stack) end - - self.object:remove() + if self.name == "mobs:dog" or self.name == "mobs:cat" or self.name == "mobs:sheep" or self.name == "mobs:dragon" or self.name == "mobs:knight_1248" or self.name == "mobs:fox" or self.name == "mobs:tortoise" then + else + self.object:remove() + end self:mob_sound("default_place_node_hard") @@ -5035,8 +5082,10 @@ function mobs:alias_mob(old_name, new_name) if minetest.registered_entities[new_name] then minetest.add_entity(self.object:get_pos(), new_name) end - - self.object:remove() + if self.name == "mobs:dog" or self.name == "mobs:cat" or self.name == "mobs:sheep" or self.name == "mobs:dragon" or self.name == "mobs:knight_1248" or self.name == "mobs:fox" or self.name == "mobs:tortoise" then + else + self.object:remove() + end end }) end diff --git a/mods/mobs/init.lua b/mods/mobs/init.lua index 4ff17cb..9d2a2b2 100644 --- a/mods/mobs/init.lua +++ b/mods/mobs/init.lua @@ -9,4 +9,105 @@ dofile(path.."/fox.lua") dofile(path.."/tortoise.lua") dofile(path.."/knight.lua") dofile(path.."/monsterx1.lua") -dofile(path.."/mummy.lua") \ No newline at end of file +dofile(path.."/mummy.lua") + +local animals = { + {"dog","Dog","dog"}, + {"cat","Cat","cat"}, + {"sheep","Sheep","sheep"}, + {"tortoise","Tortoise","tortoise"}, + {"knight","Knight","knight_1248"}, + {"fox","Fox","fox"}, + {"dragon","Dragon","dragon"}, +} + +local timer = 0 +minetest.register_globalstep(function(dtime) + timer = timer + dtime; + if timer >= 1 then + local players = minetest.get_connected_players() + for _,player in ipairs(players) do + for _, m in pairs(animals) do + if player:get_attribute(m[1].."x") then + local all_objects = minetest.get_objects_inside_radius({x=tonumber(player:get_attribute(m[1].."x")), y=tonumber(player:get_attribute(m[1].."y")), z=tonumber(player:get_attribute(m[1].."z"))}, 30) + local is_player = false + for _,obj in ipairs(all_objects) do + if obj:is_player() then + is_player = true + end + end + local set_animal = true + if is_player then + for _,obj in ipairs(all_objects) do + if obj:get_entity_name() == "mobs:"..m[3] and obj:get_luaentity().owner == player:get_player_name() then + if set_animal == false then + obj:remove() + end + set_animal = false + end + end + end + if set_animal and is_player then + local obj2 = minetest.env:add_entity({x=tonumber(player:get_attribute(m[1].."x")), y=tonumber(player:get_attribute(m[1].."y")), z=tonumber(player:get_attribute(m[1].."z"))},"mobs:"..m[3]) + local ent = obj2:get_luaentity() + ent.owner = player:get_player_name() + ent.npc_name = player:get_player_name().."'s "..m[2] + obj2:set_properties({infotext=player:get_player_name().."'s "..m[2]}) + if player:get_attribute(m[1].."_meta1") then + ent.metadata = tonumber(player:get_attribute(m[1].."_meta1")) + ent.metadata2 = tonumber(player:get_attribute(m[1].."_meta2")) + update_meta(player,m[1],obj2,ent) + end + end + end + end + end + end +end) + +function update_meta(player,animal,obj,ent) + if animal == "dog" then + if tonumber(player:get_attribute("dog_meta1")) == 2 then + obj:set_properties({textures={"mobs_dog2.png"}}) + elseif tonumber(player:get_attribute("dog_meta1")) == 1 then + obj:set_properties({textures={"mobs_dog.png"}}) + end + elseif animal == "cat" then + if tonumber(player:get_attribute("cat_meta1")) == 2 then + obj:set_properties({textures={"mobs_kitten.png"}}) + elseif tonumber(player:get_attribute("cat_meta1")) == 3 then + obj:set_properties({textures={"mobs_kitten2.png"}}) + elseif tonumber(player:get_attribute("cat_meta1")) == 4 then + obj:set_properties({textures={"mobs_kitten3.png"}}) + elseif tonumber(player:get_attribute("cat_meta1")) == 1 then + obj:set_properties({textures={"mobs_kitten4.png"}}) + end + elseif animal == "dragon" then + if tonumber(player:get_attribute("dragon_meta1")) == 2 then + obj:set_properties({textures={"mobs_dragon_yellow.png"}}) + elseif tonumber(player:get_attribute("dragon_meta1")) == 3 then + obj:set_properties({textures={"mobs_dragon_blue.png"}}) + elseif tonumber(player:get_attribute("dragon_meta1")) == 4 then + obj:set_properties({textures={"mobs_dragon_green.png"}}) + elseif tonumber(player:get_attribute("dragon_meta1")) == 5 then + obj:set_properties({textures={"mobs_dragon_black.png"}}) + elseif tonumber(player:get_attribute("dragon_meta1")) == 6 then + obj:set_properties({textures={"mobs_dragon_great.png"}}) + elseif tonumber(player:get_attribute("dragon_meta1")) == 1 then + obj:set_properties({textures={"mobs_dragon_red.png"}}) + end + elseif animal == "fox" then + if tonumber(player:get_attribute("fox_meta1")) == 2 then + obj:set_properties({textures={"mobs_fox1.png"}}) + elseif tonumber(player:get_attribute("fox_meta1")) == 1 then + obj:set_properties({textures={"mobs_fox.png"}}) + end + end + if tonumber(player:get_attribute(animal.."_meta2")) == 2 then + ent.walk_velocity = 0 + ent.run_velocity = 0 + elseif tonumber(player:get_attribute(animal.."_meta2")) == 1 then + ent.walk_velocity = 1 + ent.run_velocity = 3 + end +end \ No newline at end of file diff --git a/mods/pipeworks/crafts.lua b/mods/pipeworks/crafts.lua index 5cbf0b8..b98f973 100644 --- a/mods/pipeworks/crafts.lua +++ b/mods/pipeworks/crafts.lua @@ -19,10 +19,6 @@ minetest.register_craft( { }, }) - - - - minetest.register_craft( { output = "pipeworks:mese_sand_tube_1 2", recipe = { @@ -32,6 +28,23 @@ minetest.register_craft( { }, }) +minetest.register_craft( { + output = "pipeworks:crossing_tube_1 2", + recipe = { + { "gems:shadow_gem", "gems:shadow_gem", "gems:shadow_gem" }, + { "", "", "" }, + { "gems:shadow_gem", "gems:shadow_gem", "gems:shadow_gem" } + }, +}) + +minetest.register_craft( { + output = "pipeworks:mese_tube_000000 2", + recipe = { + { "gems:amethyst_gem", "gems:amethyst_gem", "gems:amethyst_gem" }, + { "", "", "" }, + { "gems:amethyst_gem", "gems:amethyst_gem", "gems:amethyst_gem" } + }, +}) minetest.register_craft( { diff --git a/mods/player_api/README.txt b/mods/player_api/README.txt index 22d040c..0f6a0b8 100644 --- a/mods/player_api/README.txt +++ b/mods/player_api/README.txt @@ -4,6 +4,7 @@ See license.txt for license information. Provides an API to allow multiple mods to set player models and textures. Also sets the default model, texture, and player flags. +This mod is only for content related to the Player API and the player object. Authors of source code ---------------------- @@ -16,17 +17,13 @@ stujones11 (CC BY-SA 3.0): character.b3d character.blend -- Both derived from a model by MirceaKitsune (CC BY-SA 3.0) +An0n3m0us (CC BY-SA 3.0): + character.b3d + character.blend -- Player animation improvement + Jordach (CC BY-SA 3.0): character.png -paramat (CC BY-SA 3.0): - gui_hotbar.png - gui_hotbar_selected.png - celeron55, Perttu Ahola (CC BY-SA 3.0): player.png player_back.png - -sonictechtonic (CC BY 3.0): -https://www.freesound.org/people/sonictechtonic/sounds/241872/ - player_damage.ogg diff --git a/mods/player_api/api.lua b/mods/player_api/api.lua index 0afd679..4cb3944 100644 --- a/mods/player_api/api.lua +++ b/mods/player_api/api.lua @@ -96,6 +96,15 @@ end) local player_set_animation = player_api.set_animation local player_attached = player_api.player_attached +-- Prevent knockback for attached players +local old_calculate_knockback = minetest.calculate_knockback +function minetest.calculate_knockback(player, ...) + if player_attached[player:get_player_name()] then + return 0 + end + return old_calculate_knockback(player, ...) +end + -- Check each player and apply animations minetest.register_globalstep(function(dtime) for _, player in pairs(minetest.get_connected_players()) do diff --git a/mods/player_api/init.lua b/mods/player_api/init.lua index 783ff7e..19028de 100644 --- a/mods/player_api/init.lua +++ b/mods/player_api/init.lua @@ -31,6 +31,4 @@ minetest.register_on_joinplayer(function(player) {x = 200, y = 219}, 30 ) - player:hud_set_hotbar_image("gui_hotbar.png") - player:hud_set_hotbar_selected_image("gui_hotbar_selected.png") end) diff --git a/mods/player_api/license.txt b/mods/player_api/license.txt index 69bb2f8..dac0408 100644 --- a/mods/player_api/license.txt +++ b/mods/player_api/license.txt @@ -22,7 +22,7 @@ Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) Copyright (C) 2011-2018 celeron55, Perttu Ahola Copyright (C) 2012-2018 Jordach Copyright (C) 2018 stujones11 -Copyright (C) 2018 paramat +Copyright (C) 2019 An0n3m0us You are free to: Share — copy and redistribute the material in any medium or format. @@ -51,34 +51,3 @@ rights may limit how you use the material. For more details: http://creativecommons.org/licenses/by-sa/3.0/ - ------------------------------------- - -Attribution 3.0 Unported (CC BY 3.0) -Copyright (C) 2014-2018 sonictechtonic - -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. -The licensor cannot revoke these freedoms as long as you follow the license terms. - -Under the following terms: - -Attribution — You must give appropriate credit, provide a link to the license, and -indicate if changes were made. You may do so in any reasonable manner, but not in any way -that suggests the licensor endorses you or your use. - -No additional restrictions — You may not apply legal terms or technological measures that -legally restrict others from doing anything the license permits. - -Notices: - -You do not have to comply with the license for elements of the material in the public -domain or where your use is permitted by an applicable exception or limitation. -No warranties are given. The license may not give you all of the permissions necessary -for your intended use. For example, other rights such as publicity, privacy, or moral -rights may limit how you use the material. - -For more details: -http://creativecommons.org/licenses/by/3.0/ - diff --git a/mods/player_api/models/character.b3d b/mods/player_api/models/character.b3d index b3b772a4108a04c96491d1e86599bd3e977abbdc..8edbaf6377891568c248cd73d2d691f97c775311 100644 GIT binary patch literal 73433 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%0D>Q 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 ZXpY6Y*b3|77Oab}F$*L6x^P}^{{uEY)gk}@ literal 73433 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 diff --git a/mods/player_api/models/character.blend b/mods/player_api/models/character.blend index 652579c152ab3ce8c535ca3cfc507cf6537550ed..f0ce4117f09231e5e527eab905f8051e226344a3 100644 GIT binary patch literal 632188 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 z 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

;hG>Nl~R$ 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 P9ww<$r*cI+z3}&c_MMAk diff --git a/mods/screwdriver/locale/screwdriver.ms.tr b/mods/screwdriver/locale/screwdriver.ms.tr new file mode 100644 index 0000000..f296fc5 --- /dev/null +++ b/mods/screwdriver/locale/screwdriver.ms.tr @@ -0,0 +1,3 @@ +# textdomain: screwdriver +Screwdriver=Pemutar Skru +(left-click rotates face, right-click rotates axis)=(klik-kiri putar muka, klik-kanan putar paksi) diff --git a/mods/screwdriver/locale/screwdriver.ru.tr b/mods/screwdriver/locale/screwdriver.ru.tr new file mode 100644 index 0000000..bbab330 --- /dev/null +++ b/mods/screwdriver/locale/screwdriver.ru.tr @@ -0,0 +1,3 @@ +# textdomain: screwdriver +Screwdriver=Отвёртка +(left-click rotates face, right-click rotates axis)=(клик левой кнопкой мыши вращает грань, клик правой кнопкой мыши вращает ось) diff --git a/mods/screwdriver/locale/screwdriver.se.tr b/mods/screwdriver/locale/screwdriver.se.tr new file mode 100644 index 0000000..9197357 --- /dev/null +++ b/mods/screwdriver/locale/screwdriver.se.tr @@ -0,0 +1,3 @@ +# textdomain: screwdriver +Screwdriver=Skruvmejsel +(left-click rotates face, right-click rotates axis)=(vänster-klick roterar ansikte, höger-klick roterar axeln) \ No newline at end of file diff --git a/mods/screwdriver/locale/screwdriver.zh_CN.tr b/mods/screwdriver/locale/screwdriver.zh_CN.tr new file mode 100644 index 0000000..caddf79 --- /dev/null +++ b/mods/screwdriver/locale/screwdriver.zh_CN.tr @@ -0,0 +1,3 @@ +# textdomain: screwdriver +Screwdriver=螺丝刀 +(left-click rotates face, right-click rotates axis)=(左键单击旋转面,右键单击旋转轴) diff --git a/mods/screwdriver/locale/screwdriver.zh_TW.tr b/mods/screwdriver/locale/screwdriver.zh_TW.tr new file mode 100644 index 0000000..e638bfa --- /dev/null +++ b/mods/screwdriver/locale/screwdriver.zh_TW.tr @@ -0,0 +1,3 @@ +# textdomain: screwdriver +Screwdriver=螺絲刀 +(left-click rotates face, right-click rotates axis)=(左鍵單擊旋轉面,右鍵單擊旋轉軸) diff --git a/mods/sethome/locale/sethome.ms.tr b/mods/sethome/locale/sethome.ms.tr new file mode 100644 index 0000000..7e9ec76 --- /dev/null +++ b/mods/sethome/locale/sethome.ms.tr @@ -0,0 +1,8 @@ +# textdomain: sethome +Can use /sethome and /home=Boleh guna /sethome dan /home +Teleport you to your home point=Teleportasikan anda ke titik rumah anda +Teleported to home!=Diteleportasikan ke rumah! +Set a home using /sethome=Tetapkan rumah menggunakan /sethome +Set your home point=Tetapkan titik rumah anda +Home set!=Rumah ditetapkan! +Player not found!=Pemain tidak dijumpai! diff --git a/mods/sethome/locale/sethome.ru.tr b/mods/sethome/locale/sethome.ru.tr new file mode 100644 index 0000000..6738824 --- /dev/null +++ b/mods/sethome/locale/sethome.ru.tr @@ -0,0 +1,8 @@ +# textdomain: sethome +Can use /sethome and /home=Возможность использовать /sethome и /home +Teleport you to your home point=Вы телепортируетесь в свою домашнюю точку +Teleported to home!=Вы телепортировались домой! +Set a home using /sethome=Установите домашнюю точку, используя /sethome +Set your home point=Установите вашу домашнюю точку +Home set!=Домашняя точка установлена! +Player not found!=Игрок не обнаружен! diff --git a/mods/sethome/locale/sethome.se.tr b/mods/sethome/locale/sethome.se.tr new file mode 100644 index 0000000..6077e4a --- /dev/null +++ b/mods/sethome/locale/sethome.se.tr @@ -0,0 +1,8 @@ +# textdomain: sethome +Can use /sethome and /home=Kan används /sethome och /home +Teleport you to your home point=Teleportera dig till din hempunkt +Teleported to home!=Teleporterad hem! +Set a home using /sethome=Ställ in ett hem med /sethome +Set your home point=Ställ in din hempunkt +Home set!=Hem inställt! +Player not found!=Spelare inte hittad! \ No newline at end of file diff --git a/mods/sethome/locale/sethome.zh_CN.tr b/mods/sethome/locale/sethome.zh_CN.tr new file mode 100644 index 0000000..9e3780a --- /dev/null +++ b/mods/sethome/locale/sethome.zh_CN.tr @@ -0,0 +1,8 @@ +# textdomain: sethome +Can use /sethome and /home=可以使用/sethome和/home +Teleport you to your home point=传送您到您家的地点 +Teleported to home!=已传送到家! +Set a home using /sethome=使用/sethome设定家 +Set your home point=设定您家的地点 +Home set!=已设定家! +Player not found!=未找到玩家! diff --git a/mods/sethome/locale/sethome.zh_TW.tr b/mods/sethome/locale/sethome.zh_TW.tr new file mode 100644 index 0000000..43e14aa --- /dev/null +++ b/mods/sethome/locale/sethome.zh_TW.tr @@ -0,0 +1,8 @@ +# textdomain: sethome +Can use /sethome and /home=可以使用/sethome和/home +Teleport you to your home point=傳送您到您家的地點 +Teleported to home!=已傳送到家! +Set a home using /sethome=使用/sethome設定家 +Set your home point=設定您家的地點 +Home set!=已設定家! +Player not found!=未找到玩家! diff --git a/mods/sfinv/api.lua b/mods/sfinv/api.lua index 509cb90..1dbc44a 100644 --- a/mods/sfinv/api.lua +++ b/mods/sfinv/api.lua @@ -37,21 +37,21 @@ function sfinv.get_nav_fs(player, context, nav, current_idx) end local theme_inv = [[ - image[0,4.7;1,1;gui_hb_bg.png] - image[1,4.7;1,1;gui_hb_bg.png] - image[2,4.7;1,1;gui_hb_bg.png] - image[3,4.7;1,1;gui_hb_bg.png] - image[4,4.7;1,1;gui_hb_bg.png] - image[5,4.7;1,1;gui_hb_bg.png] - image[6,4.7;1,1;gui_hb_bg.png] - image[7,4.7;1,1;gui_hb_bg.png] - list[current_player;main;0,4.7;8,1;] - list[current_player;main;0,5.85;8,3;8] + image[0,5.2;1,1;gui_hb_bg.png] + image[1,5.2;1,1;gui_hb_bg.png] + image[2,5.2;1,1;gui_hb_bg.png] + image[3,5.2;1,1;gui_hb_bg.png] + image[4,5.2;1,1;gui_hb_bg.png] + image[5,5.2;1,1;gui_hb_bg.png] + image[6,5.2;1,1;gui_hb_bg.png] + image[7,5.2;1,1;gui_hb_bg.png] + list[current_player;main;0,5.2;8,1;] + list[current_player;main;0,6.35;8,3;8] ]] function sfinv.make_formspec(player, context, content, show_inv, size) local tmp = { - size or "size[8,8.6]", + size or "size[8,9.1]", sfinv.get_nav_fs(player, context, context.nav_titles, context.nav_idx), show_inv and theme_inv or "", content diff --git a/mods/sfinv/locale/sfinv.ms.tr b/mods/sfinv/locale/sfinv.ms.tr new file mode 100644 index 0000000..cc416ca --- /dev/null +++ b/mods/sfinv/locale/sfinv.ms.tr @@ -0,0 +1,2 @@ +# textdomain:sfinv +Crafting=Pertukangan diff --git a/mods/sfinv/locale/sfinv.ru.tr b/mods/sfinv/locale/sfinv.ru.tr new file mode 100644 index 0000000..a98c708 --- /dev/null +++ b/mods/sfinv/locale/sfinv.ru.tr @@ -0,0 +1,2 @@ +# textdomain:sfinv +Crafting=Крафтинг diff --git a/mods/sfinv/locale/sfinv.se.tr b/mods/sfinv/locale/sfinv.se.tr new file mode 100644 index 0000000..cf2924a --- /dev/null +++ b/mods/sfinv/locale/sfinv.se.tr @@ -0,0 +1,2 @@ +# textdomain:sfinv +Crafting=Tillverkning \ No newline at end of file diff --git a/mods/sfinv/locale/sfinv.zh_CN.tr b/mods/sfinv/locale/sfinv.zh_CN.tr new file mode 100644 index 0000000..251362f --- /dev/null +++ b/mods/sfinv/locale/sfinv.zh_CN.tr @@ -0,0 +1,2 @@ +# textdomain:sfinv +Crafting=合成 diff --git a/mods/sfinv/locale/sfinv.zh_TW.tr b/mods/sfinv/locale/sfinv.zh_TW.tr new file mode 100644 index 0000000..251362f --- /dev/null +++ b/mods/sfinv/locale/sfinv.zh_TW.tr @@ -0,0 +1,2 @@ +# textdomain:sfinv +Crafting=合成 diff --git a/mods/spawn/init.lua b/mods/spawn/init.lua index 0e1261e..12c957f 100644 --- a/mods/spawn/init.lua +++ b/mods/spawn/init.lua @@ -135,6 +135,7 @@ local function on_spawn(player) if success then player:set_pos(spawn_pos) end + return success end minetest.register_on_newplayer(function(player) @@ -153,7 +154,5 @@ minetest.register_on_respawnplayer(function(player) return end - on_spawn(player) - - return true + return on_spawn(player) end) diff --git a/mods/stairs/locale/stairs.fr.tr b/mods/stairs/locale/stairs.fr.tr index 2dd6594..81b575e 100644 --- a/mods/stairs/locale/stairs.fr.tr +++ b/mods/stairs/locale/stairs.fr.tr @@ -142,4 +142,4 @@ Ice Slab=Dalle de glace Snow Block Stair=Escalier en bloc de neige Inner Snow Block Stair=Escalier intérieur en bloc de neige Outer Snow Block Stair=Escalier extérieur en bloc de neige -Snow Block Slab=Escalier en bloc de neige +Snow Block Slab=Dalle en bloc de neige diff --git a/mods/stairs/locale/stairs.ms.tr b/mods/stairs/locale/stairs.ms.tr new file mode 100644 index 0000000..a39c7f6 --- /dev/null +++ b/mods/stairs/locale/stairs.ms.tr @@ -0,0 +1,145 @@ +# textdomain: stairs +Glass Stair=Tangga Kaca +Glass Slab=Papak Kaca +Inner Glass Stair=Tangga Kaca Dalaman +Outer Glass Stair=Tangga Kaca Luaran +Obsidian Glass Stair=Tangga Obsidia +Obsidian Glass Slab=Papak Obsidia +Inner Obsidian Glass Stair=Tangga Obsidia Dalaman +Outer Obsidian Glass Stair=Tangga Obsidia Luaran +Wooden Stair=Tangga Kayu +Inner Wooden Stair=Tangga Kayu Dalaman +Outer Wooden Stair=Tangga Kayu Luaran +Wooden Slab=Papak Kayu +Jungle Wood Stair=Tangga Kayu Hutan +Inner Jungle Wood Stair=Tangga Kayu Hutan Dalaman +Outer Jungle Wood Stair=Tangga Kayu Hutan Luaran +Jungle Wood Slab=Papak Kayu Hutan +Pine Wood Stair=Tangga Kayu Pain +Inner Pine Wood Stair=Tangga Kayu Pain Dalaman +Outer Pine Wood Stair=Tangga Kayu Pain Luaran +Pine Wood Slab=Papak Kayu Pain +Acacia Wood Stair=Tangga Kayu Akasia +Inner Acacia Wood Stair=Tangga Kayu Akasia Dalaman +Outer Acacia Wood Stair=Tangga Kayu Akasia Luaran +Acacia Wood Slab=Papak Kayu Akasia +Aspen Wood Stair=Tangga Kayu Aspen +Inner Aspen Wood Stair=Tangga Kayu Aspen Dalaman +Outer Aspen Wood Stair=Tangga Kayu Aspen Luaran +Aspen Wood Slab=Papak Kayu Aspen +Stone Stair=Tangga Batu +Inner Stone Stair=Tangga Batu Dalaman +Outer Stone Stair=Tangga Batu Luaran +Stone Slab=Papak Batu +Cobblestone Stair=Tangga Batu Buntar +Inner Cobblestone Stair=Tangga Batu Buntar Dalaman +Outer Cobblestone Stair=Tangga Batu Buntar Luaran +Cobblestone Slab=Papak Batu Buntar +Mossy Cobblestone Stair=Tangga Batu Buntar Berlumut +Inner Mossy Cobblestone Stair=Tangga Batu Buntar Berlumut Dalaman +Outer Mossy Cobblestone Stair=Tangga Batu Buntar Berlumut Luaran +Mossy Cobblestone Slab=Papak Batu Buntar Berlumut +Stone Brick Stair=Tangga Bata Batu +Inner Stone Brick Stair=Tangga Bata Batu Dalaman +Outer Stone Brick Stair=Tangga Bata Batu Luaran +Stone Brick Slab=Papak Bata Batu +Stone Block Stair=Tangga Bongkah Batu +Inner Stone Block Stair=Tangga Bongkah Batu Dalaman +Outer Stone Block Stair=Tangga Bongkah Batu Luaran +Stone Block Slab=Papak Bongkah Batu +Desert Stone Stair=Tangga Batu Gurun +Inner Desert Stone Stair=Tangga Batu Gurun Dalaman +Outer Desert Stone Stair=Tangga Batu Gurun Luaran +Desert Stone Slab=Papak Batu Gurun +Desert Cobblestone Stair=Tangga Batu Buntar Gurun +Inner Desert Cobblestone Stair=Tangga Batu Buntar Gurun Dalaman +Outer Desert Cobblestone Stair=Tangga Batu Buntar Gurun Luaran +Desert Cobblestone Slab=Papak Batu Buntar Gurun +Desert Stone Brick Stair=Tangga Bata Batu Gurun +Inner Desert Stone Brick Stair=Tangga Bata Batu Gurun Dalaman +Outer Desert Stone Brick Stair=Tangga Bata Batu Gurun Luaran +Desert Stone Brick Slab=Papak Bata Batu Gurun +Desert Stone Block Stair=Tangga Bongkah Batu Gurun +Inner Desert Stone Block Stair=Tangga Bongkah Batu Gurun Dalaman +Outer Desert Stone Block Stair=Tangga Bongkah Batu Gurun Luaran +Desert Stone Block Slab=Papak Bongkah Batu Gurun +Sandstone Stair=Tangga Batu Pasir +Inner Sandstone Stair=Tangga Batu Pasir Dalaman +Outer Sandstone Stair=Tangga Batu Pasir Luaran +Sandstone Slab=Papak Batu Pasir +Sandstone Brick Stair=Tangga Bata Batu Pasir +Inner Sandstone Brick Stair=Tangga Bata Batu Pasir Dalaman +Outer Sandstone Brick Stair=Tangga Bata Batu Pasir Luaran +Sandstone Brick Slab=Papak Bata Batu Pasir +Sandstone Block Stair=Tangga Bongkah Batu Pasir +Inner Sandstone Block Stair=Tangga Bongkah Batu Pasir Dalaman +Outer Sandstone Block Stair=Tangga Bongkah Batu Pasir Luaran +Sandstone Block Slab=Papak Bongkah Batu Pasir +Desert Sandstone Stair=Tangga Batu Pasir Gurun +Inner Desert Sandstone Stair=Tangga Batu Pasir Gurun Dalaman +Outer Desert Sandstone Stair=Tangga Batu Pasir Gurun Luaran +Desert Sandstone Slab=Papak Batu Pasir Gurun +Desert Sandstone Brick Stair=Tangga Bata Batu Pasir Gurun +Inner Desert Sandstone Brick Stair=Tangga Bata Batu Pasir Gurun Dalaman +Outer Desert Sandstone Brick Stair=Tangga Bata Batu Pasir Gurun Luaran +Desert Sandstone Brick Slab=Papak Bata Batu Pasir Gurun +Desert Sandstone Block Stair=Tangga Bongkah Batu Pasir Gurun +Inner Desert Sandstone Block Stair=Tangga Bongkah Batu Pasir Gurun Dalaman +Outer Desert Sandstone Block Stair=Tangga Bongkah Batu Pasir Gurun Luaran +Desert Sandstone Block Slab=Papak Bongkah Batu Pasir Gurun +Silver Sandstone Stair=Tangga Batu Pasir Perak +Inner Silver Sandstone Stair=Tangga Batu Pasir Perak Dalaman +Outer Silver Sandstone Stair=Tangga Batu Pasir Perak Luaran +Silver Sandstone Slab=Papak Batu Pasir Perak +Silver Sandstone Brick Stair=Tangga Bata Batu Pasir Perak +Inner Silver Sandstone Brick Stair=Tangga Bata Batu Pasir Perak Dalaman +Outer Silver Sandstone Brick Stair=Tangga Bata Batu Pasir Perak Luaran +Silver Sandstone Brick Slab=Papak Bata Batu Pasir Perak +Silver Sandstone Block Stair=Tangga Bongkah Batu Pasir Perak +Inner Silver Sandstone Block Stair=Tangga Bongkah Batu Pasir Perak Dalaman +Outer Silver Sandstone Block Stair=Tangga Bongkah Batu Pasir Perak Luaran +Silver Sandstone Block Slab=Papak Bongkah Batu Pasir Perak +Obsidian Stair=Tangga Obsidia +Inner Obsidian Stair=Tangga Obsidia Dalaman +Outer Obsidian Stair=Tangga Obsidia Luaran +Obsidian Slab=Papak Obsidia +Obsidian Brick Stair=Tangga Bata Obsidia +Inner Obsidian Brick Stair=Tangga Bata Obsidia Dalaman +Outer Obsidian Brick Stair=Tangga Bata Obsidia Luaran +Obsidian Brick Slab=Papak Bata Obsidia +Obsidian Block Stair=Tangga Bongkah Obsidia +Inner Obsidian Block Stair=Tangga Bongkah Obsidia Dalaman +Outer Obsidian Block Stair=Tangga Bongkah Obsidia Luaran +Obsidian Block Slab=Papak Bongkah Obsidia +Brick Stair=Tangga Bata +Inner Brick Stair=Tangga Bata Dalaman +Outer Brick Stair=Tangga Bata Luaran +Brick Slab=Papak Bata +Steel Block Stair=Tangga Bongkah Keluli +Inner Steel Block Stair=Tangga Bongkah Keluli Dalaman +Outer Steel Block Stair=Tangga Bongkah Keluli Luaran +Steel Block Slab=Papak Bongkah Keluli +Tin Block Stair=Tangga Bongkah Timah +Inner Tin Block Stair=Tangga Bongkah Timah Dalaman +Outer Tin Block Stair=Tangga Bongkah Timah Luaran +Tin Block Slab=Papak Bongkah Timah +Copper Block Stair=Tangga Bongkah Tembaga +Inner Copper Block Stair=Tangga Bongkah Tembaga Dalaman +Outer Copper Block Stair=Tangga Bongkah Tembaga Luaran +Copper Block Slab=Papak Bongkah Tembaga +Bronze Block Stair=Tangga Bongkah Gangsa +Inner Bronze Block Stair=Tangga Bongkah Gangsa Dalaman +Outer Bronze Block Stair=Tangga Bongkah Gangsa Luaran +Bronze Block Slab=Papak Bongkah Gangsa +Gold Block Stair=Tangga Bongkah Emas +Inner Gold Block Stair=Tangga Bongkah Emas Dalaman +Outer Gold Block Stair=Tangga Bongkah Emas Luaran +Gold Block Slab=Papak Bongkah Emas +Ice Stair=Tangga Ais +Inner Ice Stair=Tangga Ais Dalaman +Outer Ice Stair=Tangga Ais Luaran +Ice Slab=Papak Ais +Snow Block Stair=Tangga Bongkah Salji +Inner Snow Block Stair=Tangga Bongkah Salji Dalaman +Outer Snow Block Stair=Tangga Bongkah Salji Luaran +Snow Block Slab=Papak Bongkah Salji diff --git a/mods/stairs/locale/stairs.ru.tr b/mods/stairs/locale/stairs.ru.tr new file mode 100644 index 0000000..2d5850e --- /dev/null +++ b/mods/stairs/locale/stairs.ru.tr @@ -0,0 +1,145 @@ +# textdomain: stairs +Glass Stair=Стеклянная Ступень +Glass Slab=Стеклянная Плита +Inner Glass Stair=Угловая Стеклянная Ступень (Внутренний Угол) +Outer Glass Stair=Угловая Стеклянная Ступень (Внешний Угол) +Obsidian Glass Stair=Стеклянная Ступень Из Обсидиана +Obsidian Glass Slab=Стеклянная Плита Из Обсидиана +Inner Obsidian Glass Stair=Угловая Стеклянная Ступень Из Обсидиана (Внутренний Угол) +Outer Obsidian Glass Stair=Угловая Стеклянная Ступень Из Обсидиана (Внешний Угол) +Wooden Stair=Яблоневая Деревянная Ступень +Inner Wooden Stair=Угловая Яблоневая Деревянная Ступень (Внутренний Угол) +Outer Wooden Stair=Угловая Яблоневая Деревянная Ступень (Внешний Угол) +Wooden Slab=Яблоневая Деревянная Плита +Jungle Wood Stair=Тропическая Деревянная Ступень +Inner Jungle Wood Stair=Угловая Тропическая Деревянная Ступень (Внутренний Угол) +Outer Jungle Wood Stair=Угловая Тропическая Деревянная Ступень (Внешний Угол) +Jungle Wood Slab=Тропическая Деревянная Плита +Pine Wood Stair=Сосновая Деревянная Ступень +Inner Pine Wood Stair=Угловая Сосновая Деревянная Ступень (Внутренний Угол) +Outer Pine Wood Stair=Угловая Сосновая Деревянная Ступень (Внешний Угол) +Pine Wood Slab=Сосновая Деревянная Плита +Acacia Wood Stair=Деревянная Ступень Из Акации +Inner Acacia Wood Stair=Угловая Деревянная Ступень Из Акации (Внутренний Угол) +Outer Acacia Wood Stair=Угловая Деревянная Ступень Из Акации (Внешний Угол) +Acacia Wood Slab=Деревянная Плита Из Акации +Aspen Wood Stair=Осиновая Деревянная Ступень +Inner Aspen Wood Stair=Угловая Осиновая Деревянная Ступень (Внутренний Угол) +Outer Aspen Wood Stair=Угловая осиновая Деревянная Ступень (Внешний Угол) +Aspen Wood Slab=Осиновая Деревянная Плита +Stone Stair=Каменная Ступень +Inner Stone Stair=Угловая Каменная Ступень (Внутренний Угол) +Outer Stone Stair=Угловая Каменная Ступень (Внешний Угол) +Stone Slab=Каменная Плита +Cobblestone Stair=Булыжниковая Ступень +Inner Cobblestone Stair=Угловая Булыжниковая Ступень (Внутренний Угол) +Outer Cobblestone Stair=Угловая Булыжниковая Ступень (Внешний Угол) +Cobblestone Slab=Булыжниковая Плита +Mossy Cobblestone Stair=Мшистая Булыжниковая Ступень +Inner Mossy Cobblestone Stair=Угловая Мшистая Булыжниковая Ступень (Внутренний Угол) +Outer Mossy Cobblestone Stair=Угловая Мшистая Булыжниковая Ступень (Внешний Угол) +Mossy Cobblestone Slab=Мшистая Булыжниковая Плита +Stone Brick Stair=Cтупень Из Каменных Кирпичей +Inner Stone Brick Stair=Угловая Ступень Из Каменных Кирпичей (Внутренний Угол) +Outer Stone Brick Stair=Угловая Ступень Из Каменных Кирпичей (Внешний Угол) +Stone Brick Slab=Плита Из Каменных Кирпичей +Stone Block Stair=Ступень Из Каменного Блока +Inner Stone Block Stair=Угловая Ступень Из Каменного Блока (Внутренний Угол) +Outer Stone Block Stair=Угловая Ступень Из Каменного Блока (Внешний Угол) +Stone Block Slab=Плита Из Каменного Блока +Desert Stone Stair=Ступень Из Пустынного Камня +Inner Desert Stone Stair=Угловая Ступень Из Пустынного Камня (Внутренний Угол) +Outer Desert Stone Stair=Угловая Ступень Из Пустынного Камня (Внешний Угол) +Desert Stone Slab=Плита Из Пустынного Камня +Desert Cobblestone Stair=Ступень Из Пустынного Булыжника +Inner Desert Cobblestone Stair=Угловая Ступень Из Пустынного Булыжника (Внутренний Угол) +Outer Desert Cobblestone Stair=Угловая Ступень Из Пустынного Булыжника (Внешний Угол) +Desert Cobblestone Slab=Плита Из Пустынного Камня +Desert Stone Brick Stair=Ступень Из Кирпичей Пустынного Камня +Inner Desert Stone Brick Stair=Угловая Ступень Из Кирпичей Пустынного Камня (Внутренний Угол) +Outer Desert Stone Brick Stair=Угловая Ступень Из Кирпичей Пустынного Камня (Внешний Угол) +Desert Stone Brick Slab=Плита Из Кирпичей Пустынного Камня +Desert Stone Block Stair=Ступень Из Пустынного Каменного Блока +Inner Desert Stone Block Stair=Угловая Ступень Из Пустынного Каменного Блока (Внутренний Угол) +Outer Desert Stone Block Stair=Угловая Ступень Из Пустынного Каменного Блока (Внешний Угол) +Desert Stone Block Slab=Плита Из Пустынного Каменного Блока +Sandstone Stair=Песчаниковая Ступень +Inner Sandstone Stair=Угловая Песчаниковая Ступень (Внутренний Угол) +Outer Sandstone Stair=Угловая Песчаниковая Ступень (Внешний Угол) +Sandstone Slab=Песчаниковая Плита +Sandstone Brick Stair=Ступень Из Песчаниковых Кирпичей +Inner Sandstone Brick Stair=Угловая Ступень Из Песчаниковых Кирпичей (Внутренний Угол) +Outer Sandstone Brick Stair=Угловая Ступень Из Песчаниковых Кирпичей (Внешний Угол) +Sandstone Brick Slab=Плита Из Песчаниковых Кирпичей +Sandstone Block Stair=Ступень Из Песчаникового Блока +Inner Sandstone Block Stair=Угловая Ступень Из Песчаникового Блока (Внутренний Угол) +Outer Sandstone Block Stair=Угловая Ступень Из Песчаникового Блока (Внешний Угол) +Sandstone Block Slab=Плита Из Песчаникового Блока +Desert Sandstone Stair=Ступень Из Пустынного Песчаника +Inner Desert Sandstone Stair=Угловая Ступень Из Пустынного Песчаника (Внутренний Угол) +Outer Desert Sandstone Stair=Угловая Ступень Из Пустынного Песчаника (Внешний Угол) +Desert Sandstone Slab=Плита Из Пустынного Песчаника +Desert Sandstone Brick Stair=Ступень Из Кирпичей Пустынного Песчаника +Inner Desert Sandstone Brick Stair=Угловая Ступень Из Кирпичей Пустынного Песчаника (Внутренний Угол) +Outer Desert Sandstone Brick Stair=Угловая Ступень Из Кирпичей Пустынного Песчаника (Внешний Угол) +Desert Sandstone Brick Slab=Плита Из Кирпичей Пустынного Песчаника +Desert Sandstone Block Stair=Ступень Из Пустынного Песчаникового Блока +Inner Desert Sandstone Block Stair=Угловая Ступень Из Пустынного Песчаникового Блока (Внутренний Угол) +Outer Desert Sandstone Block Stair=Угловая Ступень Из Пустынного Песчаникового Блока (Внешний Угол) +Desert Sandstone Block Slab=Плита Из Пустынного Песчаникового Блока +Silver Sandstone Stair=Ступень Из Серебрянного Песчаника +Inner Silver Sandstone Stair=Угловая Ступень Из Серебряного Песчаника (Внутренний Угол) +Outer Silver Sandstone Stair=Угловая Ступень Из Серебряного Песчаника (Внешний Угол) +Silver Sandstone Slab=Плита Из Серебряного Песчаника +Silver Sandstone Brick Stair=Ступень Из Кирпичей Серебряного Песчаника +Inner Silver Sandstone Brick Stair=Угловая Ступень Из Кирпичей Серебряного Песчаника (Внутренний Угол) +Outer Silver Sandstone Brick Stair=Угловая Ступень Из Кирпичей Серебряного Песчаника (Внешний Угол) +Silver Sandstone Brick Slab=Плита Из Кирпичей Серебряного Песчаника +Silver Sandstone Block Stair=Ступень Из Серебряного Песчаникового Блока +Inner Silver Sandstone Block Stair=Угловая Ступень Из Серебряного Песчаникового Блока (Внутренний Угол) +Outer Silver Sandstone Block Stair=Угловая Ступень Из Серебряного Песчаникового Блока (Внешний Угол) +Silver Sandstone Block Slab=Плита Из Серебряного Песчаникового Блока +Obsidian Stair=Обсидиановая Ступень +Inner Obsidian Stair=Угловая Обсидиановая Ступень (Внутренний Угол) +Outer Obsidian Stair=Угловая Обсидиановая Ступень (Внешний Угол) +Obsidian Slab=Обсидиановая Плита +Obsidian Brick Stair=Ступень Из Обсидиановых Кирпичей +Inner Obsidian Brick Stair=Угловая Ступень Из Обсидиановых Кирпичей (Внутренний Угол) +Outer Obsidian Brick Stair=Угловая Ступень Из Обсидиановых Кирпичей (Внешний Угол) +Obsidian Brick Slab=Плита Из Обсидиановых Кирпичей +Obsidian Block Stair=Ступень Из Обсидианового Блока +Inner Obsidian Block Stair=Угловая Ступень Из Обсидианового Блока (Внутренний Угол) +Outer Obsidian Block Stair=Угловая Ступень Из Обсидианового Блока (Внешний Угол) +Obsidian Block Slab=Плита Из Обсидианового Блока +Brick Stair=Ступень Из Кирпичей +Inner Brick Stair=Угловая Ступень Из Кирпичей (Внутренний Угол) +Outer Brick Stair=Угловая Ступень Из Кирпичей (Внешний Угол) +Brick Slab=Плита Из Кирпичей +Steel Block Stair=Ступень Из Стального Блока +Inner Steel Block Stair=Угловая Ступень Из Стального Блока (Внутренний Угол) +Outer Steel Block Stair=Угловая Ступень Из Стального Блока (Внешний Угол) +Steel Block Slab=Плита Из Стального Блока +Tin Block Stair=Ступень Из Оловянного Блока +Inner Tin Block Stair=Угловая Ступень Из Оловянного Блока (Внутренний Угол) +Outer Tin Block Stair=Угловая Ступень Из Оловянного Блока (Внешний Угол) +Tin Block Slab=Плита Из Оловянного Блока +Copper Block Stair=Ступень Из Медного Блока +Inner Copper Block Stair=Угловая Ступень Из Медного Блока (Внутренний Угол) +Outer Copper Block Stair=Угловая Ступень Из Медного Блока (Внешний Угол) +Copper Block Slab=Плита Из Медного Блока +Bronze Block Stair=Ступень Из Бронзового Блока +Inner Bronze Block Stair=Угловая Ступень Из Бронзового Блока (Внутренний Угол) +Outer Bronze Block Stair=Угловая Ступень Из Бронзового Блока (Внешний Угол) +Bronze Block Slab=Плита Из Бронзового Блока +Gold Block Stair=Ступень Из Золотого Блока +Inner Gold Block Stair=Угловая Ступень Из Золотого Блока (Внутренний Угол) +Outer Gold Block Stair=Угловая Ступень Из Золотого Блока (Внешний Угол) +Gold Block Slab=Плита Из Золотого Блока +Ice Stair=Ледяная Ступень +Inner Ice Stair=Угловая Ледяная Ступень (Внутренний Угол) +Outer Ice Stair=Угловая Ледяная Ступень (Внешний Угол) +Ice Slab=Ледяная Плита +Snow Block Stair=Ступень Из Снежного Блока +Inner Snow Block Stair=Угловая Ступень Из Снежного Блока (Внутренний Угол) +Outer Snow Block Stair=Угловая Ступень Из Снежного Блока (Внешний Угол) +Snow Block Slab=Плита Из Снежного Блока diff --git a/mods/stairs/locale/stairs.se.tr b/mods/stairs/locale/stairs.se.tr new file mode 100644 index 0000000..0bc0bbc --- /dev/null +++ b/mods/stairs/locale/stairs.se.tr @@ -0,0 +1,144 @@ +# textdomain: stairs +Glass Stair=Glastrappa +Glass Slab=Glasplatta +Inner Glass Stair=Inre glasstrappa +Outer Glass Stair=Yttre glasstrappa +Obsidian Glass Stair=Obsidian Glass Trappa +Obsidian Glass Slab=Obsidian glasplatta +Inner Obsidian Glass Stair=Inre Obsidian Glass Trappa +Outer Obsidian Glass Stair=Yttre Obsidian Glass Trappa +Wooden Stair=Trätrappa +Inner Wooden Stair=Inre trätrappa +Outer Wooden Stair=Yttre trätrappa +Wooden Slab=Träplatta +Jungle Wood Stair=Jungle Wood Stair +Inner Jungle Wood Stair=Inre Jungle Wood Stair +Outer Jungle Wood Stair=Ytter Jungle Wood Stair +Jungle Wood Slab=Jungle Wood Platta +Pine Wood Stair=Pine Wood Stair +Inner Pine Wood Stair=Inre tall trä trappa +Outer Pine Wood Stair=Ytter tall Trätrappa +Pine Wood Slab=Tallskiva +Acacia Wood Stair=Acacia Wood Stair +Inner Acacia Wood Stair=Inre Acacia Trätrappa +Outer Acacia Wood Stair=Yttre Acacia Trätrappa +Acacia Wood Slab=Acacia träplatta +Aspen Wood Stair=Asp Trä Stair +Inner Aspen Wood Stair=Inre Aspen Trätrappa +Outer Aspen Wood Stair=Yttre Aspen Trätrappa +Aspen Wood Slab=Asp Trä Platta +Stone Stair=Stentrappa +Inner Stone Stair=Inre stentrappa +Outer Stone Stair=Yttre stentrappa +Stone Slab=Stenplatta +Cobblestone Stair=Kullersten trappa +Inner Cobblestone Stair=Inre kullerstensTrappa +Outer Cobblestone Stair=Yttre kullerstensTrappa +Cobblestone Slab=Kullerstenplatta +Mossy Cobblestone Stair=Mossig kullerstensTrappa +Inner Mossy Cobblestone Stair=Inre mossiga kullerstensTrappa +Outer Mossy Cobblestone Stair=Yttre mossiga kullerstensTrappa +Mossy Cobblestone Slab=Mossig kullerstenplatta +Stone Brick Stair=Sten Brick Trappa +Inner Stone Brick Stair=Inre sten tegel trappa +Outer Stone Brick Stair=Yttre sten tegel trappa +Stone Brick Slab=Sten tegelplatta +Stone Block Stair=Sten Block Trappa +Inner Stone Block Stair=Inre stenblock trappa +Outer Stone Block Stair=Yttre stenblock trappa +Stone Block Slab=Stenblockplatta +Desert Stone Stair=Öken Sten Trappa +Inner Desert Stone Stair=Inre Öken Sten Stair +Outer Desert Stone Stair=Outer Öken Sten Stair +Desert Stone Slab=Öken Sten Platta +Desert Cobblestone Stair=Öken Kullersten Trappa +Inner Desert Cobblestone Stair=Inre Öken Kullersten Trappa +Outer Desert Cobblestone Stair=Outer Öken Kullersten Trappa +Desert Cobblestone Slab=Öken Kullersten Platta +Desert Stone Brick Stair=Öken Sten Brick Trappa +Inner Desert Stone Brick Stair=Inre Öken Sten Brick Trappa +Outer Desert Stone Brick Stair=Outer Öken Sten Brick Trappa +Desert Stone Brick Slab=Öken Sten tegelplatta +Desert Stone Block Stair=Öken Sten Block Trappa +Inner Desert Stone Block Stair=Inre Öken Sten Block Stair +Outer Desert Stone Block Stair=Outer Öken Sten Block Trappa +Desert Stone Block Slab=Öken Sten Block Platta +Sandstone Stair=Sandstenstrappa +Inner Sandstone Stair=Inre Sandstenstrappa +Outer Sandstone Stair=Yttre Sandstenstrappa +Sandstone Slab=Sandstenplatta +Sandstone Brick Stair=Sandsten tegel trappa +Inner Sandstone Brick Stair=Inre Sandsten tegel trappa +Outer Sandstone Brick Stair=Yttre Sandsten tegel trappa +Sandstone Brick Slab=Sandsten tegelplatta +Sandstone Block Stair=Sandsten block trappa +Inner Sandstone Block Stair=Inre Sandsten block trappa +Outer Sandstone Block Stair=Yttre Sandsten block trappa +Sandstone Block Slab=Sandsten Block Platta +Desert Sandstone Stair=Öken Sandsten Trappa +Inner Desert Sandstone Stair=Inre Öken Sandsten Trappa +Outer Desert Sandstone Stair=Outer Öken Sandsten Trappa +Desert Sandstone Slab=Öken Sandsten Platta +Desert Sandstone Brick Stair=Öken Sandsten Brick Trappa +Inner Desert Sandstone Brick Stair=Inre Öken Sandsten Brick Trappa +Outer Desert Sandstone Brick Stair=Outer Öken Sandsten Brick Trappa +Desert Sandstone Brick Slab=Öken Sandsten Tegelplatta +Desert Sandstone Block Stair=Öken Sandsten Block Trappa +Inner Desert Sandstone Block Stair=Inre Öken Sandsten Block Trappa +Outer Desert Sandstone Block Stair=Outer Öken Sandsten Block Trappa +Desert Sandstone Block Slab=Öken Sandsten Block Platta +Silver Sandstone Stair=Silver Sandsten trappa +Inner Silver Sandstone Stair=Inre silver Sandsten trappa +Outer Silver Sandstone Stair=Yttre silver Sandsten trappa +Silver Sandstone Slab=Silver Sandsten platta +Silver Sandstone Brick Stair=Silver Sandsten tegel trappa +Inner Silver Sandstone Brick Stair=Inre silver Sandsten tegel trappa +Outer Silver Sandstone Brick Stair=Yttre silver Sandsten tegel trappa +Silver Sandstone Brick Slab=Silver Sandsten tegelplatta +Silver Sandstone Block Stair=Silver Sandsten block trappa +Inner Silver Sandstone Block Stair=Inre silver Sandsten block trappa +Outer Silver Sandstone Block Stair=Yttre silver Sandsten block trappa +Silver Sandstone Block Slab=Silver Sandsten block platta +Obsidian Stair=Obsidian Trappa +Inner Obsidian Stair=Inre Obsidian Trappa +Outer Obsidian Stair=Yttre Obsidian Trappa +Obsidian Slab=Obsidian Platta +Obsidian Brick Stair=Obsidian Brick Stair +Inner Obsidian Brick Stair=Inre Obsidian Brick Trappa +Outer Obsidian Brick Stair=Yttre Obsidian Brick Trappa +Obsidian Brick Slab=Obsidian tegelplatta +Obsidian Block Stair=Obsidian Block Stair +Inner Obsidian Block Stair=Inre Obsidian Block Trappa +Outer Obsidian Block Stair=Yttre Obsidian Block Trappa +Obsidian Block Slab=Obsidian Block Slab +Brick Stair=Tegel trappa +Inner Brick Stair=Inre tegel trappa +Outer Brick Stair=Yttre tegel trappa +Brick Slab=Tegelplatta +Steel Block Stair=Stålblock trappa +Inner Steel Block Stair=Inre stålblock trappa +Outer Steel Block Stair=Yttre stålblocktrappa +Steel Block Slab=Stålblockplatta +Tin Block Stair=Tinn Block Trappa +Inner Tin Block Stair=Inre tennblock trappa +Outer Tin Block Stair=Yttre tennblock trappa +Tin Block Slab=Tennblockplatta +Copper Block Stair=Kopparblock trappa +Inner Copper Block Stair=Inre kopparblock trappa +Outer Copper Block Stair=Yttre kopparblock trappa +Copper Block Slab=Kopparblockplatta +Bronze Block Stair=Bronze Block Trappa +Inner Bronze Block Stair=Inre bronsblock trappa +Outer Bronze Block Stair=Yttre bronsblock trappa +Bronze Block Slab=Bronsblockplatta +Gold Block Stair=Guldblockstrappa +Inner Gold Block Stair=Inre guldblock trappa +Outer Gold Block Stair=Yttre guldblock trappa +Gold Block Slab=Guldblockplatta +Ice Stair=Ice Stair +Inner Ice Stair=Inre istrappa +Outer Ice Stair=Yttre istrappa +Ice Slab=Isplatta +Snow Block Stair=Snow Block Stair +Inner Snow Block Stair=Inre snöblock trappa +Outer Snow Block Stair=Yttre snöblock trappa \ No newline at end of file diff --git a/mods/stairs/locale/stairs.zh_CN.tr b/mods/stairs/locale/stairs.zh_CN.tr new file mode 100644 index 0000000..060ccaf --- /dev/null +++ b/mods/stairs/locale/stairs.zh_CN.tr @@ -0,0 +1,149 @@ +# textdomain: stairs +Glass Stair=玻璃楼梯 +Glass Slab=玻璃台阶 +Inner Glass Stair=玻璃楼梯(内) +Outer Glass Stair=玻璃楼梯(外) +Obsidian Glass Stair=黑曜石玻璃楼梯 +Obsidian Glass Slab=黑曜石玻璃台阶 +Inner Obsidian Glass Stair=黑曜石玻璃楼梯(内) +Outer Obsidian Glass Stair=黑曜石玻璃楼梯(外) +Wooden Stair=木制楼梯 +Inner Wooden Stair=木楼梯(内) +Outer Wooden Stair=木楼梯(外) +Wooden Slab=木制台阶 +Jungle Wood Stair=丛林木楼梯 +Inner Jungle Wood Stair=丛林木楼梯(内) +Outer Jungle Wood Stair=丛林木楼梯(外) +Jungle Wood Slab=丛林木台阶 +Pine Wood Stair=松木楼梯 +Inner Pine Wood Stair=松木楼梯(内) +Outer Pine Wood Stair=松木楼梯(外) +Pine Wood Slab=松木台阶 +Acacia Wood Stair=金合欢木楼梯 +Inner Acacia Wood Stair=金合欢木楼梯(内) +Outer Acacia Wood Stair=金合欢木楼梯(外) +Acacia Wood Slab=金合欢木台阶 +Aspen Wood Stair=白杨木楼梯 +Inner Aspen Wood Stair=白杨木楼梯(内) +Outer Aspen Wood Stair=白杨木楼梯(外) +Aspen Wood Slab=白杨木台阶 +Blue Stained Stair=蓝木楼梯 +Inner Blue Stained Stair=蓝木楼梯(内) +Outer Blue Stained Stair=蓝木楼梯(外) +Blue Stained Slab=蓝木台阶 +Stone Stair=石楼梯 +Inner Stone Stair=石楼梯(内) +Outer Stone Stair=石楼梯(外) +Stone Slab=石台阶 +Cobblestone Stair=圆石楼梯 +Inner Cobblestone Stair=圆石楼梯(内) +Outer Cobblestone Stair=圆石楼梯(外) +Cobblestone Slab=圆石台阶 +Mossy Cobblestone Stair=苔石楼梯 +Inner Mossy Cobblestone Stair=苔石楼梯(内) +Outer Mossy Cobblestone Stair=苔石楼梯(外) +Mossy Cobblestone Slab=苔石台阶 +Stone Brick Stair=石砖楼梯 +Inner Stone Brick Stair=石砖楼梯(内) +Outer Stone Brick Stair=石砖楼梯(外) +Stone Brick Slab=石砖台阶 +Stone Block Stair=石块楼梯 +Inner Stone Block Stair=石块楼梯(内) +Outer Stone Block Stair=石块楼梯(外) +Stone Block Slab=石块台阶 +Desert Stone Stair=沙漠石楼梯 +Inner Desert Stone Stair=沙漠石楼梯(内) +Outer Desert Stone Stair=沙漠石楼梯(外) +Desert Stone Slab=沙漠石台阶 +Desert Cobblestone Stair=沙漠圆石楼梯 +Inner Desert Cobblestone Stair=沙漠圆石楼梯(内) +Outer Desert Cobblestone Stair=沙漠圆石楼梯(外) +Desert Cobblestone Slab=沙漠圆石台阶 +Desert Stone Brick Stair=沙漠石砖楼梯 +Inner Desert Stone Brick Stair=沙漠石砖楼梯(内) +Outer Desert Stone Brick Stair=沙漠石砖楼梯(外) +Desert Stone Brick Slab=沙漠石砖台阶 +Desert Stone Block Stair=沙漠石块楼梯 +Inner Desert Stone Block Stair=沙漠石块楼梯(内) +Outer Desert Stone Block Stair=沙漠石块楼梯(外) +Desert Stone Block Slab=沙漠石块台阶 +Sandstone Stair=沙石楼梯 +Inner Sandstone Stair=沙石楼梯(内) +Outer Sandstone Stair=沙石楼梯(外) +Sandstone Slab=沙石台阶 +Sandstone Brick Stair=沙石砖楼梯 +Inner Sandstone Brick Stair=沙石砖楼梯(内) +Outer Sandstone Brick Stair=沙石砖楼梯(外) +Sandstone Brick Slab=沙石砖台阶 +Sandstone Block Stair=沙石块楼梯 +Inner Sandstone Block Stair=沙石块楼梯(内) +Outer Sandstone Block Stair=沙石块楼梯(外) +Sandstone Block Slab=沙石块台阶 +Desert Sandstone Stair=沙漠沙石楼梯 +Inner Desert Sandstone Stair=沙漠沙石楼梯(内) +Outer Desert Sandstone Stair=沙漠沙石楼梯(外) +Desert Sandstone Slab=沙漠沙石台阶 +Desert Sandstone Brick Stair=沙漠沙石砖楼梯 +Inner Desert Sandstone Brick Stair=沙漠沙石砖楼梯(内) +Outer Desert Sandstone Brick Stair=沙漠沙石砖楼梯(外) +Desert Sandstone Brick Slab=沙漠沙石砖台阶 +Desert Sandstone Block Stair=沙漠沙石块楼梯 +Inner Desert Sandstone Block Stair=沙漠沙石块楼梯(内) +Outer Desert Sandstone Block Stair=沙漠沙石块楼梯(外) +Desert Sandstone Block Slab=沙漠沙石块台阶 +Silver Sandstone Stair=银沙石楼梯 +Inner Silver Sandstone Stair=银沙石楼梯(内) +Outer Silver Sandstone Stair=银沙石楼梯(外) +Silver Sandstone Slab=银沙石台阶 +Silver Sandstone Brick Stair=银沙石砖楼梯 +Inner Silver Sandstone Brick Stair=银沙石砖楼梯(内) +Outer Silver Sandstone Brick Stair=银沙石砖楼梯(外) +Silver Sandstone Brick Slab=银沙石砖台阶 +Silver Sandstone Block Stair=银沙石块楼梯 +Inner Silver Sandstone Block Stair=银沙石块楼梯(内) +Outer Silver Sandstone Block Stair=银沙石块楼梯(外) +Silver Sandstone Block Slab=银沙石块台阶 +Obsidian Stair=黑曜石楼梯 +Inner Obsidian Stair=黑曜石楼梯(内) +Outer Obsidian Stair=黑曜石楼梯(外) +Obsidian Slab=黑曜石台阶 +Obsidian Brick Stair=黑曜石砖楼梯 +Inner Obsidian Brick Stair=黑曜石砖楼梯(内) +Outer Obsidian Brick Stair=黑曜石砖楼梯(外) +Obsidian Brick Slab=黑曜石砖台阶 +Obsidian Block Stair=黑曜石块楼梯 +Inner Obsidian Block Stair=黑曜石块楼梯(内) +Outer Obsidian Block Stair=黑曜石块楼梯(外) +Obsidian Block Slab=黑曜石块台阶 +Brick Stair=砖楼梯 +Inner Brick Stair=砖楼梯(内) +Outer Brick Stair=砖楼梯(外) +Brick Slab=砖制台阶 +Steel Block Stair=铁块楼梯 +Inner Steel Block Stair=铁块楼梯(内) +Outer Steel Block Stair=铁块楼梯(外) +Steel Block Slab=铁块台阶 +Tin Block Stair=锡块楼梯 +Inner Tin Block Stair=锡块楼梯(内) +Outer Tin Block Stair=锡块楼梯(外) +Tin Block Slab=锡块台阶 +Copper Block Stair=铜块楼梯 +Inner Copper Block Stair=铜块楼梯(内) +Outer Copper Block Stair=铜块楼梯(外) +Copper Block Slab=铜块台阶 +Bronze Block Stair=青铜块楼梯 +Inner Bronze Block Stair=青铜块楼梯(内) +Outer Bronze Block Stair=青铜块楼梯(外) +Bronze Block Slab=青铜块台阶 +Gold Block Stair=金块楼梯 +Inner Gold Block Stair=金块楼梯(内) +Outer Gold Block Stair=金块楼梯(外) +Gold Block Slab=金块台阶 +Ice Stair=冰阶梯 +Inner Ice Stair=冰块楼梯(内) +Outer Ice Stair=冰块楼梯(外) +Ice Slab=冰台阶 +Snow Block Stair=雪块楼梯 +Inner Snow Block Stair=雪块楼梯(内) +Outer Snow Block Stair=雪块楼梯(外) +Snow Block Slab=雪块台阶 diff --git a/mods/stairs/locale/stairs.zh_TW.tr b/mods/stairs/locale/stairs.zh_TW.tr new file mode 100644 index 0000000..00c43e2 --- /dev/null +++ b/mods/stairs/locale/stairs.zh_TW.tr @@ -0,0 +1,149 @@ +# textdomain: stairs +Glass Stair=玻璃樓梯 +Glass Slab=玻璃臺階 +Inner Glass Stair=玻璃樓梯(內) +Outer Glass Stair=玻璃樓梯(外) +Obsidian Glass Stair=黑曜石玻璃樓梯 +Obsidian Glass Slab=黑曜石玻璃臺階 +Inner Obsidian Glass Stair=黑曜石玻璃樓梯(內) +Outer Obsidian Glass Stair=黑曜石玻璃樓梯(外) +Wooden Stair=木製樓梯 +Inner Wooden Stair=木樓梯(內) +Outer Wooden Stair=木樓梯(外) +Wooden Slab=木製臺階 +Jungle Wood Stair=叢林木樓梯 +Inner Jungle Wood Stair=叢林木樓梯(內) +Outer Jungle Wood Stair=叢林木樓梯(外) +Jungle Wood Slab=叢林木臺階 +Pine Wood Stair=松木樓梯 +Inner Pine Wood Stair=松木樓梯(內) +Outer Pine Wood Stair=松木樓梯(外) +Pine Wood Slab=松木臺階 +Acacia Wood Stair=金合歡木樓梯 +Inner Acacia Wood Stair=金合歡木樓梯(內) +Outer Acacia Wood Stair=金合歡木樓梯(外) +Acacia Wood Slab=金合歡木臺階 +Aspen Wood Stair=白楊木樓梯 +Inner Aspen Wood Stair=白楊木樓梯(內) +Outer Aspen Wood Stair=白楊木樓梯(外) +Aspen Wood Slab=白楊木臺階 +Blue Stained Stair=藍木樓梯 +Inner Blue Stained Stair=藍木樓梯(內) +Outer Blue Stained Stair=藍木樓梯(外) +Blue Stained Slab=藍木臺階 +Stone Stair=石樓梯 +Inner Stone Stair=石樓梯(內) +Outer Stone Stair=石樓梯(外) +Stone Slab=石臺階 +Cobblestone Stair=圓石樓梯 +Inner Cobblestone Stair=圓石樓梯(內) +Outer Cobblestone Stair=圓石樓梯(外) +Cobblestone Slab=圓石臺階 +Mossy Cobblestone Stair=苔石樓梯 +Inner Mossy Cobblestone Stair=苔石樓梯(內) +Outer Mossy Cobblestone Stair=苔石樓梯(外) +Mossy Cobblestone Slab=苔石臺階 +Stone Brick Stair=石磚樓梯 +Inner Stone Brick Stair=石磚樓梯(內) +Outer Stone Brick Stair=石磚樓梯(外) +Stone Brick Slab=石磚臺階 +Stone Block Stair=石塊樓梯 +Inner Stone Block Stair=石塊樓梯(內) +Outer Stone Block Stair=石塊樓梯(外) +Stone Block Slab=石塊臺階 +Desert Stone Stair=沙漠石樓梯 +Inner Desert Stone Stair=沙漠石樓梯(內) +Outer Desert Stone Stair=沙漠石樓梯(外) +Desert Stone Slab=沙漠石臺階 +Desert Cobblestone Stair=沙漠圓石樓梯 +Inner Desert Cobblestone Stair=沙漠圓石樓梯(內) +Outer Desert Cobblestone Stair=沙漠圓石樓梯(外) +Desert Cobblestone Slab=沙漠圓石臺階 +Desert Stone Brick Stair=沙漠石磚樓梯 +Inner Desert Stone Brick Stair=沙漠石磚樓梯(內) +Outer Desert Stone Brick Stair=沙漠石磚樓梯(外) +Desert Stone Brick Slab=沙漠石磚臺階 +Desert Stone Block Stair=沙漠石塊樓梯 +Inner Desert Stone Block Stair=沙漠石塊樓梯(內) +Outer Desert Stone Block Stair=沙漠石塊樓梯(外) +Desert Stone Block Slab=沙漠石塊臺階 +Sandstone Stair=沙石樓梯 +Inner Sandstone Stair=沙石樓梯(內) +Outer Sandstone Stair=沙石樓梯(外) +Sandstone Slab=沙石臺階 +Sandstone Brick Stair=沙石磚樓梯 +Inner Sandstone Brick Stair=沙石磚樓梯(內) +Outer Sandstone Brick Stair=沙石磚樓梯(外) +Sandstone Brick Slab=沙石磚臺階 +Sandstone Block Stair=沙石塊樓梯 +Inner Sandstone Block Stair=沙石塊樓梯(內) +Outer Sandstone Block Stair=沙石塊樓梯(外) +Sandstone Block Slab=沙石塊臺階 +Desert Sandstone Stair=沙漠沙石樓梯 +Inner Desert Sandstone Stair=沙漠沙石樓梯(內) +Outer Desert Sandstone Stair=沙漠沙石樓梯(外) +Desert Sandstone Slab=沙漠沙石臺階 +Desert Sandstone Brick Stair=沙漠沙石磚樓梯 +Inner Desert Sandstone Brick Stair=沙漠沙石磚樓梯(內) +Outer Desert Sandstone Brick Stair=沙漠沙石磚樓梯(外) +Desert Sandstone Brick Slab=沙漠沙石磚臺階 +Desert Sandstone Block Stair=沙漠沙石塊樓梯 +Inner Desert Sandstone Block Stair=沙漠沙石塊樓梯(內) +Outer Desert Sandstone Block Stair=沙漠沙石塊樓梯(外) +Desert Sandstone Block Slab=沙漠沙石塊臺階 +Silver Sandstone Stair=銀沙石樓梯 +Inner Silver Sandstone Stair=銀沙石樓梯(內) +Outer Silver Sandstone Stair=銀沙石樓梯(外) +Silver Sandstone Slab=銀沙石臺階 +Silver Sandstone Brick Stair=銀沙石磚樓梯 +Inner Silver Sandstone Brick Stair=銀沙石磚樓梯(內) +Outer Silver Sandstone Brick Stair=銀沙石磚樓梯(外) +Silver Sandstone Brick Slab=銀沙石磚臺階 +Silver Sandstone Block Stair=銀沙石塊樓梯 +Inner Silver Sandstone Block Stair=銀沙石塊樓梯(內) +Outer Silver Sandstone Block Stair=銀沙石塊樓梯(外) +Silver Sandstone Block Slab=銀沙石塊臺階 +Obsidian Stair=黑曜石樓梯 +Inner Obsidian Stair=黑曜石樓梯(內) +Outer Obsidian Stair=黑曜石樓梯(外) +Obsidian Slab=黑曜石臺階 +Obsidian Brick Stair=黑曜石磚樓梯 +Inner Obsidian Brick Stair=黑曜石磚樓梯(內) +Outer Obsidian Brick Stair=黑曜石磚樓梯(外) +Obsidian Brick Slab=黑曜石磚臺階 +Obsidian Block Stair=黑曜石塊樓梯 +Inner Obsidian Block Stair=黑曜石塊樓梯(內) +Outer Obsidian Block Stair=黑曜石塊樓梯(外) +Obsidian Block Slab=黑曜石塊臺階 +Brick Stair=磚樓梯 +Inner Brick Stair=磚樓梯(內) +Outer Brick Stair=磚樓梯(外) +Brick Slab=磚制臺階 +Steel Block Stair=鐵塊樓梯 +Inner Steel Block Stair=鐵塊樓梯(內) +Outer Steel Block Stair=鐵塊樓梯(外) +Steel Block Slab=鐵塊臺階 +Tin Block Stair=錫塊樓梯 +Inner Tin Block Stair=錫塊樓梯(內) +Outer Tin Block Stair=錫塊樓梯(外) +Tin Block Slab=錫塊臺階 +Copper Block Stair=銅塊樓梯 +Inner Copper Block Stair=銅塊樓梯(內) +Outer Copper Block Stair=銅塊樓梯(外) +Copper Block Slab=銅塊臺階 +Bronze Block Stair=青銅塊樓梯 +Inner Bronze Block Stair=青銅塊樓梯(內) +Outer Bronze Block Stair=青銅塊樓梯(外) +Bronze Block Slab=青銅塊臺階 +Gold Block Stair=金塊樓梯 +Inner Gold Block Stair=金塊樓梯(內) +Outer Gold Block Stair=金塊樓梯(外) +Gold Block Slab=金塊臺階 +Ice Stair=冰階梯 +Inner Ice Stair=冰塊樓梯(內) +Outer Ice Stair=冰塊樓梯(外) +Ice Slab=冰臺階 +Snow Block Stair=雪塊樓梯 +Inner Snow Block Stair=雪塊樓梯(內) +Outer Snow Block Stair=雪塊樓梯(外) +Snow Block Slab=雪塊臺階 diff --git a/mods/technic/technic/tools/mining_drill.lua b/mods/technic/technic/tools/mining_drill.lua index f2b99b9..f13ccd1 100644 --- a/mods/technic/technic/tools/mining_drill.lua +++ b/mods/technic/technic/tools/mining_drill.lua @@ -3,13 +3,6 @@ local power_usage_per_node = {1000, 2000, 3000,0} local S = technic.getter -local mining_drill_mode_text = { - {S("Single node.")}, - {S("3 nodes deep.")}, - {S("3 nodes wide.")}, - {S("3 nodes tall.")}, - {S("3x3 nodes.")}, -} local function drill_dig_it0 (pos,player) if minetest.is_protected(pos, player:get_player_name()) then @@ -199,9 +192,7 @@ local function mining_drill_setmode(user,itemstack) meta={} mode=0 end - if meta["mode"]==nil then - minetest.chat_send_player(player_name, S("Use while sneaking to change Mining Drill Mk%d modes."):format(3)) meta["mode"]=0 mode=0 end @@ -209,7 +200,6 @@ local function mining_drill_setmode(user,itemstack) local mode2 = mode mode=mode+1 if mode>=6 then mode=1 end - minetest.chat_send_player(player_name, S("Mining Drill Mk%d Mode %d"):format(3, mode)..": "..mining_drill_mode_text[mode][1]) local items = user:get_wielded_item():get_name() if mode2 == 0 then item["name"]=items.."_"..mode @@ -389,12 +379,21 @@ for i=1,5,1 do }) end +local mining_drill_mode_text = {"single node","3 nodes deep","3 nodes wide","3 nodes tall","3x3 nodes"} minetest.register_tool("technic:mining_drill_mkA1", { description = "Admin tool 8: Mining drill", inventory_image = "technic_mining_drill_Admin1.png", wear_represents = "technic_RE_charge", on_refill = technic.refill_RE_charge, + on_secondary_use = function(itemstack, user, pointed_thing) + local keys = user:get_player_control() + local meta = minetest.deserialize(itemstack:get_metadata()) + if not meta or not meta.mode or keys.sneak then + return mining_drill_setmode(user, itemstack) + end + return itemstack + end, on_use = function(itemstack, user, pointed_thing) local keys = user:get_player_control() local player_name = user:get_player_name() @@ -417,19 +416,23 @@ technic.register_power_tool("technic:mining_drill_mkA1", max_charge[4]) for i=1,5,1 do technic.register_power_tool("technic:mining_drill_mkA1_"..i, max_charge[4]) minetest.register_tool("technic:mining_drill_mkA1_"..i, { - description = "Admin tool 8: Mining drill Mode "..i, + description = "Admin tool 8: Mining drill Mode "..i.." ("..mining_drill_mode_text[i]..")", inventory_image = "technic_mining_drill_Admin1.png^technic_tool_mode"..i..".png", wield_image = "technic_mining_drill_Admin1.png", wear_represents = "technic_RE_charge", on_refill = technic.refill_RE_charge, groups = {not_in_creative_inventory=1}, + on_secondary_use = function(itemstack, user, pointed_thing) + local keys = user:get_player_control() + local meta = minetest.deserialize(itemstack:get_metadata()) + if not meta or not meta.mode or keys.sneak then + return mining_drill_setmode(user, itemstack) + end + return itemstack + end, on_use = function(itemstack, user, pointed_thing) - local keys = user:get_player_control() local player_name = user:get_player_name() local meta = minetest.deserialize(itemstack:get_metadata()) - if not meta or not meta.mode or keys.sneak then - return mining_drill_setmode(user, itemstack) - end if pointed_thing.type ~= "node" or not pos_is_pointable(pointed_thing.under) then return end @@ -605,6 +608,14 @@ for _, m in pairs(mining_drill_list) do wear_represents = "technic_RE_charge", on_refill = technic.refill_RE_charge, groups = {not_in_creative_inventory=1}, + on_secondary_use = function(itemstack, user, pointed_thing) + local keys = user:get_player_control() + local meta = minetest.deserialize(itemstack:get_metadata()) + if not meta or not meta.mode or keys.sneak then + return mining_drill_setmode(user, itemstack) + end + return itemstack + end, on_use = function(itemstack, user, pointed_thing) local keys = user:get_player_control() local player_name = user:get_player_name() @@ -623,9 +634,6 @@ for _, m in pairs(mining_drill_list) do meta.charge = meta.charge - charge_to_take itemstack:set_metadata(minetest.serialize(meta)) technic.set_RE_wear(itemstack, meta.charge, m[2]) - print(m[2]) - print(m[3]) - print(meta.charge) end return itemstack end, @@ -633,19 +641,23 @@ for _, m in pairs(mining_drill_list) do for i=1,5,1 do technic.register_power_tool("technic:drill_mkS"..m[1].."_"..i, m[2]) minetest.register_tool("technic:drill_mkS"..m[1].."_"..i, { - description = "Spezial Mining drill lv."..m[1].." Mode "..i, + description = "Spezial Mining drill lv."..m[1].." Mode "..i.." ("..mining_drill_mode_text[i]..")", inventory_image = "technic_mining_drill_mkS"..m[1]..".png^technic_tool_mode"..i..".png", wield_image = "technic_mining_drill_mkS"..m[1]..".png", wear_represents = "technic_RE_charge", on_refill = technic.refill_RE_charge, groups = {not_in_creative_inventory=1}, - on_use = function(itemstack, user, pointed_thing) + on_secondary_use = function(itemstack, user, pointed_thing) local keys = user:get_player_control() - local player_name = user:get_player_name() local meta = minetest.deserialize(itemstack:get_metadata()) if not meta or not meta.mode or keys.sneak then return mining_drill_setmode(user, itemstack) end + return itemstack + end, + on_use = function(itemstack, user, pointed_thing) + local player_name = user:get_player_name() + local meta = minetest.deserialize(itemstack:get_metadata()) if pointed_thing.type ~= "node" or not pos_is_pointable(pointed_thing.under) or not meta.charge then return end @@ -657,9 +669,6 @@ for _, m in pairs(mining_drill_list) do meta.charge = meta.charge - charge_to_take itemstack:set_metadata(minetest.serialize(meta)) technic.set_RE_wear(itemstack, meta.charge, m[2]) - print(m[2]) - print(m[3]) - print(meta.charge) end return itemstack end, @@ -672,6 +681,15 @@ for _, m in pairs(mining_drill_list) do inventory_image = "technic_mining_drill_mkS"..m[1]..".png", wear_represents = "technic_RE_charge", on_refill = technic.refill_RE_charge, + on_secondary_use = function(itemstack, user, pointed_thing) + local keys = user:get_player_control() + local player_name = user:get_player_name() + local meta = minetest.deserialize(itemstack:get_metadata()) + if not meta or not meta.mode or keys.sneak then + return mining_drill_setmode(user, itemstack) + end + return itemstack + end, on_use = function(itemstack, user, pointed_thing) local keys = user:get_player_control() local player_name = user:get_player_name() @@ -691,19 +709,23 @@ for _, m in pairs(mining_drill_list) do for i=1,5,1 do technic.register_power_tool("technic:drill_mkS"..m[1].."_"..i, m[2]) minetest.register_tool("technic:drill_mkS"..m[1].."_"..i, { - description = "Spezial Mining drill lv.MAX Mode "..i, + description = "Spezial Mining drill lv.MAX Mode "..i.." ("..mining_drill_mode_text[i]..")", inventory_image = "technic_mining_drill_mkS"..m[1]..".png^technic_tool_mode"..i..".png", wield_image = "technic_mining_drill_mkS"..m[1]..".png", wear_represents = "technic_RE_charge", on_refill = technic.refill_RE_charge, groups = {not_in_creative_inventory=1}, - on_use = function(itemstack, user, pointed_thing) + on_secondary_use = function(itemstack, user, pointed_thing) local keys = user:get_player_control() - local player_name = user:get_player_name() local meta = minetest.deserialize(itemstack:get_metadata()) if not meta or not meta.mode or keys.sneak then return mining_drill_setmode(user, itemstack) end + return itemstack + end, + on_use = function(itemstack, user, pointed_thing) + local player_name = user:get_player_name() + local meta = minetest.deserialize(itemstack:get_metadata()) if pointed_thing.type ~= "node" or not pos_is_pointable(pointed_thing.under) then return end diff --git a/mods/tnt/init.lua b/mods/tnt/init.lua index 0e061fa..6565f85 100644 --- a/mods/tnt/init.lua +++ b/mods/tnt/init.lua @@ -163,9 +163,8 @@ local function entity_physics(pos, radius, drops) local damage = (4 / dist) * radius if obj:is_player() then - -- currently the engine has no method to set - -- player velocity. See #2960 - -- instead, we knock the player back 1.0 node, and slightly upwards + -- we knock the player back 1.0 node, and slightly upwards + -- TODO: switch to add_player_velocity() introduced in 5.1 local dir = vector.normalize(vector.subtract(obj_pos, pos)) local moveoff = vector.multiply(dir, dist + 1.0) local newpos = vector.add(pos, moveoff) @@ -174,31 +173,35 @@ local function entity_physics(pos, radius, drops) obj:set_hp(obj:get_hp() - damage) else - local do_damage = true - local do_knockback = true - local entity_drops = {} local luaobj = obj:get_luaentity() - local objdef = minetest.registered_entities[luaobj.name] - if objdef and objdef.on_blast then - do_damage, do_knockback, entity_drops = objdef.on_blast(luaobj, damage) - end + -- object might have disappeared somehow + if luaobj then + local do_damage = true + local do_knockback = true + local entity_drops = {} + local objdef = minetest.registered_entities[luaobj.name] - if do_knockback then - local obj_vel = obj:get_velocity() - obj:set_velocity(calc_velocity(pos, obj_pos, - obj_vel, radius * 10)) - end - if do_damage then - if not obj:get_armor_groups().immortal then - obj:punch(obj, 1.0, { - full_punch_interval = 1.0, - damage_groups = {fleshy = damage}, - }, nil) + if objdef and objdef.on_blast then + do_damage, do_knockback, entity_drops = objdef.on_blast(luaobj, damage) + end + + if do_knockback then + local obj_vel = obj:get_velocity() + obj:set_velocity(calc_velocity(pos, obj_pos, + obj_vel, radius * 10)) + end + if do_damage then + if not obj:get_armor_groups().immortal then + obj:punch(obj, 1.0, { + full_punch_interval = 1.0, + damage_groups = {fleshy = damage}, + }, nil) + end + end + for _, item in pairs(entity_drops) do + add_drop(drops, item) end - end - for _, item in pairs(entity_drops) do - add_drop(drops, item) end end end @@ -274,7 +277,7 @@ function tnt.burn(pos, nodename) 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.sound_play("tnt_ignite", {pos = pos}, true) minetest.get_node_timer(pos):start(1) end end @@ -403,7 +406,7 @@ function tnt.boom(pos, def) end local sound = def.sound or "tnt_explode" minetest.sound_play(sound, {pos = pos, gain = 2.5, - max_hear_distance = math.min(def.radius * 20, 128)}) + max_hear_distance = math.min(def.radius * 20, 128)}, true) local drops, radius = tnt_explode(pos, def.radius, def.ignore_protection, def.ignore_on_blast, owner, def.explode_center) -- append entity drops @@ -541,7 +544,8 @@ minetest.register_node("tnt:gunpowder_burning", { -- unaffected by explosions on_blast = function() end, on_construct = function(pos) - minetest.sound_play("tnt_gunpowder_burning", {pos = pos, gain = 2}) + minetest.sound_play("tnt_gunpowder_burning", {pos = pos, + gain = 2}, true) minetest.get_node_timer(pos):start(1) end, }) @@ -672,7 +676,7 @@ function tnt.register_tnt(def) -- unaffected by explosions on_blast = function() end, on_construct = function(pos) - minetest.sound_play("tnt_ignite", {pos = pos}) + minetest.sound_play("tnt_ignite", {pos = pos}, true) minetest.get_node_timer(pos):start(4) minetest.check_for_falling(pos) end, diff --git a/mods/tnt/locale/tnt.ms.tr b/mods/tnt/locale/tnt.ms.tr new file mode 100644 index 0000000..c4c5fdd --- /dev/null +++ b/mods/tnt/locale/tnt.ms.tr @@ -0,0 +1,4 @@ +# textdomain: tnt +Gun Powder=Serbuk Senjata Api +TNT Stick=Batang TNT +TNT=TNT diff --git a/mods/tnt/locale/tnt.ru.tr b/mods/tnt/locale/tnt.ru.tr new file mode 100644 index 0000000..a8cee43 --- /dev/null +++ b/mods/tnt/locale/tnt.ru.tr @@ -0,0 +1,4 @@ +# textdomain: tnt +Gun Powder=Порох +TNT Stick=Тротиловая Палка +TNT=Тротил diff --git a/mods/tnt/locale/tnt.se.tr b/mods/tnt/locale/tnt.se.tr new file mode 100644 index 0000000..21fbbd0 --- /dev/null +++ b/mods/tnt/locale/tnt.se.tr @@ -0,0 +1,4 @@ +# textdomain: tnt +Gun Powder=Krut +TNT Stick=Dynamitpinne +TNT=Dynamit \ No newline at end of file diff --git a/mods/tnt/locale/tnt.zh_CN.tr b/mods/tnt/locale/tnt.zh_CN.tr new file mode 100644 index 0000000..0a3294e --- /dev/null +++ b/mods/tnt/locale/tnt.zh_CN.tr @@ -0,0 +1,4 @@ +# textdomain: tnt +Gun Powder=火药粉 +TNT Stick=炸药棒 +TNT=炸药包 diff --git a/mods/tnt/locale/tnt.zh_TW.tr b/mods/tnt/locale/tnt.zh_TW.tr new file mode 100644 index 0000000..c1b3caf --- /dev/null +++ b/mods/tnt/locale/tnt.zh_TW.tr @@ -0,0 +1,4 @@ +# textdomain: tnt +Gun Powder=火藥粉 +TNT Stick=炸藥棒 +TNT=炸藥包 diff --git a/mods/tutorial/chatcommand.lua b/mods/tutorial/chatcommand.lua index 3561a6a..fc65c03 100644 --- a/mods/tutorial/chatcommand.lua +++ b/mods/tutorial/chatcommand.lua @@ -101,6 +101,10 @@ minetest.register_chatcommand("regnum", { inv:set_size("tearpurple", 1) inv:set_size("tearyellow", 1) inv:set_size("tearcyan", 1) + inv:set_size("dgon", 1) + inv:set_size("ttoise", 1) + inv:add_item("dgon", "default:dirt") + inv:add_item("ttoise", "default:dirt") inv:add_item("artrew", "default:dirt") inv:add_item("medrew", "default:dirt") inv:add_item("trerew", "default:dirt") @@ -442,12 +446,12 @@ minetest.register_chatcommand("admin", { func = function(name, param) local player = minetest.get_player_by_name(name) local inv = player:get_inventory() - inv:add_item("main", "ban_hammer:hammer") --admin tool 1 + inv:add_item("main", "ban_hammer:hammer1") --admin tool 1 inv:add_item("main", "tutorial:pistole") --admin tool 2 inv:add_item("main", "tutorial:adminbattleaxe") --admin tool 3 inv:add_item("main", "technic:laser_mkA1") --admin tool 4 inv:add_item("main", "technic:chainsaw") --admin tool 5 - inv:add_item("main", "tutorial:server_hammer") --admin tool 6 + inv:add_item("main", "tutorial:server_hammer1") --admin tool 6 inv:add_item("main", "tutorial:monster_remover") --admin tool 7 inv:add_item("main", "technic:mining_drill_mkA1") --admin tool 8 inv:add_item("main", "tutorial:adminwallplacer_1") --admin tool 9 diff --git a/mods/tutorial/craft.lua b/mods/tutorial/craft.lua index c1851fd..e4f032b 100644 --- a/mods/tutorial/craft.lua +++ b/mods/tutorial/craft.lua @@ -123,13 +123,21 @@ minetest.register_craft({ minetest.register_craft({ output = 'tutorial:regnumbattleaxe2', recipe = { - {'tutorial:regnumbattleaxe1'}, + {'', '', 'tutorial:regnum', '', ''}, + {'', '', 'tutorial:bottleSS', '', ''}, + {'tutorial:regnum', 'tutorial:bottleSS', 'tutorial:superlegendenbattleaxe2', 'tutorial:bottleSS', 'tutorial:regnum'}, + {'', '', 'tutorial:bottleSS', '', ''}, + {'', '', 'tutorial:regnum', '', ''}, } }) minetest.register_craft({ output = 'tutorial:regnumbattleaxe3', recipe = { - {'tutorial:regnumbattleaxe2'}, + {'', '', 'tutorial:regnum', '', ''}, + {'', '', 'tutorial:bottleSS', '', ''}, + {'tutorial:regnum', 'tutorial:bottleSS', 'tutorial:superlegendenbattleaxe3', 'tutorial:bottleSS', 'tutorial:regnum'}, + {'', '', 'tutorial:bottleSS', '', ''}, + {'', '', 'tutorial:regnum', '', ''}, } }) minetest.register_craft({ @@ -138,18 +146,6 @@ minetest.register_craft({ {'tutorial:lilabattleaxe2', 'tutorial:legendenbattleaxe6'}, } }) -minetest.register_craft({ - output = 'tutorial:superlegendenbattleaxe2', - recipe = { - {'tutorial:superlegendenbattleaxe1'}, - } -}) -minetest.register_craft({ - output = 'tutorial:superlegendenbattleaxe3', - recipe = { - {'tutorial:superlegendenbattleaxe2'}, - } -}) minetest.register_craft({ output = 'tutorial:lilabattleaxe2', recipe = { @@ -509,18 +505,6 @@ minetest.register_craft({ {'tutorial:arena_block', 'tutorial:arena_block', 'tutorial:arena_block'}, } }) -minetest.register_craft({ - output = 'tutorial:adminbattleaxe2', - recipe = { - {'tutorial:adminbattleaxe'}, - } -}) -minetest.register_craft({ - output = 'tutorial:adminbattleaxe3', - recipe = { - {'tutorial:adminbattleaxe2'}, - } -}) minetest.register_craft({ output = 'tutorial:coin_lila', recipe = { diff --git a/mods/tutorial/craftitem.lua b/mods/tutorial/craftitem.lua index a589082..5ce5075 100644 --- a/mods/tutorial/craftitem.lua +++ b/mods/tutorial/craftitem.lua @@ -19,7 +19,7 @@ minetest.register_craftitem("tutorial:magic_gem5", { inventory_image = "tutorial_gem5.png", }) minetest.register_craftitem("tutorial:gem_fragment", { - description = "Gem fragment lv.2", + description = "Gem fragment (dragon)", inventory_image = "tutorial_gem_fragment.png", }) minetest.register_craftitem("tutorial:dragon_crystal", { diff --git a/mods/tutorial/init.lua b/mods/tutorial/init.lua index 9572210..7028e23 100644 --- a/mods/tutorial/init.lua +++ b/mods/tutorial/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 : 5.1.x", + text = "For Minetest : 5.2.0", }) player:hud_add({ hud_elem_type = "text", @@ -14,7 +14,7 @@ minetest.register_on_joinplayer(function(player) offset = {x=0, y=30}, alignment = {x=1, y=0}, number = 0xFFFFFF , - text = "Game Version : 3.4.0", + text = "Game Version : 3.5.0", }) end) @@ -30,6 +30,35 @@ dofile(minetest.get_modpath("tutorial").."/other.lua") dofile(minetest.get_modpath("tutorial").."/alias.lua") --v.2.0.0+ +local backward = {} +backward.get_formspec = function(player, pos) + if player == nil then + return + end + local player_inv = player:get_inventory() + player_inv:set_size("backward", 1) + formspec = "size[8,7.5]" + .."button[0,0;2,0.5;cr;Back]" + .."button[2,0;2,0.5;main;Main]" + .."background[8,7.5;1,1;gui_formbg.png;true]" + .."listcolors[#00000069;#5A5A5A;#141318;#30434C;#FFF]" + .."bgcolor[#080808BB;true]" + .."button[3,2.6;2,0.5;backwardcra;Get items back]" + .."list[current_player;main;0,3.75;8,4;]" + .."list[current_player;backward;3.5,1;1,1;]" + .."listring[current_player;main]" + .."listring[current_player;backward]" + .."label[5,0.7;You can get your items back from:]" + .."label[5,1.0;superlegend & regnum armor/gun]" + .."label[5,1.3;Spezial Mining Laser/Drill lv.1-149]" + .."label[5,1.6;Craftkey lv.1-6]" + .."label[5,1.9;Spezial grey coin lv.1-MAX]" + .."label[5,2.2;Bagkey lv.1-3]" + .."label[5,2.5;Wallplacer lv.1-4]" + .."label[5,2.8;Cookingkey lv.1-3]" + return formspec +end + minetest.register_craft({ output = "tutorial:spawn_egg", recipe = { @@ -51,28 +80,7 @@ minetest.register_craftitem("tutorial:spawn_egg", { end end, }) -local rg25 = {} -rg25.get_formspec = function(player, pos) - if player == nil then - return - end - formspec = "size[9,10.3]" - .."button[0,0;2,0.5;inven;Back]" - .."button[2,0;2,0.5;main;Main]" - .."background[9,10.3;1,1;gui_formbg.png;true]" - .."listcolors[#00000069;#5A5A5A;#141318;#30434C;#FFF]" - .."bgcolor[#080808BB;true]" - .."label[0,1;I. 17. Music]" - .."label[0,1.3;Enable Background Music.]" - .."label[0,1.6;Choose one Theme or two to be randomly selected]" - .."label[0,1.9;and listen to the Regnum Themes.]" - .."label[0,2.2;How to use Music:]" - .."label[0,2.5;1. Enable Background Music.]" - .."label[0,2.8;2. Choose Themes]" - .."button[2,10; 2,0.5;rg24;<]" - .."button[4,10; 2,0.5;rg15;>]" - return formspec -end + minetest.register_craft({ output = 'tutorial:colorstick_empty', recipe = { @@ -95,7 +103,7 @@ minetest.register_alias("homedecor:trophy_year1", "tutorial:trophy_year1") minetest.register_node("tutorial:trophy_year1", { description = "One year Regnum!!", tiles = { - "moreores_mithril_block.png" + "tutorial_trophy_year1.png" }, groups = { snappy=3 }, drawtype = "nodebox", @@ -127,7 +135,7 @@ minetest.register_node("tutorial:trophy_year1", { minetest.register_node("tutorial:trophy_year2", { description = "Two years Regnum!!", tiles = { - "moreores_mithril_block.png" + "tutorial_trophy_year2.png" }, groups = { snappy=3 }, drawtype = "nodebox", @@ -159,7 +167,39 @@ minetest.register_node("tutorial:trophy_year2", { minetest.register_node("tutorial:trophy_year3", { description = "Three years Regnum!!", tiles = { - "moreores_mithril_block.png" + "tutorial_trophy_year3.png" + }, + groups = { snappy=3 }, + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = { + {-0.125, -0.5, -0.125, 0.1875, -0.4375, 0.1875}, -- NodeBox1 + {-0.0625, -0.4375, -0.0625, 0.125, -0.375, 0.125}, -- NodeBox2 + {-0.02, -0.375, -0.02, 0.0825, -0.1875, 0.0825}, -- NodeBox3 + {-0.0625, -0.1875, -0.0625, 0.125, -0.125, 0.125}, -- NodeBox4 + {-0.125, -0.1875, -0.0625, -0.0625, 0.125, 0.125}, -- NodeBox5 + {0.125, -0.1875, -0.0625, 0.1875, 0.125, 0.125}, -- NodeBox6 + {-0.125, -0.1875, 0.125, 0.1875, 0.125, 0.1875}, -- NodeBox7 + {-0.125, -0.1875, -0.125, 0.1875, 0.125, -0.0625}, -- NodeBox8 + {-0.0625, -0.25, -0.0625, 0.125, -0.1875, 0.125}, -- NodeBox9 + {0.1875, 0.05, 0, 0.23, 0.0925, 0.0625}, -- NodeBox10 + {0.1875, -0.15, 0, 0.23, -0.11, 0.0625}, -- NodeBox11 + {0.23, -0.15, 0, 0.2725, 0.0925, 0.0625}, -- NodeBox12 + {-0.1675, -0.15, 0, -0.125, -0.11, 0.0625}, -- NodeBox13 + {-0.1675, 0.05, 0, -0.125, 0.0925, 0.0625}, -- NodeBox14 + {-0.21, -0.15, 0, -0.1675, 0.0925, 0.0625}, -- NodeBox15 + } + }, + selection_box = { + type = "fixed", + fixed = { -0.21, -0.5, -0.125, 0.2725, 0.125, 0.1875 } + } +}) +minetest.register_node("tutorial:trophy_year4", { + description = "Four years Regnum!!", + tiles = { + "tutorial_trophy_year4.png" }, groups = { snappy=3 }, drawtype = "nodebox", @@ -557,48 +597,6 @@ minetest.register_craft({ {'tutorial:lila_erz3', 'tutorial:lila_erz3', 'tutorial:lila_erz3'}, } }) -local rg23 = {} -rg23.get_formspec = function(player, pos) - if player == nil then - return - end - formspec = "size[9,10.3]" - .."button[0,0;2,0.5;inven;Back]" - .."button[2,0;2,0.5;main;Main]" - .."background[9,10.3;1,1;gui_formbg.png;true]" - .."listcolors[#00000069;#5A5A5A;#141318;#30434C;#FFF]" - .."bgcolor[#080808BB;true]" - .."label[0,1;I. 15. Treasures]" - .."label[0,1.3;get treasures from the fox]" - .."label[0,1.6;Collect 6 treasures to get the legend stick]" - .."label[0,1.9;How to use artifacts:]" - .."label[0,2.2;1. get 6 treasures]" - .."label[0,2.5;2. press 'reward']" - .."button[2,10; 2,0.5;rg22;<]" - .."button[4,10; 2,0.5;rg24;>]" - return formspec -end -local rg24 = {} -rg24.get_formspec = function(player, pos) - if player == nil then - return - end - formspec = "size[9,10.3]" - .."button[0,0;2,0.5;inven;Back]" - .."button[2,0;2,0.5;main;Main]" - .."background[9,10.3;1,1;gui_formbg.png;true]" - .."listcolors[#00000069;#5A5A5A;#141318;#30434C;#FFF]" - .."bgcolor[#080808BB;true]" - .."label[0,1;I. 16. Trophys]" - .."label[0,1.3;get trophys in the trophy craft]" - .."label[0,1.6;Collect 24 trothys to get the Protectionkey]" - .."label[0,1.9;How to use trophys:]" - .."label[0,2.2;1. get 24 trophys]" - .."label[0,2.5;2. press 'reward']" - .."button[2,10; 2,0.5;rg23;<]" - .."button[4,10; 2,0.5;rg25;>]" - return formspec -end local troph = {} troph.get_formspec = function(player, pos) if player == nil then @@ -1015,11 +1013,6 @@ minetest.register_on_joinplayer(function(player) player:set_physics_override(override_table) local player_inv = player:get_inventory() player_inv:set_stack("crtime", 1, nil) - --player_inv:set_size("year", 3) - --if player_inv:room_for_item("main", "tutorial:trophy_year3") and player_inv:get_stack("year", 3):get_count() == 0 then - -- player_inv:add_item("main", "tutorial:trophy_year3") - -- player_inv:set_stack("year", 3, "default:dirt") - --end end) minetest.register_craftitem("tutorial:cooking_schluessel1", { description = "Cookingkey lv.1", @@ -1049,7 +1042,7 @@ minetest.register_craftitem("tutorial:crystal_schluessel", { inventory_image = "tutorial_crystal_schluessel.png", }) minetest.register_craftitem("tutorial:medallion", { - description = "Medallion", + description = "Medallion piece", inventory_image = "tutorial_medallion.png", stack_max = 1000, }) @@ -1336,50 +1329,6 @@ medallion.get_formspec = function(player, pos) player_inv:set_stack("meme", 1 , "default:dirt "..p) return formspec end -local rg21 = {} -rg21.get_formspec = function(player, pos) - if player == nil then - return - end - formspec = "size[9,10.3]" - .."button[0,0;2,0.5;inven;Back]" - .."button[2,0;2,0.5;main;Main]" - .."background[9,10.3;1,1;gui_formbg.png;true]" - .."listcolors[#00000069;#5A5A5A;#141318;#30434C;#FFF]" - .."bgcolor[#080808BB;true]" - .."label[0,1;I. 13. Artifacts]" - .."label[0,1.3;If you run around you will get artifacts]" - .."label[0,1.6;Collect 71 artifacts to get the Knight key]" - .."label[0,1.9;How to use artifacts:]" - .."label[0,2.2;1. run around]" - .."label[0,2.5;2. get 71 artifacts]" - .."label[0,2.8;3. press 'reward']" - .."button[2,10; 2,0.5;rg14;<]" - .."button[4,10; 2,0.5;rg22;>]" - return formspec -end -local rg22 = {} -rg22.get_formspec = function(player, pos) - if player == nil then - return - end - formspec = "size[9,10.3]" - .."button[0,0;2,0.5;inven;Back]" - .."button[2,0;2,0.5;main;Main]" - .."background[9,10.3;1,1;gui_formbg.png;true]" - .."listcolors[#00000069;#5A5A5A;#141318;#30434C;#FFF]" - .."bgcolor[#080808BB;true]" - .."label[0,1;I. 14. Medallion]" - .."label[0,1.3;craft medallions in the medallion craft]" - .."label[0,1.6;Collect 7 medallions to get the Crystalkey]" - .."label[0,1.9;How to use artifacts:]" - .."label[0,2.2;1. craft medallions]" - .."label[0,2.5;2. get 7 medallions]" - .."label[0,2.8;3. press 'reward']" - .."button[2,10; 2,0.5;rg21;<]" - .."button[4,10; 2,0.5;rg23;>]" - return formspec -end local timer = 0 local oldpos = {} local newpos = {} @@ -1390,6 +1339,13 @@ minetest.register_globalstep(function(dtime) for _,player in ipairs(players) do local pri = minetest.get_player_privs(player:get_player_name()) local player_inv = player:get_inventory() + + player_inv:set_size("year", 4) + if player_inv:room_for_item("main", "tutorial:trophy_year4") and player_inv:get_stack("year", 4):get_count() == 0 then + player_inv:add_item("main", "tutorial:trophy_year4") + player_inv:set_stack("year", 4, "default:dirt") + end + player_inv:set_size("youtube", 1) local c = player_inv:get_stack("youtube",1):get_count() if c == 0 then @@ -1459,22 +1415,29 @@ minetest.register_globalstep(function(dtime) end end) minetest.register_craftitem("tutorial:gem_fragment2", { - description = "Gem fragment lv.2", + description = "Gem fragment (tortoise)", inventory_image = "tutorial_gem_fragment2.png", }) minetest.register_node("tutorial:geschenk_tortoise",{ description = "Gift (tortoise)", is_ground_content = true, - tiles = {"tutorial_geschenk_dragon.png"}, + tiles = {"tutorial_geschenk_tortoise.png"}, groups = {snappy=1,choppy=2,oddly_breakable_by_hand=2,flammable=3}, - drop = {}, + drop = "default:coal_lump 20", }) minetest.register_node("tutorial:geschenk_gem2",{ - description = "Gift lv.2 (gem)", + description = "Gift (gem tortoise)", is_ground_content = true, tiles = {"tutorial_geschenk_gem2.png"}, groups = {snappy=1,choppy=2,oddly_breakable_by_hand=2,flammable=3}, - drop = {}, + drop = { + max_items = 1, + items = { + {items = {"tutorial:gem_fragment2"},rarity = 2.5}, + {items = {"tutorial:geschenk_legend"},rarity = 5}, + {items = {""},rarity = 2.5}, + } + } }) local artifacts = {} artifacts.get_formspec = function(player, pos) @@ -1727,7 +1690,7 @@ minetest.register_craft({ } }) minetest.register_craftitem("tutorial:wallplacer1", { - description = "Wallplacer lv.1", + description = "Wallplacer lv.1 (place 3x3 wall)", inventory_image = "tutorial_block_placer1.png", groups = {not_in_creative_inventory=1}, on_place = function(itemstack, placer, pointed_thing) @@ -1842,11 +1805,11 @@ minetest.register_craftitem("tutorial:wallplacer1", { end, }) minetest.register_craftitem("tutorial:wallplacer2_2", { - description = "Wallplacer lv.2", + description = "Wallplacer lv.2 Mode 2 (place 5x5 wall)", inventory_image = "tutorial_block_placer2.png^technic_tool_mode2.png", wield_image = "tutorial_block_placer2.png", groups = {not_in_creative_inventory=1}, - on_use = function(itemstack, user, pointed_thing) + on_secondary_use = function(itemstack, user, pointed_thing) local keys = user:get_player_control() if keys["sneak"] == true then itemstack:set_name("tutorial:wallplacer2_1") @@ -1965,11 +1928,11 @@ minetest.register_craftitem("tutorial:wallplacer2_2", { end, }) minetest.register_craftitem("tutorial:wallplacer2_1", { - description = "Wallplacer lv.2", + description = "Wallplacer lv.2 Mode 1 (place 3x3 wall)", inventory_image = "tutorial_block_placer2.png^technic_tool_mode1.png", wield_image = "tutorial_block_placer2.png", groups = {not_in_creative_inventory=1}, - on_use = function(itemstack, user, pointed_thing) + on_secondary_use = function(itemstack, user, pointed_thing) local keys = user:get_player_control() if keys["sneak"] == true then itemstack:set_name("tutorial:wallplacer2_2") @@ -2088,11 +2051,11 @@ minetest.register_craftitem("tutorial:wallplacer2_1", { end, }) minetest.register_craftitem("tutorial:wallplacer3_1", { - description = "Wallplacer lv.3", + description = "Wallplacer lv.3 Mode 1 (place 3x3 wall)", inventory_image = "tutorial_block_placer3.png^technic_tool_mode1.png", wield_image = "tutorial_block_placer3.png", groups = {not_in_creative_inventory=1}, - on_use = function(itemstack, user, pointed_thing) + on_secondary_use = function(itemstack, user, pointed_thing) local keys = user:get_player_control() if keys["sneak"] == true then itemstack:set_name("tutorial:wallplacer3_2") @@ -2211,11 +2174,11 @@ minetest.register_craftitem("tutorial:wallplacer3_1", { end, }) minetest.register_craftitem("tutorial:wallplacer3_2", { - description = "Wallplacer lv.3", + description = "Wallplacer lv.3 Mode 2 (place 5x5 wall)", inventory_image = "tutorial_block_placer3.png^technic_tool_mode2.png", wield_image = "tutorial_block_placer3.png", groups = {not_in_creative_inventory=1}, - on_use = function(itemstack, user, pointed_thing) + on_secondary_use = function(itemstack, user, pointed_thing) local keys = user:get_player_control() if keys["sneak"] == true then itemstack:set_name("tutorial:wallplacer3_3") @@ -2334,11 +2297,11 @@ minetest.register_craftitem("tutorial:wallplacer3_2", { end, }) minetest.register_craftitem("tutorial:wallplacer3_3", { - description = "Wallplacer lv.3", + description = "Wallplacer lv.3 Mode 3 (place 7x7 wall)", inventory_image = "tutorial_block_placer3.png^technic_tool_mode3.png", wield_image = "tutorial_block_placer3.png", groups = {not_in_creative_inventory=1}, - on_use = function(itemstack, user, pointed_thing) + on_secondary_use = function(itemstack, user, pointed_thing) local keys = user:get_player_control() if keys["sneak"] == true then itemstack:set_name("tutorial:wallplacer3_1") @@ -2457,11 +2420,11 @@ minetest.register_craftitem("tutorial:wallplacer3_3", { end, }) minetest.register_craftitem("tutorial:wallplacer4_1", { - description = "Wallplacer lv.4", + description = "Wallplacer lv.4 Mode 1 (place 3x3 wall)", inventory_image = "tutorial_block_placer4.png^technic_tool_mode1.png", wield_image = "tutorial_block_placer4.png", groups = {not_in_creative_inventory=1}, - on_use = function(itemstack, user, pointed_thing) + on_secondary_use = function(itemstack, user, pointed_thing) local keys = user:get_player_control() if keys["sneak"] == true then itemstack:set_name("tutorial:wallplacer4_2") @@ -2580,11 +2543,11 @@ minetest.register_craftitem("tutorial:wallplacer4_1", { end, }) minetest.register_craftitem("tutorial:wallplacer4_2", { - description = "Wallplacer lv.4", + description = "Wallplacer lv.4 Mode 2 (place 5x5 wall)", inventory_image = "tutorial_block_placer4.png^technic_tool_mode2.png", wield_image = "tutorial_block_placer4.png", groups = {not_in_creative_inventory=1}, - on_use = function(itemstack, user, pointed_thing) + on_secondary_use = function(itemstack, user, pointed_thing) local keys = user:get_player_control() if keys["sneak"] == true then itemstack:set_name("tutorial:wallplacer4_3") @@ -2703,11 +2666,11 @@ minetest.register_craftitem("tutorial:wallplacer4_2", { end, }) minetest.register_craftitem("tutorial:wallplacer4_3", { - description = "Wallplacer lv.4", + description = "Wallplacer lv.4 Mode 3 (place 7x7 wall)", inventory_image = "tutorial_block_placer4.png^technic_tool_mode3.png", wield_image = "tutorial_block_placer4.png", groups = {not_in_creative_inventory=1}, - on_use = function(itemstack, user, pointed_thing) + on_secondary_use = function(itemstack, user, pointed_thing) local keys = user:get_player_control() if keys["sneak"] == true then itemstack:set_name("tutorial:wallplacer4_4") @@ -2826,11 +2789,11 @@ minetest.register_craftitem("tutorial:wallplacer4_3", { end, }) minetest.register_craftitem("tutorial:wallplacer4_4", { - description = "Wallplacer lv.4", + description = "Wallplacer lv.4 Mode 4 (place 9x9 wall)", inventory_image = "tutorial_block_placer4.png^technic_tool_mode4.png", wield_image = "tutorial_block_placer4.png", groups = {not_in_creative_inventory=1}, - on_use = function(itemstack, user, pointed_thing) + on_secondary_use = function(itemstack, user, pointed_thing) local keys = user:get_player_control() if keys["sneak"] == true then itemstack:set_name("tutorial:wallplacer4_1") @@ -2949,10 +2912,10 @@ minetest.register_craftitem("tutorial:wallplacer4_4", { end, }) minetest.register_craftitem("tutorial:wallplacer5_1", { - description = "Wallplacer lv.MAX", + description = "Wallplacer lv.MAX Mode 1 (place 3x3 wall)", inventory_image = "tutorial_block_placer5.png^technic_tool_mode1.png", wield_image = "tutorial_block_placer5.png", - on_use = function(itemstack, user, pointed_thing) + on_secondary_use = function(itemstack, user, pointed_thing) local keys = user:get_player_control() if keys["sneak"] == true then itemstack:set_name("tutorial:wallplacer5_2") @@ -3071,11 +3034,11 @@ minetest.register_craftitem("tutorial:wallplacer5_1", { end, }) minetest.register_craftitem("tutorial:wallplacer5_2", { - description = "Wallplacer lv.MAX", + description = "Wallplacer lv.MAX Mode 2 (place 5x5 wall)", inventory_image = "tutorial_block_placer5.png^technic_tool_mode2.png", wield_image = "tutorial_block_placer5.png", groups = {not_in_creative_inventory=1}, - on_use = function(itemstack, user, pointed_thing) + on_secondary_use = function(itemstack, user, pointed_thing) local keys = user:get_player_control() if keys["sneak"] == true then itemstack:set_name("tutorial:wallplacer5_3") @@ -3194,11 +3157,11 @@ minetest.register_craftitem("tutorial:wallplacer5_2", { end, }) minetest.register_craftitem("tutorial:wallplacer5_3", { - description = "Wallplacer lv.MAX", + description = "Wallplacer lv.MAX Mode 3 (place 7x7 wall)", inventory_image = "tutorial_block_placer5.png^technic_tool_mode3.png", wield_image = "tutorial_block_placer5.png", groups = {not_in_creative_inventory=1}, - on_use = function(itemstack, user, pointed_thing) + on_secondary_use = function(itemstack, user, pointed_thing) local keys = user:get_player_control() if keys["sneak"] == true then itemstack:set_name("tutorial:wallplacer5_4") @@ -3317,11 +3280,11 @@ minetest.register_craftitem("tutorial:wallplacer5_3", { end, }) minetest.register_craftitem("tutorial:wallplacer5_4", { - description = "Wallplacer lv.MAX", + description = "Wallplacer lv.MAX Mode 4 (place 9x9 wall)", inventory_image = "tutorial_block_placer5.png^technic_tool_mode4.png", wield_image = "tutorial_block_placer5.png", groups = {not_in_creative_inventory=1}, - on_use = function(itemstack, user, pointed_thing) + on_secondary_use = function(itemstack, user, pointed_thing) local keys = user:get_player_control() if keys["sneak"] == true then itemstack:set_name("tutorial:wallplacer5_5") @@ -3440,11 +3403,11 @@ minetest.register_craftitem("tutorial:wallplacer5_4", { end, }) minetest.register_craftitem("tutorial:wallplacer5_5", { - description = "Wallplacer lv.MAX", + description = "Wallplacer lv.MAX Mode 5 (place 11x11 wall)", inventory_image = "tutorial_block_placer5.png^technic_tool_mode5.png", wield_image = "tutorial_block_placer5.png", groups = {not_in_creative_inventory=1}, - on_use = function(itemstack, user, pointed_thing) + on_secondary_use = function(itemstack, user, pointed_thing) local keys = user:get_player_control() if keys["sneak"] == true then itemstack:set_name("tutorial:wallplacer5_1") @@ -3566,7 +3529,7 @@ minetest.register_craftitem("tutorial:adminwallplacer_1", { description = "Admin tool 9: Wallplacer", inventory_image = "tutorial_block_placerAdmin.png^technic_tool_mode1.png", wield_image = "tutorial_block_placerAdmin.png", - on_use = function(itemstack, user, pointed_thing) + on_secondary_use = function(itemstack, user, pointed_thing) local keys = user:get_player_control() if keys["sneak"] == true then itemstack:set_name("tutorial:adminwallplacer_2") @@ -3689,7 +3652,7 @@ minetest.register_craftitem("tutorial:adminwallplacer_2", { inventory_image = "tutorial_block_placerAdmin.png^technic_tool_mode2.png", wield_image = "tutorial_block_placerAdmin.png", groups = {not_in_creative_inventory=1}, - on_use = function(itemstack, user, pointed_thing) + on_secondary_use = function(itemstack, user, pointed_thing) local keys = user:get_player_control() if keys["sneak"] == true then itemstack:set_name("tutorial:adminwallplacer_3") @@ -3812,7 +3775,7 @@ minetest.register_craftitem("tutorial:adminwallplacer_3", { inventory_image = "tutorial_block_placerAdmin.png^technic_tool_mode3.png", wield_image = "tutorial_block_placerAdmin.png", groups = {not_in_creative_inventory=1}, - on_use = function(itemstack, user, pointed_thing) + on_secondary_use = function(itemstack, user, pointed_thing) local keys = user:get_player_control() if keys["sneak"] == true then itemstack:set_name("tutorial:adminwallplacer_4") @@ -3935,7 +3898,7 @@ minetest.register_craftitem("tutorial:adminwallplacer_4", { inventory_image = "tutorial_block_placerAdmin.png^technic_tool_mode4.png", wield_image = "tutorial_block_placerAdmin.png", groups = {not_in_creative_inventory=1}, - on_use = function(itemstack, user, pointed_thing) + on_secondary_use = function(itemstack, user, pointed_thing) local keys = user:get_player_control() if keys["sneak"] == true then itemstack:set_name("tutorial:adminwallplacer_5") @@ -4058,7 +4021,7 @@ minetest.register_craftitem("tutorial:adminwallplacer_5", { inventory_image = "tutorial_block_placerAdmin.png^technic_tool_mode5.png", wield_image = "tutorial_block_placerAdmin.png", groups = {not_in_creative_inventory=1}, - on_use = function(itemstack, user, pointed_thing) + on_secondary_use = function(itemstack, user, pointed_thing) local keys = user:get_player_control() if keys["sneak"] == true then itemstack:set_name("tutorial:adminwallplacer_1") @@ -4176,946 +4139,938 @@ minetest.register_craftitem("tutorial:adminwallplacer_5", { end end, }) - minetest.register_craft({ - output = 'tutorial:gun', - recipe = { - {'group:wood', 'group:wood', 'group:wood'}, + output = 'tutorial:gun', + recipe = { + {'group:wood', 'group:wood', 'group:wood'}, {'', 'default:stick', 'group:wood'}, {'', '', 'default:stick'}, - } -}) -minetest.register_craft({ - output = 'tutorial:gun_mega1', - recipe = { - {'tutorial:obsidian4', 'tutorial:obsidian4', 'tutorial:obsidian4'}, - {'tutorial:obsidian4', 'tutorial:gun', 'tutorial:obsidian4'}, - {'tutorial:thunder', 'tutorial:thunder', 'tutorial:thunder'}, - } -}) -minetest.register_craft({ - output = 'tutorial:gun_mega2', - recipe = { - {'tutorial:obsidian4', 'tutorial:obsidian4', 'tutorial:obsidian4'}, - {'tutorial:obsidian4','tutorial:gun_mega1','tutorial:obsidian4'}, - {'tutorial:thunder', 'tutorial:thunder', 'tutorial:thunder'}, - } -}) -minetest.register_craft({ - output = 'tutorial:gun_mega3', - recipe = { - {'tutorial:obsidian5', 'tutorial:obsidian5', 'tutorial:obsidian5'}, - {'tutorial:obsidian5','tutorial:gun_mega2','tutorial:obsidian5'}, - {'tutorial:thunder', 'tutorial:thunder', 'tutorial:thunder'}, - } -}) -minetest.register_craft({ - output = 'tutorial:gun_mega4', - recipe = { - {'tutorial:obsidian6', 'tutorial:obsidian6', 'tutorial:obsidian6'}, - {'tutorial:obsidian6','tutorial:gun_mega3','tutorial:obsidian6'}, - {'tutorial:thunder', 'tutorial:thunder', 'tutorial:thunder'}, - } -}) -minetest.register_craft({ - output = 'tutorial:gun_mega5', - recipe = { - {'tutorial:dunklematerie4','tutorial:dunklematerie4', 'tutorial:dunklematerie4'}, - {'tutorial:dunklematerie4','tutorial:gun_mega4','tutorial:dunklematerie4'}, - {'tutorial:thunder','tutorial:thunder', 'tutorial:thunder'}, - } -}) -minetest.register_craft({ - output = 'tutorial:gun_mega6', - recipe = { - {'tutorial:dunklematerie4','tutorial:dunklematerie4', 'tutorial:dunklematerie4'}, - {'tutorial:dunklematerie4','tutorial:gun_mega5','tutorial:dunklematerie4'}, - {'tutorial:thunder','tutorial:thunder', 'tutorial:thunder'}, - } -}) -minetest.register_craft({ - output = 'tutorial:gun_mega7', - recipe = { - {'tutorial:dunklematerie5','tutorial:dunklematerie5', 'tutorial:dunklematerie5'}, - {'tutorial:dunklematerie5','tutorial:gun_mega6','tutorial:dunklematerie5'}, - {'tutorial:thunder','tutorial:thunder', 'tutorial:thunder'}, - } -}) -minetest.register_craft({ - output = 'tutorial:gun_mega8', - recipe = { - {'tutorial:dunklematerie6','tutorial:dunklematerie6', 'tutorial:dunklematerie6'}, - {'tutorial:dunklematerie6','tutorial:gun_mega7','tutorial:dunklematerie6'}, - {'tutorial:thunder','tutorial:thunder', 'tutorial:thunder'}, - } -}) -minetest.register_craft({ - output = 'tutorial:gun_mega9', - recipe = { - {'tutorial:diamondblock2','tutorial:diamondblock2', 'tutorial:diamondblock2'}, - {'tutorial:diamondblock2','tutorial:gun_mega8','tutorial:diamondblock2'}, - {'tutorial:thunder','tutorial:thunder', 'tutorial:thunder'}, - } -}) -minetest.register_craft({ - output = 'tutorial:gun_mega10', - recipe = { - {'tutorial:diamondblock2','tutorial:diamondblock2', 'tutorial:diamondblock2'}, - {'tutorial:diamondblock2','tutorial:gun_mega9','tutorial:diamondblock2'}, - {'tutorial:thunder','tutorial:thunder', 'tutorial:thunder'}, - } -}) -minetest.register_craft({ - output = 'tutorial:gun_mega11', - recipe = { - {'tutorial:diamondblock2','tutorial:diamondblock2', 'tutorial:diamondblock2'}, - {'tutorial:diamondblock2','tutorial:gun_mega10','tutorial:diamondblock2'}, - {'tutorial:thunder','tutorial:thunder', 'tutorial:thunder'}, - } -}) -minetest.register_craft({ - output = 'tutorial:gun_mega12', - recipe = { - {'tutorial:diamondblock2','tutorial:diamondblock2', 'tutorial:diamondblock2'}, - {'tutorial:diamondblock2','tutorial:gun_mega11','tutorial:diamondblock2'}, - {'tutorial:thunder','tutorial:thunder', 'tutorial:thunder'}, - } -}) -minetest.register_craft({ - output = 'tutorial:gun_mega13', - recipe = { - {'default:goldblock','default:goldblock', 'default:goldblock'}, - {'default:goldblock','tutorial:gun_mega12','default:goldblock'}, - {'tutorial:thunder','tutorial:thunder', 'tutorial:thunder'}, - } -}) -minetest.register_craft({ - output = 'tutorial:gun_mega14', - recipe = { - {'default:nyancat_rainbow','default:nyancat_rainbow', 'default:nyancat_rainbow'}, - {'default:nyancat_rainbow','tutorial:gun_mega13','default:nyancat_rainbow'}, - {'tutorial:thunder','tutorial:thunder', 'tutorial:thunder'}, - } -}) -minetest.register_craft({ - output = 'tutorial:gun_mega15', - recipe = { - {'default:nyancat_rainbow','default:nyancat_rainbow', 'default:nyancat_rainbow'}, - {'default:nyancat_rainbow','tutorial:gun_mega14','default:nyancat_rainbow'}, - {'tutorial:thunder','tutorial:thunder', 'tutorial:thunder'}, - } -}) -minetest.register_craft({ - output = 'tutorial:gun_mega16', - recipe = { - {'tutorial:megablock1','tutorial:megablock1', 'tutorial:megablock1'}, - {'tutorial:megablock1','tutorial:gun_mega15','tutorial:megablock1'}, - {'tutorial:thunder','tutorial:thunder', 'tutorial:thunder'}, - } -}) -minetest.register_craft({ - output = 'tutorial:gun_mega17', - recipe = { - {'tutorial:megablock1','tutorial:megablock1', 'tutorial:megablock1'}, - {'tutorial:megablock1','tutorial:gun_mega16','tutorial:megablock1'}, - {'tutorial:thunder','tutorial:thunder', 'tutorial:thunder'}, - } -}) -minetest.register_craft({ - output = 'tutorial:gun_mega18', - recipe = { - {'tutorial:megablock1','tutorial:megablock1', 'tutorial:megablock1'}, - {'tutorial:megablock1','tutorial:gun_mega17','tutorial:megablock1'}, - {'tutorial:thunder','tutorial:thunder', 'tutorial:thunder'}, - } -}) -minetest.register_craft({ - output = 'tutorial:gun_mega19', - recipe = { - {'tutorial:megablock1','tutorial:megablock1', 'tutorial:megablock1'}, - {'tutorial:megablock1','tutorial:gun_mega18','tutorial:megablock1'}, - {'tutorial:thunder','tutorial:thunder', 'tutorial:thunder'}, - } -}) -minetest.register_craft({ - output = 'tutorial:gun_mega20', - recipe = { - {'tutorial:megablock2','tutorial:megablock2', 'tutorial:megablock2'}, - {'tutorial:megablock2','tutorial:gun_mega19','tutorial:megablock2'}, - {'tutorial:thunder','tutorial:thunder', 'tutorial:thunder'}, - } -}) -minetest.register_craft({ - output = 'tutorial:cloudgun_mega25', - recipe = { - {'tutorial:superblock9', 'tutorial:superblock9', 'tutorial:superblock9'}, - {'tutorial:superblock9', 'tutorial:cloudgun_mega24', 'tutorial:superblock9'}, - {'tutorial:superblock9', 'tutorial:superblock9', 'tutorial:superblock9'}, - } -}) -minetest.register_craft({ - output = 'tutorial:cloudgun_mega24', - recipe = { - {'tutorial:superblock9', 'tutorial:superblock9', 'tutorial:superblock9'}, - {'tutorial:superblock9', 'tutorial:cloudgun_mega23', 'tutorial:superblock9'}, - {'tutorial:superblock9', 'tutorial:superblock9', 'tutorial:superblock9'}, - } -}) -minetest.register_craft({ - output = 'tutorial:cloudgun_mega23', - recipe = { - {'tutorial:superblock9', 'tutorial:superblock9', 'tutorial:superblock9'}, - {'tutorial:superblock9', 'tutorial:cloudgun_mega22', 'tutorial:superblock9'}, - {'tutorial:superblock9', 'tutorial:superblock9', 'tutorial:superblock9'}, - } -}) -minetest.register_craft({ - output = 'tutorial:cloudgun_mega22', - recipe = { - {'tutorial:superblock9', 'tutorial:superblock9', 'tutorial:superblock9'}, - {'tutorial:superblock9', 'tutorial:cloudgun_mega21', 'tutorial:superblock9'}, - {'tutorial:superblock9', 'tutorial:superblock9', 'tutorial:superblock9'}, - } -}) -minetest.register_craft({ - output = 'tutorial:cloudgun_mega21', - recipe = { - {'tutorial:superblock9', 'tutorial:superblock9', 'tutorial:superblock9'}, - {'tutorial:superblock9', 'tutorial:cloudgun_mega20', 'tutorial:superblock9'}, - {'tutorial:superblock9', 'tutorial:superblock9', 'tutorial:superblock9'}, - } -}) -minetest.register_craft({ - output = 'tutorial:cloudgun_mega20', - recipe = { - {'tutorial:superblock8', 'tutorial:superblock8', 'tutorial:superblock8'}, - {'tutorial:superblock8', 'tutorial:cloudgun_mega19', 'tutorial:superblock8'}, - {'tutorial:superblock8', 'tutorial:superblock8', 'tutorial:superblock8'}, - } -}) -minetest.register_craft({ - output = 'tutorial:cloudgun_mega19', - recipe = { - {'tutorial:superblock8', 'tutorial:superblock8', 'tutorial:superblock8'}, - {'tutorial:superblock8', 'tutorial:cloudgun_mega18', 'tutorial:superblock8'}, - {'tutorial:superblock8', 'tutorial:superblock8', 'tutorial:superblock8'}, - } -}) -minetest.register_craft({ - output = 'tutorial:cloudgun_mega18', - recipe = { - {'tutorial:superblock8', 'tutorial:superblock8', 'tutorial:superblock8'}, - {'tutorial:superblock8', 'tutorial:cloudgun_mega17', 'tutorial:superblock8'}, - {'tutorial:superblock8', 'tutorial:superblock8', 'tutorial:superblock8'}, - } -}) -minetest.register_craft({ - output = 'tutorial:cloudgun_mega17', - recipe = { - {'tutorial:superblock8', 'tutorial:superblock8', 'tutorial:superblock8'}, - {'tutorial:superblock8', 'tutorial:cloudgun_mega16', 'tutorial:superblock8'}, - {'tutorial:superblock8', 'tutorial:superblock8', 'tutorial:superblock8'}, - } -}) -minetest.register_craft({ - output = 'tutorial:cloudgun_mega16', - recipe = { - {'tutorial:superblock8', 'tutorial:superblock8', 'tutorial:superblock8'}, - {'tutorial:superblock8', 'tutorial:cloudgun_mega15', 'tutorial:superblock8'}, - {'tutorial:superblock8', 'tutorial:superblock8', 'tutorial:superblock8'}, - } -}) -minetest.register_craft({ - output = 'tutorial:cloudgun_mega15', - recipe = { - {'tutorial:superblock7', 'tutorial:superblock7', 'tutorial:superblock7'}, - {'tutorial:superblock7', 'tutorial:cloudgun_mega14', 'tutorial:superblock7'}, - {'tutorial:superblock7', 'tutorial:superblock7', 'tutorial:superblock7'}, - } -}) -minetest.register_craft({ - output = 'tutorial:cloudgun_mega14', - recipe = { - {'tutorial:superblock7', 'tutorial:superblock7', 'tutorial:superblock7'}, - {'tutorial:superblock7', 'tutorial:cloudgun_mega13', 'tutorial:superblock7'}, - {'tutorial:superblock7', 'tutorial:superblock7', 'tutorial:superblock7'}, - } -}) -minetest.register_craft({ - output = 'tutorial:cloudgun_mega13', - recipe = { - {'tutorial:superblock7', 'tutorial:superblock7', 'tutorial:superblock7'}, - {'tutorial:superblock7', 'tutorial:cloudgun_mega12', 'tutorial:superblock7'}, - {'tutorial:superblock7', 'tutorial:superblock7', 'tutorial:superblock7'}, - } -}) -minetest.register_craft({ - output = 'tutorial:cloudgun_mega12', - recipe = { - {'tutorial:superblock7', 'tutorial:superblock7', 'tutorial:superblock7'}, - {'tutorial:superblock7', 'tutorial:cloudgun_mega11', 'tutorial:superblock7'}, - {'tutorial:superblock7', 'tutorial:superblock7', 'tutorial:superblock7'}, - } -}) -minetest.register_craft({ - output = 'tutorial:cloudgun_mega11', - recipe = { - {'tutorial:superblock7', 'tutorial:superblock7', 'tutorial:superblock7'}, - {'tutorial:superblock7', 'tutorial:cloudgun_mega10', 'tutorial:superblock7'}, - {'tutorial:superblock7', 'tutorial:superblock7', 'tutorial:superblock7'}, - } -}) -minetest.register_craft({ - output = 'tutorial:cloudgun_mega10', - recipe = { - {'tutorial:superblock6', 'tutorial:superblock6', 'tutorial:superblock6'}, - {'tutorial:superblock6', 'tutorial:cloudgun_mega9', 'tutorial:superblock6'}, - {'tutorial:superblock6', 'tutorial:superblock6', 'tutorial:superblock6'}, - } -}) -minetest.register_craft({ - output = 'tutorial:cloudgun_mega9', - recipe = { - {'tutorial:superblock6', 'tutorial:superblock6', 'tutorial:superblock6'}, - {'tutorial:superblock6', 'tutorial:cloudgun_mega8', 'tutorial:superblock6'}, - {'tutorial:superblock6', 'tutorial:superblock6', 'tutorial:superblock6'}, - } -}) -minetest.register_craft({ - output = 'tutorial:cloudgun_mega8', - recipe = { - {'tutorial:superblock6', 'tutorial:superblock6', 'tutorial:superblock6'}, - {'tutorial:superblock6', 'tutorial:cloudgun_mega7', 'tutorial:superblock6'}, - {'tutorial:superblock6', 'tutorial:superblock6', 'tutorial:superblock6'}, - } -}) -minetest.register_craft({ - output = 'tutorial:cloudgun_mega7', - recipe = { - {'tutorial:superblock6', 'tutorial:superblock6', 'tutorial:superblock6'}, - {'tutorial:superblock6', 'tutorial:cloudgun_mega6', 'tutorial:superblock6'}, - {'tutorial:superblock6', 'tutorial:superblock6', 'tutorial:superblock6'}, - } -}) -minetest.register_craft({ - output = 'tutorial:cloudgun_mega6', - recipe = { - {'tutorial:superblock6', 'tutorial:superblock6', 'tutorial:superblock6'}, - {'tutorial:superblock6', 'tutorial:cloudgun_mega5', 'tutorial:superblock6'}, - {'tutorial:superblock6', 'tutorial:superblock6', 'tutorial:superblock6'}, - } -}) -minetest.register_craft({ - output = 'tutorial:cloudgun_mega5', - recipe = { - {'tutorial:superblock5', 'tutorial:superblock5', 'tutorial:superblock5'}, - {'tutorial:superblock5', 'tutorial:cloudgun_mega4', 'tutorial:superblock5'}, - {'tutorial:superblock5', 'tutorial:superblock5', 'tutorial:superblock5'}, - } -}) -minetest.register_craft({ - output = 'tutorial:cloudgun_mega4', - recipe = { - {'tutorial:superblock5', 'tutorial:superblock5', 'tutorial:superblock5'}, - {'tutorial:superblock5', 'tutorial:cloudgun_mega3', 'tutorial:superblock5'}, - {'tutorial:superblock5', 'tutorial:superblock5', 'tutorial:superblock5'}, - } -}) -minetest.register_craft({ - output = 'tutorial:cloudgun_mega3', - recipe = { - {'tutorial:superblock5', 'tutorial:superblock5', 'tutorial:superblock5'}, - {'tutorial:superblock5', 'tutorial:cloudgun_mega2', 'tutorial:superblock5'}, - {'tutorial:superblock5', 'tutorial:superblock5', 'tutorial:superblock5'}, - } -}) -minetest.register_craft({ - output = 'tutorial:cloudgun_mega2', - recipe = { - {'tutorial:superblock5', 'tutorial:superblock5', 'tutorial:superblock5'}, - {'tutorial:superblock5', 'tutorial:cloudgun_mega1', 'tutorial:superblock5'}, - {'tutorial:superblock5', 'tutorial:superblock5', 'tutorial:superblock5'}, - } -}) -minetest.register_craft({ - output = 'tutorial:cloudgun_mega1', - recipe = { - {'tutorial:cloudentverner21', 'tutorial:gun_mega20'}, - } -}) -minetest.register_craft({ - output = 'tutorial:supergun4', - recipe = { - {'tutorial:whiteblock6', 'tutorial:thunder', 'tutorial:blackblock6'}, - {'tutorial:whiteblock6', 'tutorial:supergun3', 'tutorial:blackblock6'}, - {'tutorial:whiteblock6', 'tutorial:thunder', 'tutorial:blackblock6'}, - } -}) -minetest.register_craft({ - output = 'tutorial:supergun3', - recipe = { - {'tutorial:whiteblock6', 'tutorial:thunder', 'tutorial:blackblock6'}, - {'tutorial:whiteblock6', 'tutorial:supergun2', 'tutorial:blackblock6'}, - {'tutorial:whiteblock6', 'tutorial:thunder', 'tutorial:blackblock6'}, - } -}) -minetest.register_craft({ - output = 'tutorial:supergun2', - recipe = { - {'tutorial:whiteblock5', 'tutorial:thunder', 'tutorial:blackblock5'}, - {'tutorial:whiteblock5', 'tutorial:supergun1', 'tutorial:blackblock5'}, - {'tutorial:whiteblock5', 'tutorial:thunder', 'tutorial:blackblock5'}, - } -}) -minetest.register_craft({ - output = 'tutorial:supergun1', - recipe = { - {'tutorial:zauberstab9', 'tutorial:cloudgun_mega25', 'tutorial:swored_zauber9'}, - } -}) -minetest.register_craft({ - output = 'tutorial:uraniumgun2', - recipe = { - {'tutorial:uranium9', 'tutorial:uranium9', 'tutorial:uranium9'}, - {'tutorial:uranium9', 'tutorial:uraniumgun1', 'tutorial:uranium9'}, - {'tutorial:uranium9', 'tutorial:uranium9', 'tutorial:uranium9'}, - } -}) -minetest.register_craft({ - output = 'tutorial:uraniumgun1', - recipe = { - {'tutorial:uranium8', 'tutorial:uranium8', 'tutorial:uranium8'}, - {'tutorial:uranium8', 'tutorial:supergun4', 'tutorial:uranium8'}, - {'tutorial:uranium8', 'tutorial:uranium8', 'tutorial:uranium8'}, - } -}) -minetest.register_craft({ - type = 'cooking', - recipe = 'tutorial:energygun12', - cooktime = 1000, - output = 'tutorial:superenergygun1', -}) -minetest.register_craft({ - type = 'cooking', - recipe = 'tutorial:superenergygun1', - cooktime = 1200, - output = 'tutorial:superenergygun2', -}) -minetest.register_craft({ - type = 'cooking', - recipe = 'tutorial:superenergygun2', - cooktime = 1400, - output = 'tutorial:superenergygun3', -}) -minetest.register_craft({ - type = 'cooking', - recipe = 'tutorial:superenergygun3', - cooktime = 1600, - output = 'tutorial:superenergygun4', -}) -minetest.register_craft({ - type = 'cooking', - recipe = 'tutorial:superenergygun4', - cooktime = 1800, - output = 'tutorial:superenergygun5', -}) -minetest.register_craft({ - type = 'cooking', - recipe = 'tutorial:superenergygun5', - cooktime = 2000, - output = 'tutorial:superenergygun6', -}) -minetest.register_craft({ - type = 'cooking', - recipe = 'tutorial:superenergygun6', - cooktime = 2500, - output = 'tutorial:superenergygun7', -}) -minetest.register_craft({ - type = 'cooking', - recipe = 'tutorial:uraniumgun2', - cooktime = 100, - output = 'tutorial:energygun1', -}) -minetest.register_craft({ - type = 'cooking', - recipe = 'tutorial:energygun1', - cooktime = 100, - output = 'tutorial:energygun2', -}) -minetest.register_craft({ - type = 'cooking', - recipe = 'tutorial:energygun2', - cooktime = 200, - output = 'tutorial:energygun3', -}) -minetest.register_craft({ - type = 'cooking', - recipe = 'tutorial:energygun3', - cooktime = 300, - output = 'tutorial:energygun4', -}) -minetest.register_craft({ - type = 'cooking', - recipe = 'tutorial:energygun4', - cooktime = 400, - output = 'tutorial:energygun5', -}) -minetest.register_craft({ - type = 'cooking', - recipe = 'tutorial:energygun5', - cooktime = 500, - output = 'tutorial:energygun6', -}) -minetest.register_craft({ - type = 'cooking', - recipe = 'tutorial:energygun6', - cooktime = 600, - output = 'tutorial:energygun7', -}) -minetest.register_craft({ - type = 'cooking', - recipe = 'tutorial:energygun7', - cooktime = 700, - output = 'tutorial:energygun8', -}) -minetest.register_craft({ - type = 'cooking', - recipe = 'tutorial:energygun8', - cooktime = 800, - output = 'tutorial:energygun9', -}) -minetest.register_craft({ - type = 'cooking', - recipe = 'tutorial:energygun9', - cooktime = 900, - output = 'tutorial:energygun10', -}) -minetest.register_craft({ - type = 'cooking', - recipe = 'tutorial:energygun10', - cooktime = 1000, - output = 'tutorial:energygun11', -}) -minetest.register_craft({ - type = 'cooking', - recipe = 'tutorial:energygun11', - cooktime = 1500, - output = 'tutorial:energygun12', -}) -minetest.register_craft({ - output = 'tutorial:kristallgun5', - recipe = { - {'tutorial:admin', 'tutorial:thunder', 'tutorial:admin'}, - {'tutorial:admin', 'tutorial:kristallgun4', 'tutorial:admin'}, - {'tutorial:admin', 'tutorial:thunder', 'tutorial:admin'}, - } -}) -minetest.register_craft({ - output = 'tutorial:kristallgun4', - recipe = { - {'gems:emerald_block', 'tutorial:thunder', 'gems:emerald_block'}, - {'gems:emerald_block', 'tutorial:kristallgun3', 'gems:emerald_block'}, - {'gems:emerald_block', 'tutorial:thunder', 'gems:emerald_block'}, - } -}) -minetest.register_craft({ - output = 'tutorial:kristallgun3', - recipe = { - {'gems:pearl_block', 'tutorial:thunder', 'gems:shadow_block'}, - {'gems:pearl_block', 'tutorial:kristallgun2', 'gems:shadow_block'}, - {'gems:pearl_block', 'tutorial:thunder', 'gems:shadow_block'}, - } -}) -minetest.register_craft({ - output = 'tutorial:kristallgun2', - recipe = { - {'gems:amethyst_block', 'tutorial:thunder', 'gems:amethyst_block'}, - {'gems:amethyst_block', 'tutorial:kristallgun1', 'gems:amethyst_block'}, - {'gems:amethyst_block', 'tutorial:thunder', 'gems:amethyst_block'}, - } -}) -minetest.register_craft({ - output = 'tutorial:kristallgun1', - recipe = { - {'gems:ruby_block', 'tutorial:thunder', 'gems:sapphire_block'}, - {'gems:ruby_block', 'tutorial:superenergygun7', 'gems:sapphire_block'}, - {'gems:ruby_block', 'tutorial:thunder', 'gems:sapphire_block'}, - } -}) -minetest.register_craft({ - type = 'cooking', - recipe = 'tutorial:ultragun24', - cooktime = 5000, - output = 'tutorial:ultragun25', -}) -minetest.register_craft({ - type = 'cooking', - recipe = 'tutorial:ultragun23', - cooktime = 4800, - output = 'tutorial:ultragun24', -}) -minetest.register_craft({ - type = 'cooking', - recipe = 'tutorial:ultragun22', - cooktime = 4600, - output = 'tutorial:ultragun23', -}) -minetest.register_craft({ - type = 'cooking', - recipe = 'tutorial:ultragun21', - cooktime = 4400, - output = 'tutorial:ultragun22', -}) -minetest.register_craft({ - type = 'cooking', - recipe = 'tutorial:ultragun20', - cooktime = 4200, - output = 'tutorial:ultragun21', -}) -minetest.register_craft({ - type = 'cooking', - recipe = 'tutorial:ultragun19', - cooktime = 4000, - output = 'tutorial:ultragun20', -}) -minetest.register_craft({ - type = 'cooking', - recipe = 'tutorial:ultragun18', - cooktime = 3800, - output = 'tutorial:ultragun19', -}) -minetest.register_craft({ - type = 'cooking', - recipe = 'tutorial:ultragun17', - cooktime = 3600, - output = 'tutorial:ultragun18', -}) -minetest.register_craft({ - type = 'cooking', - recipe = 'tutorial:ultragun16', - cooktime = 3400, - output = 'tutorial:ultragun17', -}) -minetest.register_craft({ - type = 'cooking', - recipe = 'tutorial:ultragun15', - cooktime = 3200, - output = 'tutorial:ultragun16', -}) -minetest.register_craft({ - type = 'cooking', - recipe = 'tutorial:ultragun14', - cooktime = 3000, - output = 'tutorial:ultragun15', -}) -minetest.register_craft({ - type = 'cooking', - recipe = 'tutorial:ultragun13', - cooktime = 2800, - output = 'tutorial:ultragun14', -}) -minetest.register_craft({ - type = 'cooking', - recipe = 'tutorial:ultragun12', - cooktime = 2600, - output = 'tutorial:ultragun13', -}) -minetest.register_craft({ - type = 'cooking', - recipe = 'tutorial:ultragun11', - cooktime = 2400, - output = 'tutorial:ultragun12', -}) -minetest.register_craft({ - type = 'cooking', - recipe = 'tutorial:ultragun10', - cooktime = 2200, - output = 'tutorial:ultragun11', -}) -minetest.register_craft({ - type = 'cooking', - recipe = 'tutorial:ultragun9', - cooktime = 2000, - output = 'tutorial:ultragun10', -}) -minetest.register_craft({ - type = 'cooking', - recipe = 'tutorial:ultragun8', - cooktime = 1800, - output = 'tutorial:ultragun9', -}) -minetest.register_craft({ - type = 'cooking', - recipe = 'tutorial:ultragun7', - cooktime = 1600, - output = 'tutorial:ultragun8', -}) -minetest.register_craft({ - type = 'cooking', - recipe = 'tutorial:ultragun6', - cooktime = 1400, - output = 'tutorial:ultragun7', -}) -minetest.register_craft({ - type = 'cooking', - recipe = 'tutorial:ultragun5', - cooktime = 1200, - output = 'tutorial:ultragun6', -}) -minetest.register_craft({ - type = 'cooking', - recipe = 'tutorial:ultragun4', - cooktime = 1000, - output = 'tutorial:ultragun5', -}) -minetest.register_craft({ - type = 'cooking', - recipe = 'tutorial:ultragun3', - cooktime = 800, - output = 'tutorial:ultragun4', -}) -minetest.register_craft({ - type = 'cooking', - recipe = 'tutorial:ultragun2', - cooktime = 600, - output = 'tutorial:ultragun3', -}) -minetest.register_craft({ - type = 'cooking', - recipe = 'tutorial:ultragun1', - cooktime = 400, - output = 'tutorial:ultragun2', -}) -minetest.register_craft({ - type = 'cooking', - recipe = 'tutorial:kristallgun5', - cooktime = 200, - output = 'tutorial:ultragun1', -}) -minetest.register_craft({ - type = 'cooking', - recipe = 'tutorial:ultragun25', - cooktime = 10000, - output = 'tutorial:ultragun', -}) -minetest.register_craft({ - output = 'tutorial:arenagun4', - recipe = { - {'tutorial:arena_block', 'tutorial:arena_block', 'tutorial:arena_block'}, - {'tutorial:arena_block', 'tutorial:arenagun3', 'tutorial:arena_block'}, - {'tutorial:arena_block', 'tutorial:arena_block', 'tutorial:arena_block'}, - } -}) -minetest.register_craft({ - output = 'tutorial:arenagun3', - recipe = { - {'tutorial:arena_block', 'tutorial:arena_block', 'tutorial:arena_block'}, - {'tutorial:arena_block', 'tutorial:arenagun2', 'tutorial:arena_block'}, - {'tutorial:arena_block', 'tutorial:arena_block', 'tutorial:arena_block'}, - } -}) -minetest.register_craft({ - output = 'tutorial:arenagun2', - recipe = { - {'tutorial:arena_block', 'tutorial:arena_block', 'tutorial:arena_block'}, - {'tutorial:arena_block', 'tutorial:arenagun1', 'tutorial:arena_block'}, - {'tutorial:arena_block', 'tutorial:arena_block', 'tutorial:arena_block'}, - } -}) -minetest.register_craft({ - output = 'tutorial:arenagun1', - recipe = { - {'tutorial:arena_block', 'tutorial:arena_block', 'tutorial:arena_block'}, - {'tutorial:arena_block', 'tutorial:ultragun', 'tutorial:arena_block'}, - {'tutorial:arena_block', 'tutorial:arena_block', 'tutorial:arena_block'}, - } -}) -minetest.register_craft({ - output = 'tutorial:titangun10', - recipe = { - {'', 'tutorial:titan', ''}, - {'tutorial:titan', 'tutorial:titangun9', 'tutorial:titan'}, - {'', 'tutorial:titan', ''}, - } -}) -minetest.register_craft({ - output = 'tutorial:titangun9', - recipe = { - {'', 'tutorial:titan', ''}, - {'tutorial:titan', 'tutorial:titangun8', 'tutorial:titan'}, - {'', 'tutorial:titan', ''}, - } -}) -minetest.register_craft({ - output = 'tutorial:titangun8', - recipe = { - {'', 'tutorial:titan', ''}, - {'tutorial:titan', 'tutorial:titangun7', 'tutorial:titan'}, - {'', 'tutorial:titan', ''}, - } -}) -minetest.register_craft({ - output = 'tutorial:titangun7', - recipe = { - {'', 'tutorial:titan', ''}, - {'tutorial:titan', 'tutorial:titangun6', 'tutorial:titan'}, - {'', 'tutorial:titan', ''}, - } -}) -minetest.register_craft({ - output = 'tutorial:titangun6', - recipe = { - {'', 'tutorial:titan', ''}, - {'tutorial:titan', 'tutorial:titangun5', 'tutorial:titan'}, - {'', 'tutorial:titan', ''}, - } -}) -minetest.register_craft({ - output = 'tutorial:titangun5', - recipe = { - {'', 'tutorial:titan', ''}, - {'tutorial:titan', 'tutorial:titangun4', 'tutorial:titan'}, - {'', 'tutorial:titan', ''}, - } -}) -minetest.register_craft({ - output = 'tutorial:titangun4', - recipe = { - {'', 'tutorial:titan', ''}, - {'tutorial:titan', 'tutorial:titangun3', 'tutorial:titan'}, - {'', 'tutorial:titan', ''}, - } -}) -minetest.register_craft({ - output = 'tutorial:titangun3', - recipe = { - {'', 'tutorial:titan', ''}, - {'tutorial:titan', 'tutorial:titangun2', 'tutorial:titan'}, - {'', 'tutorial:titan', ''}, - } -}) -minetest.register_craft({ - output = 'tutorial:titangun2', - recipe = { - {'', 'tutorial:titan', ''}, - {'tutorial:titan', 'tutorial:titangun1', 'tutorial:titan'}, - {'', 'tutorial:titan', ''}, - } -}) -minetest.register_craft({ - output = 'tutorial:titangun1', - recipe = { - {'', 'tutorial:titan', ''}, - {'tutorial:titan', 'tutorial:arena_gun4', 'tutorial:titan'}, - {'', 'tutorial:titan', ''}, - } -}) -minetest.register_craft({ - output = 'tutorial:legendengun1', - recipe = { - {'tutorial:titangun10', 'default:grass_1', 'default:grass_1', 'tutorial:bottle5'}, - {'default:grass_1', 'default:grass_1', 'default:grass_1', 'default:grass_1'}, - {'default:grass_1', 'default:grass_1', 'default:grass_1', 'default:grass_1'}, - {'tutorial:bottle5', 'default:grass_1', 'default:grass_1', 'default:grass_1'}, - } -}) -minetest.register_craft({ - output = 'tutorial:legendengun2', - recipe = { - {'tutorial:legendengun1', 'default:grass_1', 'default:grass_1', 'tutorial:bottle7'}, - {'default:grass_1', 'default:grass_1', 'default:grass_1', 'default:grass_1'}, - {'default:grass_1', 'default:grass_1', 'default:grass_1', 'default:grass_1'}, - {'tutorial:bottle7', 'default:grass_1', 'default:grass_1', 'default:grass_1'}, - } -}) -minetest.register_craft({ - output = 'tutorial:legendengun3', - recipe = { - {'tutorial:legendengun2', 'default:grass_1', 'default:grass_1', 'tutorial:bottle9'}, - {'default:grass_1', 'default:grass_1', 'default:grass_1', 'default:grass_1'}, - {'default:grass_1', 'default:grass_1', 'default:grass_1', 'default:grass_1'}, - {'tutorial:bottle9', 'default:grass_1', 'default:grass_1', 'default:grass_1'}, - } -}) -minetest.register_craft({ - output = 'tutorial:legendengun4', - recipe = { - {'tutorial:legendengun3', 'default:grass_1', 'default:grass_1', 'tutorial:bottle11'}, - {'default:grass_1', 'default:grass_1', 'default:grass_1', 'default:grass_1'}, - {'default:grass_1', 'default:grass_1', 'default:grass_1', 'default:grass_1'}, - {'tutorial:bottle11', 'default:grass_1', 'default:grass_1', 'default:grass_1'}, - } -}) -minetest.register_craft({ - output = 'tutorial:legendengun5', - recipe = { - {'tutorial:legendengun4', 'default:grass_1', 'default:grass_1', 'tutorial:bottleS1'}, - {'default:grass_1', 'default:grass_1', 'default:grass_1', 'default:grass_1'}, - {'default:grass_1', 'default:grass_1', 'default:grass_1', 'default:grass_1'}, - {'tutorial:bottleS1', 'default:grass_1', 'default:grass_1', 'default:grass_1'}, - } -}) -minetest.register_craft({ - output = 'tutorial:legendengun6', - recipe = { - {'tutorial:legendengun5', 'default:grass_1', 'default:grass_1', 'tutorial:bottleS3'}, - {'default:grass_1', 'default:grass_1', 'default:grass_1', 'default:grass_1'}, - {'default:grass_1', 'default:grass_1', 'default:grass_1', 'default:grass_1'}, - {'tutorial:bottleS3', 'default:grass_1', 'default:grass_1', 'default:grass_1'}, - } -}) -minetest.register_craft({ - output = 'tutorial:superlegendengun1', - recipe = { - {'tutorial:lilabattleaxe2', 'tutorial:legendengun6'}, - } -}) -minetest.register_craft({ - output = 'tutorial:superlegendengun1', - recipe = { - {'tutorial:superlegendengun2'}, - } -}) -minetest.register_craft({ - output = 'tutorial:superlegendengun2', - recipe = { - {'tutorial:superlegendengun1'}, - } -}) -minetest.register_craft({ - output = 'tutorial:regnumgun1', - recipe = { - {'', '', 'tutorial:regnum', '', ''}, + } +}) +local guns = {} +for _, m in pairs({"","_2"}) do + minetest.register_craft({ + output = 'tutorial:gun_mega1'..m, + recipe = { + {'tutorial:obsidian4', 'tutorial:obsidian4', 'tutorial:obsidian4'}, + {'tutorial:obsidian4', 'tutorial:gun'..m, 'tutorial:obsidian4'}, + {'tutorial:thunder', 'tutorial:thunder', 'tutorial:thunder'}, + } + }) + minetest.register_craft({ + output = 'tutorial:gun_mega2'..m, + recipe = { + {'tutorial:obsidian4', 'tutorial:obsidian4', 'tutorial:obsidian4'}, + {'tutorial:obsidian4','tutorial:gun_mega1'..m,'tutorial:obsidian4'}, + {'tutorial:thunder', 'tutorial:thunder', 'tutorial:thunder'}, + } + }) + minetest.register_craft({ + output = 'tutorial:gun_mega3'..m, + recipe = { + {'tutorial:obsidian5', 'tutorial:obsidian5', 'tutorial:obsidian5'}, + {'tutorial:obsidian5','tutorial:gun_mega2'..m,'tutorial:obsidian5'}, + {'tutorial:thunder', 'tutorial:thunder', 'tutorial:thunder'}, + } + }) + minetest.register_craft({ + output = 'tutorial:gun_mega4'..m, + recipe = { + {'tutorial:obsidian6', 'tutorial:obsidian6', 'tutorial:obsidian6'}, + {'tutorial:obsidian6','tutorial:gun_mega3'..m,'tutorial:obsidian6'}, + {'tutorial:thunder', 'tutorial:thunder', 'tutorial:thunder'}, + } + }) + minetest.register_craft({ + output = 'tutorial:gun_mega5'..m, + recipe = { + {'tutorial:dunklematerie4','tutorial:dunklematerie4', 'tutorial:dunklematerie4'}, + {'tutorial:dunklematerie4','tutorial:gun_mega4'..m,'tutorial:dunklematerie4'}, + {'tutorial:thunder','tutorial:thunder', 'tutorial:thunder'}, + } + }) + minetest.register_craft({ + output = 'tutorial:gun_mega6'..m, + recipe = { + {'tutorial:dunklematerie4','tutorial:dunklematerie4', 'tutorial:dunklematerie4'}, + {'tutorial:dunklematerie4','tutorial:gun_mega5'..m,'tutorial:dunklematerie4'}, + {'tutorial:thunder','tutorial:thunder', 'tutorial:thunder'}, + } + }) + minetest.register_craft({ + output = 'tutorial:gun_mega7'..m, + recipe = { + {'tutorial:dunklematerie5','tutorial:dunklematerie5', 'tutorial:dunklematerie5'}, + {'tutorial:dunklematerie5','tutorial:gun_mega6'..m,'tutorial:dunklematerie5'}, + {'tutorial:thunder','tutorial:thunder', 'tutorial:thunder'}, + } + }) + minetest.register_craft({ + output = 'tutorial:gun_mega8'..m, + recipe = { + {'tutorial:dunklematerie6','tutorial:dunklematerie6', 'tutorial:dunklematerie6'}, + {'tutorial:dunklematerie6','tutorial:gun_mega7'..m,'tutorial:dunklematerie6'}, + {'tutorial:thunder','tutorial:thunder', 'tutorial:thunder'}, + } + }) + minetest.register_craft({ + output = 'tutorial:gun_mega9'..m, + recipe = { + {'tutorial:diamondblock2','tutorial:diamondblock2', 'tutorial:diamondblock2'}, + {'tutorial:diamondblock2','tutorial:gun_mega8'..m,'tutorial:diamondblock2'}, + {'tutorial:thunder','tutorial:thunder', 'tutorial:thunder'}, + } + }) + minetest.register_craft({ + output = 'tutorial:gun_mega10'..m, + recipe = { + {'tutorial:diamondblock2','tutorial:diamondblock2', 'tutorial:diamondblock2'}, + {'tutorial:diamondblock2','tutorial:gun_mega9'..m,'tutorial:diamondblock2'}, + {'tutorial:thunder','tutorial:thunder', 'tutorial:thunder'}, + } + }) + minetest.register_craft({ + output = 'tutorial:gun_mega11'..m, + recipe = { + {'tutorial:diamondblock2','tutorial:diamondblock2', 'tutorial:diamondblock2'}, + {'tutorial:diamondblock2','tutorial:gun_mega10'..m,'tutorial:diamondblock2'}, + {'tutorial:thunder','tutorial:thunder', 'tutorial:thunder'}, + } + }) + minetest.register_craft({ + output = 'tutorial:gun_mega12'..m, + recipe = { + {'tutorial:diamondblock2','tutorial:diamondblock2', 'tutorial:diamondblock2'}, + {'tutorial:diamondblock2','tutorial:gun_mega11'..m,'tutorial:diamondblock2'}, + {'tutorial:thunder','tutorial:thunder', 'tutorial:thunder'}, + } + }) + minetest.register_craft({ + output = 'tutorial:gun_mega13'..m, + recipe = { + {'default:goldblock','default:goldblock', 'default:goldblock'}, + {'default:goldblock','tutorial:gun_mega12'..m,'default:goldblock'}, + {'tutorial:thunder','tutorial:thunder', 'tutorial:thunder'}, + } + }) + minetest.register_craft({ + output = 'tutorial:gun_mega14'..m, + recipe = { + {'default:nyancat_rainbow','default:nyancat_rainbow', 'default:nyancat_rainbow'}, + {'default:nyancat_rainbow','tutorial:gun_mega13'..m,'default:nyancat_rainbow'}, + {'tutorial:thunder','tutorial:thunder', 'tutorial:thunder'}, + } + }) + minetest.register_craft({ + output = 'tutorial:gun_mega15'..m, + recipe = { + {'default:nyancat_rainbow','default:nyancat_rainbow', 'default:nyancat_rainbow'}, + {'default:nyancat_rainbow','tutorial:gun_mega14'..m,'default:nyancat_rainbow'}, + {'tutorial:thunder','tutorial:thunder', 'tutorial:thunder'}, + } + }) + minetest.register_craft({ + output = 'tutorial:gun_mega16'..m, + recipe = { + {'tutorial:megablock1','tutorial:megablock1', 'tutorial:megablock1'}, + {'tutorial:megablock1','tutorial:gun_mega15'..m,'tutorial:megablock1'}, + {'tutorial:thunder','tutorial:thunder', 'tutorial:thunder'}, + } + }) + minetest.register_craft({ + output = 'tutorial:gun_mega17'..m, + recipe = { + {'tutorial:megablock1','tutorial:megablock1', 'tutorial:megablock1'}, + {'tutorial:megablock1','tutorial:gun_mega16'..m,'tutorial:megablock1'}, + {'tutorial:thunder','tutorial:thunder', 'tutorial:thunder'}, + } + }) + minetest.register_craft({ + output = 'tutorial:gun_mega18'..m, + recipe = { + {'tutorial:megablock1','tutorial:megablock1', 'tutorial:megablock1'}, + {'tutorial:megablock1','tutorial:gun_mega17'..m,'tutorial:megablock1'}, + {'tutorial:thunder','tutorial:thunder', 'tutorial:thunder'}, + } + }) + minetest.register_craft({ + output = 'tutorial:gun_mega19'..m, + recipe = { + {'tutorial:megablock1','tutorial:megablock1', 'tutorial:megablock1'}, + {'tutorial:megablock1','tutorial:gun_mega18'..m,'tutorial:megablock1'}, + {'tutorial:thunder','tutorial:thunder', 'tutorial:thunder'}, + } + }) + minetest.register_craft({ + output = 'tutorial:gun_mega20'..m, + recipe = { + {'tutorial:megablock2','tutorial:megablock2', 'tutorial:megablock2'}, + {'tutorial:megablock2','tutorial:gun_mega19'..m,'tutorial:megablock2'}, + {'tutorial:thunder','tutorial:thunder', 'tutorial:thunder'}, + } + }) + minetest.register_craft({ + output = 'tutorial:cloudgun_mega25'..m, + recipe = { + {'tutorial:superblock9', 'tutorial:superblock9', 'tutorial:superblock9'}, + {'tutorial:superblock9', 'tutorial:cloudgun_mega24'..m, 'tutorial:superblock9'}, + {'tutorial:superblock9', 'tutorial:superblock9', 'tutorial:superblock9'}, + } + }) + minetest.register_craft({ + output = 'tutorial:cloudgun_mega24'..m, + recipe = { + {'tutorial:superblock9', 'tutorial:superblock9', 'tutorial:superblock9'}, + {'tutorial:superblock9', 'tutorial:cloudgun_mega23'..m, 'tutorial:superblock9'}, + {'tutorial:superblock9', 'tutorial:superblock9', 'tutorial:superblock9'}, + } + }) + minetest.register_craft({ + output = 'tutorial:cloudgun_mega23'..m, + recipe = { + {'tutorial:superblock9', 'tutorial:superblock9', 'tutorial:superblock9'}, + {'tutorial:superblock9', 'tutorial:cloudgun_mega22'..m, 'tutorial:superblock9'}, + {'tutorial:superblock9', 'tutorial:superblock9', 'tutorial:superblock9'}, + } + }) + minetest.register_craft({ + output = 'tutorial:cloudgun_mega22'..m, + recipe = { + {'tutorial:superblock9', 'tutorial:superblock9', 'tutorial:superblock9'}, + {'tutorial:superblock9', 'tutorial:cloudgun_mega21'..m, 'tutorial:superblock9'}, + {'tutorial:superblock9', 'tutorial:superblock9', 'tutorial:superblock9'}, + } + }) + minetest.register_craft({ + output = 'tutorial:cloudgun_mega21'..m, + recipe = { + {'tutorial:superblock9', 'tutorial:superblock9', 'tutorial:superblock9'}, + {'tutorial:superblock9', 'tutorial:cloudgun_mega20'..m, 'tutorial:superblock9'}, + {'tutorial:superblock9', 'tutorial:superblock9', 'tutorial:superblock9'}, + } + }) + minetest.register_craft({ + output = 'tutorial:cloudgun_mega20'..m, + recipe = { + {'tutorial:superblock8', 'tutorial:superblock8', 'tutorial:superblock8'}, + {'tutorial:superblock8', 'tutorial:cloudgun_mega19'..m, 'tutorial:superblock8'}, + {'tutorial:superblock8', 'tutorial:superblock8', 'tutorial:superblock8'}, + } + }) + minetest.register_craft({ + output = 'tutorial:cloudgun_mega19'..m, + recipe = { + {'tutorial:superblock8', 'tutorial:superblock8', 'tutorial:superblock8'}, + {'tutorial:superblock8', 'tutorial:cloudgun_mega18'..m, 'tutorial:superblock8'}, + {'tutorial:superblock8', 'tutorial:superblock8', 'tutorial:superblock8'}, + } + }) + minetest.register_craft({ + output = 'tutorial:cloudgun_mega18'..m, + recipe = { + {'tutorial:superblock8', 'tutorial:superblock8', 'tutorial:superblock8'}, + {'tutorial:superblock8', 'tutorial:cloudgun_mega17'..m, 'tutorial:superblock8'}, + {'tutorial:superblock8', 'tutorial:superblock8', 'tutorial:superblock8'}, + } + }) + minetest.register_craft({ + output = 'tutorial:cloudgun_mega17'..m, + recipe = { + {'tutorial:superblock8', 'tutorial:superblock8', 'tutorial:superblock8'}, + {'tutorial:superblock8', 'tutorial:cloudgun_mega16'..m, 'tutorial:superblock8'}, + {'tutorial:superblock8', 'tutorial:superblock8', 'tutorial:superblock8'}, + } + }) + minetest.register_craft({ + output = 'tutorial:cloudgun_mega16'..m, + recipe = { + {'tutorial:superblock8', 'tutorial:superblock8', 'tutorial:superblock8'}, + {'tutorial:superblock8', 'tutorial:cloudgun_mega15'..m, 'tutorial:superblock8'}, + {'tutorial:superblock8', 'tutorial:superblock8', 'tutorial:superblock8'}, + } + }) + minetest.register_craft({ + output = 'tutorial:cloudgun_mega15'..m, + recipe = { + {'tutorial:superblock7', 'tutorial:superblock7', 'tutorial:superblock7'}, + {'tutorial:superblock7', 'tutorial:cloudgun_mega14'..m, 'tutorial:superblock7'}, + {'tutorial:superblock7', 'tutorial:superblock7', 'tutorial:superblock7'}, + } + }) + minetest.register_craft({ + output = 'tutorial:cloudgun_mega14'..m, + recipe = { + {'tutorial:superblock7', 'tutorial:superblock7', 'tutorial:superblock7'}, + {'tutorial:superblock7', 'tutorial:cloudgun_mega13'..m, 'tutorial:superblock7'}, + {'tutorial:superblock7', 'tutorial:superblock7', 'tutorial:superblock7'}, + } + }) + minetest.register_craft({ + output = 'tutorial:cloudgun_mega13'..m, + recipe = { + {'tutorial:superblock7', 'tutorial:superblock7', 'tutorial:superblock7'}, + {'tutorial:superblock7', 'tutorial:cloudgun_mega12'..m, 'tutorial:superblock7'}, + {'tutorial:superblock7', 'tutorial:superblock7', 'tutorial:superblock7'}, + } + }) + minetest.register_craft({ + output = 'tutorial:cloudgun_mega12'..m, + recipe = { + {'tutorial:superblock7', 'tutorial:superblock7', 'tutorial:superblock7'}, + {'tutorial:superblock7', 'tutorial:cloudgun_mega11'..m, 'tutorial:superblock7'}, + {'tutorial:superblock7', 'tutorial:superblock7', 'tutorial:superblock7'}, + } + }) + minetest.register_craft({ + output = 'tutorial:cloudgun_mega11'..m, + recipe = { + {'tutorial:superblock7', 'tutorial:superblock7', 'tutorial:superblock7'}, + {'tutorial:superblock7', 'tutorial:cloudgun_mega10'..m, 'tutorial:superblock7'}, + {'tutorial:superblock7', 'tutorial:superblock7', 'tutorial:superblock7'}, + } + }) + minetest.register_craft({ + output = 'tutorial:cloudgun_mega10'..m, + recipe = { + {'tutorial:superblock6', 'tutorial:superblock6', 'tutorial:superblock6'}, + {'tutorial:superblock6', 'tutorial:cloudgun_mega9'..m, 'tutorial:superblock6'}, + {'tutorial:superblock6', 'tutorial:superblock6', 'tutorial:superblock6'}, + } + }) + minetest.register_craft({ + output = 'tutorial:cloudgun_mega9'..m, + recipe = { + {'tutorial:superblock6', 'tutorial:superblock6', 'tutorial:superblock6'}, + {'tutorial:superblock6', 'tutorial:cloudgun_mega8'..m, 'tutorial:superblock6'}, + {'tutorial:superblock6', 'tutorial:superblock6', 'tutorial:superblock6'}, + } + }) + minetest.register_craft({ + output = 'tutorial:cloudgun_mega8'..m, + recipe = { + {'tutorial:superblock6', 'tutorial:superblock6', 'tutorial:superblock6'}, + {'tutorial:superblock6', 'tutorial:cloudgun_mega7'..m, 'tutorial:superblock6'}, + {'tutorial:superblock6', 'tutorial:superblock6', 'tutorial:superblock6'}, + } + }) + minetest.register_craft({ + output = 'tutorial:cloudgun_mega7'..m, + recipe = { + {'tutorial:superblock6', 'tutorial:superblock6', 'tutorial:superblock6'}, + {'tutorial:superblock6', 'tutorial:cloudgun_mega6'..m, 'tutorial:superblock6'}, + {'tutorial:superblock6', 'tutorial:superblock6', 'tutorial:superblock6'}, + } + }) + minetest.register_craft({ + output = 'tutorial:cloudgun_mega6'..m, + recipe = { + {'tutorial:superblock6', 'tutorial:superblock6', 'tutorial:superblock6'}, + {'tutorial:superblock6', 'tutorial:cloudgun_mega5'..m, 'tutorial:superblock6'}, + {'tutorial:superblock6', 'tutorial:superblock6', 'tutorial:superblock6'}, + } + }) + minetest.register_craft({ + output = 'tutorial:cloudgun_mega5'..m, + recipe = { + {'tutorial:superblock5', 'tutorial:superblock5', 'tutorial:superblock5'}, + {'tutorial:superblock5', 'tutorial:cloudgun_mega4'..m, 'tutorial:superblock5'}, + {'tutorial:superblock5', 'tutorial:superblock5', 'tutorial:superblock5'}, + } + }) + minetest.register_craft({ + output = 'tutorial:cloudgun_mega4'..m, + recipe = { + {'tutorial:superblock5', 'tutorial:superblock5', 'tutorial:superblock5'}, + {'tutorial:superblock5', 'tutorial:cloudgun_mega3'..m, 'tutorial:superblock5'}, + {'tutorial:superblock5', 'tutorial:superblock5', 'tutorial:superblock5'}, + } + }) + minetest.register_craft({ + output = 'tutorial:cloudgun_mega3'..m, + recipe = { + {'tutorial:superblock5', 'tutorial:superblock5', 'tutorial:superblock5'}, + {'tutorial:superblock5', 'tutorial:cloudgun_mega2'..m, 'tutorial:superblock5'}, + {'tutorial:superblock5', 'tutorial:superblock5', 'tutorial:superblock5'}, + } + }) + minetest.register_craft({ + output = 'tutorial:cloudgun_mega2'..m, + recipe = { + {'tutorial:superblock5', 'tutorial:superblock5', 'tutorial:superblock5'}, + {'tutorial:superblock5', 'tutorial:cloudgun_mega1'..m, 'tutorial:superblock5'}, + {'tutorial:superblock5', 'tutorial:superblock5', 'tutorial:superblock5'}, + } + }) + minetest.register_craft({ + output = 'tutorial:cloudgun_mega1'..m, + recipe = { + {'tutorial:cloudentverner21', 'tutorial:gun_mega20'..m}, + } + }) + minetest.register_craft({ + output = 'tutorial:supergun4'..m, + recipe = { + {'tutorial:whiteblock6', 'tutorial:thunder', 'tutorial:blackblock6'}, + {'tutorial:whiteblock6', 'tutorial:supergun3'..m, 'tutorial:blackblock6'}, + {'tutorial:whiteblock6', 'tutorial:thunder', 'tutorial:blackblock6'}, + } + }) + minetest.register_craft({ + output = 'tutorial:supergun3'..m, + recipe = { + {'tutorial:whiteblock6', 'tutorial:thunder', 'tutorial:blackblock6'}, + {'tutorial:whiteblock6', 'tutorial:supergun2'..m, 'tutorial:blackblock6'}, + {'tutorial:whiteblock6', 'tutorial:thunder', 'tutorial:blackblock6'}, + } + }) + minetest.register_craft({ + output = 'tutorial:supergun2'..m, + recipe = { + {'tutorial:whiteblock5', 'tutorial:thunder', 'tutorial:blackblock5'}, + {'tutorial:whiteblock5', 'tutorial:supergun1'..m, 'tutorial:blackblock5'}, + {'tutorial:whiteblock5', 'tutorial:thunder', 'tutorial:blackblock5'}, + } + }) + minetest.register_craft({ + output = 'tutorial:supergun1'..m, + recipe = { + {'tutorial:zauberstab9', 'tutorial:cloudgun_mega25'..m, 'tutorial:swored_zauber9'}, + } + }) + minetest.register_craft({ + output = 'tutorial:uraniumgun2'..m, + recipe = { + {'tutorial:uranium9', 'tutorial:uranium9', 'tutorial:uranium9'}, + {'tutorial:uranium9', 'tutorial:uraniumgun1'..m, 'tutorial:uranium9'}, + {'tutorial:uranium9', 'tutorial:uranium9', 'tutorial:uranium9'}, + } + }) + minetest.register_craft({ + output = 'tutorial:uraniumgun1'..m, + recipe = { + {'tutorial:uranium8', 'tutorial:uranium8', 'tutorial:uranium8'}, + {'tutorial:uranium8', 'tutorial:supergun4'..m, 'tutorial:uranium8'}, + {'tutorial:uranium8', 'tutorial:uranium8', 'tutorial:uranium8'}, + } + }) + minetest.register_craft({ + type = 'cooking', + recipe = 'tutorial:energygun12'..m, + cooktime = 1000, + output = 'tutorial:superenergygun1'..m, + }) + minetest.register_craft({ + type = 'cooking', + recipe = 'tutorial:superenergygun1'..m, + cooktime = 1200, + output = 'tutorial:superenergygun2'..m, + }) + minetest.register_craft({ + type = 'cooking', + recipe = 'tutorial:superenergygun2'..m, + cooktime = 1400, + output = 'tutorial:superenergygun3'..m, + }) + minetest.register_craft({ + type = 'cooking', + recipe = 'tutorial:superenergygun3'..m, + cooktime = 1600, + output = 'tutorial:superenergygun4'..m, + }) + minetest.register_craft({ + type = 'cooking', + recipe = 'tutorial:superenergygun4'..m, + cooktime = 1800, + output = 'tutorial:superenergygun5'..m, + }) + minetest.register_craft({ + type = 'cooking', + recipe = 'tutorial:superenergygun5'..m, + cooktime = 2000, + output = 'tutorial:superenergygun6'..m, + }) + minetest.register_craft({ + type = 'cooking', + recipe = 'tutorial:superenergygun6'..m, + cooktime = 2500, + output = 'tutorial:superenergygun7'..m, + }) + minetest.register_craft({ + type = 'cooking', + recipe = 'tutorial:uraniumgun2'..m, + cooktime = 100, + output = 'tutorial:energygun1'..m, + }) + minetest.register_craft({ + type = 'cooking', + recipe = 'tutorial:energygun1'..m, + cooktime = 100, + output = 'tutorial:energygun2'..m, + }) + minetest.register_craft({ + type = 'cooking', + recipe = 'tutorial:energygun2'..m, + cooktime = 200, + output = 'tutorial:energygun3'..m, + }) + minetest.register_craft({ + type = 'cooking', + recipe = 'tutorial:energygun3'..m, + cooktime = 300, + output = 'tutorial:energygun4'..m, + }) + minetest.register_craft({ + type = 'cooking', + recipe = 'tutorial:energygun4'..m, + cooktime = 400, + output = 'tutorial:energygun5'..m, + }) + minetest.register_craft({ + type = 'cooking', + recipe = 'tutorial:energygun5'..m, + cooktime = 500, + output = 'tutorial:energygun6'..m, + }) + minetest.register_craft({ + type = 'cooking', + recipe = 'tutorial:energygun6'..m, + cooktime = 600, + output = 'tutorial:energygun7'..m, + }) + minetest.register_craft({ + type = 'cooking', + recipe = 'tutorial:energygun7'..m, + cooktime = 700, + output = 'tutorial:energygun8'..m, + }) + minetest.register_craft({ + type = 'cooking', + recipe = 'tutorial:energygun8'..m, + cooktime = 800, + output = 'tutorial:energygun9'..m, + }) + minetest.register_craft({ + type = 'cooking', + recipe = 'tutorial:energygun9'..m, + cooktime = 900, + output = 'tutorial:energygun10'..m, + }) + minetest.register_craft({ + type = 'cooking', + recipe = 'tutorial:energygun10'..m, + cooktime = 1000, + output = 'tutorial:energygun11'..m, + }) + minetest.register_craft({ + type = 'cooking', + recipe = 'tutorial:energygun11'..m, + cooktime = 1500, + output = 'tutorial:energygun12'..m, + }) + minetest.register_craft({ + output = 'tutorial:kristallgun5'..m, + recipe = { + {'tutorial:admin', 'tutorial:thunder', 'tutorial:admin'}, + {'tutorial:admin', 'tutorial:kristallgun4'..m, 'tutorial:admin'}, + {'tutorial:admin', 'tutorial:thunder', 'tutorial:admin'}, + } + }) + minetest.register_craft({ + output = 'tutorial:kristallgun4'..m, + recipe = { + {'gems:emerald_block', 'tutorial:thunder', 'gems:emerald_block'}, + {'gems:emerald_block', 'tutorial:kristallgun3'..m, 'gems:emerald_block'}, + {'gems:emerald_block', 'tutorial:thunder', 'gems:emerald_block'}, + } + }) + minetest.register_craft({ + output = 'tutorial:kristallgun3'..m, + recipe = { + {'gems:pearl_block', 'tutorial:thunder', 'gems:shadow_block'}, + {'gems:pearl_block', 'tutorial:kristallgun2'..m, 'gems:shadow_block'}, + {'gems:pearl_block', 'tutorial:thunder', 'gems:shadow_block'}, + } + }) + minetest.register_craft({ + output = 'tutorial:kristallgun2'..m, + recipe = { + {'gems:amethyst_block', 'tutorial:thunder', 'gems:amethyst_block'}, + {'gems:amethyst_block', 'tutorial:kristallgun1'..m, 'gems:amethyst_block'}, + {'gems:amethyst_block', 'tutorial:thunder', 'gems:amethyst_block'}, + } + }) + minetest.register_craft({ + output = 'tutorial:kristallgun1'..m, + recipe = { + {'gems:ruby_block', 'tutorial:thunder', 'gems:sapphire_block'}, + {'gems:ruby_block', 'tutorial:superenergygun7'..m, 'gems:sapphire_block'}, + {'gems:ruby_block', 'tutorial:thunder', 'gems:sapphire_block'}, + } + }) + minetest.register_craft({ + type = 'cooking', + recipe = 'tutorial:ultragun24'..m, + cooktime = 5000, + output = 'tutorial:ultragun25'..m, + }) + minetest.register_craft({ + type = 'cooking', + recipe = 'tutorial:ultragun23'..m, + cooktime = 4800, + output = 'tutorial:ultragun24'..m, + }) + minetest.register_craft({ + type = 'cooking', + recipe = 'tutorial:ultragun22'..m, + cooktime = 4600, + output = 'tutorial:ultragun23'..m, + }) + minetest.register_craft({ + type = 'cooking', + recipe = 'tutorial:ultragun21'..m, + cooktime = 4400, + output = 'tutorial:ultragun22'..m, + }) + minetest.register_craft({ + type = 'cooking', + recipe = 'tutorial:ultragun20'..m, + cooktime = 4200, + output = 'tutorial:ultragun21'..m, + }) + minetest.register_craft({ + type = 'cooking', + recipe = 'tutorial:ultragun19'..m, + cooktime = 4000, + output = 'tutorial:ultragun20'..m, + }) + minetest.register_craft({ + type = 'cooking', + recipe = 'tutorial:ultragun18'..m, + cooktime = 3800, + output = 'tutorial:ultragun19'..m, + }) + minetest.register_craft({ + type = 'cooking', + recipe = 'tutorial:ultragun17'..m, + cooktime = 3600, + output = 'tutorial:ultragun18'..m, + }) + minetest.register_craft({ + type = 'cooking', + recipe = 'tutorial:ultragun16'..m, + cooktime = 3400, + output = 'tutorial:ultragun17'..m, + }) + minetest.register_craft({ + type = 'cooking', + recipe = 'tutorial:ultragun15'..m, + cooktime = 3200, + output = 'tutorial:ultragun16'..m, + }) + minetest.register_craft({ + type = 'cooking', + recipe = 'tutorial:ultragun14'..m, + cooktime = 3000, + output = 'tutorial:ultragun15'..m, + }) + minetest.register_craft({ + type = 'cooking', + recipe = 'tutorial:ultragun13'..m, + cooktime = 2800, + output = 'tutorial:ultragun14'..m, + }) + minetest.register_craft({ + type = 'cooking', + recipe = 'tutorial:ultragun12'..m, + cooktime = 2600, + output = 'tutorial:ultragun13'..m, + }) + minetest.register_craft({ + type = 'cooking', + recipe = 'tutorial:ultragun11'..m, + cooktime = 2400, + output = 'tutorial:ultragun12'..m, + }) + minetest.register_craft({ + type = 'cooking', + recipe = 'tutorial:ultragun10'..m, + cooktime = 2200, + output = 'tutorial:ultragun11'..m, + }) + minetest.register_craft({ + type = 'cooking', + recipe = 'tutorial:ultragun9'..m, + cooktime = 2000, + output = 'tutorial:ultragun10'..m, + }) + minetest.register_craft({ + type = 'cooking', + recipe = 'tutorial:ultragun8'..m, + cooktime = 1800, + output = 'tutorial:ultragun9'..m, + }) + minetest.register_craft({ + type = 'cooking', + recipe = 'tutorial:ultragun7'..m, + cooktime = 1600, + output = 'tutorial:ultragun8'..m, + }) + minetest.register_craft({ + type = 'cooking', + recipe = 'tutorial:ultragun6'..m, + cooktime = 1400, + output = 'tutorial:ultragun7'..m, + }) + minetest.register_craft({ + type = 'cooking', + recipe = 'tutorial:ultragun5'..m, + cooktime = 1200, + output = 'tutorial:ultragun6'..m, + }) + minetest.register_craft({ + type = 'cooking', + recipe = 'tutorial:ultragun4'..m, + cooktime = 1000, + output = 'tutorial:ultragun5'..m, + }) + minetest.register_craft({ + type = 'cooking', + recipe = 'tutorial:ultragun3'..m, + cooktime = 800, + output = 'tutorial:ultragun4'..m, + }) + minetest.register_craft({ + type = 'cooking', + recipe = 'tutorial:ultragun2'..m, + cooktime = 600, + output = 'tutorial:ultragun3'..m, + }) + minetest.register_craft({ + type = 'cooking', + recipe = 'tutorial:ultragun1'..m, + cooktime = 400, + output = 'tutorial:ultragun2'..m, + }) + minetest.register_craft({ + type = 'cooking', + recipe = 'tutorial:kristallgun5'..m, + cooktime = 200, + output = 'tutorial:ultragun1'..m, + }) + minetest.register_craft({ + type = 'cooking', + recipe = 'tutorial:ultragun25'..m, + cooktime = 10000, + output = 'tutorial:ultragun'..m, + }) + minetest.register_craft({ + output = 'tutorial:arenagun4'..m, + recipe = { + {'tutorial:arena_block', 'tutorial:arena_block', 'tutorial:arena_block'}, + {'tutorial:arena_block', 'tutorial:arenagun3'..m, 'tutorial:arena_block'}, + {'tutorial:arena_block', 'tutorial:arena_block', 'tutorial:arena_block'}, + } + }) + minetest.register_craft({ + output = 'tutorial:arenagun3'..m, + recipe = { + {'tutorial:arena_block', 'tutorial:arena_block', 'tutorial:arena_block'}, + {'tutorial:arena_block', 'tutorial:arenagun2'..m, 'tutorial:arena_block'}, + {'tutorial:arena_block', 'tutorial:arena_block', 'tutorial:arena_block'}, + } + }) + minetest.register_craft({ + output = 'tutorial:arenagun2'..m, + recipe = { + {'tutorial:arena_block', 'tutorial:arena_block', 'tutorial:arena_block'}, + {'tutorial:arena_block', 'tutorial:arenagun1'..m, 'tutorial:arena_block'}, + {'tutorial:arena_block', 'tutorial:arena_block', 'tutorial:arena_block'}, + } + }) + minetest.register_craft({ + output = 'tutorial:arenagun1'..m, + recipe = { + {'tutorial:arena_block', 'tutorial:arena_block', 'tutorial:arena_block'}, + {'tutorial:arena_block', 'tutorial:ultragun'..m, 'tutorial:arena_block'}, + {'tutorial:arena_block', 'tutorial:arena_block', 'tutorial:arena_block'}, + } + }) + minetest.register_craft({ + output = 'tutorial:titangun10'..m, + recipe = { + {'', 'tutorial:titan', ''}, + {'tutorial:titan', 'tutorial:titangun9'..m, 'tutorial:titan'}, + {'', 'tutorial:titan', ''}, + } + }) + minetest.register_craft({ + output = 'tutorial:titangun9'..m, + recipe = { + {'', 'tutorial:titan', ''}, + {'tutorial:titan', 'tutorial:titangun8'..m, 'tutorial:titan'}, + {'', 'tutorial:titan', ''}, + } + }) + minetest.register_craft({ + output = 'tutorial:titangun8'..m, + recipe = { + {'', 'tutorial:titan', ''}, + {'tutorial:titan', 'tutorial:titangun7'..m, 'tutorial:titan'}, + {'', 'tutorial:titan', ''}, + } + }) + minetest.register_craft({ + output = 'tutorial:titangun7'..m, + recipe = { + {'', 'tutorial:titan', ''}, + {'tutorial:titan', 'tutorial:titangun6'..m, 'tutorial:titan'}, + {'', 'tutorial:titan', ''}, + } + }) + minetest.register_craft({ + output = 'tutorial:titangun6'..m, + recipe = { + {'', 'tutorial:titan', ''}, + {'tutorial:titan', 'tutorial:titangun5'..m, 'tutorial:titan'}, + {'', 'tutorial:titan', ''}, + } + }) + minetest.register_craft({ + output = 'tutorial:titangun5'..m, + recipe = { + {'', 'tutorial:titan', ''}, + {'tutorial:titan', 'tutorial:titangun4'..m, 'tutorial:titan'}, + {'', 'tutorial:titan', ''}, + } + }) + minetest.register_craft({ + output = 'tutorial:titangun4'..m, + recipe = { + {'', 'tutorial:titan', ''}, + {'tutorial:titan', 'tutorial:titangun3'..m, 'tutorial:titan'}, + {'', 'tutorial:titan', ''}, + } + }) + minetest.register_craft({ + output = 'tutorial:titangun3'..m, + recipe = { + {'', 'tutorial:titan', ''}, + {'tutorial:titan', 'tutorial:titangun2'..m, 'tutorial:titan'}, + {'', 'tutorial:titan', ''}, + } + }) + minetest.register_craft({ + output = 'tutorial:titangun2'..m, + recipe = { + {'', 'tutorial:titan', ''}, + {'tutorial:titan', 'tutorial:titangun1'..m, 'tutorial:titan'}, + {'', 'tutorial:titan', ''}, + } + }) + minetest.register_craft({ + output = 'tutorial:titangun1'..m, + recipe = { + {'', 'tutorial:titan', ''}, + {'tutorial:titan', 'tutorial:arenagun4'..m, 'tutorial:titan'}, + {'', 'tutorial:titan', ''}, + } + }) + minetest.register_craft({ + output = 'tutorial:legendengun1'..m, + recipe = { + {'tutorial:titangun10'..m, 'default:grass_1', 'default:grass_1', 'tutorial:bottle5'}, + {'default:grass_1', 'default:grass_1', 'default:grass_1', 'default:grass_1'}, + {'default:grass_1', 'default:grass_1', 'default:grass_1', 'default:grass_1'}, + {'tutorial:bottle5', 'default:grass_1', 'default:grass_1', 'default:grass_1'}, + } + }) + minetest.register_craft({ + output = 'tutorial:legendengun2'..m, + recipe = { + {'tutorial:legendengun1'..m, 'default:grass_1', 'default:grass_1', 'tutorial:bottle7'}, + {'default:grass_1', 'default:grass_1', 'default:grass_1', 'default:grass_1'}, + {'default:grass_1', 'default:grass_1', 'default:grass_1', 'default:grass_1'}, + {'tutorial:bottle7', 'default:grass_1', 'default:grass_1', 'default:grass_1'}, + } + }) + minetest.register_craft({ + output = 'tutorial:legendengun3'..m, + recipe = { + {'tutorial:legendengun2'..m, 'default:grass_1', 'default:grass_1', 'tutorial:bottle9'}, + {'default:grass_1', 'default:grass_1', 'default:grass_1', 'default:grass_1'}, + {'default:grass_1', 'default:grass_1', 'default:grass_1', 'default:grass_1'}, + {'tutorial:bottle9', 'default:grass_1', 'default:grass_1', 'default:grass_1'}, + } + }) + minetest.register_craft({ + output = 'tutorial:legendengun4'..m, + recipe = { + {'tutorial:legendengun3'..m, 'default:grass_1', 'default:grass_1', 'tutorial:bottle11'}, + {'default:grass_1', 'default:grass_1', 'default:grass_1', 'default:grass_1'}, + {'default:grass_1', 'default:grass_1', 'default:grass_1', 'default:grass_1'}, + {'tutorial:bottle11', 'default:grass_1', 'default:grass_1', 'default:grass_1'}, + } + }) + minetest.register_craft({ + output = 'tutorial:legendengun5'..m, + recipe = { + {'tutorial:legendengun4'..m, 'default:grass_1', 'default:grass_1', 'tutorial:bottleS1'}, + {'default:grass_1', 'default:grass_1', 'default:grass_1', 'default:grass_1'}, + {'default:grass_1', 'default:grass_1', 'default:grass_1', 'default:grass_1'}, + {'tutorial:bottleS1', 'default:grass_1', 'default:grass_1', 'default:grass_1'}, + } + }) + minetest.register_craft({ + output = 'tutorial:legendengun6'..m, + recipe = { + {'tutorial:legendengun5'..m, 'default:grass_1', 'default:grass_1', 'tutorial:bottleS3'}, + {'default:grass_1', 'default:grass_1', 'default:grass_1', 'default:grass_1'}, + {'default:grass_1', 'default:grass_1', 'default:grass_1', 'default:grass_1'}, + {'tutorial:bottleS3', 'default:grass_1', 'default:grass_1', 'default:grass_1'}, + } + }) +end +minetest.register_craft({ + output = 'tutorial:superlegendengun1', + recipe = { + {'tutorial:lilabattleaxe2', 'tutorial:legendengun6'}, + } +}) +minetest.register_craft({ + output = 'tutorial:superlegendengun2', + recipe = { + {'tutorial:lilabattleaxe2', 'tutorial:legendengun6_2'}, + } +}) +minetest.register_craft({ + output = 'tutorial:regnumgun1', + recipe = { + {'', '', 'tutorial:regnum', '', ''}, {'', '', 'tutorial:bottleSS', '', ''}, {'tutorial:regnum', 'tutorial:bottleSS', 'tutorial:superlegendengun1', 'tutorial:bottleSS', 'tutorial:regnum'}, {'', '', 'tutorial:bottleSS', '', ''}, {'', '', 'tutorial:regnum', '', ''}, - } + } }) minetest.register_craft({ - output = 'tutorial:regnumgun2', - recipe = { - {'tutorial:regnumgun1'}, - } + output = 'tutorial:regnumgun2', + recipe = { + {'', '', 'tutorial:regnum', '', ''}, + {'', '', 'tutorial:bottleSS', '', ''}, + {'tutorial:regnum', 'tutorial:bottleSS', 'tutorial:superlegendengun2', 'tutorial:bottleSS', 'tutorial:regnum'}, + {'', '', 'tutorial:bottleSS', '', ''}, + {'', '', 'tutorial:regnum', '', ''}, + } }) minetest.register_craft({ - output = 'tutorial:regnumgun1', - recipe = { - {'tutorial:regnumgun2'}, - } -}) -minetest.register_craft({ - output = 'tutorial:gun_admin1', - recipe = { - {'tutorial:gun_admin2'}, - } -}) -minetest.register_craft({ - output = 'tutorial:gun_admin2', - recipe = { - {'tutorial:gun_admin1'}, - } + output = 'tutorial:regnumgun3', + recipe = { + {'', '', 'tutorial:regnum', '', ''}, + {'', '', 'tutorial:bottleSS', '', ''}, + {'tutorial:regnum', 'tutorial:bottleSS', 'tutorial:superlegendengun3', 'tutorial:bottleSS', 'tutorial:regnum'}, + {'', '', 'tutorial:bottleSS', '', ''}, + {'', '', 'tutorial:regnum', '', ''}, + } }) minetest.register_craft({ output = 'tutorial:xp_block_yellow 16', @@ -5400,342 +5355,209 @@ for i = 0, 127 do end minetest.register_entity("tutorial:tb_"..i, XTRAORES_TB) end -minetest.register_tool("tutorial:gun", { - description = "Gun\nGun-lv.0", - inventory_image = "tutorial_gun.png", - groups = {not_in_creative_inventory=1}, - on_use = function(itemstack, user, pointed_thing) - local inv = user:get_inventory() - local pos = user:getpos() - local dir = user:get_look_dir() - local yaw = user:get_look_yaw() - if pos and dir and yaw then - pos.y = pos.y + 1.6 - local obj = minetest.add_entity(pos, "tutorial:tb_0") - if obj then - minetest.sound_play("shot", {object=obj}) - obj:setvelocity({x=dir.x * 60, y=dir.y * 60, z=dir.z * 60}) - obj:setacceleration({x=dir.x * -0, y=-0, z=dir.z * -0}) - obj:setyaw(yaw + math.pi) - local ent = obj:get_luaentity() - if ent then - ent.player = user - end +for i = 0, 127 do + local XTRAORES_TB2 = { + physical = false, + timer = 0, + visual = "sprite", + visual_size = {x=0.075, y=0.075,}, + textures = {'tutorial_titanium_shot.png'}, + lastpos= {}, + collisionbox = {0, 0, 0, 0, 0, 0}, + metadata = "", + } + XTRAORES_TB2.on_step = function(self, dtime) + self.timer = self.timer + dtime + local ki = 0 + if i == 0 then + ki = 1 + elseif i == 122 then + ki = 122 + elseif i == 123 then + ki = 150 + elseif i == 124 then + ki = 122 + elseif i == 125 then + ki = 150 + elseif i == 126 then + ki = 500 + elseif i == 127 then + ki = 500 + else + ki = i + end + local l = 0 + if i == 0 then + l = 1 + elseif i < 21 then + l = 2 + elseif i < 46 then + l = 3 + elseif i < 50 then + l = 4 + elseif i < 52 then + l = 5 + elseif i < 64 then + l = 6 + elseif i < 71 then + l = 7 + elseif i < 76 then + l = 8 + elseif i < 101 then + l = 9 + elseif i < 102 then + l = 10 + elseif i < 106 then + l = 11 + elseif i < 116 then + l = 12 + elseif i < 122 then + l = 13 + elseif i < 123 then + l = 14 + elseif i < 124 then + l = 15 + elseif i < 125 then + l = 14 + elseif i < 126 then + l = 15 + elseif i < 128 then + l = 20 + end + local pos = self.object:getpos() + local node = minetest.get_node(pos) + if self.timer > 0.08 then + local objs = minetest.get_objects_inside_radius({x = pos.x, y = pos.y, z = pos.z}, l) + for k, obj in pairs(objs) do + local damage = ki + if obj:get_luaentity() ~= nil then + if string.match(obj:get_luaentity().name, "monster") or string.match(obj:get_luaentity().name, "mobs_bat") or string.match(obj:get_luaentity().name, "mobs_birds") or string.match(obj:get_luaentity().name, "mobs_butterfly") or string.match(obj:get_luaentity().name, "mobs_crocs") or string.match(obj:get_luaentity().name, "mobs_fish") or string.match(obj:get_luaentity().name, "mobs_jellyfish") or string.match(obj:get_luaentity().name, "mobs_sharks") or string.match(obj:get_luaentity().name, "mobs_turtles") or string.match(obj:get_luaentity().name, "mummy") then + if obj:get_luaentity().name ~= "tutorial:tb_"..i and obj:get_luaentity().name ~= "__builtin:item" then + obj:punch(self.object, 1.0, {full_punch_interval = 1.0, damage_groups= {fleshy = damage}}, nil) + minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) + end + end end end - return itemstack - end, - }) + end + if self.lastpos.x ~= nil then + if minetest.registered_nodes[node.name].walkable then + if not minetest.setting_getbool("creative_mode") then + minetest.add_item(self.lastpos, "") + end + if i > 126 then + if minetest.get_node({x = pos.x, y = pos.y+1, z = pos.z+1}).name == "air" then + minetest.set_node({x = pos.x, y = pos.y+1, z = pos.z+1}, {name="tutorial:legend_thunderadmin"}) + end + if minetest.get_node({x = pos.x, y = pos.y+1, z = pos.z-1}).name == "air" then + minetest.set_node({x = pos.x, y = pos.y+1, z = pos.z-1}, {name="tutorial:legend_thunderadmin"}) + end + if minetest.get_node({x = pos.x+1, y = pos.y+1, z = pos.z}).name == "air" then + minetest.set_node({x = pos.x+1, y = pos.y+1, z = pos.z}, {name="tutorial:legend_thunderadmin"}) + end + if minetest.get_node({x = pos.x-1, y = pos.y+1, z = pos.z}).name == "air" then + minetest.set_node({x = pos.x-1, y = pos.y+1, z = pos.z}, {name="tutorial:legend_thunderadmin"}) + end + if minetest.get_node({x = pos.x+1, y = pos.y+1, z = pos.z+1}).name == "air" then + minetest.set_node({x = pos.x+1, y = pos.y+1, z = pos.z+1}, {name="tutorial:legend_thunderadmin"}) + end + if minetest.get_node({x = pos.x+1, y = pos.y+1, z = pos.z-1}).name == "air" then + minetest.set_node({x = pos.x+1, y = pos.y+1, z = pos.z-1}, {name="tutorial:legend_thunderadmin"}) + end + if minetest.get_node({x = pos.x-1, y = pos.y+1, z = pos.z+1}).name == "air" then + minetest.set_node({x = pos.x-1, y = pos.y+1, z = pos.z+1}, {name="tutorial:legend_thunderadmin"}) + end + if minetest.get_node({x = pos.x-1, y = pos.y+1, z = pos.z-1}).name == "air" then + minetest.set_node({x = pos.x-1, y = pos.y+1, z = pos.z-1}, {name="tutorial:legend_thunderadmin"}) + end + if minetest.get_node({x = pos.x, y = pos.y+1, z = pos.z}).name == "air" then + minetest.set_node({x = pos.x, y = pos.y+1, z = pos.z}, {name="tutorial:legend_thunderadmin"}) + end + minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) + elseif i >= 124 and i ~= 126 then + if minetest.get_node({x = pos.x, y = pos.y+1, z = pos.z+1}).name == "air" then + minetest.set_node({x = pos.x, y = pos.y+1, z = pos.z+1}, {name="tutorial:legend_thunder_8_8"}) + end + if minetest.get_node({x = pos.x, y = pos.y+1, z = pos.z-1}).name == "air" then + minetest.set_node({x = pos.x, y = pos.y+1, z = pos.z-1}, {name="tutorial:legend_thunder_8_8"}) + end + if minetest.get_node({x = pos.x+1, y = pos.y+1, z = pos.z}).name == "air" then + minetest.set_node({x = pos.x+1, y = pos.y+1, z = pos.z}, {name="tutorial:legend_thunder_8_8"}) + end + if minetest.get_node({x = pos.x-1, y = pos.y+1, z = pos.z}).name == "air" then + minetest.set_node({x = pos.x-1, y = pos.y+1, z = pos.z}, {name="tutorial:legend_thunder_8_8"}) + end + if minetest.get_node({x = pos.x+1, y = pos.y+1, z = pos.z+1}).name == "air" then + minetest.set_node({x = pos.x+1, y = pos.y+1, z = pos.z+1}, {name="tutorial:legend_thunder_8_8"}) + end + if minetest.get_node({x = pos.x+1, y = pos.y+1, z = pos.z-1}).name == "air" then + minetest.set_node({x = pos.x+1, y = pos.y+1, z = pos.z-1}, {name="tutorial:legend_thunder_8_8"}) + end + if minetest.get_node({x = pos.x-1, y = pos.y+1, z = pos.z+1}).name == "air" then + minetest.set_node({x = pos.x-1, y = pos.y+1, z = pos.z+1}, {name="tutorial:legend_thunder_8_8"}) + end + if minetest.get_node({x = pos.x-1, y = pos.y+1, z = pos.z-1}).name == "air" then + minetest.set_node({x = pos.x-1, y = pos.y+1, z = pos.z-1}, {name="tutorial:legend_thunder_8_8"}) + end + if minetest.get_node({x = pos.x, y = pos.y+1, z = pos.z}).name == "air" then + minetest.set_node({x = pos.x, y = pos.y+1, z = pos.z}, {name="tutorial:legend_thunder_8_8"}) + end + minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8}) + end + self.object:remove() + end + end + self.lastpos= {x = pos.x, y = pos.y, z = pos.z} + end + minetest.register_entity("tutorial:tb2_"..i, XTRAORES_TB2) +end + + +local guns = {} +table.insert(guns, {0,"tutorial:gun","Gun","tutorial_gun.png"}) for i = 1, 20 do - minetest.register_tool("tutorial:gun_mega"..i, { - description = "Mega Gun lv."..i.."\nGun-lv."..i, - inventory_image = "tutorial_gun_mega"..i..".png", - groups = {not_in_creative_inventory=1}, - on_use = function(itemstack, user, pointed_thing) - local inv = user:get_inventory() - local pos = user:getpos() - local dir = user:get_look_dir() - local yaw = user:get_look_yaw() - if pos and dir and yaw then - pos.y = pos.y + 1.6 - local obj = minetest.add_entity(pos, "tutorial:tb_"..i) - if obj then - minetest.sound_play("shot", {object=obj}) - obj:setvelocity({x=dir.x * 60, y=dir.y * 60, z=dir.z * 60}) - obj:setacceleration({x=dir.x * -0, y=-0, z=dir.z * -0}) - obj:setyaw(yaw + math.pi) - local ent = obj:get_luaentity() - if ent then - ent.player = user - end - end - end - return itemstack - end, - }) + table.insert(guns, {i,"tutorial:gun_mega"..i,"Mega Gun lv."..i,"tutorial_gun_mega"..i..".png"}) end for i = 1, 25 do - minetest.register_tool("tutorial:cloudgun_mega"..i, { - description = "Cloudgun lv."..i.."\nGun-lv."..(i+20), - inventory_image = "tutorial_cloudgun_mega"..i..".png", - groups = {not_in_creative_inventory=1}, - on_use = function(itemstack, user, pointed_thing) - local inv = user:get_inventory() - local pos = user:getpos() - local dir = user:get_look_dir() - local yaw = user:get_look_yaw() - if pos and dir and yaw then - pos.y = pos.y + 1.6 - local obj = minetest.add_entity(pos, "tutorial:tb_"..(i+20)) - if obj then - minetest.sound_play("shot", {object=obj}) - obj:setvelocity({x=dir.x * 60, y=dir.y * 60, z=dir.z * 60}) - obj:setacceleration({x=dir.x * -0, y=-0, z=dir.z * -0}) - obj:setyaw(yaw + math.pi) - local ent = obj:get_luaentity() - if ent then - ent.player = user - end - end - end - return itemstack - end, - }) + table.insert(guns, {i+20,"tutorial:cloudgun_mega"..i,"Cloudgun lv."..i,"tutorial_cloudgun_mega"..i..".png"}) end for i = 1, 4 do - minetest.register_tool("tutorial:supergun"..i, { - description = "Supergun lv."..i.."\nGun-lv."..(i+45), - inventory_image = "tutorial_supergun"..i..".png", - groups = {not_in_creative_inventory=1}, - on_use = function(itemstack, user, pointed_thing) - local inv = user:get_inventory() - local pos = user:getpos() - local dir = user:get_look_dir() - local yaw = user:get_look_yaw() - if pos and dir and yaw then - pos.y = pos.y + 1.6 - local obj = minetest.add_entity(pos, "tutorial:tb_"..(i+45)) - if obj then - minetest.sound_play("shot", {object=obj}) - obj:setvelocity({x=dir.x * 60, y=dir.y * 60, z=dir.z * 60}) - obj:setacceleration({x=dir.x * -0, y=-0, z=dir.z * -0}) - obj:setyaw(yaw + math.pi) - local ent = obj:get_luaentity() - if ent then - ent.player = user - end - end - end - return itemstack - end, - }) + table.insert(guns, {i+45,"tutorial:supergun"..i,"Supergun lv."..i,"tutorial_supergun"..i..".png"}) end for i = 1, 2 do - minetest.register_tool("tutorial:uraniumgun"..i, { - description = "Uraniumgun lv."..i.."\nGun-lv."..(i+49), - inventory_image = "tutorial_uraniumgun"..i..".png", - groups = {not_in_creative_inventory=1}, - on_use = function(itemstack, user, pointed_thing) - local inv = user:get_inventory() - local pos = user:getpos() - local dir = user:get_look_dir() - local yaw = user:get_look_yaw() - if pos and dir and yaw then - pos.y = pos.y + 1.6 - local obj = minetest.add_entity(pos, "tutorial:tb_"..(i+49)) - if obj then - minetest.sound_play("shot", {object=obj}) - obj:setvelocity({x=dir.x * 60, y=dir.y * 60, z=dir.z * 60}) - obj:setacceleration({x=dir.x * -0, y=-0, z=dir.z * -0}) - obj:setyaw(yaw + math.pi) - local ent = obj:get_luaentity() - if ent then - ent.player = user - end - end - end - return itemstack - end, - }) + table.insert(guns, {i+49,"tutorial:uraniumgun"..i,"Uraniumgun lv."..i,"tutorial_uraniumgun"..i..".png"}) +end +for i = 1, 2 do + table.insert(guns, {i+49,"tutorial:uraniumgun"..i,"Uraniumgun lv."..i,"tutorial_uraniumgun"..i..".png"}) end for i = 1, 12 do - minetest.register_tool("tutorial:energygun"..i, { - description = "Energygun lv."..i.."\nGun-lv."..(i+51), - inventory_image = "tutorial_energygun"..i..".png", - groups = {not_in_creative_inventory=1}, - on_use = function(itemstack, user, pointed_thing) - local inv = user:get_inventory() - local pos = user:getpos() - local dir = user:get_look_dir() - local yaw = user:get_look_yaw() - if pos and dir and yaw then - pos.y = pos.y + 1.6 - local obj = minetest.add_entity(pos, "tutorial:tb_"..(i+51)) - if obj then - minetest.sound_play("shot", {object=obj}) - obj:setvelocity({x=dir.x * 60, y=dir.y * 60, z=dir.z * 60}) - obj:setacceleration({x=dir.x * -0, y=-0, z=dir.z * -0}) - obj:setyaw(yaw + math.pi) - local ent = obj:get_luaentity() - if ent then - ent.player = user - end - end - end - return itemstack - end, - }) + table.insert(guns, {i+51,"tutorial:energygun"..i,"Energygun lv."..i,"tutorial_energygun"..i..".png"}) end for i = 1, 7 do - minetest.register_tool("tutorial:superenergygun"..i, { - description = "Superenergygun lv."..i.."\nGun-lv."..(i+63), - inventory_image = "tutorial_superenergygun"..i..".png", - groups = {not_in_creative_inventory=1}, - on_use = function(itemstack, user, pointed_thing) - local inv = user:get_inventory() - local pos = user:getpos() - local dir = user:get_look_dir() - local yaw = user:get_look_yaw() - if pos and dir and yaw then - pos.y = pos.y + 1.6 - local obj = minetest.add_entity(pos, "tutorial:tb_"..(i+63)) - if obj then - minetest.sound_play("shot", {object=obj}) - obj:setvelocity({x=dir.x * 60, y=dir.y * 60, z=dir.z * 60}) - obj:setacceleration({x=dir.x * -0, y=-0, z=dir.z * -0}) - obj:setyaw(yaw + math.pi) - local ent = obj:get_luaentity() - if ent then - ent.player = user - end - end - end - return itemstack - end, - }) + table.insert(guns, {i+63,"tutorial:superenergygun"..i,"Superenergygun lv."..i,"tutorial_superenergygun"..i..".png"}) end for i = 1, 5 do - minetest.register_tool("tutorial:kristallgun"..i, { - description = "Crystalgun lv."..i.."\nGun-lv."..(i+70), - inventory_image = "tutorial_kristallgun"..i..".png", - groups = {not_in_creative_inventory=1}, - on_use = function(itemstack, user, pointed_thing) - local inv = user:get_inventory() - local pos = user:getpos() - local dir = user:get_look_dir() - local yaw = user:get_look_yaw() - if pos and dir and yaw then - pos.y = pos.y + 1.6 - local obj = minetest.add_entity(pos, "tutorial:tb_"..(i+70)) - if obj then - minetest.sound_play("shot", {object=obj}) - obj:setvelocity({x=dir.x * 60, y=dir.y * 60, z=dir.z * 60}) - obj:setacceleration({x=dir.x * -0, y=-0, z=dir.z * -0}) - obj:setyaw(yaw + math.pi) - local ent = obj:get_luaentity() - if ent then - ent.player = user - end - end - end - return itemstack - end, - }) + table.insert(guns, {i+70,"tutorial:kristallgun"..i,"Crystalgun lv."..i,"tutorial_kristallgun"..i..".png"}) end for i = 1, 25 do - minetest.register_tool("tutorial:ultragun"..i, { - description = "Ultragun lv."..i.."\nGun-lv."..(i+75), - inventory_image = "tutorial_ultragun"..i..".png", - groups = {not_in_creative_inventory=1}, - on_use = function(itemstack, user, pointed_thing) - local inv = user:get_inventory() - local pos = user:getpos() - local dir = user:get_look_dir() - local yaw = user:get_look_yaw() - if pos and dir and yaw then - pos.y = pos.y + 1.6 - local obj = minetest.add_entity(pos, "tutorial:tb_"..(i+75)) - if obj then - minetest.sound_play("shot", {object=obj}) - obj:setvelocity({x=dir.x * 60, y=dir.y * 60, z=dir.z * 60}) - obj:setacceleration({x=dir.x * -0, y=-0, z=dir.z * -0}) - obj:setyaw(yaw + math.pi) - local ent = obj:get_luaentity() - if ent then - ent.player = user - end - end - end - return itemstack - end, - }) + table.insert(guns, {i+75,"tutorial:ultragun"..i,"Ultragun lv."..i,"tutorial_ultragun"..i..".png"}) end -minetest.register_tool("tutorial:ultragun", { - description = "Superultragun\nGun-lv.101", - inventory_image = "tutorial_superultragun.png", - groups = {not_in_creative_inventory=1}, - on_use = function(itemstack, user, pointed_thing) - local inv = user:get_inventory() - local pos = user:getpos() - local dir = user:get_look_dir() - local yaw = user:get_look_yaw() - if pos and dir and yaw then - pos.y = pos.y + 1.6 - local obj = minetest.add_entity(pos, "tutorial:tb_101") - if obj then - minetest.sound_play("shot", {object=obj}) - obj:setvelocity({x=dir.x * 60, y=dir.y * 60, z=dir.z * 60}) - obj:setacceleration({x=dir.x * -0, y=-0, z=dir.z * -0}) - obj:setyaw(yaw + math.pi) - local ent = obj:get_luaentity() - if ent then - ent.player = user - end - end - end - return itemstack - end, -}) +table.insert(guns, {101,"tutorial:ultragun","Superultragun","tutorial_superultragun.png"}) for i = 1, 4 do - minetest.register_tool("tutorial:arenagun"..i, { - description = "Arenagun lv."..i.."\nGun-lv."..(i+101), - inventory_image = "tutorial_arenagun"..i..".png", - groups = {not_in_creative_inventory=1}, - on_use = function(itemstack, user, pointed_thing) - local inv = user:get_inventory() - local pos = user:getpos() - local dir = user:get_look_dir() - local yaw = user:get_look_yaw() - if pos and dir and yaw then - pos.y = pos.y + 1.6 - local obj = minetest.add_entity(pos, "tutorial:tb_"..(i+101)) - if obj then - minetest.sound_play("shot", {object=obj}) - obj:setvelocity({x=dir.x * 60, y=dir.y * 60, z=dir.z * 60}) - obj:setacceleration({x=dir.x * -0, y=-0, z=dir.z * -0}) - obj:setyaw(yaw + math.pi) - local ent = obj:get_luaentity() - if ent then - ent.player = user - end - end - end - return itemstack - end, - }) + table.insert(guns, {i+101,"tutorial:arenagun"..i,"Arenagun lv."..i,"tutorial_arenagun"..i..".png"}) end for i = 1, 10 do - minetest.register_tool("tutorial:titangun"..i, { - description = "Titangun lv."..i.."\nGun-lv."..(i+105), - inventory_image = "tutorial_titangun"..i..".png", - groups = {not_in_creative_inventory=1}, - on_use = function(itemstack, user, pointed_thing) - local inv = user:get_inventory() - local pos = user:getpos() - local dir = user:get_look_dir() - local yaw = user:get_look_yaw() - if pos and dir and yaw then - pos.y = pos.y + 1.6 - local obj = minetest.add_entity(pos, "tutorial:tb_"..(i+105)) - if obj then - minetest.sound_play("shot", {object=obj}) - obj:setvelocity({x=dir.x * 60, y=dir.y * 60, z=dir.z * 60}) - obj:setacceleration({x=dir.x * -0, y=-0, z=dir.z * -0}) - obj:setyaw(yaw + math.pi) - local ent = obj:get_luaentity() - if ent then - ent.player = user - end - end - end - return itemstack - end, - }) + table.insert(guns, {i+105,"tutorial:titangun"..i,"Titangun lv."..i,"tutorial_titangun"..i..".png"}) end for i = 1, 6 do - minetest.register_tool("tutorial:legendengun"..i, { - description = "Legendgun lv."..i.."\nGun-lv."..(i+115), - inventory_image = "tutorial_legendengun"..i..".png", + table.insert(guns, {i+115,"tutorial:legendengun"..i,"Legendgun lv."..i,"tutorial_legendengun"..i..".png"}) +end + +for _, m in pairs(guns) do + minetest.register_tool(m[2], { + description = m[3].." Mode 1 (damage to players and no thunder)\nGun-lv."..m[1], + inventory_image = m[4].."^technic_tool_mode1.png", + wield_image = m[4], groups = {not_in_creative_inventory=1}, on_use = function(itemstack, user, pointed_thing) local inv = user:get_inventory() @@ -5744,7 +5566,7 @@ for i = 1, 6 do local yaw = user:get_look_yaw() if pos and dir and yaw then pos.y = pos.y + 1.6 - local obj = minetest.add_entity(pos, "tutorial:tb_"..(i+115)) + local obj = minetest.add_entity(pos, "tutorial:tb_"..m[1]) if obj then minetest.sound_play("shot", {object=obj}) obj:setvelocity({x=dir.x * 60, y=dir.y * 60, z=dir.z * 60}) @@ -5758,10 +5580,51 @@ for i = 1, 6 do end return itemstack end, + on_secondary_use = function(itemstack, user, pointed_thing) + local keys = user:get_player_control() + if keys["sneak"] == true then + itemstack:set_name(m[2].."_2") + end + return itemstack + end, + }) + minetest.register_tool(m[2].."_2", { + description = m[3].." Mode 2 (no damage to players and no thunder)\nGun-lv."..m[1], + inventory_image = m[4].."^technic_tool_mode2.png", + wield_image = m[4], + groups = {not_in_creative_inventory=1}, + on_use = function(itemstack, user, pointed_thing) + local inv = user:get_inventory() + local pos = user:getpos() + local dir = user:get_look_dir() + local yaw = user:get_look_yaw() + if pos and dir and yaw then + pos.y = pos.y + 1.6 + local obj = minetest.add_entity(pos, "tutorial:tb2_"..m[1]) + if obj then + minetest.sound_play("shot", {object=obj}) + obj:setvelocity({x=dir.x * 60, y=dir.y * 60, z=dir.z * 60}) + obj:setacceleration({x=dir.x * -0, y=-0, z=dir.z * -0}) + obj:setyaw(yaw + math.pi) + local ent = obj:get_luaentity() + if ent then + ent.player = user + end + end + end + return itemstack + end, + on_secondary_use = function(itemstack, user, pointed_thing) + local keys = user:get_player_control() + if keys["sneak"] == true then + itemstack:set_name(m[2]) + end + return itemstack + end, }) end minetest.register_tool("tutorial:superlegendengun1", { - description = "Superlegendgun Mode 1. Add no thunder\nGun-lv.122", + description = "Superlegendgun Mode 1 (damage to players and no thunder)\nGun-lv.122", inventory_image = "tutorial_superlegendengun.png^technic_tool_mode1.png", wield_image = "tutorial_superlegendengun.png", groups = {not_in_creative_inventory=1}, @@ -5786,10 +5649,17 @@ minetest.register_tool("tutorial:superlegendengun1", { end return itemstack end, + on_secondary_use = function(itemstack, user, pointed_thing) + local keys = user:get_player_control() + if keys["sneak"] == true then + itemstack:set_name("tutorial:superlegendengun3") + end + return itemstack + end, }) minetest.register_tool("tutorial:superlegendengun2", { - description = "Superlegendgun Mode 2. Add thunder\nGun-lv.122", - inventory_image = "tutorial_superlegendengun.png^technic_tool_mode2.png", + description = "Superlegendgun Mode 3 (damage to players and thunder)\nGun-lv.122", + inventory_image = "tutorial_superlegendengun.png^technic_tool_mode3.png", wield_image = "tutorial_superlegendengun.png", groups = {not_in_creative_inventory=1}, on_use = function(itemstack, user, pointed_thing) @@ -5813,9 +5683,51 @@ minetest.register_tool("tutorial:superlegendengun2", { end return itemstack end, + on_secondary_use = function(itemstack, user, pointed_thing) + local keys = user:get_player_control() + if keys["sneak"] == true then + itemstack:set_name("tutorial:superlegendengun1") + end + return itemstack + end, }) +minetest.register_tool("tutorial:superlegendengun3", { + description = "Superlegendgun Mode 2. (no damage to players and no thunder)\nGun-lv.122", + inventory_image = "tutorial_superlegendengun.png^technic_tool_mode2.png", + wield_image = "tutorial_superlegendengun.png", + groups = {not_in_creative_inventory=1}, + on_use = function(itemstack, user, pointed_thing) + local inv = user:get_inventory() + local pos = user:getpos() + local dir = user:get_look_dir() + local yaw = user:get_look_yaw() + if pos and dir and yaw then + pos.y = pos.y + 1.6 + local obj = minetest.add_entity(pos, "tutorial:tb2_122") + if obj then + minetest.sound_play("shot", {object=obj}) + obj:setvelocity({x=dir.x * 60, y=dir.y * 60, z=dir.z * 60}) + obj:setacceleration({x=dir.x * -0, y=-0, z=dir.z * -0}) + obj:setyaw(yaw + math.pi) + local ent = obj:get_luaentity() + if ent then + ent.player = user + end + end + end + return itemstack + end, + on_secondary_use = function(itemstack, user, pointed_thing) + local keys = user:get_player_control() + if keys["sneak"] == true then + itemstack:set_name("tutorial:superlegendengun2") + end + return itemstack + end, +}) + minetest.register_tool("tutorial:regnumgun1", { - description = "Regnumgun Mode 1. Add no thunder\nGun-lv.MAX", + description = "Regnumgun Mode 1 (damage to players and no thunder)\nGun-lv.MAX", inventory_image = "tutorial_regnumgun.png^technic_tool_mode1.png", wield_image = "tutorial_regnumgun.png", on_use = function(itemstack, user, pointed_thing) @@ -5839,10 +5751,17 @@ minetest.register_tool("tutorial:regnumgun1", { end return itemstack end, + on_secondary_use = function(itemstack, user, pointed_thing) + local keys = user:get_player_control() + if keys["sneak"] == true then + itemstack:set_name("tutorial:regnumgun3") + end + return itemstack + end, }) minetest.register_tool("tutorial:regnumgun2", { - description = "Regnumgun Mode 2. Add thunder\nGun-lv.MAX", - inventory_image = "tutorial_regnumgun.png^technic_tool_mode2.png", + description = "Regnumgun Mode 3 (damage to players and thunder)\nGun-lv.MAX", + inventory_image = "tutorial_regnumgun.png^technic_tool_mode3.png", wield_image = "tutorial_regnumgun.png", groups = {not_in_creative_inventory=1}, on_use = function(itemstack, user, pointed_thing) @@ -5866,9 +5785,53 @@ minetest.register_tool("tutorial:regnumgun2", { end return itemstack end, + on_secondary_use = function(itemstack, user, pointed_thing) + local keys = user:get_player_control() + if keys["sneak"] == true then + itemstack:set_name("tutorial:regnumgun1") + end + return itemstack + end, }) + +minetest.register_tool("tutorial:regnumgun3", { + description = "Regnumgun Mode 2 (no damage to players and no thunder)\nGun-lv.MAX", + inventory_image = "tutorial_regnumgun.png^technic_tool_mode2.png", + wield_image = "tutorial_regnumgun.png", + groups = {not_in_creative_inventory=1}, + on_use = function(itemstack, user, pointed_thing) + local inv = user:get_inventory() + local pos = user:getpos() + local dir = user:get_look_dir() + local yaw = user:get_look_yaw() + if pos and dir and yaw then + pos.y = pos.y + 1.6 + local obj = minetest.add_entity(pos, "tutorial:tb2_123") + if obj then + minetest.sound_play("shot", {object=obj}) + obj:setvelocity({x=dir.x * 60, y=dir.y * 60, z=dir.z * 60}) + obj:setacceleration({x=dir.x * -0, y=-0, z=dir.z * -0}) + obj:setyaw(yaw + math.pi) + local ent = obj:get_luaentity() + if ent then + ent.player = user + end + end + end + return itemstack + end, + on_secondary_use = function(itemstack, user, pointed_thing) + local keys = user:get_player_control() + if keys["sneak"] == true then + itemstack:set_name("tutorial:regnumgun2") + end + return itemstack + end, +}) + + minetest.register_tool("tutorial:gun_admin1", { - description = "Admin tool 11: Gun Mode 1. Add no thunder", + description = "Admin tool 11: Gun Mode 1 (damage to players and no thunder)", inventory_image = "tutorial_admingun.png^technic_tool_mode1.png", wield_image = "tutorial_admingun.png", on_use = function(itemstack, user, pointed_thing) @@ -5892,10 +5855,17 @@ minetest.register_tool("tutorial:gun_admin1", { end return itemstack end, + on_secondary_use = function(itemstack, user, pointed_thing) + local keys = user:get_player_control() + if keys["sneak"] == true then + itemstack:set_name("tutorial:gun_admin3") + end + return itemstack + end, }) minetest.register_tool("tutorial:gun_admin2", { - description = "Admin tool 11: Gun Mode 2. Add thunder", - inventory_image = "tutorial_admingun.png^technic_tool_mode2.png", + description = "Admin tool 11: Gun Mode 3 (damage to players and thunder)", + inventory_image = "tutorial_admingun.png^technic_tool_mode3.png", wield_image = "tutorial_admingun.png", groups = {not_in_creative_inventory=1}, on_use = function(itemstack, user, pointed_thing) @@ -5919,7 +5889,50 @@ minetest.register_tool("tutorial:gun_admin2", { end return itemstack end, + on_secondary_use = function(itemstack, user, pointed_thing) + local keys = user:get_player_control() + if keys["sneak"] == true then + itemstack:set_name("tutorial:gun_admin1") + end + return itemstack + end, }) + +minetest.register_tool("tutorial:gun_admin3", { + description = "Admin tool 11: Gun Mode 2 (no damage to players and no thunder)", + inventory_image = "tutorial_admingun.png^technic_tool_mode2.png", + wield_image = "tutorial_admingun.png", + groups = {not_in_creative_inventory=1}, + on_use = function(itemstack, user, pointed_thing) + local inv = user:get_inventory() + local pos = user:getpos() + local dir = user:get_look_dir() + local yaw = user:get_look_yaw() + if pos and dir and yaw then + pos.y = pos.y + 1.6 + local obj = minetest.add_entity(pos, "tutorial:tb2_126") + if obj then + minetest.sound_play("shot", {object=obj}) + obj:setvelocity({x=dir.x * 60, y=dir.y * 60, z=dir.z * 60}) + obj:setacceleration({x=dir.x * -0, y=-0, z=dir.z * -0}) + obj:setyaw(yaw + math.pi) + local ent = obj:get_luaentity() + if ent then + ent.player = user + end + end + end + return itemstack + end, + on_secondary_use = function(itemstack, user, pointed_thing) + local keys = user:get_player_control() + if keys["sneak"] == true then + itemstack:set_name("tutorial:gun_admin2") + end + return itemstack + end, +}) + local mine = {} mine.get_formspec = function(player, pos) if player == nil then @@ -6363,6 +6376,9 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) if fields.troph then inventory_plus.set_inventory_formspec(player, troph.get_formspec(player)) end + if fields.backward then + inventory_plus.set_inventory_formspec(player, backward.get_formspec(player)) + end if fields.trophys then inventory_plus.set_inventory_formspec(player, trophys.get_formspec(player)) end @@ -6460,6 +6476,158 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) end inventory_plus.set_inventory_formspec(player, troph.get_formspec(player)) end + if fields.backwardcra then + local player_inv = player:get_inventory() + player_inv:set_size("backward", 1) + local name = player_inv:get_stack("backward", 1):get_name() + local item1 = "" + local item2 = "" + local item3 = "" + local item4 = "" + local re = false + if name == "3d_armor:superlegendenboots" or name == "3d_armor:superlegendenboots2" or name == "3d_armor:superlegendenboots3" or name == "3d_armor:superlegendenboots4" then + item1 = "3d_armor:legendenboots6" + item2 = "tutorial:lilabattleaxe2" + re = true + elseif name == "3d_armor:superlegendenchestplate" or name == "3d_armor:superlegendenchestplate2" or name == "3d_armor:superlegendenchestplate3" or name == "3d_armor:superlegendenchestplate4" then + item1 = "3d_armor:legendenchestplate6" + item2 = "tutorial:lilabattleaxe2" + re = true + elseif name == "3d_armor:superlegendenhelmet" or name == "3d_armor:superlegendenhelmet2" or name == "3d_armor:superlegendenhelmet3" or name == "3d_armor:superlegendenhelmet4" then + item1 = "3d_armor:legendenhelmet6" + item2 = "tutorial:lilabattleaxe2" + re = true + elseif name == "3d_armor:superlegendenleggings" or name == "3d_armor:superlegendenleggings2" or name == "3d_armor:superlegendenleggings3" or name == "3d_armor:superlegendenleggings4" then + item1 = "3d_armor:legendenleggings6" + item2 = "tutorial:lilabattleaxe2" + re = true + elseif name == "shields:superlegendenshield" or name == "shields:superlegendenshield2" or name == "shields:superlegendenshield3" or name == "shields:superlegendenshield4" then + item1 = "shields:legendenshield6" + item2 = "tutorial:lilabattleaxe2" + re = true + elseif name == "tutorial:superlegendengun1" or name == "tutorial:superlegendengun2" then + item1 = "tutorial:legendengun6" + item2 = "tutorial:lilabattleaxe2" + re = true + elseif name == "tutorial:superlegendengun3" then + item1 = "tutorial:legendengun6_2" + item2 = "tutorial:lilabattleaxe2" + re = true + elseif name == "3d_armor:regnumboots" or name == "3d_armor:regnumboots2" or name == "3d_armor:regnumboots3" or name == "3d_armor:regnumboots4" then + item1 = "3d_armor:legendenboots6" + item2 = "tutorial:lilabattleaxe2" + item3 = "tutorial:bottleSS 4" + item4 = "tutorial:regnum 4" + re = true + elseif name == "3d_armor:regnumhelmet" or name == "3d_armor:regnumhelmet2" or name == "3d_armor:regnumhelmet3" or name == "3d_armor:regnumhelmet4" then + item1 = "3d_armor:legendenhelmet6" + item2 = "tutorial:lilabattleaxe2" + item3 = "tutorial:bottleSS 4" + item4 = "tutorial:regnum 4" + re = true + elseif name == "3d_armor:regnumleggings" or name == "3d_armor:regnumleggings2" or name == "3d_armor:regnumleggings3" or name == "3d_armor:regnumleggings4" then + item1 = "3d_armor:legendenleggings6" + item2 = "tutorial:lilabattleaxe2" + item3 = "tutorial:bottleSS 4" + item4 = "tutorial:regnum 4" + re = true + elseif name == "3d_armor:regnumchestplate" or name == "3d_armor:regnumchestplate2" or name == "3d_armor:regnumchestplate3" or name == "3d_armor:regnumchestplate4" then + item1 = "3d_armor:legendenchestplate6" + item2 = "tutorial:lilabattleaxe2" + item3 = "tutorial:bottleSS 4" + item4 = "tutorial:regnum 4" + re = true + elseif name == "shields:regnumshield" or name == "shields:regnumshield2" or name == "shields:regnumshield3" or name == "shields:regnumshield4" then + item1 = "shields:legendenshield6" + item2 = "tutorial:lilabattleaxe2" + item3 = "tutorial:bottleSS 4" + item4 = "tutorial:regnum 4" + re = true + elseif name == "tutorial:regnumgun1" or name == "tutorial:regnumgun2" then + item1 = "tutorial:legendengun6" + item2 = "tutorial:lilabattleaxe2" + item3 = "tutorial:bottleSS 4" + item4 = "tutorial:regnum 4" + re = true + elseif name == "tutorial:regnumgun3" then + item1 = "tutorial:legendengun6_2" + item2 = "tutorial:lilabattleaxe2" + item3 = "tutorial:bottleSS 4" + item4 = "tutorial:regnum 4" + re = true + end + if string.match(name, "tutorial:bag_schluessel") then + local level = string.gsub(name, "tutorial:bag_schluessel", "") + if tonumber(level) > 0 and tonumber(level) < 4 then + item1 = "tutorial:coin_grau "..(level*120) + item2 = "tutorial:obsidian6 "..level + item3 = "default:stick 2" + re = true + end + elseif string.match(name, "technic:laser_mkS") then + local level = string.gsub(name, "technic:laser_mkS", "") + if tonumber(level) > 0 and tonumber(level) < 150 then + item1 = "tutorial:coin "..(level-1)*8+3 + item2 = "tutorial:admin" + item3 = "moreores:mithril_ingot 2" + re = true + end + elseif string.match(name, "technic:drill_mkS") then + local level = string.gsub(name, "technic:drill_mkS", "") + local level = string.gsub(level, "_1", "") + local level = string.gsub(level, "_2", "") + local level = string.gsub(level, "_3", "") + local level = string.gsub(level, "_4", "") + local level = string.gsub(level, "_5", "") + minetest.chat_send_all(level) + if tonumber(level) > 0 and tonumber(level) < 150 then + item1 = "tutorial:coin2 "..(level-1)*8+3 + item2 = "tutorial:admin" + item3 = "moreores:mithril_ingot 2" + re = true + end + elseif string.match(name, "tutorial:cooking_schluessel") then + local level = string.gsub(name, "tutorial:cooking_schluessel", "") + if tonumber(level) > 0 and tonumber(level) < 4 then + item1 = "tutorial:coin_cyan "..(level-1)*8+6 + re = true + end + elseif string.match(name, "tutorial:craft_schluessel") then + local level = string.gsub(name, "tutorial:craft_schluessel", "") + if tonumber(level) > 0 and tonumber(level) < 7 then + item1 = "tutorial:coin_lila "..(level-1)*8+7 + item2 = "default:stick 2" + re = true + end + elseif string.match(name, "tutorial:wallplacer") then + local level = string.gsub(name, "tutorial:wallplacer", "") + local level = string.gsub(level, "_1", "") + local level = string.gsub(level, "_2", "") + local level = string.gsub(level, "_3", "") + local level = string.gsub(level, "_4", "") + local level = string.gsub(level, "_5", "") + minetest.chat_send_all(level) + if tonumber(level) > 0 and tonumber(level) < 5 then + item1 = "tutorial:coin_gelb "..(level-1)*24+8 + re = true + end + elseif string.match(name, "tutorial:coin_grau") and name ~= "tutorial:coin_grau" then + local level = string.gsub(name, "tutorial:coin_grau", "") + if tonumber(level) > 0 and tonumber(level) < 20 then + item1 = "tutorial:coin_grau "..(level)*8 + item2 = "tutorial:obsidian6" + re = true + end + end + if re == true and player_inv:room_for_item("main", item1) and player_inv:room_for_item("main", item2) and player_inv:room_for_item("main", item3) and player_inv:room_for_item("main", item4) then + player_inv:remove_item("backward", name) + player_inv:add_item("main", item1) + player_inv:add_item("main", item2) + player_inv:add_item("main", item3) + player_inv:add_item("main", item4) + end + inventory_plus.set_inventory_formspec(player, backward.get_formspec(player)) + end if fields.cre2 then local player_inv = player:get_inventory() player_inv:set_size("kri", 8) @@ -6470,7 +6638,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) end end - local time = 500-(k*50) + local time = 500 player_inv:set_stack("crtime", 1, "default:dirt") player_inv:set_size("pixkey", 1) local name = player_inv:get_stack("pixkey", 1):get_name() @@ -6487,7 +6655,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) inventory_plus.set_inventory_formspec(player, crafting8.get_formspec(player)) end player_inv:set_stack("crtime", 1, nil) - player_inv:add_item("main", "tutorial:bottle_crystal") + player_inv:add_item("main", "tutorial:bottle_crystal "..(k+2)) end) end if fields.meda1 then @@ -6590,21 +6758,6 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) end inventory_plus.set_inventory_formspec(player, meda.get_formspec(player)) end - if fields.rg21 then - inventory_plus.set_inventory_formspec(player, rg21.get_formspec(player)) - end - if fields.rg22 then - inventory_plus.set_inventory_formspec(player, rg22.get_formspec(player)) - end - if fields.rg23 then - inventory_plus.set_inventory_formspec(player, rg23.get_formspec(player)) - end - if fields.rg24 then - inventory_plus.set_inventory_formspec(player, rg24.get_formspec(player)) - end - if fields.rg25 then - inventory_plus.set_inventory_formspec(player, rg25.get_formspec(player)) - end if fields.medallion then inventory_plus.set_inventory_formspec(player, medallion.get_formspec(player)) end @@ -7421,14 +7574,8 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) inventory_plus.set_inventory_formspec(player, recraft.get_formspec(player)) end end) -minetest.register_craft({ - output = 'tutorial:adminbattleaxe', - recipe = { - {'tutorial:adminbattleaxe3'}, - } -}) minetest.register_tool("tutorial:adminbattleaxe3", { - description = "Admin tool 3: Admin battleaxe Mode 3. Only for hunting mobs", + description = "Admin tool 3: Admin battleaxe Mode 3 (for hunting mobs)", inventory_image = "tutorial_adminbattleaxe.png^technic_tool_mode3.png", wield_image = "tutorial_adminbattleaxe.png", groups = {not_in_creative_inventory=1}, @@ -7440,9 +7587,16 @@ minetest.register_tool("tutorial:adminbattleaxe3", { damage_groups = {fleshy=4000} }, liquids_pointable = false, + on_secondary_use = function(itemstack, user, pointed_thing) + local keys = user:get_player_control() + if keys["sneak"] == true then + itemstack:set_name("tutorial:adminbattleaxe") + end + return itemstack + end, }) minetest.register_tool("tutorial:superlegendenbattleaxe3", { - description = "Superlegendbattleaxe Mode 3. Only for hunting mobs\nBattleaxe-lv.122", + description = "Superlegendbattleaxe Mode 3 (for hunting mobs)\nBattleaxe-lv.122", inventory_image = "tutorial_superlegendenbattleaxe.png^technic_tool_mode3.png", wield_image = "tutorial_superlegendenbattleaxe.png", groups = {not_in_creative_inventory=1}, @@ -7454,21 +7608,16 @@ minetest.register_tool("tutorial:superlegendenbattleaxe3", { damage_groups = {fleshy=244} }, liquids_pointable = false, -}) -minetest.register_craft({ - output = 'tutorial:superlegendenbattleaxe1', - recipe = { - {'tutorial:superlegendenbattleaxe3'}, - } -}) -minetest.register_craft({ - output = 'tutorial:regnumbattleaxe1', - recipe = { - {'tutorial:regnumbattleaxe3'}, - } + on_secondary_use = function(itemstack, user, pointed_thing) + local keys = user:get_player_control() + if keys["sneak"] == true then + itemstack:set_name("tutorial:superlegendenbattleaxe1") + end + return itemstack + end, }) minetest.register_tool("tutorial:regnumbattleaxe3", { - description = "Regnumbattleaxe Mode 3. Only for hunting mobs\nBattleaxe-lv.MAX", + description = "Regnumbattleaxe Mode 3 (for hunting mobs)\nBattleaxe-lv.MAX", inventory_image = "tutorial_regnumbattleaxe.png^technic_tool_mode3.png", wield_image = "tutorial_regnumbattleaxe.png", groups = {not_in_creative_inventory=1}, @@ -7480,6 +7629,13 @@ minetest.register_tool("tutorial:regnumbattleaxe3", { damage_groups = {fleshy=150} }, liquids_pointable = false, + on_secondary_use = function(itemstack, user, pointed_thing) + local keys = user:get_player_control() + if keys["sneak"] == true then + itemstack:set_name("tutorial:regnumbattleaxe1") + end + return itemstack + end, }) minetest.register_craft({ output = 'tutorial:bottleSS', diff --git a/mods/tutorial/node.lua b/mods/tutorial/node.lua index 23b3906..c3b6480 100644 --- a/mods/tutorial/node.lua +++ b/mods/tutorial/node.lua @@ -1,65 +1,150 @@ minetest.register_node("tutorial:geschenk_gem",{ - description = "Gift lv.1 (gem)", + description = "Gift (gem dragon)", is_ground_content = true, tiles = {"tutorial_geschenk_gem.png"}, groups = {snappy=1,choppy=2,oddly_breakable_by_hand=2,flammable=3}, - drop = {}, + drop = { + max_items = 1, + items = { + {items = {"tutorial:gem_fragment"},rarity = 2.5}, + {items = {"tutorial:geschenk_legend"},rarity = 5}, + {items = {""},rarity = 2.5}, + } + } }) minetest.register_node("tutorial:geschenk_dragon",{ description = "Gift (dragon)", is_ground_content = true, tiles = {"tutorial_geschenk_dragon.png"}, groups = {snappy=1,choppy=2,oddly_breakable_by_hand=2,flammable=3}, - drop = {}, + drop = {"default:coal_lump 20"}, }) minetest.register_node("tutorial:geschenk_dna",{ description = "Gift (DNA)", is_ground_content = true, tiles = {"tutorial_geschenk_dna.png"}, groups = {snappy=1,choppy=2,oddly_breakable_by_hand=2,flammable=3}, - drop = {} + drop = { + max_items = 1, + items = { + {items = {"mobs:watermob_crocodile_lg_egg"},rarity = 16}, + {items = {"mobs:watermob_crocodile_md_egg"},rarity = 16}, + {items = {"mobs:watermob_crocodile_sm_egg"},rarity = 16}, + {items = {"mobs:watermob_clownfish_egg"},rarity = 16}, + {items = {"mobs:watermob_tropical_fish_egg"},rarity = 16}, + {items = {"mobs:watermob_jellyfish_egg"},rarity = 16}, + {items = {"mobs:watermob_shark_sm_egg"},rarity = 16}, + {items = {"mobs:watermob_shark_md_egg"},rarity = 16}, + {items = {"mobs:watermob_shark_lg_egg"},rarity = 16}, + {items = {"mobs:watermob_turtle_lg_egg"},rarity = 16}, + {items = {"mobs:watermob_turtle_sm_egg"},rarity = 16}, + {items = {"mobs:skymob_butterfly_egg"},rarity = 16}, + {items = {"mobs:skymob_gull_egg"},rarity = 16}, + {items = {"mobs:skymob_bird_sm_egg"},rarity = 16}, + {items = {"mobs:skymob_bird_lg_egg"},rarity = 16}, + {items = {"mobs:skymob_bat_egg"},rarity = 16}, + {items = {"tutorial:geschenk_dna"}}, + } + } }) minetest.register_node("tutorial:geschenk_legend",{ description = "Gift (legendary)", is_ground_content = true, tiles = {"tutorial_geschenk_legenden.png"}, groups = {snappy=1,choppy=2,oddly_breakable_by_hand=2,flammable=3}, - drop = {} + drop = { + max_items = 1, + items = { + {items = {"gems:emerald_gem 2"},rarity = 16}, + {items = {"gems:shadow_gem 2"},rarity = 8}, + {items = {"gems:pearl_gem 2"},rarity = 8}, + {items = {"gems:amethyst_gem 2"},rarity = 5.333}, + {items = {"gems:ruby_gem 2"},rarity = 4}, + {items = {"gems:sapphire_gem 2"},rarity = 4}, + {items = {"tutorial:geschenk_legend"}}, + } + } }) minetest.register_node("tutorial:geschenk_regnum",{ description = "Gift (regnum)", is_ground_content = true, tiles = {"tutorial_geschenk_regnum.png"}, groups = {snappy=1,choppy=2,oddly_breakable_by_hand=2,flammable=3}, - drop = {} + drop = { + max_items = 1, + items = { + {items = {"tutorial:regnum_pixel_gold 20"},rarity = 5}, + {items = {"tutorial:regnum_pixel_green 20"},rarity = 5}, + {items = {"tutorial:regnum_pixel_purple 55"},rarity = 5}, + {items = {"tutorial:regnum_pixel_red 185"},rarity = 5}, + {items = {"tutorial:regnum_pixel_blue 185"},rarity = 5}, + {items = {"tutorial:geschenk_regnum"}}, + } + } }) minetest.register_node("tutorial:geschenk_death_silber",{ description = "Deathgift (silver)", is_ground_content = true, tiles = {"tutorial_geschenk_death_silber.png"}, groups = {snappy=1,choppy=2,oddly_breakable_by_hand=2,flammable=3}, - drop = {} + drop = { + max_items = 1, + items = { + {items = {"default:mese_crystal"},rarity = 8.333}, + {items = {"tutorial:lightstone"},rarity = 8.333}, + {items = {"default:ice"},rarity = 8.333}, + {items = {"tutorial:regnum_part 2"},rarity = 50}, + {items = {"tutorial:geschenk_death_silber"}}, + } + } }) minetest.register_node("tutorial:geschenk_death_gold",{ description = "Deathgift (gold)", is_ground_content = true, tiles = {"tutorial_geschenk_death_gold.png"}, groups = {snappy=1,choppy=2,oddly_breakable_by_hand=2,flammable=3}, - drop = {} + drop = { + max_items = 1, + items = { + {items = {"default:mese_crystal 2"},rarity = 7.143}, + {items = {"tutorial:lightstone 2"},rarity = 7.143}, + {items = {"default:ice"},rarity = 7.143}, + {items = {"tutorial:regnum_part 3"},rarity = 50}, + {items = {"tutorial:geschenk_death_gold"}}, + } + } }) minetest.register_node("tutorial:geschenk_death_platin",{ description = "Deathgift (platinum)", is_ground_content = true, tiles = {"tutorial_geschenk_death_platin.png"}, groups = {snappy=1,choppy=2,oddly_breakable_by_hand=2,flammable=3}, - drop = {} + drop = { + max_items = 1, + items = { + {items = {"default:mese_crystal 3"},rarity = 6.25}, + {items = {"tutorial:lightstone 2"},rarity = 5.556}, + {items = {"default:ice"},rarity = 6.25}, + {items = {"tutorial:regnum_part 4"},rarity = 50}, + {items = {"tutorial:geschenk_death_platin"}}, + } + } }) minetest.register_node("tutorial:geschenk_death",{ description = "Deathgift", is_ground_content = true, tiles = {"tutorial_geschenk_death.png"}, groups = {snappy=1,choppy=2,oddly_breakable_by_hand=2,flammable=3}, - drop = {} + drop = { + max_items = 1, + items = { + {items = {"default:mese_crystal_fragment 4"},rarity = 10}, + {items = {"tutorial:lightstone"},rarity = 10}, + {items = {"default:ice"},rarity = 10}, + {items = {"tutorial:regnum_part"},rarity = 50}, + {items = {"tutorial:geschenk_death"}}, + } + } }) minetest.register_node("tutorial:stone_with_regnum", { description = "Regnum ore", @@ -121,14 +206,45 @@ minetest.register_node("tutorial:geschenk_wool2",{ is_ground_content = true, tiles = {"tutorial_geschenk_wool2.png"}, groups = {snappy=1,choppy=2,oddly_breakable_by_hand=2,flammable=3}, - drop = {}, + drop = { + max_items = 1, + items = { + {items = {"wool:yellow 3"},rarity = 15}, + {items = {"wool:white 3"},rarity = 15}, + {items = {"wool:violet 3"},rarity = 15}, + {items = {"wool:red 3"},rarity = 15}, + {items = {"wool:pink 3"},rarity = 15}, + {items = {"wool:orange 3"},rarity = 15}, + {items = {"wool:magenta 3"},rarity = 15}, + {items = {"wool:grey 3"},rarity = 15}, + {items = {"wool:green 3"},rarity = 15}, + {items = {"wool:dark_grey 3"},rarity = 15}, + {items = {"wool:dark_green 3"},rarity = 15}, + {items = {"wool:cyan 3"},rarity = 15}, + {items = {"wool:brown 3"},rarity = 15}, + {items = {"wool:blue 3"},rarity = 15}, + {items = {"wool:black 3"},rarity = 15}, + {items = {"tutorial:geschenk_wool2"}}, + } + } }) minetest.register_node("tutorial:geschenk_wool1",{ description = "Colored wool gift lv.1", is_ground_content = true, tiles = {"tutorial_geschenk_wool1.png"}, groups = {snappy=1,choppy=2,oddly_breakable_by_hand=2,flammable=3}, - drop = {}, + drop = { + max_items = 1, + items = { + {items = {"wool:yellow 2"},rarity = 6}, + {items = {"wool:white 2"},rarity = 6}, + {items = {"wool:violet 2"},rarity = 6}, + {items = {"wool:red 2"},rarity = 6}, + {items = {"wool:orange 2"},rarity = 6}, + {items = {"wool:blue 2"},rarity = 6}, + {items = {"tutorial:geschenk_wool1"}}, + } + } }) minetest.register_node("tutorial:geschenk_wool",{ description = "Wool gift", @@ -142,21 +258,56 @@ minetest.register_node("tutorial:geschenk_gold",{ is_ground_content = true, tiles = {"tutorial_geschenk_gold.png"}, groups = {snappy=1,choppy=2,oddly_breakable_by_hand=2,flammable=3}, - drop = {}, + drop = { + max_items = 1, + items = { + {items = {"mobs:dirt_monster_egg"},rarity = 17}, + {items = {"mobs:stone_monster_egg"},rarity = 17}, + {items = {"mobs:sand_monster_egg"},rarity = 17}, + {items = {"mobs:desert_sand_monster_egg"},rarity = 17}, + {items = {"mobs:snow_monster_egg"},rarity = 17}, + {items = {"mobs:desert_stone_monster_egg"},rarity = 17}, + {items = {"mobs:ice_monster_egg"},rarity = 17}, + {items = {"mobs:grass_monster_egg"},rarity = 17}, + {items = {"mobs:rainforest_litter_monster_egg"},rarity = 17}, + {items = {"mobs:dry_grass_monster_egg"},rarity = 17}, + {items = {"mobs:silver_sand_monster_egg"},rarity = 17}, + {items = {"default:mese_crystal"},rarity = 2.833}, + {items = {"tutorial:geschenk_gold"}}, + } + } }) minetest.register_node("tutorial:geschenk_platin",{ description = "Gift (platinum)", is_ground_content = true, tiles = {"tutorial_geschenk_platin.png"}, groups = {snappy=1,choppy=2,oddly_breakable_by_hand=2,flammable=3}, - drop = {}, + drop = { + max_items = 1, + items = { + {items = {"default:mese_crystal 2"},rarity = 2.5}, + {items = {"tutorial:geschenk_wool"},rarity = 3.333}, + {items = {"tutorial:geschenk_wool1"},rarity = 5}, + {items = {"tutorial:geschenk_wool2"},rarity = 10}, + {items = {"tutorial:geschenk_platin"}}, + } + } }) minetest.register_node("tutorial:geschenk_silber",{ description = "Gift (silver)", is_ground_content = true, tiles = {"tutorial_geschenk_silber.png"}, groups = {snappy=1,choppy=2,oddly_breakable_by_hand=2,flammable=3}, - drop = {}, + drop = { + max_items = 1, + items = { + {items = {"tutorial:lightstone 2"},rarity = 2.222}, + {items = {"default:mese_crystal_fragment 4"},rarity = 2.5}, + {items = {"tutorial:arena_block"},rarity = 10}, + {items = {"tutorial:arena_glass"},rarity = 20}, + {items = {"tutorial:geschenk_silber"}}, + } + } }) minetest.register_node("tutorial:stone_with_titan", { description = "Titanium ore", @@ -238,7 +389,16 @@ minetest.register_node("tutorial:geschenk",{ is_ground_content = true, tiles = {"tutorial_geschenk.png"}, groups = {snappy=1,choppy=2,oddly_breakable_by_hand=2,flammable=3}, - drop = {}, + drop = { + max_items = 1, + items = { + {items = {"tutorial:lightstone"},rarity = 3.22}, + {items = {"default:mese_crystal_fragment 2"},rarity = 3.625}, + {items = {"default:ice"},rarity = 4.833}, + {items = {"tutorial:dunklematerie4"},rarity = 9.667}, + {items = {"tutorial:geschenk"}}, + } + } }) minetest.register_node("tutorial:stone_with_admin", { description = "Admin ore", diff --git a/mods/tutorial/other.lua b/mods/tutorial/other.lua index ee521f8..702165f 100644 --- a/mods/tutorial/other.lua +++ b/mods/tutorial/other.lua @@ -316,7 +316,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) if a19 == 1 then d1 = d1+1 end - if a18 == 1 then + if a20 == 1 then d1 = d1+1 end if a21 == 1 then @@ -654,8 +654,8 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) end end) -local rg18 = {} -rg18.get_formspec = function(player, pos) +local rg13 = {} +rg13.get_formspec = function(player, pos) if player == nil then return end @@ -668,34 +668,35 @@ rg18.get_formspec = function(player, pos) .."label[0,1;II. 4. Ores]" .."label[0,1.3;You can find ores in the depth.]" .."label[0,1.6;Where to find ores:]" - .."label[0,1.9;Silver: y < -2]" - .."label[0,2.2;Mithril: y < -512]" - .."label[0,2.5;Tin: y < 8]" - .."label[0,2.8;Coal: y < 0]" - .."label[0,3.1;Iron: y < 2]" - .."label[0,3.4;Mese: y < -64]" - .."label[0,3.7;Gold: y < -64]" - .."label[0,4.0;Diamond: y < -128]" - .."label[0,4.3;Copper: y < ?]" - .."label[0,4.6;Black/White: y < 2]" - .."label[0,4.9;Uranium: y < -128]" - .."label[0,5.2;Admin: y < -500]" - .."label[0,5.5;Titan: y < -400]" - .."label[0,5.8;Rot/Blau: y < -100]" - .."label[0,6.1;Regnum: y < -600]" - .."label[0,6.4;Technic Uranium: y < -80, y > -300]" - .."label[0,6.7;Cromium: y < -100]" - .."label[0,7.0;Zinc: y < 2]" - .."label[0,7.3;Ruby/Sapphire: y < -300]" - .."label[0,7.6;Amethyst: y < -600]" - .."label[0,7.9;Shadow/Pearl: y < -900]" - .."label[0,8.2;Emerald: y < -1200]" - .."button[2,10; 2,0.5;rg17;<]" - .."button[4,10; 2,0.5;rg19;>]" + .."label[0,1.9;(default) Coal: y < 65]" + .."label[0,2.2;(default) Iron: y < 1]" + .."label[0,2.5;(default) Copper: y < -15]" + .."label[0,2.8;(default) Tin: y < -31]" + .."label[0,3.1;(default) Gold: y < -63]" + .."label[0,3.4;(default) Mese: y < -63]" + .."label[0,3.7;(default) Diamond: y < -127]" + .."label[0,4.0;(moreores) Tin: y < 9]" + .."label[0,4.3;(moreores) Silver: y < -1]" + .."label[0,4.6;(moreores) Mithril: y < -511]" + .."label[0,4.9;(technic) Zinc: y < 3]" + .."label[0,5.2;(technic) Cromium: y < -99]" + .."label[0,5.5;(technic) Uranium: -301 < y < -79]" + .."label[0,5.8;(regnum) Black/White: y < 2 (can be digged with battleaxe-lv.21)]" + .."label[0,6.1;(regnum) Uranium: y < -128 (can be digged with battleaxe-lv.46)]" + .."label[0,6.4;(regnum) Ruby/Sapphire: y < -300 (can be digged with battleaxe-lv.52)]" + .."label[0,6.7;(regnum) Amethyst: y < -600 (can be digged with battleaxe-lv.62)]" + .."label[0,7.0;(regnum) Shadow/Pearl: y < -900 (can be digged with battleaxe-lv.64)]" + .."label[0,7.3;(regnum) Emerald: y < -1200 (can be digged with battleaxe-lv.71)]" + .."label[0,7.6;(regnum) Admin: y < -500 (can be digged with battleaxe-lv.74)]" + .."label[0,7.9;(regnum) Regnum: y < -600 (can be digged with battleaxe-lv.74)]" + .."label[0,8.2;(regnum) Titan: y < -400 (can be digged with battleaxe-lv.110 and titanremover)]" + .."label[0,8.5;(regnum) Rot/Blau: y < -100 (can be digged with battleaxe-lv.122 and purplebattleaxe)]" + .."button[2,10; 2,0.5;rg12;<]" + .."button[4,10; 2,0.5;rg14;>]" return formspec end -local rg19 = {} -rg19.get_formspec = function(player, pos) +local rg14 = {} +rg14.get_formspec = function(player, pos) if player == nil then return end @@ -706,8 +707,8 @@ rg19.get_formspec = function(player, pos) .."listcolors[#00000069;#5A5A5A;#141318;#30434C;#FFF]" .."bgcolor[#080808BB;true]" .."label[0,1;II. 5. Armor, Battleaxes & Guns]" - .."label[0,1.3;There are over 120 differend battleaxes and armors]" - .."label[0,1.6;Here you can see witch kind of armor/battleaxe/gun you have to craft:]" + .."label[0,1.3;There are over 120 differend battleaxes, armors and guns]" + .."label[0,1.6;Here you can see witch kind of armor, battleaxe and gun you have to craft:]" .."label[0,1.9;(starter)]" .."label[0,2.2;mega lv.1-20]" .."label[0,2.5;cloud lv.1-20]" @@ -723,18 +724,23 @@ rg19.get_formspec = function(player, pos) .."label[0,5.5;legendary lv.1-6]" .."label[0,5.8;superlegendary]" .."label[0,6.1;regnum]" - .."label[0,6.4;There are differend modes for the superlegendary armor/battleaxe/gun]" - .."label[0,6.7;and also for the regnum:]" - .."label[0,7.0;With the armor you can jump higher and run faster,]" - .."label[0,7.3;with the battleaxe you can dig water/lava]" - .."label[0,7.3;and the gun will add thunder]" - .."label[0,7.6;The legendary battleaxe (or higher) will double some ores if you dig them.]" - .."button[2,10; 2,0.5;rg18;<]" - .."button[4,10; 2,0.5;rg20;>]" + .."label[0,6.4;The legendary battleaxe (or higher) will double some ores if you dig them.]" + .."label[0,6.7;There are differend modes for some battleaxes, armors and guns]" + .."label[0,7.0;With battleaxe Mode 2 you can dig water and lava]" + .."label[0,7.3;With battleaxe Mode 3 you can only hunt monster]" + .."label[0,7.6;With armor Mode 2 you can run faster]" + .."label[0,7.9;With armor Mode 3 you can jump higher]" + .."label[0,8.2;With armor Mode 4 you can run faster and jump higher]" + .."label[0,8.5;With gun Mode 2 you can only make damage to monsters]" + .."label[0,8.8;With gun Mode 3 you will also add thunder]" + .."label[0,9.1;For changing the mode of a tool (also Wallplacer and mining Drill),]" + .."label[0,9.4;you have to press the right mouse and sneak (don't point at a node)]" + .."button[2,10; 2,0.5;rg13;<]" + .."button[4,10; 2,0.5;rg15;>]" return formspec end -local rg20 = {} -rg20.get_formspec = function(player, pos) +local rg15 = {} +rg15.get_formspec = function(player, pos) if player == nil then return end @@ -745,184 +751,16 @@ rg20.get_formspec = function(player, pos) .."listcolors[#00000069;#5A5A5A;#141318;#30434C;#FFF]" .."bgcolor[#080808BB;true]" .."label[0,1;II. 6. Chat commands]" - .."label[0,1.3;/admin for all admin tools]" - .."label[0,1.6;/regnum for all regnum things]" + .."label[0,1.3;/admin for all admin things (give priv needed)]" + .."label[0,1.6;/regnum for all regnum things (give priv needed)]" .."label[0,1.9;/rank to see your rank]" - .."button[2,10; 2,0.5;rg19;<]" + .."button[2,10; 2,0.5;rg14;<]" + .."button[4,10; 2,0.5;rg16;>]" return formspec end -minetest.register_on_dignode(function(pos, node, player) - if player == nil then - return - end - local name = player:get_player_name() - local inv = player:get_inventory() - if node.name == "tutorial:geschenk_dragon" then - local x = math.random(0,15) - if x == 8 then - inv:set_size("dgon", 1) - local dgon = inv:get_stack("dgon", 1):get_count() - if dgon == 0 then - inv:add_item("main", "tutorial:dragon_schluessel") - inv:add_item("dgon", "default:dirt") - end - else - inv:add_item("main", "default:coal_lump 20") - end - end - if node.name == "tutorial:geschenk_tortoise" then - local x = math.random(0,15) - if x == 8 then - inv:set_size("ttoise", 1) - local dgon = inv:get_stack("ttoise", 1):get_count() - if dgon == 0 then - inv:add_item("main", "tutorial:tortoise_schluessel") - inv:add_item("ttoise", "default:dirt") - end - else - inv:add_item("main", "default:coal_lump 20") - end - end - if node.name == "tutorial:geschenk_gem" then - local x = math.random(0,8) - if x == 2 then - inv:add_item("main", "tutorial:gem_fragment") - elseif x == 5 then - inv:add_item("main", "tutorial:geschenk_legend") - elseif x == 4 then - inv:add_item("main", "tutorial:geschenk_legend") - end - end - if node.name == "tutorial:geschenk_gem2" then - local x = math.random(0,8) - if x == 2 then - inv:add_item("main", "tutorial:gem_fragment2") - elseif x == 5 then - inv:add_item("main", "tutorial:geschenk_legend") - elseif x == 4 then - inv:add_item("main", "tutorial:geschenk_legend") - end - end - if node.name == "tutorial:geschenk" then - local x = math.random(1, 29) - if x < 10 then - inv:add_item("main", "tutorial:lightstone 1") - elseif x < 18 then - inv:add_item("main", "default:mese_crystal_fragment 2") - elseif x < 24 then - inv:add_item("main", "default:ice") - elseif x < 27 then - inv:add_item("main", "tutorial:dunklematerie4") - else - inv:add_item("main", "tutorial:geschenk") - end - end - if node.name == "tutorial:geschenk_silber" then - local x = math.random(1, 20) - if x < 10 then - inv:add_item("main", "tutorial:lightstone 2") - elseif x < 18 then - inv:add_item("main", "default:mese_crystal_fragment 4") - elseif x < 20 then - inv:add_item("main", "tutorial:arena_block") - else - inv:add_item("main", "tutorial:arena_glass") - end - end - if node.name == "tutorial:geschenk_gold" then - local x = math.random(1, 17) - if x < 2 then - inv:add_item("main", "mobs:dirt_monster_egg") - elseif x < 3 then - inv:add_item("main", "mobs:stone_monster_egg") - elseif x < 4 then - inv:add_item("main", "mobs:sand_monster_egg") - elseif x < 5 then - inv:add_item("main", "mobs:desert_sand_monster_egg") - elseif x < 6 then - inv:add_item("main", "mobs:snow_monster_egg") - elseif x < 7 then - inv:add_item("main", "mobs:desert_stone_monster_egg") - elseif x < 8 then - inv:add_item("main", "mobs:ice_monster_egg") - elseif x < 9 then - inv:add_item("main", "mobs:grass_monster_egg") - elseif x < 10 then - inv:add_item("main", "mobs:rainforest_litter_monster_egg") - elseif x < 11 then - inv:add_item("main", "mobs:dry_grass_monster_egg") - elseif x < 12 then - inv:add_item("main", "mobs:silver_sand_monster_egg") - else - inv:add_item("main", "default:mese_crystal") - end - end - if node.name == "tutorial:geschenk_platin" then - local x = math.random(1, 10) - if x < 5 then - inv:add_item("main", "default:mese_crystal 2") - elseif x < 8 then - inv:add_item("main", "tutorial:geschenk_wool") - elseif x < 10 then - inv:add_item("main", "tutorial:geschenk_wool1") - else - inv:add_item("main", "tutorial:geschenk_wool2") - end - end - if node.name == "tutorial:geschenk_wool1" then - local x = math.random(1, 6) - if x == 1 then - inv:add_item("main", "wool:yellow 2") - elseif x == 2 then - inv:add_item("main", "wool:white 2") - elseif x == 3 then - inv:add_item("main", "wool:violet 2") - elseif x == 4 then - inv:add_item("main", "wool:red 2") - elseif x == 5 then - inv:add_item("main", "wool:orange 2") - else - inv:add_item("main", "wool:blue 2") - end - end - if node.name == "tutorial:geschenk_wool2" then - local x = math.random(1, 15) - if x == 1 then - inv:add_item("main", "wool:yellow 3") - elseif x == 2 then - inv:add_item("main", "wool:white 3") - elseif x == 3 then - inv:add_item("main", "wool:violet 3") - elseif x == 4 then - inv:add_item("main", "wool:red 3") - elseif x == 5 then - inv:add_item("main", "wool:pink 3") - elseif x == 6 then - inv:add_item("main", "wool:orange 3") - elseif x == 7 then - inv:add_item("main", "wool:magenta 3") - elseif x == 8 then - inv:add_item("main", "wool:grey 3") - elseif x == 9 then - inv:add_item("main", "wool:green 3") - elseif x == 10 then - inv:add_item("main", "wool:dark_grey 3") - elseif x == 11 then - inv:add_item("main", "wool:dark_green 3") - elseif x == 12 then - inv:add_item("main", "wool:cyan 3") - elseif x == 13 then - inv:add_item("main", "wool:brown 3") - elseif x == 14 then - inv:add_item("main", "wool:blue 3") - else - inv:add_item("main", "wool:black 3") - end - end -end) -local rg14 = {} -rg14.get_formspec = function(player, pos) - if player == nil then +local rg16 = {} +rg16.get_formspec = function(player, pos) + if player == nil then return end formspec = "size[9,10.3]" @@ -931,22 +769,27 @@ rg14.get_formspec = function(player, pos) .."background[9,10.3;1,1;gui_formbg.png;true]" .."listcolors[#00000069;#5A5A5A;#141318;#30434C;#FFF]" .."bgcolor[#080808BB;true]" - .."label[0,1;I. 12. Gems]" - .."label[0,1.3;Use the gem inventory to get home and fast privs.]" - .."label[0,1.6;How to use Gems:]" - .."label[0,1.9;1. Craft a dragon in the DNA craft.]" - .."label[0,2.2;2. Craft a dragon crystal.]" - .."label[0,2.5;3. Place the drgagon crystal in the dragon inventory.]" - .."label[0,2.8;4. Collect gifts (gem).]" - .."label[0,3.1;5. Get gem fragents from then gift (gem).]" - .."label[0,3.4;6. Craft in the gem craft a magic gem.]" - .."label[0,3.7;7. Place the magic gems in the right order in the gems inventory.]" - .."button[2,10; 2,0.5;rg13;<]" - .."button[4,10; 2,0.5;rg21;>]" + .."label[0,1;II. 7. Keys]" + .."label[0,1.3;Bagkey: can be crafted with grey coins]" + .."label[0,1.6;Armorkey: can be crafted with a blue and a red ore]" + .."label[0,1.9;Levelkey: can be got as a reward for green level 50]" + .."label[0,2.2;Craftkey: can be crafted with purple coins]" + .."label[0,2.5;Legendkey: can be got as a reward for grey level 100]" + .."label[0,2.8;Regnumkey: can be crafted with a regnum ore]" + .."label[0,3.1;Pixeled Regnumkey: can be crafted with a pixeled regnum ore (make it in the regnum craft)]" + .."label[0,3.4;Dragonkey: can be got from a gift (dragon)]" + .."label[0,3.7;Foxkey: can be got from the fox after some time]" + .."label[0,4.0;Tortoisekey: can be got from a gift (tortoise)]" + .."label[0,4.3;Knightkey: can be got as a reward for all artifacts]" + .."label[0,4.6;Crystalkey: can be got as a reward for all medallions]" + .."label[0,4.9;Goldenkey: can be got as a reward for yellow level 100]" + .."label[0,5.2;Cookingkey: can be crafted with cyan coins]" + .."label[0,5.5;Protectionkey: can be got as a reward for all trophys]" + .."button[2,10; 2,0.5;rg15;<]" return formspec end -local rg15 = {} -rg15.get_formspec = function(player, pos) +local rg10 = {} +rg10.get_formspec = function(player, pos) if player == nil then return end @@ -974,12 +817,12 @@ rg15.get_formspec = function(player, pos) .."label[0,5.5;Colored wool gift lv.2: every wool]" .."label[0,5.8;Gift (dragon): coal lump, dragon key]" .."label[0,6.1;Gift (gem): gift (legendary), gem fragment]" - .."button[2,10; 2,0.5;rg25;<]" - .."button[4,10; 2,0.5;rg16;>]" + .."button[2,10; 2,0.5;rg9;<]" + .."button[4,10; 2,0.5;rg11;>]" return formspec end -local rg16 = {} -rg16.get_formspec = function(player, pos) +local rg11 = {} +rg11.get_formspec = function(player, pos) if player == nil then return end @@ -995,18 +838,18 @@ rg16.get_formspec = function(player, pos) .."label[0,1.9;You can get water and sky animals from the dna gift.]" .."label[0,2.2;There are turtles, sharks, gulls and many other.]" .."label[0,2.5;If you use the DNA craft you can get pets.]" - .."label[0,2.8;The dog and the cat will kill monsters and collect the wrapping paper]" + .."label[0,2.8;The dog and the cat will kill monsters and collect the wrapping paper and DNA strings]" .."label[0,3.1;The sheep will produce wool.]" .."label[0,3.4;The dagon will produce a dragon gift or a gem gift if you have a regnum crystal.]" .."label[0,3.7;The fox will produce a fox key and treasures.]" .."label[0,4.0;The tortoise will produce a tortoise gift or a gem gift if you have a regnum crystal.]" - .."label[0,4.3;You can chage the color of the pets and they can folow you.]" - .."button[2,10; 2,0.5;rg15;<]" - .."button[4,10; 2,0.5;rg17;>]" + .."label[0,4.3;You can change the color of the pets and they can follow you.]" + .."button[2,10; 2,0.5;rg10;<]" + .."button[4,10; 2,0.5;rg12;>]" return formspec end -local rg17 = {} -rg17.get_formspec = function(player, pos) +local rg12 = {} +rg12.get_formspec = function(player, pos) if player == nil then return end @@ -1036,81 +879,12 @@ rg17.get_formspec = function(player, pos) .."label[0,6.1;Look in the xp guide for your xp and how much xp you need.]" .."label[0,6.4;If you reach a new level you will get a reward]" .."label[0,6.7;Look in Xp items for the reward]" - .."button[2,10; 2,0.5;rg16;<]" - .."button[4,10; 2,0.5;rg18;>]" - return formspec -end -local rg10 = {} -rg10.get_formspec = function(player, pos) - if player == nil then - return - end - formspec = "size[9,10.3]" - .."button[0,0;2,0.5;inven;Back]" - .."button[2,0;2,0.5;main;Main]" - .."background[9,10.3;1,1;gui_formbg.png;true]" - .."listcolors[#00000069;#5A5A5A;#141318;#30434C;#FFF]" - .."bgcolor[#080808BB;true]" - .."label[0,1;I. 8. Achievements]" - .."label[0,1.3;Here you can see your achievement]" - .."label[0,1.6;If you have all 50 achievements,]" - .."label[0,1.9;you will have all Regnum things and you have completed the Regnum Game]" - .."label[0,2.2;If you have 25 or 50 achivements you will get a reward]" - .."label[0,2.5;There is also one spezial achievment.]" - .."label[0,2.8;You will get it for one year Regnum.]" - .."label[0,3.1;How to use Achievements:]" - .."label[0,3.4;1. Craft the needed items]" - .."label[0,3.7;2. Place them at the right place in the inventory]" - .."label[0,4.0;3. Get 25 or 50 achievements]" - .."label[0,4.3;4. Presse 'reward']" - .."label[0,4.6;5. Presse also 'spezial']" - .."button[2,10; 2,0.5;rg9;<]" - .."button[4,10; 2,0.5;rg11;>]" - return formspec -end -local rg11 = {} -rg11.get_formspec = function(player, pos) - if player == nil then - return - end - formspec = "size[9,10.3]" - .."button[0,0;2,0.5;inven;Back]" - .."button[2,0;2,0.5;main;Main]" - .."background[9,10.3;1,1;gui_formbg.png;true]" - .."listcolors[#00000069;#5A5A5A;#141318;#30434C;#FFF]" - .."bgcolor[#080808BB;true]" - .."label[0,1;I. 9. Regnum Guide]" - .."label[0,1.3;You can read something about the subgame]" - .."label[0,1.6;How to use Regnum Guide:]" - .."label[0,1.9;1. Read]" - .."button[2,10; 2,0.5;rg10;<]" - .."button[4,10; 2,0.5;rg12;>]" - return formspec -end -local rg12 = {} -rg12.get_formspec = function(player, pos) - if player == nil then - return - end - formspec = "size[9,10.3]" - .."button[0,0;2,0.5;inven;Back]" - .."button[2,0;2,0.5;main;Main]" - .."background[9,10.3;1,1;gui_formbg.png;true]" - .."listcolors[#00000069;#5A5A5A;#141318;#30434C;#FFF]" - .."bgcolor[#080808BB;true]" - .."label[0,1;I. 10. Awards]" - .."label[0,1.3;Here you can see your awards]" - .."label[0,1.6;If you have all awards, you will get the 'all awards' achievement.]" - .."label[0,1.9;How to use Awards:]" - .."label[0,2.2;1. Dig for the ores]" - .."label[0,2.5;2. For the '???' awards you have to die next to a block]" - .."label[0,2.8;3. Find out which block]" .."button[2,10; 2,0.5;rg11;<]" .."button[4,10; 2,0.5;rg13;>]" return formspec end -local rg13 = {} -rg13.get_formspec = function(player, pos) +local rg7 = {} +rg7.get_formspec = function(player, pos) if player == nil then return end @@ -1120,75 +894,19 @@ rg13.get_formspec = function(player, pos) .."background[9,10.3;1,1;gui_formbg.png;true]" .."listcolors[#00000069;#5A5A5A;#141318;#30434C;#FFF]" .."bgcolor[#080808BB;true]" - .."label[0,1;I. 11. Xp items]" - .."label[0,1.3;Here you can get your rewards if you reach a new level.]" - .."label[0,1.6;How to use Xp items:]" - .."label[0,1.9;1. Reach a new level]" - .."label[0,2.2;2. Take coins/max level blocks/keys/battleaxes/xp blocks from the 1st page]" - .."label[0,2.5;3. Take green level blocks from the 2nd page]" - .."label[0,2.8;4. Take red/blue level blocks from the 3rd page]" - .."label[0,3.1;5. Take grey level blocks from the 4th page]" - .."label[0,3.4;6. Take yellow level blocks from the 5th page]" - .."label[0,3.7;7. Take cyan level blocks from the 6th page]" - .."button[2,10; 2,0.5;rg12;<]" - .."button[4,10; 2,0.5;rg14;>]" - return formspec -end -local rg8 = {} -rg8.get_formspec = function(player, pos) - if player == nil then - return - end - formspec = "size[9,10.3]" - .."button[0,0;2,0.5;inven;Back]" - .."button[2,0;2,0.5;main;Main]" - .."background[9,10.3;1,1;gui_formbg.png;true]" - .."listcolors[#00000069;#5A5A5A;#141318;#30434C;#FFF]" - .."bgcolor[#080808BB;true]" - .."label[0,1;I. 6. Craft Guide]" - .."label[0,1.3;Here you can see how to craft items]" - .."label[0,1.6;Click on one item to see the crafting]" - .."label[0,1.9;You can also see 4x4 and 5x5 craftings,]" - .."label[0,2.2;You can see the craftings for battleaxes/armor/gun]" - .."label[0,2.5;in the Regnum Craft Guide.]" - .."label[0,2.8;How to use Craft guide:]" - .."label[0,3.1;1. Click on one item and you see the crafting above]" - .."label[0,3.4;2. Click on the arrows below to switch to an other page]" - .."label[0,3.7;3. Click on the arrows below 'main' to see the last]" - .."label[0,4.0; crafting you use]" - .."label[0,4.3;4. Click on the arrows above and below the item to see]" - .."label[0,4.6; differend craftings for the same things]" - .."label[0,4.9;5. Click on the 'Regnum' for armor/battleaxe/gun crafts]" - .."button[2,10; 2,0.5;rg7;<]" - .."button[4,10; 2,0.5;rg9;>]" - return formspec -end -local rg9 = {} -rg9.get_formspec = function(player, pos) - if player == nil then - return - end - formspec = "size[9,10.3]" - .."button[0,0;2,0.5;inven;Back]" - .."button[2,0;2,0.5;main;Main]" - .."background[9,10.3;1,1;gui_formbg.png;true]" - .."listcolors[#00000069;#5A5A5A;#141318;#30434C;#FFF]" - .."bgcolor[#080808BB;true]" - .."label[0,1;I. 7. Crystals]" - .."label[0,1.3;Here you can get legendary fire balls]" - .."label[0,1.6;If you dig a legendary gift you can get a legendary crystal]" - .."label[0,1.9;With every new cristal you get, get can get better fire balls]" - .."label[0,2.2;After some time you will get the fire ball]" - .."label[0,2.5;If you have a crystalkey,the time will be halved]" - .."label[0,2.8;How to use Cristals:]" - .."label[0,3.1;1. Craft legendary gifts and dig them]" - .."label[0,3.4;2. If you have a cristal,click on a]" - .."label[0,3.7; ball damage, thunder damage and thunder length level]" - .."label[0,4.0;3. Click on create]" - .."label[0,4.3;4. Get the crystalkey]" - .."label[0,4.6;5. wait (seconds above 'crate') and you will get a fire ball]" - .."button[2,10; 2,0.5;rg8;<]" - .."button[4,10; 2,0.5;rg10;>]" + .."label[0,1;I. 5. Quests]" + .."label[0.0,1.3;a) Awards]" + .."label[0.2,1.6;Here you can see your awards.]" + .."label[0.2,1.9;Dig some ores to get an award.]" + .."label[0.2,2.2;If you have all awards, you will get the 'all awards' achievement.]" + .."label[0.0,2.5;b) Achievements]" + .."label[0.2,2.8;Here you can see your achievement]" + .."label[0.2,3.1;If you have all 50 achievements,]" + .."label[0.2,3.4;you will have all Regnum things and you have completed the Regnum Game]" + .."label[0.2,3.7;If you have 25 or 50 achivements you will get a reward]" + .."label[0.2,4.0;You will get spezial achievments for every aniversary.]" + .."button[2,10; 2,0.5;rg6;<]" + .."button[4,10; 2,0.5;rg8;>]" return formspec end local xpi0 = {} @@ -1211,6 +929,7 @@ xpi0.get_formspec = function(player, pos) return 0 end, }) + xpi01_inv:set_size("xpi01", 15) player_inv:set_size("xpi01", 15) xpi01_inv:set_size("xpi02", 15) @@ -1428,6 +1147,47 @@ xpi3.get_formspec = function(player, pos) .."button[9,12;2,0.5;xpi4;>]" return formspec end +local rg4 = {} +rg4.get_formspec = function(player, pos) + if player == nil then + return + end + formspec = "size[9,10.3]" + .."button[0,0;2,0.5;inven;Back]" + .."button[2,0;2,0.5;main;Main]" + .."background[9,10.3;1,1;gui_formbg.png;true]" + .."listcolors[#00000069;#5A5A5A;#141318;#30434C;#FFF]" + .."bgcolor[#080808BB;true]" + .."label[0,1;I. 2. Crafting]" + .."label[0,1.3;There are 11 differend crafts:]" + .."label[0,1.6;The '4x4 craft' and 5x5 to craft in a 4x4 and 5x5 field]" + .."label[0,1.9;Look in the Craft Guide which item you can craft in 4x4 and 5x5]" + .."label[0,2.2;The Regnum craft to craft a pixeled regnum]" + .."label[0,2.5;You will need regnum pixels. (You can get them from Regnum gifts)]" + .."label[0,2.8;The DNA craft to get mobs and ??? monster spawn-egg]" + .."label[0,3.1;You will need dna strings for pets (You can get them from monsters) ]" + .."label[0,3.4;and big dna for ???-monster spawn-egg. (You can craft them in the 5x5 craft)]" + .."label[0,3.7;If you press 'Mob Position' you can see the positions of your pets.]" + .."label[0,4.0;The Gem craft to get magic gems]" + .."label[0,4.3;You will need gem fragments and uranium ingots]" + .."label[0,4.6;The Cooking craft, works like furnaces but with (regnum) uranium (every level) as fuel]" + .."label[0,4.9;If you have the Cookingkey you will get more fuel.]" + .."label[0,5.2;The Mine craft to level your mining laser/drill up.]" + .."label[0,5.5;You will need the mining laser/drill and green coins.]" + .."label[0,5.8;The Medallion craft to get medallions]" + .."label[0,6.1;You will need Medallion pieces.(You will get them if you run around)]" + .."label[0,6.4;The Crystal craft to get crystalbottles]" + .."label[0,6.7;You have to wait 500s to get two crystallbottles.]" + .."label[0,7.0;You will get one bottle more for each crystal you have]" + .."label[0,7.3;and if you have a pixeled regnum key you only have to wait 250s.]" + .."label[0,7.6;The Trophy craft to get trophys]" + .."label[0,7.9;You will need Tears. (You can get them from monsters spawned by the ??? monster spawn-egg)]" + .."label[0,8.2;The Reverse craft to get your items back, if you craft the wrong one.]" + .."label[0,8.5;You can only use some items.]" + .."button[2,10; 2,0.5;rg3;<]" + .."button[4,10; 2,0.5;rg5;>]" + return formspec +end local rg6 = {} rg6.get_formspec = function(player, pos) if player == nil then @@ -1439,41 +1199,27 @@ rg6.get_formspec = function(player, pos) .."background[9,10.3;1,1;gui_formbg.png;true]" .."listcolors[#00000069;#5A5A5A;#141318;#30434C;#FFF]" .."bgcolor[#080808BB;true]" - .."label[0,1;I. 4. Crafting]" - .."label[0,1.3;There are 10 differend crafts:]" - .."label[0,1.6;The '4x4 craft' to craft in a 4x4 field]" - .."label[0,1.9;The '5x5 craft' to craft in a 5x5 field]" - .."label[0,2.2;The Regnum craft to craft a pixeled regnum]" - .."label[0,2.5;The DNA craft to get mobs]" - .."label[0,2.8;The Gem craft to get magic gems]" - .."label[0,3.1;The Mine craft to level you mining laser/drill up.]" - .."label[0,3.4;The Cooking craft, works like furnaces but without fuel]" - .."label[0,3.7;The Medallion craft to get medallions]" - .."label[0,4.0;The Crystal craft to get crystalbottles]" - .."label[0,4.3;The Trophy craft to get trophys]" - .."label[0,4.6;Look in the Craft Guide which item you can craft in 4x4 and 5x5]" - .."label[0,4.9;For Regnum craft you need regnum pixel.You can get them from Regnum gifts.]" - .."label[0,5.2;For DNA craft you need dna strings.You can get them from monsters.]" - .."label[0,5.5;You will get an animal spawn-egg if this animal has 100%.]" - .."label[0,5.8;For Gem craft you need gem fragments and uranium ingots]" - .."label[0,6.1;For Cooking use uranium to get fuel]" - .."label[0,6.4;For Mine craft you need the mining laser/drill and green coins]" - .."label[0,6.7;to level you mining laser/drill up.]" - .."label[0,7.0;For Medallion craft you need Medallions.You will get them if you run around.]" - .."label[0,7.3;For Crystal craft you have to wait.]" - .."label[0,7.6;For each crystal you have, the crafting will take 200s less.]" - .."label[0,7.9;For Trophy craft you need Tears.You can get them from monsters in the same color.]" - .."label[0,8.2;How to use Crafting:]" - .."label[0,8.5;1. For 4x4, 5x5, Regnum, Gem, Medallion craft and Cooking you need a key]" - .."label[0,8.8;2. Craft the key and put the needed items in the fields]" - .."label[0,9.1;3. Press 'craft/use/build DNA']" + .."label[0,1;I. 4. Spezial]" + .."label[0.0,1.3;a) Crystals]" + .."label[0.2,1.6;Here you can get legendary fire balls]" + .."label[0.2,1.9;If you dig a legendary gift you can get a legendary crystal]" + .."label[0.2,2.2;With every new cristal you get, get can get better fire balls]" + .."label[0.2,2.5;After some time you will get the fire ball]" + .."label[0.2,2.8;If you have a crystalkey,the time will be halved]" + .."label[0.0,3.1;b) Xp items]" + .."label[0.2,3.4;Here you can get your rewards if you reach a new level.]" + .."label[0.2,3.7;You will also get a block for every level.]" + .."label[0.0,4.0;c) Gems]" + .."label[0.2,4.3;You have to craft some magic gems in the gem craft.]" + .."label[0.2,4.6;If you have 5, you will get the home priv.]" + .."label[0.2,4.9;If you have 10, you will get the fast priv.]" .."button[2,10; 2,0.5;rg5;<]" .."button[4,10; 2,0.5;rg7;>]" return formspec end -local rg7 = {} -rg7.get_formspec = function(player, pos) - if player == nil then +local rg8 = {} +rg8.get_formspec = function(player, pos) + if player == nil then return end formspec = "size[9,10.3]" @@ -1482,19 +1228,40 @@ rg7.get_formspec = function(player, pos) .."background[9,10.3;1,1;gui_formbg.png;true]" .."listcolors[#00000069;#5A5A5A;#141318;#30434C;#FFF]" .."bgcolor[#080808BB;true]" - .."label[0,1;I. 5. Skins]" - .."label[0,1.3;Here you can change your skin]" - .."label[0,1.6;Click on one skin to change your skin]" - .."label[0,1.9;If you have the pixeled Regnum key you can use the see-through skin]" - .."label[0,2.2;If you have the knight Regnum key you can use the knight skins]" - .."label[0,2.5;How to use Skins:]" - .."label[0,2.8;1. Click on one skin]" - .."label[0,3.1;2. Craft the Pixeled Regnum key]" - .."label[0,3.4;3. Press 'see-through skin']" - .."label[0,3.7;4. Craft the Knight key]" - .."label[0,4.0;5. Press 'knight']" - .."button[2,10; 2,0.5;rg6;<]" - .."button[4,10; 2,0.5;rg8;>]" + .."label[0,1;I. 6. Color items]" + .."label[0.0,1.3;a) Artifacts]" + .."label[0.2,1.6;If you run around you will get artifacts]" + .."label[0.2,1.9;Collect 71 artifacts to get the Knightkey as a reward]" + .."label[0.0,2.2;b) Medallion]" + .."label[0.2,2.5;craft medallions in the medallion craft]" + .."label[0.2,2.8;Collect 7 medallions to get the Crystalkey as a reward]" + .."label[0.0,3.1;c) Treasures]" + .."label[0.2,3.4;get treasures from the fox]" + .."label[0.2,3.7;Collect 6 treasures to get the legend stick as a reward]" + .."label[0.0,4.0;d) Trophys]" + .."label[0.2,4.3;get trophys in the trophy craft]" + .."label[0.2,4.6;Collect 24 trothys to get the Protectionkey as a reward]" + .."button[2,10; 2,0.5;rg7;<]" + .."button[4,10; 2,0.5;rg9;>]" + return formspec +end +local rg9 = {} +rg9.get_formspec = function(player, pos) + if player == nil then + return + end + formspec = "size[9,10.3]" + .."button[0,0;2,0.5;inven;Back]" + .."button[2,0;2,0.5;main;Main]" + .."background[9,10.3;1,1;gui_formbg.png;true]" + .."listcolors[#00000069;#5A5A5A;#141318;#30434C;#FFF]" + .."bgcolor[#080808BB;true]" + .."label[0,1;I. 7. Music]" + .."label[0,1.3;Enable Background Music.]" + .."label[0,1.6;Choose Themes to be randomly selected]" + .."label[0,1.9;and listen to the Regnum Themes.]" + .."button[2,10; 2,0.5;rg8;<]" + .."button[4,10; 2,0.5;rg10;>]" return formspec end local rg2 = {} @@ -1510,30 +1277,21 @@ rg2.get_formspec = function(player, pos) .."bgcolor[#080808BB;true]" .."label[0,1; CONTENS]" .."label[0,1.3; I. Inventory]" - .."label[0,1.6; 1. Bags]" - .."label[0,1.9; 2. Armor]" - .."label[0,2.2; 3. XP Guide]" - .."label[0,2.5; 4. Crafting]" - .."label[0,2.8; 5. Skins]" - .."label[0,3.1; 6. Craft Guide]" - .."label[0,3.4; 7. Crystals]" - .."label[0,3.7; 8. Achievements]" - .."label[0,4.0; 9. Regnum guide]" - .."label[0,4.3; 10. Awards]" - .."label[0,4.6; 11. Xp items]" - .."label[0,4.9; 12. Gems]" - .."label[0,5.2; 13. Artifacts]" - .."label[0,5.5; 14. Medallion]" - .."label[0,5.8; 15. Treasures]" - .."label[0,6.1; 16. Trophys]" - .."label[0,6.4; 17. Music]" - .."label[0,6.7; II. Game]" - .."label[0,7.0; 1. Gifts]" - .."label[0,7.3; 2. Mobs]" - .."label[0,7.6; 3. Xp & Level]" - .."label[0,7.9; 4. Ores]" - .."label[0,8.2; 5. Armor, Battleaxes & Guns]" - .."label[0,8.5; 6. Chat commands]" + .."label[0,1.6; 1. Equipment]" + .."label[0,1.9; 2. Crafting]" + .."label[0,2.2; 3. Help]" + .."label[0,2.5; 4. Spezial]" + .."label[0,2.8; 5. Quests]" + .."label[0,3.1; 6. Color items]" + .."label[0,3.4; 7. Music]" + .."label[0,3.7; II. Game]" + .."label[0,4.0; 1. Gifts]" + .."label[0,4.3; 2. Mobs]" + .."label[0,4.6; 3. Xp & Level]" + .."label[0,4.9; 4. Ores]" + .."label[0,5.2; 5. Armor, Battleaxes & Guns]" + .."label[0,5.5; 6. Chat commands]" + .."label[0,5.8; 7. Keys]" .."button[2,10; 2,0.5;rg1;<]" .."button[4,10; 2,0.5;rg3;>]" return formspec @@ -1549,52 +1307,33 @@ rg3.get_formspec = function(player, pos) .."background[9,10.3;1,1;gui_formbg.png;true]" .."listcolors[#00000069;#5A5A5A;#141318;#30434C;#FFF]" .."bgcolor[#080808BB;true]" - .."label[0,1;I. 1. Bags]" - .."label[0,1.3;You can use bags to take more things with you.]" - .."label[0,1.6;You can have up to eight bags, every bag has eight level.]" - .."label[0,1.9;Every level for a bag give you more space for it.]" - .."label[0,2.2;If you want more then four bags you need also a bagkey.]" - .."label[0,2.5;With each new bagkey level you can get one more bag.]" - .."label[0,2.8;How to use bags:]" - .."label[0,3.1;1. You have to craft a bag (look in the craft guide how).]" - .."label[0,3.4;2. Put the bag in one of the fields and use the button below.]" - .."label[0,3.7;3. You can put your items in the new inventory.]" - .."label[0,4.0;4. If you put the bag in the lower field and you have no bagkey]" - .."label[0,4.3; you can not use it]" - .."label[0,4.6;5. You can use shift to move items quickly (as you use for chests)]" + .."label[0,1;I. 1. Equipment]" + .."label[0.0,1.3;a) Skins]" + .."label[0.2,1.6;Here you can change your skin]" + .."label[0.2,1.9;Click on one skin to change your skin]" + .."label[0.2,2.2;If you have the pixeled Regnum key you can use the see-through skin]" + .."label[0.2,2.5;If you have the knight Regnum key you can use the knight skins]" + .."label[0.0,2.8;b) Bags]" + .."label[0.2,3.1;You can use bags to take more things with you.]" + .."label[0.2,3.4;You can have up to eight bags, every bag has eight level.]" + .."label[0.2,3.7;Craft a bag (look in the craft guide how).]" + .."label[0.2,4.0;Put the bag in one of the fields and use the button below.]" + .."label[0.2,4.3;You can put your items in the new inventory.]" + .."label[0.2,4.6;Every level for a bag give you more space for it.]" + .."label[0.2,4.9;If you want more then four bags you need also a bagkey.]" + .."label[0.2,5.2;With each new Bagkey level you can get one more bag.]" + .."label[0.0,5.5;c) Armor]" + .."label[0.2,5.8;Craft some armor (look in the craft guide how).]" + .."label[0.2,6.1;You can use armor to save you from monsters.]" + .."label[0.2,6.4;There are 5 differend armor parts.]" + .."label[0.2,6.7;Helmets, chestplates, leggings, boots and shields]" + .."label[0.2,7.0;If you have afull regnum armor you can't burn or drown.]" + .."label[0.2,7.3;If you have the armor key you can make your armor invisible to other.]" + .."label[0.2,7.6;If you have the protection key you will have a higher protection.]" .."button[2,10; 2,0.5;rg2;<]" .."button[4,10; 2,0.5;rg4;>]" return formspec end -local rg4 = {} -rg4.get_formspec = function(player, pos) - if player == nil then - return - end - formspec = "size[9,10.3]" - .."button[0,0;2,0.5;inven;Back]" - .."button[2,0;2,0.5;main;Main]" - .."background[9,10.3;1,1;gui_formbg.png;true]" - .."listcolors[#00000069;#5A5A5A;#141318;#30434C;#FFF]" - .."bgcolor[#080808BB;true]" - .."label[0,1;I. 2. Armor]" - .."label[0,1.3;You can use armor to save you from monsters.]" - .."label[0,1.6;There are 5 differend armor parts.]" - .."label[0,1.9;Make your armor invisible to other when you have the armorkey.]" - .."label[0,2.2;Some armor will also save you from lava and fire]" - .."label[0,2.5;and there is also armor that regenerate you.]" - .."label[0,2.8;Get the Protectionkey to get a save bonus]" - .."label[0,3.1;How to use Armor:]" - .."label[0,3.4;1. You have to craft some armor (look in the craft guide how).]" - .."label[0,3.7;2. You can see five fields on the left.]" - .."label[0,4.0;3. You have to put the helmet at the top and the boots at the bottom.(like in minecraft)]" - .."label[0,4.3;4. You have to put the shield in the right field]" - .."label[0,4.6;5. Craft the armor key and than you can press 'armor off']" - .."label[0,4.9;6. Craft the protectionkey to get a save bonus]" - .."button[2,10; 2,0.5;rg3;<]" - .."button[4,10; 2,0.5;rg5;>]" - return formspec -end local rg5 = {} rg5.get_formspec = function(player, pos) if player == nil then @@ -1606,16 +1345,22 @@ rg5.get_formspec = function(player, pos) .."background[9,10.3;1,1;gui_formbg.png;true]" .."listcolors[#00000069;#5A5A5A;#141318;#30434C;#FFF]" .."bgcolor[#080808BB;true]" - .."label[0,1;I. 3. XP Guide]" - .."label[0,1.3;If you dig uranium/red ore/blue ore/Xp block/Xp Block (yellow)]" - .."label[0,1.6;or you place a Crystalbottle, you will get xp.]" - .."label[0,1.9;Use the Xp Guide to see how many xp you have]" - .."label[0,2.2;If you want to see how many xp you need for the next level]" - .."label[0,2.5;you have to use the xp key]" - .."label[0,2.8;There are 6 differend kinds of xp.]" - .."label[0,3.1;How to use Xp Guide:]" - .."label[0,3.4;1. On the left you can see how many xp you have]" - .."label[0,3.7;2. Craft the xp key and than you can press 'xp green/red/blue/grey/yellow/cyan you need']" + .."label[0,1;I. 3. Help]" + .."label[0.0,1.3;a) Regnum Guide]" + .."label[0.2,1.6;You can read something about the Regnum Game :)]" + .."label[0.0,1.9;b) Craft Guide]" + .."label[0.2,2.2;Here you can see how to craft items]" + .."label[0.2,2.5;Click on one item to see the crafting]" + .."label[0.2,2.8;You can also see 4x4 and 5x5 craftings,]" + .."label[0.2,3.1;You can see the craftings for battleaxes/armor/gun]" + .."label[0.2,3.4;in the Regnum Craft Guide.]" + .."label[0.0,3.7;c) Xp Guide]" + .."label[0.2,4.0;If you dig uranium (not from the technic mod), red ore, blue ore,]" + .."label[0.2,4.3;Xp block (grey), Xp Block (yellow) or you place a Crystalbottle, you will get xp.]" + .."label[0.2,4.6;There are 6 differend kinds of xp.]" + .."label[0.2,4.9;Use the Xp Guide to see how many xp you have]" + .."label[0.2,5.2;If you want to see how many xp you need for the next level]" + .."label[0.2,5.5;you will need the Xpkey]" .."button[2,10; 2,0.5;rg4;<]" .."button[4,10; 2,0.5;rg6;>]" return formspec @@ -1633,59 +1378,15 @@ rg.get_formspec = function(player, pos) .."bgcolor[#080808BB;true]" .."label[0,1;This is the first page of the Regnum guide.]" .."label[0,1.3;Here you can get some basic informations]" - .."label[0,1.6;about my subgame:Regnum]" - .."label[0,1.9;I develop the Regnum subgame over the last 5 years]" + .."label[0,1.6;about my game: Regnum]" + .."label[0,1.9;I develop the Regnum game over the last 8 years]" .."label[0,2.2;Thanks to:]" - .."label[0,2.5;NightmareLP who build a mod for my subgame]" + .."label[0,2.5;NightmareLP who build a mod for my game]" .."label[0,2.8;et77 who had some great ideas]" - .."label[0,3.1;wuschel1912 who tests the subgame]" + .."label[0,3.1;wuschel1912 who tested the game]" .."button[4,10;2,0.5;rg2;>]" return formspec end -minetest.register_on_dignode(function(pos, node, player) - if player == nil then - return - end - local name = player:get_player_name() - local inv = player:get_inventory() - if node.name == "tutorial:geschenk_dna" then - local x = math.random(0,15) - print (x) - if x == 0 then - inv:add_item("main", "mobs:watermob_crocodile_lg_egg") - elseif x == 1 then - inv:add_item("main", "mobs:watermob_crocodile_md_egg") - elseif x == 2 then - inv:add_item("main", "mobs:watermob_crocodile_sm_egg") - elseif x == 3 then - inv:add_item("main", "mobs:watermob_clownfish_egg") - elseif x == 4 then - inv:add_item("main", "mobs:watermob_tropical_fish_egg") - elseif x == 5 then - inv:add_item("main", "mobs:watermob_jellyfish_egg") - elseif x == 6 then - inv:add_item("main", "mobs:watermob_shark_sm_egg") - elseif x == 7 then - inv:add_item("main", "mobs:watermob_shark_md_egg") - elseif x == 8 then - inv:add_item("main", "mobs:watermob_shark_lg_egg") - elseif x == 9 then - inv:add_item("main", "mobs:watermob_turtle_lg_egg") - elseif x == 10 then - inv:add_item("main", "mobs:watermob_turtle_sm_egg") - elseif x == 11 then - inv:add_item("main", "mobs:skymob_butterfly_egg") - elseif x == 12 then - inv:add_item("main", "mobs:skymob_gull_egg") - elseif x == 13 then - inv:add_item("main", "mobs:skymob_bird_sm_egg") - elseif x == 14 then - inv:add_item("main", "mobs:skymob_bird_lg_egg") - elseif x == 15 then - inv:add_item("main", "mobs:skymob_bat_egg") - end - end -end) local dna = {} dna.get_formspec = function(player, pos) if player == nil then @@ -1934,21 +1635,9 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) if fields.rg15 then inventory_plus.set_inventory_formspec(player, rg15.get_formspec(player)) end - if fields.rg16 then + if fields.rg16 then inventory_plus.set_inventory_formspec(player, rg16.get_formspec(player)) end - if fields.rg17 then - inventory_plus.set_inventory_formspec(player, rg17.get_formspec(player)) - end - if fields.rg18 then - inventory_plus.set_inventory_formspec(player, rg18.get_formspec(player)) - end - if fields.rg19 then - inventory_plus.set_inventory_formspec(player, rg19.get_formspec(player)) - end - if fields.rg20 then - inventory_plus.set_inventory_formspec(player, rg20.get_formspec(player)) - end if fields.crafting5 then inventory_plus.set_inventory_formspec(player, crafting5.get_formspec(player)) end @@ -2021,8 +1710,9 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) player_inv:set_stack("dna", 6, "tutorial:big_dna_string "..(y6-1)) player_inv:set_stack("dna", 7, "tutorial:big_dna_string "..(y7-1)) player_inv:set_stack("dna", 8, "tutorial:big_dna_string "..(y8-1)) - player_inv:add_item("main","mobs:random_monster_egg") + player_inv:add_item("main","mobs:random_monster_egg 6") end + inventory_plus.set_inventory_formspec(player, dna.get_formspec(player)) end end) local ach = {} @@ -2359,44 +2049,44 @@ ach2.get_formspec = function(player, pos) .."label[0.8,5.9;Regnumkey]" .."label[0.8,6.7;Pixeled Regnumkey]" .."label[0.8,7.5;8 Regnum Trolleys]" - .."label[0.8,8.3;8 Legend crystals]" + .."label[0.8,8.3;8 Legend Crystals]" .."label[0.8,9.1;Xp green Lv.MAX]" .."label[0.8,9.9;Xp red Lv.MAX]" .."label[0.8,10.7;Xp blue Lv.MAX]" - .."label[3.3,1.1;Xp gray Lv.MAX]" - .."label[3.3,1.9;dog spawn-egg]" - .."label[3.3,2.7;cat spawn-egg]" - .."label[3.3,3.5;sheep spawn-egg]" - .."label[3.3,4.3;dragon spawn-egg]" - .."label[3.3,5.1;mining laser lv.150]" - .."label[3.3,5.9;all awards]" - .."label[3.3,6.7;mining drill lv.150]" - .."label[3.3,7.5;Dragon key]" - .."label[3.3,8.3;5 magic gems]" + .."label[3.3,1.1;Xp grey Lv.MAX]" + .."label[3.3,1.9;Dog spawn-egg]" + .."label[3.3,2.7;Cat spawn-egg]" + .."label[3.3,3.5;Sheep spawn-egg]" + .."label[3.3,4.3;Dragon spawn-egg]" + .."label[3.3,5.1;Mining Laser lv.150]" + .."label[3.3,5.9;All awards]" + .."label[3.3,6.7;Mining Drill lv.150]" + .."label[3.3,7.5;Dragonkey]" + .."label[3.3,8.3;10 magic gems]" .."label[3.3,9.1;Regnumhelmet]" .."label[3.3,9.9;Regnumchestplate]" .."label[3.3,10.7;Regnumleggings]" .."label[5.8,1.1;Regnumboots]" .."label[5.8,1.9;Regnumshield]" - .."label[5.8,2.7;fox spawn-egg]" - .."label[5.8,3.5;tortoise spawn-egg]" + .."label[5.8,2.7;Fox spawn-egg]" + .."label[5.8,3.5;Tortoise spawn-egg]" .."label[5.8,4.3;Foxkey]" - .."label[5.8,5.1;10 magic gems]" + .."label[5.8,5.1;5 magic gems]" .."label[5.8,5.9;Wallplacer lv.MAX]" .."label[5.8,6.7;Xp yellow Lv.MAX]" - .."label[5.8,7.5;all artifacts]" + .."label[5.8,7.5;All artifacts]" .."label[5.8,8.3;Tortoisekey]" .."label[5.8,9.1;Knightkey]" - .."label[5.8,9.9;all medallions]" + .."label[5.8,9.9;All medallions]" .."label[5.8,10.7;Crystalkey]" .."label[8.3,1.1;2 Regnum crystal]" .."label[8.3,1.9;Goldenkey]" .."label[8.3,2.7;Xp cyan Lv.MAX]" .."label[8.3,3.5;Cookingkey Lv.MAX]" .."label[8.3,4.3;2 Pixeled Regnumkeys]" - .."label[8.3,5.1;all trophys]" + .."label[8.3,5.1;All trophys]" .."label[8.3,5.9;Protectionkey lv.MAX]" - .."label[8.3,6.7;all treasures]" + .."label[8.3,6.7;All treasures]" .."label[8.3,7.5;Legendstick lv.MAX]" .."label[8.3,8.3;Regnumgun]" .."label[8.3,9.1;Colorstick (broken)]" @@ -2408,10 +2098,11 @@ ach3.get_formspec = function(player, pos) return end local player_inv = player:get_inventory() - player_inv:set_size("year", 3) + player_inv:set_size("year", 4) local year = player_inv:get_stack("year", 1):get_count() local year2 = player_inv:get_stack("year", 2):get_count() local year3 = player_inv:get_stack("year", 3):get_count() + local year4 = player_inv:get_stack("year", 4):get_count() local d = 0 if year == 1 then d = d+1 @@ -2421,6 +2112,9 @@ ach3.get_formspec = function(player, pos) end if year3 == 1 then d = d+1 + end + if year4 == 1 then + d = d+1 end formspec= "size[10.5,11.3]" .."background[10.5,11.3;1,1;gui_formbg.png;true]" @@ -2428,13 +2122,15 @@ ach3.get_formspec = function(player, pos) .."bgcolor[#080808BB;true]" .."button[0,0;2,0.5;ach;Back]" .."button[2,0;2,0.5;main;Main]" - .."label[0.8,1.1;one year Trophy]" - .."label[0.8,1.9;two years Trophy]" - .."label[0.8,2.7;three years Trophy]" - .."label[5.5,0;"..d.."/3]" + .."label[0.8,1.1;One year Trophy]" + .."label[0.8,1.9;Two years Trophy]" + .."label[0.8,2.7;Three years Trophy]" + .."label[0.8,3.5;Four years Trophy]" + .."label[5.5,0;"..d.."/4]" .."image[0,1;0.8,0.8;tutorial_"..year..".png]" .."image[0,1.8;0.8,0.8;tutorial_"..year2..".png]" .."image[0,2.6;0.8,0.8;tutorial_"..year3..".png]" + .."image[0,3.4;0.8,0.8;tutorial_"..year4..".png]" return formspec end for j = 1, 8, 1 do @@ -2547,19 +2243,18 @@ for k = 1, 8, 1 do end end local mode_text = { - {"Give player Enemy rank. (revoke all privs)"}, - {"Give player Member rank. (interact,shout)"}, - {"Give player Premium rank. (interact,shout,fly,fast,home)"}, - {"Give player VIP rank. (interact,shout,fly,fast,home,teleport)"}, - {"Give player Hero rank. (interact,shout,fly,fast,home,teleport,noclip,debug)"}, - {"Give player Legend rank (interact,shout,fly,fast,home,teleport,noclip,debug,bring,settime)"}, - {"Give player Admin rank (all privs)"}, - {"Mark player as a youtuber "}, + {"give player Enemy rank. (revoke all privs)"}, + {"give player Member rank. (interact,shout)"}, + {"give player Premium rank. (interact,shout,fly,fast,home)"}, + {"give player VIP rank. (interact,shout,fly,fast,home,teleport)"}, + {"give player Hero rank. (interact,shout,fly,fast,home,teleport,noclip,debug)"}, + {"give player Legend rank (interact,shout,fly,fast,home,teleport,noclip,debug,bring,settime)"}, + {"give player Admin rank (all privs)"}, + {"mark player as a youtuber"}, } local function server_hammer_setmode(user, itemstack, mode, keys) local puncher = user:get_player_name() if keys["sneak"] == false and mode == 0 then - minetest.chat_send_player(puncher, "Hold shift and use to change server hammer modes.") return end if keys["sneak"] == true then @@ -2770,19 +2465,34 @@ minetest.register_craftitem("tutorial:server_hammer", { description = "Admin tool 6: Server Hammer", inventory_image = "ban_hammer.png", stack_max = 1, + groups = {not_in_creative_inventory=1}, + on_secondary_use = function(itemstack, user, pointed_thing) + local mode = 0 + server_hammer_handler(itemstack, user, pointed_thing, mode) + return itemstack + end, on_use = function(itemstack, user, pointed_thing) local mode = 0 server_hammer_handler(itemstack, user, pointed_thing, mode) return itemstack end, }) -for i = 1, 8 do +minetest.register_craftitem("tutorial:server_hammer1", { + description = "Admin tool 6: Server Hammer Mode 1 ("..mode_text[1][1]..")", + inventory_image = "ban_hammer.png^technic_tool_mode1.png", + wield_image = "ban_hammer.png", + on_secondary_use = function(itemstack, user, pointed_thing) + server_hammer_handler(itemstack, user, pointed_thing, 1) + return itemstack + end, + }) +for i = 2, 8 do minetest.register_craftitem("tutorial:server_hammer"..i, { - description = "Admin tool 6: Server Hammer in Mode "..i, + description = "Admin tool 6: Server Hammer in Mode "..i.." ("..mode_text[i][1]..")", inventory_image = "ban_hammer.png^technic_tool_mode"..i..".png", wield_image = "ban_hammer.png", groups = {not_in_creative_inventory=1}, - on_use = function(itemstack, user, pointed_thing) + on_secondary_use = function(itemstack, user, pointed_thing) local mode = i server_hammer_handler(itemstack, user, pointed_thing, mode) return itemstack @@ -2854,6 +2564,7 @@ kri.get_formspec = function(player, pos) else time = "nil" end + formspec = "size[10,12.3]" .."button[0,0;2,0.5;inven;Back]" .."button[2,0;2,0.5;main;Main]" @@ -2884,7 +2595,7 @@ kri.get_formspec = function(player, pos) formspec = formspec .."button[2,5.75;1,0.5;adem;1]" .."button[2,6.75;1,0.5;athu;1]" .."button[2,7.75;1,0.5;athl;1]" - if time ~= "nil" then + if time ~= "nil" and tes == 0 then formspec = formspec .."label[7,3;creating..]" end end @@ -3034,11 +2745,11 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) local g3 = player_inv:get_stack("gem", 3):get_name() local g4 = player_inv:get_stack("gem", 4):get_name() local g5 = player_inv:get_stack("gem", 5):get_name() - local g11 = player_inv:get_stack("gem2", 1):get_name() - local g12 = player_inv:get_stack("gem2", 2):get_name() - local g13 = player_inv:get_stack("gem2", 3):get_name() - local g14 = player_inv:get_stack("gem2", 4):get_name() - local g15 = player_inv:get_stack("gem2", 5):get_name() + local g11 = player_inv:get_stack("2gem", 1):get_name() + local g12 = player_inv:get_stack("2gem", 2):get_name() + local g13 = player_inv:get_stack("2gem", 3):get_name() + local g14 = player_inv:get_stack("2gem", 4):get_name() + local g15 = player_inv:get_stack("2gem", 5):get_name() local ar1 = player_inv:get_stack("armor", 1):get_name() local ar2 = player_inv:get_stack("armor", 2):get_name() local ar3 = player_inv:get_stack("armor", 3):get_name() @@ -3183,7 +2894,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) end if fields.achc then local player_inv = player:get_inventory() - player_inv:set_size("year", 3) + player_inv:set_size("year", 4) if player:get_inventory():contains_item("main", "tutorial:trophy_year1") then player_inv:set_stack("year", 1,"tutorial:dirt") end @@ -3192,6 +2903,9 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) end if player:get_inventory():contains_item("main", "tutorial:trophy_year3") then player_inv:set_stack("year", 3,"tutorial:dirt") + end + if player:get_inventory():contains_item("main", "tutorial:trophy_year4") then + player_inv:set_stack("year", 4,"tutorial:dirt") end inventory_plus.set_inventory_formspec(player, ach3.get_formspec(player)) end @@ -3343,49 +3057,6 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) end) end end) -minetest.register_on_dignode(function(pos, node, player) - if player == nil then - return - end - local name = player:get_player_name() - local inv = player:get_inventory() - if node.name == "tutorial:geschenk_legend" then - local x = math.random(20) - if x == 16 then - local y = math.random(8) - inv:set_stack("kri", y,"tutorial:legenden_kristall_"..y) - else - local z = math.random(16) - if z == 1 then - inv:add_item("main","gems:emerald_gem 2") - elseif z < 3 then - inv:add_item("main","gems:shadow_gem 2") - elseif z < 5 then - inv:add_item("main","gems:pearl_gem 2") - elseif z < 8 then - inv:add_item("main","gems:amethyst_gem 2") - elseif z < 12 then - inv:add_item("main","gems:ruby_gem 2") - else - inv:add_item("main","gems:sapphire_gem 2") - end - end - end - if node.name == "tutorial:geschenk_regnum" then - local x = math.random(1, 5) - if x == 1 then - inv:add_item("main", "tutorial:regnum_pixel_gold 20") - elseif x == 2 then - inv:add_item("main", "tutorial:regnum_pixel_green 20") - elseif x == 3 then - inv:add_item("main", "tutorial:regnum_pixel_purple 55") - elseif x == 4 then - inv:add_item("main", "tutorial:regnum_pixel_red 185") - elseif x == 5 then - inv:add_item("main", "tutorial:regnum_pixel_blue 185") - end - end -end) local crafting4 = {} crafting4.get_formspec = function(player, pos) if player == nil then @@ -3436,16 +3107,6 @@ minetest.register_on_dignode(function(pos, node, player) else minetest.get_player_by_name(name):set_hp(0) end - elseif x < 36 then - inv:add_item("main", "default:mese_crystal_fragment 4") - elseif x < 41 then - inv:add_item("main", "tutorial:lightstone") - elseif x < 46 then - inv:add_item("main", "default:ice") - elseif x < 50 then - inv:add_item("main", "tutorial:geschenk_death") - elseif x == 50 then - inv:add_item("main", "tutorial:regnum_part") end end if node.name == "tutorial:geschenk_death_silber" then @@ -3463,17 +3124,6 @@ minetest.register_on_dignode(function(pos, node, player) else minetest.get_player_by_name(name):set_hp(0) end - elseif x < 32 then - inv:add_item("main", "default:mese_crystal") - elseif x < 38 then - inv:add_item("main", "tutorial:lightstone") - elseif x < 44 then - inv:add_item("main", "default:ice") - elseif x < 50 then - inv:add_item("main", "tutorial:geschenk_death_silber") - elseif x == 50 then - local y = math.random(1,2) - inv:add_item("main", "tutorial:regnum_part "..y) end end if node.name == "tutorial:geschenk_death_gold" then @@ -3491,17 +3141,6 @@ minetest.register_on_dignode(function(pos, node, player) else minetest.get_player_by_name(name):set_hp(0) end - elseif x < 28 then - inv:add_item("main", "default:mese_crystal 2") - elseif x < 35 then - inv:add_item("main", "tutorial:lightstone 2") - elseif x < 42 then - inv:add_item("main", "default:ice") - elseif x < 50 then - inv:add_item("main", "tutorial:geschenk_death_gold") - elseif x == 50 then - local y = math.random(1,3) - inv:add_item("main", "tutorial:regnum_part "..y) end end if node.name == "tutorial:geschenk_death_platin" then @@ -3519,17 +3158,35 @@ minetest.register_on_dignode(function(pos, node, player) else minetest.get_player_by_name(name):set_hp(0) end - elseif x < 24 then - inv:add_item("main", "default:mese_crystal 3") - elseif x < 33 then - inv:add_item("main", "tutorial:lightstone 2") - elseif x < 41 then - inv:add_item("main", "default:ice") - elseif x < 50 then - inv:add_item("main", "tutorial:geschenk_death_platin") - elseif x == 50 then - local y = math.random(1,4) - inv:add_item("main", "tutorial:regnum_part "..y) + end + end + if node.name == "tutorial:geschenk_dragon" then + local x = math.random(1,25) + if x == 8 then + inv:set_size("dgon", 1) + local dgon = inv:get_stack("dgon", 1):get_count() + if dgon == 0 and inv:room_for_item("main", "tutorial:dragon_schluessel") then + inv:add_item("main", "tutorial:dragon_schluessel") + inv:add_item("dgon", "default:dirt") + end + end + end + if node.name == "tutorial:geschenk_tortoise" then + local x = math.random(1,25) + if x == 8 then + inv:set_size("ttoise", 1) + local ttoise = inv:get_stack("ttoise", 1):get_count() + if ttoise == 0 and inv:room_for_item("main", "tutorial:tortoise_schluessel") then + inv:add_item("main", "tutorial:tortoise_schluessel") + inv:add_item("ttoise", "default:dirt") + end + end + end + if node.name == "tutorial:geschenk_legend" then + local x = math.random(10) + if x == 8 then + local y = math.random(8) + inv:set_stack("kri", y,"tutorial:legenden_kristall_"..y) end end end) @@ -3840,9 +3497,10 @@ cr.get_formspec = function(player,pos) .."button[8,2.5;2,0.5;"..image6..";Cooking]" .."button[10,2.5;2,0.5;"..image7..";Medallion craft]" .."button[12,2.5;2,0.5;"..image8..";Crystal craft]" - .."button[4,3.5;2,0.5;dna;DNA craft]" - .."button[6,3.5;2,0.5;mine;Mining craft]" - .."button[8,3.5;2,0.5;troph;Trophy craft]" + .."button[3,3.5;2,0.5;dna;DNA craft]" + .."button[5,3.5;2,0.5;mine;Mining craft]" + .."button[7,3.5;2,0.5;troph;Trophy craft]" + .."button[9,3.5;2,0.5;backward;Backward craft]" .."label[0.5,1.8;Craftkey]" .."label[2.4,1.8;Legendkey]" .."label[4.35,1.8;Regnumkey]" diff --git a/mods/tutorial/textures/tutorial_gem_fragment2.png b/mods/tutorial/textures/tutorial_gem_fragment2.png index 4c5e53c661e3d827c5037077fe470da5f119836b..0008c2eca90b41f05675ac0f3c7115880fb88aaf 100644 GIT binary patch delta 114 zcmV-&0FD340lWc_QETJ_2NMH1@jiFI0000Sjfn8$5r@q1B@pfKJkCyllrX=_G2t7*=GZIeF0Q3qM U{JK0`!~g&Q07*qoM6N<$f*QImA^-pY delta 129 zcmV-{0Dk|x0m}i9QF`G75DW|*a{NhY00013Nkl~ z6_G%s`o!l+*ch_Nt%bBo%K(MgIDUHx2C@LBMA$foJ{>;2zym+EJl@WWu-9Ws+=fZX jxAzbXf>B=8!5#DfOMW3@FD+bt00000NkvXXu0mjfUBoo{ diff --git a/mods/tutorial/textures/tutorial_geschenk_gem2.png b/mods/tutorial/textures/tutorial_geschenk_gem2.png index 932e31eb2d5a0c37187a021ad1361000dd2b970e..d38ec56a7a87e7189c7f80dd88e536b3be4028c8 100644 GIT binary patch delta 205 zcmV;;05bo=0=@!}Q3~V(2NE(RBA`Zfky|W(qDe$SR4C7-lEDqbAPhwx5=+<?a4sH(gcW?*gRi5cqBoS^Qrk9vFe$Xtqt=9U_5ZT22Q3~M%5DPOK#tzWsky|W(rb$FWR4C7-lgkZ+Fbo9;DNWb~rVR2a zgPyhxy9_w6uxN#&UGXk2QZ$}J;;9!_fVqK)psJr<7CdLn40k`f7XU~hC<1WyHFMhs zqzF`13{X|>GB+nhpon0B`ACXDRpm7>17kB!%ut5r3CenRQ7-2enRE8gT&GH1EBWg@ zosUjtMx2IOz6H&U00000 LNkvXXu0mjfRI^ye diff --git a/mods/tutorial/textures/tutorial_geschenk_tortoise.png b/mods/tutorial/textures/tutorial_geschenk_tortoise.png new file mode 100644 index 0000000000000000000000000000000000000000..51c6b9930db35ec1fa321f3dbb4e08f01d82729b GIT binary patch literal 204 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 diff --git a/mods/xpanes/textures/xpanes_pane_half.png b/mods/xpanes/textures/xpanes_pane_half.png deleted file mode 100644 index 4e846dfa088e9842872673dc7c405db46e944bd4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 83 zcmeAS@N?(olHy`uVBq!ia0vp^oIotV!3HFcc!W9wDJf4E$B+uf&H|6fVg?3oVGw3ym^DWND9B#o z>Fdh=kd0Z?#I)KsuMH?9n;8;O;+&tGo0?YwmdKI;Vst0FrbacK`qY