Advertisement
aka_zaratustra

prospector1.2

Nov 25th, 2020
145
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 22.59 KB | None | 0 0
  1. --Скрипт для OpenComputers, для создания точек JourneyMap
  2. --Автор: aka_zaratustra осень 2020
  3. local ver = "1.2" -- версия программы
  4.  
  5. local computer = require("computer")
  6. local component = require("component")
  7. local controller = component.inventory_controller
  8. --local json = require("json")
  9.  
  10.  
  11. local dim = "-9999" --дименшн в котором юзали проспектор
  12.  
  13. --таблица с найденными рудами
  14. local oreX = {}
  15. local oreZ = {}
  16. local oreDim = {}
  17. local oreName = {}
  18. local veinName = {}
  19.  
  20. local oreIndex = 0 --количество найденных записей о рудах
  21.  
  22.  
  23.  
  24. --таблица с найденными жидкостями
  25. local oilX = {}
  26. local oilZ = {}
  27. local oilDim = {}
  28. local oilName = {}
  29. local oilSegmentNum = {} -- номер сегмента жижи в споте от 1 до 9
  30.  
  31.  
  32. local oilIndex = 0 --количество найденных записей о жижах
  33.  
  34.  
  35.  
  36. --словарь руд
  37. local dict = {}
  38.  
  39. --overworld
  40. dict["Graphite"] = {veinName = "Graphite", dim = "0"}
  41. dict["Diamond"] = {veinName = "Graphite", dim = "0"}
  42. dict["Redstone"] = {veinName = "Redstone", dim = "0"}
  43. dict["Ruby"] = {veinName = "Redstone", dim = "0"}
  44. dict["Cinnabar"] = {veinName = "Redstone", dim = "0"}
  45. dict["Pyrite"] = {veinName = "Chalcopyrite (Low)", dim = "0"}
  46. dict["Copper"] = {veinName = "Chalcopyrite (Low)", dim = "0"}
  47. dict["Brown Limonite"] = {veinName = "Brown Limonite", dim = "0"}
  48. dict["Yellow Limonite"] = {veinName = "Brown Limonite", dim = "0"}
  49. dict["Banded Iron"] = {veinName = "Brown Limonite", dim = "0"}
  50. dict["Malachite"] = {veinName = "Brown Limonite", dim = "0"}
  51. dict["Grossular"] = {veinName = "Grossular", dim = "0"}
  52. dict["Spessartine"] = {veinName = "Grossular", dim = "0"}
  53. dict["Pyrolusite"] = {veinName = "Grossular", dim = "0"}
  54. dict["Tantalite"] = {veinName = "Grossular", dim = "0"}
  55. dict["Kyanite"] = {veinName = "Kyanite", dim = "0"}
  56. dict["Mica"] = {veinName = "Kyanite", dim = "0"}
  57. dict["Pollucite"] = {veinName = "Kyanite", dim = "0"}
  58. dict["Lazurite"] = {veinName = "Lazurite", dim = "0"}
  59. dict["Sodalite"] = {veinName = "Lazurite", dim = "0"}
  60. dict["Lapis"] = {veinName = "Lazurite", dim = "0"}
  61. dict["Calcite"] = {veinName = "Lazurite", dim = "0"}
  62. dict["Soapstone"] = {veinName = "Soapstone", dim = "0"}
  63. dict["Talc"] = {veinName = "Soapstone", dim = "0"}
  64. dict["Glauconite"] = {veinName = "Soapstone", dim = "0"}
  65. dict["Pentlandite"] = {veinName = "Soapstone", dim = "0"}
  66. dict["Magnetite"] = {veinName = "Magnetite", dim = "0"}
  67. dict["Vanadium Magnetite"] = {veinName = "Magnetite", dim = "0"}
  68. dict["Gold"] = {veinName = "Magnetite", dim = "0"}
  69. dict["Lignite Coal"] = {veinName = "Coal", dim = "0"}
  70. dict["Apatite"] = {veinName = "Apatite", dim = "0"}
  71. dict["Tricalcium Phosphate"] = {veinName = "Apatite", dim = "0"}
  72. dict["Pyrochlore"] = {veinName = "Apatite", dim = "0"}
  73. dict["Cassiterite Sand"] = {veinName = "Cassiterite", dim = "0"}
  74. dict["Garnet Sand"] = {veinName = "Cassiterite", dim = "0"}
  75. dict["Asbestos"] = {veinName = "Cassiterite", dim = "0"}
  76. dict["Diatomite"] = {veinName = "Cassiterite", dim = "0"}
  77. dict["Basaltic Mineral Sand"] = {veinName = "Basaltic Mineral", dim = "0"}
  78. dict["Granitic Mineral Sand"] = {veinName = "Basaltic Mineral", dim = "0"}
  79. dict["Gypsum"] = {veinName = "Basaltic Mineral", dim = "0"}
  80. dict["Kaolinite"] = {veinName = "Kaolinite", dim = "0"}
  81. dict["Zeolite"] = {veinName = "Kaolinite", dim = "0"}
  82. dict["Glauconite Sand"] = {veinName = "Kaolinite", dim = "0"}
  83. dict["Rock Salt"] = {veinName = "Rock Salt", dim = "0"}
  84. dict["Salt"] = {veinName = "Rock Salt", dim = "0"}
  85. dict["Lepidolite"] = {veinName = "Rock Salt", dim = "0"}
  86. dict["Spodumene"] = {veinName = "Rock Salt", dim = "0"}
  87. dict["Oilsands"] = {veinName = "Oilsands", dim = "0"}
  88. dict["Tin"] = {veinName = "Tin", dim = "0"}
  89. dict["Vermiculite"] = {veinName = "Chalcopyrite (High)", dim = "0"}
  90. dict["Alunite"] = {veinName = "Chalcopyrite (High)", dim = "0"}
  91. dict["Dolomite"] = {veinName = "Dolomite", dim = "0"}
  92. dict["Wollastonite"] = {veinName = "Dolomite", dim = "0"}
  93. dict["Trona"] = {veinName = "Dolomite", dim = "0"}
  94. dict["Andradite"] = {veinName = "Dolomite", dim = "0"}
  95.  
  96. --nether
  97. dict["Redstone"] = {veinName = "Redstone", dim = "-1"}
  98. dict["Ruby"] = {veinName = "Redstone", dim = "-1"}
  99. dict["Cinnabar"] = {veinName = "Redstone", dim = "-1"}
  100. dict["Chalcopyrite"] = {veinName = "Chalcopyrite (Low)", dim = "-1"}
  101. dict["Iron"] = {veinName = "Chalcopyrite (Low)", dim = "-1"}
  102. dict["Brown Limonite"] = {veinName = "Brown Limonite", dim = "-1"}
  103. dict["Yellow Limonite"] = {veinName = "Brown Limonite", dim = "-1"}
  104. dict["Banded Iron"] = {veinName = "Brown Limonite", dim = "-1"}
  105. dict["Malachite"] = {veinName = "Brown Limonite", dim = "-1"}
  106. dict["Grossular"] = {veinName = "Grossular", dim = "-1"}
  107. dict["Spessartine"] = {veinName = "Grossular", dim = "-1"}
  108. dict["Pyrolusite"] = {veinName = "Grossular", dim = "-1"}
  109. dict["Tantalite"] = {veinName = "Grossular", dim = "-1"}
  110. dict["Sulfur"] = {veinName = "Sulfur", dim = "-1"}
  111. dict["Sphalerite"] = {veinName = "Sulfur", dim = "-1"}
  112. dict["Beryllium"] = {veinName = "Beryllium", dim = "-1"}
  113. dict["Emerald"] = {veinName = "Beryllium", dim = "-1"}
  114. dict["Thorium"] = {veinName = "Beryllium", dim = "-1"}
  115. dict["Saltpeter"] = {veinName = "Saltpeter", dim = "-1"}
  116. dict["Diatomite"] = {veinName = "Saltpeter", dim = "-1"}
  117. dict["Electrotine"] = {veinName = "Saltpeter", dim = "-1"}
  118. dict["Alunite"] = {veinName = "Saltpeter", dim = "-1"}
  119. dict["Wulfenite"] = {veinName = "Wulfenite", dim = "-1"}
  120. dict["Molybdenite"] = {veinName = "Wulfenite", dim = "-1"}
  121. dict["Molybdenum"] = {veinName = "Wulfenite", dim = "-1"}
  122. dict["Powellite"] = {veinName = "Wulfenite", dim = "-1"}
  123. dict["Quartzite"] = {veinName = "Quartz", dim = "-1"}
  124. dict["Barite"] = {veinName = "Quartz", dim = "-1"}
  125. dict["Certus Quartz"] = {veinName = "Quartz", dim = "-1"}
  126. dict["Tetrahedrite"] = {veinName = "Tetrahedrite", dim = "-1"}
  127. dict["Stibnite"] = {veinName = "Tetrahedrite", dim = "-1"}
  128.  
  129. --twilight
  130. dict["Graphite"] = {veinName = "Graphite", dim = "7"}
  131. dict["Diamond"] = {veinName = "Graphite", dim = "7"}
  132. dict["Brown Limonite"] = {veinName = "Brown Limonite", dim = "7"}
  133. dict["Yellow Limonite"] = {veinName = "Brown Limonite", dim = "7"}
  134. dict["Banded Iron"] = {veinName = "Brown Limonite", dim = "7"}
  135. dict["Malachite"] = {veinName = "Brown Limonite", dim = "7"}
  136. dict["Lazurite"] = {veinName = "Lazurite", dim = "7"}
  137. dict["Sodalite"] = {veinName = "Lazurite", dim = "7"}
  138. dict["Lapis"] = {veinName = "Lazurite", dim = "7"}
  139. dict["Calcite"] = {veinName = "Lazurite", dim = "7"}
  140. dict["Soapstone"] = {veinName = "Soapstone", dim = "7"}
  141. dict["Talc"] = {veinName = "Soapstone", dim = "7"}
  142. dict["Glauconite"] = {veinName = "Soapstone", dim = "7"}
  143. dict["Pentlandite"] = {veinName = "Soapstone", dim = "7"}
  144. dict["Magnetite"] = {veinName = "Magnetite", dim = "7"}
  145. dict["Vanadium Magnetite"] = {veinName = "Magnetite", dim = "7"}
  146. dict["Gold"] = {veinName = "Magnetite", dim = "7"}
  147. dict["Coal"] = {veinName = "Coal", dim = "7"}
  148. dict["Lignite Coal"] = {veinName = "Coal", dim = "7"}
  149. dict["Apatite"] = {veinName = "Apatite", dim = "7"}
  150. dict["Tricalcium Phosphate"] = {veinName = "Apatite", dim = "7"}
  151. dict["Pyrochlore"] = {veinName = "Apatite", dim = "7"}
  152. dict["Rock Salt"] = {veinName = "Rock Salt", dim = "7"}
  153. dict["Salt"] = {veinName = "Rock Salt", dim = "7"}
  154. dict["Lepidolite"] = {veinName = "Rock Salt", dim = "7"}
  155. dict["Spodumene"] = {veinName = "Rock Salt", dim = "7"}
  156. dict["Oilsands"] = {veinName = "Oilsands", dim = "7"}
  157. dict["Tin"] = {veinName = "Tin", dim = "7"}
  158. dict["Cassiterite"] = {veinName = "Tin", dim = "7"}
  159. dict["Wulfenite"] = {veinName = "Wulfenite", dim = "7"}
  160. dict["Molybdenite"] = {veinName = "Wulfenite", dim = "7"}
  161. dict["Molybdenum"] = {veinName = "Wulfenite", dim = "7"}
  162. dict["Powellite"] = {veinName = "Wulfenite", dim = "7"}
  163. dict["Perditio Infused Stone"] = {veinName = "Perditio Infused Stone", dim = "7"}
  164. dict["Ordo Infused Stone"] = {veinName = "Perditio Infused Stone", dim = "7"}
  165. dict["Terra Infused Stone"] = {veinName = "Terra Infused Stone", dim = "7"}
  166. dict["Aer Infused Stone"] = {veinName = "Terra Infused Stone", dim = "7"}
  167. dict["Aqua Infused Stone"] = {veinName = "Aqua Infused Stone", dim = "7"}
  168. dict["Ignis Infused Stone"] = {veinName = "Aqua Infused Stone", dim = "7"}
  169. dict["Galena"] = {veinName = "Galena", dim = "7"}
  170. dict["Silver"] = {veinName = "Galena", dim = "7"}
  171. dict["Lead"] = {veinName = "Galena", dim = "7"}
  172. dict["Almandine"] = {veinName = "Almandine", dim = "7"}
  173. dict["Pyrope"] = {veinName = "Almandine", dim = "7"}
  174. dict["Sapphire"] = {veinName = "Almandine", dim = "7"}
  175. dict["Green Sapphire"] = {veinName = "Almandine", dim = "7"}
  176. dict["Bentonite"] = {veinName = "Bentonite", dim = "7"}
  177. dict["Magnesite"] = {veinName = "Bentonite", dim = "7"}
  178. dict["Olivine"] = {veinName = "Bentonite", dim = "7"}
  179. dict["Glauconite"] = {veinName = "Bentonite", dim = "7"}
  180. dict["Garnierite"] = {veinName = "Garnierite", dim = "7"}
  181. dict["Nickel"] = {veinName = "Garnierite", dim = "7"}
  182. dict["Cobaltite"] = {veinName = "Garnierite", dim = "7"}
  183. dict["Pentlandite"] = {veinName = "Garnierite", dim = "7"}
  184.  
  185. --moon
  186. dict["Chalcopyrite"] = {veinName = "Chalcopyrite (Low)", dim = "28"}
  187. dict["Iron"] = {veinName = "Chalcopyrite (Low)", dim = "28"}
  188. dict["Pyrite"] = {veinName = "Chalcopyrite (Low)", dim = "28"}
  189. dict["Copper"] = {veinName = "Chalcopyrite (Low)", dim = "28"}
  190. dict["Tin"] = {veinName = "Tin", dim = "28"}
  191. dict["Cassiterite"] = {veinName = "Tin", dim = "28"}
  192. dict["Wulfenite"] = {veinName = "Wulfenite", dim = "28"}
  193. dict["Molybdenite"] = {veinName = "Wulfenite", dim = "28"}
  194. dict["Molybdenum"] = {veinName = "Wulfenite", dim = "28"}
  195. dict["Powellite"] = {veinName = "Wulfenite", dim = "28"}
  196. dict["Galena"] = {veinName = "Galena", dim = "28"}
  197. dict["Silver"] = {veinName = "Galena", dim = "28"}
  198. dict["Lead"] = {veinName = "Galena", dim = "28"}
  199. dict["Chromite"] = {veinName = "Ilmenite", dim = "28"}
  200. dict["Uvarovite"] = {veinName = "Ilmenite", dim = "28"}
  201. dict["Perlite"] = {veinName = "Ilmenite", dim = "28"}
  202. dict["Bauxite"] = {veinName = "Bauxite", dim = "28"}
  203. dict["Aluminium"] = {veinName = "Bauxite", dim = "28"}
  204. dict["Bastnasite"] = {veinName = "Bastnasite", dim = "28"}
  205. dict["Monazite"] = {veinName = "Bastnasite", dim = "28"}
  206. dict["Neodymium"] = {veinName = "Bastnasite", dim = "28"}
  207. dict["Quartzite"] = {veinName = "Quartzite", dim = "28"}
  208. dict["Barite"] = {veinName = "Quartzite", dim = "28"}
  209. dict["Certus Quartz"] = {veinName = "Quartzite", dim = "28"}
  210.  
  211. function getVeinName(sOre) --возвращает имя жилы по имени руды и дименшну
  212.    
  213.     for OreName, vein in pairs(dict) do
  214.         if OreName == sOre then
  215.             --print(dim, vein.dim)
  216.            
  217.             if vein.dim == dim then
  218.                 return vein.veinName
  219.             end
  220.         end
  221.     end
  222.    
  223.     --print("Обнаружена неизвестная руда: "..sOre)
  224.     return nil
  225. end
  226.  
  227.  
  228. function parseX(s) --парсит координату X
  229.     -- -8,-104 has Banded Iron
  230.     pos2 = string.find(s, ",") - 1
  231.     return string.sub(s, 1 , pos2)
  232. end
  233.  
  234. function parseZ(s) --парсит координату Z
  235.     -- -8,-104 has Banded Iron
  236.     pos1 = string.find(s, ",") + 1
  237.     pos2 = string.find(s, "has")
  238.     if pos2 == nil then
  239.         pos2 = pos1
  240.     else
  241.         pos2 = pos2 - 2
  242.     end
  243.     return string.sub(s, pos1 , pos2)
  244. end
  245.  
  246. function parseName(s)  --парсит имя руды
  247.     pos1 = string.find(s, "has") + 4
  248.     return string.sub(s, pos1)
  249. end
  250.  
  251.  
  252. function processProspectionTable(tab) --Обработать данные таблицы
  253.    
  254.     Ores = false --признак, является ли эта таблица рудной
  255.     Oils = false --признак, является ли эта таблица жидкостной
  256.     OilsSum = false --признак, является ли эта таблица с итогами жиж
  257.     for name, val in pairs(tab) do --просмотрим таблицу данных
  258.            
  259.             if type(name) == "number" then --интересуют только строчки с номером
  260.                
  261.                 -------------------------------
  262.                
  263.                 if name == 1 then
  264.                
  265.                     --руды
  266.                     if string.find(val, "Ores Found") ~= nil then -- если встретили текст "Ores Found", значит перед нами таблица руд
  267.                         Ores = true
  268.                         --print ("Ores Found")
  269.                     end
  270.                    
  271.                     --жижи
  272.                     if string.find(val, "Oils") ~= nil then -- если встретили текст "Oils", значит перед нами таблица жидкостей
  273.                         Oils = true
  274.                         --print ("Oils")
  275.                     end
  276.                    
  277.                     --жижи итоги
  278.                     if string.find(val, "Corners") ~= nil then -- если встретили текст "Corners", значит перед нами таблица итогов жидкостей
  279.                         OilsSum = true
  280.                         --print ("Oils Sums")
  281.                     end
  282.  
  283.                 end
  284.                
  285.                 pos = string.find(val, "Dim:") -- если это строчка с дименшном типа "2 Dim: 0"
  286.                 if  pos~= nil then
  287.                     dim = string.sub(val, pos + 5) --запомним дименшн
  288.                 end
  289.  
  290.                 ---------------------------------
  291.                 --руды
  292.                 if Ores == true then -- если это таблица руд
  293.                    
  294.                        
  295.                     pos =  string.find(val, "has") -- 6 72,24 has Banded Iron
  296.                     --print(val, pos)
  297.                     if pos ~= nil then --если есть имя руды
  298.                         oreIndex = oreIndex + 1
  299.                         oreX[oreIndex] = parseX(val)
  300.                         oreZ[oreIndex] = parseZ(val)
  301.                         oreDim[oreIndex] = dim
  302.                         oreName[oreIndex] = parseName(val)
  303.                     end
  304.                 end
  305.                
  306.                 ---------------------------------
  307.                 --жидкости
  308.                 if Oils == true then -- если это таблица жидкостей
  309.                     if name ~= 1 and name ~= 2 then -- любая строчка кроме второй содержит запись о жиже
  310.                        
  311.                         oilIndex = oilIndex + 1
  312.                         oilX[oilIndex] = -9999 --актуальное значение мы получим в следующей таблице позже
  313.                         oilZ[oilIndex] = -9999
  314.                         oilDim[oilIndex] = dim
  315.                         oilName[oilIndex] = string.sub(val, 4) --1: 9-15L Heavy Oil
  316.                         oilSegmentNum[oilIndex] = name - 2
  317.                        
  318.                         --print(val)
  319.                     end
  320.                 end
  321.                
  322.                 ---------------------------------
  323.                 --итоги жидкостей
  324.                 if OilsSum == true then -- если это таблица итогов жидкостей
  325.                     if name == 2 then --X: 0 Z: -128
  326.                         --print(val)
  327.                         --парсим координты сектора [5]
  328.                         Zpos =  string.find(val, "Z")
  329.                         xc = string.sub(val, 4, Zpos - 2)
  330.                         zc = string.sub(val, Zpos + 3)
  331.                         --print(xc, zc)
  332.                        
  333.                         --на этом шаге у нас таблице жидкостей есть записи о жижах текущей флешки, но без координату
  334.                         --и есть координаты сектора [5]
  335.                         --проставим координаты каждого сектора
  336.                         -- [1][2][3]
  337.                         -- [4][5][6]
  338.                         -- [7][8][9]
  339.                         for i=1, oilIndex do
  340.                             if oilX[i] == -9999 then -- находим запись, которой еще не присвоены координаты
  341.                                 if oilSegmentNum[i] == 1 then
  342.                                     oilX[i] = tostring(math.floor(xc -8*16))
  343.                                     oilZ[i] = tostring(math.floor(zc -8*16))
  344.                                 elseif oilSegmentNum[i] == 2 then
  345.                                     oilX[i] = tostring(math.floor(xc))
  346.                                     oilZ[i] = tostring(math.floor(zc -8*16))
  347.                                 elseif oilSegmentNum[i] == 3 then
  348.                                     oilX[i] = tostring(math.floor(xc +8*16))
  349.                                     oilZ[i] = tostring(math.floor(zc -8*16))
  350.                                 elseif oilSegmentNum[i] == 4 then
  351.                                     oilX[i] = tostring(math.floor(xc -8*16))
  352.                                     oilZ[i] = tostring(math.floor(zc))
  353.                                 elseif oilSegmentNum[i] == 5 then
  354.                                     oilX[i] = tostring(math.floor(xc))
  355.                                     oilZ[i] = tostring(math.floor(zc))
  356.                                 elseif oilSegmentNum[i] == 6 then
  357.                                     oilX[i] = tostring(math.floor(xc +8*16))
  358.                                     oilZ[i] = tostring(math.floor(zc))
  359.                                 elseif oilSegmentNum[i] == 7 then
  360.                                     oilX[i] = tostring(math.floor(xc -8*16))
  361.                                     oilZ[i] = tostring(math.floor(zc +8*16))
  362.                                 elseif oilSegmentNum[i] == 8 then
  363.                                     oilX[i] = tostring(math.floor(xc))
  364.                                     oilZ[i] = tostring(math.floor(zc +8*16))
  365.                                 elseif oilSegmentNum[i] == 9 then
  366.                                     oilX[i] = tostring(math.floor(xc +8*16))
  367.                                     oilZ[i] = tostring(math.floor(zc +8*16))
  368.                                 end
  369.                             end
  370.                         end
  371.                        
  372.                     end
  373.                 end
  374.                
  375.                
  376.                
  377.                
  378.             end
  379.            
  380.            
  381.             --file:write(name .." ".. val)
  382.             --file:write("\n")
  383.     end
  384.    
  385. end
  386.  
  387. function processProspectionData(tab) --Обработать данные флешки
  388.     for name, val in pairs(tab) do --просмотрим таблицу данных проспектора
  389.             --print(name, val)
  390.             --os.sleep(1)
  391.             if name ~= "n" then
  392.                 processProspectionTable(val)
  393.             end
  394.            
  395.     end
  396.    
  397. end
  398.  
  399.  
  400.  
  401. --Пример JSON
  402. -- {
  403.   -- "id": "iron_168,83,984",
  404.   -- "name": "iron",
  405.   -- "icon": "waypoint-normal.png",
  406.   -- "x": 168,
  407.   -- "y": 83,
  408.   -- "z": 984,
  409.   -- "r": 255,
  410.   -- "g": 255,
  411.   -- "b": 255,
  412.   -- "enable": false,
  413.   -- "type": "Normal",
  414.   -- "origin": "JourneyMap",
  415.   -- "dimensions": [
  416.     -- 0
  417.   -- ]
  418. -- }
  419. function wlJSON(key, val)--запишем строчку в JSON файл
  420.     file:write("  \"".. key.. "\": ".. val ..",")  
  421.     file:write("\n")
  422. end
  423.  
  424. function generateOreJSON(i) -- генерирует точку JourneyMap (файл JSON) для жилы
  425.    
  426.     id = veinName[i].."_"..oreX[i]..",1,"..oreZ[i] -- пример Glauconite Sand_x,1,z
  427.    
  428.     fileName = id..".json" -- пример имени файла: "Glauconite Sand_x,1,z.json"
  429.     file=io.open("waypoints".."/" .. fileName,"w")
  430.    
  431.    
  432.     if file == nil then --если файл не удалось создать, значит нет папки. создадим
  433.         os.execute("mkdir " .. "waypoints")
  434.         file=io.open("waypoints".."/" .. fileName,"w")
  435.     end
  436.    
  437.     --заполним тело JSON
  438.     file:write("{") file:write("\n")
  439.     wlJSON("id", "\""..id.."\"")
  440.     wlJSON("name", "\""..veinName[i].."\"")
  441.     wlJSON("icon", "\"".."waypoint-normal.png".."\"")
  442.     wlJSON("x", oreX[i])
  443.     wlJSON("y", "1")
  444.     wlJSON("z", oreZ[i])
  445.     wlJSON("r", "255")
  446.     wlJSON("g", "255")
  447.     wlJSON("b", "255")
  448.     wlJSON("enable", "true")
  449.     wlJSON("type", "\"".."Normal".."\"")
  450.     wlJSON("origin", "\"".."JourneyMap".."\"")
  451.     file:write("  \"dimensions\": [") file:write("\n")
  452.     file:write("    ".. oreDim[i]) file:write("\n")
  453.     file:write("  ]") file:write("\n")
  454.     file:write("}")
  455.    
  456.     file:close()
  457. end
  458.  
  459. function generateOilJSON(i) -- генерирует точку JourneyMap (файл JSON) ждя жидкости
  460.    
  461.     id = oilName[i].."_"..oilX[i]..",1,"..oilZ[i] -- пример 9-15L Heavy Oil_x,1,z
  462.    
  463.    
  464.     fileName = id..".json" -- пример имени файла: "9-15L Heavy Oil_x,1,z.json"
  465.     file=io.open("waypoints".."/" .. fileName,"w")
  466.    
  467.    
  468.     if file == nil then --если файл не удалось создать, значит нет папки. создадим
  469.         os.execute("mkdir " .. "waypoints")
  470.         file=io.open("waypoints".."/" .. fileName,"w")
  471.     end
  472.    
  473.     --заполним тело JSON
  474.     file:write("{") file:write("\n")
  475.     wlJSON("id", "\""..id.."\"")
  476.     wlJSON("name", "\""..oilName[i].."\"")
  477.     wlJSON("icon", "\"".."waypoint-normal.png".."\"")
  478.     wlJSON("x", oilX[i])
  479.     wlJSON("y", "1")
  480.     wlJSON("z", oilZ[i])
  481.     wlJSON("r", "127")
  482.     wlJSON("g", "127")
  483.     wlJSON("b", "127")
  484.     wlJSON("enable", "true")
  485.     wlJSON("type", "\"".."Normal".."\"")
  486.     wlJSON("origin", "\"".."JourneyMap".."\"")
  487.     file:write("  \"dimensions\": [") file:write("\n")
  488.     file:write("    ".. oilDim[i]) file:write("\n")
  489.     file:write("  ]") file:write("\n")
  490.     file:write("}")
  491.    
  492.     file:close()
  493. end
  494. ----------------------------------------------------------------
  495. print ("Программа генерации точек JourneyMap запущена.")
  496. print ("Версия "..ver)
  497. print ("Ищем флешки с данными проспектора и просматриваем их...")
  498.  
  499. --ищем флешки и сканируем их
  500. for i=1,5 do --цикл просмотра сторон адаптера
  501.     slotNumbers = controller.getInventorySize(i) --получаем количество слотов инвентори в сундуке, в котором лежат флешки
  502.     if slotNumbers ~= nil then --если вообще сундук там есть
  503.         for slot=1, slotNumbers do --цикл по слотам сундука
  504.             itemStack = controller.getStackInSlot(i, slot)
  505.            
  506.            
  507.            
  508.             if itemStack ~= nil then --если в слоте что-то есть
  509.                 --print(itemStack.label)
  510.                 --if itemStack.label == "Data Stick" then
  511.                     --print("Найдена флешка в слоте "..slot.."...")
  512.                     --print("Item hasTag: ", itemStack.hasTag)
  513.                     --nbt = item.readTag(itemStack)
  514.                     for name, val in pairs(itemStack) do --просмотрим таблицу реультата анализа предмета
  515.                         if name == "Analyzed Prospection Data" then
  516.                             --print(name, val)
  517.                             processProspectionData(val)
  518.                         end
  519.                     end
  520.  
  521.                 --end
  522.             end
  523.         end
  524.     end
  525. end
  526.  
  527. --проставим имя жилы
  528. for i=1, oreIndex do
  529.     sOre = oreName[i]
  530.     veinName[i] = getVeinName(sOre)
  531. end
  532.  
  533.  
  534.  
  535. --Пометим дубликаты, чтобы не создавать лишние точки. У дубликатов имя жилы приравнивается к nil
  536. for i=1, oreIndex do
  537.     for j = i+1, oreIndex do
  538.         if oreX[i] == oreX[j] and oreZ[i] == oreZ[j] and oreDim[i] == oreDim[j] and veinName[i] == veinName[j] then --если записи полностью одинаковые, то одну из них помечаем как дубликат
  539.             veinName[j] = nil -- стираем имя жилы у второй записи
  540.         end
  541.     end
  542. end
  543.  
  544. print("Ores")
  545. for i=1, oreIndex do
  546.     if veinName[i] ~= nil then
  547.         print("x: "..oreX[i], "z: "..oreZ[i], "d: "..oreDim[i], "vein: "..veinName[i])
  548.     end
  549. end
  550. print("Oils")
  551. for i=1, oilIndex do
  552.     print("x: "..oilX[i], "z: "..oilZ[i], "d: "..oilDim[i], "oil: "..oilName[i])
  553. end
  554.  
  555.  
  556. print("--------------")
  557.  
  558. --Генерируем JSON файлы
  559. j1 = 0
  560.  
  561. --для руд
  562. for i=1, oreIndex do
  563.     if veinName[i] ~= nil then --если у записи не пустое имя жилы, то создаем точку
  564.         generateOreJSON(i)
  565.         j1=j1+1
  566.     end
  567.    
  568. end
  569. print("Созадно меток руды: "..j1..".")
  570.  
  571. j2 = 0
  572. --для жидкостей
  573. for i=1, oilIndex do
  574.     generateOilJSON(i)
  575.     j2=j2+1
  576. end
  577. print("Создано меток жидкостей под бэдроком: "..j2..".")
  578.  
  579. print("Итого в папке waypoints созадно файлов: "..j1+j2..".")
  580.  
  581.  
  582.  
  583.  
  584.  
  585. os.exit()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement