SHOW:
|
|
- or go back to the newest paste.
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 | - | pickdef = minetest.registered_tools[modis..":pick_"..metals[j]] |
130 | + | |
131 | - | axedef = minetest.registered_tools[modis..":axe_"..metals[j]] |
131 | + | |
132 | - | shoveldef = minetest.registered_tools[modis..":shovel_"..metals[j]] |
132 | + | |
133 | - | sworddef = minetest.registered_tools[modis..":sword_"..metals[j]] |
133 | + | |
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 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!") |