Advertisement
Guest User

Untitled

a guest
Nov 6th, 2012
42
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. --Gems by Vsevolod Borislav (wowiamdiamonds)
  2. --
  3. --License: WTFPL
  4. --
  5. --Depends: default, moreores
  6. --
  7. --Adds gems and encrusted tools
  8. --
  9.  
  10. dofile(minetest.get_modpath("gems").."/config.lua")
  11.  
  12. minetest.register_node("gems:mineral_ruby", {
  13.     description = "Ruby Ore",
  14.     tiles = {"default_stone.png^gems_mineral_ore.png"},
  15.     is_ground_content = true,
  16.     groups = {cracky=3},
  17.     drop = 'gems:ruby',
  18.     sounds = default.node_sound_stone_defaults(),
  19. })
  20. minetest.register_node("gems:mineral_sapphire", {
  21.     description = "Sapphire Ore",
  22.     tiles = {"default_stone.png^gems_mineral_sapphire.png"},
  23.     is_ground_content = true,
  24.     groups = {cracky=3},
  25.     drop = 'gems:sapphire',
  26.     sounds = default.node_sound_stone_defaults(),
  27. })
  28. minetest.register_node("gems:mineral_emerald", {
  29.     description = "Emerald Ore",
  30.     tiles = {"default_stone.png^gems_mineral_emerald.png"},
  31.     is_ground_content = true,
  32.     groups = {cracky=3},
  33.     drop = 'gems:emerald',
  34.     sounds = default.node_sound_stone_defaults(),
  35. })
  36. minetest.register_node("gems:mineral_diamond", {
  37.     description = "Amethyst Ore",
  38.     tiles = {"default_stone.png^gems_mineral_diamond.png"},
  39.     is_ground_content = true,
  40.     groups = {cracky=3},
  41.     drop = 'gems:diamond',
  42.     sounds = default.node_sound_stone_defaults(),
  43. })
  44. minetest.register_node("gems:mineral_topaz", {
  45.     description = "Topaz Ore",
  46.     tiles = {"default_stone.png^gems_mineral_topaz.png"},
  47.     is_ground_content = true,
  48.     groups = {cracky=3},
  49.     drop = 'gems:topaz',
  50.     sounds = default.node_sound_stone_defaults(),
  51. })
  52.  
  53. minetest.register_craftitem("gems:ruby", {
  54.     description = "Ruby",
  55.     inventory_image = "gems_ruby.png",
  56. })
  57. minetest.register_craftitem("gems:sapphire", {
  58.     description = "Sapphire",
  59.     inventory_image = "gems_sapphire.png",
  60. })
  61. minetest.register_craftitem("gems:emerald", {
  62.     description = "Emerald",
  63.     inventory_image = "gems_emerald.png",
  64. })
  65. minetest.register_craftitem("gems:amethyst", {
  66.     description = "Amethyst",
  67.     inventory_image = "gems_amethyst.png",
  68. })
  69. minetest.register_craftitem("gems:topaz", {
  70.     description = "Topaz",
  71.     inventory_image = "gems_topaz.png",
  72. })
  73.  
  74. encrust_a_tool = function(result,crafttool,craftgem)
  75.     minetest.register_craft( {
  76.        type = "shapeless",
  77.        output = result,
  78.        recipe = {
  79.                crafttool,
  80.                craftgem,
  81.         },
  82.     })
  83. end
  84.  
  85. mods = {}
  86. metals = {}
  87. metalname = {}
  88. gems = {"ruby","sapphire","emerald","amethyst","topaz"}
  89. gemname = {"Ruby","Sapphire","Emerald","Amethyst","Topaz"}
  90.  
  91. gembenefitspeed = {0.75,1.00,0.85,1.15,0.60}
  92. gembenefitwear = {1.00,1.35,1.25,1.50,0.80}
  93.  
  94. if encrust_steel == true then
  95.     table.insert(mods,"default")
  96.     table.insert(metals,"steel")
  97.     table.insert(metalname,"Steel")
  98. end
  99.  
  100. if encrust_bronze == true then
  101.     table.insert(mods,"moreores")
  102.     table.insert(metals,"bronze")
  103.     table.insert(metalname,"Bronze")
  104. end
  105.  
  106. if encrust_silver == true then
  107.     table.insert(mods,"moreores")
  108.     table.insert(metals,"silver")
  109.     table.insert(metalname,"Silver")
  110. end
  111.  
  112. if encrust_gold == true then
  113.     table.insert(mods,"moreores")
  114.     table.insert(metals,"gold")
  115.     table.insert(metalname,"Gold")
  116. end
  117.  
  118. if encrust_mithril == true then
  119.     table.insert(mods,"moreores")
  120.     table.insert(metals,"mithril")
  121.     table.insert(metalname,"Mithril")
  122. end
  123.  
  124. if encrust_alatro == true then
  125.     table.insert(mods,"gloopores")
  126.     table.insert(metals,"alatro")
  127.     table.insert(metalname,"Alatro")
  128. end
  129.  
  130. if encrust_arol == true then
  131.     table.insert(mods,"gloopores")
  132.     table.insert(metals,"arol")
  133.     table.insert(metalname,"Arol")
  134. end
  135.  
  136. for j,k in ipairs(metals) do
  137.     modis = mods[j]
  138.     metalis = metals[j]
  139.     pickdef = minetest.registered_tools[modis..":pick_"..metalis]
  140.     axedef = minetest.registered_tools[modis..":axe_"..metalis]
  141.     shoveldef = minetest.registered_tools[modis..":shovel_"..metalis]
  142.     sworddef = minetest.registered_tools[modis..":sword_"..metalis]
  143.     pickdig = pickdef.tool_capabilities.groupcaps.cracky
  144.     axedigc = axedef.tool_capabilities.groupcaps.choppy
  145.     axedigf = axedef.tool_capabilities.groupcaps.fleshy
  146.     shoveldig = shoveldef.tool_capabilities.groupcaps.crumbly
  147.     sworddigf = sworddef.tool_capabilities.groupcaps.fleshy
  148.     sworddigs = sworddef.tool_capabilities.groupcaps.snappy
  149.     sworddigc = sworddef.tool_capabilities.groupcaps.choppy
  150.     for i,l in ipairs(gems) do
  151.         npickdig = {}
  152.         naxedigc = {}
  153.         naxedigf = {}
  154.         nshoveldig = {}
  155.         nsworddigf = {}
  156.         nsworddigs = {}
  157.         nsworddigc = {}
  158.        
  159.         npickdig.times[1] = pickdig.times[1]*gembenefitspeed[i]
  160.         npickdig.times[2] = pickdig.times[2]*gembenefitspeed[i]
  161.         npickdig.times[3] = pickdig.times[3]*gembenefitspeed[i]
  162.         npickdig.uses = pickdig.uses*gembenefitwear[i]
  163.         npickdig.level = pickdig.level
  164.        
  165.         naxedigc.times[1] = axedigc.times[1]*gembenefitspeed[i]
  166.         naxedigc.times[2] = axedigc.times[2]*gembenefitspeed[i]
  167.         naxedigc.times[3] = axedigc.times[3]*gembenefitspeed[i]
  168.         naxedigc.uses = axedigc.uses*gembenefitwear[i]
  169.         naxedigc.level = axedigc.level
  170.        
  171.         naxedigf.times[1] = axedigf.times[1]*gembenefitspeed[i]
  172.         naxedigf.times[2] = axedigf.times[2]*gembenefitspeed[i]
  173.         naxedigf.times[3] = axedigf.times[3]*gembenefitspeed[i]
  174.         naxedigf.uses = axedigf.uses*gembenefitwear[i]
  175.         naxedigf.level = axedigf.level
  176.        
  177.         nshoveldig.times[1] = shoveldig.times[1]*gembenefitspeed[i]
  178.         nshoveldig.times[2] = shoveldig.times[2]*gembenefitspeed[i]
  179.         nshoveldig.times[3] = shoveldig.times[3]*gembenefitspeed[i]
  180.         nshoveldig.uses = shoveldig.uses*gembenefitwear[i]
  181.         nshoveldig.level = shoveldig.level
  182.        
  183.         nsworddigf.times[1] = sworddigf.times[1]*gembenefitspeed[i]
  184.         nsworddigf.times[2] = sworddigf.times[2]*gembenefitspeed[i]
  185.         nsworddigf.times[3] = sworddigf.times[3]*gembenefitspeed[i]
  186.         nsworddigf.uses = sworddigf.uses*gembenefitwear[i]
  187.         nsworddigf.level = sworddigf.level
  188.        
  189.         nsworddigs.times[1] = sworddigs.times[1]*gembenefitspeed[i]
  190.         nsworddigs.times[2] = sworddigs.times[2]*gembenefitspeed[i]
  191.         nsworddigs.times[3] = sworddigs.times[3]*gembenefitspeed[i]
  192.         nsworddigs.uses = sworddigs.uses*gembenefitwear[i]
  193.         nsworddigs.level = sworddigs.level
  194.        
  195.         nsworddigc.times[1] = sworddigc.times[1]*gembenefitspeed[i]
  196.         nsworddigc.times[2] = sworddigc.times[2]*gembenefitspeed[i]
  197.         nsworddigc.times[3] = sworddigc.times[3]*gembenefitspeed[i]
  198.         nsworddigc.uses = sworddigc.uses*gembenefitwear[i]
  199.         nsworddigc.level = sworddigc.level
  200.        
  201.         minetest.register_tool("gems:pick_"..k.."_"..l, {
  202.             description = gemname[i].."Encrusted "..metalname[j].." Pickaxe",
  203.             inventory_image = mods[j].."_tool_"..metals[j].."pick.png^gems_pick_"..gems[i],
  204.             tool_capabilities = {
  205.                 max_drop_level = pickdef.tool_capabilities.max_drop_level,
  206.                 groupcaps = {
  207.                     npickdig,
  208.                 }
  209.             }
  210.         })
  211.         minetest.register_tool("gems:axe_"..k.."_"..i, {
  212.             description = gemname[i].."Encrusted "..metalname[j].." Axe",
  213.             inventory_image = mods[j].."_tool_"..metals[j].."axe.png^gems_axe_"..gems[i],
  214.             tool_capabilities = {
  215.                 max_drop_level = axedef.tool_capabilities.max_drop_level,
  216.                 groupcaps = {
  217.                     naxedigc,
  218.                     naxedigf,
  219.                 }
  220.             }
  221.         })
  222.         minetest.register_tool("gems:shovel_"..k.."_"..l, {
  223.             description = gemname[i].."Encrusted "..metalname[j].." Shovel",
  224.             inventory_image = mods[j].."_tool_"..metals[j].."shovel.png^gems_shovel_"..gems[i],
  225.             tool_capabilities = {
  226.                 max_drop_level = shoveldef.tool_capabilities.max_drop_level,
  227.                 groupcaps = {
  228.                     nshoveldig,
  229.                 }
  230.             }
  231.         })
  232.         minetest.register_tool("gems:sword_"..k.."_"..l, {
  233.             description = gemname[i].."Encrusted "..metalname[j].." Sword",
  234.             inventory_image = mods[j].."_tool_"..metals[j].."sword.png^gems_sword_"..gems[i],
  235.             tool_capabilities = {
  236.                 max_drop_level = sworddef.tool_capabilities.max_drop_level,
  237.                 groupcaps = {
  238.                     nsworddigf,
  239.                     nsworddigs,
  240.                     nsworddigc,
  241.                 }
  242.             }
  243.         })
  244.         minetest.register_craft({
  245.             type = "shapeless",
  246.             output = "gems:pick_"..k.."_"..l,
  247.             recipe = {
  248.                 "gems:"..i,
  249.                 mods[j]..":pick_"..k,
  250.             }
  251.         })
  252.         minetest.register_craft({
  253.             type = "shapeless",
  254.             output = "gems:axe_"..k.."_"..l,
  255.             recipe = {
  256.                 "gems:"..i,
  257.                 mods[j]..":axe_"..k,
  258.             }
  259.         })
  260.         minetest.register_craft({
  261.             type = "shapeless",
  262.             output = "gems:shovel_"..k.."_"..l,
  263.             recipe = {
  264.                 "gems:"..i,
  265.                 mods[j]..":shovel_"..k,
  266.             }
  267.         })
  268.         minetest.register_craft({
  269.             type = "shapeless",
  270.             output = "gems:sword_"..k.."_"..l,
  271.             recipe = {
  272.                 "gems:"..i,
  273.                 mods[j]..":sword_"..k,
  274.             }
  275.         })
  276.     end
  277. end
  278.  
  279. local function generate_ore(name, wherein, minp, maxp, seed, chunks_per_volume, ore_per_chunk, height_min, height_max)
  280.     if maxp.y < height_min or minp.y > height_max then
  281.         return
  282.     end
  283.     local y_min = math.max(minp.y, height_min)
  284.     local y_max = math.min(maxp.y, height_max)
  285.     local volume = (maxp.x-minp.x+1)*(y_max-y_min+1)*(maxp.z-minp.z+1)
  286.     local pr = PseudoRandom(seed)
  287.     local num_chunks = math.floor(chunks_per_volume * volume)
  288.     local chunk_size = 3
  289.     if ore_per_chunk <= 4 then
  290.         chunk_size = 2
  291.     end
  292.     local inverse_chance = math.floor(chunk_size*chunk_size*chunk_size / ore_per_chunk)
  293.     --print("generate_ore num_chunks: "..dump(num_chunks))
  294.     for i=1,num_chunks do
  295.     if (y_max-chunk_size+1 <= y_min) then return end
  296.         local y0 = pr:next(y_min, y_max-chunk_size+1)
  297.         if y0 >= height_min and y0 <= height_max then
  298.             local x0 = pr:next(minp.x, maxp.x-chunk_size+1)
  299.             local z0 = pr:next(minp.z, maxp.z-chunk_size+1)
  300.             local p0 = {x=x0, y=y0, z=z0}
  301.             for x1=0,chunk_size-1 do
  302.             for y1=0,chunk_size-1 do
  303.             for z1=0,chunk_size-1 do
  304.                 if pr:next(1,inverse_chance) == 1 then
  305.                     local x2 = x0+x1
  306.                     local y2 = y0+y1
  307.                     local z2 = z0+z1
  308.                     local p2 = {x=x2, y=y2, z=z2}
  309.                     if minetest.env:get_node(p2).name == wherein then
  310.                         minetest.env:set_node(p2, {name=name})
  311.                     end
  312.                 end
  313.             end
  314.             end
  315.             end
  316.         end
  317.     end
  318.     --print("generate_ore done")
  319. end
  320.  
  321. minetest.register_on_generated(function(minp, maxp, seed)
  322.     math.randomseed(os.time())
  323.     local current_seed = seed + math.random(10,100)
  324.     local function get_next_seed()
  325.         current_seed = current_seed + 1
  326.         return current_seed
  327.     end
  328.     generate_ore("gems:mineral_ruby", "default:stone", minp, maxp, get_next_seed(), 1/7/7/7, 1, -31000, -50)
  329.     generate_ore("gems:mineral_sapphire", "default:stone", minp, maxp, get_next_seed(), 1/7/7/7, 1, -31000, -100)
  330.     generate_ore("gems:mineral_emerald", "default:stone", minp, maxp, get_next_seed(), 1/7/7/7, 1, -31000, -150)
  331.     generate_ore("gems:mineral_amethyst", "default:stone", minp, maxp, get_next_seed(), 1/7/7/7, 1, -31000, -200)
  332.     generate_ore("gems:mineral_topaz", "default:stone", minp, maxp, get_next_seed(), 1/7/7/7, 1, -31000, -250)
  333. end)
  334.  
  335. minetest.register_alias("gems:mineral_garnet","default:stone")
  336. minetest.register_alias("gems:mineral_aquamarine","default:stone")
  337. minetest.register_alias("gems:mineral_diamond","default:stone")
  338. minetest.register_alias("gems:mineral_opal","default:stone")
  339.  
  340. print("[Gems] Loaded!")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement