api.lua 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. treasures.has_value = function(tab, val)
  2. -- test if val is in tab
  3. for index, value in ipairs(tab) do
  4. if value == val then
  5. return true
  6. end
  7. end
  8. return false
  9. end
  10. local has_value=treasures.has_value
  11. -- function to read settingtypes.txt and insert values into minetest.setting
  12. treasures.import_settingtype = function(infile)
  13. local file = io.open(infile, "r")
  14. local outdata = {}
  15. -- reading header with column names
  16. local splitchar=" "
  17. local setname=minetest.settings:get_names()
  18. for line in file:lines() do
  19. if line:sub(1,1) ~= "#" then -- lines starting with # are handled as comment
  20. local attrib = line:gsub("\"",""):gsub("%(.*%) ",""):gsub("\r",""):split(splitchar,true)
  21. if(#attrib >= 3) then -- there should be at least 3 fields in a row (without the description)
  22. if has_value(setname,attrib[1]) == false then
  23. if attrib[2] == "bool" then
  24. minetest.settings:set_bool(attrib[1],attrib[3] == "true")
  25. else
  26. minetest.settings:set(attrib[1],attrib[3])
  27. end
  28. end
  29. end
  30. end
  31. end
  32. end
  33. treasures.update_treasure=function(name,tdef)
  34. if minetest.registered_items[name] == nil then
  35. treasures.add_treasure(name,tdef)
  36. else
  37. minetest.override_item(name,tdef)
  38. end
  39. end
  40. treasures.map_treasure=function(name,tdef)
  41. if tdef == nil then return end
  42. if minetest.registered_items[name] == nil then
  43. print(name.." not yet registered")
  44. treasures.add_treasure(name,M.treasure_default)
  45. end
  46. for i,attr in ipairs({"ore_type","wherein","clust_scarcity","clust_num_ores","clust_size","y_min","y_max"}) do
  47. if tdef[attr]==nil then
  48. tdef[attr]=treasures.map_def[attr]
  49. end
  50. end
  51. if tdef.ore == nil then tdef.ore=name end
  52. minetest.register_ore(tdef)
  53. end
  54. treasures.add_treasure=function(name,tdef)
  55. if tdef.tiles == nil then
  56. return
  57. end
  58. if minetest.registered_items[name] ~= nil then
  59. minetest.override_item(name,tdef)
  60. else
  61. for i,attr in ipairs({"is_ground_content","groups","sounds","drop"}) do
  62. if tdef[attr]==nil then
  63. tdef[attr]=treasures.treasure_default[attr]
  64. end
  65. end
  66. if tdef.description==nil then
  67. tdef.despricption=name
  68. end
  69. minetest.register_node(name, tdef)
  70. end
  71. end
  72. treasures.add_drop=function(name,drop_def)
  73. if drop_def.items == nil then
  74. return
  75. end
  76. local add_item = drop_def.items
  77. if add_item[1] ~= nil then
  78. add_item=add_item[1]
  79. end
  80. if minetest.registered_items[add_item:split(" ")[1]] == nil then
  81. return
  82. end
  83. if drop_def.rarety == nil then
  84. drop_def.rarety = 20
  85. end
  86. if minetest.registered_items[name] == nil then
  87. local tdef={
  88. drop = {
  89. max_items = 5,
  90. items = {drop_def}
  91. }}
  92. treasures.add_treasure(name,tdef)
  93. else
  94. local tdef={}
  95. tdef=table.copy(minetest.registered_items[name])
  96. table.insert(tdef.drop.items,math.random(1,#tdef.drop.items),drop_def)
  97. minetest.register_node(":"..name,tdef)
  98. end
  99. end
  100. treasures.register_ore=function(tdef)
  101. for i,attr in pairs(M.map_def) do
  102. if tdef[i] == nil then
  103. tdef[i]= attr
  104. end
  105. end
  106. minetest.register_ore(tdef)
  107. end
  108. treasures.add_register_treasure=function(name,tdef,mapdef)
  109. treasures.add_treasure(name,tdef)
  110. treasures.register_ore(mapdef)
  111. end