Advertisement
bob558

prospect1.5_Zaratustra

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