Overview
Comment: | lathe is a mess but whatever i dont care it works now |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA3-256: |
77b901d9505d7405223a74300aa017b2 |
User & Date: | lexi on 2021-07-08 11:25:23 |
Other Links: | manifest | tags |
Context
2021-07-08
| ||
13:41 | commit missing texture check-in: aece454800 user: lexi tags: trunk | |
11:25 | lathe is a mess but whatever i dont care it works now check-in: 77b901d950 user: lexi tags: trunk | |
01:08 | add tool wear to lathe, add page turning sounds for cookbooks check-in: 0dbb4f52c3 user: lexi tags: trunk | |
Changes
Modified lathe.lua from [5af73c1767] to [1310436767].
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 .. 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 ... 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 |
local R = sorcery.lathe.recipes sorcery.lathe.get = function(pos,idx,howmany) local inv = minetest.get_meta(pos):get_inventory() local tool = inv:get_stack('tool',1) local tech = sorcery.lathe.tooltech(tool) if not tech then return nil end local wkpc = inv:get_stack('workpiece',1) local rec = R[wkpc:get_name()][tech][idx] local outn = ItemStack(rec.output):get_count() local q = howmany / outn return { tool = tool, wkpc = wkpc; cost = rec.cost * q; qty = q, outn = outn; tech = tech; rec = rec; inv = inv; } end sorcery.lathe.update = function(pos) ................................................................................ local tmat = sorcery.itemclass.get(tool:get_name(),'material') local wmat = sorcery.itemclass.get(wkpc:get_name(),'material') -- obey level restrictions. TODO honor Rend if (wmat and wmat.data.level or 0) > (tmat and (tmat.data.maxlevel or tmat.data.level) or 0) then return end local tech = sorcery.lathe.tooltech(tool) local rec = R[wkpc:get_name()][tech] tech = sorcery.lathe.techs[tech] -- fill in the preview slots local j = 1 for i=1, inv:get_size('preview') do local stk if rec[i] and minetest.registered_items[ItemStack(rec[i].output):get_name()] then local max = wkpc:get_count() if tech.dmg then -- TODO count remaining tool uses elseif tech.consume then max = math.min(max, tool:get_count()) end if max > 0 then stk = ItemStack(rec[i].output) stk:set_count(stk:get_count() * max) inv:set_stack('preview',i,stk) end end j = j + 1 end -- make sure remaining slots are clear for i = j, inv:get_size('preview') do inv:set_stack('preview',i,ItemStack()) end ................................................................................ local lfac = 1 if mat then local dur = mat.data.durability or dur lfac = (mmat and mmat.data.level or 1) / (mat.data.maxlevel or mat.data.level or 1) end local ch = 65535 / dur l.tool:add_wear(4 * ch * l.cost * lfac) end l.wkpc:take_item(l.qty) l.inv:set_stack('tool', 1, l.tool) l.inv:set_stack('workpiece', 1, l.wkpc) minetest.sound_play('sorcery_clank', { pos = pos, gain = 0.9 }) end sorcery.lathe.update(pos) end; }) |
> < > | > | > | | | | | > < > | | > > > |
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 .. 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 ... 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 |
local R = sorcery.lathe.recipes sorcery.lathe.get = function(pos,idx,howmany) local inv = minetest.get_meta(pos):get_inventory() local tool = inv:get_stack('tool',1) local tech = sorcery.lathe.tooltech(tool) if not tech then return nil end local wkpc = inv:get_stack('workpiece',1) howmany = howmany or wkpc:get_count() local rec = R[wkpc:get_name()][tech][idx] local outn = ItemStack(rec.output):get_count() local ntimes = math.floor(howmany / (rec.mass or 1)) return { tool = tool, wkpc = wkpc; cost = rec.cost * ntimes; ntimes = ntimes; tqty = math.floor(howmany / outn), outn = outn; gqty = ntimes * outn; tech = tech; rec = rec; inv = inv; } end sorcery.lathe.update = function(pos) ................................................................................ local tmat = sorcery.itemclass.get(tool:get_name(),'material') local wmat = sorcery.itemclass.get(wkpc:get_name(),'material') -- obey level restrictions. TODO honor Rend if (wmat and wmat.data.level or 0) > (tmat and (tmat.data.maxlevel or tmat.data.level) or 0) then return end local tech = sorcery.lathe.tooltech(tool) local rec = R[wkpc:get_name()][tech] tech = sorcery.lathe.techs[tech] -- fill in the preview slots local j = 1 for i=1, inv:get_size 'preview' do local stk = ItemStack() if rec[i] and minetest.registered_items[ItemStack(rec[i].output):get_name()] and (rec[i].mass == nil or rec[i].mass <= wkpc:get_count()) then local l = sorcery.lathe.get(pos, i, wkpc:get_count()) local max = l.ntimes --math.floor(wkpc:get_count() / (rec[i].mass or 1)) if tech.dmg then -- TODO count remaining tool uses elseif tech.consume then max = math.min(max, tool:get_count()) end if max > 0 then stk = ItemStack(rec[i].output) stk:set_count(stk:get_count() * max) end end inv:set_stack('preview',i,stk) j = j + 1 end -- make sure remaining slots are clear for i = j, inv:get_size('preview') do inv:set_stack('preview',i,ItemStack()) end ................................................................................ local lfac = 1 if mat then local dur = mat.data.durability or dur lfac = (mmat and mmat.data.level or 1) / (mat.data.maxlevel or mat.data.level or 1) end local ch = 65535 / dur l.tool:add_wear(ch * l.cost * lfac) end l.wkpc:take_item(l.tqty) l.inv:set_stack('tool', 1, l.tool) l.inv:set_stack('workpiece', 1, l.wkpc) if l.rec.leftover then sorcery.lib.node.insert(ItemStack(l.rec.leftover), 'workpiece', pos, user, l.inv) end minetest.sound_play('sorcery_clank', { pos = pos, gain = 0.9 }) end sorcery.lathe.update(pos) end; }) |
Modified metal.lua from [816e3182ea] to [43593523a3].
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
..
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
|
-- for name, metal in pairs(sorcery.data.metals) do sorcery.register.metals.foreach('sorcery:generate',{},function(name,metal) local ingot = metal.ingot or 'sorcery:' .. name .. '_ingot' local block = metal.block or 'sorcery:' .. name .. 'block' local screw = 'sorcery:screw_' .. name local fragment = 'sorcery:fragment_' .. name local powder = 'sorcery:powder_' .. name metal.parts = { ingot = ingot; block = block; screw = screw; fragment = fragment; powder = powder; } if not metal.no_tools then for t,c in pairs(tools) do sorcery.matreg.lookup[(metal.items and metal.items[t]) or ('sorcery:' .. t .. '_' .. name)] = { metal = true; id = name; data = metal; value = c.cost * fragments_per_ingot; } ................................................................................ sorcery.data.metallookup[fragment] = { id = name; data = metal; value = 1; } minetest.register_craftitem(screw, { description = sorcery.lib.str.capitalize(name) .. ' Screw'; inventory_image = sorcery.lib.image('sorcery_screw.png'):multiply(sorcery.lib.color(metal.tone)):render(); groups = { metal = 1; sorcery_screw = 1; sorcery_tech_component = 1; }; _sorcery = { material = { id = name, data = metal; powder = powder; grindcost = 2, grindvalue = 1; value = 0.5; }; }; }) local reglathe = function(ty, sz) sorcery.lathe.register { input = ty; output = {name = screw, count = sz * 2}; tech = 'cut', cost = 1; } end reglathe(fragment, 1) reglathe(ingot, 4) reglathe(block, 4 * 9) minetest.register_craftitem(powder, { description = sorcery.lib.str.capitalize(name) .. ' Powder'; inventory_image = 'sorcery_' .. name .. '_powder.png'; }) if metal.dye then minetest.register_craft { output = 'dye:' .. metal.dye .. ' 4'; |
>
>
<
<
|
<
<
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
|
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
..
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
|
-- for name, metal in pairs(sorcery.data.metals) do sorcery.register.metals.foreach('sorcery:generate',{},function(name,metal) local ingot = metal.ingot or 'sorcery:' .. name .. '_ingot' local block = metal.block or 'sorcery:' .. name .. 'block' local screw = 'sorcery:screw_' .. name local fragment = 'sorcery:fragment_' .. name local powder = 'sorcery:powder_' .. name local disc = 'sorcery:disc_' .. name metal.parts = { ingot = ingot; block = block; screw = screw; fragment = fragment; powder = powder; disc = disc; } if not metal.no_tools then for t,c in pairs(tools) do sorcery.matreg.lookup[(metal.items and metal.items[t]) or ('sorcery:' .. t .. '_' .. name)] = { metal = true; id = name; data = metal; value = c.cost * fragments_per_ingot; } ................................................................................ sorcery.data.metallookup[fragment] = { id = name; data = metal; value = 1; } minetest.register_craftitem(screw, { description = sorcery.lib.str.capitalize(name) .. ' Screw'; inventory_image = sorcery.lib.image('sorcery_screw.png'):multiply(sorcery.lib.color(metal.tone)):render(); groups = { metal = 1; sorcery_screw = 1; sorcery_tech_component = 1; }; _sorcery = { material = { id = name, data = metal; powder = powder; grindcost = 2, grindvalue = 1; value = 0.5; }; }; }) minetest.register_craftitem(disc, { description = sorcery.lib.str.capitalize(name) .. ' Disc'; inventory_image = sorcery.lib.image('sorcery_disc.png'):multiply(sorcery.lib.color(metal.tone)):render(); groups = { metal = 1; sorcery_disc = 1; sorcery_tech_component = 1; }; _sorcery = { material = { id = name, data = metal; powder = powder; grindvalue = (3*4) / 2; value = 4 * (2/3); }; }; }) local reglathe = function(ty, sz) sorcery.lathe.register { input = ty; output = {name = screw, count = sz * 2}; tech = 'cut', cost = 1; } end reglathe(fragment, 1) reglathe(ingot, 4) reglathe(block, 4 * 9) sorcery.lathe.register { input = ingot, mass = 2; output = {name = disc, count = 3}; tech = 'cut', cost = 5; } sorcery.lathe.register { input = block; output = {name = disc, count = 8*3}; leftover = ingot; tech = 'cut', cost = 5*7; } minetest.register_craftitem(powder, { description = sorcery.lib.str.capitalize(name) .. ' Powder'; inventory_image = 'sorcery_' .. name .. '_powder.png'; }) if metal.dye then minetest.register_craft { output = 'dye:' .. metal.dye .. ' 4'; |
Modified recipes.lua from [a1903de2a1] to [3fef19dac9].
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
...
789
790
791
792
793
794
795
796
797
798
|
-- used in constructing devices that are subject to attunement wand regtech('gravity_manipulator', 'Gravity Manipulator', {metal = 1}) regtech('valve','Valve', {metal = 1}, { {'','default:bronze_ingot',''}; {'basic_materials:plastic_sheet','basic_materials:steel_bar','basic_materials:plastic_sheet'}; {'','default:bronze_ingot',''}; },3,nil, mprop('bronze',2*4,1,2*4)) regtech('pipe','Pipe', {metal = 1}, { {ingot('aluminum'),'',ingot('aluminum')}; {ingot('aluminum'),'',ingot('aluminum')}; {ingot('aluminum'),'',ingot('aluminum')}; }, 6, nil, mprop('aluminum', 4)) minetest.register_craft { output = 'sorcery:trough'; recipe = { {ingot('aluminum'),'',ingot('aluminum')}; {ingot('aluminum'),'',ingot('aluminum')}; {ingot('aluminum'),ingot('aluminum'),ingot('aluminum')}; ................................................................................ potion_auto_recipe(id,v,{'farming:mixing_bowl'},'xdecor:bowl') end end sorcery.lathe.register { output = 'basic_materials:steel_bar 2'; input = 'default:steel_ingot'; tech = 'cut'; cost = 3; } |
|
<
>
|
|
|
>
>
|
>
>
>
>
|
>
>
>
>
>
|
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
...
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
|
-- used in constructing devices that are subject to attunement wand regtech('gravity_manipulator', 'Gravity Manipulator', {metal = 1}) regtech('valve','Valve', {metal = 1}, { {'','default:bronze_ingot',''}; {'basic_materials:plastic_sheet','basic_materials:steel_bar','basic_materials:plastic_sheet'}; {'','default:bronze_ingot',''}; },3,nil, mprop('bronze',2*4,1,2*4)) regtech('pipe','Pipe', {metal = 1},nil, nil, nil, mprop('aluminum', 4)) sorcery.lathe.register { input = ingot('aluminum'); output = 'sorcery:pipe'; tech = 'cut', cost = 8; } minetest.register_craft { output = 'sorcery:trough'; recipe = { {ingot('aluminum'),'',ingot('aluminum')}; {ingot('aluminum'),'',ingot('aluminum')}; {ingot('aluminum'),ingot('aluminum'),ingot('aluminum')}; ................................................................................ potion_auto_recipe(id,v,{'farming:mixing_bowl'},'xdecor:bowl') end end sorcery.lathe.register { output = 'basic_materials:steel_bar 2'; input = 'default:steel_ingot'; tech = 'cut', cost = 3; } sorcery.lathe.register { output = 'basic_materials:steel_bar 18'; input = 'default:steelblock'; tech = 'cut', cost = 3*9; } sorcery.lathe.register { output = 'basic_materials:steel_bar'; input = 'default:steel_fragment', mass = 2; tech = 'cut', cost = 2; } |