Advertisement
aka_zaratustra

prospect1.5.1

Jul 13th, 2021
257
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 30.20 KB | None | 0 0
  1. --Скрипт для OpenComputers, для создания точек JourneyMap
  2. --Автор: aka_zaratustra осень 2020
  3. local ver = "1.5.1" -- версия программы
  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.     {OreName = "Graphite", veinName = "Graphite", dim = "38"},
  300.     {OreName = "Diamond", veinName = "Graphite", dim = "38"},
  301. }
  302. --словарь жидкостей
  303. dictOils = {}
  304.  
  305. dictOils["fluid.liquid_light_oil"] = "Light Oil"
  306. dictOils["fluid.liquid_medium_oil"] = "Raw Oil"
  307. dictOils["fluid.liquid_heavy_oil"] = "Heavy Oil"
  308. dictOils["fluid.gas_natural_gas"] = "Natural Gas"
  309.  
  310.  
  311. function translateOilName(oilName)  --переводит имя жидкости согласно словарю dictOils
  312.     for key, val  in pairs(dictOils) do
  313.         pos = string.find(oilName , "fluid")
  314.         --print(pos)
  315.         if pos~=nil then
  316.             st = string.sub(oilName, pos)
  317.             if st == key then
  318.                 return string.sub(oilName, 1, pos-1).. val
  319.             end
  320.         end
  321.     end
  322.     print(oilName, "соответствий в словаре не нашли")
  323.     return oilName
  324. end
  325.  
  326. function getVeinName(sOre) --возвращает имя жилы по имени руды и дименшну
  327.     --print(sOre)
  328.    
  329.     for key, val in pairs(dict) do
  330.         if val.OreName == sOre then
  331.             --print(dim, vein.dim)
  332.             if val.dim == dim then
  333.                 return val.veinName
  334.             end
  335.         end
  336.     end
  337.    
  338.     --print("Обнаружена неизвестная руда: "..sOre)
  339.     --fileLog:write("Обнаружена неизвестная руда: "..sOre) fileLog:write("\n")
  340.     return nil
  341. end
  342.  
  343.  
  344. function parseX(s) --парсит координату X
  345.     -- -8,-104 has Banded Iron
  346.     pos2 = string.find(s, ",") - 1
  347.     return string.sub(s, 1 , pos2)
  348. end
  349.  
  350. function parseZ(s) --парсит координату Z
  351.     -- -8,-104 has Banded Iron
  352.     pos1 = string.find(s, ",") + 1
  353.     pos2 = string.find(s, "has")
  354.     if pos2 == nil then
  355.         pos2 = pos1
  356.     else
  357.         pos2 = pos2 - 2
  358.     end
  359.     return string.sub(s, pos1 , pos2)
  360. end
  361.  
  362. function parseName(s)  --парсит имя руды
  363.     pos1 = string.find(s, "has") + 4
  364.     return string.sub(s, pos1)
  365. end
  366.  
  367.  
  368. function processProspectionTable(tab) --Обработать данные таблицы
  369.    
  370.     Ores = false --признак, является ли эта таблица рудной
  371.     Oils = false --признак, является ли эта таблица жидкостной
  372.     OilsSum = false --признак, является ли эта таблица с итогами жиж
  373.     for name, val in pairs(tab) do --просмотрим таблицу данных
  374.            
  375.             if type(name) == "number" then --интересуют только строчки с номером
  376.                
  377.                 -------------------------------
  378.                
  379.                 if name == 1 then
  380.                
  381.                     --руды
  382.                     if string.find(val, "Ores Found") ~= nil then -- если встретили текст "Ores Found", значит перед нами таблица руд
  383.                         Ores = true
  384.                         --print ("Ores Found")
  385.                     end
  386.                    
  387.                     --жижи
  388.                     if string.find(val, "Oils") ~= nil then -- если встретили текст "Oils", значит перед нами таблица жидкостей
  389.                         Oils = true
  390.                         --print ("Oils")
  391.                     end
  392.                    
  393.                     --жижи итоги
  394.                     if string.find(val, "Corners") ~= nil then -- если встретили текст "Corners", значит перед нами таблица итогов жидкостей
  395.                         OilsSum = true
  396.                         --print ("Oils Sums")
  397.                     end
  398.  
  399.                 end
  400.                
  401.                 pos = string.find(val, "Dim:") -- если это строчка с дименшном типа "2 Dim: 0"
  402.                 if  pos~= nil then
  403.                     dim = string.sub(val, pos + 5) --запомним дименшн
  404.                 end
  405.  
  406.                 ---------------------------------
  407.                 --руды
  408.                 if Ores == true then -- если это таблица руд
  409.                    
  410.                        
  411.                     pos =  string.find(val, "has") -- 6 72,24 has Banded Iron
  412.                     --print(val, pos)
  413.                     if pos ~= nil then --если есть имя руды
  414.                         oreIndex = oreIndex + 1
  415.                         oreX[oreIndex] = parseX(val)
  416.                         oreZ[oreIndex] = parseZ(val)
  417.                         oreDim[oreIndex] = dim
  418.                         oreName[oreIndex] = parseName(val)
  419.                     end
  420.                 end
  421.                
  422.                 ---------------------------------
  423.                 --жидкости
  424.                 if Oils == true then -- если это таблица жидкостей
  425.                     if name ~= 1 and name ~= 2 then -- любая строчка кроме второй содержит запись о жиже
  426.                        
  427.                         oilIndex = oilIndex + 1
  428.                         oilX[oilIndex] = -9999 --актуальное значение мы получим в следующей таблице позже
  429.                         oilZ[oilIndex] = -9999
  430.                         oilDim[oilIndex] = dim
  431.                         oilName[oilIndex] = string.sub(val, 4) --1: 9-15L Heavy Oil
  432.                         oilSegmentNum[oilIndex] = name - 2
  433.                        
  434.                         --print(val)
  435.                     end
  436.                 end
  437.                
  438.                 ---------------------------------
  439.                 --итоги жидкостей
  440.                 if OilsSum == true then -- если это таблица итогов жидкостей
  441.                     if name == 2 then --X: 0 Z: -128
  442.                         --print(val)
  443.                         --парсим координты сектора [5]
  444.                         Zpos =  string.find(val, "Z")
  445.                         xc = string.sub(val, 4, Zpos - 2)
  446.                         zc = string.sub(val, Zpos + 3)
  447.                         --print(xc, zc)
  448.                        
  449.                         --на этом шаге у нас таблице жидкостей есть записи о жижах текущей флешки, но без координату
  450.                         --и есть координаты сектора [5]
  451.                         --проставим координаты каждого сектора
  452.                         -- [1][2][3]
  453.                         -- [4][5][6]
  454.                         -- [7][8][9]
  455.                         for i=1, oilIndex do
  456.                             if oilX[i] == -9999 then -- находим запись, которой еще не присвоены координаты
  457.                                 if oilSegmentNum[i] == 1 then
  458.                                     oilX[i] = tostring(math.floor(xc -8*16))
  459.                                     oilZ[i] = tostring(math.floor(zc -8*16))
  460.                                 elseif oilSegmentNum[i] == 2 then
  461.                                     oilX[i] = tostring(math.floor(xc))
  462.                                     oilZ[i] = tostring(math.floor(zc -8*16))
  463.                                 elseif oilSegmentNum[i] == 3 then
  464.                                     oilX[i] = tostring(math.floor(xc +8*16))
  465.                                     oilZ[i] = tostring(math.floor(zc -8*16))
  466.                                 elseif oilSegmentNum[i] == 4 then
  467.                                     oilX[i] = tostring(math.floor(xc -8*16))
  468.                                     oilZ[i] = tostring(math.floor(zc))
  469.                                 elseif oilSegmentNum[i] == 5 then
  470.                                     oilX[i] = tostring(math.floor(xc))
  471.                                     oilZ[i] = tostring(math.floor(zc))
  472.                                 elseif oilSegmentNum[i] == 6 then
  473.                                     oilX[i] = tostring(math.floor(xc +8*16))
  474.                                     oilZ[i] = tostring(math.floor(zc))
  475.                                 elseif oilSegmentNum[i] == 7 then
  476.                                     oilX[i] = tostring(math.floor(xc -8*16))
  477.                                     oilZ[i] = tostring(math.floor(zc +8*16))
  478.                                 elseif oilSegmentNum[i] == 8 then
  479.                                     oilX[i] = tostring(math.floor(xc))
  480.                                     oilZ[i] = tostring(math.floor(zc +8*16))
  481.                                 elseif oilSegmentNum[i] == 9 then
  482.                                     oilX[i] = tostring(math.floor(xc +8*16))
  483.                                     oilZ[i] = tostring(math.floor(zc +8*16))
  484.                                 end
  485.                             end
  486.                         end
  487.                        
  488.                     end
  489.                 end
  490.                
  491.                
  492.                
  493.                
  494.             end
  495.            
  496.            
  497.             --file:write(name .." ".. val)
  498.             --file:write("\n")
  499.     end
  500.    
  501. end
  502.  
  503. function processProspectionData(tab) --Обработать данные флешки
  504.     for name, val in pairs(tab) do --просмотрим таблицу данных проспектора
  505.             --print(name, val)
  506.             --os.sleep(1)
  507.             if name ~= "n" then
  508.                 processProspectionTable(val)
  509.             end
  510.            
  511.     end
  512.    
  513. end
  514.  
  515.  
  516.  
  517. --Пример JSON
  518. -- {
  519.   -- "id": "iron_168,83,984",
  520.   -- "name": "iron",
  521.   -- "icon": "waypoint-normal.png",
  522.   -- "x": 168,
  523.   -- "y": 83,
  524.   -- "z": 984,
  525.   -- "r": 255,
  526.   -- "g": 255,
  527.   -- "b": 255,
  528.   -- "enable": false,
  529.   -- "type": "Normal",
  530.   -- "origin": "JourneyMap",
  531.   -- "dimensions": [
  532.     -- 0
  533.   -- ]
  534. -- }
  535. function wlJSON(key, val)--запишем строчку в JSON файл
  536.     file:write("  \"".. key.. "\": ".. val ..",")  
  537.     file:write("\n")
  538. end
  539.  
  540. function generateOreJSON(i) -- генерирует точку JourneyMap (файл JSON) для жилы
  541.    
  542.     -- id = veinName[i].."_"..oreX[i]..",1,"..oreZ[i] -- пример Glauconite Sand_x,1,z
  543.     id = veinName[i].."_"..oreX[i]..",1,"..oreZ[i].."_"..oreDim[i] -- пример Glauconite Sand_x,1,z_0
  544.    
  545.     fileName = id..".json" -- пример имени файла: "Glauconite Sand_x,1,z_0.json"
  546.     file=io.open("waypoints".."/" .. fileName,"w")
  547.    
  548.    
  549.     if file == nil then --если файл не удалось создать, значит нет папки. создадим
  550.         os.execute("mkdir " .. "waypoints")
  551.         file=io.open("waypoints".."/" .. fileName,"w")
  552.     end
  553.    
  554.     if oreDim[i] == "-1" then -- Рукожопая вставка Шелла для корректного отображения жил в Незере
  555.         oreX[i] = oreX[i] * 8
  556.         oreZ[i] = oreZ[i] * 8
  557.     end
  558.    
  559.     --заполним тело JSON
  560.     file:write("{") file:write("\n")
  561.     wlJSON("id", "\""..id.."\"")
  562.     wlJSON("name", "\""..veinName[i].."\"")
  563.     wlJSON("icon", "\"".."waypoint-normal.png".."\"")
  564.     wlJSON("x", oreX[i])
  565.     wlJSON("y", "1")
  566.     wlJSON("z", oreZ[i])
  567.     wlJSON("r", "255")
  568.     wlJSON("g", "255")
  569.     wlJSON("b", "255")
  570.     wlJSON("enable", "true")
  571.     wlJSON("type", "\"".."Normal".."\"")
  572.     wlJSON("origin", "\"".."JourneyMap".."\"")
  573.     file:write("  \"dimensions\": [") file:write("\n")
  574.     file:write("    ".. oreDim[i]) file:write("\n")
  575.     file:write("  ]") file:write("\n")
  576.     file:write("}")
  577.    
  578.     file:close()
  579. end
  580.  
  581. function generateOilJSON(i) -- генерирует точку JourneyMap (файл JSON) ждя жидкости
  582.    
  583.     id = oilName[i].."_"..oilX[i]..",1,"..oilZ[i] -- пример 9-15L Heavy Oil_x,1,z
  584.    
  585.    
  586.     fileName = id..".json" -- пример имени файла: "9-15L Heavy Oil_x,1,z.json"
  587.     file=io.open("waypoints".."/" .. fileName,"w")
  588.    
  589.    
  590.     if file == nil then --если файл не удалось создать, значит нет папки. создадим
  591.         os.execute("mkdir " .. "waypoints")
  592.         file=io.open("waypoints".."/" .. fileName,"w")
  593.     end
  594.    
  595.     --заполним тело JSON
  596.     file:write("{") file:write("\n")
  597.     wlJSON("id", "\""..id.."\"")
  598.     wlJSON("name", "\""..oilName[i].."\"")
  599.     wlJSON("icon", "\"".."waypoint-normal.png".."\"")
  600.     wlJSON("x", oilX[i])
  601.     wlJSON("y", "1")
  602.     wlJSON("z", oilZ[i])
  603.     wlJSON("r", "127")
  604.     wlJSON("g", "127")
  605.     wlJSON("b", "127")
  606.     wlJSON("enable", "true")
  607.     wlJSON("type", "\"".."Normal".."\"")
  608.     wlJSON("origin", "\"".."JourneyMap".."\"")
  609.     file:write("  \"dimensions\": [") file:write("\n")
  610.     file:write("    ".. oilDim[i]) file:write("\n")
  611.     file:write("  ]") file:write("\n")
  612.     file:write("}")
  613.    
  614.     file:close()
  615. end
  616. ----------------------------------------------------------------
  617. print ("Программа генерации точек JourneyMap запущена.")
  618. print ("Версия "..ver)
  619. print ("Ищем флешки с данными проспектора и просматриваем их...")
  620.  
  621. --ищем флешки и сканируем их
  622. for i=1,5 do --цикл просмотра сторон адаптера
  623.     slotNumbers = controller.getInventorySize(i) --получаем количество слотов инвентори в сундуке, в котором лежат флешки
  624.     if slotNumbers ~= nil then --если вообще сундук там есть
  625.         for slot=1, slotNumbers do --цикл по слотам сундука
  626.             itemStack = controller.getStackInSlot(i, slot)
  627.            
  628.            
  629.            
  630.             if itemStack ~= nil then --если в слоте что-то есть
  631.                 --print(itemStack.label)
  632.                 --if itemStack.label == "Data Stick" then
  633.                     --print("Найдена флешка в слоте "..slot.."...")
  634.                     --print("Item hasTag: ", itemStack.hasTag)
  635.                     --nbt = item.readTag(itemStack)
  636.                     for name, val in pairs(itemStack) do --просмотрим таблицу реультата анализа предмета
  637.                         if name == "Analyzed Prospection Data" then
  638.                             --print(name, val)
  639.                             processProspectionData(val)
  640.                         end
  641.                     end
  642.  
  643.                 --end
  644.             end
  645.         end
  646.     end
  647. end
  648.  
  649. --проставим имя жилы
  650. for i=1, oreIndex do
  651.     sOre = oreName[i]
  652.     veinName[i] = getVeinName(sOre)
  653. end
  654.  
  655. --print("Debug stop")
  656. --os.exit()
  657.  
  658. --Пометим дубликаты, чтобы не создавать лишние точки. У дубликатов имя жилы приравнивается к nil
  659. for i=1, oreIndex do
  660.     for j = i+1, oreIndex do
  661.         if oreX[i] == oreX[j] and oreZ[i] == oreZ[j] and oreDim[i] == oreDim[j] and veinName[i] == veinName[j] then --если записи полностью одинаковые, то одну из них помечаем как дубликат
  662.             veinName[j] = nil -- стираем имя жилы у второй записи
  663.         end
  664.     end
  665. end
  666.  
  667.  
  668. --траслитерируем называние жидкостей
  669. for i=1, oilIndex do
  670.     oilName[i] = translateOilName(oilName[i])  
  671. end
  672.  
  673.  
  674. print("Ores")
  675. for i=1, oreIndex do
  676.     if veinName[i] ~= nil then
  677.         --print("x: "..oreX[i], "z: "..oreZ[i], "d: "..oreDim[i], "vein: "..veinName[i])
  678.     end
  679. end
  680. print("Oils")
  681. for i=1, oilIndex do
  682.     --print("x: "..oilX[i], "z: "..oilZ[i], "d: "..oilDim[i], "oil: "..oilName[i])
  683. end
  684.  
  685.  
  686. print("--------------")
  687.  
  688. --Генерируем JSON файлы
  689. j1 = 0
  690.  
  691. --для руд
  692. for i=1, oreIndex do
  693.     if veinName[i] ~= nil then --если у записи не пустое имя жилы, то создаем точку
  694.         generateOreJSON(i)
  695.         j1=j1+1
  696.     end
  697.    
  698. end
  699. print("Созадно меток руды: "..j1..".")
  700.  
  701. j2 = 0
  702. --для жидкостей
  703. for i=1, oilIndex do
  704.     generateOilJSON(i)
  705.     fileLog:write(oilName[i]) fileLog:write("\n")
  706.     j2=j2+1
  707. end
  708. print("Создано меток жидкостей под бэдроком: "..j2..".")
  709.  
  710. print("Итого в папке waypoints созадно файлов: "..j1+j2..".")
  711.  
  712. os.exit()
  713.  
  714. --История версий:
  715.  
  716. --Версия 1.5
  717. --Устранена проблема неправильного отображения меток в Незере.
  718. --В название файла метки добавлен идентификатор дименшена.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement