Loop in lua + Lowering code length?

Gatharoth
Member
 
Posts: 196
Joined: Thu Dec 22, 2011 02:54

Loop in lua + Lowering code length?

by Gatharoth » Fri Feb 03, 2012 07:32

Alright, so I'm trying to mold the add_tool's code to my secret passage. So it'll be something like this

Your phone or window isn't wide enough to display the code box. If it's a phone, try rotating it to landscape mode.
Code: Select all
Current=0
End=90
Type Index
0Dirt
1Wood
--and so on

register_secret_passage = function(typename, nodetype)
   minetest.register_craft({
      output = 'NodeItem "'secret_passage:'..typename..'"',
      recipe = {
         { 'node "secret_passage:compoent"', nodetype, 'node "secret_passage:compoent"'},
         { 'node "secret_passage:compoent"', nodetype, 'node "secret_passage:compoent"'}
      }
   })
   minetest.register_node(typename, {
    drawtype = 'allfaces',
    tile_images = {'sp_'..nodetype..'.png'},
    inventory_image = {'sp'..nodetype..'.png'},
    sunlight_propagates = true,
    paramtype = 'light',
    walkable = false,
    climable = false,
    selection_box = {
        type = "fixed",
        fixed = {-1/7, -1/2, -1/7, 1/7, 1/2, 1/7},
    },
    material = minetest.digprop_constanttime(1.0),
    dug_item = 'NodeItem "'secret_passage:'..typename 1',
   })
end
local Call_Register = function()
  while Current <= End do
      register_secret_passage(TypeIndex[Current], TypeIndex[Current]
      Current = Current + 1
  end
end
Call_register()


Alright. There's what I threw together, now my question is would this work? If it would work, then a lot of people's mods could become less lengthy in code lines.

And yes I'd change this to a bit like MarkTraceur's add_tool.
 

kahrl
Member
 
Posts: 236
Joined: Fri Sep 02, 2011 07:51

by kahrl » Fri Feb 03, 2012 11:10

A few comments about register_secret_passage:
  • You can simplify the item strings you pass to register_craft: remove NodeItem/node and, if you want, the inner quotes
  • Remove the dug_item line: that field doesn't exist anymore (replaced by "drop") since itemdef and your intent is to simply return the same node that was dug, so it isn't required
  • inventory_image doesn't work like that, simply remove that line
  • Maybe offer a way to define the node's description?
  • Why are you defining a special selection_box? Doesn't it kinda make the secret passage obvious?

About Call_Register: I don't fully understand what you're trying to do there (what is TypeIndex?) Could you explain?
 

Gatharoth
Member
 
Posts: 196
Joined: Thu Dec 22, 2011 02:54

by Gatharoth » Fri Feb 03, 2012 19:11

kahrl wrote:A few comments about register_secret_passage:
  • You can simplify the item strings you pass to register_craft: remove NodeItem/node and, if you want, the inner quotes
  • Remove the dug_item line: that field doesn't exist anymore (replaced by "drop") since itemdef and your intent is to simply return the same node that was dug, so it isn't required
  • inventory_image doesn't work like that, simply remove that line
  • Maybe offer a way to define the node's description?
  • Why are you defining a special selection_box? Doesn't it kinda make the secret passage obvious?

About Call_Register: I don't fully understand what you're trying to do there (what is TypeIndex?) Could you explain?


Alright So this what you are thinking about?

Your phone or window isn't wide enough to display the code box. If it's a phone, try rotating it to landscape mode.
Code: Select all
Current=0
Last=99
register_secret_passage = function(typename, crafttype)
   minetest.register_craft({
      output = typename,
      recipe = {
         { "secret_passage:compoent", crafttype, 'node "secret_passage:compoent"},
         { "secret_passage:compoent", crafttype, 'node "secret_passage:compoent"}
      }
   })
   minetest.register_node(typename, {
    drawtype = 'allfaces',
    tile_images = {crafttype'.png'},
    sunlight_propagates = true,
    paramtype = 'light',
    walkable = false,
    climable = false,
    selection_box = {
        type = "fixed",
        fixed = {-1/7, -1/2, -1/7, 1/7, 1/2, 1/7},
    },
    material = minetest.digprop_constanttime(1.0),
   })
end
local Call_Register = function()
  while Current <= Last do
      register_secret_passage(TypeIndex[Current], TypeIndex[Current]
      Current = Current + 1
  end
end
Call_register()


Right now I want it to get working first, then I can work out the details like offering a way to define the node's description.

It is from older code. It was basically just creating a node that had no collision.

Okay, TypeIndex is just that, an index, better known as an Array, of strings stored into the index. Call_register is creating a loop to create a node for all the nodes inside the index. At least, that's my aim for it. XD
 

Gatharoth
Member
 
Posts: 196
Joined: Thu Dec 22, 2011 02:54

by Gatharoth » Sat Feb 04, 2012 23:59

Alright, latest code, loads fine. And here's the problem

Code:
Your phone or window isn't wide enough to display the code box. If it's a phone, try rotating it to landscape mode.
Code: Select all
minetest.register_node('secret_passage:compoent', {
    drawtype = 'allfaces',
    tile_images = {'sp_compoent.png'},
    inventory_image = 'sp_compoent.png',
    sunlight_propagates = true,
    paramtype = 'light',
    walkable = false,
    climable = false,
    selection_box = {
        type = "fixed",
    },
    material = minetest.digprop_constanttime(1.0),
})
minetest.register_craft({
    output = 'node "secret_passage:compoent" 1',
    recipe = {
        {'node "default:glass" 1', 'node "default:glass" 1', 'node "default:glass" 1'},
        {'', 'node "default:dirt" 1', ''},
    },
})
TypeIndex = {}
TypeIndex[1] = "dirt"
TypeIndex[2] = "brick"
TypeIndex[3] = "cobble"
TypeIndex[4] = "wood"
TypeIndex[5] = "sand"
TypeIndex[6] = "stone"
TypeIndex[7] = "tree"
TypeIndex[8] = "glass"
TypeIndex[9] = "jungletree"
TypeIndex[10] = "mossycobble"
TypeIndex[11] = "mese"
TypeIndex[12] = "steel_block"
TypeIndex[13] = "sandstone"
TypeIndex[14] = "gravel"
TypeIndex[15] = "clay"
TypeIndex[16] = "leaves"
TypeIndex[17] = "cactus"
TypeIndex[18] = "papyrus"
TypeIndex[19] = "bookshelf"
Current=1
Last=19
register_secret_passage = function(typename, crafttype)
   minetest.register_craft({
      output = 'node "secret_passage:'..typename,
      recipe = {
         { "secret_passage:compoent", crafttype, "secret_passage:compoent"},
         { "secret_passage:compoent", crafttype, "secret_passage:compoent"}
      }
   })
   minetest.register_node('secret_passage:'..typename, {
    drawtype = 'allfaces',
    tile_images = {crafttype..'.png'},
    inventory_image = crafttype..'.png',
    sunlight_propagates = true,
    paramtype = 'light',
    walkable = false,
    climable = false,
    selection_box = {
        type = "fixed",
    },
    material = minetest.digprop_constanttime(1.0),
   })
end
Call_Register = function()
    Craftname = "default:" .. TypeIndex[Current]
  while Current <= Last do
      register_secret_passage(TypeIndex[Current], Craftname)
      Current = Current + 1
  end
end
Call_Register()



Problem:
Your phone or window isn't wide enough to display the code box. If it's a phone, try rotating it to landscape mode.
Code: Select all
15:50:16: INFO[ServerThread]: Unknown InventoryItem name="secret_passage:compoent"
15:50:16: ERROR[ServerThread]: getCraftResult: ERROR: Serialization error in recipe {output="node "secret_passage:stone", input={"secret_passage:compoent","default:dirt","secret_passage:compoent","secret_passage:compoent","default:dirt","secret_passage:compoent",}, (input.width=3)}
15:50:16: INFO[ServerThread]: Unknown InventoryItem name="secret_passage:compoent"
15:50:16: ERROR[ServerThread]: getCraftResult: ERROR: Serialization error in recipe {output="node "secret_passage:tree", input={"secret_passage:compoent","default:dirt","secret_passage:compoent","secret_passage:compoent","default:dirt","secret_passage:compoent",}, (input.width=3)}
15:50:16: INFO[ServerThread]: Unknown InventoryItem name="secret_passage:compoent"
15:50:16: ERROR[ServerThread]: getCraftResult: ERROR: Serialization error in recipe {output="node "secret_passage:glass", input={"secret_passage:compoent","default:dirt","secret_passage:compoent","secret_passage:compoent","default:dirt","secret_passage:compoent",}, (input.width=3)}
15:50:17: INFO[ServerThread]: Unknown InventoryItem name="secret_passage:compoent"
15:50:17: ERROR[ServerThread]: getCraftResult: ERROR: Serialization error in recipe {output="node "secret_passage:jungletree", input={"secret_passage:compoent","default:dirt","secret_passage:compoent","secret_passage:compoent","default:dirt","secret_passage:compoent",}, (input.width=3)}
15:50:17: INFO[ServerThread]: Unknown InventoryItem name="secret_passage:compoent"
15:50:17: ERROR[ServerThread]: getCraftResult: ERROR: Serialization error in recipe {output="node "secret_passage:mossycobble", input={"secret_passage:compoent","default:dirt","secret_passage:compoent","secret_passage:compoent","default:dirt","secret_passage:compoent",}, (input.width=3)}
15:50:17: INFO[ServerThread]: Unknown InventoryItem name="secret_passage:compoent"
15:50:17: ERROR[ServerThread]: getCraftResult: ERROR: Serialization error in recipe {output="node "secret_passage:mese", input={"secret_passage:compoent","default:dirt","secret_passage:compoent","secret_passage:compoent","default:dirt","secret_passage:compoent",}, (input.width=3)}
15:50:17: INFO[ServerThread]: Unknown InventoryItem name="secret_passage:compoent"
15:50:17: ERROR[ServerThread]: getCraftResult: ERROR: Serialization error in recipe {output="node "secret_passage:steel_block", input={"secret_passage:compoent","default:dirt","secret_passage:compoent","secret_passage:compoent","default:dirt","secret_passage:compoent",}, (input.width=3)}
15:50:17: INFO[ServerThread]: Unknown InventoryItem name="secret_passage:compoent"
15:50:17: ERROR[ServerThread]: getCraftResult: ERROR: Serialization error in recipe {output="node "secret_passage:sandstone", input={"secret_passage:compoent","default:dirt","secret_passage:compoent","secret_passage:compoent","default:dirt","secret_passage:compoent",}, (input.width=3)}
15:50:17: INFO[ServerThread]: Unknown InventoryItem name="secret_passage:compoent"
15:50:17: ERROR[ServerThread]: getCraftResult: ERROR: Serialization error in recipe {output="node "secret_passage:gravel", input={"secret_passage:compoent","default:dirt","secret_passage:compoent","secret_passage:compoent","default:dirt","secret_passage:compoent",}, (input.width=3)}
15:50:17: INFO[ServerThread]: Unknown InventoryItem name="secret_passage:compoent"
15:50:17: ERROR[ServerThread]: getCraftResult: ERROR: Serialization error in recipe {output="node "secret_passage:clay", input={"secret_passage:compoent","default:dirt","secret_passage:compoent","secret_passage:compoent","default:dirt","secret_passage:compoent",}, (input.width=3)}
15:50:17: INFO[ServerThread]: Unknown InventoryItem name="secret_passage:compoent"
15:50:17: ERROR[ServerThread]: getCraftResult: ERROR: Serialization error in recipe {output="node "secret_passage:leaves", input={"secret_passage:compoent","default:dirt","secret_passage:compoent","secret_passage:compoent","default:dirt","secret_passage:compoent",}, (input.width=3)}
15:50:17: INFO[ServerThread]: Unknown InventoryItem name="secret_passage:compoent"
15:50:17: ERROR[ServerThread]: getCraftResult: ERROR: Serialization error in recipe {output="node "secret_passage:cactus", input={"secret_passage:compoent","default:dirt","secret_passage:compoent","secret_passage:compoent","default:dirt","secret_passage:compoent",}, (input.width=3)}
15:50:17: INFO[ServerThread]: Unknown InventoryItem name="secret_passage:compoent"
15:50:17: ERROR[ServerThread]: getCraftResult: ERROR: Serialization error in recipe {output="node "secret_passage:papyrus", input={"secret_passage:compoent","default:dirt","secret_passage:compoent","secret_passage:compoent","default:dirt","secret_passage:compoent",}, (input.width=3)}
15:50:17: INFO[ServerThread]: Unknown InventoryItem name="secret_passage:compoent"
15:50:17: ERROR[ServerThread]: getCraftResult: ERROR: Serialization error in recipe {output="node "secret_passage:bookshelf", input={"secret_passage:compoent","default:dirt","secret_passage:compoent","secret_passage:compoent","default:dirt","secret_passage:compoent",}, (input.width=3)}


However, the registering of the node and craft work.
Your phone or window isn't wide enough to display the code box. If it's a phone, try rotating it to landscape mode.
Code: Select all
15:50:16: INFO[main]: registerNode: registering content id "2084": name="secret_passage:compoent"
15:50:16: INFO[main]: registerCraft: registering craft definition: {output="NodeItem "secret_passage:compoent" 1", input={"node "default:glass" 1","node "default:glass" 1","node "default:glass" 1","","node "default:dirt" 1","",}, (input.width=3)}
15:50:16: INFO[main]: registerCraft: registering craft definition: {output="node "secret_passage:dirt", input={"secret_passage:compoent","default:dirt","secret_passage:compoent","secret_passage:compoent","default:dirt","secret_passage:compoent",}, (input.width=3)}
15:50:16: INFO[main]: registerNode: registering content id "2085": name="secret_passage:dirt"
15:50:16: INFO[main]: registerCraft: registering craft definition: {output="node "secret_passage:brick", input={"secret_passage:compoent","default:dirt","secret_passage:compoent","secret_passage:compoent","default:dirt","secret_passage:compoent",}, (input.width=3)}
15:50:16: INFO[main]: registerNode: registering content id "2086": name="secret_passage:brick"
15:50:16: INFO[main]: registerCraft: registering craft definition: {output="node "secret_passage:cobble", input={"secret_passage:compoent","default:dirt","secret_passage:compoent","secret_passage:compoent","default:dirt","secret_passage:compoent",}, (input.width=3)}
15:50:16: INFO[main]: registerNode: registering content id "2087": name="secret_passage:cobble"
15:50:16: INFO[main]: registerCraft: registering craft definition: {output="node "secret_passage:wood", input={"secret_passage:compoent","default:dirt","secret_passage:compoent","secret_passage:compoent","default:dirt","secret_passage:compoent",}, (input.width=3)}
15:50:16: INFO[main]: registerNode: registering content id "2088": name="secret_passage:wood"
15:50:16: INFO[main]: registerCraft: registering craft definition: {output="node "secret_passage:sand", input={"secret_passage:compoent","default:dirt","secret_passage:compoent","secret_passage:compoent","default:dirt","secret_passage:compoent",}, (input.width=3)}
15:50:16: INFO[main]: registerNode: registering content id "2089": name="secret_passage:sand"
15:50:16: INFO[main]: registerCraft: registering craft definition: {output="node "secret_passage:stone", input={"secret_passage:compoent","default:dirt","secret_passage:compoent","secret_passage:compoent","default:dirt","secret_passage:compoent",}, (input.width=3)}
15:50:16: INFO[main]: registerNode: registering content id "2090": name="secret_passage:stone"
15:50:16: INFO[main]: registerCraft: registering craft definition: {output="node "secret_passage:tree", input={"secret_passage:compoent","default:dirt","secret_passage:compoent","secret_passage:compoent","default:dirt","secret_passage:compoent",}, (input.width=3)}
15:50:16: INFO[main]: registerNode: registering content id "2091": name="secret_passage:tree"
15:50:16: INFO[main]: registerCraft: registering craft definition: {output="node "secret_passage:glass", input={"secret_passage:compoent","default:dirt","secret_passage:compoent","secret_passage:compoent","default:dirt","secret_passage:compoent",}, (input.width=3)}
15:50:16: INFO[main]: registerNode: registering content id "2092": name="secret_passage:glass"
15:50:16: INFO[main]: registerCraft: registering craft definition: {output="node "secret_passage:jungletree", input={"secret_passage:compoent","default:dirt","secret_passage:compoent","secret_passage:compoent","default:dirt","secret_passage:compoent",}, (input.width=3)}
15:50:16: INFO[main]: registerNode: registering content id "2093": name="secret_passage:jungletree"
15:50:16: INFO[main]: registerCraft: registering craft definition: {output="node "secret_passage:mossycobble", input={"secret_passage:compoent","default:dirt","secret_passage:compoent","secret_passage:compoent","default:dirt","secret_passage:compoent",}, (input.width=3)}
15:50:16: INFO[main]: registerNode: registering content id "2094": name="secret_passage:mossycobble"
15:50:16: INFO[main]: registerCraft: registering craft definition: {output="node "secret_passage:mese", input={"secret_passage:compoent","default:dirt","secret_passage:compoent","secret_passage:compoent","default:dirt","secret_passage:compoent",}, (input.width=3)}
15:50:16: INFO[main]: registerNode: registering content id "2095": name="secret_passage:mese"
15:50:16: INFO[main]: registerCraft: registering craft definition: {output="node "secret_passage:steel_block", input={"secret_passage:compoent","default:dirt","secret_passage:compoent","secret_passage:compoent","default:dirt","secret_passage:compoent",}, (input.width=3)}
15:50:16: INFO[main]: registerNode: registering content id "2096": name="secret_passage:steel_block"
15:50:16: INFO[main]: registerCraft: registering craft definition: {output="node "secret_passage:sandstone", input={"secret_passage:compoent","default:dirt","secret_passage:compoent","secret_passage:compoent","default:dirt","secret_passage:compoent",}, (input.width=3)}
15:50:16: INFO[main]: registerNode: registering content id "2097": name="secret_passage:sandstone"
15:50:16: INFO[main]: registerCraft: registering craft definition: {output="node "secret_passage:gravel", input={"secret_passage:compoent","default:dirt","secret_passage:compoent","secret_passage:compoent","default:dirt","secret_passage:compoent",}, (input.width=3)}
15:50:16: INFO[main]: registerNode: registering content id "2098": name="secret_passage:gravel"
15:50:16: INFO[main]: registerCraft: registering craft definition: {output="node "secret_passage:clay", input={"secret_passage:compoent","default:dirt","secret_passage:compoent","secret_passage:compoent","default:dirt","secret_passage:compoent",}, (input.width=3)}
15:50:16: INFO[main]: registerNode: registering content id "2099": name="secret_passage:clay"
15:50:16: INFO[main]: registerCraft: registering craft definition: {output="node "secret_passage:leaves", input={"secret_passage:compoent","default:dirt","secret_passage:compoent","secret_passage:compoent","default:dirt","secret_passage:compoent",}, (input.width=3)}
15:50:16: INFO[main]: registerNode: registering content id "2100": name="secret_passage:leaves"
15:50:16: INFO[main]: registerCraft: registering craft definition: {output="node "secret_passage:cactus", input={"secret_passage:compoent","default:dirt","secret_passage:compoent","secret_passage:compoent","default:dirt","secret_passage:compoent",}, (input.width=3)}
15:50:16: INFO[main]: registerNode: registering content id "2101": name="secret_passage:cactus"
15:50:16: INFO[main]: registerCraft: registering craft definition: {output="node "secret_passage:papyrus", input={"secret_passage:compoent","default:dirt","secret_passage:compoent","secret_passage:compoent","default:dirt","secret_passage:compoent",}, (input.width=3)}
15:50:16: INFO[main]: registerNode: registering content id "2102": name="secret_passage:papyrus"
15:50:16: INFO[main]: registerCraft: registering craft definition: {output="node "secret_passage:bookshelf", input={"secret_passage:compoent","default:dirt","secret_passage:compoent","secret_passage:compoent","default:dirt","secret_passage:compoent",}, (input.width=3)}
15:50:16: INFO[main]: registerNode: registering content id "2103": name="secret_passage:bookshelf"


So what's going on?
 

User avatar
sfan5
Member
 
Posts: 3636
Joined: Wed Aug 24, 2011 09:44
GitHub: sfan5
IRC: sfan5

by sfan5 » Sun Feb 05, 2012 06:51

Try to remove the "node" in the Crafting Reciepe
Mods: Mesecons | WorldEdit | Nuke
Minetest builds for Windows (32-bit & 64-bit)
 


Return to Minetest General

Who is online

Users browsing this forum: No registered users and 32 guests

cron