e4b1c93512
This code adds the key concept to minetest_game, and integrates it with lockable nodes. Currently supported lockable items are the Steel Door, the Steel Trapdoor, and the Locked Chest. The goal of this modification is to introduce a fine-grained multi- player permission system that is intuitive and usable without any console or chat commands, and doesn't require extra privileges to be granted or setup. Keys can also physically be conveyed to other players, adding to gameplay and adding some personality that is preferable to console commands or editing formspecs. A skeleton key can be crafted with 1 gold ingot. Skeleton keys can then be matched to a lockable node by right-clicking the skeleton key on a lockable node, which changes the skeleton key to a "key". Gold was chosen as it's currently a not-so very useful item, and therefore it's likely that players have some, but aren't really using it for any purpose. This key can subsequently used by any player to open or access that lockable node, including retrieving items from Locked Chests, or putting items in them. They key is programmed to fit only the particular locked node it is programmed to. This is achieved by storing a secret value in both key and locked node. If this secret value doesn't match, the key will not open the locked node. This allows many keys to be created for one chest or door, but a key will only fit one node ever. The secrets are stored in node, and item meta for the key. If a locked node is removed, all keys that opened it are no longer valid. Even if a new door/chest is placed in exactly the same spot, the old keys will no longer fit that node. Keys can be smelted back in gold ingots if they are no longer useful. The method of storing a secret in nodemeta and itemstackmeta is secure as there is no way for the client to create new items on the server with a particular secret metadata value. Even if you could possible create such an itemstack on the client, the server does not ever read itemstackmeta from a client package. The patch adds an API that allows other nodes and nodes added by mods to use the same keys as well. The method how to implement this is described in game_api.txt. The mod should add 2 callbacks to it's node definition. Example code is given. Textures are from PixelBOX, thanks to Gambit. |
||
---|---|---|
.. | ||
models | ||
schematics | ||
sounds | ||
textures | ||
aliases.lua | ||
crafting.lua | ||
craftitems.lua | ||
functions.lua | ||
furnace.lua | ||
init.lua | ||
item_entity.lua | ||
legacy.lua | ||
license.txt | ||
mapgen.lua | ||
nodes.lua | ||
player.lua | ||
README.txt | ||
tools.lua | ||
torch.lua | ||
trees.lua |
Minetest Game mod: default ========================== See license.txt for license information. Authors of source code ---------------------- Originally by celeron55, Perttu Ahola <celeron55@gmail.com> (LGPL 2.1) Various Minetest developers and contributors (LGPL 2.1) Authors of media (textures, models and sounds) ---------------------------------------------- Everything not listed in here: celeron55, Perttu Ahola <celeron55@gmail.com> (CC BY-SA 3.0) Cisoun's texture pack (CC BY-SA 3.0): default_jungletree.png default_lava.png default_leaves.png default_sapling.png default_stone.png default_tree.png default_tree_top.png default_water.png Cisoun's conifers mod (CC BY-SA 3.0): default_pine_needles.png Originating from G4JC's Almost MC Texture Pack (CC BY-SA 3.0): default_torch.png default_torch_on_ceiling.png default_torch_on_floor.png VanessaE's animated torches (CC BY-SA 3.0): default_torch_animated.png default_torch_on_ceiling_animated.png default_torch_on_floor_animated.png default_torch_on_floor.png RealBadAngel's animated water (CC BY-SA 3.0): default_water_source_animated.png default_water_flowing_animated.png VanessaE (CC BY-SA 3.0): default_desert_sand.png default_desert_stone.png default_sand.png default_mese_crystal.png default_mese_crystal_fragment.png Calinou (CC BY-SA 3.0): default_brick.png default_papyrus.png default_mineral_copper.png default_glass_detail.png MirceaKitsune (CC BY-SA 3.0): character.x Jordach (CC BY-SA 3.0): character.png PilzAdam (CC BY-SA 3.0): default_jungleleaves.png default_junglesapling.png default_obsidian_glass.png default_obsidian_shard.png default_mineral_gold.png jojoa1997 (CC BY-SA 3.0): default_obsidian.png InfinityProject (CC BY-SA 3.0): default_mineral_diamond.png Splizard (CC BY-SA 3.0): default_pine_sapling.png Zeg9 (CC BY-SA 3.0): default_coal_block.png default_steel_block.png default_copper_block.png default_bronze_block.png default_gold_block.png paramat (CC BY-SA 3.0): wieldhand.png -- Copied from character.png by Jordach (CC BY-SA 3.0) default_pinetree.png default_pinetree_top.png default_pinewood.png default_acacia_leaves.png default_acacia_leaves_simple.png default_acacia_sapling.png default_acacia_tree.png default_acacia_tree_top.png default_acacia_wood.png default_acacia_bush_stem.png default_bush_stem.png default_junglewood.png default_jungletree_top.png default_sandstone_brick.png default_obsidian_brick.png default_stone_brick.png default_desert_stone_brick.png default_sandstone_block.png default_obsidian_block.png default_stone_block.png default_desert_stone_block.png default_river_water.png default_river_water_source_animated.png default_river_water_flowing_animated.png default_dry_grass.png default_dry_grass_side.png default_dry_grass_*.png default_grass.png default_grass_side.png default_mese_block.png default_silver_sand.png brunob.santos (CC BY-SA 4.0): default_desert_cobble.png BlockMen (CC BY-SA 3.0): default_wood.png default_clay_brick.png default_iron_ingot.png default_gold_ingot.png default_tool_steelsword.png default_diamond.png default_book.png default_tool_*.png default_lava_source_animated.png default_lava_flowing_animated.png default_stick.png default_chest_front.png default_chest_lock.png default_chest_side.png default_chest_top.png default_mineral_mese.png default_meselamp.png bubble.png gui_*.png Wuzzy (CC BY-SA 3.0): default_bookshelf_slot.png (based on default_book.png) sofar (CC BY-SA 3.0): default_book_written.png, based on default_book.png default_aspen_sapling default_aspen_leaves default_aspen_tree default_aspen_tree_top, derived from default_pine_tree_top (by paramat) default_aspen_wood, derived from default_pine_wood (by paramat) default_gravel.png -- Derived from Gambit's PixelBOX texture pack light gravel Neuromancer (CC BY-SA 2.0): default_cobble.png, based on texture by Brane praefect default_mossycobble.png, based on texture by Brane praefect Neuromancer (CC BY-SA 3.0): default_dirt.png default_furnace_*.png Gambit (CC BY-SA 3.0): default_bronze_ingot.png default_copper_ingot.png default_copper_lump.png default_iron_lump.png default_gold_lump.png default_clay_lump.png default_coal.png default_grass_*.png default_paper.png default_diamond_block.png default_ladder_steel.png default_sign_wall_wood.png default_flint.png default_snow.png default_snow_side.png default_snowball.png default_key.png default_key_skeleton.png asl97 (CC BY-SA 3.0): default_ice.png KevDoy (CC BY-SA 3.0) heart.png Pithydon (CC BY-SA 3.0) default_coral_brown.png default_coral_orange.png default_coral_skeleton.png Ferk (CC0 1.0) default_item_smoke.png default_item_smoke.ogg, based on sound by http://opengameart.org/users/bart Glass breaking sounds (CC BY 3.0): 1: http://www.freesound.org/people/cmusounddesign/sounds/71947/ 2: http://www.freesound.org/people/Tomlija/sounds/97669/ 3: http://www.freesound.org/people/lsprice/sounds/88808/ sonictechtonic (CC BY 3.0): https://www.freesound.org/people/sonictechtonic/sounds/241872/ player_damage.ogg Mito551 (sounds) (CC BY-SA 3.0): default_dig_choppy.ogg default_dig_cracky.ogg default_dig_crumbly.1.ogg default_dig_crumbly.2.ogg default_dig_dig_immediate.ogg default_dig_oddly_breakable_by_hand.ogg default_dug_node.1.ogg default_dug_node.2.ogg default_grass_footstep.1.ogg default_grass_footstep.2.ogg default_grass_footstep.3.ogg default_gravel_footstep.1.ogg default_gravel_footstep.2.ogg default_gravel_footstep.3.ogg default_gravel_footstep.4.ogg default_grass_footstep.1.ogg default_place_node.1.ogg default_place_node.2.ogg default_place_node.3.ogg default_place_node_hard.1.ogg default_place_node_hard.2.ogg default_snow_footstep.1.ogg default_snow_footstep.2.ogg default_hard_footstep.1.ogg default_hard_footstep.2.ogg default_hard_footstep.3.ogg default_sand_footstep.1.ogg default_sand_footstep.2.ogg default_wood_footstep.1.ogg default_wood_footstep.2.ogg default_dirt_footstep.1.ogg default_dirt_footstep.2.ogg default_glass_footstep.ogg Metal sounds: default_dig_metal.ogg - yadronoff - CC-BY-3.0 - https://www.freesound.org/people/yadronoff/sounds/320397/ default_dug_metal.*.ogg - Iwan Gabovitch - qubodup - CC0 - http://opengameart.org/users/qubodup default_metal_footstep.*.ogg - Ottomaani138 - CC0 - https://www.freesound.org/people/Ottomaani138/sounds/232692/ default_place_node_metal.*.ogg - Ogrebane - CC0 - http://opengameart.org/content/wood-and-metal-sound-effects-volume-2 Tool breaking sounds added by sofar: CC-BY-3.0 default_tool_breaks.* - http://www.freesound.org/people/HerbertBoland/sounds/33206/ AGFX https://www.freesound.org/people/AGFX/ (CC BY 3.0): default_water_footstep.1.ogg default_water_footstep.2.ogg default_water_footstep.3.ogg (default_water_footstep.4.ogg is silent)