Advertisement
Guest User

Untitled

a guest
Nov 6th, 2012
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.52 KB | None | 0 0
  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 in ipairs(metals) do
  137. modis = mods[j]
  138. metalis = "ddds"
  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 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.  
  164. naxedigc.times[1] = axedigc.times[1]*gembenefitspeed[i]
  165. naxedigc.times[2] = axedigc.times[2]*gembenefitspeed[i]
  166. naxedigc.times[3] = axedigc.times[3]*gembenefitspeed[i]
  167. naxedigc.uses = axedigc.uses*gembenefitwear[i]
  168.  
  169. naxedigf.times[1] = axedigf.times[1]*gembenefitspeed[i]
  170. naxedigf.times[2] = axedigf.times[2]*gembenefitspeed[i]
  171. naxedigf.times[3] = axedigf.times[3]*gembenefitspeed[i]
  172. naxedigf.uses = axedigf.uses*gembenefitwear[i]
  173.  
  174. nshoveldig.times[1] = shoveldig.times[1]*gembenefitspeed[i]
  175. nshoveldig.times[2] = shoveldig.times[2]*gembenefitspeed[i]
  176. nshoveldig.times[3] = shoveldig.times[3]*gembenefitspeed[i]
  177. nshoveldig.uses = shoveldig.uses*gembenefitwear[i]
  178.  
  179. nsworddigf.times[1] = sworddigf.times[1]*gembenefitspeed[i]
  180. nsworddigf.times[2] = sworddigf.times[2]*gembenefitspeed[i]
  181. nsworddigf.times[3] = sworddigf.times[3]*gembenefitspeed[i]
  182. nsworddigf.uses = sworddigf.uses*gembenefitwear[i]
  183.  
  184. nsworddigs.times[1] = sworddigs.times[1]*gembenefitspeed[i]
  185. nsworddigs.times[2] = sworddigs.times[2]*gembenefitspeed[i]
  186. nsworddigs.times[3] = sworddigs.times[3]*gembenefitspeed[i]
  187. nsworddigs.uses = sworddigs.uses*gembenefitwear[i]
  188.  
  189. nsworddigc.times[1] = sworddigc.times[1]*gembenefitspeed[i]
  190. nsworddigc.times[2] = sworddigc.times[2]*gembenefitspeed[i]
  191. nsworddigc.times[3] = sworddigc.times[3]*gembenefitspeed[i]
  192. nsworddigc.uses = sworddigc.uses*gembenefitwear[i]
  193.  
  194. minetest.register_tool("gems:pick_"..metalis.."_"..l, {
  195. description = gemname[i].."Encrusted "..metalname[j].." Pickaxe",
  196. inventory_image = mods[j].."_tool_"..metals[j].."pick.png^gems_pick_"..gems[i],
  197. tool_capabilities = {
  198. max_drop_level = pickdef.tool_capabilities.max_drop_level,
  199. groupcaps = {
  200. npickdig,
  201. }
  202. }
  203. })
  204. minetest.register_tool("gems:axe_"..metalis.."_"..i, {
  205. description = gemname[i].."Encrusted "..metalname[j].." Axe",
  206. inventory_image = mods[j].."_tool_"..metals[j].."axe.png^gems_axe_"..gems[i],
  207. tool_capabilities = {
  208. max_drop_level = axedef.tool_capabilities.max_drop_level,
  209. groupcaps = {
  210. naxedigc,
  211. naxedigf,
  212. }
  213. }
  214. })
  215. minetest.register_tool("gems:shovel_"..metalis.."_"..l, {
  216. description = gemname[i].."Encrusted "..metalname[j].." Shovel",
  217. inventory_image = mods[j].."_tool_"..metals[j].."shovel.png^gems_shovel_"..gems[i],
  218. tool_capabilities = {
  219. max_drop_level = shoveldef.tool_capabilities.max_drop_level,
  220. groupcaps = {
  221. nshoveldig,
  222. }
  223. }
  224. })
  225. minetest.register_tool("gems:sword_"..metalis.."_"..l, {
  226. description = gemname[i].."Encrusted "..metalname[j].." Sword",
  227. inventory_image = mods[j].."_tool_"..metals[j].."sword.png^gems_sword_"..gems[i],
  228. tool_capabilities = {
  229. max_drop_level = sworddef.tool_capabilities.max_drop_level,
  230. groupcaps = {
  231. nsworddigf,
  232. nsworddigs,
  233. nsworddigc,
  234. }
  235. }
  236. })
  237. minetest.register_craft({
  238. type = "shapeless",
  239. output = "gems:pick_"..metalis.."_"..l,
  240. recipe = {
  241. "gems:"..i,
  242. mods[j]..":pick_"..metalis,
  243. }
  244. })
  245. minetest.register_craft({
  246. type = "shapeless",
  247. output = "gems:axe_"..metalis.."_"..l,
  248. recipe = {
  249. "gems:"..i,
  250. mods[j]..":axe_"..metalis,
  251. }
  252. })
  253. minetest.register_craft({
  254. type = "shapeless",
  255. output = "gems:shovel_"..metalis.."_"..l,
  256. recipe = {
  257. "gems:"..i,
  258. mods[j]..":shovel_"..metalis,
  259. }
  260. })
  261. minetest.register_craft({
  262. type = "shapeless",
  263. output = "gems:sword_"..metalis.."_"..l,
  264. recipe = {
  265. "gems:"..i,
  266. mods[j]..":sword_"..metalis,
  267. }
  268. })
  269. end
  270. end
  271.  
  272. local function generate_ore(name, wherein, minp, maxp, seed, chunks_per_volume, ore_per_chunk, height_min, height_max)
  273. if maxp.y < height_min or minp.y > height_max then
  274. return
  275. end
  276. local y_min = math.max(minp.y, height_min)
  277. local y_max = math.min(maxp.y, height_max)
  278. local volume = (maxp.x-minp.x+1)*(y_max-y_min+1)*(maxp.z-minp.z+1)
  279. local pr = PseudoRandom(seed)
  280. local num_chunks = math.floor(chunks_per_volume * volume)
  281. local chunk_size = 3
  282. if ore_per_chunk <= 4 then
  283. chunk_size = 2
  284. end
  285. local inverse_chance = math.floor(chunk_size*chunk_size*chunk_size / ore_per_chunk)
  286. --print("generate_ore num_chunks: "..dump(num_chunks))
  287. for i=1,num_chunks do
  288. if (y_max-chunk_size+1 <= y_min) then return end
  289. local y0 = pr:next(y_min, y_max-chunk_size+1)
  290. if y0 >= height_min and y0 <= height_max then
  291. local x0 = pr:next(minp.x, maxp.x-chunk_size+1)
  292. local z0 = pr:next(minp.z, maxp.z-chunk_size+1)
  293. local p0 = {x=x0, y=y0, z=z0}
  294. for x1=0,chunk_size-1 do
  295. for y1=0,chunk_size-1 do
  296. for z1=0,chunk_size-1 do
  297. if pr:next(1,inverse_chance) == 1 then
  298. local x2 = x0+x1
  299. local y2 = y0+y1
  300. local z2 = z0+z1
  301. local p2 = {x=x2, y=y2, z=z2}
  302. if minetest.env:get_node(p2).name == wherein then
  303. minetest.env:set_node(p2, {name=name})
  304. end
  305. end
  306. end
  307. end
  308. end
  309. end
  310. end
  311. --print("generate_ore done")
  312. end
  313.  
  314. minetest.register_on_generated(function(minp, maxp, seed)
  315. math.randomseed(os.time())
  316. local current_seed = seed + math.random(10,100)
  317. local function get_next_seed()
  318. current_seed = current_seed + 1
  319. return current_seed
  320. end
  321. generate_ore("gems:mineral_ruby", "default:stone", minp, maxp, get_next_seed(), 1/7/7/7, 1, -31000, -50)
  322. generate_ore("gems:mineral_sapphire", "default:stone", minp, maxp, get_next_seed(), 1/7/7/7, 1, -31000, -100)
  323. generate_ore("gems:mineral_emerald", "default:stone", minp, maxp, get_next_seed(), 1/7/7/7, 1, -31000, -150)
  324. generate_ore("gems:mineral_amethyst", "default:stone", minp, maxp, get_next_seed(), 1/7/7/7, 1, -31000, -200)
  325. generate_ore("gems:mineral_topaz", "default:stone", minp, maxp, get_next_seed(), 1/7/7/7, 1, -31000, -250)
  326. end)
  327.  
  328. minetest.register_alias("gems:mineral_garnet","default:stone")
  329. minetest.register_alias("gems:mineral_aquamarine","default:stone")
  330. minetest.register_alias("gems:mineral_diamond","default:stone")
  331. minetest.register_alias("gems:mineral_opal","default:stone")
  332.  
  333. print("[Gems] Loaded!")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement