[READ-ONLY] Mirror of https://github.com/thoda-dev/DU-Industry-HUD. A simple HUD for monitoring and managing industry in Dual Universe
dual-universe lua
0

Configure Feed

Select the types of activity you want to include in your feed.

alpha 3.0.5 RC - release candidate for the new re-written version

Thomas (Aug 6, 2022, 5:50 PM +0200) 92fbe6ff 663fa657

+632 -1798
+1 -1
Machine Control Program/config.json
··· 1 - {"slots":{"0":{"name":"slot1","type":{"events":[],"methods":[]}},"1":{"name":"slot2","type":{"events":[],"methods":[]}},"2":{"name":"slot3","type":{"events":[],"methods":[]}},"3":{"name":"slot4","type":{"events":[],"methods":[]}},"4":{"name":"slot5","type":{"events":[],"methods":[]}},"5":{"name":"slot6","type":{"events":[],"methods":[]}},"6":{"name":"slot7","type":{"events":[],"methods":[]}},"7":{"name":"slot8","type":{"events":[],"methods":[]}},"8":{"name":"slot9","type":{"events":[],"methods":[]}},"9":{"name":"slot10","type":{"events":[],"methods":[]}},"-1":{"name":"unit","type":{"events":[],"methods":[]}},"-3":{"name":"player","type":{"events":[],"methods":[]}},"-2":{"name":"construct","type":{"events":[],"methods":[]}},"-4":{"name":"system","type":{"events":[],"methods":[]}},"-5":{"name":"library","type":{"events":[],"methods":[]}}},"handlers":[{"code":"unit.hideWidget()\n\n--[[\n\tsplit a string on a delimiter\n\tBy jericho\n]]\nfunction strSplit(s, delimiter)\n result = {};\n for match in (s..delimiter):gmatch(\"(.-)\"..delimiter) do\n table.insert(result, match);\n end\n return result;\nend\n\n--[[\n\tcheck if a table contains an element\n\tBy Jericho\n]]\nfunction hasValue(tab, val)\n for _,v in ipairs(tab) do\n if v == val then\n return true\n end\n end\n return false\nend\n\n\n\nfunction removeQualityInName(name)\n if not name then return '' end\n return name:lower():gsub('basic ', ''):gsub('uncommon ', ''):gsub('advanced ', ''):gsub('rare ', ''):gsub('exotic ', '')\nend\n\ndatabank = nil\nindustries = {}\nfor slot_name, slot in pairs(unit) do\n if\n type(slot) == \"table\"\n and type(slot.export) == \"table\"\n and slot.getClass\n then\n slot_type = slot.getClass():lower()\n if slot_type == 'databankunit' then\n databank = slot\n end\n if (slot_type:find(\"industry\")) then\n table.insert(industries, slot)\n end\n end\nend\nif databank ~= nil then\n for _,slot in pairs(industries) do\n local slot_id = slot.getLocalId()\n if databank.hasKey(tostring(slot_id)) == 1 then\n local command = databank.getStringValue(slot_id)\n if command ~= nil and command ~= \"\" then\n if command:lower() == \"start\" then\n slot.start()\n elseif command:lower():find(\"maintain\") then\n local splitted = strSplit(command, \"_\")\n local quantity = tonumber(splitted[2])\n slot.startAndMaintain(quantity)\n elseif command:lower():find(\"batch\") then\n local splitted = strSplit(command, \"_\")\n local quantity = tonumber(splitted[2])\n slot.batchStart(quantity)\n elseif command:lower() == \"stop\" then\n slot.hardStop(0)\n elseif command:lower() == \"soft_stop\" then\n slot.softStop()\n end\n databank.setStringValue(id, \"\")\n end\n end\n end\nend\nunit.exit()","filter":{"args":[],"signature":"onStart()","slotKey":"-1"},"key":"0"}],"methods":[],"events":[]} 1 + {"events":[],"handlers":[{"code":"--[[\n DU Industry HUD By Jericho\n]]\n\nlocal version = \"V 3.0.5 - alpha\"\nlocal log_split = \"=================================================\"\n--printing version in lua chat\nsystem.print(log_split)local a=\"\"local b=math.ceil((50-#version-2)/2)for c=1,b,1 do a=a..'='end;a=a..\" \"..version..\" \"for c=1,b,1 do a=a..'='end;system.print(a)system.print(log_split)\n\nunit.hideWidget()\n\n--[[\n\tsplit a string on a delimiter\n\tBy jericho\n]]\nfunction strSplit(s, delimiter)\n result = {};\n for match in (s..delimiter):gmatch(\"(.-)\"..delimiter) do\n table.insert(result, match);\n end\n return result;\nend\n\n--[[\n\tcheck if a table contains an element\n\tBy Jericho\n]]\nfunction hasValue(tab, val)\n for _,v in ipairs(tab) do\n if v == val then\n return true\n end\n end\n return false\nend\n\n\n\nfunction removeQualityInName(name)\n if not name then return '' end\n return name:lower():gsub('basic ', ''):gsub('uncommon ', ''):gsub('advanced ', ''):gsub('rare ', ''):gsub('exotic ', '')\nend\n\ndatabank = nil\nindustries = {}\nfor slot_name, slot in pairs(unit) do\n if\n type(slot) == \"table\"\n and type(slot.export) == \"table\"\n and slot.getClass\n then\n slot_type = slot.getClass():lower()\n if slot_type == 'databankunit' then\n databank = slot\n end\n if (slot_type:find(\"industry\")) then\n table.insert(industries, slot)\n end\n end\nend\nif databank ~= nil then\n for _,slot in pairs(industries) do\n local slot_id = slot.getLocalId()\n if databank.hasKey(tostring(slot_id)) == 1 then\n local command = databank.getStringValue(slot_id)\n if command ~= nil and command ~= \"\" then\n if command:lower() == \"start\" then\n slot.startRun()\n elseif command:lower():find(\"maintain\") then\n local splitted = strSplit(command, \"_\")\n local quantity = tonumber(splitted[2])\n slot.startMaintain(quantity)\n elseif command:lower():find(\"batch\") then\n local splitted = strSplit(command, \"_\")\n local quantity = tonumber(splitted[2])\n slot.startFor(quantity)\n elseif command:lower() == \"stop\" then\n slot.stop(true, false)\n elseif command:lower() == \"soft_stop\" then\n slot.stop(false, false)\n end\n databank.setStringValue(id, \"\")\n end\n end\n end\nend\nunit.exit()","filter":{"args":[],"signature":"onStart()","slotKey":"-1"},"key":"0"}],"methods":[],"slots":{"0":{"name":"slot1","type":{"events":[],"methods":[]}},"1":{"name":"slot2","type":{"events":[],"methods":[]}},"2":{"name":"slot3","type":{"events":[],"methods":[]}},"3":{"name":"slot4","type":{"events":[],"methods":[]}},"4":{"name":"slot5","type":{"events":[],"methods":[]}},"5":{"name":"slot6","type":{"events":[],"methods":[]}},"6":{"name":"slot7","type":{"events":[],"methods":[]}},"7":{"name":"slot8","type":{"events":[],"methods":[]}},"8":{"name":"slot9","type":{"events":[],"methods":[]}},"9":{"name":"slot10","type":{"events":[],"methods":[]}},"-5":{"name":"library","type":{"events":[],"methods":[]}},"-4":{"name":"system","type":{"events":[],"methods":[]}},"-3":{"name":"player","type":{"events":[],"methods":[]}},"-2":{"name":"construct","type":{"events":[],"methods":[]}},"-1":{"name":"unit","type":{"events":[],"methods":[]}}}}
+14 -5
Machine Control Program/source/unit/start.lua
··· 1 + --[[ 2 + DU Industry HUD By Jericho 3 + ]] 4 + 5 + local version = "V 3.0.5 - alpha" 6 + local log_split = "=================================================" 7 + --printing version in lua chat 8 + system.print(log_split)local a=""local b=math.ceil((50-#version-2)/2)for c=1,b,1 do a=a..'='end;a=a.." "..version.." "for c=1,b,1 do a=a..'='end;system.print(a)system.print(log_split) 9 + 1 10 unit.hideWidget() 2 11 3 12 --[[ ··· 56 65 local command = databank.getStringValue(slot_id) 57 66 if command ~= nil and command ~= "" then 58 67 if command:lower() == "start" then 59 - slot.start() 68 + slot.startRun() 60 69 elseif command:lower():find("maintain") then 61 70 local splitted = strSplit(command, "_") 62 71 local quantity = tonumber(splitted[2]) 63 - slot.startAndMaintain(quantity) 72 + slot.startMaintain(quantity) 64 73 elseif command:lower():find("batch") then 65 74 local splitted = strSplit(command, "_") 66 75 local quantity = tonumber(splitted[2]) 67 - slot.batchStart(quantity) 76 + slot.startFor(quantity) 68 77 elseif command:lower() == "stop" then 69 - slot.hardStop(0) 78 + slot.stop(true, false) 70 79 elseif command:lower() == "soft_stop" then 71 - slot.softStop() 80 + slot.stop(false, false) 72 81 end 73 82 databank.setStringValue(id, "") 74 83 end
+1 -1
Master program/config.json
··· 1 - {"events":[],"handlers":[{"code":"--[[\n\tDatabank HUB\n\tInspired by the original BankRaid Script written by ilodev\n\tModified to act like a databank hub by Jericho (read and clear only)\n]]\nbankhub = {}\n\nfunction bankhub:new(banks)\n o = {}\n setmetatable(o, self);\n self.__index = self;\n o.banks = banks or {}\n\n -- databank shortcuts to allow in-game syntax.\n function o.clear() return o:_clear() end\n function o.getNbKeys() return o:_getNbKeys() end\n function o.getKeys() return o:_getKeys() end\n function o.hasKey(key) return o:_hasKey(key) end\n function o.getStringValue(key) return o:_getStringValue(key) end\n function o.getIntValue(key) return o:_getIntValue(key) end\n function o.getFloatValue(key) return o:_getFloatValue(key) end\n\n return o\nend\n--- Adds another databank to the raid.\n--- @param object The databank unit to add.\nfunction bankhub:add(element)\n table.insert( self.banks, element)\n self.banks_size = #self.banks\nend\n--- Clears the databank array\nfunction bankhub:_clear()\n for _,bank in pairs(self.banks) do bank.clear() end\nend\n--- Returns the number of keys in the entire databank table\n--- @return integer number of total keys\nfunction bankhub:_getNbKeys()\n local res = 0\n for _,bank in pairs(self.banks) do res = res + bank.getNbKeys() end\n return res\nend\n\n--- Returns all the keys in the databank array\n--- @return string json encoded string of keys\nfunction bankhub:_getKeys()\n local res = {}\n for _,bank in pairs(self.banks) do\n local keys = json.decode(bank.getKeys())\n for _,k in pairs(keys) do table.insert(res, k) end\n end\n return json.encode(res)\nend\n\n--- Checks if a key exists in the databank array\n--- @param string key\n--- @return boolean returns 1 if the array holds this key.\nfunction bankhub:_hasKey(key)\n for _,bank in pairs(self.banks) do\n if (bank.hasKey(key) == 1) then return 1 end\n end\n return 0\nend\n\n--- Returns the value of the key if existing\n--- @param string key\n--- @return string returns value or nil\nfunction bankhub:_getStringValue(key)\n for _,bank in pairs(self.banks) do\n if (bank.hasKey(key) == 1) then\n return bank.getStringValue(key)\n end\n end\n return nil\nend\n\n--- Returns the integer value of the key if existing\n--- @param string key\n--- @return number returns value or nil\nfunction bankhub:_getIntValue(key)\n for _,bank in pairs(self.banks) do\n if (bank.hasKey(key) == 1) then\n return banks.getIntValue(key)\n end\n end\n return nil\nend\n\n--- Returns the float value of the key if existing\n--- @param string key\n--- @return number returns value or nil\nfunction bankhub:_getFloatValue(key)\n for _,bank in pairs(self.banks) do\n if (bank.hasKey(key) == 1) then\n return banks.getFloatValue(key)\n end\n end\n return nil\nend","filter":{"args":[],"signature":"onStart()","slotKey":"-5"},"key":"20"},{"code":"--[[\n\tRemove duplicate elements in a lua table\n\tBy Jericho\n]]\nfunction removeDuplicatesInTable(data) \n local hash = {}\n local res = {}\n for _,v in ipairs(data) do\n if (not hash[v]) then\n res[#res+1] = v\n hash[v] = true\n end\n end\n return res\nend\n\n--[[\n\tsplit a string on a delimiter\n\tBy jericho\n]]\nfunction strSplit(s, delimiter)\n result = {};\n for match in (s..delimiter):gmatch(\"(.-)\"..delimiter) do\n table.insert(result, match);\n end\n return result;\nend\n\n--[[\n\tConvert timestamp in a string representing a dureation in days, hours, minutes and seconds\n\tBy Jericho\n]]\nfunction SecondsToClockString(seconds)\n local seconds = tonumber(seconds)\n\n if seconds == nil or seconds <= 0 then\n return \"-\";\n else\n days = string.format(\"%2.f\", math.floor(seconds/(3600*24)));\n hours = string.format(\"%2.f\", math.floor(seconds/3600 - (days*24)));\n mins = string.format(\"%2.f\", math.floor(seconds/60 - (hours*60) - (days*24*60)));\n secs = string.format(\"%2.f\", math.floor(seconds - hours*3600 - (days*24*60*60) - mins *60));\n str = \"\"\n if tonumber(days) > 0 then str = str .. days..\"d \" end\n if tonumber(hours) > 0 then str = str .. hours..\"h \" end\n if tonumber(mins) > 0 then str = str .. mins..\"m \" end\n if tonumber(secs) > 0 then str = str .. secs ..\"s\" end\n return str\n end\nend\n\n--[[\n\tremove the quality if exist in a string\n]]\nfunction removeQualityInName(name)\n if not name then return '' end\n return name:lower():gsub('basic ', ''):gsub('uncommon ', ''):gsub('advanced ', ''):gsub('rare ', ''):gsub('exotic ', '')\nend\n\n--[[\n\tcheck if a value exist in a table\n]]\nfunction has_value (tab, val)\n for index, value in ipairs(tab) do\n if value == val then\n return true\n end\n end\n\n return false\nend","filter":{"args":[],"signature":"onStart()","slotKey":"-5"},"key":"19"},{"code":"--[[\n Jericho's time script -- https://github.com/Jericho1060\n Display IRL date and time in game\n https://github.com/Jericho1060/DualUniverse/edit/master/TimeScript/TimeScript.lua\n]]--\n\nfunction DUCurrentDateTime(utc)\n local t = system.getUtcTime()\n if not utc then t = t + system.getUtcOffset() end\n local DSEC=24*60*60\n local YSEC=365*DSEC\n local LSEC=YSEC+DSEC\n local FSEC=4*YSEC+DSEC\n local BASE_DOW=4\n local BASE_YEAR=1970\n local _days={-1, 30, 58, 89, 119, 150, 180, 211, 242, 272, 303, 333, 364}\n local _lpdays={}\n for i=1,2 do _lpdays[i]=_days[i] end\n for i=3,13 do _lpdays[i]=_days[i]+1 end\n local y,j,m,d,w,h,n,s\n local mdays=_days\n s=t\n y=math.floor(s/FSEC)\n s=s-y*FSEC\n y=y*4+BASE_YEAR\n if s>=YSEC then\n y=y+1\n s=s-YSEC\n if s>=YSEC then\n y=y+1\n s=s-YSEC\n if s>=LSEC then\n y=y+1\n s=s-LSEC\n else\n mdays=_lpdays\n end\n end\n end\n j=math.floor(s/DSEC)\n s=s-j*DSEC\n local m=1\n while mdays[m]<j do m=m+1 end\n m=m-1\n local d=j-mdays[m]\n w=(math.floor(t/DSEC)+BASE_DOW)%7\n if w == 0 then w = 7 end\n h=math.floor(s/3600)\n s=s-h*3600\n n=math.floor(s/60)\n function round(a,b)if b then return utils.round(a/b)*b end;return a>=0 and math.floor(a+0.5)or math.ceil(a-0.5)end\n s=round(s-n*60)\n local weekDaysNames = {\"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\", \"Sunday\"}\n local weekDaysShortNames = {\"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\", \"Sun\"}\n local monthNames = {\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"}\n local monthShortNames = {\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"}\n return y,m,d,h,n,s,w,weekDaysNames[w],weekDaysShortNames[w],monthNames[m],monthShortNames[m],j+1\nend\n\n--[[\n local year, month, day, hour, minute, second, weekDayIndex, weekDayName, weekDayShortName, monthName, monthShortName, daysFromYearStart = DUCurrentDateTime()\n system.print(string.format(\"%02d/%02d/%04d %02d:%02d:%02d\",day,month,year,hour,minute,second))\n]]\n","filter":{"args":[],"signature":"onStart()","slotKey":"-5"},"key":"18"},{"code":"--[[\n\tAll Games Recipes in a table\n\tBased on the public script published by D.Mentia on Discord\n\tUpdated By Glorek and Jericho\n]]\n\n-- clean the name from specific char, etc.\nfunction cleanName(name)\n if name ~= nil and name:len() > 0 then\n name = string.gsub(name:lower(), \"-\", \"\")\n else\n name = \"unknown\"\n end\n return name:gsub(\"%s+\", \"\")\nend\n\n-- return an ingredient fron it's name\nfunction getIngredient(name)\n local cleanname = \"unknown\"\n if name ~= nil and name:len() > 0 then\n \tcleanname = cleanName(name)\n end\n local ingredient = Ingredients[cleanname]\n if not ingredient and cleanname:find('pure') then\n ingredient = Ingredients['pure' .. cleanname:gsub('pure', '')]\n end\n if not ingredient then\n for key,value in pairs(Ingredients) do\n if key:find(cleanname) then\n ingredient = value\n break\n end\n end\n end\n if not ingredient then\n --system.print('Error [Ingredient not found]: '..name)\n ingredient = Ingredients['unknown']\n end\n return ingredient\nend\n\nIngredients = {\n ['unknown'] = {['name'] = 'unknown', ['tier'] = 1, ['type'] = 'error', ['mass'] = 1, ['volume'] = 1},\n ['bauxite'] = {['name'] = 'Bauxite', ['tier'] = 1, ['type'] = 'Ore', ['mass'] = 1.28, ['volume'] = 1},\n ['coal'] = {['name'] = 'Coal', ['tier'] = 1, ['type'] = 'Ore', ['mass'] = 1.35, ['volume'] = 1},\n ['quartz'] = {['name'] = 'Quartz', ['tier'] = 1, ['type'] = 'Ore', ['mass'] = 2.65, ['volume'] = 1},\n ['hematite'] = {['name'] = 'Hematite', ['tier'] = 1, ['type'] = 'Ore', ['mass'] = 5.04, ['volume'] = 1},\n ['chromite'] = {['name'] = 'Chromite', ['tier'] = 2, ['type'] = 'Ore', ['mass'] = 4.54, ['volume'] = 1},\n ['malachite'] = {['name'] = 'Malachite', ['tier'] = 2, ['type'] = 'Ore', ['mass'] = 4, ['volume'] = 1},\n ['limestone'] = {['name'] = 'Limestone', ['tier'] = 2, ['type'] = 'Ore', ['mass'] = 2.71, ['volume'] = 1},\n ['natron'] = {['name'] = 'Natron', ['tier'] = 2, ['type'] = 'Ore', ['mass'] = 1.55, ['volume'] = 1},\n ['petalite'] = {['name'] = 'Petalite', ['tier'] = 3, ['type'] = 'Ore', ['mass'] = 2.41, ['volume'] = 1},\n ['garnierite'] = {['name'] = 'Garnierite', ['tier'] = 3, ['type'] = 'Ore', ['mass'] = 2.6, ['volume'] = 1},\n ['acanthite'] = {['name'] = 'Acanthite', ['tier'] = 3, ['type'] = 'Ore', ['mass'] = 7.2, ['volume'] = 1},\n ['pyrite'] = {['name'] = 'Pyrite', ['tier'] = 3, ['type'] = 'Ore', ['mass'] = 5.01, ['volume'] = 1},\n ['cobaltite'] = {['name'] = 'Cobaltite', ['tier'] = 4, ['type'] = 'Ore', ['mass'] = 6.33, ['volume'] = 1},\n ['cryolite'] = {['name'] = 'Cryolite', ['tier'] = 4, ['type'] = 'Ore', ['mass'] = 2.95, ['volume'] = 1},\n ['kolbeckite'] = {['name'] = 'Kolbeckite', ['tier'] = 4, ['type'] = 'Ore', ['mass'] = 2.37, ['volume'] = 1},\n ['goldnuggets'] = {['name'] = 'Gold Nuggets', ['tier'] = 4, ['type'] = 'Ore', ['mass'] = 19.3, ['volume'] = 1},\n ['rhodonite'] = {['name'] = 'Rhodonite', ['tier'] = 5, ['type'] = 'Ore', ['mass'] = 3.76, ['volume'] = 1},\n ['columbite'] = {['name'] = 'Columbite', ['tier'] = 5, ['type'] = 'Ore', ['mass'] = 5.38, ['volume'] = 1},\n ['illmenite'] = {['name'] = 'Illmenite', ['tier'] = 5, ['type'] = 'Ore', ['mass'] = 4.55, ['volume'] = 1},\n ['vanadinite'] = {['name'] = 'Vanadinite', ['tier'] = 5, ['type'] = 'Ore', ['mass'] = 6.95, ['volume'] = 1},\n ['pureoxygen'] = {['name'] = 'Pure Oxygen', ['tier'] = 1, ['type'] = 'Pure', ['mass'] = 1, ['volume'] = 1},\n ['purehydrogen'] = {['name'] = 'Pure Hydrogen', ['tier'] = 1, ['type'] = 'Pure', ['mass'] = 0.07, ['volume'] = 1},\n ['purealuminium'] = {['name'] = 'Pure Aluminium', ['tier'] = 1, ['type'] = 'Pure', ['mass'] = 2.7, ['volume'] = 1},\n ['purecarbon'] = {['name'] = 'Pure Carbon', ['tier'] = 1, ['type'] = 'Pure', ['mass'] = 2.27, ['volume'] = 1},\n ['puresilicon'] = {['name'] = 'Pure Silicon', ['tier'] = 1, ['type'] = 'Pure', ['mass'] = 2.33, ['volume'] = 1},\n ['pureiron'] = {['name'] = 'Pure Iron', ['tier'] = 1, ['type'] = 'Pure', ['mass'] = 7.85, ['volume'] = 1},\n ['purecalcium'] = {['name'] = 'Pure Calcium', ['tier'] = 2, ['type'] = 'Pure', ['mass'] = 1.55, ['volume'] = 1},\n ['purechromium'] = {['name'] = 'Pure Chromium', ['tier'] = 2, ['type'] = 'Pure', ['mass'] = 7.19, ['volume'] = 1},\n ['purecopper'] = {['name'] = 'Pure Copper', ['tier'] = 2, ['type'] = 'Pure', ['mass'] = 8.96, ['volume'] = 1},\n ['puresodium'] = {['name'] = 'Pure Sodium', ['tier'] = 2, ['type'] = 'Pure', ['mass'] = 0.97, ['volume'] = 1},\n ['purelithium'] = {['name'] = 'Pure Lithium', ['tier'] = 3, ['type'] = 'Pure', ['mass'] = 0.53, ['volume'] = 1},\n ['purenickel'] = {['name'] = 'Pure Nickel', ['tier'] = 3, ['type'] = 'Pure', ['mass'] = 8.91, ['volume'] = 1},\n ['puresilver'] = {['name'] = 'Pure Silver', ['tier'] = 3, ['type'] = 'Pure', ['mass'] = 10.49, ['volume'] = 1},\n ['puresulfur'] = {['name'] = 'Pure Sulfur', ['tier'] = 3, ['type'] = 'Pure', ['mass'] = 1.82, ['volume'] = 1},\n ['purecobalt'] = {['name'] = 'Pure Cobalt', ['tier'] = 4, ['type'] = 'Pure', ['mass'] = 8.9, ['volume'] = 1},\n ['purefluorine'] = {['name'] = 'Pure Fluorine', ['tier'] = 4, ['type'] = 'Pure', ['mass'] = 1.7, ['volume'] = 1},\n ['puregold'] = {['name'] = 'Pure Gold', ['tier'] = 4, ['type'] = 'Pure', ['mass'] = 19.3, ['volume'] = 1},\n ['purescandium'] = {['name'] = 'Pure Scandium', ['tier'] = 4, ['type'] = 'Pure', ['mass'] = 2.98, ['volume'] = 1},\n ['puremanganese'] = {['name'] = 'Pure Manganese', ['tier'] = 5, ['type'] = 'Pure', ['mass'] = 7.21, ['volume'] = 1},\n ['pureniobium'] = {['name'] = 'Pure Niobium', ['tier'] = 5, ['type'] = 'Pure', ['mass'] = 8.57, ['volume'] = 1},\n ['puretitanium'] = {['name'] = 'Pure Titanium', ['tier'] = 5, ['type'] = 'Pure', ['mass'] = 4.51, ['volume'] = 1},\n ['purevanadium'] = {['name'] = 'Pure Vanadium', ['tier'] = 5, ['type'] = 'Pure', ['mass'] = 6, ['volume'] = 1},\n ['catalyst3'] = {['name'] = 'Catalyst 3', ['tier'] = 3, ['type'] = 'Catalyst', ['mass'] = 649.39, ['volume'] = 1},\n ['catalyst4'] = {['name'] = 'Catalyst 4', ['tier'] = 4, ['type'] = 'Catalyst', ['mass'] = 606.65, ['volume'] = 1},\n ['catalyst5'] = {['name'] = 'Catalyst 5', ['tier'] = 5, ['type'] = 'Catalyst', ['mass'] = 657.68, ['volume'] = 1},\n ['nitronfuel'] = {['name'] = 'Nitron Fuel', ['tier'] = 1, ['type'] = 'Fuel', ['mass'] = 4, ['volume'] = 1},\n ['kergonx1fuel'] = {['name'] = 'Kergon-X1 Fuel', ['tier'] = 1, ['type'] = 'Fuel', ['mass'] = 6, ['volume'] = 1},\n ['kergonx2fuel'] = {['name'] = 'Kergon-X2 Fuel', ['tier'] = 1, ['type'] = 'Fuel', ['mass'] = 6, ['volume'] = 1},\n ['kergonx3fuel'] = {['name'] = 'Kergon-X3 Fuel', ['tier'] = 1, ['type'] = 'Fuel', ['mass'] = 6, ['volume'] = 1},\n ['kergonx4fuel'] = {['name'] = 'Kergon-X4 Fuel', ['tier'] = 1, ['type'] = 'Fuel', ['mass'] = 6, ['volume'] = 1},\n ['xeronfuel'] = {['name'] = 'Xeron Fuel', ['tier'] = 2, ['type'] = 'Fuel', ['mass'] = 0.8, ['volume'] = 1},\n ['alfealloy'] = {['name'] = 'Al-Fe Alloy', ['tier'] = 1, ['type'] = 'Product', ['mass'] = 7.5, ['volume'] = 1},\n ['allialloy'] = {['name'] = 'Al-Li Alloy', ['tier'] = 3, ['type'] = 'Product', ['mass'] = 2.5, ['volume'] = 1},\n ['calciumreinforcedcopper'] = {['name'] = 'Calcium Reinforced Copper', ['tier'] = 2, ['type'] = 'Product', ['mass'] = 8.1, ['volume'] = 1},\n ['cuagalloy'] = {['name'] = 'Cu-Ag Alloy', ['tier'] = 3, ['type'] = 'Product', ['mass'] = 9.2, ['volume'] = 1},\n ['duralumin'] = {['name'] = 'Duralumin', ['tier'] = 2, ['type'] = 'Product', ['mass'] = 2.8, ['volume'] = 1},\n ['grade5titaniumalloy'] = {['name'] = 'Grade 5 Titanium Alloy', ['tier'] = 5, ['type'] = 'Product', ['mass'] = 4.43, ['volume'] = 1},\n ['inconel'] = {['name'] = 'Inconel', ['tier'] = 3, ['type'] = 'Product', ['mass'] = 8.5, ['volume'] = 1},\n ['mangalloy'] = {['name'] = 'Mangalloy', ['tier'] = 5, ['type'] = 'Product', ['mass'] = 7.83, ['volume'] = 1},\n ['maragingsteel'] = {['name'] = 'Maraging Steel', ['tier'] = 4, ['type'] = 'Product', ['mass'] = 8.23, ['volume'] = 1},\n ['redgold'] = {['name'] = 'Red Gold', ['tier'] = 4, ['type'] = 'Product', ['mass'] = 14.13, ['volume'] = 1},\n ['scalalloy'] = {['name'] = 'Sc-Al Alloy', ['tier'] = 4, ['type'] = 'Product', ['mass'] = 2.85, ['volume'] = 1},\n ['stainlesssteel'] = {['name'] = 'Stainless Steel', ['tier'] = 2, ['type'] = 'Product', ['mass'] = 7.75, ['volume'] = 1},\n ['tinbsupraconductor'] = {['name'] = 'Ti-Nb Supraconductor', ['tier'] = 5, ['type'] = 'Product', ['mass'] = 10.1, ['volume'] = 1},\n ['biologicalmatter'] = {['name'] = 'Biological Matter', ['tier'] = 1, ['type'] = 'Product', ['mass'] = 1, ['volume'] = 1},\n ['brick'] = {['name'] = 'Brick', ['tier'] = 1, ['type'] = 'Product', ['mass'] = 1.92, ['volume'] = 1},\n ['marble'] = {['name'] = 'Marble', ['tier'] = 2, ['type'] = 'Product', ['mass'] = 2.7, ['volume'] = 1},\n ['concrete'] = {['name'] = 'Concrete', ['tier'] = 2, ['type'] = 'Product', ['mass'] = 2.41, ['volume'] = 1},\n ['carbonfiber'] = {['name'] = 'Carbon Fiber', ['tier'] = 1, ['type'] = 'Product', ['mass'] = 1.5, ['volume'] = 1},\n ['glass'] = {['name'] = 'Glass', ['tier'] = 1, ['type'] = 'Product', ['mass'] = 2.5, ['volume'] = 1},\n ['advancedglass'] = {['name'] = 'Advanced Glass', ['tier'] = 2, ['type'] = 'Product', ['mass'] = 2.6, ['volume'] = 1},\n ['aglireinforcedglass'] = {['name'] = 'Ag-Li Reinforced Glass', ['tier'] = 3, ['type'] = 'Product', ['mass'] = 2.8, ['volume'] = 1},\n ['goldcoatedglass'] = {['name'] = 'Gold Coated Glass', ['tier'] = 4, ['type'] = 'Product', ['mass'] = 3, ['volume'] = 1},\n ['manganesereinforcedglass'] = {['name'] = 'Manganese Reinforced Glass', ['tier'] = 5, ['type'] = 'Product', ['mass'] = 2.9, ['volume'] = 1},\n ['polycarbonateplastic'] = {['name'] = 'Polycarbonate Plastic', ['tier'] = 1, ['type'] = 'Product', ['mass'] = 1.4, ['volume'] = 1},\n ['polycalciteplastic'] = {['name'] = 'Polycalcite Plastic', ['tier'] = 2, ['type'] = 'Product', ['mass'] = 1.5, ['volume'] = 1},\n ['polysulfideplastic'] = {['name'] = 'Polysulfide Plastic', ['tier'] = 3, ['type'] = 'Product', ['mass'] = 1.6, ['volume'] = 1},\n ['fluoropolymer'] = {['name'] = 'Fluoropolymer', ['tier'] = 4, ['type'] = 'Product', ['mass'] = 1.65, ['volume'] = 1},\n ['vanamer'] = {['name'] = 'Vanamer', ['tier'] = 5, ['type'] = 'Product', ['mass'] = 1.57, ['volume'] = 1},\n ['silumin'] = {['name'] = 'Silumin', ['tier'] = 1, ['type'] = 'Product', ['mass'] = 3, ['volume'] = 1},\n ['steel'] = {['name'] = 'Steel', ['tier'] = 1, ['type'] = 'Product', ['mass'] = 8.05, ['volume'] = 1},\n ['wood'] = {['name'] = 'Wood', ['tier'] = 1, ['type'] = 'Product', ['mass'] = 0.6, ['volume'] = 1},\n ['basiccomponent'] = {['name'] = 'Basic Component', ['tier'] = 1, ['type'] = 'Intermediary Part', ['mass'] = 2.25, ['volume'] = 0.5},\n ['uncommoncomponent'] = {['name'] = 'Uncommon Component', ['tier'] = 2, ['type'] = 'Intermediary Part', ['mass'] = 2.34, ['volume'] = 0.8},\n ['advancedcomponent'] = {['name'] = 'Advanced Component', ['tier'] = 3, ['type'] = 'Intermediary Part', ['mass'] = 2.51, ['volume'] = 0.8},\n ['basicconnector'] = {['name'] = 'Basic Connector', ['tier'] = 1, ['type'] = 'Intermediary Part', ['mass'] = 3.75, ['volume'] = 0.8},\n ['uncommonconnector'] = {['name'] = 'Uncommon Connector', ['tier'] = 2, ['type'] = 'Intermediary Part', ['mass'] = 3.9, ['volume'] = 0.8},\n ['advancedconnector'] = {['name'] = 'Advanced Connector', ['tier'] = 3, ['type'] = 'Intermediary Part', ['mass'] = 4.18, ['volume'] = 0.8},\n ['basicfixation'] = {['name'] = 'Basic Fixation', ['tier'] = 1, ['type'] = 'Intermediary Part', ['mass'] = 1.12, ['volume'] = 1},\n ['uncommonfixation'] = {['name'] = 'Uncommon Fixation', ['tier'] = 2, ['type'] = 'Intermediary Part', ['mass'] = 1.16, ['volume'] = 1},\n ['advancedfixation'] = {['name'] = 'Advanced Fixation', ['tier'] = 3, ['type'] = 'Intermediary Part', ['mass'] = 1.21, ['volume'] = 1},\n ['basicled'] = {['name'] = 'Basic LED', ['tier'] = 1, ['type'] = 'Intermediary Part', ['mass'] = 1.25, ['volume'] = 1},\n ['uncommonled'] = {['name'] = 'Uncommon LED', ['tier'] = 2, ['type'] = 'Intermediary Part', ['mass'] = 1.27, ['volume'] = 1},\n ['advancedled'] = {['name'] = 'Advanced LED', ['tier'] = 3, ['type'] = 'Intermediary Part', ['mass'] = 1.32, ['volume'] = 1},\n ['basicpipe'] = {['name'] = 'Basic Pipe', ['tier'] = 1, ['type'] = 'Intermediary Part', ['mass'] = 2.4, ['volume'] = 1},\n ['uncommonpipe'] = {['name'] = 'Uncommon Pipe', ['tier'] = 2, ['type'] = 'Intermediary Part', ['mass'] = 2.32, ['volume'] = 1},\n ['advancedpipe'] = {['name'] = 'Advanced Pipe', ['tier'] = 3, ['type'] = 'Intermediary Part', ['mass'] = 2.19, ['volume'] = 1},\n ['basicscrew'] = {['name'] = 'Basic Screw', ['tier'] = 1, ['type'] = 'Intermediary Part', ['mass'] = 8.05, ['volume'] = 1},\n ['uncommonscrew'] = {['name'] = 'Uncommon Screw', ['tier'] = 2, ['type'] = 'Intermediary Part', ['mass'] = 7.9, ['volume'] = 1},\n ['advancedscrew'] = {['name'] = 'Advanced Screw', ['tier'] = 3, ['type'] = 'Intermediary Part', ['mass'] = 8.14, ['volume'] = 1},\n ['basicantimattercapsule'] = {['name'] = 'Basic Anti-Matter Capsule', ['tier'] = 1, ['type'] = 'Complex Part', ['mass'] = 24, ['volume'] = 4.6},\n ['uncommonantimattercapsule'] = {['name'] = 'Uncommon Anti-Matter Capsule', ['tier'] = 2, ['type'] = 'Complex Part', ['mass'] = 24.32, ['volume'] = 4.6},\n ['advancedantimattercapsule'] = {['name'] = 'Advanced Anti-Matter Capsule', ['tier'] = 3, ['type'] = 'Complex Part', ['mass'] = 24.88, ['volume'] = 4.6},\n ['rareantimattercapsule'] = {['name'] = 'Rare Anti-Matter Capsule', ['tier'] = 4, ['type'] = 'Complex Part', ['mass'] = 25.8, ['volume'] = 4.6},\n ['exoticantimattercapsule'] = {['name'] = 'Exotic Anti-Matter Capsule', ['tier'] = 5, ['type'] = 'Complex Part', ['mass'] = 26.73, ['volume'] = 4.6},\n ['basicburner'] = {['name'] = 'Basic Burner', ['tier'] = 1, ['type'] = 'Complex Part', ['mass'] = 50.2, ['volume'] = 10},\n ['uncommonburner'] = {['name'] = 'Uncommon Burner', ['tier'] = 2, ['type'] = 'Complex Part', ['mass'] = 49.4, ['volume'] = 10},\n ['advancedburner'] = {['name'] = 'Advanced Burner', ['tier'] = 3, ['type'] = 'Complex Part', ['mass'] = 48.5, ['volume'] = 10},\n ['basicelectronics'] = {['name'] = 'Basic Electronics', ['tier'] = 1, ['type'] = 'Complex Part', ['mass'] = 5.22, ['volume'] = 4},\n ['uncommonelectronics'] = {['name'] = 'Uncommon Electronics', ['tier'] = 2, ['type'] = 'Complex Part', ['mass'] = 5.34, ['volume'] = 4},\n ['advancedelectronics'] = {['name'] = 'Advanced Electronics', ['tier'] = 3, ['type'] = 'Complex Part', ['mass'] = 5.45, ['volume'] = 4},\n ['rareelectronics'] = {['name'] = 'Rare Electronics', ['tier'] = 4, ['type'] = 'Complex Part', ['mass'] = 5.63, ['volume'] = 4},\n ['exoticelectronics'] = {['name'] = 'Exotic Electronics', ['tier'] = 5, ['type'] = 'Complex Part', ['mass'] = 5.77, ['volume'] = 4},\n ['basicexplosivemodule'] = {['name'] = 'Basic Explosive Module', ['tier'] = 1, ['type'] = 'Complex Part', ['mass'] = 18.72, ['volume'] = 4.6},\n ['uncommonexplosivemodule'] = {['name'] = 'Uncommon Explosive Module', ['tier'] = 2, ['type'] = 'Complex Part', ['mass'] = 19.04, ['volume'] = 4.6},\n ['advancedexplosivemodule'] = {['name'] = 'Advanced Explosive Module', ['tier'] = 3, ['type'] = 'Complex Part', ['mass'] = 19.04, ['volume'] = 4.6},\n ['basichydraulics'] = {['name'] = 'Basic Hydraulics', ['tier'] = 1, ['type'] = 'Complex Part', ['mass'] = 28.95, ['volume'] = 10},\n ['uncommonhydraulics'] = {['name'] = 'Uncommon Hydraulics', ['tier'] = 2, ['type'] = 'Complex Part', ['mass'] = 28.35, ['volume'] = 10},\n ['advancedhydraulics'] = {['name'] = 'Advanced Hydraulics', ['tier'] = 3, ['type'] = 'Complex Part', ['mass'] = 29.02, ['volume'] = 10},\n ['basicinjector'] = {['name'] = 'Basic Injector', ['tier'] = 1, ['type'] = 'Complex Part', ['mass'] = 20.3, ['volume'] = 10},\n ['uncommoninjector'] = {['name'] = 'Uncommon Injector', ['tier'] = 2, ['type'] = 'Complex Part', ['mass'] = 20.5, ['volume'] = 10},\n ['advancedinjector'] = {['name'] = 'Advanced Injector', ['tier'] = 3, ['type'] = 'Complex Part', ['mass'] = 20.45, ['volume'] = 10},\n ['basicmagnet'] = {['name'] = 'Basic Magnet', ['tier'] = 1, ['type'] = 'Complex Part', ['mass'] = 63.3, ['volume'] = 7.36},\n ['uncommonmagnet'] = {['name'] = 'Uncommon Magnet', ['tier'] = 2, ['type'] = 'Complex Part', ['mass'] = 62.1, ['volume'] = 7.36},\n ['advancedmagnet'] = {['name'] = 'Advanced Magnet', ['tier'] = 3, ['type'] = 'Complex Part', ['mass'] = 63.89, ['volume'] = 7.36},\n ['raremagnet'] = {['name'] = 'Rare Magnet', ['tier'] = 4, ['type'] = 'Complex Part', ['mass'] = 64.4, ['volume'] = 7.36},\n ['exoticmagnet'] = {['name'] = 'Exotic Magnet', ['tier'] = 5, ['type'] = 'Complex Part', ['mass'] = 65.13, ['volume'] = 7.36},\n ['basicoptics'] = {['name'] = 'Basic Optics', ['tier'] = 1, ['type'] = 'Complex Part', ['mass'] = 9.74, ['volume'] = 10},\n ['uncommonoptics'] = {['name'] = 'Uncommon Optics', ['tier'] = 2, ['type'] = 'Complex Part', ['mass'] = 9.94, ['volume'] = 10},\n ['advancedoptics'] = {['name'] = 'Advanced Optics', ['tier'] = 3, ['type'] = 'Complex Part', ['mass'] = 10.18, ['volume'] = 10},\n ['rareoptics'] = {['name'] = 'Rare Optics', ['tier'] = 4, ['type'] = 'Complex Part', ['mass'] = 10.7, ['volume'] = 10},\n ['basicpowersystem'] = {['name'] = 'Basic Power System', ['tier'] = 1, ['type'] = 'Complex Part', ['mass'] = 60, ['volume'] = 9.2},\n ['uncommonpowersystem'] = {['name'] = 'Uncommon Power System', ['tier'] = 2, ['type'] = 'Complex Part', ['mass'] = 62.4, ['volume'] = 9.2},\n ['advancedpowersystem'] = {['name'] = 'Advanced Power System', ['tier'] = 3, ['type'] = 'Complex Part', ['mass'] = 64.9, ['volume'] = 9.2},\n ['rarepowersystem'] = {['name'] = 'Rare Power System', ['tier'] = 4, ['type'] = 'Complex Part', ['mass'] = 78.31, ['volume'] = 9.2},\n ['exoticpowersystem'] = {['name'] = 'Exotic Power System', ['tier'] = 5, ['type'] = 'Complex Part', ['mass'] = 82.87, ['volume'] = 9.2},\n ['basicprocessor'] = {['name'] = 'Basic Processor', ['tier'] = 1, ['type'] = 'Complex Part', ['mass'] = 14.84, ['volume'] = 5},\n ['uncommonprocessor'] = {['name'] = 'Uncommon Processor', ['tier'] = 2, ['type'] = 'Complex Part', ['mass'] = 15.56, ['volume'] = 5},\n ['advancedprocessor'] = {['name'] = 'Advanced Processor', ['tier'] = 3, ['type'] = 'Complex Part', ['mass'] = 15.56, ['volume'] = 5},\n ['exoticprocessor'] = {['name'] = 'Exotic Processor', ['tier'] = 5, ['type'] = 'Complex Part', ['mass'] = 21.47, ['volume'] = 5},\n ['basicquantumcoreunit'] = {['name'] = 'Basic Quantum Core Unit', ['tier'] = 1, ['type'] = 'Complex Part', ['mass'] = 10.72, ['volume'] = 5},\n ['uncommonquantumcoreunit'] = {['name'] = 'Uncommon Quantum Core', ['tier'] = 2, ['type'] = 'Complex Part', ['mass'] = 11.04, ['volume'] = 5},\n ['advancedquantumcoreunit'] = {['name'] = 'Advanced Quantum Core', ['tier'] = 3, ['type'] = 'Complex Part', ['mass'] = 11.24, ['volume'] = 5},\n ['rarequantumcore'] = {['name'] = 'Rare Quantum Core', ['tier'] = 4, ['type'] = 'Complex Part', ['mass'] = 11.66, ['volume'] = 5},\n ['exoticquantumcore'] = {['name'] = 'Exotic Quantum Core', ['tier'] = 5, ['type'] = 'Complex Part', ['mass'] = 11.66, ['volume'] = 5},\n ['basicsingularitycontainer'] = {['name'] = 'Basic Singularity Container', ['tier'] = 1, ['type'] = 'Complex Part', ['mass'] = 45.36, ['volume'] = 4},\n ['uncommonsingularitycontainer'] = {['name'] = 'Uncommon Singularity Container', ['tier'] = 2, ['type'] = 'Complex Part', ['mass'] = 44.88, ['volume'] = 4},\n ['advancedsingularitycontainer'] = {['name'] = 'Advanced Singularity Container', ['tier'] = 3, ['type'] = 'Complex Part', ['mass'] = 46.22, ['volume'] = 4},\n ['raresingularitycontainer'] = {['name'] = 'Rare Singularity Container', ['tier'] = 4, ['type'] = 'Complex Part', ['mass'] = 46.58, ['volume'] = 4},\n ['exoticsingularitycontainer'] = {['name'] = 'Exotic Singularity Container', ['tier'] = 5, ['type'] = 'Complex Part', ['mass'] = 46.98, ['volume'] = 4},\n ['uncommonsolidwarhead'] = {['name'] = 'Uncommon Solid Warhead', ['tier'] = 2, ['type'] = 'Complex Part', ['mass'] = 45.36, ['volume'] = 5},\n ['advancedsolidwarhead'] = {['name'] = 'Advanced Solid Warhead', ['tier'] = 3, ['type'] = 'Complex Part', ['mass'] = 46.43, ['volume'] = 5},\n ['advancedantigravitycore'] = {['name'] = 'Advanced Anti-Gravity Core', ['tier'] = 3, ['type'] = 'Exceptional Part', ['mass'] = 117.05, ['volume'] = 20},\n ['rareantigravitycore'] = {['name'] = 'Rare Anti-Gravity Core', ['tier'] = 4, ['type'] = 'Exceptional Part', ['mass'] = 123.22, ['volume'] = 22.5},\n ['exoticantigravitycore'] = {['name'] = 'Exotic Anti-Gravity Core', ['tier'] = 5, ['type'] = 'Exceptional Part', ['mass'] = 133.06, ['volume'] = 25},\n ['advancedquantumalignmentunit'] = {['name'] = 'Advanced Quantum Alignment Unit', ['tier'] = 3, ['type'] = 'Exceptional Part', ['mass'] = 35.78, ['volume'] = 25},\n ['exoticquantumalignmentunit'] = {['name'] = 'Exotic Quantum Alignment Unit', ['tier'] = 5, ['type'] = 'Exceptional Part', ['mass'] = 43.24, ['volume'] = 30},\n ['advancedquantumbarrier'] = {['name'] = 'Advanced Quantum Barrier', ['tier'] = 3, ['type'] = 'Exceptional Part', ['mass'] = 43.38, ['volume'] = 25},\n ['advancedantimattercoreunit'] = {['name'] = 'Advanced Anti-Matter Core Unit', ['tier'] = 3, ['type'] = 'Exceptional Part', ['mass'] = 107.08, ['volume'] = 21.5},\n ['exoticantimattercoreunit'] = {['name'] = 'Exotic Anti-Matter Core Unit', ['tier'] = 5, ['type'] = 'Exceptional Part', ['mass'] = 158.05, ['volume'] = 26.5},\n ['basicantennaxs'] = {['name'] = 'Basic Antenna XS', ['tier'] = 1, ['type'] = 'Functional Part', ['mass'] = 60.44, ['volume'] = 8.96},\n ['basicantennas'] = {['name'] = 'Basic Antenna S', ['tier'] = 1, ['type'] = 'Functional Part', ['mass'] = 314.2, ['volume'] = 46.4},\n ['uncommonantennaxs'] = {['name'] = 'Uncommon Antenna XS', ['tier'] = 2, ['type'] = 'Functional Part', ['mass'] = 117.16, ['volume'] = 17.12},\n ['uncommonantennas'] = {['name'] = 'Uncommon Antenna S', ['tier'] = 2, ['type'] = 'Functional Part', ['mass'] = 379.2, ['volume'] = 54.56},\n ['uncommonantennam'] = {['name'] = 'Uncommon Antenna M', ['tier'] = 2, ['type'] = 'Functional Part', ['mass'] = 1770, ['volume'] = 251.36},\n ['uncommonantennal'] = {['name'] = 'Uncommon Antenna L', ['tier'] = 2, ['type'] = 'Functional Part', ['mass'] = 9240, ['volume'] = 1302.56},\n ['advancedantennas'] = {['name'] = 'Advanced Antenna S', ['tier'] = 3, ['type'] = 'Functional Part', ['mass'] = 389.74, ['volume'] = 54.56},\n ['exoticantennam'] = {['name'] = 'Exotic Antenna M', ['tier'] = 5, ['type'] = 'Functional Part', ['mass'] = 2140, ['volume'] = 250.56},\n ['exoticantennal'] = {['name'] = 'Exotic Antenna L', ['tier'] = 5, ['type'] = 'Functional Part', ['mass'] = 11250, ['volume'] = 1301.76},\n ['exoticantennaxl'] = {['name'] = 'Exotic Antenna XL', ['tier'] = 5, ['type'] = 'Functional Part', ['mass'] = 61580, ['volume'] = 7028.16},\n ['basicchemicalcontainerxs'] = {['name'] = 'Basic Chemical Container XS', ['tier'] = 1, ['type'] = 'Functional Part', ['mass'] = 8.13, ['volume'] = 4.8},\n ['basicchemicalcontainers'] = {['name'] = 'Basic Chemical Container S', ['tier'] = 1, ['type'] = 'Functional Part', ['mass'] = 43.67, ['volume'] = 25.6},\n ['basicchemicalcontainerm'] = {['name'] = 'Basic Chemical Container M', ['tier'] = 1, ['type'] = 'Functional Part', ['mass'] = 239.38, ['volume'] = 139.2},\n ['basicchemicalcontainerl'] = {['name'] = 'Basic Chemical Container L', ['tier'] = 1, ['type'] = 'Functional Part', ['mass'] = 1340, ['volume'] = 774.4},\n ['basicchemicalcontainerxl'] = {['name'] = 'Basic Chemical Container XL', ['tier'] = 1, ['type'] = 'Functional Part', ['mass'] = 7750, ['volume'] = 4420.8},\n ['advancedchemicalcontainers'] = {['name'] = 'Advanced Chemical Container S', ['tier'] = 3, ['type'] = 'Functional Part', ['mass'] = 48.85, ['volume'] = 29.6},\n ['advancedchemicalcontainerm'] = {['name'] = 'Advanced Chemical Container M', ['tier'] = 3, ['type'] = 'Functional Part', ['mass'] = 235.25, ['volume'] = 143.2},\n ['advancedchemicalcontainerl'] = {['name'] = 'Advanced Chemical Container L', ['tier'] = 3, ['type'] = 'Functional Part', ['mass'] = 1270, ['volume'] = 778.4},\n ['advancedchemicalcontainerxl'] = {['name'] = 'Advanced Chemical Container XL', ['tier'] = 3, ['type'] = 'Functional Part', ['mass'] = 7190, ['volume'] = 4424.8},\n ['basiccombustionchamberxs'] = {['name'] = 'Basic Combustion Chamber XS', ['tier'] = 1, ['type'] = 'Functional Part', ['mass'] = 60.65, ['volume'] = 9.6},\n ['basiccombustionchambers'] = {['name'] = 'Basic Combustion Chamber S', ['tier'] = 1, ['type'] = 'Functional Part', ['mass'] = 319.35, ['volume'] = 49.6},\n ['basiccombustionchamberm'] = {['name'] = 'Basic Combustion Chamber M', ['tier'] = 1, ['type'] = 'Functional Part', ['mass'] = 1710, ['volume'] = 259.2},\n ['basiccombustionchamberl'] = {['name'] = 'Basic Combustion Chamber L', ['tier'] = 1, ['type'] = 'Functional Part', ['mass'] = 9340, ['volume'] = 1374.4},\n ['uncommoncombustionchamberxs'] = {['name'] = 'Uncommon Combustion Chamber XS', ['tier'] = 2, ['type'] = 'Functional Part', ['mass'] = 112.07, ['volume'] = 18.4},\n ['uncommoncombustionchambers'] = {['name'] = 'Uncommon Combustion Chamber S', ['tier'] = 2, ['type'] = 'Functional Part', ['mass'] = 366.33, ['volume'] = 58.4},\n ['uncommoncombustionchamberm'] = {['name'] = 'Uncommon Combustion Chamber M', ['tier'] = 2, ['type'] = 'Functional Part', ['mass'] = 1730, ['volume'] = 268},\n ['uncommoncombustionchamberl'] = {['name'] = 'Uncommon Combustion Chamber L', ['tier'] = 2, ['type'] = 'Functional Part', ['mass'] = 9210, ['volume'] = 1383.2},\n ['advancedcombustionchamberxs'] = {['name'] = 'Advanced Combustion Chamber XS', ['tier'] = 3, ['type'] = 'Functional Part', ['mass'] = 163.51, ['volume'] = 27.2},\n ['advancedcombustionchambers'] = {['name'] = 'Advanced Combustion Chamber S', ['tier'] = 3, ['type'] = 'Functional Part', ['mass'] = 369.5, ['volume'] = 58.4},\n ['advancedcombustionchamberm'] = {['name'] = 'Advanced Combustion Chamber M', ['tier'] = 3, ['type'] = 'Functional Part', ['mass'] = 1760, ['volume'] = 268},\n ['basiccontrolsystemxs'] = {['name'] = 'Basic Control System XS', ['tier'] = 1, ['type'] = 'Functional Part', ['mass'] = 9.25, ['volume'] = 5.2},\n ['basiccontrolsystems'] = {['name'] = 'Basic Control System S', ['tier'] = 1, ['type'] = 'Functional Part', ['mass'] = 47.63, ['volume'] = 27.6},\n ['basiccontrolsystemm'] = {['name'] = 'Basic Control System M', ['tier'] = 1, ['type'] = 'Functional Part', ['mass'] = 247.97, ['volume'] = 149.2},\n ['advancedcontrolsystems'] = {['name'] = 'Advanced Control System S', ['tier'] = 3, ['type'] = 'Functional Part', ['mass'] = 59.35, ['volume'] = 32},\n ['advancedcontrolsystemm'] = {['name'] = 'Advanced Control System M', ['tier'] = 3, ['type'] = 'Functional Part', ['mass'] = 272.97, ['volume'] = 153.6},\n ['advancedcontrolsysteml'] = {['name'] = 'Advanced Control System L', ['tier'] = 3, ['type'] = 'Functional Part', ['mass'] = 1410, ['volume'] = 828.8},\n ['basiccoreunitsystemxs'] = {['name'] = 'Basic Core System XS', ['tier'] = 1, ['type'] = 'Functional Part', ['mass'] = 4.43, ['volume'] = 4.4},\n ['basiccoreunitsystems'] = {['name'] = 'Basic Core System S', ['tier'] = 1, ['type'] = 'Functional Part', ['mass'] = 23.57, ['volume'] = 23.6},\n ['uncommoncoresystems'] = {['name'] = 'Uncommon Core System S', ['tier'] = 2, ['type'] = 'Functional Part', ['mass'] = 28.08, ['volume'] = 27.2},\n ['uncommoncoresystemm'] = {['name'] = 'Uncommon Core System M', ['tier'] = 2, ['type'] = 'Functional Part', ['mass'] = 28.08, ['volume'] = 135.75},\n ['uncommoncoresysteml'] = {['name'] = 'Uncommon Core System L', ['tier'] = 2, ['type'] = 'Functional Part', ['mass'] = 737.1, ['volume'] = 728},\n ['advancedcoresystemm'] = {['name'] = 'Advanced Core System M', ['tier'] = 3, ['type'] = 'Functional Part', ['mass'] = 139.61, ['volume'] = 132.8},\n ['rarecoresysteml'] = {['name'] = 'Rare Core System L', ['tier'] = 4, ['type'] = 'Functional Part', ['mass'] = 783.65, ['volume'] = 728},\n ['exoticcoresystems'] = {['name'] = 'Exotic Core System S', ['tier'] = 5, ['type'] = 'Functional Part', ['mass'] = 28.62, ['volume'] = 26.8},\n ['basicelectricengines'] = {['name'] = 'Basic Electric Engine S', ['tier'] = 1, ['type'] = 'Functional Part', ['mass'] = 377.75, ['volume'] = 39.04},\n ['basicelectricenginem'] = {['name'] = 'Basic Electric Engine M', ['tier'] = 1, ['type'] = 'Functional Part', ['mass'] = 1930, ['volume'] = 206.4},\n ['uncommonelectricenginexl'] = {['name'] = 'Uncommon Electric Engine XL', ['tier'] = 2, ['type'] = 'Functional Part', ['mass'] = 50800, ['volume'] = 6107.49},\n ['basicfiringsystemxs'] = {['name'] = 'Basic Firing System XS', ['tier'] = 1, ['type'] = 'Functional Part', ['mass'] = 60.65, ['volume'] = 9.6},\n ['advancedfiringsystemxs'] = {['name'] = 'Advanced Firing System XS', ['tier'] = 3, ['type'] = 'Functional Part', ['mass'] = 163.51, ['volume'] = 27.2},\n ['advancedfiringsystems'] = {['name'] = 'Advanced Firing System S', ['tier'] = 3, ['type'] = 'Functional Part', ['mass'] = 369.5, ['volume'] = 58.4},\n ['advancedfiringsystemm'] = {['name'] = 'Advanced Firing System M', ['tier'] = 3, ['type'] = 'Functional Part', ['mass'] = 1760, ['volume'] = 268},\n ['advancedfiringsysteml'] = {['name'] = 'Advanced Firing System L', ['tier'] = 3, ['type'] = 'Functional Part', ['mass'] = 9410, ['volume'] = 1383.2},\n ['basicgazcylinderxs'] = {['name'] = 'Basic Gaz Cylinder XS', ['tier'] = 1, ['type'] = 'Functional Part', ['mass'] = 15.68, ['volume'] = 9.6},\n ['basicgazcylinders'] = {['name'] = 'Basic Gaz Cylinder S', ['tier'] = 1, ['type'] = 'Functional Part', ['mass'] = 81.38, ['volume'] = 49.6},\n ['basicgazcylinderm'] = {['name'] = 'Basic Gaz Cylinder M', ['tier'] = 1, ['type'] = 'Functional Part', ['mass'] = 427.88, ['volume'] = 259.2},\n ['basicionicchamberxs'] = {['name'] = 'Basic Ionic Chamber XS', ['tier'] = 1, ['type'] = 'Functional Part', ['mass'] = 75.1, ['volume'] = 7.33},\n ['basicionicchambers'] = {['name'] = 'Basic Ionic Chamber S', ['tier'] = 1, ['type'] = 'Functional Part', ['mass'] = 391.6, ['volume'] = 38.24},\n ['basicionicchamberm'] = {['name'] = 'Basic Ionic Chamber M', ['tier'] = 1, ['type'] = 'Functional Part', ['mass'] = 2070, ['volume'] = 202.4},\n ['basicionicchamberl'] = {['name'] = 'Basic Ionic Chamber L', ['tier'] = 1, ['type'] = 'Functional Part', ['mass'] = 1620, ['volume'] = 1090.4},\n ['basicionicchamberxl'] = {['name'] = 'Basic Ionic Chamber XL', ['tier'] = 1, ['type'] = 'Functional Part', ['mass'] = 61230, ['volume'] = 6000.8},\n ['uncommonionicchamberxs'] = {['name'] = 'Uncommon Ionic Chamber XS', ['tier'] = 1, ['type'] = 'Functional Part', ['mass'] = 140.8, ['volume'] = 13.86},\n ['uncommonionicchambers'] = {['name'] = 'Uncommon Ionic Chamber S', ['tier'] = 1, ['type'] = 'Functional Part', ['mass'] = 452.35, ['volume'] = 44.77},\n ['uncommonionicchamberm'] = {['name'] = 'Uncommon Ionic Chamber M', ['tier'] = 1, ['type'] = 'Functional Part', ['mass'] = 2100, ['volume'] = 208.93},\n ['uncommonionicchamberl'] = {['name'] = 'Uncommon Ionic Chamber L', ['tier'] = 1, ['type'] = 'Functional Part', ['mass'] = 11010, ['volume'] = 1096.93},\n ['uncommonionicchamberxl'] = {['name'] = 'Uncommon Ionic Chamber XL', ['tier'] = 1, ['type'] = 'Functional Part', ['mass'] = 60120, ['volume'] = 6007.33},\n ['advancedionicchamberm'] = {['name'] = 'Advanced Ionic Chamber M', ['tier'] = 3, ['type'] = 'Functional Part', ['mass'] = 8640, ['volume'] = 208.93},\n ['advancedionicchamberl'] = {['name'] = 'Advanced Ionic Chamber L', ['tier'] = 3, ['type'] = 'Functional Part', ['mass'] = 11370, ['volume'] = 1096.93},\n ['uncommonlaserchamberxs'] = {['name'] = 'Uncommon Laser Chamber XS', ['tier'] = 2, ['type'] = 'Functional Part', ['mass'] = 24.8, ['volume'] = 18.4},\n ['advancedlaserchamberxs'] = {['name'] = 'Advanced Laser Chamber XS', ['tier'] = 3, ['type'] = 'Functional Part', ['mass'] = 36.51, ['volume'] = 27.2},\n ['advancedlaserchambers'] = {['name'] = 'Advanced Laser Chamber S', ['tier'] = 3, ['type'] = 'Functional Part', ['mass'] = 87.02, ['volume'] = 58.4},\n ['advancedlaserchamberm'] = {['name'] = 'Advanced Laser Chamber M', ['tier'] = 3, ['type'] = 'Functional Part', ['mass'] = 429.89, ['volume'] = 268},\n ['advancedlaserchamberl'] = {['name'] = 'Advanced Laser Chamber L', ['tier'] = 3, ['type'] = 'Functional Part', ['mass'] = 2380, ['volume'] = 1383.2},\n ['rarelaserchambers'] = {['name'] = 'Rare Laser Chamber S', ['tier'] = 4, ['type'] = 'Functional Part', ['mass'] = 90.49, ['volume'] = 58.4},\n ['uncommonlightxs'] = {['name'] = 'Uncommon Light XS', ['tier'] = 2, ['type'] = 'Functional Part', ['mass'] = 7.84, ['volume'] = 8.8},\n ['uncommonlights'] = {['name'] = 'Uncommon Light S', ['tier'] = 2, ['type'] = 'Functional Part', ['mass'] = 28.8, ['volume'] = 29.6},\n ['advancedmagneticrailxs'] = {['name'] = 'Advanced Magnetic Rail XS', ['tier'] = 3, ['type'] = 'Functional Part', ['mass'] = 204.7, ['volume'] = 20.86},\n ['advancedmagneticrails'] = {['name'] = 'Advanced Magnetic Rail S', ['tier'] = 3, ['type'] = 'Functional Part', ['mass'] = 451.89, ['volume'] = 45.73},\n ['advancedmagneticrailm'] = {['name'] = 'Advanced Magnetic Rail M', ['tier'] = 3, ['type'] = 'Functional Part', ['mass'] = 2120, ['volume'] = 213.09},\n ['advancedmagneticraill'] = {['name'] = 'Advanced Magnetic Rail L', ['tier'] = 3, ['type'] = 'Functional Part', ['mass'] = 11160, ['volume'] = 1117.09},\n ['basicmechanicalsensorxs'] = {['name'] = 'Basic Mechanical Sensor XS', ['tier'] = 1, ['type'] = 'Functional Part', ['mass'] = 35.96, ['volume'] = 7.49},\n ['advancedmechanicalsensorxs'] = {['name'] = 'Advanced Mechanical Sensor XS', ['tier'] = 3, ['type'] = 'Functional Part', ['mass'] = 100.99, ['volume'] = 20.86},\n ['exoticmechanicalsensorxs'] = {['name'] = 'Exotic Mechanical Sensor XS', ['tier'] = 5, ['type'] = 'Functional Part', ['mass'] = 102.37, ['volume'] = 19.26},\n ['advancedmissilesiloxs'] = {['name'] = 'Advanced Missile Silo XS', ['tier'] = 3, ['type'] = 'Functional Part', ['mass'] = 157.51, ['volume'] = 27.2},\n ['advancedmissilesilos'] = {['name'] = 'Advanced Missile Silo S', ['tier'] = 3, ['type'] = 'Functional Part', ['mass'] = 327.52, ['volume'] = 58.4},\n ['advancedmissilesilom'] = {['name'] = 'Advanced Missile Silo M', ['tier'] = 3, ['type'] = 'Functional Part', ['mass'] = 1460, ['volume'] = 268},\n ['advancedmissilesilol'] = {['name'] = 'Advanced Missile Silo L', ['tier'] = 3, ['type'] = 'Functional Part', ['mass'] = 7360, ['volume'] = 1383.2},\n ['basicmobilepanelxs'] = {['name'] = 'Basic Mobile Panel XS', ['tier'] = 1, ['type'] = 'Functional Part', ['mass'] = 20, ['volume'] = 9.6},\n ['basicmobilepanels'] = {['name'] = 'Basic Mobile Panel S', ['tier'] = 1, ['type'] = 'Functional Part', ['mass'] = 103, ['volume'] = 49.6},\n ['basicmobilepanelm'] = {['name'] = 'Basic Mobile Panel M', ['tier'] = 1, ['type'] = 'Functional Part', ['mass'] = 536, ['volume'] = 259.2},\n ['basicmobilepanell'] = {['name'] = 'Basic Mobile Panel L', ['tier'] = 1, ['type'] = 'Functional Part', ['mass'] = 2830, ['volume'] = 1374.4},\n ['basicmobilepanelxl'] = {['name'] = 'Basic Mobile Panel XL', ['tier'] = 1, ['type'] = 'Functional Part', ['mass'] = 15160, ['volume'] = 7420.8},\n ['advancedmotherboardm'] = {['name'] = 'Advanced Motherboard M', ['tier'] = 3, ['type'] = 'Functional Part', ['mass'] = 109.19, ['volume'] = 96},\n ['uncommonorescannerxl'] = {['name'] = 'Uncommon Ore Scanner XL', ['tier'] = 2, ['type'] = 'Functional Part', ['mass'] = 1870, ['volume'] = 2702.9},\n ['basicpowertransformerm'] = {['name'] = 'Basic Power Transformer M', ['tier'] = 1, ['type'] = 'Functional Part', ['mass'] = 1020, ['volume'] = 196.4},\n ['uncommonpowertransformers'] = {['name'] = 'Uncommon Power Transformer S', ['tier'] = 2, ['type'] = 'Functional Part', ['mass'] = 221.56, ['volume'] = 43.33},\n ['uncommonpowertransformerm'] = {['name'] = 'Uncommon Power Transformer M', ['tier'] = 2, ['type'] = 'Functional Part', ['mass'] = 1030, ['volume'] = 202.69},\n ['rarepowertransformerl'] = {['name'] = 'Rare Power Transformer L', ['tier'] = 4, ['type'] = 'Functional Part', ['mass'] = 5570, ['volume'] = 1066.69},\n ['rarepowertransformerxl'] = {['name'] = 'Rare Power Transformer XL', ['tier'] = 4, ['type'] = 'Functional Part', ['mass'] = 30540, ['volume'] = 5857.09},\n ['exoticpowertransformerl'] = {['name'] = 'Exotic Power Transformer L', ['tier'] = 5, ['type'] = 'Functional Part', ['mass'] = 5570, ['volume'] = 1066.29},\n ['basicroboticarmm'] = {['name'] = 'Basic Robotic Arm M', ['tier'] = 1, ['type'] = 'Functional Part', ['mass'] = 927, ['volume'] = 249.2},\n ['basicroboticarml'] = {['name'] = 'Basic Robotic Arm L', ['tier'] = 1, ['type'] = 'Functional Part', ['mass'] = 4930, ['volume'] = 1324.4},\n ['basicroboticarmxl'] = {['name'] = 'Basic Robotic Arm XL', ['tier'] = 1, ['type'] = 'Functional Part', ['mass'] = 26700, ['volume'] = 7170.8},\n ['basicscreens'] = {['name'] = 'Basic Screen S', ['tier'] = 1, ['type'] = 'Functional Part', ['mass'] = 21.07, ['volume'] = 25.6},\n ['basicscreenm'] = {['name'] = 'Basic Screen M', ['tier'] = 1, ['type'] = 'Functional Part', ['mass'] = 115.17, ['volume'] = 139.2},\n ['uncommonscreenxs'] = {['name'] = 'Uncommon Screen XS', ['tier'] = 2, ['type'] = 'Functional Part', ['mass'] = 7.29, ['volume'] = 8.8},\n ['uncommonscreenl'] = {['name'] = 'Uncommon Screen L', ['tier'] = 2, ['type'] = 'Functional Part', ['mass'] = 671.24, ['volume'] = 778.4},\n ['uncommonscreenxl'] = {['name'] = 'Uncommon Screen XL', ['tier'] = 2, ['type'] = 'Functional Part', ['mass'] = 3860, ['volume'] = 4424.8},\n ['advancedscreenxs'] = {['name'] = 'Advanced Screen XS', ['tier'] = 3, ['type'] = 'Functional Part', ['mass'] = 10.73, ['volume'] = 12.8},\n ['basiccasingxs'] = {['name'] = 'Basic Casing XS', ['tier'] = 1, ['type'] = 'Structural Part', ['mass'] = 1.4, ['volume'] = 2},\n ['basiccasings'] = {['name'] = 'Basic Casing S', ['tier'] = 1, ['type'] = 'Structural Part', ['mass'] = 7.7, ['volume'] = 11},\n ['basiccasingm'] = {['name'] = 'Basic Casing M', ['tier'] = 1, ['type'] = 'Structural Part', ['mass'] = 51.8, ['volume'] = 74},\n ['basiccasingl'] = {['name'] = 'Basic Casing L', ['tier'] = 1, ['type'] = 'Structural Part', ['mass'] = 360.5, ['volume'] = 515},\n ['uncommoncasingxs'] = {['name'] = 'Uncommon Casing XS', ['tier'] = 2, ['type'] = 'Structural Part', ['mass'] = 1.45, ['volume'] = 2},\n ['uncommoncasings'] = {['name'] = 'Uncommon Casing S', ['tier'] = 2, ['type'] = 'Structural Part', ['mass'] = 8.05, ['volume'] = 1},\n ['uncommoncasingm'] = {['name'] = 'Uncommon Casing M', ['tier'] = 2, ['type'] = 'Structural Part', ['mass'] = 54.25, ['volume'] = 74},\n ['uncommoncasingl'] = {['name'] = 'Uncommon Casing L', ['tier'] = 2, ['type'] = 'Structural Part', ['mass'] = 377.65, ['volume'] = 515},\n ['uncommoncasingxl'] = {['name'] = 'Uncommon Casing XL', ['tier'] = 2, ['type'] = 'Structural Part', ['mass'] = 2640, ['volume'] = 3602},\n ['advancedcasingxs'] = {['name'] = 'Advanced Casing XS', ['tier'] = 3, ['type'] = 'Structural Part', ['mass'] = 1.5, ['volume'] = 2},\n ['advancedcasings'] = {['name'] = 'Advanced Casing S', ['tier'] = 3, ['type'] = 'Structural Part', ['mass'] = 8.4, ['volume'] = 1},\n ['advancedcasingm'] = {['name'] = 'Advanced Casing M', ['tier'] = 3, ['type'] = 'Structural Part', ['mass'] = 56.7, ['volume'] = 74},\n ['advancedcasingl'] = {['name'] = 'Advanced Casing L', ['tier'] = 3, ['type'] = 'Structural Part', ['mass'] = 394.8, ['volume'] = 515},\n ['advancedcasingxl'] = {['name'] = 'Advanced Casing XL', ['tier'] = 3, ['type'] = 'Structural Part', ['mass'] = 2760, ['volume'] = 3602},\n ['rarecasingxs'] = {['name'] = 'Rare Casing XS', ['tier'] = 4, ['type'] = 'Structural Part', ['mass'] = 1.52, ['volume'] = 2},\n ['rarecasings'] = {['name'] = 'Rare Casing S', ['tier'] = 4, ['type'] = 'Structural Part', ['mass'] = 8.57, ['volume'] = 11},\n ['exoticcasings'] = {['name'] = 'Exotic Casing S', ['tier'] = 5, ['type'] = 'Structural Part', ['mass'] = 8.29, ['volume'] = 11},\n ['basicreinforcedframexs'] = {['name'] = 'Basic Reinforced Frame XS', ['tier'] = 1, ['type'] = 'Structural Part', ['mass'] = 12.88, ['volume'] = 2},\n ['basicreinforcedframes'] = {['name'] = 'Basic Reinforced Frame S', ['tier'] = 1, ['type'] = 'Structural Part', ['mass'] = 70.84, ['volume'] = 11},\n ['basicreinforcedframem'] = {['name'] = 'Basic Reinforced Frame M', ['tier'] = 1, ['type'] = 'Structural Part', ['mass'] = 476, ['volume'] = 74},\n ['basicreinforcedframel'] = {['name'] = 'Basic Reinforced Frame L', ['tier'] = 1, ['type'] = 'Structural Part', ['mass'] = 3320, ['volume'] = 515},\n ['basicreinforcedframexl'] = {['name'] = 'Basic Reinforced Frame XL', ['tier'] = 1, ['type'] = 'Structural Part', ['mass'] = 23200, ['volume'] = 3602},\n ['uncommonreinforcedframexs'] = {['name'] = 'Uncommon Reinforced Frame XS', ['tier'] = 2, ['type'] = 'Structural Part', ['mass'] = 12.64, ['volume'] = 2},\n ['uncommonreinforcedframes'] = {['name'] = 'Uncommon Reinforced Frame S', ['tier'] = 2, ['type'] = 'Structural Part', ['mass'] = 69.16, ['volume'] = 11},\n ['uncommonreinforcedframem'] = {['name'] = 'Uncommon Reinforced Frame M', ['tier'] = 2, ['type'] = 'Structural Part', ['mass'] = 464.8, ['volume'] = 74},\n ['uncommonreinforcedframel'] = {['name'] = 'Uncommon Reinforced Frame L', ['tier'] = 2, ['type'] = 'Structural Part', ['mass'] = 3230, ['volume'] = 515},\n ['uncommonreinforcedframexl'] = {['name'] = 'Uncommon Reinforced Frame XL', ['tier'] = 2, ['type'] = 'Structural Part', ['mass'] = 22620, ['volume'] = 3602},\n ['advancedreinforcedframexs'] = {['name'] = 'Advanced Reinforced Frame XS', ['tier'] = 3, ['type'] = 'Structural Part', ['mass'] = 13.24, ['volume'] = 2},\n ['advancedreinforcedframes'] = {['name'] = 'Advanced Reinforced Frame S', ['tier'] = 3, ['type'] = 'Structural Part', ['mass'] = 73.34, ['volume'] = 11},\n ['advancedreinforcedframem'] = {['name'] = 'Advanced Reinforced Frame M', ['tier'] = 3, ['type'] = 'Structural Part', ['mass'] = 494.08, ['volume'] = 74},\n ['advancedreinforcedframel'] = {['name'] = 'Advanced Reinforced Frame L', ['tier'] = 3, ['type'] = 'Structural Part', ['mass'] = 3440, ['volume'] = 515},\n ['rarereinforcedframel'] = {['name'] = 'Rare Reinforced Frame L', ['tier'] = 4, ['type'] = 'Structural Part', ['mass'] = 3370, ['volume'] = 515},\n ['rarereinforcedframexl'] = {['name'] = 'Rare Reinforced Frame XL', ['tier'] = 4, ['type'] = 'Structural Part', ['mass'] = 23540, ['volume'] = 3602},\n ['exoticreinforcedframem'] = {['name'] = 'Exotic Reinforced Frame M', ['tier'] = 5, ['type'] = 'Structural Part', ['mass'] = 468.05, ['volume'] = 74},\n ['exoticreinforcedframel'] = {['name'] = 'Exotic Reinforced Frame L', ['tier'] = 5, ['type'] = 'Structural Part', ['mass'] = 3260, ['volume'] = 515},\n ['exoticreinforcedframexl'] = {['name'] = 'Exotic Reinforced Frame XL', ['tier'] = 5, ['type'] = 'Structural Part', ['mass'] = 22780, ['volume'] = 3602},\n ['basicstandardframexs'] = {['name'] = 'Basic Standard Frame XS', ['tier'] = 1, ['type'] = 'Structural Part', ['mass'] = 4.2, ['volume'] = 2},\n ['basicstandardframes'] = {['name'] = 'Basic Standard Frame S', ['tier'] = 1, ['type'] = 'Structural Part', ['mass'] = 23.1, ['volume'] = 11},\n ['basicstandardframem'] = {['name'] = 'Basic Standard Frame M', ['tier'] = 1, ['type'] = 'Structural Part', ['mass'] = 155.4, ['volume'] = 74},\n ['basicstandardframel'] = {['name'] = 'Basic Standard Frame L', ['tier'] = 1, ['type'] = 'Structural Part', ['mass'] = 1080, ['volume'] = 515},\n ['uncommonstandardframexs'] = {['name'] = 'Uncommon Standard Frame XS', ['tier'] = 2, ['type'] = 'Structural Part', ['mass'] = 4.06, ['volume'] = 2},\n ['uncommonstandardframes'] = {['name'] = 'Uncommon Standard Frame S', ['tier'] = 2, ['type'] = 'Structural Part', ['mass'] = 22.12, ['volume'] = 11},\n ['uncommonstandardframem'] = {['name'] = 'Uncommon Standard Frame M', ['tier'] = 2, ['type'] = 'Structural Part', ['mass'] = 148.54, ['volume'] = 74},\n ['uncommonstandardframel'] = {['name'] = 'Uncommon Standard Frame L', ['tier'] = 2, ['type'] = 'Structural Part', ['mass'] = 1030, ['volume'] = 515},\n ['advancedstandardframexs'] = {['name'] = 'Advanced Standard Frame XS', ['tier'] = 3, ['type'] = 'Structural Part', ['mass'] = 3.85, ['volume'] = 2},\n ['advancedstandardframes'] = {['name'] = 'Advanced Standard Frame S', ['tier'] = 3, ['type'] = 'Structural Part', ['mass'] = 20.65, ['volume'] = 11},\n ['advancedstandardframem'] = {['name'] = 'Advanced Standard Frame M', ['tier'] = 3, ['type'] = 'Structural Part', ['mass'] = 138.25, ['volume'] = 74},\n ['advancedstandardframel'] = {['name'] = 'Advanced Standard Frame L', ['tier'] = 3, ['type'] = 'Structural Part', ['mass'] = 961.45, ['volume'] = 515},\n ['rarestandardframel'] = {['name'] = 'Rare Standard Frame L', ['tier'] = 4, ['type'] = 'Structural Part', ['mass'] = 1050, ['volume'] = 515},\n ['exoticstandardframexs'] = {['name'] = 'Exotic Standard Frame XS', ['tier'] = 5, ['type'] = 'Structural Part', ['mass'] = 5.2, ['volume'] = 2},\n ['exoticstandardframel'] = {['name'] = 'Exotic Standard Frame L', ['tier'] = 5, ['type'] = 'Structural Part', ['mass'] = 1420, ['volume'] = 515},\n ['dynamiccoreunitxs'] = {['name'] = 'Dynamic Core XS', ['tier'] = 1, ['type'] = 'Core Unit', ['mass'] = 70.89, ['volume'] = 16.1},\n ['dynamiccoreunits'] = {['name'] = 'Dynamic Core S', ['tier'] = 2, ['type'] = 'Core Unit', ['mass'] = 375.97, ['volume'] = 87.2},\n ['dynamiccoreunitm'] = {['name'] = 'Dynamic Core M', ['tier'] = 3, ['type'] = 'Core Unit', ['mass'] = 1980, ['volume'] = 454.8},\n ['dynamiccoreunitl'] = {['name'] = 'Dynamic Core L', ['tier'] = 4, ['type'] = 'Core Unit', ['mass'] = 12140, ['volume'] = 2501},\n ['staticcoreunitxs'] = {['name'] = 'Static Core XS', ['tier'] = 1, ['type'] = 'Core Unit', ['mass'] = 70.89, ['volume'] = 16.1},\n ['staticcoreunits'] = {['name'] = 'Static Core S', ['tier'] = 1, ['type'] = 'Core Unit', ['mass'] = 360.18, ['volume'] = 83.6},\n ['staticcoreunitm'] = {['name'] = 'Static Core M', ['tier'] = 2, ['type'] = 'Core Unit', ['mass'] = 1930, ['volume'] = 454.8},\n ['staticcoreunitl'] = {['name'] = 'Static Core L', ['tier'] = 2, ['type'] = 'Core Unit', ['mass'] = 10700, ['volume'] = 2501},\n ['spacecoreunitxs'] = {['name'] = 'Space Core XS', ['tier'] = 1, ['type'] = 'Core Unit', ['mass'] = 38.99, ['volume'] = 14},\n ['spacecoreunits'] = {['name'] = 'Space Core S', ['tier'] = 2, ['type'] = 'Core Unit', ['mass'] = 459.57, ['volume'] = 120},\n ['spacecoreunitm'] = {['name'] = 'Space Core M', ['tier'] = 3, ['type'] = 'Core Unit', ['mass'] = 3040, ['volume'] = 420},\n ['spacecoreunitl'] = {['name'] = 'Space Core L', ['tier'] = 4, ['type'] = 'Core Unit', ['mass'] = 7680, ['volume'] = 1383},\n ['territoryunit'] = {['name'] = 'Territory Unit', ['tier'] = 5, ['type'] = 'Core Unit', ['mass'] = 20050, ['volume'] = 4118.29},\n ['containerhub'] = {['name'] = 'Container Hub', ['tier'] = 1, ['type'] = 'Container', ['mass'] = 55.8, ['volume'] = 44.3},\n ['containerxs'] = {['name'] = 'Container XS', ['tier'] = 1, ['type'] = 'Container', ['mass'] = 229.09, ['volume'] = 64},\n ['containers'] = {['name'] = 'Container S', ['tier'] = 1, ['type'] = 'Container', ['mass'] = 1281.31, ['volume'] = 342},\n ['containerm'] = {['name'] = 'Container M', ['tier'] = 1, ['type'] = 'Container', ['mass'] = 7421.35, ['volume'] = 1873},\n ['containerl'] = {['name'] = 'Container L', ['tier'] = 1, ['type'] = 'Container', ['mass'] = 14842.7, ['volume'] = 3746},\n ['dispenser'] = {['name'] = 'Dispenser', ['tier'] = 1, ['type'] = 'Container', ['mass'] = 2060, ['volume'] = 479.2},\n ['atmosphericfueltankxs'] = {['name'] = 'Atmospheric Fuel-Tank XS', ['tier'] = 1, ['type'] = 'Container', ['mass'] = 35.03, ['volume'] = 17.8},\n ['atmosphericfueltanks'] = {['name'] = 'Atmospheric Fuel-Tank S', ['tier'] = 1, ['type'] = 'Container', ['mass'] = 182.67, ['volume'] = 92.6},\n ['atmosphericfueltankm'] = {['name'] = 'Atmospheric Fuel-Tank M', ['tier'] = 1, ['type'] = 'Container', ['mass'] = 988.67, ['volume'] = 499.2},\n ['atmosphericfueltankl'] = {['name'] = 'Atmospheric Fuel-Tank L', ['tier'] = 1, ['type'] = 'Container', ['mass'] = 5480, ['volume'] = 2755.4},\n ['spacefueltanks'] = {['name'] = 'Space Fuel-Tank S', ['tier'] = 2, ['type'] = 'Container', ['mass'] = 182.67, ['volume'] = 92.6},\n ['spacefueltankm'] = {['name'] = 'Space Fuel-Tank M', ['tier'] = 2, ['type'] = 'Container', ['mass'] = 988.67, ['volume'] = 499.2},\n ['spacefueltankl'] = {['name'] = 'Space Fuel-Tank L', ['tier'] = 2, ['type'] = 'Container', ['mass'] = 5480, ['volume'] = 2755.4},\n ['rocketfueltankxs'] = {['name'] = 'Rocket Fuel-Tank XS', ['tier'] = 3, ['type'] = 'Container', ['mass'] = 173.42, ['volume'] = 96.6},\n ['rocketfueltanks'] = {['name'] = 'Rocket Fuel-Tank S', ['tier'] = 3, ['type'] = 'Container', ['mass'] = 886.72, ['volume'] = 503.2},\n ['rocketfueltankm'] = {['name'] = 'Rocket Fuel-Tank M', ['tier'] = 3, ['type'] = 'Container', ['mass'] = 6231, ['volume'] = 6400},\n ['rocketfueltankl'] = {['name'] = 'Rocket Fuel-Tank L', ['tier'] = 3, ['type'] = 'Container', ['mass'] = 25740, ['volume'] = 15570},\n ['ammocontainerxs'] = {['name'] = 'Ammo Container XS', ['tier'] = 1, ['type'] = 'Container', ['mass'] = 216.15, ['volume'] = 67},\n ['ammocontainers'] = {['name'] = 'Ammo Container S', ['tier'] = 1, ['type'] = 'Container', ['mass'] = 1170, ['volume'] = 360},\n ['ammocontainerm'] = {['name'] = 'Ammo Container M', ['tier'] = 1, ['type'] = 'Container', ['mass'] = 6440, ['volume'] = 1981},\n ['ammocontainerl'] = {['name'] = 'Ammo Container L', ['tier'] = 1, ['type'] = 'Container', ['mass'] = 12880, ['volume'] = 3962},\n ['assemblylinexs'] = {['name'] = 'Assembly Line XS', ['tier'] = 1, ['type'] = 'Industry', ['mass'] = 100.93, ['volume'] = 21.8},\n ['assemblylines'] = {['name'] = 'Assembly Line S', ['tier'] = 1, ['type'] = 'Industry', ['mass'] = 522.14, ['volume'] = 112.6},\n ['assemblylinem'] = {['name'] = 'Assembly Line M', ['tier'] = 1, ['type'] = 'Industry', ['mass'] = 2800, ['volume'] = 599.2},\n ['assemblylinel'] = {['name'] = 'Assembly Line L', ['tier'] = 1, ['type'] = 'Industry', ['mass'] = 15380, ['volume'] = 3255.4},\n ['assemblylinexl'] = {['name'] = 'Assembly Line XL', ['tier'] = 1, ['type'] = 'Industry', ['mass'] = 86290, ['volume'] = 18070},\n ['3dprinterm'] = {['name'] = '3D Printer M', ['tier'] = 1, ['type'] = 'Industry', ['mass'] = 2000, ['volume'] = 609.2},\n ['chemicalindustrym'] = {['name'] = 'Chemical Industry M', ['tier'] = 1, ['type'] = 'Industry', ['mass'] = 2300, ['volume'] = 479.2},\n ['electronicsindustrym'] = {['name'] = 'Electronics Industry M', ['tier'] = 1, ['type'] = 'Industry', ['mass'] = 1620, ['volume'] = 459.2},\n ['glassfurnacem'] = {['name'] = 'Glass Furnace M', ['tier'] = 1, ['type'] = 'Industry', ['mass'] = 2830, ['volume'] = 556.4},\n ['honeycombrefinerym'] = {['name'] = 'Honeycomb Refinery M', ['tier'] = 1, ['type'] = 'Industry', ['mass'] = 2990, ['volume'] = 589.2},\n ['metalworkindustrym'] = {['name'] = 'Metalwork Industry M', ['tier'] = 1, ['type'] = 'Industry', ['mass'] = 2600, ['volume'] = 599.2},\n ['recyclerm'] = {['name'] = 'Recycler M', ['tier'] = 1, ['type'] = 'Industry', ['mass'] = 2350, ['volume'] = 619.2},\n ['refinerm'] = {['name'] = 'Refiner M', ['tier'] = 1, ['type'] = 'Industry', ['mass'] = 2300, ['volume'] = 479.2},\n ['smelterm'] = {['name'] = 'Smelter M', ['tier'] = 1, ['type'] = 'Industry', ['mass'] = 2060, ['volume'] = 499.2},\n ['transferunit'] = {['name'] = 'Transfer Unit', ['tier'] = 1, ['type'] = 'Industry', ['mass'] = 10150, ['volume'] = 3305.4},\n ['retrorocketbrakes'] = {['name'] = 'Retro-Rocket Brake S', ['tier'] = 1, ['type'] = 'Space Brake', ['mass'] = 137.55, ['volume'] = 20.33},\n ['retrorocketbrakem'] = {['name'] = 'Retro-Rocket Brake M', ['tier'] = 1, ['type'] = 'Space Brake', ['mass'] = 714, ['volume'] = 105.24},\n ['retrorocketbrakel'] = {['name'] = 'Retro-Rocket Brake L', ['tier'] = 1, ['type'] = 'Space Brake', ['mass'] = 3770, ['volume'] = 562.4},\n ['atmosphericairbrakes'] = {['name'] = 'Atmospheric Airbrake S', ['tier'] = 1, ['type'] = 'Airbrake', ['mass'] = 55.55, ['volume'] = 22.6},\n ['atmosphericairbrakem'] = {['name'] = 'Atmospheric Airbrake M', ['tier'] = 1, ['type'] = 'Airbrake', ['mass'] = 285.25, ['volume'] = 116.6},\n ['atmosphericairbrakel'] = {['name'] = 'Atmospheric Airbrake L', ['tier'] = 1, ['type'] = 'Airbrake', ['mass'] = 1500, ['volume'] = 619.2},\n ['compactaileronxs'] = {['name'] = 'Compact Aileron XS', ['tier'] = 1, ['type'] = 'Aileron', ['mass'] = 61.2, ['volume'] = 22.6},\n ['compactailerons'] = {['name'] = 'Compact Aileron S', ['tier'] = 1, ['type'] = 'Aileron', ['mass'] = 319.15, ['volume'] = 116.6},\n ['compactaileronm'] = {['name'] = 'Compact Aileron M', ['tier'] = 1, ['type'] = 'Aileron', ['mass'] = 1705, ['volume'] = 619.2},\n ['aileronxs'] = {['name'] = 'Aileron XS', ['tier'] = 1, ['type'] = 'Aileron', ['mass'] = 122.4, ['volume'] = 45.2},\n ['ailerons'] = {['name'] = 'Aileron S', ['tier'] = 1, ['type'] = 'Aileron', ['mass'] = 638.3, ['volume'] = 233.2},\n ['aileronm'] = {['name'] = 'Aileron M', ['tier'] = 1, ['type'] = 'Aileron', ['mass'] = 3410, ['volume'] = 1238.4},\n ['stabilizerxs'] = {['name'] = 'Stabilizer XS', ['tier'] = 1, ['type'] = 'Stabilizer', ['mass'] = 69.88, ['volume'] = 22.6},\n ['stabilizers'] = {['name'] = 'Stabilizer S', ['tier'] = 1, ['type'] = 'Stabilizer', ['mass'] = 366.89, ['volume'] = 116.6},\n ['stabilizerm'] = {['name'] = 'Stabilizer M', ['tier'] = 1, ['type'] = 'Stabilizer', ['mass'] = 2030, ['volume'] = 619.2},\n ['stabilizerl'] = {['name'] = 'Stabilizer L', ['tier'] = 1, ['type'] = 'Stabilizer', ['mass'] = 11500, ['volume'] = 3355.4},\n ['wingxs'] = {['name'] = 'Wing XS', ['tier'] = 1, ['type'] = 'Wing', ['mass'] = 61.2, ['volume'] = 22.6},\n ['wings'] = {['name'] = 'Wing S', ['tier'] = 1, ['type'] = 'Wing', ['mass'] = 319.15, ['volume'] = 116.6},\n ['wingm'] = {['name'] = 'Wing M', ['tier'] = 1, ['type'] = 'Wing', ['mass'] = 1700, ['volume'] = 619.2},\n ['wingvariantm'] = {['name'] = 'Wing Variant M', ['tier'] = 1, ['type'] = 'Wing', ['mass'] = 1700, ['volume'] = 619.2},\n ['atmosphericenginexs'] = {['name'] = 'Atmospheric Engine XS', ['tier'] = 1, ['type'] = 'Atmospheric Engine', ['mass'] = 101.88, ['volume'] = 22.6},\n ['atmosphericengines'] = {['name'] = 'Atmospheric Engine S', ['tier'] = 2, ['type'] = 'Atmospheric Engine', ['mass'] = 539.99, ['volume'] = 116.6},\n ['atmosphericenginem'] = {['name'] = 'Atmospheric Engine M', ['tier'] = 2, ['type'] = 'Atmospheric Engine', ['mass'] = 2980, ['volume'] = 619.2},\n ['atmosphericenginel'] = {['name'] = 'Atmospheric Engine L', ['tier'] = 2, ['type'] = 'Atmospheric Engine', ['mass'] = 16930, ['volume'] = 3355.4},\n ['spaceenginexs'] = {['name'] = 'Space Engine XS', ['tier'] = 1, ['type'] = 'Space Engine', ['mass'] = 146.23, ['volume'] = 20.33},\n ['spaceengines'] = {['name'] = 'Space Engine S', ['tier'] = 1, ['type'] = 'Space Engine', ['mass'] = 761.74, ['volume'] = 105.24},\n ['spaceenginem'] = {['name'] = 'Space Engine M', ['tier'] = 1, ['type'] = 'Space Engine', ['mass'] = 4090, ['volume'] = 562.4},\n ['spaceenginel'] = {['name'] = 'Space Engine L', ['tier'] = 1, ['type'] = 'Space Engine', ['mass'] = 22470, ['volume'] = 3071.4},\n ['spaceenginexl'] = {['name'] = 'Space Engine XL', ['tier'] = 1, ['type'] = 'Space Engine', ['mass'] = 126240, ['volume'] = 17150},\n ['hoverengines'] = {['name'] = 'Hover Engine S', ['tier'] = 1, ['type'] = 'Hover Engine', ['mass'] = 56.91, ['volume'] = 22.6},\n ['hoverenginem'] = {['name'] = 'Hover Engine M', ['tier'] = 2, ['type'] = 'Hover Engine', ['mass'] = 302.02, ['volume'] = 116.6},\n ['hoverenginel'] = {['name'] = 'Hover Engine L', ['tier'] = 2, ['type'] = 'Hover Engine', ['mass'] = 1700, ['volume'] = 619.2},\n ['flathoverenginel'] = {['name'] = 'Flat Hover Engine L', ['tier'] = 2, ['type'] = 'Hover Engine', ['mass'] = 1700, ['volume'] = 619.2},\n ['adjustorxs'] = {['name'] = 'Adjustor XS', ['tier'] = 1, ['type'] = 'Adjustor', ['mass'] = 22.7, ['volume'] = 11},\n ['adjustors'] = {['name'] = 'Adjustor S', ['tier'] = 1, ['type'] = 'Adjustor', ['mass'] = 42.58, ['volume'] = 22.6},\n ['adjustorm'] = {['name'] = 'Adjustor M', ['tier'] = 1, ['type'] = 'Adjustor', ['mass'] = 220.38, ['volume'] = 116.6},\n ['adjustorl'] = {['name'] = 'Adjustor L', ['tier'] = 1, ['type'] = 'Adjustor', ['mass'] = 1180, ['volume'] = 619.2},\n ['rocketengines'] = {['name'] = 'Rocket Engine S', ['tier'] = 3, ['type'] = 'Rocket Engine', ['mass'] = 2223.76, ['volume'] = 40.2},\n ['rocketenginem'] = {['name'] = 'Rocket Engine M', ['tier'] = 3, ['type'] = 'Rocket Engine', ['mass'] = 680.05, ['volume'] = 125.4},\n ['rocketenginel'] = {['name'] = 'Rocket Engine L', ['tier'] = 4, ['type'] = 'Rocket Engine', ['mass'] = 3390, ['volume'] = 628},\n ['verticalboosterxs'] = {['name'] = 'Vertical Booster XS', ['tier'] = 1, ['type'] = 'Vertical Booster', ['mass'] = 22.7, ['volume'] = 11},\n ['verticalboosters'] = {['name'] = 'Vertical Booster S', ['tier'] = 1, ['type'] = 'Vertical Booster', ['mass'] = 102, ['volume'] = 20.33},\n ['verticalboosterm'] = {['name'] = 'Vertical Booster M', ['tier'] = 1, ['type'] = 'Vertical Booster', ['mass'] = 530.6, ['volume'] = 105.24},\n ['verticalboosterl'] = {['name'] = 'Vertical Booster L', ['tier'] = 1, ['type'] = 'Vertical Booster', ['mass'] = 2820, ['volume'] = 562.4},\n ['elevatorxs'] = {['name'] = 'Elevator XS', ['tier'] = 1, ['type'] = 'Interactive Element', ['mass'] = 207.86, ['volume'] = 57.56},\n ['landinggearxs'] = {['name'] = 'Landing Gear XS', ['tier'] = 1, ['type'] = 'Landing Gear', ['mass'] = 49.88, ['volume'] = 13},\n ['landinggears'] = {['name'] = 'Landing Gear S', ['tier'] = 2, ['type'] = 'Landing Gear', ['mass'] = 258.76, ['volume'] = 67},\n ['landinggearm'] = {['name'] = 'Landing Gear M', ['tier'] = 2, ['type'] = 'Landing Gear', ['mass'] = 1460, ['volume'] = 360},\n ['landinggearl'] = {['name'] = 'Landing Gear L', ['tier'] = 2, ['type'] = 'Landing Gear', ['mass'] = 8500, ['volume'] = 1981},\n ['forcefieldxs'] = {['name'] = 'Force Field XS', ['tier'] = 1, ['type'] = 'Force Field', ['mass'] = 207.86, ['volume'] = 57.56},\n ['forcefields'] = {['name'] = 'Force Field S', ['tier'] = 3, ['type'] = 'Force Field', ['mass'] = 110.62, ['volume'] = 34.7},\n ['forcefieldm'] = {['name'] = 'Force Field M', ['tier'] = 3, ['type'] = 'Force Field', ['mass'] = 110.62, ['volume'] = 34.7},\n ['forcefieldl'] = {['name'] = 'Force Field L', ['tier'] = 3, ['type'] = 'Force Field', ['mass'] = 110.62, ['volume'] = 34.7},\n ['territoryscanner'] = {['name'] = 'Territory Scanner', ['tier'] = 2, ['type'] = 'Instrument', ['mass'] = 66460, ['volume'] = 12700},\n ['gyroscope'] = {['name'] = 'Gyroscope', ['tier'] = 1, ['type'] = 'Instrument', ['mass'] = 104.41, ['volume'] = 17.65},\n ['telemeter'] = {['name'] = 'Telemeter', ['tier'] = 2, ['type'] = 'Instrument', ['mass'] = 40.79, ['volume'] = 31.4},\n ['remotecontroller'] = {['name'] = 'Remote Controller', ['tier'] = 3, ['type'] = 'Control Unit', ['mass'] = 7.79, ['volume'] = 4.5},\n ['hovercraftseatcontroller'] = {['name'] = 'Hovercraft Seat Controller', ['tier'] = 1, ['type'] = 'Control Unit', ['mass'] = 110.33, ['volume'] = 61.6},\n ['emergencycontroller'] = {['name'] = 'Emergency Controller', ['tier'] = 3, ['type'] = 'Control Unit', ['mass'] = 9.35, ['volume'] = 4.8},\n ['commandseatcontroller'] = {['name'] = 'Command Seat Controller', ['tier'] = 1, ['type'] = 'Control Unit', ['mass'] = 158.45, ['volume'] = 66.6},\n ['cockpitcontroller'] = {['name'] = 'Cockpit Controller', ['tier'] = 1, ['type'] = 'Control Unit', ['mass'] = 1210, ['volume'] = 491.2},\n ['programmingboard'] = {['name'] = 'Programming Board', ['tier'] = 1, ['type'] = 'Control Unit', ['mass'] = 27.74, ['volume'] = 12.7},\n ['gunnermodules'] = {['name'] = 'Gunner Module S', ['tier'] = 2, ['type'] = 'Control Unit', ['mass'] = 427.9, ['volume'] = 93.8},\n ['gunnermodulem'] = {['name'] = 'Gunner Module M', ['tier'] = 2, ['type'] = 'Control Unit', ['mass'] = 2170, ['volume'] = 486.4},\n ['gunnermodulel'] = {['name'] = 'Gunner Module L', ['tier'] = 2, ['type'] = 'Control Unit', ['mass'] = 11320, ['volume'] = 2666.6},\n ['antigravitygenerators'] = {['name'] = 'Anti-Gravity Generator S', ['tier'] = 4, ['type'] = 'Anti-Gravity Generator', ['mass'] = 27130, ['volume'] = 4279.69},\n ['antigravitygeneratorm'] = {['name'] = 'Anti-Gravity Generator M', ['tier'] = 4, ['type'] = 'Anti-Gravity Generator', ['mass'] = 137720, ['volume'] = 21620},\n ['antigravitygeneratorl'] = {['name'] = 'Anti-Gravity Generator L', ['tier'] = 4, ['type'] = 'Anti-Gravity Generator', ['mass'] = 550870, ['volume'] = 86470},\n ['antigravitypulsor'] = {['name'] = 'Anti-Gravity Pulsor', ['tier'] = 3, ['type'] = 'Anti-Gravity Generator', ['mass'] = 6210, ['volume'] = 804.93},\n ['slidingdoors'] = {['name'] = 'Sliding Door S', ['tier'] = 1, ['type'] = 'Door/Gate', ['mass'] = 749.15, ['volume'] = 102.04},\n ['slidingdoorm'] = {['name'] = 'Sliding Door M', ['tier'] = 1, ['type'] = 'Door/Gate', ['mass'] = 1010, ['volume'] = 151.8},\n ['reinforcedslidingdoor'] = {['name'] = 'Reinforced Sliding Door', ['tier'] = 1, ['type'] = 'Door/Gate', ['mass'] = 4200, ['volume'] = 546.4},\n ['interiordoor'] = {['name'] = 'Interior Door', ['tier'] = 1, ['type'] = 'Door/Gate', ['mass'] = 4200, ['volume'] = 546.4},\n ['airlock'] = {['name'] = 'Airlock', ['tier'] = 1, ['type'] = 'Door/Gate', ['mass'] = 4200, ['volume'] = 546.4},\n ['gatexs'] = {['name'] = 'Gate XS', ['tier'] = 2, ['type'] = 'Door/Gate', ['mass'] = 122750, ['volume'] = 16760},\n ['expandedgates'] = {['name'] = 'Expanded Gate S', ['tier'] = 2, ['type'] = 'Door/Gate', ['mass'] = 122750, ['volume'] = 16760},\n ['gatem'] = {['name'] = 'Gate M', ['tier'] = 2, ['type'] = 'Door/Gate', ['mass'] = 122750, ['volume'] = 16760},\n ['expandedgatel'] = {['name'] = 'Expanded Gate L', ['tier'] = 2, ['type'] = 'Door/Gate', ['mass'] = 122750, ['volume'] = 16760},\n ['gatexl'] = {['name'] = 'Gate XL', ['tier'] = 2, ['type'] = 'Door/Gate', ['mass'] = 122750, ['volume'] = 16760},\n ['andoperator'] = {['name'] = 'AND Operator', ['tier'] = 1, ['type'] = 'Electronics', ['mass'] = 13.27, ['volume'] = 5},\n ['notoperator'] = {['name'] = 'NOT Operator', ['tier'] = 1, ['type'] = 'Electronics', ['mass'] = 7.47, ['volume'] = 4.5},\n ['oroperator'] = {['name'] = 'OR Operator', ['tier'] = 1, ['type'] = 'Electronics', ['mass'] = 7.47, ['volume'] = 4.5},\n ['relay'] = {['name'] = 'Relay', ['tier'] = 1, ['type'] = 'Electronics', ['mass'] = 8.87, ['volume'] = 6.5},\n ['databank'] = {['name'] = 'Databank', ['tier'] = 1, ['type'] = 'Electronics', ['mass'] = 17.09, ['volume'] = 5.5},\n ['2counter'] = {['name'] = '2 Counter', ['tier'] = 2, ['type'] = 'Electronics', ['mass'] = 9.93, ['volume'] = 5},\n ['3counter'] = {['name'] = '3 Counter', ['tier'] = 2, ['type'] = 'Electronics', ['mass'] = 9.93, ['volume'] = 5},\n ['5counter'] = {['name'] = '5 Counter', ['tier'] = 2, ['type'] = 'Electronics', ['mass'] = 9.93, ['volume'] = 5},\n ['7counter'] = {['name'] = '7 Counter', ['tier'] = 2, ['type'] = 'Electronics', ['mass'] = 9.93, ['volume'] = 5},\n ['10counter'] = {['name'] = '10 Counter', ['tier'] = 2, ['type'] = 'Electronics', ['mass'] = 9.93, ['volume'] = 5},\n ['infraredlaseremitter'] = {['name'] = 'Infra-Red Laser Emitter', ['tier'] = 2, ['type'] = 'Electronics', ['mass'] = 9.93, ['volume'] = 5},\n ['laseremitter'] = {['name'] = 'Laser Emitter', ['tier'] = 1, ['type'] = 'Electronics', ['mass'] = 7.47, ['volume'] = 4.5},\n ['delayline'] = {['name'] = 'Delay Line', ['tier'] = 1, ['type'] = 'Electronics', ['mass'] = 7.47, ['volume'] = 4.5},\n ['receiverxs'] = {['name'] = 'Receiver XS', ['tier'] = 1, ['type'] = 'Electronics', ['mass'] = 13.27, ['volume'] = 5},\n ['receivers'] = {['name'] = 'Receiver S', ['tier'] = 2, ['type'] = 'Electronics', ['mass'] = 475.87, ['volume'] = 91.56},\n ['receiverm'] = {['name'] = 'Receiver M', ['tier'] = 2, ['type'] = 'Electronics', ['mass'] = 6636.912, ['volume'] = 1500},\n ['emitterxs'] = {['name'] = 'Emitter XS', ['tier'] = 1, ['type'] = 'Electronics', ['mass'] = 69.31, ['volume'] = 15.46},\n ['emitters'] = {['name'] = 'Emitter S', ['tier'] = 2, ['type'] = 'Electronics', ['mass'] = 427.72, ['volume'] = 88.56},\n ['emitterm'] = {['name'] = 'Emitter M', ['tier'] = 2, ['type'] = 'Electronics', ['mass'] = 2040, ['volume'] = 44.36},\n ['longlightxs'] = {['name'] = 'Long Light XS', ['tier'] = 2, ['type'] = 'Light', ['mass'] = 70.05, ['volume'] = 10.8},\n ['longlights'] = {['name'] = 'Long Light S', ['tier'] = 2, ['type'] = 'Light', ['mass'] = 79.34, ['volume'] = 21.6},\n ['longlightm'] = {['name'] = 'Long Light M', ['tier'] = 2, ['type'] = 'Light', ['mass'] = 79.34, ['volume'] = 21.6},\n ['longlightl'] = {['name'] = 'Long Light L', ['tier'] = 2, ['type'] = 'Light', ['mass'] = 79.34, ['volume'] = 21.6},\n ['squarelightxs'] = {['name'] = 'Square Light XS', ['tier'] = 2, ['type'] = 'Light', ['mass'] = 70.05, ['volume'] = 10.8},\n ['squarelights'] = {['name'] = 'Square Light S', ['tier'] = 2, ['type'] = 'Light', ['mass'] = 79.34, ['volume'] = 21.6},\n ['squarelightm'] = {['name'] = 'Square Light M', ['tier'] = 2, ['type'] = 'Light', ['mass'] = 79.34, ['volume'] = 21.6},\n ['squarelightl'] = {['name'] = 'Square Light L', ['tier'] = 2, ['type'] = 'Light', ['mass'] = 79.34, ['volume'] = 21.6},\n ['verticallightxs'] = {['name'] = 'Vertical Light XS', ['tier'] = 2, ['type'] = 'Light', ['mass'] = 70.05, ['volume'] = 10.8},\n ['verticallights'] = {['name'] = 'Vertical Light S', ['tier'] = 2, ['type'] = 'Light', ['mass'] = 79.34, ['volume'] = 21.6},\n ['verticallightm'] = {['name'] = 'Vertical Light M', ['tier'] = 2, ['type'] = 'Light', ['mass'] = 79.34, ['volume'] = 21.6},\n ['verticallightl'] = {['name'] = 'Vertical Light L', ['tier'] = 2, ['type'] = 'Light', ['mass'] = 79.34, ['volume'] = 21.6},\n ['headlight'] = {['name'] = 'Headlight', ['tier'] = 2, ['type'] = 'Light', ['mass'] = 79.34, ['volume'] = 21.6},\n ['smallatmosphericradarpvps'] = {['name'] = 'Small Atmospheric Radar PvP S', ['tier'] = 1, ['type'] = 'Radar', ['mass'] = 486.72, ['volume'] = 96.56},\n ['mediumatmosphericradarpvpm'] = {['name'] = 'Medium Atmospheric Radar PvP M', ['tier'] = 2, ['type'] = 'Radar', ['mass'] = 2910, ['volume'] = 486336},\n ['largeatmosphericradarpvpl'] = {['name'] = 'Large Atmospheric Radar PvP L', ['tier'] = 2, ['type'] = 'Radar', ['mass'] = 16140, ['volume'] = 2658.56},\n ['spaceradars'] = {['name'] = 'Space Radar S', ['tier'] = 1, ['type'] = 'Radar', ['mass'] = 486.72, ['volume'] = 96.56},\n ['spaceradarm'] = {['name'] = 'Space Radar M', ['tier'] = 1, ['type'] = 'Radar', ['mass'] = 2350, ['volume'] = 486.36},\n ['spaceradarl'] = {['name'] = 'Space Radar L', ['tier'] = 1, ['type'] = 'Radar', ['mass'] = 12490, ['volume'] = 2658.56},\n ['screenxs'] = {['name'] = 'Screen XS', ['tier'] = 2, ['type'] = 'Screen/Sign', ['mass'] = 18.67, ['volume'] = 15.8},\n ['screens'] = {['name'] = 'Screen S', ['tier'] = 2, ['type'] = 'Screen/Sign', ['mass'] = 18.67, ['volume'] = 15.8},\n ['screenm'] = {['name'] = 'Screen M', ['tier'] = 2, ['type'] = 'Screen/Sign', ['mass'] = 18.67, ['volume'] = 15.8},\n ['screenxl'] = {['name'] = 'Screen XL', ['tier'] = 3, ['type'] = 'Screen/Sign', ['mass'] = 12810, ['volume'] = 11170},\n ['transparentscreenxs'] = {['name'] = 'Transparent Screen XS', ['tier'] = 2, ['type'] = 'Screen/Sign', ['mass'] = 18.67, ['volume'] = 15.8},\n ['transparentscreens'] = {['name'] = 'Transparent Screen S', ['tier'] = 2, ['type'] = 'Screen/Sign', ['mass'] = 18.67, ['volume'] = 15.8},\n ['transparentscreenm'] = {['name'] = 'Transparent Screen M', ['tier'] = 2, ['type'] = 'Screen/Sign', ['mass'] = 18.67, ['volume'] = 15.8},\n ['transparentscreenl'] = {['name'] = 'Transparent Screen L', ['tier'] = 2, ['type'] = 'Screen/Sign', ['mass'] = 18.67, ['volume'] = 15.8},\n ['signxs'] = {['name'] = 'Sign XS', ['tier'] = 2, ['type'] = 'Screen/Sign', ['mass'] = 18.67, ['volume'] = 15.8},\n ['signs'] = {['name'] = 'Sign S', ['tier'] = 2, ['type'] = 'Screen/Sign', ['mass'] = 18.67, ['volume'] = 15.8},\n ['signm'] = {['name'] = 'Sign M', ['tier'] = 2, ['type'] = 'Screen/Sign', ['mass'] = 18.67, ['volume'] = 15.8},\n ['signl'] = {['name'] = 'Sign L', ['tier'] = 2, ['type'] = 'Screen/Sign', ['mass'] = 18.67, ['volume'] = 15.8},\n ['verticalsignxs'] = {['name'] = 'Vertical Sign XS', ['tier'] = 2, ['type'] = 'Screen/Sign', ['mass'] = 18.67, ['volume'] = 15.8},\n ['verticalsignm'] = {['name'] = 'Vertical Sign M', ['tier'] = 2, ['type'] = 'Screen/Sign', ['mass'] = 18.67, ['volume'] = 15.8},\n ['verticalsignl'] = {['name'] = 'Vertical Sign L', ['tier'] = 2, ['type'] = 'Screen/Sign', ['mass'] = 18.67, ['volume'] = 15.8},\n ['sensorss'] = {['name'] = 'Sensors S', ['tier'] = 1, ['type'] = 'Surrogate Element', ['mass'] = 28, ['volume'] = 27},\n ['officechair'] = {['name'] = 'Office Chair', ['tier'] = 1, ['type'] = 'Chair', ['mass'] = 916.52, ['volume'] = 13},\n ['executivechair'] = {['name'] = 'Executive Chair', ['tier'] = 1, ['type'] = 'Chair', ['mass'] = 39.62, ['volume'] = 24},\n ['encampmentchair'] = {['name'] = 'Encampment Chair', ['tier'] = 1, ['type'] = 'Chair', ['mass'] = 2.52, ['volume'] = 2},\n ['manualswitch'] = {['name'] = 'Manual Switch', ['tier'] = 1, ['type'] = 'Sensor', ['mass'] = 13.27, ['volume'] = 5},\n ['pressuretile'] = {['name'] = 'Pressure Tile', ['tier'] = 1, ['type'] = 'Sensor', ['mass'] = 50.63, ['volume'] = 14.49},\n ['manualbuttonxs'] = {['name'] = 'Manual Button XS', ['tier'] = 1, ['type'] = 'Sensor', ['mass'] = 13.27, ['volume'] = 5},\n ['manualbuttons'] = {['name'] = 'Manual Button S', ['tier'] = 1, ['type'] = 'Sensor', ['mass'] = 13.27, ['volume'] = 5},\n ['laserreceiver'] = {['name'] = 'Laser Receiver', ['tier'] = 2, ['type'] = 'Sensor', ['mass'] = 9.93, ['volume'] = 5},\n ['infraredlaserreceiver'] = {['name'] = 'Infra-Red Laser Receiver', ['tier'] = 2, ['type'] = 'Sensor', ['mass'] = 9.93},\n ['detectionzonexs'] = {['name'] = 'Detection Zone XS', ['tier'] = 3, ['type'] = 'Sensor', ['mass'] = 7.79, ['volume'] = 4.5},\n ['detectionzones'] = {['name'] = 'Detection Zone S', ['tier'] = 3, ['type'] = 'Sensor', ['mass'] = 7.79, ['volume'] = 4.5},\n ['detectionzonem'] = {['name'] = 'Detection Zone M', ['tier'] = 3, ['type'] = 'Sensor', ['mass'] = 7.79, ['volume'] = 4.5},\n ['detectionzonel'] = {['name'] = 'Detection Zone L', ['tier'] = 3, ['type'] = 'Sensor', ['mass'] = 7.79, ['volume'] = 4.5},\n ['keyboardunit'] = {['name'] = 'Keyboard Unit', ['tier'] = 1, ['type'] = 'Decorative', ['mass'] = 24.68, ['volume'] = 3.8},\n ['antennas'] = {['name'] = 'Antenna S', ['tier'] = 1, ['type'] = 'Antenna', ['mass'] = 130.06, ['volume'] = 24},\n ['antennam'] = {['name'] = 'Antenna M', ['tier'] = 2, ['type'] = 'Antenna', ['mass'] = 902.74, ['volume'] = 159},\n ['antennal'] = {['name'] = 'Antenna L', ['tier'] = 3, ['type'] = 'Antenna', ['mass'] = 6850, ['volume'] = 1074},\n ['barriercorner'] = {['name'] = 'Barrier Corner', ['tier'] = 1, ['type'] = 'Barrier', ['mass'] = 14.65, ['volume'] = 4},\n ['barriers'] = {['name'] = 'Barrier S', ['tier'] = 1, ['type'] = 'Barrier', ['mass'] = 14.65, ['volume'] = 4},\n ['barrierm'] = {['name'] = 'Barrier M', ['tier'] = 1, ['type'] = 'Barrier', ['mass'] = 14.65, ['volume'] = 4},\n ['sinkunit'] = {['name'] = 'Sink Unit', ['tier'] = 1, ['type'] = 'Bathroom', ['mass'] = 6.72, ['volume'] = 4},\n ['showerunit'] = {['name'] = 'Shower Unit', ['tier'] = 1, ['type'] = 'Bathroom', ['mass'] = 25.62, ['volume'] = 13},\n ['urinalunit'] = {['name'] = 'Urinal Unit', ['tier'] = 1, ['type'] = 'Bathroom', ['mass'] = 8.32, ['volume'] = 4},\n ['toiletunita'] = {['name'] = 'Toilet Unit A', ['tier'] = 1, ['type'] = 'Bathroom', ['mass'] = 6.72, ['volume'] = 4},\n ['toiletunitb'] = {['name'] = 'Toilet Unit B', ['tier'] = 1, ['type'] = 'Bathroom', ['mass'] = 6.72, ['volume'] = 4},\n ['cablemodelas'] = {['name'] = 'Cable Model-A S', ['tier'] = 1, ['type'] = 'Cable', ['mass'] = 14.1, ['volume'] = 4},\n ['cablemodelbs'] = {['name'] = 'Cable Model-B S', ['tier'] = 1, ['type'] = 'Cable', ['mass'] = 14.1, ['volume'] = 4},\n ['cablemodelcs'] = {['name'] = 'Cable Model-C S', ['tier'] = 1, ['type'] = 'Cable', ['mass'] = 14.1, ['volume'] = 4},\n ['cablemodelam'] = {['name'] = 'Cable Model-A M', ['tier'] = 1, ['type'] = 'Cable', ['mass'] = 14.1, ['volume'] = 4},\n ['cablemodelbm'] = {['name'] = 'Cable Model-B M', ['tier'] = 1, ['type'] = 'Cable', ['mass'] = 14.1, ['volume'] = 4},\n ['cablemodelcm'] = {['name'] = 'Cable Model-C M', ['tier'] = 1, ['type'] = 'Cable', ['mass'] = 14.1, ['volume'] = 4},\n ['cornercablemodela'] = {['name'] = 'Corner Cable Model-A', ['tier'] = 1, ['type'] = 'Cable', ['mass'] = 14.1, ['volume'] = 4},\n ['cornercablemodelb'] = {['name'] = 'Corner Cable Model-B', ['tier'] = 1, ['type'] = 'Cable', ['mass'] = 14.1, ['volume'] = 4},\n ['cornercablemodelc'] = {['name'] = 'Corner Cable Model-C', ['tier'] = 1, ['type'] = 'Cable', ['mass'] = 14.1, ['volume'] = 4},\n ['dresser'] = {['name'] = 'Dresser', ['tier'] = 1, ['type'] = 'Furniture', ['mass'] = 8.32, ['volume'] = 4},\n ['bench'] = {['name'] = 'Bench', ['tier'] = 1, ['type'] = 'Furniture', ['mass'] = 22.33, ['volume'] = 4},\n ['woodenlowtable'] = {['name'] = 'Wooden Low Table', ['tier'] = 1, ['type'] = 'Furniture', ['mass'] = 5.92, ['volume'] = 4},\n ['sofa'] = {['name'] = 'Sofa', ['tier'] = 1, ['type'] = 'Furniture', ['mass'] = 39.62, ['volume'] = 24},\n ['woodenwardrobe'] = {['name'] = 'Wooden Wardrobe', ['tier'] = 1, ['type'] = 'Furniture', ['mass'] = 39.62, ['volume'] = 24},\n ['table'] = {['name'] = 'Table', ['tier'] = 1, ['type'] = 'Furniture', ['mass'] = 264.32, ['volume'] = 159},\n ['trash'] = {['name'] = 'Trash', ['tier'] = 1, ['type'] = 'Furniture', ['mass'] = 6.72, ['volume'] = 4},\n ['woodensofa'] = {['name'] = 'Wooden Sofa', ['tier'] = 1, ['type'] = 'Furniture', ['mass'] = 39.62, ['volume'] = 24},\n ['nightstand'] = {['name'] = 'Nightstand', ['tier'] = 1, ['type'] = 'Furniture', ['mass'] = 6.72, ['volume'] = 4},\n ['wardrobe'] = {['name'] = 'Wardrobe', ['tier'] = 1, ['type'] = 'Furniture', ['mass'] = 39.62, ['volume'] = 24},\n ['woodenchair'] = {['name'] = 'Wooden Chair', ['tier'] = 1, ['type'] = 'Furniture', ['mass'] = 2.52, ['volume'] = 2},\n ['woodenarmchair'] = {['name'] = 'Wooden Armchair', ['tier'] = 1, ['type'] = 'Furniture', ['mass'] = 1.72, ['volume'] = 2},\n ['roundcarpet'] = {['name'] = 'Round Carpet', ['tier'] = 5, ['type'] = 'Furniture', ['mass'] = 2.78, ['volume'] = 2},\n ['squarecarpet'] = {['name'] = 'Square Carpet', ['tier'] = 1, ['type'] = 'Furniture', ['mass'] = 2.52, ['volume'] = 2},\n ['woodendresser'] = {['name'] = 'Wooden Dresser', ['tier'] = 1, ['type'] = 'Furniture', ['mass'] = 34.02, ['volume'] = 24},\n ['woodentablem'] = {['name'] = 'Wooden Table M', ['tier'] = 1, ['type'] = 'Furniture', ['mass'] = 34.02, ['volume'] = 24},\n ['woodentablel'] = {['name'] = 'Wooden Table L', ['tier'] = 1, ['type'] = 'Furniture', ['mass'] = 34.02, ['volume'] = 24},\n ['shelfempty'] = {['name'] = 'Shelf Empty', ['tier'] = 1, ['type'] = 'Furniture', ['mass'] = 8.32, ['volume'] = 4},\n ['shelfhalffull'] = {['name'] = 'Shelf Half Full', ['tier'] = 1, ['type'] = 'Furniture', ['mass'] = 8.32, ['volume'] = 4},\n ['shelffull'] = {['name'] = 'Shelf Full', ['tier'] = 1, ['type'] = 'Furniture', ['mass'] = 8.32, ['volume'] = 4},\n ['bed'] = {['name'] = 'Bed', ['tier'] = 1, ['type'] = 'Furniture', ['mass'] = 128.94, ['volume'] = 24},\n ['spaceshipholograms'] = {['name'] = 'Spaceship Hologram S', ['tier'] = 2, ['type'] = 'Hologram', ['mass'] = 112.72, ['volume'] = 9},\n ['spaceshiphologramm'] = {['name'] = 'Spaceship Hologram M', ['tier'] = 2, ['type'] = 'Hologram', ['mass'] = 15.98, ['volume'] = 13},\n ['spaceshipholograml'] = {['name'] = 'Spaceship Hologram L', ['tier'] = 2, ['type'] = 'Hologram', ['mass'] = 14.02, ['volume'] = 12.5},\n ['planethologram'] = {['name'] = 'Planet Hologram', ['tier'] = 1, ['type'] = 'Hologram', ['mass'] = 13.39, ['volume'] = 12.5},\n ['planetholograml'] = {['name'] = 'Planet Hologram L', ['tier'] = 1, ['type'] = 'Hologram', ['mass'] = 69.9, ['volume'] = 64},\n ['steelcolumn'] = {['name'] = 'Steel Column', ['tier'] = 1, ['type'] = 'Hull', ['mass'] = 13.37, ['volume'] = 4},\n ['steelpanel'] = {['name'] = 'Steel Panel', ['tier'] = 1, ['type'] = 'Hull', ['mass'] = 13.37, ['volume'] = 4},\n ['hulldecorativeelementa'] = {['name'] = 'Hull Decorative Element A', ['tier'] = 1, ['type'] = 'Hull', ['mass'] = 14.65, ['volume'] = 4},\n ['hulldecorativeelementb'] = {['name'] = 'Hull Decorative Element B', ['tier'] = 1, ['type'] = 'Hull', ['mass'] = 14.65, ['volume'] = 4},\n ['hulldecorativeelementc'] = {['name'] = 'Hull Decorative Element C', ['tier'] = 1, ['type'] = 'Hull', ['mass'] = 14.65, ['volume'] = 4},\n ['pipeam'] = {['name'] = 'Pipe A M', ['tier'] = 1, ['type'] = 'Pipe', ['mass'] = 4320, ['volume'] = 1074},\n ['pipebm'] = {['name'] = 'Pipe B M', ['tier'] = 1, ['type'] = 'Pipe', ['mass'] = 4320, ['volume'] = 1074},\n ['pipecm'] = {['name'] = 'Pipe C M', ['tier'] = 1, ['type'] = 'Pipe', ['mass'] = 4320, ['volume'] = 1074},\n ['pipedm'] = {['name'] = 'Pipe D M', ['tier'] = 1, ['type'] = 'Pipe', ['mass'] = 4320, ['volume'] = 1074},\n ['pipecornerm'] = {['name'] = 'Pipe Corner M', ['tier'] = 1, ['type'] = 'Pipe', ['mass'] = 4320, ['volume'] = 1074},\n ['pipeconnectorm'] = {['name'] = 'Pipe Connector M', ['tier'] = 1, ['type'] = 'Pipe', ['mass'] = 4320, ['volume'] = 1074},\n ['plantcasea'] = {['name'] = 'Plant Case A', ['tier'] = 1, ['type'] = 'Plant', ['mass'] = 21.42, ['volume'] = 24},\n ['plantcaseb'] = {['name'] = 'Plant Case B', ['tier'] = 1, ['type'] = 'Plant', ['mass'] = 3.52, ['volume'] = 4},\n ['plantcasec'] = {['name'] = 'Plant Case C', ['tier'] = 1, ['type'] = 'Plant', ['mass'] = 3.52, ['volume'] = 4},\n ['plantcased'] = {['name'] = 'Plant Case D', ['tier'] = 1, ['type'] = 'Plant', ['mass'] = 3.52, ['volume'] = 4},\n ['plantcasee'] = {['name'] = 'Plant Case E', ['tier'] = 1, ['type'] = 'Plant', ['mass'] = 3.52, ['volume'] = 4},\n ['suspendedfruitplant'] = {['name'] = 'Suspended Fruit Plant', ['tier'] = 1, ['type'] = 'Plant', ['mass'] = 3.52, ['volume'] = 4},\n ['suspendedplanta'] = {['name'] = 'Suspended Plant A', ['tier'] = 1, ['type'] = 'Plant', ['mass'] = 3.52, ['volume'] = 4},\n ['suspendedplantb'] = {['name'] = 'Suspended Plant B', ['tier'] = 1, ['type'] = 'Plant', ['mass'] = 3.52, ['volume'] = 4},\n ['baggedplanta'] = {['name'] = 'Bagged Plant A', ['tier'] = 1, ['type'] = 'Plant', ['mass'] = 3.52, ['volume'] = 4},\n ['baggedplantb'] = {['name'] = 'Bagged Plant B', ['tier'] = 1, ['type'] = 'Plant', ['mass'] = 3.52, ['volume'] = 4},\n ['plant'] = {['name'] = 'Plant', ['tier'] = 1, ['type'] = 'Plant', ['mass'] = 3.52, ['volume'] = 4},\n ['bonsai'] = {['name'] = 'Bonsai', ['tier'] = 5, ['type'] = 'Plant', ['mass'] = 902.04, ['volume'] = 180.6},\n ['eggplantplantcase'] = {['name'] = 'Eggplant Plant Case', ['tier'] = 1, ['type'] = 'Plant', ['mass'] = 31.9, ['volume'] = 24},\n ['saladplantcase'] = {['name'] = 'Salad Plant Case', ['tier'] = 1, ['type'] = 'Plant', ['mass'] = 31.9, ['volume'] = 24},\n ['squashplantcase'] = {['name'] = 'Squash Plant Case', ['tier'] = 1, ['type'] = 'Plant', ['mass'] = 31.9, ['volume'] = 24},\n ['plantcases'] = {['name'] = 'Plant Case S', ['tier'] = 1, ['type'] = 'Plant', ['mass'] = 31.9, ['volume'] = 24},\n ['plantcasem'] = {['name'] = 'Plant Case M', ['tier'] = 1, ['type'] = 'Plant', ['mass'] = 31.9, ['volume'] = 24},\n ['ficusplanta'] = {['name'] = 'Ficus Plant A', ['tier'] = 1, ['type'] = 'Plant', ['mass'] = 31.9, ['volume'] = 24},\n ['ficusplantb'] = {['name'] = 'Ficus Plant B', ['tier'] = 1, ['type'] = 'Plant', ['mass'] = 31.9, ['volume'] = 24},\n ['foliageplantcasea'] = {['name'] = 'Foliage Plant Case A', ['tier'] = 1, ['type'] = 'Plant', ['mass'] = 31.9, ['volume'] = 24},\n ['foliageplantcaseb'] = {['name'] = 'Foliage Plant Case B', ['tier'] = 1, ['type'] = 'Plant', ['mass'] = 31.9, ['volume'] = 24},\n ['windowxs'] = {['name'] = 'Window XS', ['tier'] = 1, ['type'] = 'Window', ['mass'] = 47.32, ['volume'] = 24},\n ['windows'] = {['name'] = 'Window S', ['tier'] = 1, ['type'] = 'Window', ['mass'] = 94.64, ['volume'] = 48},\n ['windowm'] = {['name'] = 'Window M', ['tier'] = 1, ['type'] = 'Window', ['mass'] = 189.28, ['volume'] = 96},\n ['windowl'] = {['name'] = 'Window L', ['tier'] = 1, ['type'] = 'Window', ['mass'] = 378.56, ['volume'] = 192},\n ['armoredwindowxs'] = {['name'] = 'Armored Window XS', ['tier'] = 2, ['type'] = 'Window', ['mass'] = 47.16, ['volume'] = 24},\n ['armoredwindows'] = {['name'] = 'Armored Window S', ['tier'] = 2, ['type'] = 'Window', ['mass'] = 94.32, ['volume'] = 48},\n ['armoredwindowm'] = {['name'] = 'Armored Window M', ['tier'] = 2, ['type'] = 'Window', ['mass'] = 188.64, ['volume'] = 96},\n ['armoredwindowl'] = {['name'] = 'Armored Window L', ['tier'] = 2, ['type'] = 'Window', ['mass'] = 377.28, ['volume'] = 192},\n ['glasspanels'] = {['name'] = 'Glass Panel S', ['tier'] = 1, ['type'] = 'Window', ['mass'] = 5.02, ['volume'] = 4},\n ['glasspanelm'] = {['name'] = 'Glass Panel M', ['tier'] = 1, ['type'] = 'Window', ['mass'] = 20.08, ['volume'] = 16},\n ['glasspanell'] = {['name'] = 'Glass Panel L', ['tier'] = 1, ['type'] = 'Window', ['mass'] = 31.92, ['volume'] = 24},\n ['baywindowxl'] = {['name'] = 'Bay Window XL', ['tier'] = 1, ['type'] = 'Window', ['mass'] = 5090, ['volume'] = 2544},\n ['verticalwing'] = {['name'] = 'Vertical Wing', ['tier'] = 1, ['type'] = 'Winglets', ['mass'] = 20.3, ['volume'] = 4},\n ['wingtips'] = {['name'] = 'Wing Tip S', ['tier'] = 1, ['type'] = 'Winglets', ['mass'] = 20.3, ['volume'] = 4},\n ['wingtipm'] = {['name'] = 'Wing Tip M', ['tier'] = 1, ['type'] = 'Winglets', ['mass'] = 20.3, ['volume'] = 4},\n ['wingtipl'] = {['name'] = 'Wing Tip L', ['tier'] = 1, ['type'] = 'Winglets', ['mass'] = 127.75, ['volume'] = 24},\n ['aluminiumscrap'] = {['name'] = 'Aluminium Scrap', ['tier'] = 1, ['type'] = 'Scrap', ['mass'] = 2.7, ['volume'] = 1},\n ['carbonscrap'] = {['name'] = 'Carbon Scrap', ['tier'] = 1, ['type'] = 'Scrap', ['mass'] = 2.27, ['volume'] = 1},\n ['siliconscrap'] = {['name'] = 'Silicon Scrap', ['tier'] = 1, ['type'] = 'Scrap', ['mass'] = 2.33, ['volume'] = 1},\n ['ironscrap'] = {['name'] = 'Iron Scrap', ['tier'] = 1, ['type'] = 'Scrap', ['mass'] = 7.85, ['volume'] = 1},\n ['calciumscrap'] = {['name'] = 'Calcium Scrap', ['tier'] = 2, ['type'] = 'Scrap', ['mass'] = 1.55, ['volume'] = 1},\n ['chromiumscrap'] = {['name'] = 'Chromium Scrap', ['tier'] = 2, ['type'] = 'Scrap', ['mass'] = 7.19, ['volume'] = 1},\n ['copperscrap'] = {['name'] = 'Copper Scrap', ['tier'] = 2, ['type'] = 'Scrap', ['mass'] = 8.96, ['volume'] = 1},\n ['sodiumscrap'] = {['name'] = 'Sodium Scrap', ['tier'] = 2, ['type'] = 'Scrap', ['mass'] = 0.97, ['volume'] = 1},\n ['lithiumscrap'] = {['name'] = 'Lithium Scrap', ['tier'] = 3, ['type'] = 'Scrap', ['mass'] = 0.53, ['volume'] = 1},\n ['nickelscrap'] = {['name'] = 'Nickel Scrap', ['tier'] = 3, ['type'] = 'Scrap', ['mass'] = 8.91, ['volume'] = 1},\n ['silverscrap'] = {['name'] = 'Silver Scrap', ['tier'] = 3, ['type'] = 'Scrap', ['mass'] = 10.49, ['volume'] = 1},\n ['sulfurscrap'] = {['name'] = 'Sulfur Scrap', ['tier'] = 3, ['type'] = 'Scrap', ['mass'] = 1.82, ['volume'] = 1},\n ['cobaltscrap'] = {['name'] = 'Cobalt Scrap', ['tier'] = 4, ['type'] = 'Scrap', ['mass'] = 8.9, ['volume'] = 1},\n ['fluorinescrap'] = {['name'] = 'Fluorine Scrap', ['tier'] = 4, ['type'] = 'Scrap', ['mass'] = 1.7, ['volume'] = 1},\n ['goldscrap'] = {['name'] = 'Gold Scrap', ['tier'] = 4, ['type'] = 'Scrap', ['mass'] = 19.3, ['volume'] = 1},\n ['scandiumscrap'] = {['name'] = 'Scandium Scrap', ['tier'] = 4, ['type'] = 'Scrap', ['mass'] = 2.98, ['volume'] = 1},\n ['ironhoneycomb'] = {['name'] = 'Iron Honeycomb', ['tier'] = 1, ['type'] = 'Pure Honeycomb', ['mass'] = 78.5, ['volume'] = 10},\n ['aluminiumhoneycomb'] = {['name'] = 'Aluminium Honeycomb', ['tier'] = 1, ['type'] = 'Pure Honeycomb', ['mass'] = 27, ['volume'] = 5},\n ['carbonhoneycomb'] = {['name'] = 'Carbon Honeycomb', ['tier'] = 1, ['type'] = 'Pure Honeycomb', ['mass'] = 22.7, ['volume'] = 10},\n ['siliconhoneycomb'] = {['name'] = 'Silicon Honeycomb', ['tier'] = 1, ['type'] = 'Pure Honeycomb', ['mass'] = 23.3, ['volume'] = 10},\n ['copperhoneycomb'] = {['name'] = 'Copper Honeycomb', ['tier'] = 2, ['type'] = 'Pure Honeycomb', ['mass'] = 89.6, ['volume'] = 10},\n ['chromiumhoneycomb'] = {['name'] = 'Chromium Honeycomb', ['tier'] = 2, ['type'] = 'Pure Honeycomb', ['mass'] = 71.9, ['volume'] = 10},\n ['calciumhoneycomb'] = {['name'] = 'Calcium Honeycomb', ['tier'] = 2, ['type'] = 'Pure Honeycomb', ['mass'] = 15.5, ['volume'] = 10},\n ['sodiumhoneycomb'] = {['name'] = 'Sodium Honeycomb', ['tier'] = 2, ['type'] = 'Pure Honeycomb', ['mass'] = 9.7, ['volume'] = 10},\n ['lithiumhoneycomb'] = {['name'] = 'Lithium Honeycomb', ['tier'] = 3, ['type'] = 'Pure Honeycomb', ['mass'] = 5.3, ['volume'] = 10},\n ['nickelhoneycomb'] = {['name'] = 'Nickel Honeycomb', ['tier'] = 3, ['type'] = 'Pure Honeycomb', ['mass'] = 89.1, ['volume'] = 10},\n ['silverhoneycomb'] = {['name'] = 'Silver Honeycomb', ['tier'] = 3, ['type'] = 'Pure Honeycomb', ['mass'] = 104.9, ['volume'] = 10},\n ['sulfurhoneycomb'] = {['name'] = 'Sulfur Honeycomb', ['tier'] = 3, ['type'] = 'Pure Honeycomb', ['mass'] = 18.19, ['volume'] = 10},\n ['goldhoneycomb'] = {['name'] = 'Gold Honeycomb', ['tier'] = 4, ['type'] = 'Pure Honeycomb', ['mass'] = 193, ['volume'] = 10},\n ['cobalthoneycomb'] = {['name'] = 'Cobalt Honeycomb', ['tier'] = 4, ['type'] = 'Pure Honeycomb', ['mass'] = 89, ['volume'] = 10},\n ['fluorinehoneycomb'] = {['name'] = 'Fluorine Honeycomb', ['tier'] = 4, ['type'] = 'Pure Honeycomb', ['mass'] = 16.96, ['volume'] = 10},\n ['scandiumhoneycomb'] = {['name'] = 'Scandium Honeycomb', ['tier'] = 4, ['type'] = 'Pure Honeycomb', ['mass'] = 29.85, ['volume'] = 10},\n ['manganesehoneycomb'] = {['name'] = 'Manganese Honeycomb', ['tier'] = 5, ['type'] = 'Pure Honeycomb', ['mass'] = 72.1, ['volume'] = 10},\n ['niobiumhoneycomb'] = {['name'] = 'Niobium Honeycomb', ['tier'] = 5, ['type'] = 'Pure Honeycomb', ['mass'] = 85.7, ['volume'] = 10},\n ['titaniumhoneycomb'] = {['name'] = 'Titanium Honeycomb', ['tier'] = 5, ['type'] = 'Pure Honeycomb', ['mass'] = 45.1, ['volume'] = 10},\n ['vanadiumhoneycomb'] = {['name'] = 'Vanadium Honeycomb', ['tier'] = 5, ['type'] = 'Pure Honeycomb', ['mass'] = 60, ['volume'] = 10},\n ['plastichoneycomb'] = {['name'] = 'Plastic Honeycomb', ['tier'] = 1, ['type'] = 'Product Honeycomb', ['mass'] = 27.57, ['volume'] = 10},\n ['woodhoneycomb'] = {['name'] = 'Wood Honeycomb', ['tier'] = 1, ['type'] = 'Product Honeycomb', ['mass'] = 27.19, ['volume'] = 10},\n ['concretehoneycomb'] = {['name'] = 'Concrete Honeycomb', ['tier'] = 1, ['type'] = 'Product Honeycomb', ['mass'] = 27.57, ['volume'] = 10},\n ['carbonfiberhoneycomb'] = {['name'] = 'Carbonfiber Honeycomb', ['tier'] = 2, ['type'] = 'Product Honeycomb', ['mass'] = 27.38, ['volume'] = 10},\n ['brickhoneycomb'] = {['name'] = 'Brick Honeycomb', ['tier'] = 1, ['type'] = 'Product Honeycomb', ['mass'] = 27.57, ['volume'] = 10},\n ['steelhoneycomb'] = {['name'] = 'Steel Honeycomb', ['tier'] = 2, ['type'] = 'Product Honeycomb', ['mass'] = 115.14, ['volume'] = 10},\n ['marblehoneycomb'] = {['name'] = 'Marble Honeycomb', ['tier'] = 2, ['type'] = 'Product Honeycomb', ['mass'] = 129.4, ['volume'] = 10},\n ['luminescentwhiteglass'] = {['name'] = 'Luminescent White Glass', ['tier'] = 1, ['type'] = 'Product Honeycomb', ['mass'] = 26, ['volume'] = 10},\n ['resurrectionnode'] = {['name'] = 'Resurrection Node', ['tier'] = 2, ['type'] = 'Resurrection Node', ['mass'] = 728.43, ['volume'] = 203.33},\n ['virtualscaffoldingprojector'] = {['name'] = 'Virtual Scaffolding Projector', ['tier'] = 4, ['type'] = 'Virtual Projector', ['mass'] = 167.11, ['volume'] = 122.4},\n ['cannonxs'] = {['name'] = 'Cannon XS', ['tier'] = 1, ['type'] = 'Cannon', ['mass'] = 190.1, ['volume'] = 34.2},\n ['cannons'] = {['name'] = 'Cannon S', ['tier'] = 2, ['type'] = 'Cannon', ['mass'] = 517.52, ['volume'] = 95.4},\n ['cannonm'] = {['name'] = 'Cannon M', ['tier'] = 3, ['type'] = 'Cannon', ['mass'] = 2670, ['volume'] = 478},\n ['cannonl'] = {['name'] = 'Cannon L', ['tier'] = 4, ['type'] = 'Cannon', ['mass'] = 15240, ['volume'] = 2614.2},\n ['laserxs'] = {['name'] = 'Laser XS', ['tier'] = 1, ['type'] = 'Laser', ['mass'] = 118.55, ['volume'] = 39.2},\n ['lasers'] = {['name'] = 'Laser S', ['tier'] = 2, ['type'] = 'Laser', ['mass'] = 508.26, ['volume'] = 120.2},\n ['laserm'] = {['name'] = 'Laser M', ['tier'] = 3, ['type'] = 'Laser', ['mass'] = 2690, ['volume'] = 600.8},\n ['laserl'] = {['name'] = 'Laser L', ['tier'] = 4, ['type'] = 'Laser', ['mass'] = 14770, ['volume'] = 3221},\n ['missilexs'] = {['name'] = 'Missile XS', ['tier'] = 1, ['type'] = 'Missile', ['mass'] = 207.67, ['volume'] = 40.2},\n ['missiles'] = {['name'] = 'Missile S', ['tier'] = 2, ['type'] = 'Missile', ['mass'] = 593.35, ['volume'] = 125.4},\n ['missilem'] = {['name'] = 'Missile M', ['tier'] = 3, ['type'] = 'Missile', ['mass'] = 2970, ['volume'] = 628},\n ['missilel'] = {['name'] = 'Missile L', ['tier'] = 4, ['type'] = 'Missile', ['mass'] = 16130, ['volume'] = 3364.2},\n ['railgunxs'] = {['name'] = 'Railgun XS', ['tier'] = 1, ['type'] = 'Railgun', ['mass'] = 232.02, ['volume'] = 33.66},\n ['railguns'] = {['name'] = 'Railgun S', ['tier'] = 2, ['type'] = 'Railgun', ['mass'] = 517.52, ['volume'] = 95.4},\n ['railgunm'] = {['name'] = 'Railgun M', ['tier'] = 3, ['type'] = 'Railgun', ['mass'] = 3010, ['volume'] = 565.89},\n ['railgunl'] = {['name'] = 'Railgun L', ['tier'] = 4, ['type'] = 'Railgun', ['mass'] = 16720, ['volume'] = 3054.89},\n ['cannonagilekineticammoxs'] = {['name'] = 'Cannon Agile Kinetic Ammo XS', ['tier'] = 3, ['type'] = 'Cannon Ammo', ['mass'] = 1.61, ['volume'] = 1},\n ['cannondefensekineticammoxs'] = {['name'] = 'Cannon Defense Kinetic Ammo XS', ['tier'] = 3, ['type'] = 'Cannon Ammo', ['mass'] = 1.59, ['volume'] = 1},\n ['cannonheavykineticammoxs'] = {['name'] = 'Cannon Heavy Kinetic Ammo XS', ['tier'] = 3, ['type'] = 'Cannon Ammo', ['mass'] = 1.73, ['volume'] = 1},\n ['cannonkineticammoxs'] = {['name'] = 'Cannon Kinetic Ammo XS', ['tier'] = 2, ['type'] = 'Cannon Ammo', ['mass'] = 1.54, ['volume'] = 1},\n ['cannonprecisionkineticammoxs'] = {['name'] = 'Cannon Precision Kinetic Ammo XS', ['tier'] = 3, ['type'] = 'Cannon Ammo', ['mass'] = 1.54, ['volume'] = 1},\n ['cannonagilethermicammoxs'] = {['name'] = 'Cannon Agile Thermic Ammo XS', ['tier'] = 3, ['type'] = 'Cannon Ammo', ['mass'] = 1.07, ['volume'] = 1},\n ['cannondefensethermicammoxs'] = {['name'] = 'Cannon Defense Thermic Ammo XS', ['tier'] = 3, ['type'] = 'Cannon Ammo', ['mass'] = 1.05, ['volume'] = 1},\n ['cannonheavythermicammoxs'] = {['name'] = 'Cannon Heavy Thermic Ammo XS', ['tier'] = 3, ['type'] = 'Cannon Ammo', ['mass'] = 1.19, ['volume'] = 1},\n ['cannonprecisionthermicammoxs'] = {['name'] = 'Cannon Precision Thermic Ammo XS', ['tier'] = 3, ['type'] = 'Cannon Ammo', ['mass'] = 1.08, ['volume'] = 1},\n ['cannonthermicammoxs'] = {['name'] = 'Cannon Thermic Ammo XS', ['tier'] = 2, ['type'] = 'Cannon Ammo', ['mass'] = 1.01, ['volume'] = 1},\n ['cannonagilekineticammos'] = {['name'] = 'Cannon Agile Kinetic Ammo S', ['tier'] = 3, ['type'] = 'Cannon Ammo', ['mass'] = 4.1, ['volume'] = 5},\n ['cannondefensekineticammos'] = {['name'] = 'Cannon Defense Kinetic Ammo S', ['tier'] = 3, ['type'] = 'Cannon Ammo', ['mass'] = 4.07, ['volume'] = 5},\n ['cannonheavykineticammos'] = {['name'] = 'Cannon Heavy Kinetic Ammo S', ['tier'] = 3, ['type'] = 'Cannon Ammo', ['mass'] = 4.34, ['volume'] = 5},\n ['cannonkineticammos'] = {['name'] = 'Cannon Kinetic Ammo S', ['tier'] = 2, ['type'] = 'Cannon Ammo', ['mass'] = 3.98, ['volume'] = 5},\n ['cannonprecisionkineticammos'] = {['name'] = 'Cannon Precision Kinetic Ammo S', ['tier'] = 3, ['type'] = 'Cannon Ammo', ['mass'] = 4.11, ['volume'] = 5},\n ['cannonagilethermicammos'] = {['name'] = 'Cannon Agile Thermic Ammo S', ['tier'] = 3, ['type'] = 'Cannon Ammo', ['mass'] = 3.2, ['volume'] = 5},\n ['cannondefensethermicammos'] = {['name'] = 'Cannon Defense Thermic Ammo S', ['tier'] = 3, ['type'] = 'Cannon Ammo', ['mass'] = 2.99, ['volume'] = 5},\n ['cannonheavythermicammos'] = {['name'] = 'Cannon Heavy Thermic Ammo S', ['tier'] = 3, ['type'] = 'Cannon Ammo', ['mass'] = 3.28, ['volume'] = 5},\n ['cannonprecisionthermicammos'] = {['name'] = 'Cannon Precision Thermic Ammo S', ['tier'] = 3, ['type'] = 'Cannon Ammo', ['mass'] = 3.2, ['volume'] = 5},\n ['cannonthermicammos'] = {['name'] = 'Cannon Thermic Ammo S', ['tier'] = 2, ['type'] = 'Cannon Ammo', ['mass'] = 2.93, ['volume'] = 5},\n ['cannonagilekineticammom'] = {['name'] = 'Cannon Agile Kinetic Ammo M', ['tier'] = 3, ['type'] = 'Cannon Ammo', ['mass'] = 14.73, ['volume'] = 25},\n ['cannondefensekineticammom'] = {['name'] = 'Cannon Defense Kinetic Ammo M', ['tier'] = 3, ['type'] = 'Cannon Ammo', ['mass'] = 14.66, ['volume'] = 25},\n ['cannonheavykineticammom'] = {['name'] = 'Cannon Heavy Kinetic Ammo M', ['tier'] = 3, ['type'] = 'Cannon Ammo', ['mass'] = 15.21, ['volume'] = 25},\n ['cannonkineticammom'] = {['name'] = 'Cannon Kinetic Ammo M', ['tier'] = 2, ['type'] = 'Cannon Ammo', ['mass'] = 14.66, ['volume'] = 25},\n ['cannonprecisionkineticammom'] = {['name'] = 'Cannon Precision Kinetic Ammo M', ['tier'] = 3, ['type'] = 'Cannon Ammo', ['mass'] = 14.76, ['volume'] = 25},\n ['cannonagilethermicammom'] = {['name'] = 'Cannon Agile Thermic Ammo M', ['tier'] = 3, ['type'] = 'Cannon Ammo', ['mass'] = 12.57, ['volume'] = 25},\n ['cannondefensethermicammom'] = {['name'] = 'Cannon Defense Thermic Ammo M', ['tier'] = 3, ['type'] = 'Cannon Ammo', ['mass'] = 12.5, ['volume'] = 25},\n ['cannonheavythermicammom'] = {['name'] = 'Cannon Heavy Thermic Ammo M', ['tier'] = 3, ['type'] = 'Cannon Ammo', ['mass'] = 13.05, ['volume'] = 25},\n ['cannonprecisionthermicammom'] = {['name'] = 'Cannon Precision Thermic Ammo M', ['tier'] = 3, ['type'] = 'Cannon Ammo', ['mass'] = 12.6, ['volume'] = 25},\n ['cannonthermicammom'] = {['name'] = 'Cannon Thermic Ammo M', ['tier'] = 2, ['type'] = 'Cannon Ammo', ['mass'] = 12.55, ['volume'] = 25},\n ['cannonagilekineticammol'] = {['name'] = 'Cannon Agile Kinetic Ammo L', ['tier'] = 3, ['type'] = 'Cannon Ammo', ['mass'] = 75.56, ['volume'] = 125},\n ['cannondefensekineticammol'] = {['name'] = 'Cannon Defense Kinetic Ammo L', ['tier'] = 3, ['type'] = 'Cannon Ammo', ['mass'] = 75.42, ['volume'] = 125},\n ['cannonheavykineticammol'] = {['name'] = 'Cannon Heavy Kinetic Ammo L', ['tier'] = 3, ['type'] = 'Cannon Ammo', ['mass'] = 76.52, ['volume'] = 125},\n ['cannonkineticammol'] = {['name'] = 'Cannon Kinetic Ammo L', ['tier'] = 2, ['type'] = 'Cannon Ammo', ['mass'] = 76.58, ['volume'] = 125},\n ['cannonprecisionkineticammol'] = {['name'] = 'Cannon Precision Kinetic Ammo L', ['tier'] = 3, ['type'] = 'Cannon Ammo', ['mass'] = 75.61, ['volume'] = 125},\n ['cannonagilethermicammol'] = {['name'] = 'Cannon Agile Thermic Ammo L', ['tier'] = 3, ['type'] = 'Cannon Ammo', ['mass'] = 71.24, ['volume'] = 125},\n ['cannondefensethermicammol'] = {['name'] = 'Cannon Defense Thermic Ammo L', ['tier'] = 3, ['type'] = 'Cannon Ammo', ['mass'] = 71.1, ['volume'] = 125},\n ['cannonheavythermicammol'] = {['name'] = 'Cannon Heavy Thermic Ammo L', ['tier'] = 3, ['type'] = 'Cannon Ammo', ['mass'] = 72.2, ['volume'] = 125},\n ['cannonprecisionthermicammol'] = {['name'] = 'Cannon Precision Thermic Ammo L', ['tier'] = 3, ['type'] = 'Cannon Ammo', ['mass'] = 71.29, ['volume'] = 125},\n ['cannonthermicammol'] = {['name'] = 'Cannon Thermic Ammo L', ['tier'] = 2, ['type'] = 'Cannon Ammo', ['mass'] = 72.37, ['volume'] = 125},\n ['laseragileelectromagneticammoxs'] = {['name'] = 'Laser Agile Electromagnetic Ammo XS', ['tier'] = 3, ['type'] = 'Laser Ammo', ['mass'] = 31.56, ['volume'] = 2},\n ['laserdefenseelectromagneticammoxs'] = {['name'] = 'Laser Defense Electromagnetic Ammo XS', ['tier'] = 3, ['type'] = 'Laser Ammo', ['mass'] = 1.54, ['volume'] = 2},\n ['laserelectromagneticammoxs'] = {['name'] = 'Laser Electromagnetic Ammo XS', ['tier'] = 2, ['type'] = 'Laser Ammo', ['mass'] = 1.46, ['volume'] = 2},\n ['laserheavyelectromagneticammoxs'] = {['name'] = 'Laser Heavy Electromagnetic Ammo XS', ['tier'] = 3, ['type'] = 'Laser Ammo', ['mass'] = 1.68},\n ['laserprecisionelectromagneticammoxs'] = {['name'] = 'Laser Precision Electromagnetic Ammo XS', ['tier'] = 3, ['type'] = 'Laser Ammo', ['mass'] = 1.56, ['volume'] = 2},\n ['laseragilethermicammoxs'] = {['name'] = 'Laser Agile Thermic Ammo XS', ['tier'] = 3, ['type'] = 'Laser Ammo', ['mass'] = 0.67, ['volume'] = 2},\n ['laserdefensethermicammoxs'] = {['name'] = 'Laser Defense Thermic Ammo XS', ['tier'] = 3, ['type'] = 'Laser Ammo', ['mass'] = 0.65, ['volume'] = 2},\n ['laserheavythermicammoxs'] = {['name'] = 'Laser Heavy Thermic Ammo XS', ['tier'] = 3, ['type'] = 'Laser Ammo', ['mass'] = 0.79, ['volume'] = 2},\n ['laserprecisionthermicammoxs'] = {['name'] = 'Laser Precision Thermic Ammo XS', ['tier'] = 3, ['type'] = 'Laser Ammo', ['mass'] = 0.67, ['volume'] = 2},\n ['laserthermicammoxs'] = {['name'] = 'Laser Thermic Ammo XS', ['tier'] = 2, ['type'] = 'Laser Ammo', ['mass'] = 0.6, ['volume'] = 2},\n ['laseragileelectromagneticammos'] = {['name'] = 'Laser Agile Electromagnetic Ammo S', ['tier'] = 3, ['type'] = 'Laser Ammo', ['mass'] = 3.21, ['volume'] = 10},\n ['laserdefenseelectromagneticammos'] = {['name'] = 'Laser Defense Electromagnetic Ammo S', ['tier'] = 3, ['type'] = 'Laser Ammo', ['mass'] = 3.18, ['volume'] = 10},\n ['laserelectromagneticammos'] = {['name'] = 'Laser Electromagnetic Ammo S', ['tier'] = 2, ['type'] = 'Laser Ammo', ['mass'] = 3.03, ['volume'] = 10},\n ['laserheavyelectromagneticammos'] = {['name'] = 'Laser Heavy Electromagnetic Ammo S', ['tier'] = 3, ['type'] = 'Laser Ammo', ['mass'] = 3.45, ['volume'] = 10},\n ['laserprecisionelectromagneticammos'] = {['name'] = 'Laser Precision Electromagnetic Ammo S', ['tier'] = 3, ['type'] = 'Laser Ammo', ['mass'] = 3.23, ['volume'] = 10},\n ['laseragilethermicammos'] = {['name'] = 'Laser Agile Thermic Ammo S', ['tier'] = 3, ['type'] = 'Laser Ammo', ['mass'] = 1.44, ['volume'] = 10},\n ['laserdefensethermicammos'] = {['name'] = 'Laser Defense Thermic Ammo S', ['tier'] = 3, ['type'] = 'Laser Ammo', ['mass'] = 1.4, ['volume'] = 10},\n ['laserheavythermicammos'] = {['name'] = 'Laser Heavy Thermic Ammo S', ['tier'] = 3, ['type'] = 'Laser Ammo', ['mass'] = 1.68, ['volume'] = 10},\n ['laserprecisionthermicammos'] = {['name'] = 'Laser Precision Thermic Ammo S', ['tier'] = 3, ['type'] = 'Laser Ammo', ['mass'] = 1.45, ['volume'] = 10},\n ['laserthermicammos'] = {['name'] = 'Laser Thermic Ammo S', ['tier'] = 2, ['type'] = 'Laser Ammo', ['mass'] = 1.31, ['volume'] = 10},\n ['laseragileelectromagneticammom'] = {['name'] = 'Laser Agile Electromagnetic Ammo M', ['tier'] = 3, ['type'] = 'Laser Ammo', ['mass'] = 7.19, ['volume'] = 50},\n ['laserdefenseelectromagneticammom'] = {['name'] = 'Laser Defense Electromagnetic Ammo M', ['tier'] = 3, ['type'] = 'Laser Ammo', ['mass'] = 7.12, ['volume'] = 50},\n ['laserelectromagneticammom'] = {['name'] = 'Laser Electromagnetic Ammo M', ['tier'] = 2, ['type'] = 'Laser Ammo', ['mass'] = 6.78, ['volume'] = 50},\n ['laserheavyelectromagneticammom'] = {['name'] = 'Laser Heavy Electromagnetic Ammo M', ['tier'] = 3, ['type'] = 'Laser Ammo', ['mass'] = 7.67, ['volume'] = 50},\n ['laserprecisionelectromagneticammom'] = {['name'] = 'Laser Precision Electromagnetic Ammo M', ['tier'] = 3, ['type'] = 'Laser Ammo', ['mass'] = 7.22, ['volume'] = 50},\n ['laseragilethermicammom'] = {['name'] = 'Laser Agile Thermic Ammo M', ['tier'] = 3, ['type'] = 'Laser Ammo', ['mass'] = 3.64, ['volume'] = 50},\n ['laserdefensethermicammom'] = {['name'] = 'Laser Defense Thermic Ammo M', ['tier'] = 3, ['type'] = 'Laser Ammo', ['mass'] = 3.56, ['volume'] = 50},\n ['laserheavythermicammom'] = {['name'] = 'Laser Heavy Thermic Ammo M', ['tier'] = 3, ['type'] = 'Laser Ammo', ['mass'] = 3.56, ['volume'] = 50},\n ['laserprecisionthermicammom'] = {['name'] = 'Laser Precision Thermic Ammo M', ['tier'] = 3, ['type'] = 'Laser Ammo', ['mass'] = 4.12, ['volume'] = 50},\n ['laserthermicammom'] = {['name'] = 'Laser Thermic Ammo M', ['tier'] = 2, ['type'] = 'Laser Ammo', ['mass'] = 3.34, ['volume'] = 50},\n ['laseragileelectromagneticammol'] = {['name'] = 'Laser Agile Electromagnetic Ammo L', ['tier'] = 3, ['type'] = 'Laser Ammo', ['mass'] = 19.77, ['volume'] = 250},\n ['laserdefenseelectromagneticammol'] = {['name'] = 'Laser Defense Electromagnetic Ammo L', ['tier'] = 3, ['type'] = 'Laser Ammo', ['mass'] = 19.62, ['volume'] = 250},\n ['laserelectromagneticammol'] = {['name'] = 'Laser Electromagnetic Ammo L', ['tier'] = 2, ['type'] = 'Laser Ammo', ['mass'] = 18.7, ['volume'] = 250},\n ['laserheavyelectromagneticammol'] = {['name'] = 'Laser Heavy Electromagnetic Ammo L', ['tier'] = 3, ['type'] = 'Laser Ammo', ['mass'] = 20.73, ['volume'] = 250},\n ['laserprecisionelectromagneticammol'] = {['name'] = 'Laser Precision Electromagnetic Ammo L', ['tier'] = 3, ['type'] = 'Laser Ammo', ['mass'] = 19.81, ['volume'] = 250},\n ['laseragilethermicammol'] = {['name'] = 'Laser Agile Thermic Ammo L', ['tier'] = 3, ['type'] = 'Laser Ammo', ['mass'] = 12.65, ['volume'] = 250},\n ['laserdefensethermicammol'] = {['name'] = 'Laser Defense Thermic Ammo L', ['tier'] = 3, ['type'] = 'Laser Ammo', ['mass'] = 12.51, ['volume'] = 250},\n ['laserheavythermicammol'] = {['name'] = 'Laser Heavy Thermic Ammo L', ['tier'] = 3, ['type'] = 'Laser Ammo', ['mass'] = 13.61, ['volume'] = 250},\n ['laserprecisionthermicammol'] = {['name'] = 'Laser Precision Thermic Ammo L', ['tier'] = 3, ['type'] = 'Laser Ammo', ['mass'] = 12.7, ['volume'] = 250},\n ['laserthermicammol'] = {['name'] = 'Laser Thermic Ammo L', ['tier'] = 2, ['type'] = 'Laser Ammo', ['mass'] = 11.81, ['volume'] = 250},\n ['missileagileantimatterammoxs'] = {['name'] = 'Missile Agile Antimatter Ammo XS', ['tier'] = 3, ['type'] = 'Missile Ammo', ['mass'] = 0.94, ['volume'] = 5},\n ['missileantimatterammoxs'] = {['name'] = 'Missile Antimatter Ammo XS', ['tier'] = 2, ['type'] = 'Missile Ammo', ['mass'] = 0.87, ['volume'] = 5},\n ['missiledefenseantimatterammoxs'] = {['name'] = 'Missile Defense Antimatter Ammo XS', ['tier'] = 3, ['type'] = 'Missile Ammo', ['mass'] = 0.92, ['volume'] = 5},\n ['missileheavyantimatterammoxs'] = {['name'] = 'Missile Heavy Antimatter Ammo XS', ['tier'] = 3, ['type'] = 'Missile Ammo', ['mass'] = 1.06, ['volume'] = 5},\n ['missileprecisionantimatterammoxs'] = {['name'] = 'Missile Precision Antimatter Ammo XS', ['tier'] = 3, ['type'] = 'Missile Ammo', ['mass'] = 0.95, ['volume'] = 5},\n ['missileagilekineticammoxs'] = {['name'] = 'Missile Agile Kinetic Ammo XS', ['tier'] = 3, ['type'] = 'Missile Ammo', ['mass'] = 1.37, ['volume'] = 5},\n ['missiledefensekineticammoxs'] = {['name'] = 'Missile Defense Kinetic Ammo XS', ['tier'] = 3, ['type'] = 'Missile Ammo', ['mass'] = 1.35, ['volume'] = 5},\n ['missileheavykineticammoxs'] = {['name'] = 'Missile Heavy Kinetic Ammo XS', ['tier'] = 3, ['type'] = 'Missile Ammo', ['mass'] = 1.49, ['volume'] = 5},\n ['missilekineticammoxs'] = {['name'] = 'Missile Kinetic Ammo XS', ['tier'] = 2, ['type'] = 'Missile Ammo', ['mass'] = 1.29, ['volume'] = 5},\n ['missileprecisionkineticammoxs'] = {['name'] = 'Missile Precision Kinetic Ammo XS', ['tier'] = 3, ['type'] = 'Missile Ammo', ['mass'] = 1.38, ['volume'] = 5},\n ['missileagileantimatterammos'] = {['name'] = 'Missile Agile Antimatter Ammo S', ['tier'] = 3, ['type'] = 'Missile Ammo', ['mass'] = 2.16, ['volume'] = 25},\n ['missileantimatterammos'] = {['name'] = 'Missile Antimatter Ammo S', ['tier'] = 2, ['type'] = 'Missile Ammo', ['mass'] = 2.16, ['volume'] = 25},\n ['missiledefenseantimatterammos'] = {['name'] = 'Missile Defense Antimatter Ammo S', ['tier'] = 3, ['type'] = 'Missile Ammo', ['mass'] = 2.12, ['volume'] = 25},\n ['missileheavyantimatterammos'] = {['name'] = 'Missile Heavy Antimatter Ammo S', ['tier'] = 3, ['type'] = 'Missile Ammo', ['mass'] = 2.4, ['volume'] = 25},\n ['missileprecisionantimatterammos'] = {['name'] = 'Missile Precision Antimatter Ammo S', ['tier'] = 3, ['type'] = 'Missile Ammo', ['mass'] = 2.17, ['volume'] = 25},\n ['missileagilekineticammos'] = {['name'] = 'Missile Agile Kinetic Ammo S', ['tier'] = 3, ['type'] = 'Missile Ammo', ['mass'] = 3.02, ['volume'] = 25},\n ['missiledefensekineticammos'] = {['name'] = 'Missile Defense Kinetic Ammo S', ['tier'] = 3, ['type'] = 'Missile Ammo', ['mass'] = 2.99, ['volume'] = 25},\n ['missileheavykineticammos'] = {['name'] = 'Missile Heavy Kinetic Ammo S', ['tier'] = 3, ['type'] = 'Missile Ammo', ['mass'] = 3.26, ['volume'] = 25},\n ['missilekineticammos'] = {['name'] = 'Missile Kinetic Ammo S', ['tier'] = 2, ['type'] = 'Missile Ammo', ['mass'] = 2.87, ['volume'] = 25},\n ['missileprecisionkineticammos'] = {['name'] = 'Missile Precision Kinetic Ammo S', ['tier'] = 3, ['type'] = 'Missile Ammo', ['mass'] = 3.03, ['volume'] = 25},\n ['missileagileantimatterammom'] = {['name'] = 'Missile Agile Antimatter Ammo M', ['tier'] = 3, ['type'] = 'Missile Ammo', ['mass'] = 6.41, ['volume'] = 125},\n ['missileantimatterammom'] = {['name'] = 'Missile Antimatter Ammo M', ['tier'] = 2, ['type'] = 'Missile Ammo', ['mass'] = 6.24, ['volume'] = 125},\n ['missiledefenseantimatterammom'] = {['name'] = 'Missile Defense Antimatter Ammo M', ['tier'] = 3, ['type'] = 'Missile Ammo', ['mass'] = 6.33, ['volume'] = 125},\n ['missileheavyantimatterammom'] = {['name'] = 'Missile Heavy Antimatter Ammo M', ['tier'] = 3, ['type'] = 'Missile Ammo', ['mass'] = 6.89, ['volume'] = 125},\n ['missileprecisionantimatterammom'] = {['name'] = 'Missile Precision Antimatter Ammo M', ['tier'] = 3, ['type'] = 'Missile Ammo', ['mass'] = 6.43, ['volume'] = 125},\n ['missileagilekineticammom'] = {['name'] = 'Missile Agile Kinetic Ammo M', ['tier'] = 3, ['type'] = 'Missile Ammo', ['mass'] = 8.13, ['volume'] = 125},\n ['missiledefensekineticammom'] = {['name'] = 'Missile Defense Kinetic Ammo M', ['tier'] = 3, ['type'] = 'Missile Ammo', ['mass'] = 8.06, ['volume'] = 125},\n ['missileheavykineticammom'] = {['name'] = 'Missile Heavy Kinetic Ammo M', ['tier'] = 3, ['type'] = 'Missile Ammo', ['mass'] = 8.61, ['volume'] = 125},\n ['missilekineticammom'] = {['name'] = 'Missile Kinetic Ammo M', ['tier'] = 2, ['type'] = 'Missile Ammo', ['mass'] = 7.92, ['volume'] = 125},\n ['missileprecisionkineticammom'] = {['name'] = 'Missile Precision Kinetic Ammo M', ['tier'] = 3, ['type'] = 'Missile Ammo', ['mass'] = 8.15, ['volume'] = 125},\n ['missileagileantimatterammol'] = {['name'] = 'Missile Agile Antimatter Ammo L', ['tier'] = 3, ['type'] = 'Missile Ammo', ['mass'] = 27.54, ['volume'] = 625},\n ['missileantimatterammol'] = {['name'] = 'Missile Antimatter Ammo L', ['tier'] = 2, ['type'] = 'Missile Ammo', ['mass'] = 27.9, ['volume'] = 625},\n ['missiledefenseantimatterammol'] = {['name'] = 'Missile Defense Antimatter Ammo L', ['tier'] = 3, ['type'] = 'Missile Ammo', ['mass'] = 6.33, ['volume'] = 625},\n ['missileheavyantimatterammol'] = {['name'] = 'Missile Heavy Antimatter Ammo L', ['tier'] = 3, ['type'] = 'Missile Ammo', ['mass'] = 27.4, ['volume'] = 625},\n ['missileprecisionantimatterammol'] = {['name'] = 'Missile Precision Antimatter Ammo L', ['tier'] = 3, ['type'] = 'Missile Ammo', ['mass'] = 27.59, ['volume'] = 625},\n ['missileagilekineticammol'] = {['name'] = 'Missile Agile Kinetic Ammo L', ['tier'] = 3, ['type'] = 'Missile Ammo', ['mass'] = 30.99, ['volume'] = 625},\n ['missiledefensekineticammol'] = {['name'] = 'Missile Defense Kinetic Ammo L', ['tier'] = 3, ['type'] = 'Missile Ammo', ['mass'] = 30.84, ['volume'] = 625},\n ['missileheavykineticammol'] = {['name'] = 'Missile Heavy Kinetic Ammo L', ['tier'] = 3, ['type'] = 'Missile Ammo', ['mass'] = 31.95, ['volume'] = 625},\n ['missilekineticammol'] = {['name'] = 'Missile Kinetic Ammo L', ['tier'] = 2, ['type'] = 'Missile Ammo', ['mass'] = 31.26, ['volume'] = 625},\n ['missileprecisionkineticammol'] = {['name'] = 'Missile Precision Kinetic Ammo L', ['tier'] = 3, ['type'] = 'Missile Ammo', ['mass'] = 31.04, ['volume'] = 625},\n ['railgunagileantimatterammoxs'] = {['name'] = 'Railgun Agile Antimatter Ammo XS', ['tier'] = 3, ['type'] = 'Railgun Ammo', ['mass'] = 2.04, ['volume'] = 10},\n ['railgunantimatterammoxs'] = {['name'] = 'Railgun Antimatter Ammo XS', ['tier'] = 2, ['type'] = 'Railgun Ammo', ['mass'] = 2.01, ['volume'] = 10},\n ['railgundefenseantimatterammoxs'] = {['name'] = 'Railgun Defense Antimatter Ammo XS', ['tier'] = 3, ['type'] = 'Railgun Ammo', ['mass'] = 2.02, ['volume'] = 10},\n ['railgunheavyantimatterammoxs'] = {['name'] = 'Railgun Heavy Antimatter Ammo XS', ['tier'] = 3, ['type'] = 'Railgun Ammo', ['mass'] = 2.16, ['volume'] = 10},\n ['railgunprecisionantimatterammoxs'] = {['name'] = 'Railgun Precision Antimatter Ammo XS', ['tier'] = 3, ['type'] = 'Railgun Ammo', ['mass'] = 2.05, ['volume'] = 10},\n ['railgunagileelectromagneticammoxs'] = {['name'] = 'Railgun Agile Electromagnetic Ammo XS', ['tier'] = 3, ['type'] = 'Railgun Ammo', ['mass'] = 2.77, ['volume'] = 10},\n ['railgundefenseelectromagneticammoxs'] = {['name'] = 'Railgun Defense Electromagnetic Ammo XS', ['tier'] = 3, ['type'] = 'Railgun Ammo', ['mass'] = 2.8, ['volume'] = 10},\n ['railgunelectromagneticammoxs'] = {['name'] = 'Railgun Electromagnetic Ammo XS', ['tier'] = 2, ['type'] = 'Railgun Ammo', ['mass'] = 6.43, ['volume'] = 10},\n ['railgunheavyelectromagneticammoxs'] = {['name'] = 'Railgun Heavy Electromagnetic Ammo XS', ['tier'] = 3, ['type'] = 'Railgun Ammo', ['mass'] = 2.94, ['volume'] = 10},\n ['railgunprecisionelectromagneticammoxs'] = {['name'] = 'Railgun Precision Electromagnetic Ammo XS', ['tier'] = 3, ['type'] = 'Railgun Ammo', ['mass'] = 2.83, ['volume'] = 10},\n ['railgunagileantimatterammos'] = {['name'] = 'Railgun Agile Antimatter Ammo S', ['tier'] = 3, ['type'] = 'Railgun Ammo', ['mass'] = 4.96, ['volume'] = 50},\n ['railgunantimatterammos'] = {['name'] = 'Railgun Antimatter Ammo S', ['tier'] = 2, ['type'] = 'Railgun Ammo', ['mass'] = 4.92, ['volume'] = 50},\n ['railgundefenseantimatterammos'] = {['name'] = 'Railgun Defense Antimatter Ammo S', ['tier'] = 3, ['type'] = 'Railgun Ammo', ['mass'] = 4.93, ['volume'] = 50},\n ['railgunheavyantimatterammos'] = {['name'] = 'Railgun Heavy Antimatter Ammo S', ['tier'] = 3, ['type'] = 'Railgun Ammo', ['mass'] = 5.2, ['volume'] = 50},\n ['railgunprecisionantimatterammos'] = {['name'] = 'Railgun Precision Antimatter Ammo S', ['tier'] = 3, ['type'] = 'Railgun Ammo', ['mass'] = 4.97, ['volume'] = 50},\n ['railgunagileelectromagneticammos'] = {['name'] = 'Railgun Agile Electromagnetic Ammo S', ['tier'] = 3, ['type'] = 'Railgun Ammo', ['mass'] = 6.52, ['volume'] = 50},\n ['railgundefenseelectromagneticammos'] = {['name'] = 'Railgun Defense Electromagnetic Ammo S', ['tier'] = 3, ['type'] = 'Railgun Ammo', ['mass'] = 6.49, ['volume'] = 50},\n ['railgunelectromagneticammos'] = {['name'] = 'Railgun Electromagnetic Ammo S', ['tier'] = 2, ['type'] = 'Railgun Ammo', ['mass'] = 6.43, ['volume'] = 50},\n ['railgunheavyelectromagneticammos'] = {['name'] = 'Railgun Heavy Electromagnetic Ammo S', ['tier'] = 3, ['type'] = 'Railgun Ammo', ['mass'] = 6.76, ['volume'] = 50},\n ['railgunprecisionelectromagneticammos'] = {['name'] = 'Railgun Precision Electromagnetic Ammo S', ['tier'] = 3, ['type'] = 'Railgun Ammo', ['mass'] = 6.53, ['volume'] = 50},\n ['railgunagileantimatterammom'] = {['name'] = 'Railgun Agile Antimatter Ammo M', ['tier'] = 3, ['type'] = 'Railgun Ammo', ['mass'] = 16.45, ['volume'] = 250},\n ['railgunantimatterammom'] = {['name'] = 'Railgun Antimatter Ammo M', ['tier'] = 2, ['type'] = 'Railgun Ammo', ['mass'] = 16.54, ['volume'] = 250},\n ['railgundefenseantimatterammom'] = {['name'] = 'Railgun Defense Antimatter Ammo M', ['tier'] = 3, ['type'] = 'Railgun Ammo', ['mass'] = 16.38, ['volume'] = 250},\n ['railgunheavyantimatterammom'] = {['name'] = 'Railgun Heavy Antimatter Ammo M', ['tier'] = 3, ['type'] = 'Railgun Ammo', ['mass'] = 16.93, ['volume'] = 250},\n ['railgunprecisionantimatterammom'] = {['name'] = 'Railgun Precision Antimatter Ammo M', ['tier'] = 3, ['type'] = 'Railgun Ammo', ['mass'] = 16.48, ['volume'] = 250},\n ['railgunagileelectromagneticammom'] = {['name'] = 'Railgun Agile Electromagnetic Ammo M', ['tier'] = 3, ['type'] = 'Railgun Ammo', ['mass'] = 19.58, ['volume'] = 250},\n ['railgundefenseelectromagneticammom'] = {['name'] = 'Railgun Defense Electromagnetic Ammo M', ['tier'] = 3, ['type'] = 'Railgun Ammo', ['mass'] = 19.5, ['volume'] = 250},\n ['railgunelectromagneticammom'] = {['name'] = 'Railgun Electromagnetic Ammo M', ['tier'] = 2, ['type'] = 'Railgun Ammo', ['mass'] = 19.56, ['volume'] = 250},\n ['railgunheavyelectromagneticammom'] = {['name'] = 'Railgun Heavy Electromagnetic Ammo M', ['tier'] = 3, ['type'] = 'Railgun Ammo', ['mass'] = 20.06, ['volume'] = 250},\n ['railgunprecisionelectromagneticammom'] = {['name'] = 'Railgun Precision Electromagnetic Ammo M', ['tier'] = 3, ['type'] = 'Railgun Ammo', ['mass'] = 19.6, ['volume'] = 250},\n ['railgunagileantimatterammol'] = {['name'] = 'Railgun Agile Antimatter Ammo L', ['tier'] = 3, ['type'] = 'Railgun Ammo', ['mass'] = 79, ['volume'] = 1250},\n ['railgunantimatterammol'] = {['name'] = 'Railgun Antimatter Ammo L', ['tier'] = 2, ['type'] = 'Railgun Ammo', ['mass'] = 80.35, ['volume'] = 1250},\n ['railgundefenseantimatterammol'] = {['name'] = 'Railgun Defense Antimatter Ammo L', ['tier'] = 3, ['type'] = 'Railgun Ammo', ['mass'] = 78.86, ['volume'] = 1250},\n ['railgunheavyantimatterammol'] = {['name'] = 'Railgun Heavy Antimatter Ammo L', ['tier'] = 3, ['type'] = 'Railgun Ammo', ['mass'] = 79.96, ['volume'] = 1250},\n ['railgunprecisionantimatterammol'] = {['name'] = 'Railgun Precision Antimatter Ammo L', ['tier'] = 3, ['type'] = 'Railgun Ammo', ['mass'] = 79.05, ['volume'] = 1250},\n ['railgunagileelectromagneticammol'] = {['name'] = 'Railgun Agile Electromagnetic Ammo L', ['tier'] = 3, ['type'] = 'Railgun Ammo', ['mass'] = 85.24, ['volume'] = 1250},\n ['railgundefenseelectromagneticammol'] = {['name'] = 'Railgun Defense Electromagnetic Ammo L', ['tier'] = 3, ['type'] = 'Railgun Ammo', ['mass'] = 85.1, ['volume'] = 1250},\n ['railgunelectromagneticammol'] = {['name'] = 'Railgun Electromagnetic Ammo L', ['tier'] = 2, ['type'] = 'Railgun Ammo', ['mass'] = 86.4, ['volume'] = 1250},\n ['railgunheavyelectromagneticammol'] = {['name'] = 'Railgun Heavy Electromagnetic Ammo L', ['tier'] = 3, ['type'] = 'Railgun Ammo', ['mass'] = 86.2, ['volume'] = 1250},\n ['railgunprecisionelectromagneticammol'] = {['name'] = 'Railgun Precision Electromagnetic Ammo L', ['tier'] = 3, ['type'] = 'Railgun Ammo', ['mass'] = 85.29, ['volume'] = 1250},\n ['warpcell'] = {['name'] = 'Warp Cell', ['tier'] = 2, ['type'] = 'Warp Cell', ['mass'] = 100, ['volume'] = 40},\n ['warpdrivel'] = {['name'] = 'Warp Drive L', ['tier'] = 1, ['type'] = 'Warp Drive Unit', ['mass'] = 31360, ['volume'] = 75},\n ['warpbeaconxl'] = {['name'] = 'Warp Beacon XL', ['tier'] = 5, ['type'] = 'Warp Beacon Unit', ['mass'] = 148940, ['volume'] = 25360},\n ['hatchs'] = {['name'] = 'Hatch S', ['tier'] = 1, ['type'] = 'Door/Gate', ['mass'] = 229.09, ['volume'] = 64},\n ['fuelintakexs'] = {['name'] = 'Fuel Intake XS', ['tier'] = 1, ['type'] = 'Door/Gate', ['mass'] = 4.12, ['volume'] = 2},\n ['freightatmosphericenginexs'] = {['name'] = 'Freight Atmospheric Engine XS', ['tier'] = 2, ['type'] = 'Atmospheric Engine', ['mass'] = 101.88, ['volume'] = 22.6},\n ['safeatmosphericenginexs'] = {['name'] = 'Safe Atmospheric Engine XS', ['tier'] = 2, ['type'] = 'Atmospheric Engine', ['mass'] = 101.88, ['volume'] = 22.6},\n ['maneuveratmosphericenginexs'] = {['name'] = 'Maneuver Atmospheric Engine XS', ['tier'] = 2, ['type'] = 'Atmospheric Engine', ['mass'] = 101.88, ['volume'] = 22.6},\n ['militaryatmosphericenginexs'] = {['name'] = 'Military Atmospheric Engine XS', ['tier'] = 2, ['type'] = 'Atmospheric Engine', ['mass'] = 101.88, ['volume'] = 22.6},\n ['freightatmosphericengines'] = {['name'] = 'Freight Atmospheric Engine S', ['tier'] = 2, ['type'] = 'Atmospheric Engine', ['mass'] = 539.99, ['volume'] = 116.6},\n ['maneuveratmosphericengines'] = {['name'] = 'Maneuver Atmospheric Engine S', ['tier'] = 2, ['type'] = 'Atmospheric Engine', ['mass'] = 539.99, ['volume'] = 116.6},\n ['militaryatmosphericengines'] = {['name'] = 'Military Atmospheric Engine S', ['tier'] = 2, ['type'] = 'Atmospheric Engine', ['mass'] = 539.99, ['volume'] = 116.6},\n ['safeatmosphericengines'] = {['name'] = 'Safe Atmospheric Engine S', ['tier'] = 2, ['type'] = 'Atmospheric Engine', ['mass'] = 539.99, ['volume'] = 116.6},\n ['freightatmosphericenginem'] = {['name'] = 'Freight Atmospheric Engine M', ['tier'] = 2, ['type'] = 'Atmospheric Engine', ['mass'] = 2980, ['volume'] = 619.2},\n ['maneuveratmosphericenginem'] = {['name'] = 'Maneuver Atmospheric Engine M', ['tier'] = 2, ['type'] = 'Atmospheric Engine', ['mass'] = 2980, ['volume'] = 619.2},\n ['militaryatmosphericenginem'] = {['name'] = 'Military Atmospheric Engine M', ['tier'] = 2, ['type'] = 'Atmospheric Engine', ['mass'] = 2980, ['volume'] = 619.2},\n ['safeatmosphericenginem'] = {['name'] = 'Safe Atmospheric Engine M', ['tier'] = 2, ['type'] = 'Atmospheric Engine', ['mass'] = 2980, ['volume'] = 619.2},\n ['freightatmosphericenginel'] = {['name'] = 'Freight Atmospheric Engine L', ['tier'] = 2, ['type'] = 'Atmospheric Engine', ['mass'] = 16930, ['volume'] = 3355.4},\n ['maneuveratmosphericenginel'] = {['name'] = 'Maneuver Atmospheric Engine L', ['tier'] = 2, ['type'] = 'Atmospheric Engine', ['mass'] = 16930, ['volume'] = 3355.4},\n ['militaryatmosphericenginel'] = {['name'] = 'Military Atmospheric Engine L', ['tier'] = 2, ['type'] = 'Atmospheric Engine', ['mass'] = 16930, ['volume'] = 3355.4},\n ['safeatmosphericenginel'] = {['name'] = 'Safe Atmospheric Engine L', ['tier'] = 2, ['type'] = 'Atmospheric Engine', ['mass'] = 16930, ['volume'] = 3355.4},\n ['freightspaceenginexs'] = {['name'] = 'Freight Space Engine XS', ['tier'] = 2, ['type'] = 'Space Engine', ['mass'] = 146.23, ['volume'] = 20.33},\n ['maneuverspaceenginexs'] = {['name'] = 'Maneuver Space Engine XS', ['tier'] = 2, ['type'] = 'Space Engine', ['mass'] = 146.23, ['volume'] = 20.33},\n ['militaryspaceenginexs'] = {['name'] = 'Military Space Engine XS', ['tier'] = 2, ['type'] = 'Space Engine', ['mass'] = 146.23, ['volume'] = 20.33},\n ['safespaceenginexs'] = {['name'] = 'Safe Space Engine XS', ['tier'] = 2, ['type'] = 'Space Engine', ['mass'] = 146.23, ['volume'] = 20.33},\n ['freightspaceengines'] = {['name'] = 'Freight Space Engine S', ['tier'] = 2, ['type'] = 'Space Engine', ['mass'] = 761.74, ['volume'] = 105.24},\n ['maneuverspaceengines'] = {['name'] = 'Maneuver Space Engine S', ['tier'] = 2, ['type'] = 'Space Engine', ['mass'] = 761.74, ['volume'] = 105.24},\n ['militaryspaceengines'] = {['name'] = 'Military Space Engine S', ['tier'] = 2, ['type'] = 'Space Engine', ['mass'] = 761.74, ['volume'] = 105.24},\n ['safespaceengines'] = {['name'] = 'Safe Space Engine S', ['tier'] = 2, ['type'] = 'Space Engine', ['mass'] = 761.74, ['volume'] = 105.24},\n ['freightspaceenginem'] = {['name'] = 'Freight Space Engine M', ['tier'] = 2, ['type'] = 'Space Engine', ['mass'] = 4090, ['volume'] = 562.4},\n ['maneuverspaceenginem'] = {['name'] = 'Maneuver Space Engine M', ['tier'] = 2, ['type'] = 'Space Engine', ['mass'] = 4090, ['volume'] = 562.4},\n ['militaryspaceenginem'] = {['name'] = 'Military Space Engine M', ['tier'] = 2, ['type'] = 'Space Engine', ['mass'] = 4090, ['volume'] = 562.4},\n ['safespaceenginem'] = {['name'] = 'Safe Space Engine M', ['tier'] = 2, ['type'] = 'Space Engine', ['mass'] = 4090, ['volume'] = 562.4},\n ['freightspaceenginel'] = {['name'] = 'Freight Space Engine L', ['tier'] = 2, ['type'] = 'Space Engine', ['mass'] = 22470, ['volume'] = 3071.4},\n ['maneuverspaceenginel'] = {['name'] = 'Maneuver Space Engine L', ['tier'] = 2, ['type'] = 'Space Engine', ['mass'] = 22470, ['volume'] = 3071.4},\n ['militaryspaceenginel'] = {['name'] = 'Military Space Engine L', ['tier'] = 2, ['type'] = 'Space Engine', ['mass'] = 22470, ['volume'] = 3071.4},\n ['safespaceenginel'] = {['name'] = 'Safe Space Engine L', ['tier'] = 2, ['type'] = 'Space Engine', ['mass'] = 22470, ['volume'] = 3071.4},\n ['freightspaceenginexl'] = {['name'] = 'Freight Space Engine XL', ['tier'] = 2, ['type'] = 'Space Engine', ['mass'] = 126240, ['volume'] = 17150},\n ['maneuverspaceenginexl'] = {['name'] = 'Maneuver Space Engine XL', ['tier'] = 2, ['type'] = 'Space Engine', ['mass'] = 126240, ['volume'] = 17150},\n ['militaryspaceenginexl'] = {['name'] = 'Military Space Engine XL', ['tier'] = 2, ['type'] = 'Space Engine', ['mass'] = 126240, ['volume'] = 17150},\n ['safespaceenginexl'] = {['name'] = 'Safe Space Engine XL', ['tier'] = 2, ['type'] = 'Space Engine', ['mass'] = 126240, ['volume'] = 17150},\n ['repairunit'] = {['name'] = 'Repair Unit', ['tier'] = 1, ['type'] = 'Combat Element', ['mass'] = 400, ['volume'] = 0},\n ['surrogatepodstation'] = {['name'] = 'Surrogate Pod Station', ['tier'] = 1, ['type'] = 'Surrogate Element', ['mass'] = 569.52, ['volume'] = 360},\n ['surrogatevrstation'] = {['name'] = 'Surrogate VR Station', ['tier'] = 1, ['type'] = 'Surrogate Element', ['mass'] = 742.42, ['volume'] = 360.2}\n}","filter":{"args":[],"signature":"onStart()","slotKey":"-5"},"key":"17"},{"code":"local statusList = {\"STOPPED\",\"RUNNING\",\"MISSING INGREDIENT\",\"OUTPUT FULL\",\"NO OUTPUT CONTAINER\",\"PENDING\",\"MISSING SCHEMATIC\"}\nfunction getIndustryStatusClass(status)\n if status == 1 then\n return \"text-info\"\n elseif status == 2 then\n return \"text-success\"\n elseif ((status >= 3) and (status <= 5)) or (status == 7) then\n return \"text-danger\"\n elseif status == 6 then\n return \"text-primary\"\n end\n return \"\" --default value for other status that can be added\nend\n\nhud_main_css = [[\n <style>\n\t * {\n\t\t font-size: ]] .. tostring(contentFontSize) .. [[px;\n\t }\n .hud_container {\n border: 2px solid orange;\n border-radius:10px;\n background-color: rgba(0,0,0,.75);\n padding:10px;\n }\n .hud_help_commands {\n position: absolute;\n top: ]] .. tostring((10/1080)*100) .. [[vh;\n left: ]] .. tostring((50/1920)*100) .. [[vw;\n text-transform: uppercase;\n font-weight: bold;\n }\n .hud_list_container {\n position: absolute;\n top: ]] .. tostring((125/1080)*100) .. [[vh;\n left: ]] .. tostring((50/1920)*100) .. [[vw;\n text-transform: uppercase;\n font-weight: bold;\n }\n .hud_machine_detail {\n position: absolute;\n top: ]] .. tostring((250/1080)*100) .. [[vh;\n right: ]] .. tostring((50/1920)*100) .. [[vw;\n text-transform: uppercase;\n font-weight: bold;\n }\n .hud_machines_container {\n position: absolute;\n top: ]] .. tostring((125/1080)*100) .. [[vh;\n left: ]] .. tostring((300/1920)*100) .. [[vw;\n }\n .elementType {\n margin-top:10px;\n border-radius:5px;\n }\n .elementType.selected {\n border: 2px solid green;\n background-color: rgba(0,200,0,.45);\n }\n tr.selected td, tr.selected th{\n border: 2px solid green;\n background-color: rgba(0,200,0,.1);\n }\n td, th {\n border-bottom:1px solid white;\n padding:5px;\n text-align: center;\n }\n th {\n font-weight: bold;\n }\n .text-success{color: #28a745;}\n .text-danger{color:#dc3545;}\n .text-warning{color:#ffc107;}\n .text-info{color:#17a2b8;}\n .text-primary{color:#007bff;}\n .text-orangered{color:orangered;}\n .bg-success{background-color: #28a745;}\n .bg-danger{background-color:#dc3545;}\n .bg-warning{background-color:#ffc107;}\n .bg-info{background-color:#17a2b8;}\n .bg-primary{background-color:#007bff;}\n </style>\n]]\n\nif initIndex >= #elementsIdList then\n unit.stopTimer(\"init\")\n --system.print(MyJson.stringify(allTypes))\n if not isTimerStarted then\n isTimerStarted = true\n unit.setTimer(\"buildLists\",1)\n system.setScreen(hud_main_css .. hud_help_command .. [[\n <div class=\"hud_list_container hud_container\">\n \t<table style=\"width:100%\">\n \t\t<tr>\n \t\t\t<th>LOADING ]] .. math.floor(initIndex*100/#elementsIdList) .. [[% ...</th>\n \t\t</tr>\n \t</table>\n </div>\n ]])\n else\n hud_elements_type_list = \"\"\n hud_machines = \"\"\n hud_machine_detail = \"\"\n\n minOnPage = ((page - 1) * elementsByPage) + 1\n maxOnPage = page * elementsByPage\n \n elements = {}\n refresh_id_list = {}\n local temp_elements_for_sorting = {}\n for i,id in pairs(selectedElementsId) do\n elementData = {}\n elementData.id = id\n elementData.name = core.getElementNameById(id)\n table.insert(temp_elements_for_sorting, elementData)\n end\n table.sort(temp_elements_for_sorting, function(a,b) return a.name:lower() < b.name:lower() end)\n for i,elementData in pairs(temp_elements_for_sorting) do\n if i >= minOnPage and i <= maxOnPage then\n elementType = core.getElementDisplayNameById(elementData.id)\n elementData.type = elementType\n elementData.name = core.getElementNameById(elementData.id)\n elementData.position = core.getElementPositionById(elementData.id)\n \n table.insert(refresh_id_list, elementData.id)\n table.insert(elements, elementData)\n end\n end\n \n if hud_displayed == true then\n selected_type = elementsTypes[selected_index]\n \n hud_elements_type_list = [[<div class=\"hud_list_container hud_container\">\n <div style=\"text-align:center;font-weight:bold;border-bottom:1px solid white;\">&#x2191; &nbsp;&nbsp; Ctrl+Arrow Up</div>\n ]]\n for i, elementType in pairs(elementsTypes) do\n --system.print(elementType)\n hud_elements_type_list = hud_elements_type_list .. [[<div class=\"elementType]]\n if i == selected_index then\n hud_elements_type_list = hud_elements_type_list .. \" selected\"\n end\n local count = 0\n if machines_count[elementType:lower()] ~= nil then count = machines_count[elementType:lower()] end\n hud_elements_type_list = hud_elements_type_list .. [[\">\n <table style=\"width:100%;\">\n <tr>\n <th style=\"text-align:left;border-bottom:none;\">]].. elementType .. [[</th>\n <td style=\"text-align:right;border-bottom:none;\">]] .. tostring(count) .. [[</td>\n </tr>\n </table>\n </div>\n ]]\n end\n hud_elements_type_list = hud_elements_type_list .. [[<div style=\"margin-top:10px;text-align:center;font-weight:bold;border-top:1px solid white;\">&#x2193; &nbsp;&nbsp; Ctrl+Arrow Down</div></div>]]\n local minOnPage = ((page - 1) * elementsByPage) + 1\n if maxOnPage > #selectedElementsId then maxOnPage = #selectedElementsId end\n hud_machines = [[<div class=\"hud_machines_container hud_container\">\n <div style=\"text-align:center;font-weight:bold;border-bottom:1px solid white;\">&#x2191; &nbsp;&nbsp; Arrow Up</div>\n <table class=\"elements_table\" style=\"width:100%\">\n <tr>\n <th>&#x2190; &nbsp;&nbsp; Arrow Left</th>\n <th> Page ]] .. page .. [[/]] .. maxPage .. [[ (from ]] .. minOnPage .. [[ to ]] .. maxOnPage .. [[)</th>\n <th>Arrow Right &nbsp;&nbsp; &#x2192;</th>\n </tr>\n </table>\n <table class=\"elements_table\" style=\"width:100%;\">]]\n if selected_index > 0 and #elementsTypes > 0 and elementsTypes[selected_index]:lower():find(\"container\") then\n hud_machines = hud_machines .. [[\n <tr>\n <th>id</th>\n <th>Container Name</th>\n <th>Item Name</th>\n <th>Container Size</th>\n <th>Item Type</th>\n <th>Unit Mass</th>\n <th>Total Mass</th>\n <th>Amount of Items</th>\n ]]\n if not elementsTypes[selected_index]:lower():find(\"hub\") then\n hud_machines = hud_machines .. [[\n <th>Container Fill</th>\n ]]\n end\n hud_machines = hud_machines .. [[</tr>\n ]]\n for i, element in pairs(elements) do\n local splittedName = strSplit(element.name, \"_\")\n local itemName = splittedName[2]\n if not itemName then itemName = \"-\" end\n local machine_id = \"-\"\n if element.id then machine_id = element.id end\n local container_size = \"hub\"\n local container_empty_mass = getIngredient(\"Container Hub\").mass\n local container_volume = 0\n local contentQuantity = 0\n local ingredient = getIngredient(cleanName(itemName))\n if not element.type:lower():find(\"hub\") then\n local containerMaxHP = core.getElementMaxHitPointsById(element.id)\n if containerMaxHP > 17000 then\n container_size = \"L\"\n container_empty_mass = getIngredient(\"Container L\").mass\n container_volume = 128000 * (container_proficiency_lvl * 0.1) + 128000\n elseif containerMaxHP > 7900 then\n container_size = \"M\"\n container_empty_mass = getIngredient(\"Container M\").mass\n container_volume = 64000 * (container_proficiency_lvl * 0.1) + 64000\n elseif containerMaxHP > 900 then\n container_size = \"S\"\n container_empty_mass = getIngredient(\"Container S\").mass\n container_volume = 8000 * (container_proficiency_lvl * 0.1) + 8000\n else\n container_size = \"XS\"\n container_empty_mass = getIngredient(\"Container XS\").mass\n container_volume = 1000 * (container_proficiency_lvl * 0.1) + 1000\n end\n end\n local totalMass = core.getElementMassById(element.id)\n local contentMassKg = totalMass - container_empty_mass\n local contentMass = contentMassKg\n local contentMassUnit = \"Kg\"\n if contentMass > 1000 then\n contentMass = contentMass/1000\n contentMassUnit = \"T\"\n end\n contentMass = utils.round(contentMass*100)/100\n contentQuantity = contentMassKg / ingredient.mass\n local contentPercent = 0\n if (not element.type:lower():find(\"hub\")) --not a hub\n and (not ingredient.type:lower():find(\"error\")) --not item not found\n then\n contentPercent = math.floor((ingredient.volume * contentQuantity)*100/container_volume)\n end\n hud_machines = hud_machines .. [[<tr]]\n if selected_machine_index == i then\n hud_machines = hud_machines .. [[ class=\"selected\"]]\n end\n hud_machines = hud_machines .. [[>\n <th>]] .. machine_id .. [[</th>\n <th>]] .. itemName .. [[</th>\n <th>]] .. ingredient.name .. [[</th>\n <td>]] .. container_size .. [[</td>\n <td>]] .. ingredient.type .. [[</td>\n <td>]] .. ingredient.mass .. [[</td>\n <td>]] .. contentMass .. \" \" .. contentMassUnit .. [[</td>\n <td>]] .. utils.round(contentQuantity*100)/100 .. [[</td>\n ]]\n if not element.type:lower():find(\"hub\") then\n local gauge_color_class = \"bg-success\"\n local text_color_class = \"\"\n if contentPercent < container_fill_red_level then\n gauge_color_class = \"bg-danger\"\n elseif contentPercent < container_fill_yellow_level then\n gauge_color_class = \"bg-warning\"\n text_color_class = \"text-orangered\"\n end\n if ingredient.type:lower():find(\"error\") then\n hud_machines = hud_machines .. [[\n <th style=\"position:relative;width: ]] .. tostring((150/1920)*100) .. [[vw;\">\n -\n </th>\n </tr>\n ]]\n else\n hud_machines = hud_machines .. [[\n <th style=\"position:relative;width: ]] .. tostring((150/1920)*100) .. [[vw;\">\n <div class=\"]] .. gauge_color_class .. [[\" style=\"width:]] .. contentPercent .. [[%;\">&nbsp;</div>\n <div class=\"]] .. text_color_class .. [[\" style=\"position:absolute;width:100%;top:0;padding-top:5px;font-weight:bold;\">\n ]] .. contentPercent .. [[%\n </div>\n </th>\n </tr>\n ]]\n end\n end\n end\n else\n hud_machines = hud_machines .. [[\n <tr>\n <th>id</th>\n <th>Machine Name</th>\n \t <th>Selected Recipe</th>\n <th>Cycles From Start</th>\n <th>Status</th>\n <th>Mode</th>\n <th>Time Remaining</th>\n </tr>\n ]]\n for i, element in pairs(elements) do\n local statusData = core.getElementIndustryInfoById(element.id)\n local recipeName = \"-\"\n if #statusData.currentProducts > 0 then\n local item = system.getItem(statusData.currentProducts[1].id)\n if item.locDisplayNameWithSize then\n recipeName = item.locDisplayNameWithSize\n end\n end\n \n local remainingTime = 0\n if (statusData) and (statusData.remainingTime) and (statusData.remainingTime <= (3600*24*365)) then\n remainingTime = statusData.remainingTime\n end\n element.recipeName = recipeName\n element.remainingTime = remainingTime\n element.status = statusData.state\n element.unitsProduced = statusData.unitsProduced\n local mode = \"\"\n element.maintainProductAmount = statusData.maintainProductAmount\n element.batchesRequested = statusData.batchesRequested\n if statusData.maintainProductAmount > 0 then\n \tmode = \"Maintain \" .. math.floor(statusData.maintainProductAmount)\n elseif statusData.batchesRequested > 0 and statusData.batchesRequested <= 99999999 then\n mode = \"Produce \" .. math.floor(statusData.batchesRequested)\n end\n local status = statusList[element.status] or '-'\n local status_class = getIndustryStatusClass(element.status)\n hud_machines = hud_machines .. [[<tr]]\n if selected_machine_index == i then\n hud_machines = hud_machines .. [[ class=\"selected\"]]\n end\n local machine_id = \"-\"\n if element.id then machine_id = element.id end\n local unitsProduced = 0\n if element.unitsProduced then unitsProduced = element.unitsProduced end\n hud_machines = hud_machines .. [[>\n <th>]] .. machine_id .. [[</th>\n <th class=\"]] .. status_class .. [[\">]] .. element.name .. [[</th>\n <th>]] .. recipeName .. [[</th>\n <td>]] .. unitsProduced .. [[</td>\n <th class=\"]] .. status_class .. [[\">]] .. status .. [[</th>\n \t\t <th>]] .. mode .. [[</th>\n <td class=\"]] .. status_class .. [[\">]] .. SecondsToClockString(element.remainingTime) .. [[</td>\n </tr>\n ]]\n end\n end\n hud_machines = hud_machines .. [[</table>\n <table class=\"elements_table\" style=\"width:100%\">\n <tr>\n <th>&#x2190; &nbsp;&nbsp; Arrow Left</th>\n <th> Page ]] .. page .. [[/]] .. maxPage .. [[ (from ]] .. minOnPage .. [[ to ]] .. maxOnPage .. [[)</th>\n <th>Arrow Right &nbsp;&nbsp; &#x2192;</th>\n </tr>\n </table>\n <div style=\"text-align:center;font-weight:bold;border-top:1px solid white;\">&#x2193; &nbsp;&nbsp; Arrow Down</div>\n </div>]]\n if #elements > 0 then\n local selected_machine = elements[selected_machine_index]\n local position = vec3(selected_machine.position)\n local x = position.x\n local y = position.y\n local z = position.z\n local offset1 = 1\n local offset15 = 1.5\n local offset2 = 2\n local offset25 = 2.5\n local offsetFromCenter = 0\n if selected_machine.type:lower():find(\"container\") then\n offset1 = 0\n offset15 = 0\n offset2 = 0\n offset25 = 0\n end\n if selected_machine.type:lower() == \"container\" then\n local containerMaxHP = core.getElementMaxHitPointsById(selected_machine.id)\n if containerMaxHP > 17000 then\n offsetFromCenter = 4\n elseif containerMaxHP > 7900 then\n offsetFromCenter = 2\n elseif containerMaxHP > 900 then\n offsetFromCenter = 1\n else\n offsetFromCenter = 0.5\n end\n end\n if #markers == 0 then\n table.insert(markers, core.spawnArrowSticker(x, y, z, \"down\"))\n table.insert(markers, core.spawnArrowSticker(x, y, z, \"down\"))\n core.rotateSticker(markers[2],0,0,90)\n table.insert(markers, core.spawnArrowSticker(x, y, z + offset15, \"north\"))\n table.insert(markers, core.spawnArrowSticker(x, y, z + offset15, \"north\"))\n core.rotateSticker(markers[4],90,90,0)\n table.insert(markers, core.spawnArrowSticker(x, y, z + offset15, \"south\"))\n table.insert(markers, core.spawnArrowSticker(x, y, z + offset15, \"south\"))\n core.rotateSticker(markers[6],90,-90,0)\n table.insert(markers, core.spawnArrowSticker(x, y, z + offset15, \"east\"))\n table.insert(markers, core.spawnArrowSticker(x, y, z + offset15, \"east\"))\n core.rotateSticker(markers[8],90,0,90)\n table.insert(markers, core.spawnArrowSticker(x, y, z + offset15, \"west\"))\n table.insert(markers, core.spawnArrowSticker(x, y, z + offset15, \"west\"))\n core.rotateSticker(markers[10],-90,0,90)\n else\n core.moveSticker(markers[1], x, y, z + offset25 + offsetFromCenter)\n core.moveSticker(markers[2], x, y, z + offset25 + offsetFromCenter)\n core.moveSticker(markers[3], x + offset1 + offsetFromCenter, y, z + offset15)\n core.moveSticker(markers[4], x + offset1 + offsetFromCenter, y, z + offset15)\n core.moveSticker(markers[5], x - offset1 - offsetFromCenter, y, z + offset15)\n core.moveSticker(markers[6], x - offset1 - offsetFromCenter, y, z + offset15)\n core.moveSticker(markers[7], x, y - offset2 - offsetFromCenter, z + offset15)\n core.moveSticker(markers[8], x, y - offset2 - offsetFromCenter, z + offset15)\n core.moveSticker(markers[9], x, y + offset2 + offsetFromCenter, z + offset15)\n core.moveSticker(markers[10], x, y + offset2 + offsetFromCenter, z + offset15)\n end\n if (not selected_machine.type:lower():find(\"container\")) and (enableRemoteControl == true) then\n local machines_actions = {}\n local status = statusList[selected_machine.status] or '-'\n local status_class = getIndustryStatusClass(selected_machine.status)\n hud_machine_detail = [[<div class=\"hud_machine_detail hud_container\">\n <table>\n <tr>\n <th colspan=\"3\">]] .. selected_machine.name .. [[</th>\n </tr>\n <tr>\n <th class=\"]] .. status_class .. [[\" colspan=\"3\">]] .. status .. [[</th>\n </tr>\n ]]\n if status == \"-\" then\n command_1 = \"\"\n command_2 = \"\"\n command_3 = \"\"\n hud_machine_detail = hud_machine_detail .. [[\n <tr>\n <td>Machine Not Connected</td>\n </tr>\n ]]\n elseif status:lower():find(\"stopped\") then\n command_1 = \"START\"\n command_2 = \"BATCH\"\n command_3 = \"MAINTAIN\"\n hud_machine_detail = hud_machine_detail .. [[\n <tr>\n <th>START</th>\n <th></th>\n <th>ALT+1</th>\n </tr>\n <tr>\n <th style=\"height:65px;\">BATCH</th>\n <th rowspan=\"2\">\n <table>\n <tr>\n <th colspan=\"3\">Quantity:</th>\n </tr>\n <tr>\n <th style=\"font-size:20px;\">\n ]]\n local has_quantity = false\n for k,v in pairs(craft_quantity_digits) do\n if tonumber(v) == nil then v = 0 end\n \tif tonumber(v) > 0 then\n \thas_quantity = true\n \tend\n end\n if not has_quantity then\n local value = \"0\"\n if selected_machine.maintainProductAmount > 0 then\n --mode = \"Maintain \" .. selected_machine.maintainProductAmount\n value = tostring(math.floor(selected_machine.maintainProductAmount))\n elseif selected_machine.batchesRequested > 0 and selected_machine.batchesRequested <= 99999999 then\n --mode = \"Produce \" .. selected_machine.batchesRequested\n value = tostring(math.floor(selected_machine.batchesRequested))\n end\n for i = #value, 1, -1 do\n local c = value:sub(i,i)\n craft_quantity_digits[9-(#value-(i-1))] = c\n end\n end\n for digit_index,digit in pairs(craft_quantity_digits) do\n hud_machine_detail = hud_machine_detail .. digit\n end\n hud_machine_detail = hud_machine_detail .. [[\n </th>\n </tr>\n </table>\n </th>\n <th>ALT+2</th>\n </tr>\n <tr>\n <th>MAINTAIN</th>\n <th>ALT+3</th>\n </tr>\n ]]\n else\n command_1 = \"STOP\"\n command_2 = \"SOFT_STOP\"\n command_3 = \"\"\n hud_machine_detail = hud_machine_detail .. [[\n <tr>\n <th>STOP</th>\n <th>ALT+1</th>\n </tr>\n <tr>\n <th>FINISH AND STOP</th>\n <th>ALT+2</th>\n </tr>\n ]]\n \n end\n hud_machine_detail = hud_machine_detail .. [[</table></div>]]\n end\n end\n end\n system.setScreen(hud_main_css .. hud_help_command .. hud_elements_type_list .. hud_machines .. hud_machine_detail)\n end\n \nelse\n system.setScreen(hud_main_css .. hud_help_command .. [[\n <div class=\"hud_list_container hud_container\">\n \t<table style=\"width:100%\">\n \t\t<tr>\n \t\t\t<th>LOADING ]] .. math.floor(initIndex*100/#elementsIdList) .. [[% ...</th>\n \t\t</tr>\n \t</table>\n </div>\n ]])\nend","filter":{"args":[],"signature":"onUpdate()","slotKey":"-4"},"key":"5"},{"code":"if tonumber(text) then\n if #text > 8 then\n system.print(\"the value should not be higher than 99 999 999.\")\n else\n craft_quantity_digits = {\"0\",\"0\",\"0\",\"0\",\"0\",\"0\",\"0\",\"0\"}\n for i = #text, 1, -1 do\n local c = text:sub(i,i)\n craft_quantity_digits[9-(#text-(i-1))] = c\n end\n end\nelse\n system.print(\"You must type a Number\")\nend","filter":{"args":[{"variable":"*"}],"signature":"onInputText(text)","slotKey":"-4"},"key":"6"},{"code":"Ctrl_pressed = false","filter":{"args":[{"value":"brake"}],"signature":"onActionStop(action)","slotKey":"-4"},"key":"7"},{"code":"if Ctrl_pressed == true then\n if selected_index > 1 then\n selected_index = selected_index - 1\n selected_machine_index = 1\n page = 1\n Storage.clear()\n craft_quantity_digits = {\"0\",\"0\",\"0\",\"0\",\"0\",\"0\",\"0\",\"0\"}\n selectedElementsId = {}\n end\nelse\n if selected_machine_index > 1 then\n selected_machine_index = selected_machine_index - 1\n craft_quantity_digits = {\"0\",\"0\",\"0\",\"0\",\"0\",\"0\",\"0\",\"0\"}\n end\nend","filter":{"args":[{"value":"up"}],"signature":"onActionStart(action)","slotKey":"-4"},"key":"8"},{"code":"if page < maxPage then\n page = page + 1\n selected_machine_index = 1\n Storage.clear()\nend","filter":{"args":[{"value":"straferight"}],"signature":"onActionStart(action)","slotKey":"-4"},"key":"9"},{"code":"if page > 1 then\n page = page - 1\n selected_machine_index = 1\n Storage.clear()\nend","filter":{"args":[{"value":"strafeleft"}],"signature":"onActionStart(action)","slotKey":"-4"},"key":"10"},{"code":"hud_displayed = not hud_displayed","filter":{"args":[{"value":"option7"}],"signature":"onActionStart(action)","slotKey":"-4"},"key":"11"},{"code":"if enableRemoteControl == true then \n --Send Command 3\n local selected_machine = elements[selected_machine_index]\n for _,db in pairs(databanks) do\n if command_3:find(\"MAINTAIN\") or command_3:find(\"BATCH\") then\n craft_quantity = \"\"\n for _,digit in pairs(craft_quantity_digits) do\n craft_quantity = craft_quantity .. digit\n end\n command_3 = command_3 .. \"_\" .. craft_quantity\n end\n --selected_machine.command = command_3\n db.setStringValue(selected_machine.id, command_3)\n if command_3:find(\"MAINTAIN\") then command_3 = \"MAINTAIN\" end\n if command_3:find(\"BATCH\") then command_3 = \"BATCH\" end\n end\n if emitter ~= nil then\n emitter.send(channels[elementsTypes[selected_index]:lower()], \"\")\n else\n system.print(\"Emitter not Linked\")\n end\nend","filter":{"args":[{"value":"option3"}],"signature":"onActionStart(action)","slotKey":"-4"},"key":"12"},{"code":"if enableRemoteControl == true then \n --Send Command 12\n local selected_machine = elements[selected_machine_index]\n for _,db in pairs(databanks) do\n if command_2:find(\"MAINTAIN\") or command_2:find(\"BATCH\") then\n craft_quantity = \"\"\n for _,digit in pairs(craft_quantity_digits) do\n craft_quantity = craft_quantity .. digit\n end\n command_2 = command_2 .. \"_\" .. craft_quantity\n end\n --selected_machine.command = command_2\n db.setStringValue(selected_machine.id, command_2)\n if command_2:find(\"MAINTAIN\") then command_2 = \"MAINTAIN\" end\n if command_2:find(\"BATCH\") then command_2 = \"BATCH\" end\n end\n if emitter ~= nil then\n emitter.send(channels[elementsTypes[selected_index]:lower()], \"\")\n else\n system.print(\"Emitter not Linked\")\n end\nend","filter":{"args":[{"value":"option2"}],"signature":"onActionStart(action)","slotKey":"-4"},"key":"13"},{"code":"if enableRemoteControl == true then\n system.print(\"command 1\")\n --Send Command 1\n local selected_machine = elements[selected_machine_index]\n for _,db in pairs(databanks) do\n --selected_machine.command = command_1\n db.setStringValue(selected_machine.id, command_1)\n end\n if emitter ~= nil then\n emitter.send(channels[elementsTypes[selected_index]:lower()], \"\")\n else\n system.print(\"Emitter not Linked\")\n end\nend","filter":{"args":[{"value":"option1"}],"signature":"onActionStart(action)","slotKey":"-4"},"key":"14"},{"code":"if Ctrl_pressed == true then\n if selected_index < #elementsTypes then\n selected_index = selected_index + 1\n selected_machine_index = 1\n page = 1\n Storage.clear()\n craft_quantity_digits = {\"0\",\"0\",\"0\",\"0\",\"0\",\"0\",\"0\",\"0\"}\n selectedElementsId = {}\n end\nelse\n if selected_machine_index < #elements then\n selected_machine_index = selected_machine_index + 1\n craft_quantity_digits = {\"0\",\"0\",\"0\",\"0\",\"0\",\"0\",\"0\",\"0\"}\n end\nend","filter":{"args":[{"value":"down"}],"signature":"onActionStart(action)","slotKey":"-4"},"key":"15"},{"code":"Ctrl_pressed = true","filter":{"args":[{"value":"brake"}],"signature":"onActionStart(action)","slotKey":"-4"},"key":"16"},{"code":"--load all the machines from the core step by step to avoid CPU Load Errors\n\nlocal maxForLoop = initIndex + maxAmountOfElementsLoadedBySecond\nif maxForLoop > #elementsIdList then maxForLoop = #elementsIdList end\nsystem.print(\"Loading elements from \" .. initIndex .. \" to \" .. maxForLoop .. \" on \" .. #elementsIdList)\n\nfor i = initIndex, maxForLoop, 1 do\n \tinitIndex = i\n \tlocal id = elementsIdList[i]\n elementType = core.getElementDisplayNameById(id):lower()\n if (elementType:find(\"assembly line\") and enableAssemblyMonitoring == true) or\n (elementType:find(\"glass furnace\") and enableGlassMonitoring == true) or\n (elementType:find(\"3d printer\") and enable3DPrinterMonitoring == true) or\n (elementType:find(\"smelter\") and enableSmelterMonitoring == true) or\n (elementType:find(\"recycler\") and enableRecyclerMonitoring == true) or\n (elementType:find(\"refinery\") and enableHoneycombMonitoring == true) or\n (elementType:find(\"refiner\") and enableRefinerMonitoring == true) or\n (elementType:find(\"industry\")\n and (\n (elementType:find(\"chemical\") and enableChemicalMonitoring == true) or\n (elementType:find(\"electronics\") and enableElectronicsMonitoring == true) or\n (elementType:find(\"metalwork\") and enableMetalworkMonitoring == true)\n )\n ) or\n (elementType == \"transfer unit\" and enableTransferMonitoring == true) --[[or\n (elementType:find(\"container\") and enableContainerMonitoring == true)\n ]]--\n then\n \tlocal formatedType = removeQualityInName(elementType)\n if machines_count[formatedType] ~= nil then\n machines_count[formatedType] = machines_count[formatedType] + 1\n else\n machines_count[formatedType] = 1\n end\n table.insert(elementsId, id)\n end\n end","filter":{"args":[{"value":"init"}],"signature":"onTimer(timerId)","slotKey":"-1"},"key":"0"},{"code":"local year, month, day, hour, minute, second = DUCurrentDateTime()\nlocal dateStr = string.format(\"%02d/%02d/%04d %02d:%02d:%02d\",day,month,year,hour,minute,second)\nhud_help_command = [[<div class=\"hud_help_commands hud_container\">\n <table>\n <tr>\n <th colspan=\"2\">\n ]] .. dateStr .. [[\n </th>\n </tr>\n <tr>\n <td>Show/Hide HUD</td>\n <th style=\"text-align:right;\">Alt+7</th>\n </tr>\n </table>\n</div>]]","filter":{"args":[{"value":"helperRefresh"}],"signature":"onTimer(timerId)","slotKey":"-1"},"key":"1"},{"code":"local maxForLoop = listIndex + maxAmountOfElementsLoadedBySecond\nif maxForLoop > #elementsId then maxForLoop = #elementsId end\n\nfor i = listIndex, maxForLoop, 1 do\n listIndex = i\n local id = elementsId[i]\n elementType = core.getElementDisplayNameById(id)\n local elementName = core.getElementNameById(id):lower()\n if\n (elementType:lower():find(\"container\")\n and elementName:find(containerMonitoringPrefix:lower()))\n or (not elementType:lower():find(\"container\"))\n then\n local formatedName = removeQualityInName(elementType)\n table.insert(elementsTypes, formatedName)\n end\n if selected_type == removeQualityInName(elementType) then\n if\n (elementType:lower():find(\"container\") and elementName:find(containerMonitoringPrefix:lower()))\n or (not elementType:lower():find(\"container\"))\n then\n table.insert(selectedElementsId, id)\n end\n end\nend\nelementsTypes = removeDuplicatesInTable(elementsTypes)\nselectedElementsId = removeDuplicatesInTable(selectedElementsId)\ntable.sort(elementsTypes, function(a,b) return a:lower() < b:lower() end)\nmaxPage = math.ceil(#selectedElementsId / elementsByPage)\nif listIndex >= #elementsId then listIndex = 1 end","filter":{"args":[{"value":"buildLists"}],"signature":"onTimer(timerId)","slotKey":"-1"},"key":"2"},{"code":"Storage.clear()\nfor _,m in pairs(markers) do\n core.deleteSticker(m)\nend","filter":{"args":[],"signature":"onStop()","slotKey":"-1"},"key":"3"},{"code":"--[[\n\treceivers channels for each type of machine\n]]\n\nlocal version = \"V 2.3.3\"\n\nsystem.print(\"==================================================\")\nlocal print_version_str = \"\"\nlocal print_version_number = math.ceil((50-#version-2)/2)\nfor i=1, print_version_number, 1 do print_version_str = print_version_str .. '=' end\nprint_version_str = print_version_str .. \" \" .. version .. \" \"\nfor i=1, print_version_number, 1 do print_version_str = print_version_str .. '=' end\nsystem.print(print_version_str)\nsystem.print(\"==================================================\")\n\nchannel_for_refiner = \"receiver_refiner\" --export: receiver channel to send orders to refiners\nchannel_for_assembly = \"receiver_assembly\" --export: receiver channel to send orders to assembly lines\nchannel_for_smelter = \"receiver_smelters\" --export: receiver channel to send orders to smelters\nchannel_for_chemical = \"receiver_chemical\" --export: receiver channel to send orders to chemical indutries\nchannel_for_electronics = \"receiver_electronics\" --export: receiver channel to send orders to electronic industries\nchannel_for_glass = \"receiver_glass\" --export: receiver channel to send orders to glass furnace\nchannel_for_honeycomb = \"receiver_honeycomb_recycler\" --export: receiver channel to send orders to honeycomb refiniries\nchannel_for_recycler = \"receiver_honeycomb_recycler\" --export: receiver channel to send orders to recylers\nchannel_for_metalwork = \"receiver_metalworks\" --export: receiver channel to send orders to metalworks\nchannel_for_3d_printer = \"receiver_3dprinters\" --export: receiver channel to send orders to 3d printers\nchannel_for_transfer = \"receiver_transfert\" --export: receiver channel to send orders to tranfer units\n\ncontainer_proficiency_lvl = 0 --: Talent level for Container Proficiency\ncontainer_fill_red_level = 10 --: The percent fill below gauge will be red\ncontainer_fill_yellow_level = 50 --t: The percent fill below gauge will be yellow\n\nenableRefinerMonitoring = true --export: enable or disable the Refiners monitoring\nenableAssemblyMonitoring = true --export: enable or disable the Assembly lines monitoring\nenableSmelterMonitoring = true --export: enable or disable the Smelters monitoring\nenableChemicalMonitoring = true --export: enable or disable the Chemical industries monitoring\nenableElectronicsMonitoring = true --export: enable or disable the Electronics Industries monitoring\nenableGlassMonitoring = true --export: enable or disable the Glass Furnace monitoring\nenableHoneycombMonitoring = true --export: enable or disable the Honeycomb Refineries monitoring\nenableRecyclerMonitoring = true --export: enable or disable the Recyclers monitoring\nenableMetalworkMonitoring = true --export: enable or disable the Metalworks monitoring\nenable3DPrinterMonitoring = true --export: enable or disable the 3D Printers monitoring\nenableTransferMonitoring = true --export: enable or disable the transfer units monitoring\nenableContainerMonitoring = false --: enable or disable the containers and hubs monitoring\nenableRemoteControl = true --export: enable the HUD to control machines (start/stop/batch/maintain)\ncontainerMonitoringPrefix = \"MONIT_\" --: the prefix used to enable container monitoring\nelementsByPage = 20 --export: maximum amount of elements displayed on a single page\ndateFormat = \"en\" --export: the country code to format the date\nmaxAmountOfElementsLoadedBySecond = 2000 --export: if cpu load errors at start, lower that value\nmaxAmountOfRecipeLoadedBySecond = 10 --export: if cpu load errors on page load, lower that value\ncontentFontSize = 15 --export: size of the font of the content of all pannels in pixels\n\n--[[\n\tDO NOT CHANGE THE FOLLOWING\n]]\n\nchannels = {}\nchannels['refiner'] = channel_for_refiner\nchannels['assembly line'] = channel_for_assembly\nchannels['smelter'] = channel_for_smelter\nchannels['chemical industry'] = channel_for_chemical\nchannels['electronics industry'] = channel_for_electronics\nchannels['glass furnace'] = channel_for_glass\nchannels['honeycomb refinery'] = channel_for_honeycomb\nchannels['recycler'] = channel_for_recycler\nchannels['metalwork industry'] = channel_for_metalwork\nchannels['3d printer'] = channel_for_3d_printer\nchannels['transfer unit'] = channel_for_transfer\n\ndatabanks = {}\ncore = nil\nemitter = nil\nfor slot_name, slot in pairs(unit) do\n if\n type(slot) == \"table\"\n and type(slot.export) == \"table\"\n and slot.getClass\n then\n if slot.getClass():lower() == 'databankunit' then\n table.insert(databanks, slot)\n end\n if slot.getClass():lower():find(\"coreunit\") then\n core = slot\n end\n if slot.getClass():lower() == 'emitterunit' then\n emitter = slot\n end\n end\nend\n\nif emitter == nil then \n enableRemoteControl = false\n system.print(\"Connect an Emitter to enable machine control from industry\")\nend\nif #databanks == 0 then \n enableRemoteControl = false\n system.print(\"No Databank linked\")\nend\nStorage = bankhub:new(databanks)\n\nelementsId = {}\nelements = {}\nelementsTypes = {}\nmachines_count = {}\nmachines_count.total = 0\ninitIndex = 1\nlistIndex = 1\nelementsIdList = {}\nif core ~= nil and Storage then\n\telementsIdList = core.getElementIdList()\n unit.setTimer(\"init\",1)\nend\n\nelementsTypes = removeDuplicatesInTable(elementsTypes)\n\nsystem.showScreen(1)\nchannel_index = 1\nselected_index = 1\nselected_machine_index = 1\nhud_displayed = true\npage = 1\nmaxPage = 1\nselectedElementsId = {}\nCtrl_pressed = false\ncraft_quantity = \"\"\ncraft_quantity_digits = {\"0\",\"0\",\"0\",\"0\",\"0\",\"0\",\"0\",\"0\"}\nrefresh_id_list = {}\ncraft_selected_digit = 1\ncommand_1 = \"\"\ncommand_2 = \"\"\ncommand_3 = \"\"\nmarkers = {}\nrefreshActivated = true\nhud_help_command = \"\"\nunit.setTimer(\"helperRefresh\",1)\nminOnPage = 0\nmaxOnPage = 0","filter":{"args":[],"signature":"onStart()","slotKey":"-1"},"key":"4"}],"methods":[],"slots":{"0":{"name":"slot1","type":{"events":[],"methods":[]}},"1":{"name":"slot2","type":{"events":[],"methods":[]}},"2":{"name":"slot3","type":{"events":[],"methods":[]}},"3":{"name":"slot4","type":{"events":[],"methods":[]}},"4":{"name":"slot5","type":{"events":[],"methods":[]}},"5":{"name":"slot6","type":{"events":[],"methods":[]}},"6":{"name":"slot7","type":{"events":[],"methods":[]}},"7":{"name":"slot8","type":{"events":[],"methods":[]}},"8":{"name":"slot9","type":{"events":[],"methods":[]}},"9":{"name":"slot10","type":{"events":[],"methods":[]}},"-5":{"name":"library","type":{"events":[],"methods":[]}},"-4":{"name":"system","type":{"events":[],"methods":[]}},"-3":{"name":"player","type":{"events":[],"methods":[]}},"-2":{"name":"construct","type":{"events":[],"methods":[]}},"-1":{"name":"unit","type":{"events":[],"methods":[]}}}} 1 + {"events":[],"handlers":[{"code":"--[[\n DU-Nested-Coroutines by Jericho\n Permit to easier avoid CPU Load Errors\n Source available here: https://github.com/Jericho1060/du-nested-coroutines\n]]--\n\nif coroutine.status(MainCoroutine) == \"dead\" then\n MainCoroutine = coroutine.create(runCoroutines)\nend\nif coroutine.status(MainCoroutine) == \"suspended\" then\n assert(coroutine.resume(MainCoroutine))\nend","filter":{"args":[],"signature":"onUpdate()","slotKey":"-4"},"key":"2"},{"code":"if tonumber(text) then\n if #text > 8 then\n system.print(\"the value should not be higher than 99 999 999.\")\n else\n craft_quantity_digits = {\"0\",\"0\",\"0\",\"0\",\"0\",\"0\",\"0\",\"0\"}\n for i = #text, 1, -1 do\n local c = text:sub(i,i)\n craft_quantity_digits[9-(#text-(i-1))] = c\n end\n end\nelse\n system.print(\"You must type a Number\")\nend","filter":{"args":[{"variable":"*"}],"signature":"onInputText(text)","slotKey":"-4"},"key":"3"},{"code":"Ctrl_pressed = false","filter":{"args":[{"value":"brake"}],"signature":"onActionStop(action)","slotKey":"-4"},"key":"4"},{"code":"if Ctrl_pressed == true then\n if selected_index > 1 then\n selected_index = selected_index - 1\n selected_type = elementsTypes[selected_index]\n selected_machine_index = 1\n page = 1\n Storage.clear()\n craft_quantity_digits = {\"0\",\"0\",\"0\",\"0\",\"0\",\"0\",\"0\",\"0\"}\n selectedElementsId = {}\n hud_machines_rows = {}\n elements = {}\n selectedElementsId = {}\n temp_selectedElementsId = {}\n temp_elements_for_sorting = {}\n temp_elements = {}\n temp_refresh_id_list = {}\n machineLoaded = false\n end\nelse\n if selected_machine_index > 1 then\n selected_machine_index = selected_machine_index - 1\n craft_quantity_digits = {\"0\",\"0\",\"0\",\"0\",\"0\",\"0\",\"0\",\"0\"}\n end\nend","filter":{"args":[{"value":"up"}],"signature":"onActionStart(action)","slotKey":"-4"},"key":"5"},{"code":"if page < maxPage then\n page = page + 1\n selected_machine_index = 1\n Storage.clear()\n hud_machines_rows = {}\n elements = {}\n temp_elements_for_sorting = {}\n temp_elements = {}\n temp_refresh_id_list = {}\nend","filter":{"args":[{"value":"straferight"}],"signature":"onActionStart(action)","slotKey":"-4"},"key":"6"},{"code":"if page > 1 then\n page = page - 1\n selected_machine_index = 1\n Storage.clear()\n hud_machines_rows = {}\n elements = {}\n temp_elements_for_sorting = {}\n temp_elements = {}\n temp_refresh_id_list = {}\nend","filter":{"args":[{"value":"strafeleft"}],"signature":"onActionStart(action)","slotKey":"-4"},"key":"7"},{"code":"hud_displayed = not hud_displayed","filter":{"args":[{"value":"option7"}],"signature":"onActionStart(action)","slotKey":"-4"},"key":"8"},{"code":"if enableRemoteControl == true then \n --Send Command 3\n local selected_machine = elements[selected_machine_index]\n for _,db in pairs(databanks) do\n if command_3:find(\"MAINTAIN\") or command_3:find(\"BATCH\") then\n craft_quantity = \"\"\n for _,digit in pairs(craft_quantity_digits) do\n craft_quantity = craft_quantity .. digit\n end\n command_3 = command_3 .. \"_\" .. craft_quantity\n end\n --selected_machine.command = command_3\n db.setStringValue(selected_machine.id, command_3)\n if command_3:find(\"MAINTAIN\") then command_3 = \"MAINTAIN\" end\n if command_3:find(\"BATCH\") then command_3 = \"BATCH\" end\n end\n if emitter ~= nil then\n emitter.send(channels[elementsTypes[selected_index]:lower()], \"\")\n else\n system.print(\"Emitter not Linked\")\n end\nend","filter":{"args":[{"value":"option3"}],"signature":"onActionStart(action)","slotKey":"-4"},"key":"9"},{"code":"if enableRemoteControl == true then \n --Send Command 12\n local selected_machine = elements[selected_machine_index]\n for _,db in pairs(databanks) do\n if command_2:find(\"MAINTAIN\") or command_2:find(\"BATCH\") then\n craft_quantity = \"\"\n for _,digit in pairs(craft_quantity_digits) do\n craft_quantity = craft_quantity .. digit\n end\n command_2 = command_2 .. \"_\" .. craft_quantity\n end\n --selected_machine.command = command_2\n db.setStringValue(selected_machine.id, command_2)\n if command_2:find(\"MAINTAIN\") then command_2 = \"MAINTAIN\" end\n if command_2:find(\"BATCH\") then command_2 = \"BATCH\" end\n end\n if emitter ~= nil then\n emitter.send(channels[elementsTypes[selected_index]:lower()], \"\")\n else\n system.print(\"Emitter not Linked\")\n end\nend","filter":{"args":[{"value":"option2"}],"signature":"onActionStart(action)","slotKey":"-4"},"key":"10"},{"code":"if enableRemoteControl == true then\n --Send Command 1\n local selected_machine = elements[selected_machine_index]\n for _,db in pairs(databanks) do\n db.setStringValue(selected_machine.id, command_1)\n end\n if emitter ~= nil then\n emitter.send(channels[elementsTypes[selected_index]:lower()], \"\")\n else\n system.print(\"Emitter not Linked\")\n end\nend","filter":{"args":[{"value":"option1"}],"signature":"onActionStart(action)","slotKey":"-4"},"key":"11"},{"code":"if Ctrl_pressed == true then\n if selected_index < #elementsTypes then\n selected_index = selected_index + 1\n selected_type = elementsTypes[selected_index]\n selected_machine_index = 1\n page = 1\n Storage.clear()\n craft_quantity_digits = {\"0\",\"0\",\"0\",\"0\",\"0\",\"0\",\"0\",\"0\"}\n selectedElementsId = {}\n hud_machines_rows = {}\n elements = {}\n selectedElementsId = {}\n temp_selectedElementsId = {}\n temp_elements_for_sorting = {}\n temp_elements = {}\n temp_refresh_id_list = {}\n machineLoaded = false\n end\nelse\n if selected_machine_index < #elements then\n selected_machine_index = selected_machine_index + 1\n craft_quantity_digits = {\"0\",\"0\",\"0\",\"0\",\"0\",\"0\",\"0\",\"0\"}\n end\nend","filter":{"args":[{"value":"down"}],"signature":"onActionStart(action)","slotKey":"-4"},"key":"12"},{"code":"Ctrl_pressed = true","filter":{"args":[{"value":"brake"}],"signature":"onActionStart(action)","slotKey":"-4"},"key":"13"},{"code":"Storage.clear()","filter":{"args":[],"signature":"onStop()","slotKey":"-1"},"key":"0"},{"code":"--[[\n DU Industry HUD By Jericho\n]]\n\nlocal version = \"V 3.0.5 - alpha\"\nlocal log_split = \"=================================================\"\n--printing version in lua chat\nsystem.print(log_split)local a=\"\"local b=math.ceil((50-#version-2)/2)for c=1,b,1 do a=a..'='end;a=a..\" \"..version..\" \"for c=1,b,1 do a=a..'='end;system.print(a)system.print(log_split)\n\n--[[\n\treceivers channels for each type of machine\n]]\nchannel_for_refiner = \"receiver_refiner\" --export: receiver channel to send orders to refiners\nchannel_for_assembly = \"receiver_assembly\" --export: receiver channel to send orders to assembly lines\nchannel_for_smelter = \"receiver_smelters\" --export: receiver channel to send orders to smelters\nchannel_for_chemical = \"receiver_chemical\" --export: receiver channel to send orders to chemical indutries\nchannel_for_electronics = \"receiver_electronics\" --export: receiver channel to send orders to electronic industries\nchannel_for_glass = \"receiver_glass\" --export: receiver channel to send orders to glass furnace\nchannel_for_honeycomb = \"receiver_honeycomb_recycler\" --export: receiver channel to send orders to honeycomb refiniries\nchannel_for_recycler = \"receiver_honeycomb_recycler\" --export: receiver channel to send orders to recylers\nchannel_for_metalwork = \"receiver_metalworks\" --export: receiver channel to send orders to metalworks\nchannel_for_3d_printer = \"receiver_3dprinters\" --export: receiver channel to send orders to 3d printers\nchannel_for_transfer = \"receiver_transfert\" --export: receiver channel to send orders to tranfer units\n\n--[[\n Lua parameters\n]]\nenableRefinerMonitoring = true --export: enable or disable the Refiners monitoring\nenableAssemblyMonitoring = true --export: enable or disable the Assembly lines monitoring\nenableSmelterMonitoring = true --export: enable or disable the Smelters monitoring\nenableChemicalMonitoring = true --export: enable or disable the Chemical industries monitoring\nenableElectronicsMonitoring = true --export: enable or disable the Electronics Industries monitoring\nenableGlassMonitoring = true --export: enable or disable the Glass Furnace monitoring\nenableHoneycombMonitoring = true --export: enable or disable the Honeycomb Refineries monitoring\nenableRecyclerMonitoring = true --export: enable or disable the Recyclers monitoring\nenableMetalworkMonitoring = true --export: enable or disable the Metalworks monitoring\nenable3DPrinterMonitoring = true --export: enable or disable the 3D Printers monitoring\nenableTransferMonitoring = true --export: enable or disable the transfer units monitoring\nenableRemoteControl = true --export: enable the HUD to control machines (start/stop/batch/maintain)\nelementsByPage = 20 --export: maximum amount of elements displayed on a single page\ndateFormat = \"en\" --export: the country code to format the date\nmaxAmountOfElementsLoadedByFrame = 1000 --export: if cpu load errors at start, lower that value\n\n--[[\n\tDO NOT CHANGE THE FOLLOWING\n]]\n\n--Utility functions By jericho, see full source at https://github.com/Jericho1060/DualUniverse\nfunction removeDuplicatesInTable(a)local b={}local c={}for d,e in ipairs(a)do if not b[e]then c[#c+1]=e;b[e]=true end end;return c end;function strSplit(a,b)result={}for c in(a..b):gmatch(\"(.-)\"..b)do table.insert(result,c)end;return result end;function SecondsToClockString(a)local a=tonumber(a)if a==nil or a<=0 then return\"-\"else days=string.format(\"%2.f\",math.floor(a/(3600*24)))hours=string.format(\"%2.f\",math.floor(a/3600-days*24))mins=string.format(\"%2.f\",math.floor(a/60-hours*60-days*24*60))secs=string.format(\"%2.f\",math.floor(a-hours*3600-days*24*60*60-mins*60))str=\"\"if tonumber(days)>0 then str=str..days..\"d \"end;if tonumber(hours)>0 then str=str..hours..\"h \"end;if tonumber(mins)>0 then str=str..mins..\"m \"end;if tonumber(secs)>0 then str=str..secs..\"s\"end;return str end end;function removeQualityInName(a)if not a then return''end;return a:lower():gsub('basic ',''):gsub('uncommon ',''):gsub('advanced ',''):gsub('rare ',''):gsub('exotic ','')end;function has_value(a,b)for c,d in ipairs(a)do if d==b then return true end end;return false end\n\n--time script to get client date and time by Jericho, see full source at https://github.com/Jericho1060/DualUniverse\nfunction DUCurrentDateTime(a)local b=system.getUtcTime()if not a then b=b+system.getUtcOffset()end;local c=24*60*60;local d=365*c;local e=d+c;local f=4*d+c;local g=4;local h=1970;local i={-1,30,58,89,119,150,180,211,242,272,303,333,364}local j={}for k=1,2 do j[k]=i[k]end;for k=3,13 do j[k]=i[k]+1 end;local l,m,n,o,p,q,r,s;local t=i;s=b;l=math.floor(s/f)s=s-l*f;l=l*4+h;if s>=d then l=l+1;s=s-d;if s>=d then l=l+1;s=s-d;if s>=e then l=l+1;s=s-e else t=j end end end;m=math.floor(s/c)s=s-m*c;local n=1;while t[n]<m do n=n+1 end;n=n-1;local o=m-t[n]p=(math.floor(b/c)+g)%7;if p==0 then p=7 end;q=math.floor(s/3600)s=s-q*3600;r=math.floor(s/60)function round(u,v)if v then return utils.round(u/v)*v end;return u>=0 and math.floor(u+0.5)or math.ceil(u-0.5)end;s=round(s-r*60)local w={\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\",\"Sunday\"}local x={\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\",\"Sun\"}local y={\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"}local z={\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"}return l,n,o,q,r,s,p,w[p],x[p],y[n],z[n],m+1 end\n \n--databank hub library By Jericho, see full source at https://github.com/Jericho1060/DualUniverse\nbankhub={}function bankhub:new(banks)o={}setmetatable(o,self)self.__index=self;o.banks=banks or{}function o.clear()return o:_clear()end;function o.getNbKeys()return o:_getNbKeys()end;function o.getKeys()return o:_getKeys()end;function o.hasKey(a)return o:_hasKey(a)end;function o.getStringValue(a)return o:_getStringValue(a)end;function o.getIntValue(a)return o:_getIntValue(a)end;function o.getFloatValue(a)return o:_getFloatValue(a)end;return o end;function bankhub:add(b)table.insert(self.banks,b)self.banks_size=#self.banks end;function bankhub:_clear()for c,d in pairs(self.banks)do d.clear()end end;function bankhub:_getNbKeys()local e=0;for c,d in pairs(self.banks)do e=e+d.getNbKeys()end;return e end;function bankhub:_getKeys()local e={}for c,d in pairs(self.banks)do local f=json.decode(d.getKeys())for c,g in pairs(f)do table.insert(e,g)end end;return json.encode(e)end;function bankhub:_hasKey(a)for c,d in pairs(self.banks)do if d.hasKey(a)==1 then return 1 end end;return 0 end;function bankhub:_getStringValue(a)for c,d in pairs(self.banks)do if d.hasKey(a)==1 then return d.getStringValue(a)end end;return nil end;function bankhub:_getIntValue(a)for c,d in pairs(self.banks)do if d.hasKey(a)==1 then return banks.getIntValue(a)end end;return nil end;function bankhub:_getFloatValue(a)for c,d in pairs(self.banks)do if d.hasKey(a)==1 then return banks.getFloatValue(a)end end;return nil end\n\nchannels = {}\nchannels['refiner'] = channel_for_refiner\nchannels['assembly line'] = channel_for_assembly\nchannels['smelter'] = channel_for_smelter\nchannels['chemical industry'] = channel_for_chemical\nchannels['electronics industry'] = channel_for_electronics\nchannels['glass furnace'] = channel_for_glass\nchannels['honeycomb refinery'] = channel_for_honeycomb\nchannels['recycler'] = channel_for_recycler\nchannels['metalwork industry'] = channel_for_metalwork\nchannels['3d printer'] = channel_for_3d_printer\nchannels['transfer unit'] = channel_for_transfer\n\n--[[\n Detecting elements connected on slots\n]]\ndatabanks = {}\ncore = nil\nemitter = nil\nfor slot_name, slot in pairs(unit) do\n if\n type(slot) == \"table\"\n and type(slot.export) == \"table\"\n and slot.getClass\n then\n if slot.getClass():lower() == 'databankunit' then\n table.insert(databanks, slot)\n end\n if slot.getClass():lower():find(\"coreunit\") then\n core = slot\n end\n if slot.getClass():lower() == 'emitterunit' then\n emitter = slot\n end\n end\nend\nif core == nil then\n system.print(\"Connection to the core is missing\")\n unit.exit()\nend\nif emitter == nil then \n enableRemoteControl = false\n system.print(\"Connect an Emitter to enable machine control from industry\")\nend\nif #databanks == 0 then \n enableRemoteControl = false\n system.print(\"No Databank linked\")\nend\n\n--init of bank hub\nStorage = bankhub:new(databanks)\n\n--variable init and loading elements from the core\nelementsId = {}\nelements = {}\nelementsTypes = {}\nmachines_count = {}\nmachines_count.total = 0\ninitIndex = 1\nlistIndex = 1\ninit = false\nchannel_index = 1\nselected_index = 1\nselected_type = nil\nselected_machine_index = 1\nselected_machine = nil\nhud_displayed = true\npage = 1\nmaxPage = 1\nselectedElementsId = {}\nCtrl_pressed = false\ncraft_quantity = \"\"\ncraft_quantity_digits = {\"0\",\"0\",\"0\",\"0\",\"0\",\"0\",\"0\",\"0\"}\nrefresh_id_list = {}\ncraft_selected_digit = 1\ncommand_1 = \"\"\ncommand_2 = \"\"\ncommand_3 = \"\"\nrefreshActivated = true\nhud_help_command = \"\"\nunit.setTimer(\"helperRefresh\",1)\nminOnPage = 0\nmaxOnPage = 0\nelementsIdList = core.getElementIdList()\ntemp_selectedElementsId = {}\ntemp_elements_for_sorting = {}\ntemp_elements = {}\ntemp_refresh_id_list = {}\nmachineLoaded = false\nselected_machine = nil\n\n--init global HUD style\nhud_help_command = ''\nhud_elements_type_list = ''\nhud_machines = ''\nhud_machines_rows = {}\ncontrolHud = ''\n\n--construct pos for AR data\nconstructPos = construct.getWorldPosition()\nconstructRight = construct.getWorldRight()\nconstructForward = construct.getWorldForward()\nconstructUp = construct.getWorldUp()\narhtml = ''\n\n--Boostrap like css for DU by Jericho1060, see full source at https://github.com/Jericho1060/DualUniverse\nbootstrap_css_grid = [[<style>.container {width: 100%;padding-right: 15px;padding-left: 15px;margin-right: auto;margin-left: auto;}.row {position:relative;display: flex;flex-wrap: wrap;margin-right: -15px;margin-left: -15px;}.col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12, .col {position: relative;width: 100%;padding-right: 15px;padding-left: 15px;}.col {flex-basis: 0;flex-grow: 1;max-width: 100%;}.col-auto {flex: 0 0 auto;width: auto;max-width: 100%;}.col-1 {flex: 0 0 8.333333%;max-width: 8.333333%;}.col-2 {flex: 0 0 16.666667%;max-width: 16.666667%;}.col-3 {flex: 0 0 25%;max-width: 25%;}.col-4 {flex: 0 0 33.333333%;max-width: 33.333333%;}.col-5 {flex: 0 0 41.666667%;max-width: 41.666667%;}.col-6 {flex: 0 0 50%;max-width: 50%;}.col-7 {flex: 0 0 58.333333%;max-width: 58.333333%;}.col-8 {flex: 0 0 66.666667%;max-width: 66.666667%;}.col-9 {flex: 0 0 75%;max-width: 75%;}.col-10 {flex: 0 0 83.333333%;max-width: 83.333333%;}.col-11 {flex: 0 0 91.666667%;max-width: 91.666667%;}.col-12 {flex: 0 0 100%;max-width: 100%;}.offset-12 {margin-left: 100%;}.offset-11 {margin-left: 91.66666667%;}.offset-10 {margin-left: 83.33333333%;}.offset-9 {margin-left: 75%;}.offset-8 {margin-left: 66.66666667%;}.offset-7 {margin-left: 58.33333333%;}.offset-6 {margin-left: 50%;}.offset-5 {margin-left: 41.66666667%;}.offset-4 {margin-left: 33.33333333%;}.offset-3 {margin-left: 25%;}.offset-2 {margin-left: 16.66666667%;}.offset-1 {margin-left: 8.33333333%;}.offset-0 {margin-left: 0%;}</style>]]\nbootstrap_css_colors = [[<style>.text-white {color: #fff !important;}.text-primary {color: #007bff !important;}.text-secondary {color: #6c757d !important;}.text-success {color: #28a745 !important;}.text-info {color: #17a2b8 !important;}.text-warning {color: #ffc107 !important;}.text-danger {color: #dc3545 !important;}.text-light {color: #f8f9fa !important;}.text-dark {color: #343a40 !important;}.text-body {color: #212529 !important;}.text-muted {color: #6c757d !important;}.text-black-50 {color: rgba(0, 0, 0, 0.5) !important;}.text-white-50 {color: rgba(255, 255, 255, 0.5) !important;}.bg-primary {background-color: #007bff !important;}.bg-secondary {background-color: #6c757d !important;}.bg-success {background-color: #28a745 !important;}.bg-info {background-color: #17a2b8 !important;}.bg-warning {background-color: #ffc107 !important;}.bg-danger {background-color: #dc3545 !important;}.bg-light {background-color: #f8f9fa !important;}.bg-dark {background-color: #343a40 !important;}.bg-white {background-color: #fff !important;}.bg-transparent {background-color: transparent !important;}</style>]]\nbootstrap_text_utils = [[<style>.text-left {text-align: left;}.text-right {text-align: right;}.text-center {text-align: center;}.text-justify {text-align: justify;}.text-nowrap {white-space: nowrap;}.text-lowercase {text-transform: lowercase;}.text-uppercase {text-transform: uppercase;}.text-capitalize {text-transform: capitalize;}</style>]]\nbootstrap_css = bootstrap_css_grid .. bootstrap_css_colors .. bootstrap_text_utils\n\nlocal statusList = {\"STOPPED\",\"RUNNING\",\"MISSING INGREDIENT\",\"OUTPUT FULL\",\"NO OUTPUT CONTAINER\",\"PENDING\",\"MISSING SCHEMATIC\"}\nfunction getIndustryStatusClass(status)\n if status == 1 then\n return \"text-info\"\n elseif status == 2 then\n return \"text-success\"\n elseif ((status >= 3) and (status <= 5)) or (status == 7) then\n return \"text-danger\"\n elseif status == 6 then\n return \"text-primary\"\n end\n return \"\" --default value for other status that can be added\nend\nfunction getIndustryStatusBgClass(status)\n if status then\n if status == 1 then\n return \"bg-info\"\n elseif status == 2 then\n return \"bg-success\"\n elseif ((status >= 3) and (status <= 5)) or (status == 7) then\n return \"bg-danger\"\n elseif status == 6 then\n return \"bg-primary\"\n end\n end\n return \"\" --default value for other status that can be added\nend\n--[[\n Convert a table in local coordinates to a table in world coordinates by Jericho inspired by Koruzarius\n Source : https://github.com/Jericho1060/DualUniverse/blob/master/Vectors/localToWorldPos.lua\n]]--\nfunction ConvertLocalToWorld(a,b,c,d,e)local f={a[1]*c[1],a[1]*c[2],a[1]*c[3]}local g={a[2]*d[1],a[2]*d[2],a[2]*d[3]}local h={a[3]*e[1],a[3]*e[2],a[3]*e[3]}return{f[1]+g[1]+h[1]+b[1],f[2]+g[2]+h[2]+b[2],f[3]+g[3]+h[3]+b[3]}end\n--[[\n Concept based on DU-Nested-Coroutines by Jericho\n Source available here: https://github.com/Jericho1060/du-nested-coroutines\n]]--\n\ncoroutinesTable = {}\nMyCoroutines = {\n function()\n --load all the machines from the core step by step to avoid CPU Load Errors\n if not init then\n local maxForLoop = initIndex + maxAmountOfElementsLoadedByFrame\n if maxForLoop > #elementsIdList then maxForLoop = #elementsIdList end\n system.print(\"Loading elements from \" .. initIndex .. \" to \" .. maxForLoop .. \" on \" .. #elementsIdList)\n \n for i = initIndex, maxForLoop, 1 do\n initIndex = i\n local id = elementsIdList[i]\n elementType = core.getElementDisplayNameById(id):lower()\n if (elementType:find(\"assembly line\") and enableAssemblyMonitoring == true) or\n (elementType:find(\"glass furnace\") and enableGlassMonitoring == true) or\n (elementType:find(\"3d printer\") and enable3DPrinterMonitoring == true) or\n (elementType:find(\"smelter\") and enableSmelterMonitoring == true) or\n (elementType:find(\"recycler\") and enableRecyclerMonitoring == true) or\n (elementType:find(\"refinery\") and enableHoneycombMonitoring == true) or\n (elementType:find(\"refiner\") and enableRefinerMonitoring == true) or\n (elementType:find(\"industry\")\n and (\n (elementType:find(\"chemical\") and enableChemicalMonitoring == true) or\n (elementType:find(\"electronics\") and enableElectronicsMonitoring == true) or\n (elementType:find(\"metalwork\") and enableMetalworkMonitoring == true)\n )\n ) or\n (elementType == \"transfer unit\" and enableTransferMonitoring == true)\n then\n \tlocal formatedType = removeQualityInName(elementType)\n \tif\n (elementType:lower():find(\"container\")\n and elementName:find(containerMonitoringPrefix:lower()))\n or (not elementType:lower():find(\"container\"))\n then\n table.insert(elementsTypes, formatedType)\n end\n if machines_count[formatedType] ~= nil then\n machines_count[formatedType] = machines_count[formatedType] + 1\n else\n machines_count[formatedType] = 1\n end\n table.insert(elementsId, id)\n end\n end\n if initIndex >= #elementsIdList then\n elementsTypes = removeDuplicatesInTable(elementsTypes)\n table.sort(elementsTypes, function(a,b) return a:lower() < b:lower() end)\n selected_type = elementsTypes[1]\n init = true\n system.print(\"All elements loaded\")\n end\n end\n end,\n function()\n local count = 0\n if init then\n if selected_type ~= nil and not machineLoaded then\n local count = machines_count[selected_type:lower()]\n local divider = math.ceil(count / 200)\n local maxForLoop = listIndex + math.ceil(maxAmountOfElementsLoadedByFrame / divider)\n if maxForLoop > #elementsId then maxForLoop = #elementsId end\n for i = listIndex, maxForLoop, 1 do\n listIndex = i\n local id = elementsId[i]\n elementType = core.getElementDisplayNameById(id)\n if selected_type:find(removeQualityInName(elementType)) then\n if\n (elementType:lower():find(\"container\")\n and core.getElementNameById(id):lower():find(containerMonitoringPrefix:lower()))\n or (not elementType:lower():find(\"container\"))\n then\n table.insert(temp_selectedElementsId, id)\n end\n end\n if #temp_selectedElementsId >= count then\n selectedElementsId = temp_selectedElementsId\n temp_selectedElementsId = {}\n maxPage = math.ceil(#selectedElementsId / elementsByPage)\n listIndex = 1\n machineLoaded = true\n if #selectedElementsId ~= count then\n machineLoaded = false\n end\n break\n end\n if listIndex >= #elementsId then\n listIndex = 1\n end\n end\n end\n end\n end,\n function()\n local year, month, day, hour, minute, second = DUCurrentDateTime()\n local dateStr = string.format(\"%02d/%02d/%04d %02d:%02d:%02d\",day,month,year,hour,minute,second)\n hud_help_command = [[<div class=\"hud_help_commands hud_container\">\n <table>\n <tr>\n <th colspan=\"2\">\n ]] .. dateStr .. [[\n </th>\n </tr>\n <tr>\n <td>Show/Hide HUD</td>\n <th style=\"text-align:right;\">Alt+7</th>\n </tr>\n </table>\n </div>]]\n coroutine.yield(coroutinesTable[3])\n end,\n function()\n if init then\n hud_elements_type_list = '<div class=\"hud_list_container hud_container\"><div style=\"text-align:center;border-bottom:1px solid white;\">&#x2191; &nbsp;&nbsp; Ctrl+Arrow Up</div>'\n for i, elementType in pairs(elementsTypes) do\n hud_elements_type_list = hud_elements_type_list .. '<div class=\"elementType'\n if i == selected_index then\n hud_elements_type_list = hud_elements_type_list .. \" selected\"\n end\n local count = 0\n if machines_count[elementType:lower()] ~= nil then count = machines_count[elementType:lower()] end\n hud_elements_type_list = hud_elements_type_list .. '\"><table style=\"width:100%;\"><tr><th style=\"text-align:left;border-bottom:none;\">'.. elementType .. '</th><td style=\"text-align:right;border-bottom:none;\">' .. tostring(count) .. '</td></tr></table></div>'\n end\n hud_elements_type_list = hud_elements_type_list .. '<div style=\"margin-top:10px;text-align:center;font-weight:bold;border-top:1px solid white;\">&#x2193; &nbsp;&nbsp; Ctrl+Arrow Down</div></div>'\n coroutine.yield(coroutinesTable[4])\n end\n end,\n function()\n for i, element in pairs(elements) do\n if #elements > 0 then\n local statusData = core.getElementIndustryInfoById(element.id)\n local schematicId = statusData.schematicId or 0\n local recipeName = \"-\"\n if #statusData.currentProducts > 0 then\n local item = system.getItem(statusData.currentProducts[1].id)\n if schematicId == 0 then\n schematicId = item.schematics[1] or 0\n end\n if item.locDisplayNameWithSize then\n recipeName = item.locDisplayNameWithSize\n end\n end\n local remainingTime = 0\n if (statusData) and (statusData.remainingTime) and (statusData.remainingTime <= (3600*24*365)) then\n remainingTime = statusData.remainingTime\n end\n element.recipeName = recipeName\n element.remainingTime = remainingTime\n element.status = statusData.state\n element.unitsProduced = statusData.unitsProduced\n local mode = \"\"\n element.maintainProductAmount = statusData.maintainProductAmount\n element.batchesRequested = statusData.batchesRequested\n if statusData.maintainProductAmount > 0 then\n \tmode = \"Maintain \" .. math.floor(statusData.maintainProductAmount)\n elseif statusData.batchesRequested > 0 and statusData.batchesRequested <= 99999999 then\n mode = \"Produce \" .. math.floor(statusData.batchesRequested)\n end\n local status = statusList[element.status] or '-'\n local status_class = getIndustryStatusClass(element.status)\n hud_machines_rows[i] = \"<tr\"\n if selected_machine_index == i then\n hud_machines_rows[i] = hud_machines_rows[i] .. ' class=\"selected\"'\n end\n local machine_id = \"-\"\n if element.id then machine_id = element.id end\n local unitsProduced = 0\n if element.unitsProduced then unitsProduced = element.unitsProduced end\n hud_machines_rows[i] = hud_machines_rows[i] .. '><th>' .. machine_id .. '</th><th><span class=\"' .. status_class .. '\">' .. element.name .. '</span><br><small>' .. element.type .. '</small></th><th>' .. recipeName\n if schematicId > 0 then\n local schematic = system.getItem(schematicId)\n local schematicsRemaining = statusData.schematicsRemaining\n local schematic_color = \"#fff\"\n if schematicsRemaining == 0 then schematic_color = \"text-danger\" end\n hud_machines_rows[i] = hud_machines_rows[i] .. [[<br><small class=\"]] .. schematic_color .. [[\">]] .. schematicsRemaining .. [[ ]] .. schematic.locDisplayNameWithSize .. [[</small>]]\n end\n hud_machines_rows[i] = hud_machines_rows[i] .. '</th><td>' .. unitsProduced .. '</td><th class=\"' .. status_class .. '\">' .. status .. '</th><th>' .. mode .. '</th><td class=\"' .. status_class .. '\">' .. SecondsToClockString(element.remainingTime) .. '</td></tr>'\n else\n break\n end\n coroutine.yield(coroutinesTable[5])\n end\n end,\n function()\n hud_machines = [[<div class=\"hud_machines_container hud_container\">\n <div style=\"text-align:center;font-weight:bold;border-bottom:1px solid white;\">&#x2191; &nbsp;&nbsp; Arrow Up</div>\n <table class=\"elements_table\" style=\"width:100%\">\n <tr>\n <th>&#x2190; &nbsp;&nbsp; Arrow Left</th>\n <th> Page ]] .. page .. [[/]] .. maxPage .. [[ (from ]] .. minOnPage .. [[ to ]] .. maxOnPage .. [[ on ]] .. #selectedElementsId .. [[)</th>\n <th>Arrow Right &nbsp;&nbsp; &#x2192;</th>\n </tr>\n </table>\n <table class=\"elements_table\" style=\"width:100%;\">\n <tr>\n <th>id</th>\n <th>Machine Name & Type</th>\n <th>Selected Recipe & schematic</th>\n <th>Cycles From Start</th>\n <th>Status</th>\n <th>Mode</th>\n <th>Time Remaining</th>\n </tr>\n ]]\n for i, row in pairs(hud_machines_rows) do\n if row ~= nil then\n hud_machines = hud_machines .. row\n end\n end\n hud_machines = hud_machines .. '</table><table class=\"elements_table\" style=\"width:100%\"><tr><th>&#x2190; &nbsp;&nbsp; Arrow Left</th><th> Page ' .. page .. '/' .. maxPage .. ' (from ' .. minOnPage .. ' to ' .. maxOnPage .. ' on ' .. #selectedElementsId .. ')</th><th>Arrow Right &nbsp;&nbsp; &#x2192;</th></tr></table><div style=\"text-align:center;font-weight:bold;border-top:1px solid white;\">&#x2193; &nbsp;&nbsp; Arrow Down</div></div>'\n coroutine.yield(coroutinesTable[6])\n end,\n function()\n minOnPage = ((page - 1) * elementsByPage) + 1\n maxOnPage = page * elementsByPage\n if maxOnPage > #selectedElementsId then maxOnPage = #selectedElementsId end\n for i,id in pairs(selectedElementsId) do\n elementData = {}\n elementData.id = id\n elementData.name = core.getElementNameById(id)\n table.insert(temp_elements_for_sorting, elementData)\n end\n table.sort(temp_elements_for_sorting, function(a,b) return a.name:lower() < b.name:lower() end)\n for i = minOnPage, maxOnPage, 1 do\n if temp_elements_for_sorting[i] ~= nil then\n elementData = temp_elements_for_sorting[i]\n elementType = core.getElementDisplayNameById(elementData.id)\n elementData.type = elementType\n elementData.name = core.getElementNameById(elementData.id)\n elementData.position = core.getElementPositionById(elementData.id)\n table.insert(temp_refresh_id_list, elementData.id)\n table.insert(temp_elements, elementData)\n else\n temp_refresh_id_list = {}\n temp_elements_for_sorting = {}\n temp_elements = {}\n break\n end\n coroutine.yield(coroutinesTable[7])\n end\n refresh_id_list = temp_refresh_id_list\n temp_refresh_id_list = {}\n elements = temp_elements\n temp_elements_for_sorting = {}\n temp_elements = {}\n end,\n function()\n hud_main_css = [[\n <style>\n \t * {\n \t\t font-size: 1vh !important;\n \t\t font-familly: \"Play-Bold\";\n \t }\n .hud_container {\n border: 1px solid black;\n border-radius:10px;\n background-color: rgba(15,24,29,.75);\n padding:10px;\n }\n .hud_help_commands {\n position: absolute;\n top: ]] .. tostring((10/1080)*100) .. [[vh;\n left: ]] .. tostring((25/1920)*100) .. [[vw;\n text-transform: uppercase;\n font-weight: bold;\n }\n .hud_list_container {\n position: absolute;\n top: ]] .. tostring((100/1080)*100) .. [[vh;\n left: ]] .. tostring((25/1920)*100) .. [[vw;\n text-transform: uppercase;\n font-weight: bold;\n }\n .hud_machine_detail {\n position: absolute;\n top: ]] .. tostring((250/1080)*100) .. [[vh;\n right: ]] .. tostring((25/1920)*100) .. [[vw;\n text-transform: uppercase;\n font-weight: bold;\n }\n .hud_machines_container {\n position: absolute;\n top: ]] .. tostring((100/1080)*100) .. [[vh;\n left: ]] .. tostring((225/1920)*100) .. [[vw;\n }\n .elementType {\n margin-top:10px;\n border-radius:5px;\n }\n .elementType.selected {\n border: 2px solid green;\n background-color: rgba(0,200,0,.45);\n }\n tr.selected td, tr.selected th{\n border: 2px solid green;\n background-color: rgba(0,200,0,.1);\n }\n td, th {\n border-bottom:1px solid white;\n padding:5px;\n text-align: center;\n }\n th {\n font-weight: bold;\n }\n .text-success{color:rgb(34,177,76);}\n .text-danger{color:rgb(177,42,42);}\n .text-warning{color:rgb(249,212,123);}\n .text-info{color:#17a2b8;}\n .text-primary{color:#007bff;}\n .text-orangered{color:orangered;}\n .bg-success{background-color:rgb(34,177,76) !important;}\n .bg-danger{background-color:rgb(177,42,42) !important;}\n .bg-warning{background-color:rgb(249,212,123) !important;}\n .bg-info{background-color:#17a2b8 !important;}\n .bg-primary{background-color:#007bff !important;}\n small{font-size:.5em;}\n </style>\n ]]\n if not init then \n hud_elements_type_list = [[\n <div class=\"hud_list_container hud_container\">\n \t<table style=\"width:100%\">\n \t\t<tr>\n \t\t\t<th>LOADING ]] .. math.floor(initIndex*100/#elementsIdList) .. [[% ...</th>\n \t\t</tr>\n \t</table>\n </div>\n ]]\n end\n if hud_displayed then\n system.setScreen(hud_main_css .. hud_help_command .. hud_elements_type_list .. hud_machines .. controlHud .. arhtml)\n else\n system.setScreen(hud_main_css .. hud_help_command .. arhtml)\n end\n end,\n function()\n selected_machine = elements[selected_machine_index]\n end,\n function()\n if selected_machine then\n if prevRecipe == nil then prevRecipe=''end\n if prevStatus == nil then prevStatus=99 end\n if selected_machine.status then prevStatus = selected_machine.status end\n if selected_machine.recipeName then prevRecipe = selected_machine.recipeName end\n local screenpos = library.getPointOnScreen(ConvertLocalToWorld(selected_machine.position, constructPos, constructRight, constructForward, constructUp))\n if screenpos[1] > 1 then screenpos[1] = 1 elseif screenpos[1] < 0 then screenpos[1] = 0 end\n if screenpos[2] > .95 then screenpos[2] = .95 elseif screenpos[2] < 0 then screenpos[2] = 0 end\n arhtml = [[<div style=\"text-align:center;position:absolute;left:]] .. utils.round(screenpos[1]*100) .. [[%;top:]] .. utils.round(screenpos[2]*100) .. [[%;;margin-left:-500px;width:1000px;\"><div style=\"width:fit-content;padding:5px;margin:auto;border:2px solid black;border-radius:10px;background-color:rgba(15,24,29,.75);text-align:center;\" class=\"]] .. getIndustryStatusBgClass(prevStatus) .. [[\">]] .. selected_machine.name .. [[<br>]] .. (selected_machine.recipeName or prevRecipe) .. [[<br><br><span style=\"font-weight:bold;\">]] .. statusList[prevStatus] .. [[</span></div></div>]]\n end\n end,\n function()\n if enableRemoteControl then\n if selected_machine then\n if prevRecipe == nil then prevRecipe=''end\n if prevStatus == nil then prevStatus=99 end\n if prevMaintainProductAmount == nil then prevMaintainProductAmount = 0 end\n if prevBatchesRequested == nil then prevBatchesRequested = 0 end\n if selected_machine.status then prevStatus = selected_machine.status end\n if selected_machine.recipeName then prevRecipe = selected_machine.recipeName end\n if selected_machine.maintainProductAmount then prevMaintainProductAmount = selected_machine.maintainProductAmount end\n if selected_machine.batchesRequested then prevBatchesRequested = selected_machine.batchesRequested end\n controlHud = [[<div class=\"hud_machine_detail hud_container\">\n <table>\n <tr>\n <th colspan=\"3\">]] .. selected_machine.name .. [[</th>\n </tr>\n <tr>\n <th class=\"]] .. getIndustryStatusClass(prevStatus) .. [[\" colspan=\"3\">]] .. statusList[prevStatus] .. [[</th>\n </tr>\n ]]\n if prevStatus == 1 then\n command_1 = \"START\"\n command_2 = \"BATCH\"\n command_3 = \"MAINTAIN\"\n controlHud = controlHud .. [[\n <tr>\n <th>START</th>\n <th></th>\n <th>ALT+1</th>\n </tr>\n <tr>\n <th style=\"height:65px;\">BATCH</th>\n <th rowspan=\"2\">\n <table>\n <tr>\n <th colspan=\"3\">Quantity:</th>\n </tr>\n <tr>\n <th style=\"font-size:20px;\">\n ]]\n local has_quantity = false\n for k,v in pairs(craft_quantity_digits) do\n if tonumber(v) == nil then v = 0 end\n if tonumber(v) > 0 then\n has_quantity = true\n end\n end\n if not has_quantity then\n local value = \"0\"\n if prevMaintainProductAmount > 0 then\n value = tostring(math.floor(prevMaintainProductAmount))\n elseif prevBatchesRequested > 0 and prevBatchesRequested <= 99999999 then\n value = tostring(math.floor(prevBatchesRequested))\n end\n for i = #value, 1, -1 do\n local c = value:sub(i,i)\n craft_quantity_digits[9-(#value-(i-1))] = c\n end\n end\n for digit_index,digit in pairs(craft_quantity_digits) do\n controlHud = controlHud .. digit\n end\n controlHud = controlHud .. [[\n </th>\n </tr>\n </table>\n </th>\n <th>ALT+2</th>\n </tr>\n <tr>\n <th>MAINTAIN</th>\n <th>ALT+3</th>\n </tr>\n ]]\n else\n command_1 = \"STOP\"\n command_2 = \"SOFT_STOP\"\n command_3 = \"\"\n controlHud = controlHud .. [[\n <tr>\n <th>STOP</th>\n <th>ALT+1</th>\n </tr>\n <tr>\n <th>FINISH AND STOP</th>\n <th>ALT+2</th>\n </tr>\n ]]\n end\n controlHud = controlHud .. '</table></div>'\n end\n end\n end\n}\n\nfunction initCoroutines()\n for _,f in pairs(MyCoroutines) do\n local co = coroutine.create(f)\n table.insert(coroutinesTable, co)\n end\nend\n\ninitCoroutines()\n\nrunCoroutines = function()\n for i,co in ipairs(coroutinesTable) do\n if coroutine.status(co) == \"dead\" then\n coroutinesTable[i] = coroutine.create(MyCoroutines[i])\n end\n if coroutine.status(co) == \"suspended\" then\n assert(coroutine.resume(co))\n end\n end\nend\n\nMainCoroutine = coroutine.create(runCoroutines)\n\n--Enable Display of the HUD\nsystem.showScreen(1)","filter":{"args":[],"signature":"onStart()","slotKey":"-1"},"key":"1"}],"methods":[],"slots":{"0":{"name":"slot1","type":{"events":[],"methods":[]}},"1":{"name":"slot2","type":{"events":[],"methods":[]}},"2":{"name":"slot3","type":{"events":[],"methods":[]}},"3":{"name":"slot4","type":{"events":[],"methods":[]}},"4":{"name":"slot5","type":{"events":[],"methods":[]}},"5":{"name":"slot6","type":{"events":[],"methods":[]}},"6":{"name":"slot7","type":{"events":[],"methods":[]}},"7":{"name":"slot8","type":{"events":[],"methods":[]}},"8":{"name":"slot9","type":{"events":[],"methods":[]}},"9":{"name":"slot10","type":{"events":[],"methods":[]}},"-5":{"name":"library","type":{"events":[],"methods":[]}},"-4":{"name":"system","type":{"events":[],"methods":[]}},"-3":{"name":"player","type":{"events":[],"methods":[]}},"-2":{"name":"construct","type":{"events":[],"methods":[]}},"-1":{"name":"unit","type":{"events":[],"methods":[]}}}}
-98
Master program/source/library/onStart_1.lua
··· 1 - --[[ 2 - Databank HUB 3 - Inspired by the original BankRaid Script written by ilodev 4 - Modified to act like a databank hub by Jericho (read and clear only) 5 - ]] 6 - bankhub = {} 7 - 8 - function bankhub:new(banks) 9 - o = {} 10 - setmetatable(o, self); 11 - self.__index = self; 12 - o.banks = banks or {} 13 - 14 - -- databank shortcuts to allow in-game syntax. 15 - function o.clear() return o:_clear() end 16 - function o.getNbKeys() return o:_getNbKeys() end 17 - function o.getKeys() return o:_getKeys() end 18 - function o.hasKey(key) return o:_hasKey(key) end 19 - function o.getStringValue(key) return o:_getStringValue(key) end 20 - function o.getIntValue(key) return o:_getIntValue(key) end 21 - function o.getFloatValue(key) return o:_getFloatValue(key) end 22 - 23 - return o 24 - end 25 - --- Adds another databank to the raid. 26 - --- @param object The databank unit to add. 27 - function bankhub:add(element) 28 - table.insert( self.banks, element) 29 - self.banks_size = #self.banks 30 - end 31 - --- Clears the databank array 32 - function bankhub:_clear() 33 - for _,bank in pairs(self.banks) do bank.clear() end 34 - end 35 - --- Returns the number of keys in the entire databank table 36 - --- @return integer number of total keys 37 - function bankhub:_getNbKeys() 38 - local res = 0 39 - for _,bank in pairs(self.banks) do res = res + bank.getNbKeys() end 40 - return res 41 - end 42 - 43 - --- Returns all the keys in the databank array 44 - --- @return string json encoded string of keys 45 - function bankhub:_getKeys() 46 - local res = {} 47 - for _,bank in pairs(self.banks) do 48 - local keys = json.decode(bank.getKeys()) 49 - for _,k in pairs(keys) do table.insert(res, k) end 50 - end 51 - return json.encode(res) 52 - end 53 - 54 - --- Checks if a key exists in the databank array 55 - --- @param string key 56 - --- @return boolean returns 1 if the array holds this key. 57 - function bankhub:_hasKey(key) 58 - for _,bank in pairs(self.banks) do 59 - if (bank.hasKey(key) == 1) then return 1 end 60 - end 61 - return 0 62 - end 63 - 64 - --- Returns the value of the key if existing 65 - --- @param string key 66 - --- @return string returns value or nil 67 - function bankhub:_getStringValue(key) 68 - for _,bank in pairs(self.banks) do 69 - if (bank.hasKey(key) == 1) then 70 - return bank.getStringValue(key) 71 - end 72 - end 73 - return nil 74 - end 75 - 76 - --- Returns the integer value of the key if existing 77 - --- @param string key 78 - --- @return number returns value or nil 79 - function bankhub:_getIntValue(key) 80 - for _,bank in pairs(self.banks) do 81 - if (bank.hasKey(key) == 1) then 82 - return banks.getIntValue(key) 83 - end 84 - end 85 - return nil 86 - end 87 - 88 - --- Returns the float value of the key if existing 89 - --- @param string key 90 - --- @return number returns value or nil 91 - function bankhub:_getFloatValue(key) 92 - for _,bank in pairs(self.banks) do 93 - if (bank.hasKey(key) == 1) then 94 - return banks.getFloatValue(key) 95 - end 96 - end 97 - return nil 98 - end
-71
Master program/source/library/onStart_2.lua
··· 1 - --[[ 2 - Remove duplicate elements in a lua table 3 - By Jericho 4 - ]] 5 - function removeDuplicatesInTable(data) 6 - local hash = {} 7 - local res = {} 8 - for _,v in ipairs(data) do 9 - if (not hash[v]) then 10 - res[#res+1] = v 11 - hash[v] = true 12 - end 13 - end 14 - return res 15 - end 16 - 17 - --[[ 18 - split a string on a delimiter 19 - By jericho 20 - ]] 21 - function strSplit(s, delimiter) 22 - result = {}; 23 - for match in (s..delimiter):gmatch("(.-)"..delimiter) do 24 - table.insert(result, match); 25 - end 26 - return result; 27 - end 28 - 29 - --[[ 30 - Convert timestamp in a string representing a dureation in days, hours, minutes and seconds 31 - By Jericho 32 - ]] 33 - function SecondsToClockString(seconds) 34 - local seconds = tonumber(seconds) 35 - 36 - if seconds == nil or seconds <= 0 then 37 - return "-"; 38 - else 39 - days = string.format("%2.f", math.floor(seconds/(3600*24))); 40 - hours = string.format("%2.f", math.floor(seconds/3600 - (days*24))); 41 - mins = string.format("%2.f", math.floor(seconds/60 - (hours*60) - (days*24*60))); 42 - secs = string.format("%2.f", math.floor(seconds - hours*3600 - (days*24*60*60) - mins *60)); 43 - str = "" 44 - if tonumber(days) > 0 then str = str .. days.."d " end 45 - if tonumber(hours) > 0 then str = str .. hours.."h " end 46 - if tonumber(mins) > 0 then str = str .. mins.."m " end 47 - if tonumber(secs) > 0 then str = str .. secs .."s" end 48 - return str 49 - end 50 - end 51 - 52 - --[[ 53 - remove the quality if exist in a string 54 - ]] 55 - function removeQualityInName(name) 56 - if not name then return '' end 57 - return name:lower():gsub('basic ', ''):gsub('uncommon ', ''):gsub('advanced ', ''):gsub('rare ', ''):gsub('exotic ', '') 58 - end 59 - 60 - --[[ 61 - check if a value exist in a table 62 - ]] 63 - function has_value (tab, val) 64 - for index, value in ipairs(tab) do 65 - if value == val then 66 - return true 67 - end 68 - end 69 - 70 - return false 71 - end
-63
Master program/source/library/onStart_3.lua
··· 1 - --[[ 2 - Jericho's time script -- https://github.com/Jericho1060 3 - Display IRL date and time in game 4 - https://github.com/Jericho1060/DualUniverse/edit/master/TimeScript/TimeScript.lua 5 - ]]-- 6 - 7 - function DUCurrentDateTime(utc) 8 - local t = system.getUtcTime() 9 - if not utc then t = t + system.getUtcOffset() end 10 - local DSEC=24*60*60 11 - local YSEC=365*DSEC 12 - local LSEC=YSEC+DSEC 13 - local FSEC=4*YSEC+DSEC 14 - local BASE_DOW=4 15 - local BASE_YEAR=1970 16 - local _days={-1, 30, 58, 89, 119, 150, 180, 211, 242, 272, 303, 333, 364} 17 - local _lpdays={} 18 - for i=1,2 do _lpdays[i]=_days[i] end 19 - for i=3,13 do _lpdays[i]=_days[i]+1 end 20 - local y,j,m,d,w,h,n,s 21 - local mdays=_days 22 - s=t 23 - y=math.floor(s/FSEC) 24 - s=s-y*FSEC 25 - y=y*4+BASE_YEAR 26 - if s>=YSEC then 27 - y=y+1 28 - s=s-YSEC 29 - if s>=YSEC then 30 - y=y+1 31 - s=s-YSEC 32 - if s>=LSEC then 33 - y=y+1 34 - s=s-LSEC 35 - else 36 - mdays=_lpdays 37 - end 38 - end 39 - end 40 - j=math.floor(s/DSEC) 41 - s=s-j*DSEC 42 - local m=1 43 - while mdays[m]<j do m=m+1 end 44 - m=m-1 45 - local d=j-mdays[m] 46 - w=(math.floor(t/DSEC)+BASE_DOW)%7 47 - if w == 0 then w = 7 end 48 - h=math.floor(s/3600) 49 - s=s-h*3600 50 - n=math.floor(s/60) 51 - function round(a,b)if b then return utils.round(a/b)*b end;return a>=0 and math.floor(a+0.5)or math.ceil(a-0.5)end 52 - s=round(s-n*60) 53 - local weekDaysNames = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"} 54 - local weekDaysShortNames = {"Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"} 55 - local monthNames = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"} 56 - local monthShortNames = {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"} 57 - return y,m,d,h,n,s,w,weekDaysNames[w],weekDaysShortNames[w],monthNames[m],monthShortNames[m],j+1 58 - end 59 - 60 - --[[ 61 - local year, month, day, hour, minute, second, weekDayIndex, weekDayName, weekDayShortName, monthName, monthShortName, daysFromYearStart = DUCurrentDateTime() 62 - system.print(string.format("%02d/%02d/%04d %02d:%02d:%02d",day,month,year,hour,minute,second)) 63 - ]]
-919
Master program/source/library/onStart_4.lua
··· 1 - --[[ 2 - All Games Recipes in a table 3 - Based on the public script published by D.Mentia on Discord 4 - Updated By Glorek and Jericho 5 - ]] 6 - 7 - -- clean the name from specific char, etc. 8 - function cleanName(name) 9 - if name ~= nil and name:len() > 0 then 10 - name = string.gsub(name:lower(), "-", "") 11 - else 12 - name = "unknown" 13 - end 14 - return name:gsub("%s+", "") 15 - end 16 - 17 - -- return an ingredient fron it's name 18 - function getIngredient(name) 19 - local cleanname = "unknown" 20 - if name ~= nil and name:len() > 0 then 21 - cleanname = cleanName(name) 22 - end 23 - local ingredient = Ingredients[cleanname] 24 - if not ingredient and cleanname:find('pure') then 25 - ingredient = Ingredients['pure' .. cleanname:gsub('pure', '')] 26 - end 27 - if not ingredient then 28 - for key,value in pairs(Ingredients) do 29 - if key:find(cleanname) then 30 - ingredient = value 31 - break 32 - end 33 - end 34 - end 35 - if not ingredient then 36 - --system.print('Error [Ingredient not found]: '..name) 37 - ingredient = Ingredients['unknown'] 38 - end 39 - return ingredient 40 - end 41 - 42 - Ingredients = { 43 - ['unknown'] = {['name'] = 'unknown', ['tier'] = 1, ['type'] = 'error', ['mass'] = 1, ['volume'] = 1}, 44 - ['bauxite'] = {['name'] = 'Bauxite', ['tier'] = 1, ['type'] = 'Ore', ['mass'] = 1.28, ['volume'] = 1}, 45 - ['coal'] = {['name'] = 'Coal', ['tier'] = 1, ['type'] = 'Ore', ['mass'] = 1.35, ['volume'] = 1}, 46 - ['quartz'] = {['name'] = 'Quartz', ['tier'] = 1, ['type'] = 'Ore', ['mass'] = 2.65, ['volume'] = 1}, 47 - ['hematite'] = {['name'] = 'Hematite', ['tier'] = 1, ['type'] = 'Ore', ['mass'] = 5.04, ['volume'] = 1}, 48 - ['chromite'] = {['name'] = 'Chromite', ['tier'] = 2, ['type'] = 'Ore', ['mass'] = 4.54, ['volume'] = 1}, 49 - ['malachite'] = {['name'] = 'Malachite', ['tier'] = 2, ['type'] = 'Ore', ['mass'] = 4, ['volume'] = 1}, 50 - ['limestone'] = {['name'] = 'Limestone', ['tier'] = 2, ['type'] = 'Ore', ['mass'] = 2.71, ['volume'] = 1}, 51 - ['natron'] = {['name'] = 'Natron', ['tier'] = 2, ['type'] = 'Ore', ['mass'] = 1.55, ['volume'] = 1}, 52 - ['petalite'] = {['name'] = 'Petalite', ['tier'] = 3, ['type'] = 'Ore', ['mass'] = 2.41, ['volume'] = 1}, 53 - ['garnierite'] = {['name'] = 'Garnierite', ['tier'] = 3, ['type'] = 'Ore', ['mass'] = 2.6, ['volume'] = 1}, 54 - ['acanthite'] = {['name'] = 'Acanthite', ['tier'] = 3, ['type'] = 'Ore', ['mass'] = 7.2, ['volume'] = 1}, 55 - ['pyrite'] = {['name'] = 'Pyrite', ['tier'] = 3, ['type'] = 'Ore', ['mass'] = 5.01, ['volume'] = 1}, 56 - ['cobaltite'] = {['name'] = 'Cobaltite', ['tier'] = 4, ['type'] = 'Ore', ['mass'] = 6.33, ['volume'] = 1}, 57 - ['cryolite'] = {['name'] = 'Cryolite', ['tier'] = 4, ['type'] = 'Ore', ['mass'] = 2.95, ['volume'] = 1}, 58 - ['kolbeckite'] = {['name'] = 'Kolbeckite', ['tier'] = 4, ['type'] = 'Ore', ['mass'] = 2.37, ['volume'] = 1}, 59 - ['goldnuggets'] = {['name'] = 'Gold Nuggets', ['tier'] = 4, ['type'] = 'Ore', ['mass'] = 19.3, ['volume'] = 1}, 60 - ['rhodonite'] = {['name'] = 'Rhodonite', ['tier'] = 5, ['type'] = 'Ore', ['mass'] = 3.76, ['volume'] = 1}, 61 - ['columbite'] = {['name'] = 'Columbite', ['tier'] = 5, ['type'] = 'Ore', ['mass'] = 5.38, ['volume'] = 1}, 62 - ['illmenite'] = {['name'] = 'Illmenite', ['tier'] = 5, ['type'] = 'Ore', ['mass'] = 4.55, ['volume'] = 1}, 63 - ['vanadinite'] = {['name'] = 'Vanadinite', ['tier'] = 5, ['type'] = 'Ore', ['mass'] = 6.95, ['volume'] = 1}, 64 - ['pureoxygen'] = {['name'] = 'Pure Oxygen', ['tier'] = 1, ['type'] = 'Pure', ['mass'] = 1, ['volume'] = 1}, 65 - ['purehydrogen'] = {['name'] = 'Pure Hydrogen', ['tier'] = 1, ['type'] = 'Pure', ['mass'] = 0.07, ['volume'] = 1}, 66 - ['purealuminium'] = {['name'] = 'Pure Aluminium', ['tier'] = 1, ['type'] = 'Pure', ['mass'] = 2.7, ['volume'] = 1}, 67 - ['purecarbon'] = {['name'] = 'Pure Carbon', ['tier'] = 1, ['type'] = 'Pure', ['mass'] = 2.27, ['volume'] = 1}, 68 - ['puresilicon'] = {['name'] = 'Pure Silicon', ['tier'] = 1, ['type'] = 'Pure', ['mass'] = 2.33, ['volume'] = 1}, 69 - ['pureiron'] = {['name'] = 'Pure Iron', ['tier'] = 1, ['type'] = 'Pure', ['mass'] = 7.85, ['volume'] = 1}, 70 - ['purecalcium'] = {['name'] = 'Pure Calcium', ['tier'] = 2, ['type'] = 'Pure', ['mass'] = 1.55, ['volume'] = 1}, 71 - ['purechromium'] = {['name'] = 'Pure Chromium', ['tier'] = 2, ['type'] = 'Pure', ['mass'] = 7.19, ['volume'] = 1}, 72 - ['purecopper'] = {['name'] = 'Pure Copper', ['tier'] = 2, ['type'] = 'Pure', ['mass'] = 8.96, ['volume'] = 1}, 73 - ['puresodium'] = {['name'] = 'Pure Sodium', ['tier'] = 2, ['type'] = 'Pure', ['mass'] = 0.97, ['volume'] = 1}, 74 - ['purelithium'] = {['name'] = 'Pure Lithium', ['tier'] = 3, ['type'] = 'Pure', ['mass'] = 0.53, ['volume'] = 1}, 75 - ['purenickel'] = {['name'] = 'Pure Nickel', ['tier'] = 3, ['type'] = 'Pure', ['mass'] = 8.91, ['volume'] = 1}, 76 - ['puresilver'] = {['name'] = 'Pure Silver', ['tier'] = 3, ['type'] = 'Pure', ['mass'] = 10.49, ['volume'] = 1}, 77 - ['puresulfur'] = {['name'] = 'Pure Sulfur', ['tier'] = 3, ['type'] = 'Pure', ['mass'] = 1.82, ['volume'] = 1}, 78 - ['purecobalt'] = {['name'] = 'Pure Cobalt', ['tier'] = 4, ['type'] = 'Pure', ['mass'] = 8.9, ['volume'] = 1}, 79 - ['purefluorine'] = {['name'] = 'Pure Fluorine', ['tier'] = 4, ['type'] = 'Pure', ['mass'] = 1.7, ['volume'] = 1}, 80 - ['puregold'] = {['name'] = 'Pure Gold', ['tier'] = 4, ['type'] = 'Pure', ['mass'] = 19.3, ['volume'] = 1}, 81 - ['purescandium'] = {['name'] = 'Pure Scandium', ['tier'] = 4, ['type'] = 'Pure', ['mass'] = 2.98, ['volume'] = 1}, 82 - ['puremanganese'] = {['name'] = 'Pure Manganese', ['tier'] = 5, ['type'] = 'Pure', ['mass'] = 7.21, ['volume'] = 1}, 83 - ['pureniobium'] = {['name'] = 'Pure Niobium', ['tier'] = 5, ['type'] = 'Pure', ['mass'] = 8.57, ['volume'] = 1}, 84 - ['puretitanium'] = {['name'] = 'Pure Titanium', ['tier'] = 5, ['type'] = 'Pure', ['mass'] = 4.51, ['volume'] = 1}, 85 - ['purevanadium'] = {['name'] = 'Pure Vanadium', ['tier'] = 5, ['type'] = 'Pure', ['mass'] = 6, ['volume'] = 1}, 86 - ['catalyst3'] = {['name'] = 'Catalyst 3', ['tier'] = 3, ['type'] = 'Catalyst', ['mass'] = 649.39, ['volume'] = 1}, 87 - ['catalyst4'] = {['name'] = 'Catalyst 4', ['tier'] = 4, ['type'] = 'Catalyst', ['mass'] = 606.65, ['volume'] = 1}, 88 - ['catalyst5'] = {['name'] = 'Catalyst 5', ['tier'] = 5, ['type'] = 'Catalyst', ['mass'] = 657.68, ['volume'] = 1}, 89 - ['nitronfuel'] = {['name'] = 'Nitron Fuel', ['tier'] = 1, ['type'] = 'Fuel', ['mass'] = 4, ['volume'] = 1}, 90 - ['kergonx1fuel'] = {['name'] = 'Kergon-X1 Fuel', ['tier'] = 1, ['type'] = 'Fuel', ['mass'] = 6, ['volume'] = 1}, 91 - ['kergonx2fuel'] = {['name'] = 'Kergon-X2 Fuel', ['tier'] = 1, ['type'] = 'Fuel', ['mass'] = 6, ['volume'] = 1}, 92 - ['kergonx3fuel'] = {['name'] = 'Kergon-X3 Fuel', ['tier'] = 1, ['type'] = 'Fuel', ['mass'] = 6, ['volume'] = 1}, 93 - ['kergonx4fuel'] = {['name'] = 'Kergon-X4 Fuel', ['tier'] = 1, ['type'] = 'Fuel', ['mass'] = 6, ['volume'] = 1}, 94 - ['xeronfuel'] = {['name'] = 'Xeron Fuel', ['tier'] = 2, ['type'] = 'Fuel', ['mass'] = 0.8, ['volume'] = 1}, 95 - ['alfealloy'] = {['name'] = 'Al-Fe Alloy', ['tier'] = 1, ['type'] = 'Product', ['mass'] = 7.5, ['volume'] = 1}, 96 - ['allialloy'] = {['name'] = 'Al-Li Alloy', ['tier'] = 3, ['type'] = 'Product', ['mass'] = 2.5, ['volume'] = 1}, 97 - ['calciumreinforcedcopper'] = {['name'] = 'Calcium Reinforced Copper', ['tier'] = 2, ['type'] = 'Product', ['mass'] = 8.1, ['volume'] = 1}, 98 - ['cuagalloy'] = {['name'] = 'Cu-Ag Alloy', ['tier'] = 3, ['type'] = 'Product', ['mass'] = 9.2, ['volume'] = 1}, 99 - ['duralumin'] = {['name'] = 'Duralumin', ['tier'] = 2, ['type'] = 'Product', ['mass'] = 2.8, ['volume'] = 1}, 100 - ['grade5titaniumalloy'] = {['name'] = 'Grade 5 Titanium Alloy', ['tier'] = 5, ['type'] = 'Product', ['mass'] = 4.43, ['volume'] = 1}, 101 - ['inconel'] = {['name'] = 'Inconel', ['tier'] = 3, ['type'] = 'Product', ['mass'] = 8.5, ['volume'] = 1}, 102 - ['mangalloy'] = {['name'] = 'Mangalloy', ['tier'] = 5, ['type'] = 'Product', ['mass'] = 7.83, ['volume'] = 1}, 103 - ['maragingsteel'] = {['name'] = 'Maraging Steel', ['tier'] = 4, ['type'] = 'Product', ['mass'] = 8.23, ['volume'] = 1}, 104 - ['redgold'] = {['name'] = 'Red Gold', ['tier'] = 4, ['type'] = 'Product', ['mass'] = 14.13, ['volume'] = 1}, 105 - ['scalalloy'] = {['name'] = 'Sc-Al Alloy', ['tier'] = 4, ['type'] = 'Product', ['mass'] = 2.85, ['volume'] = 1}, 106 - ['stainlesssteel'] = {['name'] = 'Stainless Steel', ['tier'] = 2, ['type'] = 'Product', ['mass'] = 7.75, ['volume'] = 1}, 107 - ['tinbsupraconductor'] = {['name'] = 'Ti-Nb Supraconductor', ['tier'] = 5, ['type'] = 'Product', ['mass'] = 10.1, ['volume'] = 1}, 108 - ['biologicalmatter'] = {['name'] = 'Biological Matter', ['tier'] = 1, ['type'] = 'Product', ['mass'] = 1, ['volume'] = 1}, 109 - ['brick'] = {['name'] = 'Brick', ['tier'] = 1, ['type'] = 'Product', ['mass'] = 1.92, ['volume'] = 1}, 110 - ['marble'] = {['name'] = 'Marble', ['tier'] = 2, ['type'] = 'Product', ['mass'] = 2.7, ['volume'] = 1}, 111 - ['concrete'] = {['name'] = 'Concrete', ['tier'] = 2, ['type'] = 'Product', ['mass'] = 2.41, ['volume'] = 1}, 112 - ['carbonfiber'] = {['name'] = 'Carbon Fiber', ['tier'] = 1, ['type'] = 'Product', ['mass'] = 1.5, ['volume'] = 1}, 113 - ['glass'] = {['name'] = 'Glass', ['tier'] = 1, ['type'] = 'Product', ['mass'] = 2.5, ['volume'] = 1}, 114 - ['advancedglass'] = {['name'] = 'Advanced Glass', ['tier'] = 2, ['type'] = 'Product', ['mass'] = 2.6, ['volume'] = 1}, 115 - ['aglireinforcedglass'] = {['name'] = 'Ag-Li Reinforced Glass', ['tier'] = 3, ['type'] = 'Product', ['mass'] = 2.8, ['volume'] = 1}, 116 - ['goldcoatedglass'] = {['name'] = 'Gold Coated Glass', ['tier'] = 4, ['type'] = 'Product', ['mass'] = 3, ['volume'] = 1}, 117 - ['manganesereinforcedglass'] = {['name'] = 'Manganese Reinforced Glass', ['tier'] = 5, ['type'] = 'Product', ['mass'] = 2.9, ['volume'] = 1}, 118 - ['polycarbonateplastic'] = {['name'] = 'Polycarbonate Plastic', ['tier'] = 1, ['type'] = 'Product', ['mass'] = 1.4, ['volume'] = 1}, 119 - ['polycalciteplastic'] = {['name'] = 'Polycalcite Plastic', ['tier'] = 2, ['type'] = 'Product', ['mass'] = 1.5, ['volume'] = 1}, 120 - ['polysulfideplastic'] = {['name'] = 'Polysulfide Plastic', ['tier'] = 3, ['type'] = 'Product', ['mass'] = 1.6, ['volume'] = 1}, 121 - ['fluoropolymer'] = {['name'] = 'Fluoropolymer', ['tier'] = 4, ['type'] = 'Product', ['mass'] = 1.65, ['volume'] = 1}, 122 - ['vanamer'] = {['name'] = 'Vanamer', ['tier'] = 5, ['type'] = 'Product', ['mass'] = 1.57, ['volume'] = 1}, 123 - ['silumin'] = {['name'] = 'Silumin', ['tier'] = 1, ['type'] = 'Product', ['mass'] = 3, ['volume'] = 1}, 124 - ['steel'] = {['name'] = 'Steel', ['tier'] = 1, ['type'] = 'Product', ['mass'] = 8.05, ['volume'] = 1}, 125 - ['wood'] = {['name'] = 'Wood', ['tier'] = 1, ['type'] = 'Product', ['mass'] = 0.6, ['volume'] = 1}, 126 - ['basiccomponent'] = {['name'] = 'Basic Component', ['tier'] = 1, ['type'] = 'Intermediary Part', ['mass'] = 2.25, ['volume'] = 0.5}, 127 - ['uncommoncomponent'] = {['name'] = 'Uncommon Component', ['tier'] = 2, ['type'] = 'Intermediary Part', ['mass'] = 2.34, ['volume'] = 0.8}, 128 - ['advancedcomponent'] = {['name'] = 'Advanced Component', ['tier'] = 3, ['type'] = 'Intermediary Part', ['mass'] = 2.51, ['volume'] = 0.8}, 129 - ['basicconnector'] = {['name'] = 'Basic Connector', ['tier'] = 1, ['type'] = 'Intermediary Part', ['mass'] = 3.75, ['volume'] = 0.8}, 130 - ['uncommonconnector'] = {['name'] = 'Uncommon Connector', ['tier'] = 2, ['type'] = 'Intermediary Part', ['mass'] = 3.9, ['volume'] = 0.8}, 131 - ['advancedconnector'] = {['name'] = 'Advanced Connector', ['tier'] = 3, ['type'] = 'Intermediary Part', ['mass'] = 4.18, ['volume'] = 0.8}, 132 - ['basicfixation'] = {['name'] = 'Basic Fixation', ['tier'] = 1, ['type'] = 'Intermediary Part', ['mass'] = 1.12, ['volume'] = 1}, 133 - ['uncommonfixation'] = {['name'] = 'Uncommon Fixation', ['tier'] = 2, ['type'] = 'Intermediary Part', ['mass'] = 1.16, ['volume'] = 1}, 134 - ['advancedfixation'] = {['name'] = 'Advanced Fixation', ['tier'] = 3, ['type'] = 'Intermediary Part', ['mass'] = 1.21, ['volume'] = 1}, 135 - ['basicled'] = {['name'] = 'Basic LED', ['tier'] = 1, ['type'] = 'Intermediary Part', ['mass'] = 1.25, ['volume'] = 1}, 136 - ['uncommonled'] = {['name'] = 'Uncommon LED', ['tier'] = 2, ['type'] = 'Intermediary Part', ['mass'] = 1.27, ['volume'] = 1}, 137 - ['advancedled'] = {['name'] = 'Advanced LED', ['tier'] = 3, ['type'] = 'Intermediary Part', ['mass'] = 1.32, ['volume'] = 1}, 138 - ['basicpipe'] = {['name'] = 'Basic Pipe', ['tier'] = 1, ['type'] = 'Intermediary Part', ['mass'] = 2.4, ['volume'] = 1}, 139 - ['uncommonpipe'] = {['name'] = 'Uncommon Pipe', ['tier'] = 2, ['type'] = 'Intermediary Part', ['mass'] = 2.32, ['volume'] = 1}, 140 - ['advancedpipe'] = {['name'] = 'Advanced Pipe', ['tier'] = 3, ['type'] = 'Intermediary Part', ['mass'] = 2.19, ['volume'] = 1}, 141 - ['basicscrew'] = {['name'] = 'Basic Screw', ['tier'] = 1, ['type'] = 'Intermediary Part', ['mass'] = 8.05, ['volume'] = 1}, 142 - ['uncommonscrew'] = {['name'] = 'Uncommon Screw', ['tier'] = 2, ['type'] = 'Intermediary Part', ['mass'] = 7.9, ['volume'] = 1}, 143 - ['advancedscrew'] = {['name'] = 'Advanced Screw', ['tier'] = 3, ['type'] = 'Intermediary Part', ['mass'] = 8.14, ['volume'] = 1}, 144 - ['basicantimattercapsule'] = {['name'] = 'Basic Anti-Matter Capsule', ['tier'] = 1, ['type'] = 'Complex Part', ['mass'] = 24, ['volume'] = 4.6}, 145 - ['uncommonantimattercapsule'] = {['name'] = 'Uncommon Anti-Matter Capsule', ['tier'] = 2, ['type'] = 'Complex Part', ['mass'] = 24.32, ['volume'] = 4.6}, 146 - ['advancedantimattercapsule'] = {['name'] = 'Advanced Anti-Matter Capsule', ['tier'] = 3, ['type'] = 'Complex Part', ['mass'] = 24.88, ['volume'] = 4.6}, 147 - ['rareantimattercapsule'] = {['name'] = 'Rare Anti-Matter Capsule', ['tier'] = 4, ['type'] = 'Complex Part', ['mass'] = 25.8, ['volume'] = 4.6}, 148 - ['exoticantimattercapsule'] = {['name'] = 'Exotic Anti-Matter Capsule', ['tier'] = 5, ['type'] = 'Complex Part', ['mass'] = 26.73, ['volume'] = 4.6}, 149 - ['basicburner'] = {['name'] = 'Basic Burner', ['tier'] = 1, ['type'] = 'Complex Part', ['mass'] = 50.2, ['volume'] = 10}, 150 - ['uncommonburner'] = {['name'] = 'Uncommon Burner', ['tier'] = 2, ['type'] = 'Complex Part', ['mass'] = 49.4, ['volume'] = 10}, 151 - ['advancedburner'] = {['name'] = 'Advanced Burner', ['tier'] = 3, ['type'] = 'Complex Part', ['mass'] = 48.5, ['volume'] = 10}, 152 - ['basicelectronics'] = {['name'] = 'Basic Electronics', ['tier'] = 1, ['type'] = 'Complex Part', ['mass'] = 5.22, ['volume'] = 4}, 153 - ['uncommonelectronics'] = {['name'] = 'Uncommon Electronics', ['tier'] = 2, ['type'] = 'Complex Part', ['mass'] = 5.34, ['volume'] = 4}, 154 - ['advancedelectronics'] = {['name'] = 'Advanced Electronics', ['tier'] = 3, ['type'] = 'Complex Part', ['mass'] = 5.45, ['volume'] = 4}, 155 - ['rareelectronics'] = {['name'] = 'Rare Electronics', ['tier'] = 4, ['type'] = 'Complex Part', ['mass'] = 5.63, ['volume'] = 4}, 156 - ['exoticelectronics'] = {['name'] = 'Exotic Electronics', ['tier'] = 5, ['type'] = 'Complex Part', ['mass'] = 5.77, ['volume'] = 4}, 157 - ['basicexplosivemodule'] = {['name'] = 'Basic Explosive Module', ['tier'] = 1, ['type'] = 'Complex Part', ['mass'] = 18.72, ['volume'] = 4.6}, 158 - ['uncommonexplosivemodule'] = {['name'] = 'Uncommon Explosive Module', ['tier'] = 2, ['type'] = 'Complex Part', ['mass'] = 19.04, ['volume'] = 4.6}, 159 - ['advancedexplosivemodule'] = {['name'] = 'Advanced Explosive Module', ['tier'] = 3, ['type'] = 'Complex Part', ['mass'] = 19.04, ['volume'] = 4.6}, 160 - ['basichydraulics'] = {['name'] = 'Basic Hydraulics', ['tier'] = 1, ['type'] = 'Complex Part', ['mass'] = 28.95, ['volume'] = 10}, 161 - ['uncommonhydraulics'] = {['name'] = 'Uncommon Hydraulics', ['tier'] = 2, ['type'] = 'Complex Part', ['mass'] = 28.35, ['volume'] = 10}, 162 - ['advancedhydraulics'] = {['name'] = 'Advanced Hydraulics', ['tier'] = 3, ['type'] = 'Complex Part', ['mass'] = 29.02, ['volume'] = 10}, 163 - ['basicinjector'] = {['name'] = 'Basic Injector', ['tier'] = 1, ['type'] = 'Complex Part', ['mass'] = 20.3, ['volume'] = 10}, 164 - ['uncommoninjector'] = {['name'] = 'Uncommon Injector', ['tier'] = 2, ['type'] = 'Complex Part', ['mass'] = 20.5, ['volume'] = 10}, 165 - ['advancedinjector'] = {['name'] = 'Advanced Injector', ['tier'] = 3, ['type'] = 'Complex Part', ['mass'] = 20.45, ['volume'] = 10}, 166 - ['basicmagnet'] = {['name'] = 'Basic Magnet', ['tier'] = 1, ['type'] = 'Complex Part', ['mass'] = 63.3, ['volume'] = 7.36}, 167 - ['uncommonmagnet'] = {['name'] = 'Uncommon Magnet', ['tier'] = 2, ['type'] = 'Complex Part', ['mass'] = 62.1, ['volume'] = 7.36}, 168 - ['advancedmagnet'] = {['name'] = 'Advanced Magnet', ['tier'] = 3, ['type'] = 'Complex Part', ['mass'] = 63.89, ['volume'] = 7.36}, 169 - ['raremagnet'] = {['name'] = 'Rare Magnet', ['tier'] = 4, ['type'] = 'Complex Part', ['mass'] = 64.4, ['volume'] = 7.36}, 170 - ['exoticmagnet'] = {['name'] = 'Exotic Magnet', ['tier'] = 5, ['type'] = 'Complex Part', ['mass'] = 65.13, ['volume'] = 7.36}, 171 - ['basicoptics'] = {['name'] = 'Basic Optics', ['tier'] = 1, ['type'] = 'Complex Part', ['mass'] = 9.74, ['volume'] = 10}, 172 - ['uncommonoptics'] = {['name'] = 'Uncommon Optics', ['tier'] = 2, ['type'] = 'Complex Part', ['mass'] = 9.94, ['volume'] = 10}, 173 - ['advancedoptics'] = {['name'] = 'Advanced Optics', ['tier'] = 3, ['type'] = 'Complex Part', ['mass'] = 10.18, ['volume'] = 10}, 174 - ['rareoptics'] = {['name'] = 'Rare Optics', ['tier'] = 4, ['type'] = 'Complex Part', ['mass'] = 10.7, ['volume'] = 10}, 175 - ['basicpowersystem'] = {['name'] = 'Basic Power System', ['tier'] = 1, ['type'] = 'Complex Part', ['mass'] = 60, ['volume'] = 9.2}, 176 - ['uncommonpowersystem'] = {['name'] = 'Uncommon Power System', ['tier'] = 2, ['type'] = 'Complex Part', ['mass'] = 62.4, ['volume'] = 9.2}, 177 - ['advancedpowersystem'] = {['name'] = 'Advanced Power System', ['tier'] = 3, ['type'] = 'Complex Part', ['mass'] = 64.9, ['volume'] = 9.2}, 178 - ['rarepowersystem'] = {['name'] = 'Rare Power System', ['tier'] = 4, ['type'] = 'Complex Part', ['mass'] = 78.31, ['volume'] = 9.2}, 179 - ['exoticpowersystem'] = {['name'] = 'Exotic Power System', ['tier'] = 5, ['type'] = 'Complex Part', ['mass'] = 82.87, ['volume'] = 9.2}, 180 - ['basicprocessor'] = {['name'] = 'Basic Processor', ['tier'] = 1, ['type'] = 'Complex Part', ['mass'] = 14.84, ['volume'] = 5}, 181 - ['uncommonprocessor'] = {['name'] = 'Uncommon Processor', ['tier'] = 2, ['type'] = 'Complex Part', ['mass'] = 15.56, ['volume'] = 5}, 182 - ['advancedprocessor'] = {['name'] = 'Advanced Processor', ['tier'] = 3, ['type'] = 'Complex Part', ['mass'] = 15.56, ['volume'] = 5}, 183 - ['exoticprocessor'] = {['name'] = 'Exotic Processor', ['tier'] = 5, ['type'] = 'Complex Part', ['mass'] = 21.47, ['volume'] = 5}, 184 - ['basicquantumcoreunit'] = {['name'] = 'Basic Quantum Core Unit', ['tier'] = 1, ['type'] = 'Complex Part', ['mass'] = 10.72, ['volume'] = 5}, 185 - ['uncommonquantumcoreunit'] = {['name'] = 'Uncommon Quantum Core', ['tier'] = 2, ['type'] = 'Complex Part', ['mass'] = 11.04, ['volume'] = 5}, 186 - ['advancedquantumcoreunit'] = {['name'] = 'Advanced Quantum Core', ['tier'] = 3, ['type'] = 'Complex Part', ['mass'] = 11.24, ['volume'] = 5}, 187 - ['rarequantumcore'] = {['name'] = 'Rare Quantum Core', ['tier'] = 4, ['type'] = 'Complex Part', ['mass'] = 11.66, ['volume'] = 5}, 188 - ['exoticquantumcore'] = {['name'] = 'Exotic Quantum Core', ['tier'] = 5, ['type'] = 'Complex Part', ['mass'] = 11.66, ['volume'] = 5}, 189 - ['basicsingularitycontainer'] = {['name'] = 'Basic Singularity Container', ['tier'] = 1, ['type'] = 'Complex Part', ['mass'] = 45.36, ['volume'] = 4}, 190 - ['uncommonsingularitycontainer'] = {['name'] = 'Uncommon Singularity Container', ['tier'] = 2, ['type'] = 'Complex Part', ['mass'] = 44.88, ['volume'] = 4}, 191 - ['advancedsingularitycontainer'] = {['name'] = 'Advanced Singularity Container', ['tier'] = 3, ['type'] = 'Complex Part', ['mass'] = 46.22, ['volume'] = 4}, 192 - ['raresingularitycontainer'] = {['name'] = 'Rare Singularity Container', ['tier'] = 4, ['type'] = 'Complex Part', ['mass'] = 46.58, ['volume'] = 4}, 193 - ['exoticsingularitycontainer'] = {['name'] = 'Exotic Singularity Container', ['tier'] = 5, ['type'] = 'Complex Part', ['mass'] = 46.98, ['volume'] = 4}, 194 - ['uncommonsolidwarhead'] = {['name'] = 'Uncommon Solid Warhead', ['tier'] = 2, ['type'] = 'Complex Part', ['mass'] = 45.36, ['volume'] = 5}, 195 - ['advancedsolidwarhead'] = {['name'] = 'Advanced Solid Warhead', ['tier'] = 3, ['type'] = 'Complex Part', ['mass'] = 46.43, ['volume'] = 5}, 196 - ['advancedantigravitycore'] = {['name'] = 'Advanced Anti-Gravity Core', ['tier'] = 3, ['type'] = 'Exceptional Part', ['mass'] = 117.05, ['volume'] = 20}, 197 - ['rareantigravitycore'] = {['name'] = 'Rare Anti-Gravity Core', ['tier'] = 4, ['type'] = 'Exceptional Part', ['mass'] = 123.22, ['volume'] = 22.5}, 198 - ['exoticantigravitycore'] = {['name'] = 'Exotic Anti-Gravity Core', ['tier'] = 5, ['type'] = 'Exceptional Part', ['mass'] = 133.06, ['volume'] = 25}, 199 - ['advancedquantumalignmentunit'] = {['name'] = 'Advanced Quantum Alignment Unit', ['tier'] = 3, ['type'] = 'Exceptional Part', ['mass'] = 35.78, ['volume'] = 25}, 200 - ['exoticquantumalignmentunit'] = {['name'] = 'Exotic Quantum Alignment Unit', ['tier'] = 5, ['type'] = 'Exceptional Part', ['mass'] = 43.24, ['volume'] = 30}, 201 - ['advancedquantumbarrier'] = {['name'] = 'Advanced Quantum Barrier', ['tier'] = 3, ['type'] = 'Exceptional Part', ['mass'] = 43.38, ['volume'] = 25}, 202 - ['advancedantimattercoreunit'] = {['name'] = 'Advanced Anti-Matter Core Unit', ['tier'] = 3, ['type'] = 'Exceptional Part', ['mass'] = 107.08, ['volume'] = 21.5}, 203 - ['exoticantimattercoreunit'] = {['name'] = 'Exotic Anti-Matter Core Unit', ['tier'] = 5, ['type'] = 'Exceptional Part', ['mass'] = 158.05, ['volume'] = 26.5}, 204 - ['basicantennaxs'] = {['name'] = 'Basic Antenna XS', ['tier'] = 1, ['type'] = 'Functional Part', ['mass'] = 60.44, ['volume'] = 8.96}, 205 - ['basicantennas'] = {['name'] = 'Basic Antenna S', ['tier'] = 1, ['type'] = 'Functional Part', ['mass'] = 314.2, ['volume'] = 46.4}, 206 - ['uncommonantennaxs'] = {['name'] = 'Uncommon Antenna XS', ['tier'] = 2, ['type'] = 'Functional Part', ['mass'] = 117.16, ['volume'] = 17.12}, 207 - ['uncommonantennas'] = {['name'] = 'Uncommon Antenna S', ['tier'] = 2, ['type'] = 'Functional Part', ['mass'] = 379.2, ['volume'] = 54.56}, 208 - ['uncommonantennam'] = {['name'] = 'Uncommon Antenna M', ['tier'] = 2, ['type'] = 'Functional Part', ['mass'] = 1770, ['volume'] = 251.36}, 209 - ['uncommonantennal'] = {['name'] = 'Uncommon Antenna L', ['tier'] = 2, ['type'] = 'Functional Part', ['mass'] = 9240, ['volume'] = 1302.56}, 210 - ['advancedantennas'] = {['name'] = 'Advanced Antenna S', ['tier'] = 3, ['type'] = 'Functional Part', ['mass'] = 389.74, ['volume'] = 54.56}, 211 - ['exoticantennam'] = {['name'] = 'Exotic Antenna M', ['tier'] = 5, ['type'] = 'Functional Part', ['mass'] = 2140, ['volume'] = 250.56}, 212 - ['exoticantennal'] = {['name'] = 'Exotic Antenna L', ['tier'] = 5, ['type'] = 'Functional Part', ['mass'] = 11250, ['volume'] = 1301.76}, 213 - ['exoticantennaxl'] = {['name'] = 'Exotic Antenna XL', ['tier'] = 5, ['type'] = 'Functional Part', ['mass'] = 61580, ['volume'] = 7028.16}, 214 - ['basicchemicalcontainerxs'] = {['name'] = 'Basic Chemical Container XS', ['tier'] = 1, ['type'] = 'Functional Part', ['mass'] = 8.13, ['volume'] = 4.8}, 215 - ['basicchemicalcontainers'] = {['name'] = 'Basic Chemical Container S', ['tier'] = 1, ['type'] = 'Functional Part', ['mass'] = 43.67, ['volume'] = 25.6}, 216 - ['basicchemicalcontainerm'] = {['name'] = 'Basic Chemical Container M', ['tier'] = 1, ['type'] = 'Functional Part', ['mass'] = 239.38, ['volume'] = 139.2}, 217 - ['basicchemicalcontainerl'] = {['name'] = 'Basic Chemical Container L', ['tier'] = 1, ['type'] = 'Functional Part', ['mass'] = 1340, ['volume'] = 774.4}, 218 - ['basicchemicalcontainerxl'] = {['name'] = 'Basic Chemical Container XL', ['tier'] = 1, ['type'] = 'Functional Part', ['mass'] = 7750, ['volume'] = 4420.8}, 219 - ['advancedchemicalcontainers'] = {['name'] = 'Advanced Chemical Container S', ['tier'] = 3, ['type'] = 'Functional Part', ['mass'] = 48.85, ['volume'] = 29.6}, 220 - ['advancedchemicalcontainerm'] = {['name'] = 'Advanced Chemical Container M', ['tier'] = 3, ['type'] = 'Functional Part', ['mass'] = 235.25, ['volume'] = 143.2}, 221 - ['advancedchemicalcontainerl'] = {['name'] = 'Advanced Chemical Container L', ['tier'] = 3, ['type'] = 'Functional Part', ['mass'] = 1270, ['volume'] = 778.4}, 222 - ['advancedchemicalcontainerxl'] = {['name'] = 'Advanced Chemical Container XL', ['tier'] = 3, ['type'] = 'Functional Part', ['mass'] = 7190, ['volume'] = 4424.8}, 223 - ['basiccombustionchamberxs'] = {['name'] = 'Basic Combustion Chamber XS', ['tier'] = 1, ['type'] = 'Functional Part', ['mass'] = 60.65, ['volume'] = 9.6}, 224 - ['basiccombustionchambers'] = {['name'] = 'Basic Combustion Chamber S', ['tier'] = 1, ['type'] = 'Functional Part', ['mass'] = 319.35, ['volume'] = 49.6}, 225 - ['basiccombustionchamberm'] = {['name'] = 'Basic Combustion Chamber M', ['tier'] = 1, ['type'] = 'Functional Part', ['mass'] = 1710, ['volume'] = 259.2}, 226 - ['basiccombustionchamberl'] = {['name'] = 'Basic Combustion Chamber L', ['tier'] = 1, ['type'] = 'Functional Part', ['mass'] = 9340, ['volume'] = 1374.4}, 227 - ['uncommoncombustionchamberxs'] = {['name'] = 'Uncommon Combustion Chamber XS', ['tier'] = 2, ['type'] = 'Functional Part', ['mass'] = 112.07, ['volume'] = 18.4}, 228 - ['uncommoncombustionchambers'] = {['name'] = 'Uncommon Combustion Chamber S', ['tier'] = 2, ['type'] = 'Functional Part', ['mass'] = 366.33, ['volume'] = 58.4}, 229 - ['uncommoncombustionchamberm'] = {['name'] = 'Uncommon Combustion Chamber M', ['tier'] = 2, ['type'] = 'Functional Part', ['mass'] = 1730, ['volume'] = 268}, 230 - ['uncommoncombustionchamberl'] = {['name'] = 'Uncommon Combustion Chamber L', ['tier'] = 2, ['type'] = 'Functional Part', ['mass'] = 9210, ['volume'] = 1383.2}, 231 - ['advancedcombustionchamberxs'] = {['name'] = 'Advanced Combustion Chamber XS', ['tier'] = 3, ['type'] = 'Functional Part', ['mass'] = 163.51, ['volume'] = 27.2}, 232 - ['advancedcombustionchambers'] = {['name'] = 'Advanced Combustion Chamber S', ['tier'] = 3, ['type'] = 'Functional Part', ['mass'] = 369.5, ['volume'] = 58.4}, 233 - ['advancedcombustionchamberm'] = {['name'] = 'Advanced Combustion Chamber M', ['tier'] = 3, ['type'] = 'Functional Part', ['mass'] = 1760, ['volume'] = 268}, 234 - ['basiccontrolsystemxs'] = {['name'] = 'Basic Control System XS', ['tier'] = 1, ['type'] = 'Functional Part', ['mass'] = 9.25, ['volume'] = 5.2}, 235 - ['basiccontrolsystems'] = {['name'] = 'Basic Control System S', ['tier'] = 1, ['type'] = 'Functional Part', ['mass'] = 47.63, ['volume'] = 27.6}, 236 - ['basiccontrolsystemm'] = {['name'] = 'Basic Control System M', ['tier'] = 1, ['type'] = 'Functional Part', ['mass'] = 247.97, ['volume'] = 149.2}, 237 - ['advancedcontrolsystems'] = {['name'] = 'Advanced Control System S', ['tier'] = 3, ['type'] = 'Functional Part', ['mass'] = 59.35, ['volume'] = 32}, 238 - ['advancedcontrolsystemm'] = {['name'] = 'Advanced Control System M', ['tier'] = 3, ['type'] = 'Functional Part', ['mass'] = 272.97, ['volume'] = 153.6}, 239 - ['advancedcontrolsysteml'] = {['name'] = 'Advanced Control System L', ['tier'] = 3, ['type'] = 'Functional Part', ['mass'] = 1410, ['volume'] = 828.8}, 240 - ['basiccoreunitsystemxs'] = {['name'] = 'Basic Core System XS', ['tier'] = 1, ['type'] = 'Functional Part', ['mass'] = 4.43, ['volume'] = 4.4}, 241 - ['basiccoreunitsystems'] = {['name'] = 'Basic Core System S', ['tier'] = 1, ['type'] = 'Functional Part', ['mass'] = 23.57, ['volume'] = 23.6}, 242 - ['uncommoncoresystems'] = {['name'] = 'Uncommon Core System S', ['tier'] = 2, ['type'] = 'Functional Part', ['mass'] = 28.08, ['volume'] = 27.2}, 243 - ['uncommoncoresystemm'] = {['name'] = 'Uncommon Core System M', ['tier'] = 2, ['type'] = 'Functional Part', ['mass'] = 28.08, ['volume'] = 135.75}, 244 - ['uncommoncoresysteml'] = {['name'] = 'Uncommon Core System L', ['tier'] = 2, ['type'] = 'Functional Part', ['mass'] = 737.1, ['volume'] = 728}, 245 - ['advancedcoresystemm'] = {['name'] = 'Advanced Core System M', ['tier'] = 3, ['type'] = 'Functional Part', ['mass'] = 139.61, ['volume'] = 132.8}, 246 - ['rarecoresysteml'] = {['name'] = 'Rare Core System L', ['tier'] = 4, ['type'] = 'Functional Part', ['mass'] = 783.65, ['volume'] = 728}, 247 - ['exoticcoresystems'] = {['name'] = 'Exotic Core System S', ['tier'] = 5, ['type'] = 'Functional Part', ['mass'] = 28.62, ['volume'] = 26.8}, 248 - ['basicelectricengines'] = {['name'] = 'Basic Electric Engine S', ['tier'] = 1, ['type'] = 'Functional Part', ['mass'] = 377.75, ['volume'] = 39.04}, 249 - ['basicelectricenginem'] = {['name'] = 'Basic Electric Engine M', ['tier'] = 1, ['type'] = 'Functional Part', ['mass'] = 1930, ['volume'] = 206.4}, 250 - ['uncommonelectricenginexl'] = {['name'] = 'Uncommon Electric Engine XL', ['tier'] = 2, ['type'] = 'Functional Part', ['mass'] = 50800, ['volume'] = 6107.49}, 251 - ['basicfiringsystemxs'] = {['name'] = 'Basic Firing System XS', ['tier'] = 1, ['type'] = 'Functional Part', ['mass'] = 60.65, ['volume'] = 9.6}, 252 - ['advancedfiringsystemxs'] = {['name'] = 'Advanced Firing System XS', ['tier'] = 3, ['type'] = 'Functional Part', ['mass'] = 163.51, ['volume'] = 27.2}, 253 - ['advancedfiringsystems'] = {['name'] = 'Advanced Firing System S', ['tier'] = 3, ['type'] = 'Functional Part', ['mass'] = 369.5, ['volume'] = 58.4}, 254 - ['advancedfiringsystemm'] = {['name'] = 'Advanced Firing System M', ['tier'] = 3, ['type'] = 'Functional Part', ['mass'] = 1760, ['volume'] = 268}, 255 - ['advancedfiringsysteml'] = {['name'] = 'Advanced Firing System L', ['tier'] = 3, ['type'] = 'Functional Part', ['mass'] = 9410, ['volume'] = 1383.2}, 256 - ['basicgazcylinderxs'] = {['name'] = 'Basic Gaz Cylinder XS', ['tier'] = 1, ['type'] = 'Functional Part', ['mass'] = 15.68, ['volume'] = 9.6}, 257 - ['basicgazcylinders'] = {['name'] = 'Basic Gaz Cylinder S', ['tier'] = 1, ['type'] = 'Functional Part', ['mass'] = 81.38, ['volume'] = 49.6}, 258 - ['basicgazcylinderm'] = {['name'] = 'Basic Gaz Cylinder M', ['tier'] = 1, ['type'] = 'Functional Part', ['mass'] = 427.88, ['volume'] = 259.2}, 259 - ['basicionicchamberxs'] = {['name'] = 'Basic Ionic Chamber XS', ['tier'] = 1, ['type'] = 'Functional Part', ['mass'] = 75.1, ['volume'] = 7.33}, 260 - ['basicionicchambers'] = {['name'] = 'Basic Ionic Chamber S', ['tier'] = 1, ['type'] = 'Functional Part', ['mass'] = 391.6, ['volume'] = 38.24}, 261 - ['basicionicchamberm'] = {['name'] = 'Basic Ionic Chamber M', ['tier'] = 1, ['type'] = 'Functional Part', ['mass'] = 2070, ['volume'] = 202.4}, 262 - ['basicionicchamberl'] = {['name'] = 'Basic Ionic Chamber L', ['tier'] = 1, ['type'] = 'Functional Part', ['mass'] = 1620, ['volume'] = 1090.4}, 263 - ['basicionicchamberxl'] = {['name'] = 'Basic Ionic Chamber XL', ['tier'] = 1, ['type'] = 'Functional Part', ['mass'] = 61230, ['volume'] = 6000.8}, 264 - ['uncommonionicchamberxs'] = {['name'] = 'Uncommon Ionic Chamber XS', ['tier'] = 1, ['type'] = 'Functional Part', ['mass'] = 140.8, ['volume'] = 13.86}, 265 - ['uncommonionicchambers'] = {['name'] = 'Uncommon Ionic Chamber S', ['tier'] = 1, ['type'] = 'Functional Part', ['mass'] = 452.35, ['volume'] = 44.77}, 266 - ['uncommonionicchamberm'] = {['name'] = 'Uncommon Ionic Chamber M', ['tier'] = 1, ['type'] = 'Functional Part', ['mass'] = 2100, ['volume'] = 208.93}, 267 - ['uncommonionicchamberl'] = {['name'] = 'Uncommon Ionic Chamber L', ['tier'] = 1, ['type'] = 'Functional Part', ['mass'] = 11010, ['volume'] = 1096.93}, 268 - ['uncommonionicchamberxl'] = {['name'] = 'Uncommon Ionic Chamber XL', ['tier'] = 1, ['type'] = 'Functional Part', ['mass'] = 60120, ['volume'] = 6007.33}, 269 - ['advancedionicchamberm'] = {['name'] = 'Advanced Ionic Chamber M', ['tier'] = 3, ['type'] = 'Functional Part', ['mass'] = 8640, ['volume'] = 208.93}, 270 - ['advancedionicchamberl'] = {['name'] = 'Advanced Ionic Chamber L', ['tier'] = 3, ['type'] = 'Functional Part', ['mass'] = 11370, ['volume'] = 1096.93}, 271 - ['uncommonlaserchamberxs'] = {['name'] = 'Uncommon Laser Chamber XS', ['tier'] = 2, ['type'] = 'Functional Part', ['mass'] = 24.8, ['volume'] = 18.4}, 272 - ['advancedlaserchamberxs'] = {['name'] = 'Advanced Laser Chamber XS', ['tier'] = 3, ['type'] = 'Functional Part', ['mass'] = 36.51, ['volume'] = 27.2}, 273 - ['advancedlaserchambers'] = {['name'] = 'Advanced Laser Chamber S', ['tier'] = 3, ['type'] = 'Functional Part', ['mass'] = 87.02, ['volume'] = 58.4}, 274 - ['advancedlaserchamberm'] = {['name'] = 'Advanced Laser Chamber M', ['tier'] = 3, ['type'] = 'Functional Part', ['mass'] = 429.89, ['volume'] = 268}, 275 - ['advancedlaserchamberl'] = {['name'] = 'Advanced Laser Chamber L', ['tier'] = 3, ['type'] = 'Functional Part', ['mass'] = 2380, ['volume'] = 1383.2}, 276 - ['rarelaserchambers'] = {['name'] = 'Rare Laser Chamber S', ['tier'] = 4, ['type'] = 'Functional Part', ['mass'] = 90.49, ['volume'] = 58.4}, 277 - ['uncommonlightxs'] = {['name'] = 'Uncommon Light XS', ['tier'] = 2, ['type'] = 'Functional Part', ['mass'] = 7.84, ['volume'] = 8.8}, 278 - ['uncommonlights'] = {['name'] = 'Uncommon Light S', ['tier'] = 2, ['type'] = 'Functional Part', ['mass'] = 28.8, ['volume'] = 29.6}, 279 - ['advancedmagneticrailxs'] = {['name'] = 'Advanced Magnetic Rail XS', ['tier'] = 3, ['type'] = 'Functional Part', ['mass'] = 204.7, ['volume'] = 20.86}, 280 - ['advancedmagneticrails'] = {['name'] = 'Advanced Magnetic Rail S', ['tier'] = 3, ['type'] = 'Functional Part', ['mass'] = 451.89, ['volume'] = 45.73}, 281 - ['advancedmagneticrailm'] = {['name'] = 'Advanced Magnetic Rail M', ['tier'] = 3, ['type'] = 'Functional Part', ['mass'] = 2120, ['volume'] = 213.09}, 282 - ['advancedmagneticraill'] = {['name'] = 'Advanced Magnetic Rail L', ['tier'] = 3, ['type'] = 'Functional Part', ['mass'] = 11160, ['volume'] = 1117.09}, 283 - ['basicmechanicalsensorxs'] = {['name'] = 'Basic Mechanical Sensor XS', ['tier'] = 1, ['type'] = 'Functional Part', ['mass'] = 35.96, ['volume'] = 7.49}, 284 - ['advancedmechanicalsensorxs'] = {['name'] = 'Advanced Mechanical Sensor XS', ['tier'] = 3, ['type'] = 'Functional Part', ['mass'] = 100.99, ['volume'] = 20.86}, 285 - ['exoticmechanicalsensorxs'] = {['name'] = 'Exotic Mechanical Sensor XS', ['tier'] = 5, ['type'] = 'Functional Part', ['mass'] = 102.37, ['volume'] = 19.26}, 286 - ['advancedmissilesiloxs'] = {['name'] = 'Advanced Missile Silo XS', ['tier'] = 3, ['type'] = 'Functional Part', ['mass'] = 157.51, ['volume'] = 27.2}, 287 - ['advancedmissilesilos'] = {['name'] = 'Advanced Missile Silo S', ['tier'] = 3, ['type'] = 'Functional Part', ['mass'] = 327.52, ['volume'] = 58.4}, 288 - ['advancedmissilesilom'] = {['name'] = 'Advanced Missile Silo M', ['tier'] = 3, ['type'] = 'Functional Part', ['mass'] = 1460, ['volume'] = 268}, 289 - ['advancedmissilesilol'] = {['name'] = 'Advanced Missile Silo L', ['tier'] = 3, ['type'] = 'Functional Part', ['mass'] = 7360, ['volume'] = 1383.2}, 290 - ['basicmobilepanelxs'] = {['name'] = 'Basic Mobile Panel XS', ['tier'] = 1, ['type'] = 'Functional Part', ['mass'] = 20, ['volume'] = 9.6}, 291 - ['basicmobilepanels'] = {['name'] = 'Basic Mobile Panel S', ['tier'] = 1, ['type'] = 'Functional Part', ['mass'] = 103, ['volume'] = 49.6}, 292 - ['basicmobilepanelm'] = {['name'] = 'Basic Mobile Panel M', ['tier'] = 1, ['type'] = 'Functional Part', ['mass'] = 536, ['volume'] = 259.2}, 293 - ['basicmobilepanell'] = {['name'] = 'Basic Mobile Panel L', ['tier'] = 1, ['type'] = 'Functional Part', ['mass'] = 2830, ['volume'] = 1374.4}, 294 - ['basicmobilepanelxl'] = {['name'] = 'Basic Mobile Panel XL', ['tier'] = 1, ['type'] = 'Functional Part', ['mass'] = 15160, ['volume'] = 7420.8}, 295 - ['advancedmotherboardm'] = {['name'] = 'Advanced Motherboard M', ['tier'] = 3, ['type'] = 'Functional Part', ['mass'] = 109.19, ['volume'] = 96}, 296 - ['uncommonorescannerxl'] = {['name'] = 'Uncommon Ore Scanner XL', ['tier'] = 2, ['type'] = 'Functional Part', ['mass'] = 1870, ['volume'] = 2702.9}, 297 - ['basicpowertransformerm'] = {['name'] = 'Basic Power Transformer M', ['tier'] = 1, ['type'] = 'Functional Part', ['mass'] = 1020, ['volume'] = 196.4}, 298 - ['uncommonpowertransformers'] = {['name'] = 'Uncommon Power Transformer S', ['tier'] = 2, ['type'] = 'Functional Part', ['mass'] = 221.56, ['volume'] = 43.33}, 299 - ['uncommonpowertransformerm'] = {['name'] = 'Uncommon Power Transformer M', ['tier'] = 2, ['type'] = 'Functional Part', ['mass'] = 1030, ['volume'] = 202.69}, 300 - ['rarepowertransformerl'] = {['name'] = 'Rare Power Transformer L', ['tier'] = 4, ['type'] = 'Functional Part', ['mass'] = 5570, ['volume'] = 1066.69}, 301 - ['rarepowertransformerxl'] = {['name'] = 'Rare Power Transformer XL', ['tier'] = 4, ['type'] = 'Functional Part', ['mass'] = 30540, ['volume'] = 5857.09}, 302 - ['exoticpowertransformerl'] = {['name'] = 'Exotic Power Transformer L', ['tier'] = 5, ['type'] = 'Functional Part', ['mass'] = 5570, ['volume'] = 1066.29}, 303 - ['basicroboticarmm'] = {['name'] = 'Basic Robotic Arm M', ['tier'] = 1, ['type'] = 'Functional Part', ['mass'] = 927, ['volume'] = 249.2}, 304 - ['basicroboticarml'] = {['name'] = 'Basic Robotic Arm L', ['tier'] = 1, ['type'] = 'Functional Part', ['mass'] = 4930, ['volume'] = 1324.4}, 305 - ['basicroboticarmxl'] = {['name'] = 'Basic Robotic Arm XL', ['tier'] = 1, ['type'] = 'Functional Part', ['mass'] = 26700, ['volume'] = 7170.8}, 306 - ['basicscreens'] = {['name'] = 'Basic Screen S', ['tier'] = 1, ['type'] = 'Functional Part', ['mass'] = 21.07, ['volume'] = 25.6}, 307 - ['basicscreenm'] = {['name'] = 'Basic Screen M', ['tier'] = 1, ['type'] = 'Functional Part', ['mass'] = 115.17, ['volume'] = 139.2}, 308 - ['uncommonscreenxs'] = {['name'] = 'Uncommon Screen XS', ['tier'] = 2, ['type'] = 'Functional Part', ['mass'] = 7.29, ['volume'] = 8.8}, 309 - ['uncommonscreenl'] = {['name'] = 'Uncommon Screen L', ['tier'] = 2, ['type'] = 'Functional Part', ['mass'] = 671.24, ['volume'] = 778.4}, 310 - ['uncommonscreenxl'] = {['name'] = 'Uncommon Screen XL', ['tier'] = 2, ['type'] = 'Functional Part', ['mass'] = 3860, ['volume'] = 4424.8}, 311 - ['advancedscreenxs'] = {['name'] = 'Advanced Screen XS', ['tier'] = 3, ['type'] = 'Functional Part', ['mass'] = 10.73, ['volume'] = 12.8}, 312 - ['basiccasingxs'] = {['name'] = 'Basic Casing XS', ['tier'] = 1, ['type'] = 'Structural Part', ['mass'] = 1.4, ['volume'] = 2}, 313 - ['basiccasings'] = {['name'] = 'Basic Casing S', ['tier'] = 1, ['type'] = 'Structural Part', ['mass'] = 7.7, ['volume'] = 11}, 314 - ['basiccasingm'] = {['name'] = 'Basic Casing M', ['tier'] = 1, ['type'] = 'Structural Part', ['mass'] = 51.8, ['volume'] = 74}, 315 - ['basiccasingl'] = {['name'] = 'Basic Casing L', ['tier'] = 1, ['type'] = 'Structural Part', ['mass'] = 360.5, ['volume'] = 515}, 316 - ['uncommoncasingxs'] = {['name'] = 'Uncommon Casing XS', ['tier'] = 2, ['type'] = 'Structural Part', ['mass'] = 1.45, ['volume'] = 2}, 317 - ['uncommoncasings'] = {['name'] = 'Uncommon Casing S', ['tier'] = 2, ['type'] = 'Structural Part', ['mass'] = 8.05, ['volume'] = 1}, 318 - ['uncommoncasingm'] = {['name'] = 'Uncommon Casing M', ['tier'] = 2, ['type'] = 'Structural Part', ['mass'] = 54.25, ['volume'] = 74}, 319 - ['uncommoncasingl'] = {['name'] = 'Uncommon Casing L', ['tier'] = 2, ['type'] = 'Structural Part', ['mass'] = 377.65, ['volume'] = 515}, 320 - ['uncommoncasingxl'] = {['name'] = 'Uncommon Casing XL', ['tier'] = 2, ['type'] = 'Structural Part', ['mass'] = 2640, ['volume'] = 3602}, 321 - ['advancedcasingxs'] = {['name'] = 'Advanced Casing XS', ['tier'] = 3, ['type'] = 'Structural Part', ['mass'] = 1.5, ['volume'] = 2}, 322 - ['advancedcasings'] = {['name'] = 'Advanced Casing S', ['tier'] = 3, ['type'] = 'Structural Part', ['mass'] = 8.4, ['volume'] = 1}, 323 - ['advancedcasingm'] = {['name'] = 'Advanced Casing M', ['tier'] = 3, ['type'] = 'Structural Part', ['mass'] = 56.7, ['volume'] = 74}, 324 - ['advancedcasingl'] = {['name'] = 'Advanced Casing L', ['tier'] = 3, ['type'] = 'Structural Part', ['mass'] = 394.8, ['volume'] = 515}, 325 - ['advancedcasingxl'] = {['name'] = 'Advanced Casing XL', ['tier'] = 3, ['type'] = 'Structural Part', ['mass'] = 2760, ['volume'] = 3602}, 326 - ['rarecasingxs'] = {['name'] = 'Rare Casing XS', ['tier'] = 4, ['type'] = 'Structural Part', ['mass'] = 1.52, ['volume'] = 2}, 327 - ['rarecasings'] = {['name'] = 'Rare Casing S', ['tier'] = 4, ['type'] = 'Structural Part', ['mass'] = 8.57, ['volume'] = 11}, 328 - ['exoticcasings'] = {['name'] = 'Exotic Casing S', ['tier'] = 5, ['type'] = 'Structural Part', ['mass'] = 8.29, ['volume'] = 11}, 329 - ['basicreinforcedframexs'] = {['name'] = 'Basic Reinforced Frame XS', ['tier'] = 1, ['type'] = 'Structural Part', ['mass'] = 12.88, ['volume'] = 2}, 330 - ['basicreinforcedframes'] = {['name'] = 'Basic Reinforced Frame S', ['tier'] = 1, ['type'] = 'Structural Part', ['mass'] = 70.84, ['volume'] = 11}, 331 - ['basicreinforcedframem'] = {['name'] = 'Basic Reinforced Frame M', ['tier'] = 1, ['type'] = 'Structural Part', ['mass'] = 476, ['volume'] = 74}, 332 - ['basicreinforcedframel'] = {['name'] = 'Basic Reinforced Frame L', ['tier'] = 1, ['type'] = 'Structural Part', ['mass'] = 3320, ['volume'] = 515}, 333 - ['basicreinforcedframexl'] = {['name'] = 'Basic Reinforced Frame XL', ['tier'] = 1, ['type'] = 'Structural Part', ['mass'] = 23200, ['volume'] = 3602}, 334 - ['uncommonreinforcedframexs'] = {['name'] = 'Uncommon Reinforced Frame XS', ['tier'] = 2, ['type'] = 'Structural Part', ['mass'] = 12.64, ['volume'] = 2}, 335 - ['uncommonreinforcedframes'] = {['name'] = 'Uncommon Reinforced Frame S', ['tier'] = 2, ['type'] = 'Structural Part', ['mass'] = 69.16, ['volume'] = 11}, 336 - ['uncommonreinforcedframem'] = {['name'] = 'Uncommon Reinforced Frame M', ['tier'] = 2, ['type'] = 'Structural Part', ['mass'] = 464.8, ['volume'] = 74}, 337 - ['uncommonreinforcedframel'] = {['name'] = 'Uncommon Reinforced Frame L', ['tier'] = 2, ['type'] = 'Structural Part', ['mass'] = 3230, ['volume'] = 515}, 338 - ['uncommonreinforcedframexl'] = {['name'] = 'Uncommon Reinforced Frame XL', ['tier'] = 2, ['type'] = 'Structural Part', ['mass'] = 22620, ['volume'] = 3602}, 339 - ['advancedreinforcedframexs'] = {['name'] = 'Advanced Reinforced Frame XS', ['tier'] = 3, ['type'] = 'Structural Part', ['mass'] = 13.24, ['volume'] = 2}, 340 - ['advancedreinforcedframes'] = {['name'] = 'Advanced Reinforced Frame S', ['tier'] = 3, ['type'] = 'Structural Part', ['mass'] = 73.34, ['volume'] = 11}, 341 - ['advancedreinforcedframem'] = {['name'] = 'Advanced Reinforced Frame M', ['tier'] = 3, ['type'] = 'Structural Part', ['mass'] = 494.08, ['volume'] = 74}, 342 - ['advancedreinforcedframel'] = {['name'] = 'Advanced Reinforced Frame L', ['tier'] = 3, ['type'] = 'Structural Part', ['mass'] = 3440, ['volume'] = 515}, 343 - ['rarereinforcedframel'] = {['name'] = 'Rare Reinforced Frame L', ['tier'] = 4, ['type'] = 'Structural Part', ['mass'] = 3370, ['volume'] = 515}, 344 - ['rarereinforcedframexl'] = {['name'] = 'Rare Reinforced Frame XL', ['tier'] = 4, ['type'] = 'Structural Part', ['mass'] = 23540, ['volume'] = 3602}, 345 - ['exoticreinforcedframem'] = {['name'] = 'Exotic Reinforced Frame M', ['tier'] = 5, ['type'] = 'Structural Part', ['mass'] = 468.05, ['volume'] = 74}, 346 - ['exoticreinforcedframel'] = {['name'] = 'Exotic Reinforced Frame L', ['tier'] = 5, ['type'] = 'Structural Part', ['mass'] = 3260, ['volume'] = 515}, 347 - ['exoticreinforcedframexl'] = {['name'] = 'Exotic Reinforced Frame XL', ['tier'] = 5, ['type'] = 'Structural Part', ['mass'] = 22780, ['volume'] = 3602}, 348 - ['basicstandardframexs'] = {['name'] = 'Basic Standard Frame XS', ['tier'] = 1, ['type'] = 'Structural Part', ['mass'] = 4.2, ['volume'] = 2}, 349 - ['basicstandardframes'] = {['name'] = 'Basic Standard Frame S', ['tier'] = 1, ['type'] = 'Structural Part', ['mass'] = 23.1, ['volume'] = 11}, 350 - ['basicstandardframem'] = {['name'] = 'Basic Standard Frame M', ['tier'] = 1, ['type'] = 'Structural Part', ['mass'] = 155.4, ['volume'] = 74}, 351 - ['basicstandardframel'] = {['name'] = 'Basic Standard Frame L', ['tier'] = 1, ['type'] = 'Structural Part', ['mass'] = 1080, ['volume'] = 515}, 352 - ['uncommonstandardframexs'] = {['name'] = 'Uncommon Standard Frame XS', ['tier'] = 2, ['type'] = 'Structural Part', ['mass'] = 4.06, ['volume'] = 2}, 353 - ['uncommonstandardframes'] = {['name'] = 'Uncommon Standard Frame S', ['tier'] = 2, ['type'] = 'Structural Part', ['mass'] = 22.12, ['volume'] = 11}, 354 - ['uncommonstandardframem'] = {['name'] = 'Uncommon Standard Frame M', ['tier'] = 2, ['type'] = 'Structural Part', ['mass'] = 148.54, ['volume'] = 74}, 355 - ['uncommonstandardframel'] = {['name'] = 'Uncommon Standard Frame L', ['tier'] = 2, ['type'] = 'Structural Part', ['mass'] = 1030, ['volume'] = 515}, 356 - ['advancedstandardframexs'] = {['name'] = 'Advanced Standard Frame XS', ['tier'] = 3, ['type'] = 'Structural Part', ['mass'] = 3.85, ['volume'] = 2}, 357 - ['advancedstandardframes'] = {['name'] = 'Advanced Standard Frame S', ['tier'] = 3, ['type'] = 'Structural Part', ['mass'] = 20.65, ['volume'] = 11}, 358 - ['advancedstandardframem'] = {['name'] = 'Advanced Standard Frame M', ['tier'] = 3, ['type'] = 'Structural Part', ['mass'] = 138.25, ['volume'] = 74}, 359 - ['advancedstandardframel'] = {['name'] = 'Advanced Standard Frame L', ['tier'] = 3, ['type'] = 'Structural Part', ['mass'] = 961.45, ['volume'] = 515}, 360 - ['rarestandardframel'] = {['name'] = 'Rare Standard Frame L', ['tier'] = 4, ['type'] = 'Structural Part', ['mass'] = 1050, ['volume'] = 515}, 361 - ['exoticstandardframexs'] = {['name'] = 'Exotic Standard Frame XS', ['tier'] = 5, ['type'] = 'Structural Part', ['mass'] = 5.2, ['volume'] = 2}, 362 - ['exoticstandardframel'] = {['name'] = 'Exotic Standard Frame L', ['tier'] = 5, ['type'] = 'Structural Part', ['mass'] = 1420, ['volume'] = 515}, 363 - ['dynamiccoreunitxs'] = {['name'] = 'Dynamic Core XS', ['tier'] = 1, ['type'] = 'Core Unit', ['mass'] = 70.89, ['volume'] = 16.1}, 364 - ['dynamiccoreunits'] = {['name'] = 'Dynamic Core S', ['tier'] = 2, ['type'] = 'Core Unit', ['mass'] = 375.97, ['volume'] = 87.2}, 365 - ['dynamiccoreunitm'] = {['name'] = 'Dynamic Core M', ['tier'] = 3, ['type'] = 'Core Unit', ['mass'] = 1980, ['volume'] = 454.8}, 366 - ['dynamiccoreunitl'] = {['name'] = 'Dynamic Core L', ['tier'] = 4, ['type'] = 'Core Unit', ['mass'] = 12140, ['volume'] = 2501}, 367 - ['staticcoreunitxs'] = {['name'] = 'Static Core XS', ['tier'] = 1, ['type'] = 'Core Unit', ['mass'] = 70.89, ['volume'] = 16.1}, 368 - ['staticcoreunits'] = {['name'] = 'Static Core S', ['tier'] = 1, ['type'] = 'Core Unit', ['mass'] = 360.18, ['volume'] = 83.6}, 369 - ['staticcoreunitm'] = {['name'] = 'Static Core M', ['tier'] = 2, ['type'] = 'Core Unit', ['mass'] = 1930, ['volume'] = 454.8}, 370 - ['staticcoreunitl'] = {['name'] = 'Static Core L', ['tier'] = 2, ['type'] = 'Core Unit', ['mass'] = 10700, ['volume'] = 2501}, 371 - ['spacecoreunitxs'] = {['name'] = 'Space Core XS', ['tier'] = 1, ['type'] = 'Core Unit', ['mass'] = 38.99, ['volume'] = 14}, 372 - ['spacecoreunits'] = {['name'] = 'Space Core S', ['tier'] = 2, ['type'] = 'Core Unit', ['mass'] = 459.57, ['volume'] = 120}, 373 - ['spacecoreunitm'] = {['name'] = 'Space Core M', ['tier'] = 3, ['type'] = 'Core Unit', ['mass'] = 3040, ['volume'] = 420}, 374 - ['spacecoreunitl'] = {['name'] = 'Space Core L', ['tier'] = 4, ['type'] = 'Core Unit', ['mass'] = 7680, ['volume'] = 1383}, 375 - ['territoryunit'] = {['name'] = 'Territory Unit', ['tier'] = 5, ['type'] = 'Core Unit', ['mass'] = 20050, ['volume'] = 4118.29}, 376 - ['containerhub'] = {['name'] = 'Container Hub', ['tier'] = 1, ['type'] = 'Container', ['mass'] = 55.8, ['volume'] = 44.3}, 377 - ['containerxs'] = {['name'] = 'Container XS', ['tier'] = 1, ['type'] = 'Container', ['mass'] = 229.09, ['volume'] = 64}, 378 - ['containers'] = {['name'] = 'Container S', ['tier'] = 1, ['type'] = 'Container', ['mass'] = 1281.31, ['volume'] = 342}, 379 - ['containerm'] = {['name'] = 'Container M', ['tier'] = 1, ['type'] = 'Container', ['mass'] = 7421.35, ['volume'] = 1873}, 380 - ['containerl'] = {['name'] = 'Container L', ['tier'] = 1, ['type'] = 'Container', ['mass'] = 14842.7, ['volume'] = 3746}, 381 - ['dispenser'] = {['name'] = 'Dispenser', ['tier'] = 1, ['type'] = 'Container', ['mass'] = 2060, ['volume'] = 479.2}, 382 - ['atmosphericfueltankxs'] = {['name'] = 'Atmospheric Fuel-Tank XS', ['tier'] = 1, ['type'] = 'Container', ['mass'] = 35.03, ['volume'] = 17.8}, 383 - ['atmosphericfueltanks'] = {['name'] = 'Atmospheric Fuel-Tank S', ['tier'] = 1, ['type'] = 'Container', ['mass'] = 182.67, ['volume'] = 92.6}, 384 - ['atmosphericfueltankm'] = {['name'] = 'Atmospheric Fuel-Tank M', ['tier'] = 1, ['type'] = 'Container', ['mass'] = 988.67, ['volume'] = 499.2}, 385 - ['atmosphericfueltankl'] = {['name'] = 'Atmospheric Fuel-Tank L', ['tier'] = 1, ['type'] = 'Container', ['mass'] = 5480, ['volume'] = 2755.4}, 386 - ['spacefueltanks'] = {['name'] = 'Space Fuel-Tank S', ['tier'] = 2, ['type'] = 'Container', ['mass'] = 182.67, ['volume'] = 92.6}, 387 - ['spacefueltankm'] = {['name'] = 'Space Fuel-Tank M', ['tier'] = 2, ['type'] = 'Container', ['mass'] = 988.67, ['volume'] = 499.2}, 388 - ['spacefueltankl'] = {['name'] = 'Space Fuel-Tank L', ['tier'] = 2, ['type'] = 'Container', ['mass'] = 5480, ['volume'] = 2755.4}, 389 - ['rocketfueltankxs'] = {['name'] = 'Rocket Fuel-Tank XS', ['tier'] = 3, ['type'] = 'Container', ['mass'] = 173.42, ['volume'] = 96.6}, 390 - ['rocketfueltanks'] = {['name'] = 'Rocket Fuel-Tank S', ['tier'] = 3, ['type'] = 'Container', ['mass'] = 886.72, ['volume'] = 503.2}, 391 - ['rocketfueltankm'] = {['name'] = 'Rocket Fuel-Tank M', ['tier'] = 3, ['type'] = 'Container', ['mass'] = 6231, ['volume'] = 6400}, 392 - ['rocketfueltankl'] = {['name'] = 'Rocket Fuel-Tank L', ['tier'] = 3, ['type'] = 'Container', ['mass'] = 25740, ['volume'] = 15570}, 393 - ['ammocontainerxs'] = {['name'] = 'Ammo Container XS', ['tier'] = 1, ['type'] = 'Container', ['mass'] = 216.15, ['volume'] = 67}, 394 - ['ammocontainers'] = {['name'] = 'Ammo Container S', ['tier'] = 1, ['type'] = 'Container', ['mass'] = 1170, ['volume'] = 360}, 395 - ['ammocontainerm'] = {['name'] = 'Ammo Container M', ['tier'] = 1, ['type'] = 'Container', ['mass'] = 6440, ['volume'] = 1981}, 396 - ['ammocontainerl'] = {['name'] = 'Ammo Container L', ['tier'] = 1, ['type'] = 'Container', ['mass'] = 12880, ['volume'] = 3962}, 397 - ['assemblylinexs'] = {['name'] = 'Assembly Line XS', ['tier'] = 1, ['type'] = 'Industry', ['mass'] = 100.93, ['volume'] = 21.8}, 398 - ['assemblylines'] = {['name'] = 'Assembly Line S', ['tier'] = 1, ['type'] = 'Industry', ['mass'] = 522.14, ['volume'] = 112.6}, 399 - ['assemblylinem'] = {['name'] = 'Assembly Line M', ['tier'] = 1, ['type'] = 'Industry', ['mass'] = 2800, ['volume'] = 599.2}, 400 - ['assemblylinel'] = {['name'] = 'Assembly Line L', ['tier'] = 1, ['type'] = 'Industry', ['mass'] = 15380, ['volume'] = 3255.4}, 401 - ['assemblylinexl'] = {['name'] = 'Assembly Line XL', ['tier'] = 1, ['type'] = 'Industry', ['mass'] = 86290, ['volume'] = 18070}, 402 - ['3dprinterm'] = {['name'] = '3D Printer M', ['tier'] = 1, ['type'] = 'Industry', ['mass'] = 2000, ['volume'] = 609.2}, 403 - ['chemicalindustrym'] = {['name'] = 'Chemical Industry M', ['tier'] = 1, ['type'] = 'Industry', ['mass'] = 2300, ['volume'] = 479.2}, 404 - ['electronicsindustrym'] = {['name'] = 'Electronics Industry M', ['tier'] = 1, ['type'] = 'Industry', ['mass'] = 1620, ['volume'] = 459.2}, 405 - ['glassfurnacem'] = {['name'] = 'Glass Furnace M', ['tier'] = 1, ['type'] = 'Industry', ['mass'] = 2830, ['volume'] = 556.4}, 406 - ['honeycombrefinerym'] = {['name'] = 'Honeycomb Refinery M', ['tier'] = 1, ['type'] = 'Industry', ['mass'] = 2990, ['volume'] = 589.2}, 407 - ['metalworkindustrym'] = {['name'] = 'Metalwork Industry M', ['tier'] = 1, ['type'] = 'Industry', ['mass'] = 2600, ['volume'] = 599.2}, 408 - ['recyclerm'] = {['name'] = 'Recycler M', ['tier'] = 1, ['type'] = 'Industry', ['mass'] = 2350, ['volume'] = 619.2}, 409 - ['refinerm'] = {['name'] = 'Refiner M', ['tier'] = 1, ['type'] = 'Industry', ['mass'] = 2300, ['volume'] = 479.2}, 410 - ['smelterm'] = {['name'] = 'Smelter M', ['tier'] = 1, ['type'] = 'Industry', ['mass'] = 2060, ['volume'] = 499.2}, 411 - ['transferunit'] = {['name'] = 'Transfer Unit', ['tier'] = 1, ['type'] = 'Industry', ['mass'] = 10150, ['volume'] = 3305.4}, 412 - ['retrorocketbrakes'] = {['name'] = 'Retro-Rocket Brake S', ['tier'] = 1, ['type'] = 'Space Brake', ['mass'] = 137.55, ['volume'] = 20.33}, 413 - ['retrorocketbrakem'] = {['name'] = 'Retro-Rocket Brake M', ['tier'] = 1, ['type'] = 'Space Brake', ['mass'] = 714, ['volume'] = 105.24}, 414 - ['retrorocketbrakel'] = {['name'] = 'Retro-Rocket Brake L', ['tier'] = 1, ['type'] = 'Space Brake', ['mass'] = 3770, ['volume'] = 562.4}, 415 - ['atmosphericairbrakes'] = {['name'] = 'Atmospheric Airbrake S', ['tier'] = 1, ['type'] = 'Airbrake', ['mass'] = 55.55, ['volume'] = 22.6}, 416 - ['atmosphericairbrakem'] = {['name'] = 'Atmospheric Airbrake M', ['tier'] = 1, ['type'] = 'Airbrake', ['mass'] = 285.25, ['volume'] = 116.6}, 417 - ['atmosphericairbrakel'] = {['name'] = 'Atmospheric Airbrake L', ['tier'] = 1, ['type'] = 'Airbrake', ['mass'] = 1500, ['volume'] = 619.2}, 418 - ['compactaileronxs'] = {['name'] = 'Compact Aileron XS', ['tier'] = 1, ['type'] = 'Aileron', ['mass'] = 61.2, ['volume'] = 22.6}, 419 - ['compactailerons'] = {['name'] = 'Compact Aileron S', ['tier'] = 1, ['type'] = 'Aileron', ['mass'] = 319.15, ['volume'] = 116.6}, 420 - ['compactaileronm'] = {['name'] = 'Compact Aileron M', ['tier'] = 1, ['type'] = 'Aileron', ['mass'] = 1705, ['volume'] = 619.2}, 421 - ['aileronxs'] = {['name'] = 'Aileron XS', ['tier'] = 1, ['type'] = 'Aileron', ['mass'] = 122.4, ['volume'] = 45.2}, 422 - ['ailerons'] = {['name'] = 'Aileron S', ['tier'] = 1, ['type'] = 'Aileron', ['mass'] = 638.3, ['volume'] = 233.2}, 423 - ['aileronm'] = {['name'] = 'Aileron M', ['tier'] = 1, ['type'] = 'Aileron', ['mass'] = 3410, ['volume'] = 1238.4}, 424 - ['stabilizerxs'] = {['name'] = 'Stabilizer XS', ['tier'] = 1, ['type'] = 'Stabilizer', ['mass'] = 69.88, ['volume'] = 22.6}, 425 - ['stabilizers'] = {['name'] = 'Stabilizer S', ['tier'] = 1, ['type'] = 'Stabilizer', ['mass'] = 366.89, ['volume'] = 116.6}, 426 - ['stabilizerm'] = {['name'] = 'Stabilizer M', ['tier'] = 1, ['type'] = 'Stabilizer', ['mass'] = 2030, ['volume'] = 619.2}, 427 - ['stabilizerl'] = {['name'] = 'Stabilizer L', ['tier'] = 1, ['type'] = 'Stabilizer', ['mass'] = 11500, ['volume'] = 3355.4}, 428 - ['wingxs'] = {['name'] = 'Wing XS', ['tier'] = 1, ['type'] = 'Wing', ['mass'] = 61.2, ['volume'] = 22.6}, 429 - ['wings'] = {['name'] = 'Wing S', ['tier'] = 1, ['type'] = 'Wing', ['mass'] = 319.15, ['volume'] = 116.6}, 430 - ['wingm'] = {['name'] = 'Wing M', ['tier'] = 1, ['type'] = 'Wing', ['mass'] = 1700, ['volume'] = 619.2}, 431 - ['wingvariantm'] = {['name'] = 'Wing Variant M', ['tier'] = 1, ['type'] = 'Wing', ['mass'] = 1700, ['volume'] = 619.2}, 432 - ['atmosphericenginexs'] = {['name'] = 'Atmospheric Engine XS', ['tier'] = 1, ['type'] = 'Atmospheric Engine', ['mass'] = 101.88, ['volume'] = 22.6}, 433 - ['atmosphericengines'] = {['name'] = 'Atmospheric Engine S', ['tier'] = 2, ['type'] = 'Atmospheric Engine', ['mass'] = 539.99, ['volume'] = 116.6}, 434 - ['atmosphericenginem'] = {['name'] = 'Atmospheric Engine M', ['tier'] = 2, ['type'] = 'Atmospheric Engine', ['mass'] = 2980, ['volume'] = 619.2}, 435 - ['atmosphericenginel'] = {['name'] = 'Atmospheric Engine L', ['tier'] = 2, ['type'] = 'Atmospheric Engine', ['mass'] = 16930, ['volume'] = 3355.4}, 436 - ['spaceenginexs'] = {['name'] = 'Space Engine XS', ['tier'] = 1, ['type'] = 'Space Engine', ['mass'] = 146.23, ['volume'] = 20.33}, 437 - ['spaceengines'] = {['name'] = 'Space Engine S', ['tier'] = 1, ['type'] = 'Space Engine', ['mass'] = 761.74, ['volume'] = 105.24}, 438 - ['spaceenginem'] = {['name'] = 'Space Engine M', ['tier'] = 1, ['type'] = 'Space Engine', ['mass'] = 4090, ['volume'] = 562.4}, 439 - ['spaceenginel'] = {['name'] = 'Space Engine L', ['tier'] = 1, ['type'] = 'Space Engine', ['mass'] = 22470, ['volume'] = 3071.4}, 440 - ['spaceenginexl'] = {['name'] = 'Space Engine XL', ['tier'] = 1, ['type'] = 'Space Engine', ['mass'] = 126240, ['volume'] = 17150}, 441 - ['hoverengines'] = {['name'] = 'Hover Engine S', ['tier'] = 1, ['type'] = 'Hover Engine', ['mass'] = 56.91, ['volume'] = 22.6}, 442 - ['hoverenginem'] = {['name'] = 'Hover Engine M', ['tier'] = 2, ['type'] = 'Hover Engine', ['mass'] = 302.02, ['volume'] = 116.6}, 443 - ['hoverenginel'] = {['name'] = 'Hover Engine L', ['tier'] = 2, ['type'] = 'Hover Engine', ['mass'] = 1700, ['volume'] = 619.2}, 444 - ['flathoverenginel'] = {['name'] = 'Flat Hover Engine L', ['tier'] = 2, ['type'] = 'Hover Engine', ['mass'] = 1700, ['volume'] = 619.2}, 445 - ['adjustorxs'] = {['name'] = 'Adjustor XS', ['tier'] = 1, ['type'] = 'Adjustor', ['mass'] = 22.7, ['volume'] = 11}, 446 - ['adjustors'] = {['name'] = 'Adjustor S', ['tier'] = 1, ['type'] = 'Adjustor', ['mass'] = 42.58, ['volume'] = 22.6}, 447 - ['adjustorm'] = {['name'] = 'Adjustor M', ['tier'] = 1, ['type'] = 'Adjustor', ['mass'] = 220.38, ['volume'] = 116.6}, 448 - ['adjustorl'] = {['name'] = 'Adjustor L', ['tier'] = 1, ['type'] = 'Adjustor', ['mass'] = 1180, ['volume'] = 619.2}, 449 - ['rocketengines'] = {['name'] = 'Rocket Engine S', ['tier'] = 3, ['type'] = 'Rocket Engine', ['mass'] = 2223.76, ['volume'] = 40.2}, 450 - ['rocketenginem'] = {['name'] = 'Rocket Engine M', ['tier'] = 3, ['type'] = 'Rocket Engine', ['mass'] = 680.05, ['volume'] = 125.4}, 451 - ['rocketenginel'] = {['name'] = 'Rocket Engine L', ['tier'] = 4, ['type'] = 'Rocket Engine', ['mass'] = 3390, ['volume'] = 628}, 452 - ['verticalboosterxs'] = {['name'] = 'Vertical Booster XS', ['tier'] = 1, ['type'] = 'Vertical Booster', ['mass'] = 22.7, ['volume'] = 11}, 453 - ['verticalboosters'] = {['name'] = 'Vertical Booster S', ['tier'] = 1, ['type'] = 'Vertical Booster', ['mass'] = 102, ['volume'] = 20.33}, 454 - ['verticalboosterm'] = {['name'] = 'Vertical Booster M', ['tier'] = 1, ['type'] = 'Vertical Booster', ['mass'] = 530.6, ['volume'] = 105.24}, 455 - ['verticalboosterl'] = {['name'] = 'Vertical Booster L', ['tier'] = 1, ['type'] = 'Vertical Booster', ['mass'] = 2820, ['volume'] = 562.4}, 456 - ['elevatorxs'] = {['name'] = 'Elevator XS', ['tier'] = 1, ['type'] = 'Interactive Element', ['mass'] = 207.86, ['volume'] = 57.56}, 457 - ['landinggearxs'] = {['name'] = 'Landing Gear XS', ['tier'] = 1, ['type'] = 'Landing Gear', ['mass'] = 49.88, ['volume'] = 13}, 458 - ['landinggears'] = {['name'] = 'Landing Gear S', ['tier'] = 2, ['type'] = 'Landing Gear', ['mass'] = 258.76, ['volume'] = 67}, 459 - ['landinggearm'] = {['name'] = 'Landing Gear M', ['tier'] = 2, ['type'] = 'Landing Gear', ['mass'] = 1460, ['volume'] = 360}, 460 - ['landinggearl'] = {['name'] = 'Landing Gear L', ['tier'] = 2, ['type'] = 'Landing Gear', ['mass'] = 8500, ['volume'] = 1981}, 461 - ['forcefieldxs'] = {['name'] = 'Force Field XS', ['tier'] = 1, ['type'] = 'Force Field', ['mass'] = 207.86, ['volume'] = 57.56}, 462 - ['forcefields'] = {['name'] = 'Force Field S', ['tier'] = 3, ['type'] = 'Force Field', ['mass'] = 110.62, ['volume'] = 34.7}, 463 - ['forcefieldm'] = {['name'] = 'Force Field M', ['tier'] = 3, ['type'] = 'Force Field', ['mass'] = 110.62, ['volume'] = 34.7}, 464 - ['forcefieldl'] = {['name'] = 'Force Field L', ['tier'] = 3, ['type'] = 'Force Field', ['mass'] = 110.62, ['volume'] = 34.7}, 465 - ['territoryscanner'] = {['name'] = 'Territory Scanner', ['tier'] = 2, ['type'] = 'Instrument', ['mass'] = 66460, ['volume'] = 12700}, 466 - ['gyroscope'] = {['name'] = 'Gyroscope', ['tier'] = 1, ['type'] = 'Instrument', ['mass'] = 104.41, ['volume'] = 17.65}, 467 - ['telemeter'] = {['name'] = 'Telemeter', ['tier'] = 2, ['type'] = 'Instrument', ['mass'] = 40.79, ['volume'] = 31.4}, 468 - ['remotecontroller'] = {['name'] = 'Remote Controller', ['tier'] = 3, ['type'] = 'Control Unit', ['mass'] = 7.79, ['volume'] = 4.5}, 469 - ['hovercraftseatcontroller'] = {['name'] = 'Hovercraft Seat Controller', ['tier'] = 1, ['type'] = 'Control Unit', ['mass'] = 110.33, ['volume'] = 61.6}, 470 - ['emergencycontroller'] = {['name'] = 'Emergency Controller', ['tier'] = 3, ['type'] = 'Control Unit', ['mass'] = 9.35, ['volume'] = 4.8}, 471 - ['commandseatcontroller'] = {['name'] = 'Command Seat Controller', ['tier'] = 1, ['type'] = 'Control Unit', ['mass'] = 158.45, ['volume'] = 66.6}, 472 - ['cockpitcontroller'] = {['name'] = 'Cockpit Controller', ['tier'] = 1, ['type'] = 'Control Unit', ['mass'] = 1210, ['volume'] = 491.2}, 473 - ['programmingboard'] = {['name'] = 'Programming Board', ['tier'] = 1, ['type'] = 'Control Unit', ['mass'] = 27.74, ['volume'] = 12.7}, 474 - ['gunnermodules'] = {['name'] = 'Gunner Module S', ['tier'] = 2, ['type'] = 'Control Unit', ['mass'] = 427.9, ['volume'] = 93.8}, 475 - ['gunnermodulem'] = {['name'] = 'Gunner Module M', ['tier'] = 2, ['type'] = 'Control Unit', ['mass'] = 2170, ['volume'] = 486.4}, 476 - ['gunnermodulel'] = {['name'] = 'Gunner Module L', ['tier'] = 2, ['type'] = 'Control Unit', ['mass'] = 11320, ['volume'] = 2666.6}, 477 - ['antigravitygenerators'] = {['name'] = 'Anti-Gravity Generator S', ['tier'] = 4, ['type'] = 'Anti-Gravity Generator', ['mass'] = 27130, ['volume'] = 4279.69}, 478 - ['antigravitygeneratorm'] = {['name'] = 'Anti-Gravity Generator M', ['tier'] = 4, ['type'] = 'Anti-Gravity Generator', ['mass'] = 137720, ['volume'] = 21620}, 479 - ['antigravitygeneratorl'] = {['name'] = 'Anti-Gravity Generator L', ['tier'] = 4, ['type'] = 'Anti-Gravity Generator', ['mass'] = 550870, ['volume'] = 86470}, 480 - ['antigravitypulsor'] = {['name'] = 'Anti-Gravity Pulsor', ['tier'] = 3, ['type'] = 'Anti-Gravity Generator', ['mass'] = 6210, ['volume'] = 804.93}, 481 - ['slidingdoors'] = {['name'] = 'Sliding Door S', ['tier'] = 1, ['type'] = 'Door/Gate', ['mass'] = 749.15, ['volume'] = 102.04}, 482 - ['slidingdoorm'] = {['name'] = 'Sliding Door M', ['tier'] = 1, ['type'] = 'Door/Gate', ['mass'] = 1010, ['volume'] = 151.8}, 483 - ['reinforcedslidingdoor'] = {['name'] = 'Reinforced Sliding Door', ['tier'] = 1, ['type'] = 'Door/Gate', ['mass'] = 4200, ['volume'] = 546.4}, 484 - ['interiordoor'] = {['name'] = 'Interior Door', ['tier'] = 1, ['type'] = 'Door/Gate', ['mass'] = 4200, ['volume'] = 546.4}, 485 - ['airlock'] = {['name'] = 'Airlock', ['tier'] = 1, ['type'] = 'Door/Gate', ['mass'] = 4200, ['volume'] = 546.4}, 486 - ['gatexs'] = {['name'] = 'Gate XS', ['tier'] = 2, ['type'] = 'Door/Gate', ['mass'] = 122750, ['volume'] = 16760}, 487 - ['expandedgates'] = {['name'] = 'Expanded Gate S', ['tier'] = 2, ['type'] = 'Door/Gate', ['mass'] = 122750, ['volume'] = 16760}, 488 - ['gatem'] = {['name'] = 'Gate M', ['tier'] = 2, ['type'] = 'Door/Gate', ['mass'] = 122750, ['volume'] = 16760}, 489 - ['expandedgatel'] = {['name'] = 'Expanded Gate L', ['tier'] = 2, ['type'] = 'Door/Gate', ['mass'] = 122750, ['volume'] = 16760}, 490 - ['gatexl'] = {['name'] = 'Gate XL', ['tier'] = 2, ['type'] = 'Door/Gate', ['mass'] = 122750, ['volume'] = 16760}, 491 - ['andoperator'] = {['name'] = 'AND Operator', ['tier'] = 1, ['type'] = 'Electronics', ['mass'] = 13.27, ['volume'] = 5}, 492 - ['notoperator'] = {['name'] = 'NOT Operator', ['tier'] = 1, ['type'] = 'Electronics', ['mass'] = 7.47, ['volume'] = 4.5}, 493 - ['oroperator'] = {['name'] = 'OR Operator', ['tier'] = 1, ['type'] = 'Electronics', ['mass'] = 7.47, ['volume'] = 4.5}, 494 - ['relay'] = {['name'] = 'Relay', ['tier'] = 1, ['type'] = 'Electronics', ['mass'] = 8.87, ['volume'] = 6.5}, 495 - ['databank'] = {['name'] = 'Databank', ['tier'] = 1, ['type'] = 'Electronics', ['mass'] = 17.09, ['volume'] = 5.5}, 496 - ['2counter'] = {['name'] = '2 Counter', ['tier'] = 2, ['type'] = 'Electronics', ['mass'] = 9.93, ['volume'] = 5}, 497 - ['3counter'] = {['name'] = '3 Counter', ['tier'] = 2, ['type'] = 'Electronics', ['mass'] = 9.93, ['volume'] = 5}, 498 - ['5counter'] = {['name'] = '5 Counter', ['tier'] = 2, ['type'] = 'Electronics', ['mass'] = 9.93, ['volume'] = 5}, 499 - ['7counter'] = {['name'] = '7 Counter', ['tier'] = 2, ['type'] = 'Electronics', ['mass'] = 9.93, ['volume'] = 5}, 500 - ['10counter'] = {['name'] = '10 Counter', ['tier'] = 2, ['type'] = 'Electronics', ['mass'] = 9.93, ['volume'] = 5}, 501 - ['infraredlaseremitter'] = {['name'] = 'Infra-Red Laser Emitter', ['tier'] = 2, ['type'] = 'Electronics', ['mass'] = 9.93, ['volume'] = 5}, 502 - ['laseremitter'] = {['name'] = 'Laser Emitter', ['tier'] = 1, ['type'] = 'Electronics', ['mass'] = 7.47, ['volume'] = 4.5}, 503 - ['delayline'] = {['name'] = 'Delay Line', ['tier'] = 1, ['type'] = 'Electronics', ['mass'] = 7.47, ['volume'] = 4.5}, 504 - ['receiverxs'] = {['name'] = 'Receiver XS', ['tier'] = 1, ['type'] = 'Electronics', ['mass'] = 13.27, ['volume'] = 5}, 505 - ['receivers'] = {['name'] = 'Receiver S', ['tier'] = 2, ['type'] = 'Electronics', ['mass'] = 475.87, ['volume'] = 91.56}, 506 - ['receiverm'] = {['name'] = 'Receiver M', ['tier'] = 2, ['type'] = 'Electronics', ['mass'] = 6636.912, ['volume'] = 1500}, 507 - ['emitterxs'] = {['name'] = 'Emitter XS', ['tier'] = 1, ['type'] = 'Electronics', ['mass'] = 69.31, ['volume'] = 15.46}, 508 - ['emitters'] = {['name'] = 'Emitter S', ['tier'] = 2, ['type'] = 'Electronics', ['mass'] = 427.72, ['volume'] = 88.56}, 509 - ['emitterm'] = {['name'] = 'Emitter M', ['tier'] = 2, ['type'] = 'Electronics', ['mass'] = 2040, ['volume'] = 44.36}, 510 - ['longlightxs'] = {['name'] = 'Long Light XS', ['tier'] = 2, ['type'] = 'Light', ['mass'] = 70.05, ['volume'] = 10.8}, 511 - ['longlights'] = {['name'] = 'Long Light S', ['tier'] = 2, ['type'] = 'Light', ['mass'] = 79.34, ['volume'] = 21.6}, 512 - ['longlightm'] = {['name'] = 'Long Light M', ['tier'] = 2, ['type'] = 'Light', ['mass'] = 79.34, ['volume'] = 21.6}, 513 - ['longlightl'] = {['name'] = 'Long Light L', ['tier'] = 2, ['type'] = 'Light', ['mass'] = 79.34, ['volume'] = 21.6}, 514 - ['squarelightxs'] = {['name'] = 'Square Light XS', ['tier'] = 2, ['type'] = 'Light', ['mass'] = 70.05, ['volume'] = 10.8}, 515 - ['squarelights'] = {['name'] = 'Square Light S', ['tier'] = 2, ['type'] = 'Light', ['mass'] = 79.34, ['volume'] = 21.6}, 516 - ['squarelightm'] = {['name'] = 'Square Light M', ['tier'] = 2, ['type'] = 'Light', ['mass'] = 79.34, ['volume'] = 21.6}, 517 - ['squarelightl'] = {['name'] = 'Square Light L', ['tier'] = 2, ['type'] = 'Light', ['mass'] = 79.34, ['volume'] = 21.6}, 518 - ['verticallightxs'] = {['name'] = 'Vertical Light XS', ['tier'] = 2, ['type'] = 'Light', ['mass'] = 70.05, ['volume'] = 10.8}, 519 - ['verticallights'] = {['name'] = 'Vertical Light S', ['tier'] = 2, ['type'] = 'Light', ['mass'] = 79.34, ['volume'] = 21.6}, 520 - ['verticallightm'] = {['name'] = 'Vertical Light M', ['tier'] = 2, ['type'] = 'Light', ['mass'] = 79.34, ['volume'] = 21.6}, 521 - ['verticallightl'] = {['name'] = 'Vertical Light L', ['tier'] = 2, ['type'] = 'Light', ['mass'] = 79.34, ['volume'] = 21.6}, 522 - ['headlight'] = {['name'] = 'Headlight', ['tier'] = 2, ['type'] = 'Light', ['mass'] = 79.34, ['volume'] = 21.6}, 523 - ['smallatmosphericradarpvps'] = {['name'] = 'Small Atmospheric Radar PvP S', ['tier'] = 1, ['type'] = 'Radar', ['mass'] = 486.72, ['volume'] = 96.56}, 524 - ['mediumatmosphericradarpvpm'] = {['name'] = 'Medium Atmospheric Radar PvP M', ['tier'] = 2, ['type'] = 'Radar', ['mass'] = 2910, ['volume'] = 486336}, 525 - ['largeatmosphericradarpvpl'] = {['name'] = 'Large Atmospheric Radar PvP L', ['tier'] = 2, ['type'] = 'Radar', ['mass'] = 16140, ['volume'] = 2658.56}, 526 - ['spaceradars'] = {['name'] = 'Space Radar S', ['tier'] = 1, ['type'] = 'Radar', ['mass'] = 486.72, ['volume'] = 96.56}, 527 - ['spaceradarm'] = {['name'] = 'Space Radar M', ['tier'] = 1, ['type'] = 'Radar', ['mass'] = 2350, ['volume'] = 486.36}, 528 - ['spaceradarl'] = {['name'] = 'Space Radar L', ['tier'] = 1, ['type'] = 'Radar', ['mass'] = 12490, ['volume'] = 2658.56}, 529 - ['screenxs'] = {['name'] = 'Screen XS', ['tier'] = 2, ['type'] = 'Screen/Sign', ['mass'] = 18.67, ['volume'] = 15.8}, 530 - ['screens'] = {['name'] = 'Screen S', ['tier'] = 2, ['type'] = 'Screen/Sign', ['mass'] = 18.67, ['volume'] = 15.8}, 531 - ['screenm'] = {['name'] = 'Screen M', ['tier'] = 2, ['type'] = 'Screen/Sign', ['mass'] = 18.67, ['volume'] = 15.8}, 532 - ['screenxl'] = {['name'] = 'Screen XL', ['tier'] = 3, ['type'] = 'Screen/Sign', ['mass'] = 12810, ['volume'] = 11170}, 533 - ['transparentscreenxs'] = {['name'] = 'Transparent Screen XS', ['tier'] = 2, ['type'] = 'Screen/Sign', ['mass'] = 18.67, ['volume'] = 15.8}, 534 - ['transparentscreens'] = {['name'] = 'Transparent Screen S', ['tier'] = 2, ['type'] = 'Screen/Sign', ['mass'] = 18.67, ['volume'] = 15.8}, 535 - ['transparentscreenm'] = {['name'] = 'Transparent Screen M', ['tier'] = 2, ['type'] = 'Screen/Sign', ['mass'] = 18.67, ['volume'] = 15.8}, 536 - ['transparentscreenl'] = {['name'] = 'Transparent Screen L', ['tier'] = 2, ['type'] = 'Screen/Sign', ['mass'] = 18.67, ['volume'] = 15.8}, 537 - ['signxs'] = {['name'] = 'Sign XS', ['tier'] = 2, ['type'] = 'Screen/Sign', ['mass'] = 18.67, ['volume'] = 15.8}, 538 - ['signs'] = {['name'] = 'Sign S', ['tier'] = 2, ['type'] = 'Screen/Sign', ['mass'] = 18.67, ['volume'] = 15.8}, 539 - ['signm'] = {['name'] = 'Sign M', ['tier'] = 2, ['type'] = 'Screen/Sign', ['mass'] = 18.67, ['volume'] = 15.8}, 540 - ['signl'] = {['name'] = 'Sign L', ['tier'] = 2, ['type'] = 'Screen/Sign', ['mass'] = 18.67, ['volume'] = 15.8}, 541 - ['verticalsignxs'] = {['name'] = 'Vertical Sign XS', ['tier'] = 2, ['type'] = 'Screen/Sign', ['mass'] = 18.67, ['volume'] = 15.8}, 542 - ['verticalsignm'] = {['name'] = 'Vertical Sign M', ['tier'] = 2, ['type'] = 'Screen/Sign', ['mass'] = 18.67, ['volume'] = 15.8}, 543 - ['verticalsignl'] = {['name'] = 'Vertical Sign L', ['tier'] = 2, ['type'] = 'Screen/Sign', ['mass'] = 18.67, ['volume'] = 15.8}, 544 - ['sensorss'] = {['name'] = 'Sensors S', ['tier'] = 1, ['type'] = 'Surrogate Element', ['mass'] = 28, ['volume'] = 27}, 545 - ['officechair'] = {['name'] = 'Office Chair', ['tier'] = 1, ['type'] = 'Chair', ['mass'] = 916.52, ['volume'] = 13}, 546 - ['executivechair'] = {['name'] = 'Executive Chair', ['tier'] = 1, ['type'] = 'Chair', ['mass'] = 39.62, ['volume'] = 24}, 547 - ['encampmentchair'] = {['name'] = 'Encampment Chair', ['tier'] = 1, ['type'] = 'Chair', ['mass'] = 2.52, ['volume'] = 2}, 548 - ['manualswitch'] = {['name'] = 'Manual Switch', ['tier'] = 1, ['type'] = 'Sensor', ['mass'] = 13.27, ['volume'] = 5}, 549 - ['pressuretile'] = {['name'] = 'Pressure Tile', ['tier'] = 1, ['type'] = 'Sensor', ['mass'] = 50.63, ['volume'] = 14.49}, 550 - ['manualbuttonxs'] = {['name'] = 'Manual Button XS', ['tier'] = 1, ['type'] = 'Sensor', ['mass'] = 13.27, ['volume'] = 5}, 551 - ['manualbuttons'] = {['name'] = 'Manual Button S', ['tier'] = 1, ['type'] = 'Sensor', ['mass'] = 13.27, ['volume'] = 5}, 552 - ['laserreceiver'] = {['name'] = 'Laser Receiver', ['tier'] = 2, ['type'] = 'Sensor', ['mass'] = 9.93, ['volume'] = 5}, 553 - ['infraredlaserreceiver'] = {['name'] = 'Infra-Red Laser Receiver', ['tier'] = 2, ['type'] = 'Sensor', ['mass'] = 9.93}, 554 - ['detectionzonexs'] = {['name'] = 'Detection Zone XS', ['tier'] = 3, ['type'] = 'Sensor', ['mass'] = 7.79, ['volume'] = 4.5}, 555 - ['detectionzones'] = {['name'] = 'Detection Zone S', ['tier'] = 3, ['type'] = 'Sensor', ['mass'] = 7.79, ['volume'] = 4.5}, 556 - ['detectionzonem'] = {['name'] = 'Detection Zone M', ['tier'] = 3, ['type'] = 'Sensor', ['mass'] = 7.79, ['volume'] = 4.5}, 557 - ['detectionzonel'] = {['name'] = 'Detection Zone L', ['tier'] = 3, ['type'] = 'Sensor', ['mass'] = 7.79, ['volume'] = 4.5}, 558 - ['keyboardunit'] = {['name'] = 'Keyboard Unit', ['tier'] = 1, ['type'] = 'Decorative', ['mass'] = 24.68, ['volume'] = 3.8}, 559 - ['antennas'] = {['name'] = 'Antenna S', ['tier'] = 1, ['type'] = 'Antenna', ['mass'] = 130.06, ['volume'] = 24}, 560 - ['antennam'] = {['name'] = 'Antenna M', ['tier'] = 2, ['type'] = 'Antenna', ['mass'] = 902.74, ['volume'] = 159}, 561 - ['antennal'] = {['name'] = 'Antenna L', ['tier'] = 3, ['type'] = 'Antenna', ['mass'] = 6850, ['volume'] = 1074}, 562 - ['barriercorner'] = {['name'] = 'Barrier Corner', ['tier'] = 1, ['type'] = 'Barrier', ['mass'] = 14.65, ['volume'] = 4}, 563 - ['barriers'] = {['name'] = 'Barrier S', ['tier'] = 1, ['type'] = 'Barrier', ['mass'] = 14.65, ['volume'] = 4}, 564 - ['barrierm'] = {['name'] = 'Barrier M', ['tier'] = 1, ['type'] = 'Barrier', ['mass'] = 14.65, ['volume'] = 4}, 565 - ['sinkunit'] = {['name'] = 'Sink Unit', ['tier'] = 1, ['type'] = 'Bathroom', ['mass'] = 6.72, ['volume'] = 4}, 566 - ['showerunit'] = {['name'] = 'Shower Unit', ['tier'] = 1, ['type'] = 'Bathroom', ['mass'] = 25.62, ['volume'] = 13}, 567 - ['urinalunit'] = {['name'] = 'Urinal Unit', ['tier'] = 1, ['type'] = 'Bathroom', ['mass'] = 8.32, ['volume'] = 4}, 568 - ['toiletunita'] = {['name'] = 'Toilet Unit A', ['tier'] = 1, ['type'] = 'Bathroom', ['mass'] = 6.72, ['volume'] = 4}, 569 - ['toiletunitb'] = {['name'] = 'Toilet Unit B', ['tier'] = 1, ['type'] = 'Bathroom', ['mass'] = 6.72, ['volume'] = 4}, 570 - ['cablemodelas'] = {['name'] = 'Cable Model-A S', ['tier'] = 1, ['type'] = 'Cable', ['mass'] = 14.1, ['volume'] = 4}, 571 - ['cablemodelbs'] = {['name'] = 'Cable Model-B S', ['tier'] = 1, ['type'] = 'Cable', ['mass'] = 14.1, ['volume'] = 4}, 572 - ['cablemodelcs'] = {['name'] = 'Cable Model-C S', ['tier'] = 1, ['type'] = 'Cable', ['mass'] = 14.1, ['volume'] = 4}, 573 - ['cablemodelam'] = {['name'] = 'Cable Model-A M', ['tier'] = 1, ['type'] = 'Cable', ['mass'] = 14.1, ['volume'] = 4}, 574 - ['cablemodelbm'] = {['name'] = 'Cable Model-B M', ['tier'] = 1, ['type'] = 'Cable', ['mass'] = 14.1, ['volume'] = 4}, 575 - ['cablemodelcm'] = {['name'] = 'Cable Model-C M', ['tier'] = 1, ['type'] = 'Cable', ['mass'] = 14.1, ['volume'] = 4}, 576 - ['cornercablemodela'] = {['name'] = 'Corner Cable Model-A', ['tier'] = 1, ['type'] = 'Cable', ['mass'] = 14.1, ['volume'] = 4}, 577 - ['cornercablemodelb'] = {['name'] = 'Corner Cable Model-B', ['tier'] = 1, ['type'] = 'Cable', ['mass'] = 14.1, ['volume'] = 4}, 578 - ['cornercablemodelc'] = {['name'] = 'Corner Cable Model-C', ['tier'] = 1, ['type'] = 'Cable', ['mass'] = 14.1, ['volume'] = 4}, 579 - ['dresser'] = {['name'] = 'Dresser', ['tier'] = 1, ['type'] = 'Furniture', ['mass'] = 8.32, ['volume'] = 4}, 580 - ['bench'] = {['name'] = 'Bench', ['tier'] = 1, ['type'] = 'Furniture', ['mass'] = 22.33, ['volume'] = 4}, 581 - ['woodenlowtable'] = {['name'] = 'Wooden Low Table', ['tier'] = 1, ['type'] = 'Furniture', ['mass'] = 5.92, ['volume'] = 4}, 582 - ['sofa'] = {['name'] = 'Sofa', ['tier'] = 1, ['type'] = 'Furniture', ['mass'] = 39.62, ['volume'] = 24}, 583 - ['woodenwardrobe'] = {['name'] = 'Wooden Wardrobe', ['tier'] = 1, ['type'] = 'Furniture', ['mass'] = 39.62, ['volume'] = 24}, 584 - ['table'] = {['name'] = 'Table', ['tier'] = 1, ['type'] = 'Furniture', ['mass'] = 264.32, ['volume'] = 159}, 585 - ['trash'] = {['name'] = 'Trash', ['tier'] = 1, ['type'] = 'Furniture', ['mass'] = 6.72, ['volume'] = 4}, 586 - ['woodensofa'] = {['name'] = 'Wooden Sofa', ['tier'] = 1, ['type'] = 'Furniture', ['mass'] = 39.62, ['volume'] = 24}, 587 - ['nightstand'] = {['name'] = 'Nightstand', ['tier'] = 1, ['type'] = 'Furniture', ['mass'] = 6.72, ['volume'] = 4}, 588 - ['wardrobe'] = {['name'] = 'Wardrobe', ['tier'] = 1, ['type'] = 'Furniture', ['mass'] = 39.62, ['volume'] = 24}, 589 - ['woodenchair'] = {['name'] = 'Wooden Chair', ['tier'] = 1, ['type'] = 'Furniture', ['mass'] = 2.52, ['volume'] = 2}, 590 - ['woodenarmchair'] = {['name'] = 'Wooden Armchair', ['tier'] = 1, ['type'] = 'Furniture', ['mass'] = 1.72, ['volume'] = 2}, 591 - ['roundcarpet'] = {['name'] = 'Round Carpet', ['tier'] = 5, ['type'] = 'Furniture', ['mass'] = 2.78, ['volume'] = 2}, 592 - ['squarecarpet'] = {['name'] = 'Square Carpet', ['tier'] = 1, ['type'] = 'Furniture', ['mass'] = 2.52, ['volume'] = 2}, 593 - ['woodendresser'] = {['name'] = 'Wooden Dresser', ['tier'] = 1, ['type'] = 'Furniture', ['mass'] = 34.02, ['volume'] = 24}, 594 - ['woodentablem'] = {['name'] = 'Wooden Table M', ['tier'] = 1, ['type'] = 'Furniture', ['mass'] = 34.02, ['volume'] = 24}, 595 - ['woodentablel'] = {['name'] = 'Wooden Table L', ['tier'] = 1, ['type'] = 'Furniture', ['mass'] = 34.02, ['volume'] = 24}, 596 - ['shelfempty'] = {['name'] = 'Shelf Empty', ['tier'] = 1, ['type'] = 'Furniture', ['mass'] = 8.32, ['volume'] = 4}, 597 - ['shelfhalffull'] = {['name'] = 'Shelf Half Full', ['tier'] = 1, ['type'] = 'Furniture', ['mass'] = 8.32, ['volume'] = 4}, 598 - ['shelffull'] = {['name'] = 'Shelf Full', ['tier'] = 1, ['type'] = 'Furniture', ['mass'] = 8.32, ['volume'] = 4}, 599 - ['bed'] = {['name'] = 'Bed', ['tier'] = 1, ['type'] = 'Furniture', ['mass'] = 128.94, ['volume'] = 24}, 600 - ['spaceshipholograms'] = {['name'] = 'Spaceship Hologram S', ['tier'] = 2, ['type'] = 'Hologram', ['mass'] = 112.72, ['volume'] = 9}, 601 - ['spaceshiphologramm'] = {['name'] = 'Spaceship Hologram M', ['tier'] = 2, ['type'] = 'Hologram', ['mass'] = 15.98, ['volume'] = 13}, 602 - ['spaceshipholograml'] = {['name'] = 'Spaceship Hologram L', ['tier'] = 2, ['type'] = 'Hologram', ['mass'] = 14.02, ['volume'] = 12.5}, 603 - ['planethologram'] = {['name'] = 'Planet Hologram', ['tier'] = 1, ['type'] = 'Hologram', ['mass'] = 13.39, ['volume'] = 12.5}, 604 - ['planetholograml'] = {['name'] = 'Planet Hologram L', ['tier'] = 1, ['type'] = 'Hologram', ['mass'] = 69.9, ['volume'] = 64}, 605 - ['steelcolumn'] = {['name'] = 'Steel Column', ['tier'] = 1, ['type'] = 'Hull', ['mass'] = 13.37, ['volume'] = 4}, 606 - ['steelpanel'] = {['name'] = 'Steel Panel', ['tier'] = 1, ['type'] = 'Hull', ['mass'] = 13.37, ['volume'] = 4}, 607 - ['hulldecorativeelementa'] = {['name'] = 'Hull Decorative Element A', ['tier'] = 1, ['type'] = 'Hull', ['mass'] = 14.65, ['volume'] = 4}, 608 - ['hulldecorativeelementb'] = {['name'] = 'Hull Decorative Element B', ['tier'] = 1, ['type'] = 'Hull', ['mass'] = 14.65, ['volume'] = 4}, 609 - ['hulldecorativeelementc'] = {['name'] = 'Hull Decorative Element C', ['tier'] = 1, ['type'] = 'Hull', ['mass'] = 14.65, ['volume'] = 4}, 610 - ['pipeam'] = {['name'] = 'Pipe A M', ['tier'] = 1, ['type'] = 'Pipe', ['mass'] = 4320, ['volume'] = 1074}, 611 - ['pipebm'] = {['name'] = 'Pipe B M', ['tier'] = 1, ['type'] = 'Pipe', ['mass'] = 4320, ['volume'] = 1074}, 612 - ['pipecm'] = {['name'] = 'Pipe C M', ['tier'] = 1, ['type'] = 'Pipe', ['mass'] = 4320, ['volume'] = 1074}, 613 - ['pipedm'] = {['name'] = 'Pipe D M', ['tier'] = 1, ['type'] = 'Pipe', ['mass'] = 4320, ['volume'] = 1074}, 614 - ['pipecornerm'] = {['name'] = 'Pipe Corner M', ['tier'] = 1, ['type'] = 'Pipe', ['mass'] = 4320, ['volume'] = 1074}, 615 - ['pipeconnectorm'] = {['name'] = 'Pipe Connector M', ['tier'] = 1, ['type'] = 'Pipe', ['mass'] = 4320, ['volume'] = 1074}, 616 - ['plantcasea'] = {['name'] = 'Plant Case A', ['tier'] = 1, ['type'] = 'Plant', ['mass'] = 21.42, ['volume'] = 24}, 617 - ['plantcaseb'] = {['name'] = 'Plant Case B', ['tier'] = 1, ['type'] = 'Plant', ['mass'] = 3.52, ['volume'] = 4}, 618 - ['plantcasec'] = {['name'] = 'Plant Case C', ['tier'] = 1, ['type'] = 'Plant', ['mass'] = 3.52, ['volume'] = 4}, 619 - ['plantcased'] = {['name'] = 'Plant Case D', ['tier'] = 1, ['type'] = 'Plant', ['mass'] = 3.52, ['volume'] = 4}, 620 - ['plantcasee'] = {['name'] = 'Plant Case E', ['tier'] = 1, ['type'] = 'Plant', ['mass'] = 3.52, ['volume'] = 4}, 621 - ['suspendedfruitplant'] = {['name'] = 'Suspended Fruit Plant', ['tier'] = 1, ['type'] = 'Plant', ['mass'] = 3.52, ['volume'] = 4}, 622 - ['suspendedplanta'] = {['name'] = 'Suspended Plant A', ['tier'] = 1, ['type'] = 'Plant', ['mass'] = 3.52, ['volume'] = 4}, 623 - ['suspendedplantb'] = {['name'] = 'Suspended Plant B', ['tier'] = 1, ['type'] = 'Plant', ['mass'] = 3.52, ['volume'] = 4}, 624 - ['baggedplanta'] = {['name'] = 'Bagged Plant A', ['tier'] = 1, ['type'] = 'Plant', ['mass'] = 3.52, ['volume'] = 4}, 625 - ['baggedplantb'] = {['name'] = 'Bagged Plant B', ['tier'] = 1, ['type'] = 'Plant', ['mass'] = 3.52, ['volume'] = 4}, 626 - ['plant'] = {['name'] = 'Plant', ['tier'] = 1, ['type'] = 'Plant', ['mass'] = 3.52, ['volume'] = 4}, 627 - ['bonsai'] = {['name'] = 'Bonsai', ['tier'] = 5, ['type'] = 'Plant', ['mass'] = 902.04, ['volume'] = 180.6}, 628 - ['eggplantplantcase'] = {['name'] = 'Eggplant Plant Case', ['tier'] = 1, ['type'] = 'Plant', ['mass'] = 31.9, ['volume'] = 24}, 629 - ['saladplantcase'] = {['name'] = 'Salad Plant Case', ['tier'] = 1, ['type'] = 'Plant', ['mass'] = 31.9, ['volume'] = 24}, 630 - ['squashplantcase'] = {['name'] = 'Squash Plant Case', ['tier'] = 1, ['type'] = 'Plant', ['mass'] = 31.9, ['volume'] = 24}, 631 - ['plantcases'] = {['name'] = 'Plant Case S', ['tier'] = 1, ['type'] = 'Plant', ['mass'] = 31.9, ['volume'] = 24}, 632 - ['plantcasem'] = {['name'] = 'Plant Case M', ['tier'] = 1, ['type'] = 'Plant', ['mass'] = 31.9, ['volume'] = 24}, 633 - ['ficusplanta'] = {['name'] = 'Ficus Plant A', ['tier'] = 1, ['type'] = 'Plant', ['mass'] = 31.9, ['volume'] = 24}, 634 - ['ficusplantb'] = {['name'] = 'Ficus Plant B', ['tier'] = 1, ['type'] = 'Plant', ['mass'] = 31.9, ['volume'] = 24}, 635 - ['foliageplantcasea'] = {['name'] = 'Foliage Plant Case A', ['tier'] = 1, ['type'] = 'Plant', ['mass'] = 31.9, ['volume'] = 24}, 636 - ['foliageplantcaseb'] = {['name'] = 'Foliage Plant Case B', ['tier'] = 1, ['type'] = 'Plant', ['mass'] = 31.9, ['volume'] = 24}, 637 - ['windowxs'] = {['name'] = 'Window XS', ['tier'] = 1, ['type'] = 'Window', ['mass'] = 47.32, ['volume'] = 24}, 638 - ['windows'] = {['name'] = 'Window S', ['tier'] = 1, ['type'] = 'Window', ['mass'] = 94.64, ['volume'] = 48}, 639 - ['windowm'] = {['name'] = 'Window M', ['tier'] = 1, ['type'] = 'Window', ['mass'] = 189.28, ['volume'] = 96}, 640 - ['windowl'] = {['name'] = 'Window L', ['tier'] = 1, ['type'] = 'Window', ['mass'] = 378.56, ['volume'] = 192}, 641 - ['armoredwindowxs'] = {['name'] = 'Armored Window XS', ['tier'] = 2, ['type'] = 'Window', ['mass'] = 47.16, ['volume'] = 24}, 642 - ['armoredwindows'] = {['name'] = 'Armored Window S', ['tier'] = 2, ['type'] = 'Window', ['mass'] = 94.32, ['volume'] = 48}, 643 - ['armoredwindowm'] = {['name'] = 'Armored Window M', ['tier'] = 2, ['type'] = 'Window', ['mass'] = 188.64, ['volume'] = 96}, 644 - ['armoredwindowl'] = {['name'] = 'Armored Window L', ['tier'] = 2, ['type'] = 'Window', ['mass'] = 377.28, ['volume'] = 192}, 645 - ['glasspanels'] = {['name'] = 'Glass Panel S', ['tier'] = 1, ['type'] = 'Window', ['mass'] = 5.02, ['volume'] = 4}, 646 - ['glasspanelm'] = {['name'] = 'Glass Panel M', ['tier'] = 1, ['type'] = 'Window', ['mass'] = 20.08, ['volume'] = 16}, 647 - ['glasspanell'] = {['name'] = 'Glass Panel L', ['tier'] = 1, ['type'] = 'Window', ['mass'] = 31.92, ['volume'] = 24}, 648 - ['baywindowxl'] = {['name'] = 'Bay Window XL', ['tier'] = 1, ['type'] = 'Window', ['mass'] = 5090, ['volume'] = 2544}, 649 - ['verticalwing'] = {['name'] = 'Vertical Wing', ['tier'] = 1, ['type'] = 'Winglets', ['mass'] = 20.3, ['volume'] = 4}, 650 - ['wingtips'] = {['name'] = 'Wing Tip S', ['tier'] = 1, ['type'] = 'Winglets', ['mass'] = 20.3, ['volume'] = 4}, 651 - ['wingtipm'] = {['name'] = 'Wing Tip M', ['tier'] = 1, ['type'] = 'Winglets', ['mass'] = 20.3, ['volume'] = 4}, 652 - ['wingtipl'] = {['name'] = 'Wing Tip L', ['tier'] = 1, ['type'] = 'Winglets', ['mass'] = 127.75, ['volume'] = 24}, 653 - ['aluminiumscrap'] = {['name'] = 'Aluminium Scrap', ['tier'] = 1, ['type'] = 'Scrap', ['mass'] = 2.7, ['volume'] = 1}, 654 - ['carbonscrap'] = {['name'] = 'Carbon Scrap', ['tier'] = 1, ['type'] = 'Scrap', ['mass'] = 2.27, ['volume'] = 1}, 655 - ['siliconscrap'] = {['name'] = 'Silicon Scrap', ['tier'] = 1, ['type'] = 'Scrap', ['mass'] = 2.33, ['volume'] = 1}, 656 - ['ironscrap'] = {['name'] = 'Iron Scrap', ['tier'] = 1, ['type'] = 'Scrap', ['mass'] = 7.85, ['volume'] = 1}, 657 - ['calciumscrap'] = {['name'] = 'Calcium Scrap', ['tier'] = 2, ['type'] = 'Scrap', ['mass'] = 1.55, ['volume'] = 1}, 658 - ['chromiumscrap'] = {['name'] = 'Chromium Scrap', ['tier'] = 2, ['type'] = 'Scrap', ['mass'] = 7.19, ['volume'] = 1}, 659 - ['copperscrap'] = {['name'] = 'Copper Scrap', ['tier'] = 2, ['type'] = 'Scrap', ['mass'] = 8.96, ['volume'] = 1}, 660 - ['sodiumscrap'] = {['name'] = 'Sodium Scrap', ['tier'] = 2, ['type'] = 'Scrap', ['mass'] = 0.97, ['volume'] = 1}, 661 - ['lithiumscrap'] = {['name'] = 'Lithium Scrap', ['tier'] = 3, ['type'] = 'Scrap', ['mass'] = 0.53, ['volume'] = 1}, 662 - ['nickelscrap'] = {['name'] = 'Nickel Scrap', ['tier'] = 3, ['type'] = 'Scrap', ['mass'] = 8.91, ['volume'] = 1}, 663 - ['silverscrap'] = {['name'] = 'Silver Scrap', ['tier'] = 3, ['type'] = 'Scrap', ['mass'] = 10.49, ['volume'] = 1}, 664 - ['sulfurscrap'] = {['name'] = 'Sulfur Scrap', ['tier'] = 3, ['type'] = 'Scrap', ['mass'] = 1.82, ['volume'] = 1}, 665 - ['cobaltscrap'] = {['name'] = 'Cobalt Scrap', ['tier'] = 4, ['type'] = 'Scrap', ['mass'] = 8.9, ['volume'] = 1}, 666 - ['fluorinescrap'] = {['name'] = 'Fluorine Scrap', ['tier'] = 4, ['type'] = 'Scrap', ['mass'] = 1.7, ['volume'] = 1}, 667 - ['goldscrap'] = {['name'] = 'Gold Scrap', ['tier'] = 4, ['type'] = 'Scrap', ['mass'] = 19.3, ['volume'] = 1}, 668 - ['scandiumscrap'] = {['name'] = 'Scandium Scrap', ['tier'] = 4, ['type'] = 'Scrap', ['mass'] = 2.98, ['volume'] = 1}, 669 - ['ironhoneycomb'] = {['name'] = 'Iron Honeycomb', ['tier'] = 1, ['type'] = 'Pure Honeycomb', ['mass'] = 78.5, ['volume'] = 10}, 670 - ['aluminiumhoneycomb'] = {['name'] = 'Aluminium Honeycomb', ['tier'] = 1, ['type'] = 'Pure Honeycomb', ['mass'] = 27, ['volume'] = 5}, 671 - ['carbonhoneycomb'] = {['name'] = 'Carbon Honeycomb', ['tier'] = 1, ['type'] = 'Pure Honeycomb', ['mass'] = 22.7, ['volume'] = 10}, 672 - ['siliconhoneycomb'] = {['name'] = 'Silicon Honeycomb', ['tier'] = 1, ['type'] = 'Pure Honeycomb', ['mass'] = 23.3, ['volume'] = 10}, 673 - ['copperhoneycomb'] = {['name'] = 'Copper Honeycomb', ['tier'] = 2, ['type'] = 'Pure Honeycomb', ['mass'] = 89.6, ['volume'] = 10}, 674 - ['chromiumhoneycomb'] = {['name'] = 'Chromium Honeycomb', ['tier'] = 2, ['type'] = 'Pure Honeycomb', ['mass'] = 71.9, ['volume'] = 10}, 675 - ['calciumhoneycomb'] = {['name'] = 'Calcium Honeycomb', ['tier'] = 2, ['type'] = 'Pure Honeycomb', ['mass'] = 15.5, ['volume'] = 10}, 676 - ['sodiumhoneycomb'] = {['name'] = 'Sodium Honeycomb', ['tier'] = 2, ['type'] = 'Pure Honeycomb', ['mass'] = 9.7, ['volume'] = 10}, 677 - ['lithiumhoneycomb'] = {['name'] = 'Lithium Honeycomb', ['tier'] = 3, ['type'] = 'Pure Honeycomb', ['mass'] = 5.3, ['volume'] = 10}, 678 - ['nickelhoneycomb'] = {['name'] = 'Nickel Honeycomb', ['tier'] = 3, ['type'] = 'Pure Honeycomb', ['mass'] = 89.1, ['volume'] = 10}, 679 - ['silverhoneycomb'] = {['name'] = 'Silver Honeycomb', ['tier'] = 3, ['type'] = 'Pure Honeycomb', ['mass'] = 104.9, ['volume'] = 10}, 680 - ['sulfurhoneycomb'] = {['name'] = 'Sulfur Honeycomb', ['tier'] = 3, ['type'] = 'Pure Honeycomb', ['mass'] = 18.19, ['volume'] = 10}, 681 - ['goldhoneycomb'] = {['name'] = 'Gold Honeycomb', ['tier'] = 4, ['type'] = 'Pure Honeycomb', ['mass'] = 193, ['volume'] = 10}, 682 - ['cobalthoneycomb'] = {['name'] = 'Cobalt Honeycomb', ['tier'] = 4, ['type'] = 'Pure Honeycomb', ['mass'] = 89, ['volume'] = 10}, 683 - ['fluorinehoneycomb'] = {['name'] = 'Fluorine Honeycomb', ['tier'] = 4, ['type'] = 'Pure Honeycomb', ['mass'] = 16.96, ['volume'] = 10}, 684 - ['scandiumhoneycomb'] = {['name'] = 'Scandium Honeycomb', ['tier'] = 4, ['type'] = 'Pure Honeycomb', ['mass'] = 29.85, ['volume'] = 10}, 685 - ['manganesehoneycomb'] = {['name'] = 'Manganese Honeycomb', ['tier'] = 5, ['type'] = 'Pure Honeycomb', ['mass'] = 72.1, ['volume'] = 10}, 686 - ['niobiumhoneycomb'] = {['name'] = 'Niobium Honeycomb', ['tier'] = 5, ['type'] = 'Pure Honeycomb', ['mass'] = 85.7, ['volume'] = 10}, 687 - ['titaniumhoneycomb'] = {['name'] = 'Titanium Honeycomb', ['tier'] = 5, ['type'] = 'Pure Honeycomb', ['mass'] = 45.1, ['volume'] = 10}, 688 - ['vanadiumhoneycomb'] = {['name'] = 'Vanadium Honeycomb', ['tier'] = 5, ['type'] = 'Pure Honeycomb', ['mass'] = 60, ['volume'] = 10}, 689 - ['plastichoneycomb'] = {['name'] = 'Plastic Honeycomb', ['tier'] = 1, ['type'] = 'Product Honeycomb', ['mass'] = 27.57, ['volume'] = 10}, 690 - ['woodhoneycomb'] = {['name'] = 'Wood Honeycomb', ['tier'] = 1, ['type'] = 'Product Honeycomb', ['mass'] = 27.19, ['volume'] = 10}, 691 - ['concretehoneycomb'] = {['name'] = 'Concrete Honeycomb', ['tier'] = 1, ['type'] = 'Product Honeycomb', ['mass'] = 27.57, ['volume'] = 10}, 692 - ['carbonfiberhoneycomb'] = {['name'] = 'Carbonfiber Honeycomb', ['tier'] = 2, ['type'] = 'Product Honeycomb', ['mass'] = 27.38, ['volume'] = 10}, 693 - ['brickhoneycomb'] = {['name'] = 'Brick Honeycomb', ['tier'] = 1, ['type'] = 'Product Honeycomb', ['mass'] = 27.57, ['volume'] = 10}, 694 - ['steelhoneycomb'] = {['name'] = 'Steel Honeycomb', ['tier'] = 2, ['type'] = 'Product Honeycomb', ['mass'] = 115.14, ['volume'] = 10}, 695 - ['marblehoneycomb'] = {['name'] = 'Marble Honeycomb', ['tier'] = 2, ['type'] = 'Product Honeycomb', ['mass'] = 129.4, ['volume'] = 10}, 696 - ['luminescentwhiteglass'] = {['name'] = 'Luminescent White Glass', ['tier'] = 1, ['type'] = 'Product Honeycomb', ['mass'] = 26, ['volume'] = 10}, 697 - ['resurrectionnode'] = {['name'] = 'Resurrection Node', ['tier'] = 2, ['type'] = 'Resurrection Node', ['mass'] = 728.43, ['volume'] = 203.33}, 698 - ['virtualscaffoldingprojector'] = {['name'] = 'Virtual Scaffolding Projector', ['tier'] = 4, ['type'] = 'Virtual Projector', ['mass'] = 167.11, ['volume'] = 122.4}, 699 - ['cannonxs'] = {['name'] = 'Cannon XS', ['tier'] = 1, ['type'] = 'Cannon', ['mass'] = 190.1, ['volume'] = 34.2}, 700 - ['cannons'] = {['name'] = 'Cannon S', ['tier'] = 2, ['type'] = 'Cannon', ['mass'] = 517.52, ['volume'] = 95.4}, 701 - ['cannonm'] = {['name'] = 'Cannon M', ['tier'] = 3, ['type'] = 'Cannon', ['mass'] = 2670, ['volume'] = 478}, 702 - ['cannonl'] = {['name'] = 'Cannon L', ['tier'] = 4, ['type'] = 'Cannon', ['mass'] = 15240, ['volume'] = 2614.2}, 703 - ['laserxs'] = {['name'] = 'Laser XS', ['tier'] = 1, ['type'] = 'Laser', ['mass'] = 118.55, ['volume'] = 39.2}, 704 - ['lasers'] = {['name'] = 'Laser S', ['tier'] = 2, ['type'] = 'Laser', ['mass'] = 508.26, ['volume'] = 120.2}, 705 - ['laserm'] = {['name'] = 'Laser M', ['tier'] = 3, ['type'] = 'Laser', ['mass'] = 2690, ['volume'] = 600.8}, 706 - ['laserl'] = {['name'] = 'Laser L', ['tier'] = 4, ['type'] = 'Laser', ['mass'] = 14770, ['volume'] = 3221}, 707 - ['missilexs'] = {['name'] = 'Missile XS', ['tier'] = 1, ['type'] = 'Missile', ['mass'] = 207.67, ['volume'] = 40.2}, 708 - ['missiles'] = {['name'] = 'Missile S', ['tier'] = 2, ['type'] = 'Missile', ['mass'] = 593.35, ['volume'] = 125.4}, 709 - ['missilem'] = {['name'] = 'Missile M', ['tier'] = 3, ['type'] = 'Missile', ['mass'] = 2970, ['volume'] = 628}, 710 - ['missilel'] = {['name'] = 'Missile L', ['tier'] = 4, ['type'] = 'Missile', ['mass'] = 16130, ['volume'] = 3364.2}, 711 - ['railgunxs'] = {['name'] = 'Railgun XS', ['tier'] = 1, ['type'] = 'Railgun', ['mass'] = 232.02, ['volume'] = 33.66}, 712 - ['railguns'] = {['name'] = 'Railgun S', ['tier'] = 2, ['type'] = 'Railgun', ['mass'] = 517.52, ['volume'] = 95.4}, 713 - ['railgunm'] = {['name'] = 'Railgun M', ['tier'] = 3, ['type'] = 'Railgun', ['mass'] = 3010, ['volume'] = 565.89}, 714 - ['railgunl'] = {['name'] = 'Railgun L', ['tier'] = 4, ['type'] = 'Railgun', ['mass'] = 16720, ['volume'] = 3054.89}, 715 - ['cannonagilekineticammoxs'] = {['name'] = 'Cannon Agile Kinetic Ammo XS', ['tier'] = 3, ['type'] = 'Cannon Ammo', ['mass'] = 1.61, ['volume'] = 1}, 716 - ['cannondefensekineticammoxs'] = {['name'] = 'Cannon Defense Kinetic Ammo XS', ['tier'] = 3, ['type'] = 'Cannon Ammo', ['mass'] = 1.59, ['volume'] = 1}, 717 - ['cannonheavykineticammoxs'] = {['name'] = 'Cannon Heavy Kinetic Ammo XS', ['tier'] = 3, ['type'] = 'Cannon Ammo', ['mass'] = 1.73, ['volume'] = 1}, 718 - ['cannonkineticammoxs'] = {['name'] = 'Cannon Kinetic Ammo XS', ['tier'] = 2, ['type'] = 'Cannon Ammo', ['mass'] = 1.54, ['volume'] = 1}, 719 - ['cannonprecisionkineticammoxs'] = {['name'] = 'Cannon Precision Kinetic Ammo XS', ['tier'] = 3, ['type'] = 'Cannon Ammo', ['mass'] = 1.54, ['volume'] = 1}, 720 - ['cannonagilethermicammoxs'] = {['name'] = 'Cannon Agile Thermic Ammo XS', ['tier'] = 3, ['type'] = 'Cannon Ammo', ['mass'] = 1.07, ['volume'] = 1}, 721 - ['cannondefensethermicammoxs'] = {['name'] = 'Cannon Defense Thermic Ammo XS', ['tier'] = 3, ['type'] = 'Cannon Ammo', ['mass'] = 1.05, ['volume'] = 1}, 722 - ['cannonheavythermicammoxs'] = {['name'] = 'Cannon Heavy Thermic Ammo XS', ['tier'] = 3, ['type'] = 'Cannon Ammo', ['mass'] = 1.19, ['volume'] = 1}, 723 - ['cannonprecisionthermicammoxs'] = {['name'] = 'Cannon Precision Thermic Ammo XS', ['tier'] = 3, ['type'] = 'Cannon Ammo', ['mass'] = 1.08, ['volume'] = 1}, 724 - ['cannonthermicammoxs'] = {['name'] = 'Cannon Thermic Ammo XS', ['tier'] = 2, ['type'] = 'Cannon Ammo', ['mass'] = 1.01, ['volume'] = 1}, 725 - ['cannonagilekineticammos'] = {['name'] = 'Cannon Agile Kinetic Ammo S', ['tier'] = 3, ['type'] = 'Cannon Ammo', ['mass'] = 4.1, ['volume'] = 5}, 726 - ['cannondefensekineticammos'] = {['name'] = 'Cannon Defense Kinetic Ammo S', ['tier'] = 3, ['type'] = 'Cannon Ammo', ['mass'] = 4.07, ['volume'] = 5}, 727 - ['cannonheavykineticammos'] = {['name'] = 'Cannon Heavy Kinetic Ammo S', ['tier'] = 3, ['type'] = 'Cannon Ammo', ['mass'] = 4.34, ['volume'] = 5}, 728 - ['cannonkineticammos'] = {['name'] = 'Cannon Kinetic Ammo S', ['tier'] = 2, ['type'] = 'Cannon Ammo', ['mass'] = 3.98, ['volume'] = 5}, 729 - ['cannonprecisionkineticammos'] = {['name'] = 'Cannon Precision Kinetic Ammo S', ['tier'] = 3, ['type'] = 'Cannon Ammo', ['mass'] = 4.11, ['volume'] = 5}, 730 - ['cannonagilethermicammos'] = {['name'] = 'Cannon Agile Thermic Ammo S', ['tier'] = 3, ['type'] = 'Cannon Ammo', ['mass'] = 3.2, ['volume'] = 5}, 731 - ['cannondefensethermicammos'] = {['name'] = 'Cannon Defense Thermic Ammo S', ['tier'] = 3, ['type'] = 'Cannon Ammo', ['mass'] = 2.99, ['volume'] = 5}, 732 - ['cannonheavythermicammos'] = {['name'] = 'Cannon Heavy Thermic Ammo S', ['tier'] = 3, ['type'] = 'Cannon Ammo', ['mass'] = 3.28, ['volume'] = 5}, 733 - ['cannonprecisionthermicammos'] = {['name'] = 'Cannon Precision Thermic Ammo S', ['tier'] = 3, ['type'] = 'Cannon Ammo', ['mass'] = 3.2, ['volume'] = 5}, 734 - ['cannonthermicammos'] = {['name'] = 'Cannon Thermic Ammo S', ['tier'] = 2, ['type'] = 'Cannon Ammo', ['mass'] = 2.93, ['volume'] = 5}, 735 - ['cannonagilekineticammom'] = {['name'] = 'Cannon Agile Kinetic Ammo M', ['tier'] = 3, ['type'] = 'Cannon Ammo', ['mass'] = 14.73, ['volume'] = 25}, 736 - ['cannondefensekineticammom'] = {['name'] = 'Cannon Defense Kinetic Ammo M', ['tier'] = 3, ['type'] = 'Cannon Ammo', ['mass'] = 14.66, ['volume'] = 25}, 737 - ['cannonheavykineticammom'] = {['name'] = 'Cannon Heavy Kinetic Ammo M', ['tier'] = 3, ['type'] = 'Cannon Ammo', ['mass'] = 15.21, ['volume'] = 25}, 738 - ['cannonkineticammom'] = {['name'] = 'Cannon Kinetic Ammo M', ['tier'] = 2, ['type'] = 'Cannon Ammo', ['mass'] = 14.66, ['volume'] = 25}, 739 - ['cannonprecisionkineticammom'] = {['name'] = 'Cannon Precision Kinetic Ammo M', ['tier'] = 3, ['type'] = 'Cannon Ammo', ['mass'] = 14.76, ['volume'] = 25}, 740 - ['cannonagilethermicammom'] = {['name'] = 'Cannon Agile Thermic Ammo M', ['tier'] = 3, ['type'] = 'Cannon Ammo', ['mass'] = 12.57, ['volume'] = 25}, 741 - ['cannondefensethermicammom'] = {['name'] = 'Cannon Defense Thermic Ammo M', ['tier'] = 3, ['type'] = 'Cannon Ammo', ['mass'] = 12.5, ['volume'] = 25}, 742 - ['cannonheavythermicammom'] = {['name'] = 'Cannon Heavy Thermic Ammo M', ['tier'] = 3, ['type'] = 'Cannon Ammo', ['mass'] = 13.05, ['volume'] = 25}, 743 - ['cannonprecisionthermicammom'] = {['name'] = 'Cannon Precision Thermic Ammo M', ['tier'] = 3, ['type'] = 'Cannon Ammo', ['mass'] = 12.6, ['volume'] = 25}, 744 - ['cannonthermicammom'] = {['name'] = 'Cannon Thermic Ammo M', ['tier'] = 2, ['type'] = 'Cannon Ammo', ['mass'] = 12.55, ['volume'] = 25}, 745 - ['cannonagilekineticammol'] = {['name'] = 'Cannon Agile Kinetic Ammo L', ['tier'] = 3, ['type'] = 'Cannon Ammo', ['mass'] = 75.56, ['volume'] = 125}, 746 - ['cannondefensekineticammol'] = {['name'] = 'Cannon Defense Kinetic Ammo L', ['tier'] = 3, ['type'] = 'Cannon Ammo', ['mass'] = 75.42, ['volume'] = 125}, 747 - ['cannonheavykineticammol'] = {['name'] = 'Cannon Heavy Kinetic Ammo L', ['tier'] = 3, ['type'] = 'Cannon Ammo', ['mass'] = 76.52, ['volume'] = 125}, 748 - ['cannonkineticammol'] = {['name'] = 'Cannon Kinetic Ammo L', ['tier'] = 2, ['type'] = 'Cannon Ammo', ['mass'] = 76.58, ['volume'] = 125}, 749 - ['cannonprecisionkineticammol'] = {['name'] = 'Cannon Precision Kinetic Ammo L', ['tier'] = 3, ['type'] = 'Cannon Ammo', ['mass'] = 75.61, ['volume'] = 125}, 750 - ['cannonagilethermicammol'] = {['name'] = 'Cannon Agile Thermic Ammo L', ['tier'] = 3, ['type'] = 'Cannon Ammo', ['mass'] = 71.24, ['volume'] = 125}, 751 - ['cannondefensethermicammol'] = {['name'] = 'Cannon Defense Thermic Ammo L', ['tier'] = 3, ['type'] = 'Cannon Ammo', ['mass'] = 71.1, ['volume'] = 125}, 752 - ['cannonheavythermicammol'] = {['name'] = 'Cannon Heavy Thermic Ammo L', ['tier'] = 3, ['type'] = 'Cannon Ammo', ['mass'] = 72.2, ['volume'] = 125}, 753 - ['cannonprecisionthermicammol'] = {['name'] = 'Cannon Precision Thermic Ammo L', ['tier'] = 3, ['type'] = 'Cannon Ammo', ['mass'] = 71.29, ['volume'] = 125}, 754 - ['cannonthermicammol'] = {['name'] = 'Cannon Thermic Ammo L', ['tier'] = 2, ['type'] = 'Cannon Ammo', ['mass'] = 72.37, ['volume'] = 125}, 755 - ['laseragileelectromagneticammoxs'] = {['name'] = 'Laser Agile Electromagnetic Ammo XS', ['tier'] = 3, ['type'] = 'Laser Ammo', ['mass'] = 31.56, ['volume'] = 2}, 756 - ['laserdefenseelectromagneticammoxs'] = {['name'] = 'Laser Defense Electromagnetic Ammo XS', ['tier'] = 3, ['type'] = 'Laser Ammo', ['mass'] = 1.54, ['volume'] = 2}, 757 - ['laserelectromagneticammoxs'] = {['name'] = 'Laser Electromagnetic Ammo XS', ['tier'] = 2, ['type'] = 'Laser Ammo', ['mass'] = 1.46, ['volume'] = 2}, 758 - ['laserheavyelectromagneticammoxs'] = {['name'] = 'Laser Heavy Electromagnetic Ammo XS', ['tier'] = 3, ['type'] = 'Laser Ammo', ['mass'] = 1.68}, 759 - ['laserprecisionelectromagneticammoxs'] = {['name'] = 'Laser Precision Electromagnetic Ammo XS', ['tier'] = 3, ['type'] = 'Laser Ammo', ['mass'] = 1.56, ['volume'] = 2}, 760 - ['laseragilethermicammoxs'] = {['name'] = 'Laser Agile Thermic Ammo XS', ['tier'] = 3, ['type'] = 'Laser Ammo', ['mass'] = 0.67, ['volume'] = 2}, 761 - ['laserdefensethermicammoxs'] = {['name'] = 'Laser Defense Thermic Ammo XS', ['tier'] = 3, ['type'] = 'Laser Ammo', ['mass'] = 0.65, ['volume'] = 2}, 762 - ['laserheavythermicammoxs'] = {['name'] = 'Laser Heavy Thermic Ammo XS', ['tier'] = 3, ['type'] = 'Laser Ammo', ['mass'] = 0.79, ['volume'] = 2}, 763 - ['laserprecisionthermicammoxs'] = {['name'] = 'Laser Precision Thermic Ammo XS', ['tier'] = 3, ['type'] = 'Laser Ammo', ['mass'] = 0.67, ['volume'] = 2}, 764 - ['laserthermicammoxs'] = {['name'] = 'Laser Thermic Ammo XS', ['tier'] = 2, ['type'] = 'Laser Ammo', ['mass'] = 0.6, ['volume'] = 2}, 765 - ['laseragileelectromagneticammos'] = {['name'] = 'Laser Agile Electromagnetic Ammo S', ['tier'] = 3, ['type'] = 'Laser Ammo', ['mass'] = 3.21, ['volume'] = 10}, 766 - ['laserdefenseelectromagneticammos'] = {['name'] = 'Laser Defense Electromagnetic Ammo S', ['tier'] = 3, ['type'] = 'Laser Ammo', ['mass'] = 3.18, ['volume'] = 10}, 767 - ['laserelectromagneticammos'] = {['name'] = 'Laser Electromagnetic Ammo S', ['tier'] = 2, ['type'] = 'Laser Ammo', ['mass'] = 3.03, ['volume'] = 10}, 768 - ['laserheavyelectromagneticammos'] = {['name'] = 'Laser Heavy Electromagnetic Ammo S', ['tier'] = 3, ['type'] = 'Laser Ammo', ['mass'] = 3.45, ['volume'] = 10}, 769 - ['laserprecisionelectromagneticammos'] = {['name'] = 'Laser Precision Electromagnetic Ammo S', ['tier'] = 3, ['type'] = 'Laser Ammo', ['mass'] = 3.23, ['volume'] = 10}, 770 - ['laseragilethermicammos'] = {['name'] = 'Laser Agile Thermic Ammo S', ['tier'] = 3, ['type'] = 'Laser Ammo', ['mass'] = 1.44, ['volume'] = 10}, 771 - ['laserdefensethermicammos'] = {['name'] = 'Laser Defense Thermic Ammo S', ['tier'] = 3, ['type'] = 'Laser Ammo', ['mass'] = 1.4, ['volume'] = 10}, 772 - ['laserheavythermicammos'] = {['name'] = 'Laser Heavy Thermic Ammo S', ['tier'] = 3, ['type'] = 'Laser Ammo', ['mass'] = 1.68, ['volume'] = 10}, 773 - ['laserprecisionthermicammos'] = {['name'] = 'Laser Precision Thermic Ammo S', ['tier'] = 3, ['type'] = 'Laser Ammo', ['mass'] = 1.45, ['volume'] = 10}, 774 - ['laserthermicammos'] = {['name'] = 'Laser Thermic Ammo S', ['tier'] = 2, ['type'] = 'Laser Ammo', ['mass'] = 1.31, ['volume'] = 10}, 775 - ['laseragileelectromagneticammom'] = {['name'] = 'Laser Agile Electromagnetic Ammo M', ['tier'] = 3, ['type'] = 'Laser Ammo', ['mass'] = 7.19, ['volume'] = 50}, 776 - ['laserdefenseelectromagneticammom'] = {['name'] = 'Laser Defense Electromagnetic Ammo M', ['tier'] = 3, ['type'] = 'Laser Ammo', ['mass'] = 7.12, ['volume'] = 50}, 777 - ['laserelectromagneticammom'] = {['name'] = 'Laser Electromagnetic Ammo M', ['tier'] = 2, ['type'] = 'Laser Ammo', ['mass'] = 6.78, ['volume'] = 50}, 778 - ['laserheavyelectromagneticammom'] = {['name'] = 'Laser Heavy Electromagnetic Ammo M', ['tier'] = 3, ['type'] = 'Laser Ammo', ['mass'] = 7.67, ['volume'] = 50}, 779 - ['laserprecisionelectromagneticammom'] = {['name'] = 'Laser Precision Electromagnetic Ammo M', ['tier'] = 3, ['type'] = 'Laser Ammo', ['mass'] = 7.22, ['volume'] = 50}, 780 - ['laseragilethermicammom'] = {['name'] = 'Laser Agile Thermic Ammo M', ['tier'] = 3, ['type'] = 'Laser Ammo', ['mass'] = 3.64, ['volume'] = 50}, 781 - ['laserdefensethermicammom'] = {['name'] = 'Laser Defense Thermic Ammo M', ['tier'] = 3, ['type'] = 'Laser Ammo', ['mass'] = 3.56, ['volume'] = 50}, 782 - ['laserheavythermicammom'] = {['name'] = 'Laser Heavy Thermic Ammo M', ['tier'] = 3, ['type'] = 'Laser Ammo', ['mass'] = 3.56, ['volume'] = 50}, 783 - ['laserprecisionthermicammom'] = {['name'] = 'Laser Precision Thermic Ammo M', ['tier'] = 3, ['type'] = 'Laser Ammo', ['mass'] = 4.12, ['volume'] = 50}, 784 - ['laserthermicammom'] = {['name'] = 'Laser Thermic Ammo M', ['tier'] = 2, ['type'] = 'Laser Ammo', ['mass'] = 3.34, ['volume'] = 50}, 785 - ['laseragileelectromagneticammol'] = {['name'] = 'Laser Agile Electromagnetic Ammo L', ['tier'] = 3, ['type'] = 'Laser Ammo', ['mass'] = 19.77, ['volume'] = 250}, 786 - ['laserdefenseelectromagneticammol'] = {['name'] = 'Laser Defense Electromagnetic Ammo L', ['tier'] = 3, ['type'] = 'Laser Ammo', ['mass'] = 19.62, ['volume'] = 250}, 787 - ['laserelectromagneticammol'] = {['name'] = 'Laser Electromagnetic Ammo L', ['tier'] = 2, ['type'] = 'Laser Ammo', ['mass'] = 18.7, ['volume'] = 250}, 788 - ['laserheavyelectromagneticammol'] = {['name'] = 'Laser Heavy Electromagnetic Ammo L', ['tier'] = 3, ['type'] = 'Laser Ammo', ['mass'] = 20.73, ['volume'] = 250}, 789 - ['laserprecisionelectromagneticammol'] = {['name'] = 'Laser Precision Electromagnetic Ammo L', ['tier'] = 3, ['type'] = 'Laser Ammo', ['mass'] = 19.81, ['volume'] = 250}, 790 - ['laseragilethermicammol'] = {['name'] = 'Laser Agile Thermic Ammo L', ['tier'] = 3, ['type'] = 'Laser Ammo', ['mass'] = 12.65, ['volume'] = 250}, 791 - ['laserdefensethermicammol'] = {['name'] = 'Laser Defense Thermic Ammo L', ['tier'] = 3, ['type'] = 'Laser Ammo', ['mass'] = 12.51, ['volume'] = 250}, 792 - ['laserheavythermicammol'] = {['name'] = 'Laser Heavy Thermic Ammo L', ['tier'] = 3, ['type'] = 'Laser Ammo', ['mass'] = 13.61, ['volume'] = 250}, 793 - ['laserprecisionthermicammol'] = {['name'] = 'Laser Precision Thermic Ammo L', ['tier'] = 3, ['type'] = 'Laser Ammo', ['mass'] = 12.7, ['volume'] = 250}, 794 - ['laserthermicammol'] = {['name'] = 'Laser Thermic Ammo L', ['tier'] = 2, ['type'] = 'Laser Ammo', ['mass'] = 11.81, ['volume'] = 250}, 795 - ['missileagileantimatterammoxs'] = {['name'] = 'Missile Agile Antimatter Ammo XS', ['tier'] = 3, ['type'] = 'Missile Ammo', ['mass'] = 0.94, ['volume'] = 5}, 796 - ['missileantimatterammoxs'] = {['name'] = 'Missile Antimatter Ammo XS', ['tier'] = 2, ['type'] = 'Missile Ammo', ['mass'] = 0.87, ['volume'] = 5}, 797 - ['missiledefenseantimatterammoxs'] = {['name'] = 'Missile Defense Antimatter Ammo XS', ['tier'] = 3, ['type'] = 'Missile Ammo', ['mass'] = 0.92, ['volume'] = 5}, 798 - ['missileheavyantimatterammoxs'] = {['name'] = 'Missile Heavy Antimatter Ammo XS', ['tier'] = 3, ['type'] = 'Missile Ammo', ['mass'] = 1.06, ['volume'] = 5}, 799 - ['missileprecisionantimatterammoxs'] = {['name'] = 'Missile Precision Antimatter Ammo XS', ['tier'] = 3, ['type'] = 'Missile Ammo', ['mass'] = 0.95, ['volume'] = 5}, 800 - ['missileagilekineticammoxs'] = {['name'] = 'Missile Agile Kinetic Ammo XS', ['tier'] = 3, ['type'] = 'Missile Ammo', ['mass'] = 1.37, ['volume'] = 5}, 801 - ['missiledefensekineticammoxs'] = {['name'] = 'Missile Defense Kinetic Ammo XS', ['tier'] = 3, ['type'] = 'Missile Ammo', ['mass'] = 1.35, ['volume'] = 5}, 802 - ['missileheavykineticammoxs'] = {['name'] = 'Missile Heavy Kinetic Ammo XS', ['tier'] = 3, ['type'] = 'Missile Ammo', ['mass'] = 1.49, ['volume'] = 5}, 803 - ['missilekineticammoxs'] = {['name'] = 'Missile Kinetic Ammo XS', ['tier'] = 2, ['type'] = 'Missile Ammo', ['mass'] = 1.29, ['volume'] = 5}, 804 - ['missileprecisionkineticammoxs'] = {['name'] = 'Missile Precision Kinetic Ammo XS', ['tier'] = 3, ['type'] = 'Missile Ammo', ['mass'] = 1.38, ['volume'] = 5}, 805 - ['missileagileantimatterammos'] = {['name'] = 'Missile Agile Antimatter Ammo S', ['tier'] = 3, ['type'] = 'Missile Ammo', ['mass'] = 2.16, ['volume'] = 25}, 806 - ['missileantimatterammos'] = {['name'] = 'Missile Antimatter Ammo S', ['tier'] = 2, ['type'] = 'Missile Ammo', ['mass'] = 2.16, ['volume'] = 25}, 807 - ['missiledefenseantimatterammos'] = {['name'] = 'Missile Defense Antimatter Ammo S', ['tier'] = 3, ['type'] = 'Missile Ammo', ['mass'] = 2.12, ['volume'] = 25}, 808 - ['missileheavyantimatterammos'] = {['name'] = 'Missile Heavy Antimatter Ammo S', ['tier'] = 3, ['type'] = 'Missile Ammo', ['mass'] = 2.4, ['volume'] = 25}, 809 - ['missileprecisionantimatterammos'] = {['name'] = 'Missile Precision Antimatter Ammo S', ['tier'] = 3, ['type'] = 'Missile Ammo', ['mass'] = 2.17, ['volume'] = 25}, 810 - ['missileagilekineticammos'] = {['name'] = 'Missile Agile Kinetic Ammo S', ['tier'] = 3, ['type'] = 'Missile Ammo', ['mass'] = 3.02, ['volume'] = 25}, 811 - ['missiledefensekineticammos'] = {['name'] = 'Missile Defense Kinetic Ammo S', ['tier'] = 3, ['type'] = 'Missile Ammo', ['mass'] = 2.99, ['volume'] = 25}, 812 - ['missileheavykineticammos'] = {['name'] = 'Missile Heavy Kinetic Ammo S', ['tier'] = 3, ['type'] = 'Missile Ammo', ['mass'] = 3.26, ['volume'] = 25}, 813 - ['missilekineticammos'] = {['name'] = 'Missile Kinetic Ammo S', ['tier'] = 2, ['type'] = 'Missile Ammo', ['mass'] = 2.87, ['volume'] = 25}, 814 - ['missileprecisionkineticammos'] = {['name'] = 'Missile Precision Kinetic Ammo S', ['tier'] = 3, ['type'] = 'Missile Ammo', ['mass'] = 3.03, ['volume'] = 25}, 815 - ['missileagileantimatterammom'] = {['name'] = 'Missile Agile Antimatter Ammo M', ['tier'] = 3, ['type'] = 'Missile Ammo', ['mass'] = 6.41, ['volume'] = 125}, 816 - ['missileantimatterammom'] = {['name'] = 'Missile Antimatter Ammo M', ['tier'] = 2, ['type'] = 'Missile Ammo', ['mass'] = 6.24, ['volume'] = 125}, 817 - ['missiledefenseantimatterammom'] = {['name'] = 'Missile Defense Antimatter Ammo M', ['tier'] = 3, ['type'] = 'Missile Ammo', ['mass'] = 6.33, ['volume'] = 125}, 818 - ['missileheavyantimatterammom'] = {['name'] = 'Missile Heavy Antimatter Ammo M', ['tier'] = 3, ['type'] = 'Missile Ammo', ['mass'] = 6.89, ['volume'] = 125}, 819 - ['missileprecisionantimatterammom'] = {['name'] = 'Missile Precision Antimatter Ammo M', ['tier'] = 3, ['type'] = 'Missile Ammo', ['mass'] = 6.43, ['volume'] = 125}, 820 - ['missileagilekineticammom'] = {['name'] = 'Missile Agile Kinetic Ammo M', ['tier'] = 3, ['type'] = 'Missile Ammo', ['mass'] = 8.13, ['volume'] = 125}, 821 - ['missiledefensekineticammom'] = {['name'] = 'Missile Defense Kinetic Ammo M', ['tier'] = 3, ['type'] = 'Missile Ammo', ['mass'] = 8.06, ['volume'] = 125}, 822 - ['missileheavykineticammom'] = {['name'] = 'Missile Heavy Kinetic Ammo M', ['tier'] = 3, ['type'] = 'Missile Ammo', ['mass'] = 8.61, ['volume'] = 125}, 823 - ['missilekineticammom'] = {['name'] = 'Missile Kinetic Ammo M', ['tier'] = 2, ['type'] = 'Missile Ammo', ['mass'] = 7.92, ['volume'] = 125}, 824 - ['missileprecisionkineticammom'] = {['name'] = 'Missile Precision Kinetic Ammo M', ['tier'] = 3, ['type'] = 'Missile Ammo', ['mass'] = 8.15, ['volume'] = 125}, 825 - ['missileagileantimatterammol'] = {['name'] = 'Missile Agile Antimatter Ammo L', ['tier'] = 3, ['type'] = 'Missile Ammo', ['mass'] = 27.54, ['volume'] = 625}, 826 - ['missileantimatterammol'] = {['name'] = 'Missile Antimatter Ammo L', ['tier'] = 2, ['type'] = 'Missile Ammo', ['mass'] = 27.9, ['volume'] = 625}, 827 - ['missiledefenseantimatterammol'] = {['name'] = 'Missile Defense Antimatter Ammo L', ['tier'] = 3, ['type'] = 'Missile Ammo', ['mass'] = 6.33, ['volume'] = 625}, 828 - ['missileheavyantimatterammol'] = {['name'] = 'Missile Heavy Antimatter Ammo L', ['tier'] = 3, ['type'] = 'Missile Ammo', ['mass'] = 27.4, ['volume'] = 625}, 829 - ['missileprecisionantimatterammol'] = {['name'] = 'Missile Precision Antimatter Ammo L', ['tier'] = 3, ['type'] = 'Missile Ammo', ['mass'] = 27.59, ['volume'] = 625}, 830 - ['missileagilekineticammol'] = {['name'] = 'Missile Agile Kinetic Ammo L', ['tier'] = 3, ['type'] = 'Missile Ammo', ['mass'] = 30.99, ['volume'] = 625}, 831 - ['missiledefensekineticammol'] = {['name'] = 'Missile Defense Kinetic Ammo L', ['tier'] = 3, ['type'] = 'Missile Ammo', ['mass'] = 30.84, ['volume'] = 625}, 832 - ['missileheavykineticammol'] = {['name'] = 'Missile Heavy Kinetic Ammo L', ['tier'] = 3, ['type'] = 'Missile Ammo', ['mass'] = 31.95, ['volume'] = 625}, 833 - ['missilekineticammol'] = {['name'] = 'Missile Kinetic Ammo L', ['tier'] = 2, ['type'] = 'Missile Ammo', ['mass'] = 31.26, ['volume'] = 625}, 834 - ['missileprecisionkineticammol'] = {['name'] = 'Missile Precision Kinetic Ammo L', ['tier'] = 3, ['type'] = 'Missile Ammo', ['mass'] = 31.04, ['volume'] = 625}, 835 - ['railgunagileantimatterammoxs'] = {['name'] = 'Railgun Agile Antimatter Ammo XS', ['tier'] = 3, ['type'] = 'Railgun Ammo', ['mass'] = 2.04, ['volume'] = 10}, 836 - ['railgunantimatterammoxs'] = {['name'] = 'Railgun Antimatter Ammo XS', ['tier'] = 2, ['type'] = 'Railgun Ammo', ['mass'] = 2.01, ['volume'] = 10}, 837 - ['railgundefenseantimatterammoxs'] = {['name'] = 'Railgun Defense Antimatter Ammo XS', ['tier'] = 3, ['type'] = 'Railgun Ammo', ['mass'] = 2.02, ['volume'] = 10}, 838 - ['railgunheavyantimatterammoxs'] = {['name'] = 'Railgun Heavy Antimatter Ammo XS', ['tier'] = 3, ['type'] = 'Railgun Ammo', ['mass'] = 2.16, ['volume'] = 10}, 839 - ['railgunprecisionantimatterammoxs'] = {['name'] = 'Railgun Precision Antimatter Ammo XS', ['tier'] = 3, ['type'] = 'Railgun Ammo', ['mass'] = 2.05, ['volume'] = 10}, 840 - ['railgunagileelectromagneticammoxs'] = {['name'] = 'Railgun Agile Electromagnetic Ammo XS', ['tier'] = 3, ['type'] = 'Railgun Ammo', ['mass'] = 2.77, ['volume'] = 10}, 841 - ['railgundefenseelectromagneticammoxs'] = {['name'] = 'Railgun Defense Electromagnetic Ammo XS', ['tier'] = 3, ['type'] = 'Railgun Ammo', ['mass'] = 2.8, ['volume'] = 10}, 842 - ['railgunelectromagneticammoxs'] = {['name'] = 'Railgun Electromagnetic Ammo XS', ['tier'] = 2, ['type'] = 'Railgun Ammo', ['mass'] = 6.43, ['volume'] = 10}, 843 - ['railgunheavyelectromagneticammoxs'] = {['name'] = 'Railgun Heavy Electromagnetic Ammo XS', ['tier'] = 3, ['type'] = 'Railgun Ammo', ['mass'] = 2.94, ['volume'] = 10}, 844 - ['railgunprecisionelectromagneticammoxs'] = {['name'] = 'Railgun Precision Electromagnetic Ammo XS', ['tier'] = 3, ['type'] = 'Railgun Ammo', ['mass'] = 2.83, ['volume'] = 10}, 845 - ['railgunagileantimatterammos'] = {['name'] = 'Railgun Agile Antimatter Ammo S', ['tier'] = 3, ['type'] = 'Railgun Ammo', ['mass'] = 4.96, ['volume'] = 50}, 846 - ['railgunantimatterammos'] = {['name'] = 'Railgun Antimatter Ammo S', ['tier'] = 2, ['type'] = 'Railgun Ammo', ['mass'] = 4.92, ['volume'] = 50}, 847 - ['railgundefenseantimatterammos'] = {['name'] = 'Railgun Defense Antimatter Ammo S', ['tier'] = 3, ['type'] = 'Railgun Ammo', ['mass'] = 4.93, ['volume'] = 50}, 848 - ['railgunheavyantimatterammos'] = {['name'] = 'Railgun Heavy Antimatter Ammo S', ['tier'] = 3, ['type'] = 'Railgun Ammo', ['mass'] = 5.2, ['volume'] = 50}, 849 - ['railgunprecisionantimatterammos'] = {['name'] = 'Railgun Precision Antimatter Ammo S', ['tier'] = 3, ['type'] = 'Railgun Ammo', ['mass'] = 4.97, ['volume'] = 50}, 850 - ['railgunagileelectromagneticammos'] = {['name'] = 'Railgun Agile Electromagnetic Ammo S', ['tier'] = 3, ['type'] = 'Railgun Ammo', ['mass'] = 6.52, ['volume'] = 50}, 851 - ['railgundefenseelectromagneticammos'] = {['name'] = 'Railgun Defense Electromagnetic Ammo S', ['tier'] = 3, ['type'] = 'Railgun Ammo', ['mass'] = 6.49, ['volume'] = 50}, 852 - ['railgunelectromagneticammos'] = {['name'] = 'Railgun Electromagnetic Ammo S', ['tier'] = 2, ['type'] = 'Railgun Ammo', ['mass'] = 6.43, ['volume'] = 50}, 853 - ['railgunheavyelectromagneticammos'] = {['name'] = 'Railgun Heavy Electromagnetic Ammo S', ['tier'] = 3, ['type'] = 'Railgun Ammo', ['mass'] = 6.76, ['volume'] = 50}, 854 - ['railgunprecisionelectromagneticammos'] = {['name'] = 'Railgun Precision Electromagnetic Ammo S', ['tier'] = 3, ['type'] = 'Railgun Ammo', ['mass'] = 6.53, ['volume'] = 50}, 855 - ['railgunagileantimatterammom'] = {['name'] = 'Railgun Agile Antimatter Ammo M', ['tier'] = 3, ['type'] = 'Railgun Ammo', ['mass'] = 16.45, ['volume'] = 250}, 856 - ['railgunantimatterammom'] = {['name'] = 'Railgun Antimatter Ammo M', ['tier'] = 2, ['type'] = 'Railgun Ammo', ['mass'] = 16.54, ['volume'] = 250}, 857 - ['railgundefenseantimatterammom'] = {['name'] = 'Railgun Defense Antimatter Ammo M', ['tier'] = 3, ['type'] = 'Railgun Ammo', ['mass'] = 16.38, ['volume'] = 250}, 858 - ['railgunheavyantimatterammom'] = {['name'] = 'Railgun Heavy Antimatter Ammo M', ['tier'] = 3, ['type'] = 'Railgun Ammo', ['mass'] = 16.93, ['volume'] = 250}, 859 - ['railgunprecisionantimatterammom'] = {['name'] = 'Railgun Precision Antimatter Ammo M', ['tier'] = 3, ['type'] = 'Railgun Ammo', ['mass'] = 16.48, ['volume'] = 250}, 860 - ['railgunagileelectromagneticammom'] = {['name'] = 'Railgun Agile Electromagnetic Ammo M', ['tier'] = 3, ['type'] = 'Railgun Ammo', ['mass'] = 19.58, ['volume'] = 250}, 861 - ['railgundefenseelectromagneticammom'] = {['name'] = 'Railgun Defense Electromagnetic Ammo M', ['tier'] = 3, ['type'] = 'Railgun Ammo', ['mass'] = 19.5, ['volume'] = 250}, 862 - ['railgunelectromagneticammom'] = {['name'] = 'Railgun Electromagnetic Ammo M', ['tier'] = 2, ['type'] = 'Railgun Ammo', ['mass'] = 19.56, ['volume'] = 250}, 863 - ['railgunheavyelectromagneticammom'] = {['name'] = 'Railgun Heavy Electromagnetic Ammo M', ['tier'] = 3, ['type'] = 'Railgun Ammo', ['mass'] = 20.06, ['volume'] = 250}, 864 - ['railgunprecisionelectromagneticammom'] = {['name'] = 'Railgun Precision Electromagnetic Ammo M', ['tier'] = 3, ['type'] = 'Railgun Ammo', ['mass'] = 19.6, ['volume'] = 250}, 865 - ['railgunagileantimatterammol'] = {['name'] = 'Railgun Agile Antimatter Ammo L', ['tier'] = 3, ['type'] = 'Railgun Ammo', ['mass'] = 79, ['volume'] = 1250}, 866 - ['railgunantimatterammol'] = {['name'] = 'Railgun Antimatter Ammo L', ['tier'] = 2, ['type'] = 'Railgun Ammo', ['mass'] = 80.35, ['volume'] = 1250}, 867 - ['railgundefenseantimatterammol'] = {['name'] = 'Railgun Defense Antimatter Ammo L', ['tier'] = 3, ['type'] = 'Railgun Ammo', ['mass'] = 78.86, ['volume'] = 1250}, 868 - ['railgunheavyantimatterammol'] = {['name'] = 'Railgun Heavy Antimatter Ammo L', ['tier'] = 3, ['type'] = 'Railgun Ammo', ['mass'] = 79.96, ['volume'] = 1250}, 869 - ['railgunprecisionantimatterammol'] = {['name'] = 'Railgun Precision Antimatter Ammo L', ['tier'] = 3, ['type'] = 'Railgun Ammo', ['mass'] = 79.05, ['volume'] = 1250}, 870 - ['railgunagileelectromagneticammol'] = {['name'] = 'Railgun Agile Electromagnetic Ammo L', ['tier'] = 3, ['type'] = 'Railgun Ammo', ['mass'] = 85.24, ['volume'] = 1250}, 871 - ['railgundefenseelectromagneticammol'] = {['name'] = 'Railgun Defense Electromagnetic Ammo L', ['tier'] = 3, ['type'] = 'Railgun Ammo', ['mass'] = 85.1, ['volume'] = 1250}, 872 - ['railgunelectromagneticammol'] = {['name'] = 'Railgun Electromagnetic Ammo L', ['tier'] = 2, ['type'] = 'Railgun Ammo', ['mass'] = 86.4, ['volume'] = 1250}, 873 - ['railgunheavyelectromagneticammol'] = {['name'] = 'Railgun Heavy Electromagnetic Ammo L', ['tier'] = 3, ['type'] = 'Railgun Ammo', ['mass'] = 86.2, ['volume'] = 1250}, 874 - ['railgunprecisionelectromagneticammol'] = {['name'] = 'Railgun Precision Electromagnetic Ammo L', ['tier'] = 3, ['type'] = 'Railgun Ammo', ['mass'] = 85.29, ['volume'] = 1250}, 875 - ['warpcell'] = {['name'] = 'Warp Cell', ['tier'] = 2, ['type'] = 'Warp Cell', ['mass'] = 100, ['volume'] = 40}, 876 - ['warpdrivel'] = {['name'] = 'Warp Drive L', ['tier'] = 1, ['type'] = 'Warp Drive Unit', ['mass'] = 31360, ['volume'] = 75}, 877 - ['warpbeaconxl'] = {['name'] = 'Warp Beacon XL', ['tier'] = 5, ['type'] = 'Warp Beacon Unit', ['mass'] = 148940, ['volume'] = 25360}, 878 - ['hatchs'] = {['name'] = 'Hatch S', ['tier'] = 1, ['type'] = 'Door/Gate', ['mass'] = 229.09, ['volume'] = 64}, 879 - ['fuelintakexs'] = {['name'] = 'Fuel Intake XS', ['tier'] = 1, ['type'] = 'Door/Gate', ['mass'] = 4.12, ['volume'] = 2}, 880 - ['freightatmosphericenginexs'] = {['name'] = 'Freight Atmospheric Engine XS', ['tier'] = 2, ['type'] = 'Atmospheric Engine', ['mass'] = 101.88, ['volume'] = 22.6}, 881 - ['safeatmosphericenginexs'] = {['name'] = 'Safe Atmospheric Engine XS', ['tier'] = 2, ['type'] = 'Atmospheric Engine', ['mass'] = 101.88, ['volume'] = 22.6}, 882 - ['maneuveratmosphericenginexs'] = {['name'] = 'Maneuver Atmospheric Engine XS', ['tier'] = 2, ['type'] = 'Atmospheric Engine', ['mass'] = 101.88, ['volume'] = 22.6}, 883 - ['militaryatmosphericenginexs'] = {['name'] = 'Military Atmospheric Engine XS', ['tier'] = 2, ['type'] = 'Atmospheric Engine', ['mass'] = 101.88, ['volume'] = 22.6}, 884 - ['freightatmosphericengines'] = {['name'] = 'Freight Atmospheric Engine S', ['tier'] = 2, ['type'] = 'Atmospheric Engine', ['mass'] = 539.99, ['volume'] = 116.6}, 885 - ['maneuveratmosphericengines'] = {['name'] = 'Maneuver Atmospheric Engine S', ['tier'] = 2, ['type'] = 'Atmospheric Engine', ['mass'] = 539.99, ['volume'] = 116.6}, 886 - ['militaryatmosphericengines'] = {['name'] = 'Military Atmospheric Engine S', ['tier'] = 2, ['type'] = 'Atmospheric Engine', ['mass'] = 539.99, ['volume'] = 116.6}, 887 - ['safeatmosphericengines'] = {['name'] = 'Safe Atmospheric Engine S', ['tier'] = 2, ['type'] = 'Atmospheric Engine', ['mass'] = 539.99, ['volume'] = 116.6}, 888 - ['freightatmosphericenginem'] = {['name'] = 'Freight Atmospheric Engine M', ['tier'] = 2, ['type'] = 'Atmospheric Engine', ['mass'] = 2980, ['volume'] = 619.2}, 889 - ['maneuveratmosphericenginem'] = {['name'] = 'Maneuver Atmospheric Engine M', ['tier'] = 2, ['type'] = 'Atmospheric Engine', ['mass'] = 2980, ['volume'] = 619.2}, 890 - ['militaryatmosphericenginem'] = {['name'] = 'Military Atmospheric Engine M', ['tier'] = 2, ['type'] = 'Atmospheric Engine', ['mass'] = 2980, ['volume'] = 619.2}, 891 - ['safeatmosphericenginem'] = {['name'] = 'Safe Atmospheric Engine M', ['tier'] = 2, ['type'] = 'Atmospheric Engine', ['mass'] = 2980, ['volume'] = 619.2}, 892 - ['freightatmosphericenginel'] = {['name'] = 'Freight Atmospheric Engine L', ['tier'] = 2, ['type'] = 'Atmospheric Engine', ['mass'] = 16930, ['volume'] = 3355.4}, 893 - ['maneuveratmosphericenginel'] = {['name'] = 'Maneuver Atmospheric Engine L', ['tier'] = 2, ['type'] = 'Atmospheric Engine', ['mass'] = 16930, ['volume'] = 3355.4}, 894 - ['militaryatmosphericenginel'] = {['name'] = 'Military Atmospheric Engine L', ['tier'] = 2, ['type'] = 'Atmospheric Engine', ['mass'] = 16930, ['volume'] = 3355.4}, 895 - ['safeatmosphericenginel'] = {['name'] = 'Safe Atmospheric Engine L', ['tier'] = 2, ['type'] = 'Atmospheric Engine', ['mass'] = 16930, ['volume'] = 3355.4}, 896 - ['freightspaceenginexs'] = {['name'] = 'Freight Space Engine XS', ['tier'] = 2, ['type'] = 'Space Engine', ['mass'] = 146.23, ['volume'] = 20.33}, 897 - ['maneuverspaceenginexs'] = {['name'] = 'Maneuver Space Engine XS', ['tier'] = 2, ['type'] = 'Space Engine', ['mass'] = 146.23, ['volume'] = 20.33}, 898 - ['militaryspaceenginexs'] = {['name'] = 'Military Space Engine XS', ['tier'] = 2, ['type'] = 'Space Engine', ['mass'] = 146.23, ['volume'] = 20.33}, 899 - ['safespaceenginexs'] = {['name'] = 'Safe Space Engine XS', ['tier'] = 2, ['type'] = 'Space Engine', ['mass'] = 146.23, ['volume'] = 20.33}, 900 - ['freightspaceengines'] = {['name'] = 'Freight Space Engine S', ['tier'] = 2, ['type'] = 'Space Engine', ['mass'] = 761.74, ['volume'] = 105.24}, 901 - ['maneuverspaceengines'] = {['name'] = 'Maneuver Space Engine S', ['tier'] = 2, ['type'] = 'Space Engine', ['mass'] = 761.74, ['volume'] = 105.24}, 902 - ['militaryspaceengines'] = {['name'] = 'Military Space Engine S', ['tier'] = 2, ['type'] = 'Space Engine', ['mass'] = 761.74, ['volume'] = 105.24}, 903 - ['safespaceengines'] = {['name'] = 'Safe Space Engine S', ['tier'] = 2, ['type'] = 'Space Engine', ['mass'] = 761.74, ['volume'] = 105.24}, 904 - ['freightspaceenginem'] = {['name'] = 'Freight Space Engine M', ['tier'] = 2, ['type'] = 'Space Engine', ['mass'] = 4090, ['volume'] = 562.4}, 905 - ['maneuverspaceenginem'] = {['name'] = 'Maneuver Space Engine M', ['tier'] = 2, ['type'] = 'Space Engine', ['mass'] = 4090, ['volume'] = 562.4}, 906 - ['militaryspaceenginem'] = {['name'] = 'Military Space Engine M', ['tier'] = 2, ['type'] = 'Space Engine', ['mass'] = 4090, ['volume'] = 562.4}, 907 - ['safespaceenginem'] = {['name'] = 'Safe Space Engine M', ['tier'] = 2, ['type'] = 'Space Engine', ['mass'] = 4090, ['volume'] = 562.4}, 908 - ['freightspaceenginel'] = {['name'] = 'Freight Space Engine L', ['tier'] = 2, ['type'] = 'Space Engine', ['mass'] = 22470, ['volume'] = 3071.4}, 909 - ['maneuverspaceenginel'] = {['name'] = 'Maneuver Space Engine L', ['tier'] = 2, ['type'] = 'Space Engine', ['mass'] = 22470, ['volume'] = 3071.4}, 910 - ['militaryspaceenginel'] = {['name'] = 'Military Space Engine L', ['tier'] = 2, ['type'] = 'Space Engine', ['mass'] = 22470, ['volume'] = 3071.4}, 911 - ['safespaceenginel'] = {['name'] = 'Safe Space Engine L', ['tier'] = 2, ['type'] = 'Space Engine', ['mass'] = 22470, ['volume'] = 3071.4}, 912 - ['freightspaceenginexl'] = {['name'] = 'Freight Space Engine XL', ['tier'] = 2, ['type'] = 'Space Engine', ['mass'] = 126240, ['volume'] = 17150}, 913 - ['maneuverspaceenginexl'] = {['name'] = 'Maneuver Space Engine XL', ['tier'] = 2, ['type'] = 'Space Engine', ['mass'] = 126240, ['volume'] = 17150}, 914 - ['militaryspaceenginexl'] = {['name'] = 'Military Space Engine XL', ['tier'] = 2, ['type'] = 'Space Engine', ['mass'] = 126240, ['volume'] = 17150}, 915 - ['safespaceenginexl'] = {['name'] = 'Safe Space Engine XL', ['tier'] = 2, ['type'] = 'Space Engine', ['mass'] = 126240, ['volume'] = 17150}, 916 - ['repairunit'] = {['name'] = 'Repair Unit', ['tier'] = 1, ['type'] = 'Combat Element', ['mass'] = 400, ['volume'] = 0}, 917 - ['surrogatepodstation'] = {['name'] = 'Surrogate Pod Station', ['tier'] = 1, ['type'] = 'Surrogate Element', ['mass'] = 569.52, ['volume'] = 360}, 918 - ['surrogatevrstation'] = {['name'] = 'Surrogate VR Station', ['tier'] = 1, ['type'] = 'Surrogate Element', ['mass'] = 742.42, ['volume'] = 360.2} 919 - }
+1 -3
Master program/source/system/onActionStart_Option1.lua
··· 1 1 if enableRemoteControl == true then 2 - system.print("command 1") 3 2 --Send Command 1 4 3 local selected_machine = elements[selected_machine_index] 5 4 for _,db in pairs(databanks) do 6 - --selected_machine.command = command_1 7 5 db.setStringValue(selected_machine.id, command_1) 8 6 end 9 7 if emitter ~= nil then ··· 11 9 else 12 10 system.print("Emitter not Linked") 13 11 end 14 - end 12 + end
+1 -1
Master program/source/system/onActionStart_Option2.lua
··· 19 19 else 20 20 system.print("Emitter not Linked") 21 21 end 22 - end 22 + end
+1 -1
Master program/source/system/onActionStart_Option3.lua
··· 19 19 else 20 20 system.print("Emitter not Linked") 21 21 end 22 - end 22 + end
+10 -1
Master program/source/system/onActionStart_down.lua
··· 1 1 if Ctrl_pressed == true then 2 2 if selected_index < #elementsTypes then 3 3 selected_index = selected_index + 1 4 + selected_type = elementsTypes[selected_index] 4 5 selected_machine_index = 1 5 6 page = 1 6 7 Storage.clear() 7 8 craft_quantity_digits = {"0","0","0","0","0","0","0","0"} 8 9 selectedElementsId = {} 10 + hud_machines_rows = {} 11 + elements = {} 12 + selectedElementsId = {} 13 + temp_selectedElementsId = {} 14 + temp_elements_for_sorting = {} 15 + temp_elements = {} 16 + temp_refresh_id_list = {} 17 + machineLoaded = false 9 18 end 10 19 else 11 20 if selected_machine_index < #elements then 12 21 selected_machine_index = selected_machine_index + 1 13 22 craft_quantity_digits = {"0","0","0","0","0","0","0","0"} 14 23 end 15 - end 24 + end
+6 -1
Master program/source/system/onActionStart_strafeleft.lua
··· 2 2 page = page - 1 3 3 selected_machine_index = 1 4 4 Storage.clear() 5 - end 5 + hud_machines_rows = {} 6 + elements = {} 7 + temp_elements_for_sorting = {} 8 + temp_elements = {} 9 + temp_refresh_id_list = {} 10 + end
+6 -1
Master program/source/system/onActionStart_straferight.lua
··· 2 2 page = page + 1 3 3 selected_machine_index = 1 4 4 Storage.clear() 5 - end 5 + hud_machines_rows = {} 6 + elements = {} 7 + temp_elements_for_sorting = {} 8 + temp_elements = {} 9 + temp_refresh_id_list = {} 10 + end
+10 -1
Master program/source/system/onActionStart_up.lua
··· 1 1 if Ctrl_pressed == true then 2 2 if selected_index > 1 then 3 3 selected_index = selected_index - 1 4 + selected_type = elementsTypes[selected_index] 4 5 selected_machine_index = 1 5 6 page = 1 6 7 Storage.clear() 7 8 craft_quantity_digits = {"0","0","0","0","0","0","0","0"} 8 9 selectedElementsId = {} 10 + hud_machines_rows = {} 11 + elements = {} 12 + selectedElementsId = {} 13 + temp_selectedElementsId = {} 14 + temp_elements_for_sorting = {} 15 + temp_elements = {} 16 + temp_refresh_id_list = {} 17 + machineLoaded = false 9 18 end 10 19 else 11 20 if selected_machine_index > 1 then 12 21 selected_machine_index = selected_machine_index - 1 13 22 craft_quantity_digits = {"0","0","0","0","0","0","0","0"} 14 23 end 15 - end 24 + end
+11 -514
Master program/source/system/onUpdate.lua
··· 1 - local statusList = {"STOPPED","RUNNING","MISSING INGREDIENT","OUTPUT FULL","NO OUTPUT CONTAINER","PENDING","MISSING SCHEMATIC"} 2 - function getIndustryStatusClass(status) 3 - if status == 1 then 4 - return "text-info" 5 - elseif status == 2 then 6 - return "text-success" 7 - elseif ((status >= 3) and (status <= 5)) or (status == 7) then 8 - return "text-danger" 9 - elseif status == 6 then 10 - return "text-primary" 11 - end 12 - return "" --default value for other status that can be added 13 - end 14 - 15 - hud_main_css = [[ 16 - <style> 17 - * { 18 - font-size: ]] .. tostring(contentFontSize) .. [[px; 19 - } 20 - .hud_container { 21 - border: 2px solid orange; 22 - border-radius:10px; 23 - background-color: rgba(0,0,0,.75); 24 - padding:10px; 25 - } 26 - .hud_help_commands { 27 - position: absolute; 28 - top: ]] .. tostring((10/1080)*100) .. [[vh; 29 - left: ]] .. tostring((50/1920)*100) .. [[vw; 30 - text-transform: uppercase; 31 - font-weight: bold; 32 - } 33 - .hud_list_container { 34 - position: absolute; 35 - top: ]] .. tostring((125/1080)*100) .. [[vh; 36 - left: ]] .. tostring((50/1920)*100) .. [[vw; 37 - text-transform: uppercase; 38 - font-weight: bold; 39 - } 40 - .hud_machine_detail { 41 - position: absolute; 42 - top: ]] .. tostring((250/1080)*100) .. [[vh; 43 - right: ]] .. tostring((50/1920)*100) .. [[vw; 44 - text-transform: uppercase; 45 - font-weight: bold; 46 - } 47 - .hud_machines_container { 48 - position: absolute; 49 - top: ]] .. tostring((125/1080)*100) .. [[vh; 50 - left: ]] .. tostring((300/1920)*100) .. [[vw; 51 - } 52 - .elementType { 53 - margin-top:10px; 54 - border-radius:5px; 55 - } 56 - .elementType.selected { 57 - border: 2px solid green; 58 - background-color: rgba(0,200,0,.45); 59 - } 60 - tr.selected td, tr.selected th{ 61 - border: 2px solid green; 62 - background-color: rgba(0,200,0,.1); 63 - } 64 - td, th { 65 - border-bottom:1px solid white; 66 - padding:5px; 67 - text-align: center; 68 - } 69 - th { 70 - font-weight: bold; 71 - } 72 - .text-success{color: #28a745;} 73 - .text-danger{color:#dc3545;} 74 - .text-warning{color:#ffc107;} 75 - .text-info{color:#17a2b8;} 76 - .text-primary{color:#007bff;} 77 - .text-orangered{color:orangered;} 78 - .bg-success{background-color: #28a745;} 79 - .bg-danger{background-color:#dc3545;} 80 - .bg-warning{background-color:#ffc107;} 81 - .bg-info{background-color:#17a2b8;} 82 - .bg-primary{background-color:#007bff;} 83 - </style> 84 - ]] 85 - 86 - if initIndex >= #elementsIdList then 87 - unit.stopTimer("init") 88 - --system.print(MyJson.stringify(allTypes)) 89 - if not isTimerStarted then 90 - isTimerStarted = true 91 - unit.setTimer("buildLists",1) 92 - system.setScreen(hud_main_css .. hud_help_command .. [[ 93 - <div class="hud_list_container hud_container"> 94 - <table style="width:100%"> 95 - <tr> 96 - <th>LOADING ]] .. math.floor(initIndex*100/#elementsIdList) .. [[% ...</th> 97 - </tr> 98 - </table> 99 - </div> 100 - ]]) 101 - else 102 - hud_elements_type_list = "" 103 - hud_machines = "" 104 - hud_machine_detail = "" 1 + --[[ 2 + DU-Nested-Coroutines by Jericho 3 + Permit to easier avoid CPU Load Errors 4 + Source available here: https://github.com/Jericho1060/du-nested-coroutines 5 + ]]-- 105 6 106 - minOnPage = ((page - 1) * elementsByPage) + 1 107 - maxOnPage = page * elementsByPage 108 - 109 - elements = {} 110 - refresh_id_list = {} 111 - local temp_elements_for_sorting = {} 112 - for i,id in pairs(selectedElementsId) do 113 - elementData = {} 114 - elementData.id = id 115 - elementData.name = core.getElementNameById(id) 116 - table.insert(temp_elements_for_sorting, elementData) 117 - end 118 - table.sort(temp_elements_for_sorting, function(a,b) return a.name:lower() < b.name:lower() end) 119 - for i,elementData in pairs(temp_elements_for_sorting) do 120 - if i >= minOnPage and i <= maxOnPage then 121 - elementType = core.getElementDisplayNameById(elementData.id) 122 - elementData.type = elementType 123 - elementData.name = core.getElementNameById(elementData.id) 124 - elementData.position = core.getElementPositionById(elementData.id) 125 - 126 - table.insert(refresh_id_list, elementData.id) 127 - table.insert(elements, elementData) 128 - end 129 - end 130 - 131 - if hud_displayed == true then 132 - selected_type = elementsTypes[selected_index] 133 - 134 - hud_elements_type_list = [[<div class="hud_list_container hud_container"> 135 - <div style="text-align:center;font-weight:bold;border-bottom:1px solid white;">&#x2191; &nbsp;&nbsp; Ctrl+Arrow Up</div> 136 - ]] 137 - for i, elementType in pairs(elementsTypes) do 138 - --system.print(elementType) 139 - hud_elements_type_list = hud_elements_type_list .. [[<div class="elementType]] 140 - if i == selected_index then 141 - hud_elements_type_list = hud_elements_type_list .. " selected" 142 - end 143 - local count = 0 144 - if machines_count[elementType:lower()] ~= nil then count = machines_count[elementType:lower()] end 145 - hud_elements_type_list = hud_elements_type_list .. [["> 146 - <table style="width:100%;"> 147 - <tr> 148 - <th style="text-align:left;border-bottom:none;">]].. elementType .. [[</th> 149 - <td style="text-align:right;border-bottom:none;">]] .. tostring(count) .. [[</td> 150 - </tr> 151 - </table> 152 - </div> 153 - ]] 154 - end 155 - hud_elements_type_list = hud_elements_type_list .. [[<div style="margin-top:10px;text-align:center;font-weight:bold;border-top:1px solid white;">&#x2193; &nbsp;&nbsp; Ctrl+Arrow Down</div></div>]] 156 - local minOnPage = ((page - 1) * elementsByPage) + 1 157 - if maxOnPage > #selectedElementsId then maxOnPage = #selectedElementsId end 158 - hud_machines = [[<div class="hud_machines_container hud_container"> 159 - <div style="text-align:center;font-weight:bold;border-bottom:1px solid white;">&#x2191; &nbsp;&nbsp; Arrow Up</div> 160 - <table class="elements_table" style="width:100%"> 161 - <tr> 162 - <th>&#x2190; &nbsp;&nbsp; Arrow Left</th> 163 - <th> Page ]] .. page .. [[/]] .. maxPage .. [[ (from ]] .. minOnPage .. [[ to ]] .. maxOnPage .. [[)</th> 164 - <th>Arrow Right &nbsp;&nbsp; &#x2192;</th> 165 - </tr> 166 - </table> 167 - <table class="elements_table" style="width:100%;">]] 168 - if selected_index > 0 and #elementsTypes > 0 and elementsTypes[selected_index]:lower():find("container") then 169 - hud_machines = hud_machines .. [[ 170 - <tr> 171 - <th>id</th> 172 - <th>Container Name</th> 173 - <th>Item Name</th> 174 - <th>Container Size</th> 175 - <th>Item Type</th> 176 - <th>Unit Mass</th> 177 - <th>Total Mass</th> 178 - <th>Amount of Items</th> 179 - ]] 180 - if not elementsTypes[selected_index]:lower():find("hub") then 181 - hud_machines = hud_machines .. [[ 182 - <th>Container Fill</th> 183 - ]] 184 - end 185 - hud_machines = hud_machines .. [[</tr> 186 - ]] 187 - for i, element in pairs(elements) do 188 - local splittedName = strSplit(element.name, "_") 189 - local itemName = splittedName[2] 190 - if not itemName then itemName = "-" end 191 - local machine_id = "-" 192 - if element.id then machine_id = element.id end 193 - local container_size = "hub" 194 - local container_empty_mass = getIngredient("Container Hub").mass 195 - local container_volume = 0 196 - local contentQuantity = 0 197 - local ingredient = getIngredient(cleanName(itemName)) 198 - if not element.type:lower():find("hub") then 199 - local containerMaxHP = core.getElementMaxHitPointsById(element.id) 200 - if containerMaxHP > 17000 then 201 - container_size = "L" 202 - container_empty_mass = getIngredient("Container L").mass 203 - container_volume = 128000 * (container_proficiency_lvl * 0.1) + 128000 204 - elseif containerMaxHP > 7900 then 205 - container_size = "M" 206 - container_empty_mass = getIngredient("Container M").mass 207 - container_volume = 64000 * (container_proficiency_lvl * 0.1) + 64000 208 - elseif containerMaxHP > 900 then 209 - container_size = "S" 210 - container_empty_mass = getIngredient("Container S").mass 211 - container_volume = 8000 * (container_proficiency_lvl * 0.1) + 8000 212 - else 213 - container_size = "XS" 214 - container_empty_mass = getIngredient("Container XS").mass 215 - container_volume = 1000 * (container_proficiency_lvl * 0.1) + 1000 216 - end 217 - end 218 - local totalMass = core.getElementMassById(element.id) 219 - local contentMassKg = totalMass - container_empty_mass 220 - local contentMass = contentMassKg 221 - local contentMassUnit = "Kg" 222 - if contentMass > 1000 then 223 - contentMass = contentMass/1000 224 - contentMassUnit = "T" 225 - end 226 - contentMass = utils.round(contentMass*100)/100 227 - contentQuantity = contentMassKg / ingredient.mass 228 - local contentPercent = 0 229 - if (not element.type:lower():find("hub")) --not a hub 230 - and (not ingredient.type:lower():find("error")) --not item not found 231 - then 232 - contentPercent = math.floor((ingredient.volume * contentQuantity)*100/container_volume) 233 - end 234 - hud_machines = hud_machines .. [[<tr]] 235 - if selected_machine_index == i then 236 - hud_machines = hud_machines .. [[ class="selected"]] 237 - end 238 - hud_machines = hud_machines .. [[> 239 - <th>]] .. machine_id .. [[</th> 240 - <th>]] .. itemName .. [[</th> 241 - <th>]] .. ingredient.name .. [[</th> 242 - <td>]] .. container_size .. [[</td> 243 - <td>]] .. ingredient.type .. [[</td> 244 - <td>]] .. ingredient.mass .. [[</td> 245 - <td>]] .. contentMass .. " " .. contentMassUnit .. [[</td> 246 - <td>]] .. utils.round(contentQuantity*100)/100 .. [[</td> 247 - ]] 248 - if not element.type:lower():find("hub") then 249 - local gauge_color_class = "bg-success" 250 - local text_color_class = "" 251 - if contentPercent < container_fill_red_level then 252 - gauge_color_class = "bg-danger" 253 - elseif contentPercent < container_fill_yellow_level then 254 - gauge_color_class = "bg-warning" 255 - text_color_class = "text-orangered" 256 - end 257 - if ingredient.type:lower():find("error") then 258 - hud_machines = hud_machines .. [[ 259 - <th style="position:relative;width: ]] .. tostring((150/1920)*100) .. [[vw;"> 260 - - 261 - </th> 262 - </tr> 263 - ]] 264 - else 265 - hud_machines = hud_machines .. [[ 266 - <th style="position:relative;width: ]] .. tostring((150/1920)*100) .. [[vw;"> 267 - <div class="]] .. gauge_color_class .. [[" style="width:]] .. contentPercent .. [[%;">&nbsp;</div> 268 - <div class="]] .. text_color_class .. [[" style="position:absolute;width:100%;top:0;padding-top:5px;font-weight:bold;"> 269 - ]] .. contentPercent .. [[% 270 - </div> 271 - </th> 272 - </tr> 273 - ]] 274 - end 275 - end 276 - end 277 - else 278 - hud_machines = hud_machines .. [[ 279 - <tr> 280 - <th>id</th> 281 - <th>Machine Name</th> 282 - <th>Selected Recipe</th> 283 - <th>Cycles From Start</th> 284 - <th>Status</th> 285 - <th>Mode</th> 286 - <th>Time Remaining</th> 287 - </tr> 288 - ]] 289 - for i, element in pairs(elements) do 290 - local statusData = core.getElementIndustryInfoById(element.id) 291 - local recipeName = "-" 292 - if #statusData.currentProducts > 0 then 293 - local item = system.getItem(statusData.currentProducts[1].id) 294 - if item.locDisplayNameWithSize then 295 - recipeName = item.locDisplayNameWithSize 296 - end 297 - end 298 - 299 - local remainingTime = 0 300 - if (statusData) and (statusData.remainingTime) and (statusData.remainingTime <= (3600*24*365)) then 301 - remainingTime = statusData.remainingTime 302 - end 303 - element.recipeName = recipeName 304 - element.remainingTime = remainingTime 305 - element.status = statusData.state 306 - element.unitsProduced = statusData.unitsProduced 307 - local mode = "" 308 - element.maintainProductAmount = statusData.maintainProductAmount 309 - element.batchesRequested = statusData.batchesRequested 310 - if statusData.maintainProductAmount > 0 then 311 - mode = "Maintain " .. math.floor(statusData.maintainProductAmount) 312 - elseif statusData.batchesRequested > 0 and statusData.batchesRequested <= 99999999 then 313 - mode = "Produce " .. math.floor(statusData.batchesRequested) 314 - end 315 - local status = statusList[element.status] or '-' 316 - local status_class = getIndustryStatusClass(element.status) 317 - hud_machines = hud_machines .. [[<tr]] 318 - if selected_machine_index == i then 319 - hud_machines = hud_machines .. [[ class="selected"]] 320 - end 321 - local machine_id = "-" 322 - if element.id then machine_id = element.id end 323 - local unitsProduced = 0 324 - if element.unitsProduced then unitsProduced = element.unitsProduced end 325 - hud_machines = hud_machines .. [[> 326 - <th>]] .. machine_id .. [[</th> 327 - <th class="]] .. status_class .. [[">]] .. element.name .. [[</th> 328 - <th>]] .. recipeName .. [[</th> 329 - <td>]] .. unitsProduced .. [[</td> 330 - <th class="]] .. status_class .. [[">]] .. status .. [[</th> 331 - <th>]] .. mode .. [[</th> 332 - <td class="]] .. status_class .. [[">]] .. SecondsToClockString(element.remainingTime) .. [[</td> 333 - </tr> 334 - ]] 335 - end 336 - end 337 - hud_machines = hud_machines .. [[</table> 338 - <table class="elements_table" style="width:100%"> 339 - <tr> 340 - <th>&#x2190; &nbsp;&nbsp; Arrow Left</th> 341 - <th> Page ]] .. page .. [[/]] .. maxPage .. [[ (from ]] .. minOnPage .. [[ to ]] .. maxOnPage .. [[)</th> 342 - <th>Arrow Right &nbsp;&nbsp; &#x2192;</th> 343 - </tr> 344 - </table> 345 - <div style="text-align:center;font-weight:bold;border-top:1px solid white;">&#x2193; &nbsp;&nbsp; Arrow Down</div> 346 - </div>]] 347 - if #elements > 0 then 348 - local selected_machine = elements[selected_machine_index] 349 - local position = vec3(selected_machine.position) 350 - local x = position.x 351 - local y = position.y 352 - local z = position.z 353 - local offset1 = 1 354 - local offset15 = 1.5 355 - local offset2 = 2 356 - local offset25 = 2.5 357 - local offsetFromCenter = 0 358 - if selected_machine.type:lower():find("container") then 359 - offset1 = 0 360 - offset15 = 0 361 - offset2 = 0 362 - offset25 = 0 363 - end 364 - if selected_machine.type:lower() == "container" then 365 - local containerMaxHP = core.getElementMaxHitPointsById(selected_machine.id) 366 - if containerMaxHP > 17000 then 367 - offsetFromCenter = 4 368 - elseif containerMaxHP > 7900 then 369 - offsetFromCenter = 2 370 - elseif containerMaxHP > 900 then 371 - offsetFromCenter = 1 372 - else 373 - offsetFromCenter = 0.5 374 - end 375 - end 376 - if #markers == 0 then 377 - table.insert(markers, core.spawnArrowSticker(x, y, z, "down")) 378 - table.insert(markers, core.spawnArrowSticker(x, y, z, "down")) 379 - core.rotateSticker(markers[2],0,0,90) 380 - table.insert(markers, core.spawnArrowSticker(x, y, z + offset15, "north")) 381 - table.insert(markers, core.spawnArrowSticker(x, y, z + offset15, "north")) 382 - core.rotateSticker(markers[4],90,90,0) 383 - table.insert(markers, core.spawnArrowSticker(x, y, z + offset15, "south")) 384 - table.insert(markers, core.spawnArrowSticker(x, y, z + offset15, "south")) 385 - core.rotateSticker(markers[6],90,-90,0) 386 - table.insert(markers, core.spawnArrowSticker(x, y, z + offset15, "east")) 387 - table.insert(markers, core.spawnArrowSticker(x, y, z + offset15, "east")) 388 - core.rotateSticker(markers[8],90,0,90) 389 - table.insert(markers, core.spawnArrowSticker(x, y, z + offset15, "west")) 390 - table.insert(markers, core.spawnArrowSticker(x, y, z + offset15, "west")) 391 - core.rotateSticker(markers[10],-90,0,90) 392 - else 393 - core.moveSticker(markers[1], x, y, z + offset25 + offsetFromCenter) 394 - core.moveSticker(markers[2], x, y, z + offset25 + offsetFromCenter) 395 - core.moveSticker(markers[3], x + offset1 + offsetFromCenter, y, z + offset15) 396 - core.moveSticker(markers[4], x + offset1 + offsetFromCenter, y, z + offset15) 397 - core.moveSticker(markers[5], x - offset1 - offsetFromCenter, y, z + offset15) 398 - core.moveSticker(markers[6], x - offset1 - offsetFromCenter, y, z + offset15) 399 - core.moveSticker(markers[7], x, y - offset2 - offsetFromCenter, z + offset15) 400 - core.moveSticker(markers[8], x, y - offset2 - offsetFromCenter, z + offset15) 401 - core.moveSticker(markers[9], x, y + offset2 + offsetFromCenter, z + offset15) 402 - core.moveSticker(markers[10], x, y + offset2 + offsetFromCenter, z + offset15) 403 - end 404 - if (not selected_machine.type:lower():find("container")) and (enableRemoteControl == true) then 405 - local machines_actions = {} 406 - local status = statusList[selected_machine.status] or '-' 407 - local status_class = getIndustryStatusClass(selected_machine.status) 408 - hud_machine_detail = [[<div class="hud_machine_detail hud_container"> 409 - <table> 410 - <tr> 411 - <th colspan="3">]] .. selected_machine.name .. [[</th> 412 - </tr> 413 - <tr> 414 - <th class="]] .. status_class .. [[" colspan="3">]] .. status .. [[</th> 415 - </tr> 416 - ]] 417 - if status == "-" then 418 - command_1 = "" 419 - command_2 = "" 420 - command_3 = "" 421 - hud_machine_detail = hud_machine_detail .. [[ 422 - <tr> 423 - <td>Machine Not Connected</td> 424 - </tr> 425 - ]] 426 - elseif status:lower():find("stopped") then 427 - command_1 = "START" 428 - command_2 = "BATCH" 429 - command_3 = "MAINTAIN" 430 - hud_machine_detail = hud_machine_detail .. [[ 431 - <tr> 432 - <th>START</th> 433 - <th></th> 434 - <th>ALT+1</th> 435 - </tr> 436 - <tr> 437 - <th style="height:65px;">BATCH</th> 438 - <th rowspan="2"> 439 - <table> 440 - <tr> 441 - <th colspan="3">Quantity:</th> 442 - </tr> 443 - <tr> 444 - <th style="font-size:20px;"> 445 - ]] 446 - local has_quantity = false 447 - for k,v in pairs(craft_quantity_digits) do 448 - if tonumber(v) == nil then v = 0 end 449 - if tonumber(v) > 0 then 450 - has_quantity = true 451 - end 452 - end 453 - if not has_quantity then 454 - local value = "0" 455 - if selected_machine.maintainProductAmount > 0 then 456 - --mode = "Maintain " .. selected_machine.maintainProductAmount 457 - value = tostring(math.floor(selected_machine.maintainProductAmount)) 458 - elseif selected_machine.batchesRequested > 0 and selected_machine.batchesRequested <= 99999999 then 459 - --mode = "Produce " .. selected_machine.batchesRequested 460 - value = tostring(math.floor(selected_machine.batchesRequested)) 461 - end 462 - for i = #value, 1, -1 do 463 - local c = value:sub(i,i) 464 - craft_quantity_digits[9-(#value-(i-1))] = c 465 - end 466 - end 467 - for digit_index,digit in pairs(craft_quantity_digits) do 468 - hud_machine_detail = hud_machine_detail .. digit 469 - end 470 - hud_machine_detail = hud_machine_detail .. [[ 471 - </th> 472 - </tr> 473 - </table> 474 - </th> 475 - <th>ALT+2</th> 476 - </tr> 477 - <tr> 478 - <th>MAINTAIN</th> 479 - <th>ALT+3</th> 480 - </tr> 481 - ]] 482 - else 483 - command_1 = "STOP" 484 - command_2 = "SOFT_STOP" 485 - command_3 = "" 486 - hud_machine_detail = hud_machine_detail .. [[ 487 - <tr> 488 - <th>STOP</th> 489 - <th>ALT+1</th> 490 - </tr> 491 - <tr> 492 - <th>FINISH AND STOP</th> 493 - <th>ALT+2</th> 494 - </tr> 495 - ]] 496 - 497 - end 498 - hud_machine_detail = hud_machine_detail .. [[</table></div>]] 499 - end 500 - end 501 - end 502 - system.setScreen(hud_main_css .. hud_help_command .. hud_elements_type_list .. hud_machines .. hud_machine_detail) 503 - end 504 - 505 - else 506 - system.setScreen(hud_main_css .. hud_help_command .. [[ 507 - <div class="hud_list_container hud_container"> 508 - <table style="width:100%"> 509 - <tr> 510 - <th>LOADING ]] .. math.floor(initIndex*100/#elementsIdList) .. [[% ...</th> 511 - </tr> 512 - </table> 513 - </div> 514 - ]]) 515 - end 7 + if coroutine.status(MainCoroutine) == "dead" then 8 + MainCoroutine = coroutine.create(runCoroutines) 9 + end 10 + if coroutine.status(MainCoroutine) == "suspended" then 11 + assert(coroutine.resume(MainCoroutine)) 12 + end
+570 -32
Master program/source/unit/onStart.lua
··· 1 1 --[[ 2 - receivers channels for each type of machine 2 + DU Industry HUD By Jericho 3 3 ]] 4 4 5 - local version = "V 2.3.3" 5 + local version = "V 3.0.5 - alpha" 6 + local log_split = "=================================================" 7 + --printing version in lua chat 8 + system.print(log_split)local a=""local b=math.ceil((50-#version-2)/2)for c=1,b,1 do a=a..'='end;a=a.." "..version.." "for c=1,b,1 do a=a..'='end;system.print(a)system.print(log_split) 6 9 7 - system.print("==================================================") 8 - local print_version_str = "" 9 - local print_version_number = math.ceil((50-#version-2)/2) 10 - for i=1, print_version_number, 1 do print_version_str = print_version_str .. '=' end 11 - print_version_str = print_version_str .. " " .. version .. " " 12 - for i=1, print_version_number, 1 do print_version_str = print_version_str .. '=' end 13 - system.print(print_version_str) 14 - system.print("==================================================") 15 - 10 + --[[ 11 + receivers channels for each type of machine 12 + ]] 16 13 channel_for_refiner = "receiver_refiner" --export: receiver channel to send orders to refiners 17 14 channel_for_assembly = "receiver_assembly" --export: receiver channel to send orders to assembly lines 18 15 channel_for_smelter = "receiver_smelters" --export: receiver channel to send orders to smelters ··· 25 22 channel_for_3d_printer = "receiver_3dprinters" --export: receiver channel to send orders to 3d printers 26 23 channel_for_transfer = "receiver_transfert" --export: receiver channel to send orders to tranfer units 27 24 28 - container_proficiency_lvl = 0 --: Talent level for Container Proficiency 29 - container_fill_red_level = 10 --: The percent fill below gauge will be red 30 - container_fill_yellow_level = 50 --t: The percent fill below gauge will be yellow 31 - 25 + --[[ 26 + Lua parameters 27 + ]] 32 28 enableRefinerMonitoring = true --export: enable or disable the Refiners monitoring 33 29 enableAssemblyMonitoring = true --export: enable or disable the Assembly lines monitoring 34 30 enableSmelterMonitoring = true --export: enable or disable the Smelters monitoring ··· 40 36 enableMetalworkMonitoring = true --export: enable or disable the Metalworks monitoring 41 37 enable3DPrinterMonitoring = true --export: enable or disable the 3D Printers monitoring 42 38 enableTransferMonitoring = true --export: enable or disable the transfer units monitoring 43 - enableContainerMonitoring = false --: enable or disable the containers and hubs monitoring 44 39 enableRemoteControl = true --export: enable the HUD to control machines (start/stop/batch/maintain) 45 - containerMonitoringPrefix = "MONIT_" --: the prefix used to enable container monitoring 46 40 elementsByPage = 20 --export: maximum amount of elements displayed on a single page 47 41 dateFormat = "en" --export: the country code to format the date 48 - maxAmountOfElementsLoadedBySecond = 2000 --export: if cpu load errors at start, lower that value 49 - maxAmountOfRecipeLoadedBySecond = 10 --export: if cpu load errors on page load, lower that value 50 - contentFontSize = 15 --export: size of the font of the content of all pannels in pixels 42 + maxAmountOfElementsLoadedByFrame = 1000 --export: if cpu load errors at start, lower that value 51 43 52 44 --[[ 53 45 DO NOT CHANGE THE FOLLOWING 54 46 ]] 55 47 48 + --Utility functions By jericho, see full source at https://github.com/Jericho1060/DualUniverse 49 + function removeDuplicatesInTable(a)local b={}local c={}for d,e in ipairs(a)do if not b[e]then c[#c+1]=e;b[e]=true end end;return c end;function strSplit(a,b)result={}for c in(a..b):gmatch("(.-)"..b)do table.insert(result,c)end;return result end;function SecondsToClockString(a)local a=tonumber(a)if a==nil or a<=0 then return"-"else days=string.format("%2.f",math.floor(a/(3600*24)))hours=string.format("%2.f",math.floor(a/3600-days*24))mins=string.format("%2.f",math.floor(a/60-hours*60-days*24*60))secs=string.format("%2.f",math.floor(a-hours*3600-days*24*60*60-mins*60))str=""if tonumber(days)>0 then str=str..days.."d "end;if tonumber(hours)>0 then str=str..hours.."h "end;if tonumber(mins)>0 then str=str..mins.."m "end;if tonumber(secs)>0 then str=str..secs.."s"end;return str end end;function removeQualityInName(a)if not a then return''end;return a:lower():gsub('basic ',''):gsub('uncommon ',''):gsub('advanced ',''):gsub('rare ',''):gsub('exotic ','')end;function has_value(a,b)for c,d in ipairs(a)do if d==b then return true end end;return false end 50 + 51 + --time script to get client date and time by Jericho, see full source at https://github.com/Jericho1060/DualUniverse 52 + function DUCurrentDateTime(a)local b=system.getUtcTime()if not a then b=b+system.getUtcOffset()end;local c=24*60*60;local d=365*c;local e=d+c;local f=4*d+c;local g=4;local h=1970;local i={-1,30,58,89,119,150,180,211,242,272,303,333,364}local j={}for k=1,2 do j[k]=i[k]end;for k=3,13 do j[k]=i[k]+1 end;local l,m,n,o,p,q,r,s;local t=i;s=b;l=math.floor(s/f)s=s-l*f;l=l*4+h;if s>=d then l=l+1;s=s-d;if s>=d then l=l+1;s=s-d;if s>=e then l=l+1;s=s-e else t=j end end end;m=math.floor(s/c)s=s-m*c;local n=1;while t[n]<m do n=n+1 end;n=n-1;local o=m-t[n]p=(math.floor(b/c)+g)%7;if p==0 then p=7 end;q=math.floor(s/3600)s=s-q*3600;r=math.floor(s/60)function round(u,v)if v then return utils.round(u/v)*v end;return u>=0 and math.floor(u+0.5)or math.ceil(u-0.5)end;s=round(s-r*60)local w={"Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"}local x={"Mon","Tue","Wed","Thu","Fri","Sat","Sun"}local y={"January","February","March","April","May","June","July","August","September","October","November","December"}local z={"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"}return l,n,o,q,r,s,p,w[p],x[p],y[n],z[n],m+1 end 53 + 54 + --databank hub library By Jericho, see full source at https://github.com/Jericho1060/DualUniverse 55 + bankhub={}function bankhub:new(banks)o={}setmetatable(o,self)self.__index=self;o.banks=banks or{}function o.clear()return o:_clear()end;function o.getNbKeys()return o:_getNbKeys()end;function o.getKeys()return o:_getKeys()end;function o.hasKey(a)return o:_hasKey(a)end;function o.getStringValue(a)return o:_getStringValue(a)end;function o.getIntValue(a)return o:_getIntValue(a)end;function o.getFloatValue(a)return o:_getFloatValue(a)end;return o end;function bankhub:add(b)table.insert(self.banks,b)self.banks_size=#self.banks end;function bankhub:_clear()for c,d in pairs(self.banks)do d.clear()end end;function bankhub:_getNbKeys()local e=0;for c,d in pairs(self.banks)do e=e+d.getNbKeys()end;return e end;function bankhub:_getKeys()local e={}for c,d in pairs(self.banks)do local f=json.decode(d.getKeys())for c,g in pairs(f)do table.insert(e,g)end end;return json.encode(e)end;function bankhub:_hasKey(a)for c,d in pairs(self.banks)do if d.hasKey(a)==1 then return 1 end end;return 0 end;function bankhub:_getStringValue(a)for c,d in pairs(self.banks)do if d.hasKey(a)==1 then return d.getStringValue(a)end end;return nil end;function bankhub:_getIntValue(a)for c,d in pairs(self.banks)do if d.hasKey(a)==1 then return banks.getIntValue(a)end end;return nil end;function bankhub:_getFloatValue(a)for c,d in pairs(self.banks)do if d.hasKey(a)==1 then return banks.getFloatValue(a)end end;return nil end 56 + 56 57 channels = {} 57 58 channels['refiner'] = channel_for_refiner 58 59 channels['assembly line'] = channel_for_assembly ··· 66 67 channels['3d printer'] = channel_for_3d_printer 67 68 channels['transfer unit'] = channel_for_transfer 68 69 70 + --[[ 71 + Detecting elements connected on slots 72 + ]] 69 73 databanks = {} 70 74 core = nil 71 75 emitter = nil ··· 86 90 end 87 91 end 88 92 end 89 - 93 + if core == nil then 94 + system.print("Connection to the core is missing") 95 + unit.exit() 96 + end 90 97 if emitter == nil then 91 98 enableRemoteControl = false 92 99 system.print("Connect an Emitter to enable machine control from industry") ··· 95 102 enableRemoteControl = false 96 103 system.print("No Databank linked") 97 104 end 105 + 106 + --init of bank hub 98 107 Storage = bankhub:new(databanks) 99 108 109 + --variable init and loading elements from the core 100 110 elementsId = {} 101 111 elements = {} 102 112 elementsTypes = {} ··· 104 114 machines_count.total = 0 105 115 initIndex = 1 106 116 listIndex = 1 107 - elementsIdList = {} 108 - if core ~= nil and Storage then 109 - elementsIdList = core.getElementIdList() 110 - unit.setTimer("init",1) 111 - end 112 - 113 - elementsTypes = removeDuplicatesInTable(elementsTypes) 114 - 115 - system.showScreen(1) 117 + init = false 116 118 channel_index = 1 117 119 selected_index = 1 120 + selected_type = nil 118 121 selected_machine_index = 1 122 + selected_machine = nil 119 123 hud_displayed = true 120 124 page = 1 121 125 maxPage = 1 ··· 128 132 command_1 = "" 129 133 command_2 = "" 130 134 command_3 = "" 131 - markers = {} 132 135 refreshActivated = true 133 136 hud_help_command = "" 134 137 unit.setTimer("helperRefresh",1) 135 138 minOnPage = 0 136 - maxOnPage = 0 139 + maxOnPage = 0 140 + elementsIdList = core.getElementIdList() 141 + temp_selectedElementsId = {} 142 + temp_elements_for_sorting = {} 143 + temp_elements = {} 144 + temp_refresh_id_list = {} 145 + machineLoaded = false 146 + selected_machine = nil 147 + 148 + --init global HUD style 149 + hud_help_command = '' 150 + hud_elements_type_list = '' 151 + hud_machines = '' 152 + hud_machines_rows = {} 153 + controlHud = '' 154 + 155 + --construct pos for AR data 156 + constructPos = construct.getWorldPosition() 157 + constructRight = construct.getWorldRight() 158 + constructForward = construct.getWorldForward() 159 + constructUp = construct.getWorldUp() 160 + arhtml = '' 161 + 162 + --Boostrap like css for DU by Jericho1060, see full source at https://github.com/Jericho1060/DualUniverse 163 + bootstrap_css_grid = [[<style>.container {width: 100%;padding-right: 15px;padding-left: 15px;margin-right: auto;margin-left: auto;}.row {position:relative;display: flex;flex-wrap: wrap;margin-right: -15px;margin-left: -15px;}.col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12, .col {position: relative;width: 100%;padding-right: 15px;padding-left: 15px;}.col {flex-basis: 0;flex-grow: 1;max-width: 100%;}.col-auto {flex: 0 0 auto;width: auto;max-width: 100%;}.col-1 {flex: 0 0 8.333333%;max-width: 8.333333%;}.col-2 {flex: 0 0 16.666667%;max-width: 16.666667%;}.col-3 {flex: 0 0 25%;max-width: 25%;}.col-4 {flex: 0 0 33.333333%;max-width: 33.333333%;}.col-5 {flex: 0 0 41.666667%;max-width: 41.666667%;}.col-6 {flex: 0 0 50%;max-width: 50%;}.col-7 {flex: 0 0 58.333333%;max-width: 58.333333%;}.col-8 {flex: 0 0 66.666667%;max-width: 66.666667%;}.col-9 {flex: 0 0 75%;max-width: 75%;}.col-10 {flex: 0 0 83.333333%;max-width: 83.333333%;}.col-11 {flex: 0 0 91.666667%;max-width: 91.666667%;}.col-12 {flex: 0 0 100%;max-width: 100%;}.offset-12 {margin-left: 100%;}.offset-11 {margin-left: 91.66666667%;}.offset-10 {margin-left: 83.33333333%;}.offset-9 {margin-left: 75%;}.offset-8 {margin-left: 66.66666667%;}.offset-7 {margin-left: 58.33333333%;}.offset-6 {margin-left: 50%;}.offset-5 {margin-left: 41.66666667%;}.offset-4 {margin-left: 33.33333333%;}.offset-3 {margin-left: 25%;}.offset-2 {margin-left: 16.66666667%;}.offset-1 {margin-left: 8.33333333%;}.offset-0 {margin-left: 0%;}</style>]] 164 + bootstrap_css_colors = [[<style>.text-white {color: #fff !important;}.text-primary {color: #007bff !important;}.text-secondary {color: #6c757d !important;}.text-success {color: #28a745 !important;}.text-info {color: #17a2b8 !important;}.text-warning {color: #ffc107 !important;}.text-danger {color: #dc3545 !important;}.text-light {color: #f8f9fa !important;}.text-dark {color: #343a40 !important;}.text-body {color: #212529 !important;}.text-muted {color: #6c757d !important;}.text-black-50 {color: rgba(0, 0, 0, 0.5) !important;}.text-white-50 {color: rgba(255, 255, 255, 0.5) !important;}.bg-primary {background-color: #007bff !important;}.bg-secondary {background-color: #6c757d !important;}.bg-success {background-color: #28a745 !important;}.bg-info {background-color: #17a2b8 !important;}.bg-warning {background-color: #ffc107 !important;}.bg-danger {background-color: #dc3545 !important;}.bg-light {background-color: #f8f9fa !important;}.bg-dark {background-color: #343a40 !important;}.bg-white {background-color: #fff !important;}.bg-transparent {background-color: transparent !important;}</style>]] 165 + bootstrap_text_utils = [[<style>.text-left {text-align: left;}.text-right {text-align: right;}.text-center {text-align: center;}.text-justify {text-align: justify;}.text-nowrap {white-space: nowrap;}.text-lowercase {text-transform: lowercase;}.text-uppercase {text-transform: uppercase;}.text-capitalize {text-transform: capitalize;}</style>]] 166 + bootstrap_css = bootstrap_css_grid .. bootstrap_css_colors .. bootstrap_text_utils 167 + 168 + local statusList = {"STOPPED","RUNNING","MISSING INGREDIENT","OUTPUT FULL","NO OUTPUT CONTAINER","PENDING","MISSING SCHEMATIC"} 169 + function getIndustryStatusClass(status) 170 + if status == 1 then 171 + return "text-info" 172 + elseif status == 2 then 173 + return "text-success" 174 + elseif ((status >= 3) and (status <= 5)) or (status == 7) then 175 + return "text-danger" 176 + elseif status == 6 then 177 + return "text-primary" 178 + end 179 + return "" --default value for other status that can be added 180 + end 181 + function getIndustryStatusBgClass(status) 182 + if status then 183 + if status == 1 then 184 + return "bg-info" 185 + elseif status == 2 then 186 + return "bg-success" 187 + elseif ((status >= 3) and (status <= 5)) or (status == 7) then 188 + return "bg-danger" 189 + elseif status == 6 then 190 + return "bg-primary" 191 + end 192 + end 193 + return "" --default value for other status that can be added 194 + end 195 + --[[ 196 + Convert a table in local coordinates to a table in world coordinates by Jericho inspired by Koruzarius 197 + Source : https://github.com/Jericho1060/DualUniverse/blob/master/Vectors/localToWorldPos.lua 198 + ]]-- 199 + function ConvertLocalToWorld(a,b,c,d,e)local f={a[1]*c[1],a[1]*c[2],a[1]*c[3]}local g={a[2]*d[1],a[2]*d[2],a[2]*d[3]}local h={a[3]*e[1],a[3]*e[2],a[3]*e[3]}return{f[1]+g[1]+h[1]+b[1],f[2]+g[2]+h[2]+b[2],f[3]+g[3]+h[3]+b[3]}end 200 + --[[ 201 + Concept based on DU-Nested-Coroutines by Jericho 202 + Source available here: https://github.com/Jericho1060/du-nested-coroutines 203 + ]]-- 204 + 205 + coroutinesTable = {} 206 + MyCoroutines = { 207 + function() 208 + --load all the machines from the core step by step to avoid CPU Load Errors 209 + if not init then 210 + local maxForLoop = initIndex + maxAmountOfElementsLoadedByFrame 211 + if maxForLoop > #elementsIdList then maxForLoop = #elementsIdList end 212 + system.print("Loading elements from " .. initIndex .. " to " .. maxForLoop .. " on " .. #elementsIdList) 213 + 214 + for i = initIndex, maxForLoop, 1 do 215 + initIndex = i 216 + local id = elementsIdList[i] 217 + elementType = core.getElementDisplayNameById(id):lower() 218 + if (elementType:find("assembly line") and enableAssemblyMonitoring == true) or 219 + (elementType:find("glass furnace") and enableGlassMonitoring == true) or 220 + (elementType:find("3d printer") and enable3DPrinterMonitoring == true) or 221 + (elementType:find("smelter") and enableSmelterMonitoring == true) or 222 + (elementType:find("recycler") and enableRecyclerMonitoring == true) or 223 + (elementType:find("refinery") and enableHoneycombMonitoring == true) or 224 + (elementType:find("refiner") and enableRefinerMonitoring == true) or 225 + (elementType:find("industry") 226 + and ( 227 + (elementType:find("chemical") and enableChemicalMonitoring == true) or 228 + (elementType:find("electronics") and enableElectronicsMonitoring == true) or 229 + (elementType:find("metalwork") and enableMetalworkMonitoring == true) 230 + ) 231 + ) or 232 + (elementType == "transfer unit" and enableTransferMonitoring == true) 233 + then 234 + local formatedType = removeQualityInName(elementType) 235 + if 236 + (elementType:lower():find("container") 237 + and elementName:find(containerMonitoringPrefix:lower())) 238 + or (not elementType:lower():find("container")) 239 + then 240 + table.insert(elementsTypes, formatedType) 241 + end 242 + if machines_count[formatedType] ~= nil then 243 + machines_count[formatedType] = machines_count[formatedType] + 1 244 + else 245 + machines_count[formatedType] = 1 246 + end 247 + table.insert(elementsId, id) 248 + end 249 + end 250 + if initIndex >= #elementsIdList then 251 + elementsTypes = removeDuplicatesInTable(elementsTypes) 252 + table.sort(elementsTypes, function(a,b) return a:lower() < b:lower() end) 253 + selected_type = elementsTypes[1] 254 + init = true 255 + system.print("All elements loaded") 256 + end 257 + end 258 + end, 259 + function() 260 + local count = 0 261 + if init then 262 + if selected_type ~= nil and not machineLoaded then 263 + local count = machines_count[selected_type:lower()] 264 + local divider = math.ceil(count / 200) 265 + local maxForLoop = listIndex + math.ceil(maxAmountOfElementsLoadedByFrame / divider) 266 + if maxForLoop > #elementsId then maxForLoop = #elementsId end 267 + for i = listIndex, maxForLoop, 1 do 268 + listIndex = i 269 + local id = elementsId[i] 270 + elementType = core.getElementDisplayNameById(id) 271 + if selected_type:find(removeQualityInName(elementType)) then 272 + if 273 + (elementType:lower():find("container") 274 + and core.getElementNameById(id):lower():find(containerMonitoringPrefix:lower())) 275 + or (not elementType:lower():find("container")) 276 + then 277 + table.insert(temp_selectedElementsId, id) 278 + end 279 + end 280 + if #temp_selectedElementsId >= count then 281 + selectedElementsId = temp_selectedElementsId 282 + temp_selectedElementsId = {} 283 + maxPage = math.ceil(#selectedElementsId / elementsByPage) 284 + listIndex = 1 285 + machineLoaded = true 286 + if #selectedElementsId ~= count then 287 + machineLoaded = false 288 + end 289 + break 290 + end 291 + if listIndex >= #elementsId then 292 + listIndex = 1 293 + end 294 + end 295 + end 296 + end 297 + end, 298 + function() 299 + local year, month, day, hour, minute, second = DUCurrentDateTime() 300 + local dateStr = string.format("%02d/%02d/%04d %02d:%02d:%02d",day,month,year,hour,minute,second) 301 + hud_help_command = [[<div class="hud_help_commands hud_container"> 302 + <table> 303 + <tr> 304 + <th colspan="2"> 305 + ]] .. dateStr .. [[ 306 + </th> 307 + </tr> 308 + <tr> 309 + <td>Show/Hide HUD</td> 310 + <th style="text-align:right;">Alt+7</th> 311 + </tr> 312 + </table> 313 + </div>]] 314 + coroutine.yield(coroutinesTable[3]) 315 + end, 316 + function() 317 + if init then 318 + hud_elements_type_list = '<div class="hud_list_container hud_container"><div style="text-align:center;border-bottom:1px solid white;">&#x2191; &nbsp;&nbsp; Ctrl+Arrow Up</div>' 319 + for i, elementType in pairs(elementsTypes) do 320 + hud_elements_type_list = hud_elements_type_list .. '<div class="elementType' 321 + if i == selected_index then 322 + hud_elements_type_list = hud_elements_type_list .. " selected" 323 + end 324 + local count = 0 325 + if machines_count[elementType:lower()] ~= nil then count = machines_count[elementType:lower()] end 326 + hud_elements_type_list = hud_elements_type_list .. '"><table style="width:100%;"><tr><th style="text-align:left;border-bottom:none;">'.. elementType .. '</th><td style="text-align:right;border-bottom:none;">' .. tostring(count) .. '</td></tr></table></div>' 327 + end 328 + hud_elements_type_list = hud_elements_type_list .. '<div style="margin-top:10px;text-align:center;font-weight:bold;border-top:1px solid white;">&#x2193; &nbsp;&nbsp; Ctrl+Arrow Down</div></div>' 329 + coroutine.yield(coroutinesTable[4]) 330 + end 331 + end, 332 + function() 333 + for i, element in pairs(elements) do 334 + if #elements > 0 then 335 + local statusData = core.getElementIndustryInfoById(element.id) 336 + local schematicId = statusData.schematicId or 0 337 + local recipeName = "-" 338 + if #statusData.currentProducts > 0 then 339 + local item = system.getItem(statusData.currentProducts[1].id) 340 + if schematicId == 0 then 341 + schematicId = item.schematics[1] or 0 342 + end 343 + if item.locDisplayNameWithSize then 344 + recipeName = item.locDisplayNameWithSize 345 + end 346 + end 347 + local remainingTime = 0 348 + if (statusData) and (statusData.remainingTime) and (statusData.remainingTime <= (3600*24*365)) then 349 + remainingTime = statusData.remainingTime 350 + end 351 + element.recipeName = recipeName 352 + element.remainingTime = remainingTime 353 + element.status = statusData.state 354 + element.unitsProduced = statusData.unitsProduced 355 + local mode = "" 356 + element.maintainProductAmount = statusData.maintainProductAmount 357 + element.batchesRequested = statusData.batchesRequested 358 + if statusData.maintainProductAmount > 0 then 359 + mode = "Maintain " .. math.floor(statusData.maintainProductAmount) 360 + elseif statusData.batchesRequested > 0 and statusData.batchesRequested <= 99999999 then 361 + mode = "Produce " .. math.floor(statusData.batchesRequested) 362 + end 363 + local status = statusList[element.status] or '-' 364 + local status_class = getIndustryStatusClass(element.status) 365 + hud_machines_rows[i] = "<tr" 366 + if selected_machine_index == i then 367 + hud_machines_rows[i] = hud_machines_rows[i] .. ' class="selected"' 368 + end 369 + local machine_id = "-" 370 + if element.id then machine_id = element.id end 371 + local unitsProduced = 0 372 + if element.unitsProduced then unitsProduced = element.unitsProduced end 373 + hud_machines_rows[i] = hud_machines_rows[i] .. '><th>' .. machine_id .. '</th><th><span class="' .. status_class .. '">' .. element.name .. '</span><br><small>' .. element.type .. '</small></th><th>' .. recipeName 374 + if schematicId > 0 then 375 + local schematic = system.getItem(schematicId) 376 + local schematicsRemaining = statusData.schematicsRemaining 377 + local schematic_color = "#fff" 378 + if schematicsRemaining == 0 then schematic_color = "text-danger" end 379 + hud_machines_rows[i] = hud_machines_rows[i] .. [[<br><small class="]] .. schematic_color .. [[">]] .. schematicsRemaining .. [[ ]] .. schematic.locDisplayNameWithSize .. [[</small>]] 380 + end 381 + hud_machines_rows[i] = hud_machines_rows[i] .. '</th><td>' .. unitsProduced .. '</td><th class="' .. status_class .. '">' .. status .. '</th><th>' .. mode .. '</th><td class="' .. status_class .. '">' .. SecondsToClockString(element.remainingTime) .. '</td></tr>' 382 + else 383 + break 384 + end 385 + coroutine.yield(coroutinesTable[5]) 386 + end 387 + end, 388 + function() 389 + hud_machines = [[<div class="hud_machines_container hud_container"> 390 + <div style="text-align:center;font-weight:bold;border-bottom:1px solid white;">&#x2191; &nbsp;&nbsp; Arrow Up</div> 391 + <table class="elements_table" style="width:100%"> 392 + <tr> 393 + <th>&#x2190; &nbsp;&nbsp; Arrow Left</th> 394 + <th> Page ]] .. page .. [[/]] .. maxPage .. [[ (from ]] .. minOnPage .. [[ to ]] .. maxOnPage .. [[ on ]] .. #selectedElementsId .. [[)</th> 395 + <th>Arrow Right &nbsp;&nbsp; &#x2192;</th> 396 + </tr> 397 + </table> 398 + <table class="elements_table" style="width:100%;"> 399 + <tr> 400 + <th>id</th> 401 + <th>Machine Name & Type</th> 402 + <th>Selected Recipe & schematic</th> 403 + <th>Cycles From Start</th> 404 + <th>Status</th> 405 + <th>Mode</th> 406 + <th>Time Remaining</th> 407 + </tr> 408 + ]] 409 + for i, row in pairs(hud_machines_rows) do 410 + if row ~= nil then 411 + hud_machines = hud_machines .. row 412 + end 413 + end 414 + hud_machines = hud_machines .. '</table><table class="elements_table" style="width:100%"><tr><th>&#x2190; &nbsp;&nbsp; Arrow Left</th><th> Page ' .. page .. '/' .. maxPage .. ' (from ' .. minOnPage .. ' to ' .. maxOnPage .. ' on ' .. #selectedElementsId .. ')</th><th>Arrow Right &nbsp;&nbsp; &#x2192;</th></tr></table><div style="text-align:center;font-weight:bold;border-top:1px solid white;">&#x2193; &nbsp;&nbsp; Arrow Down</div></div>' 415 + coroutine.yield(coroutinesTable[6]) 416 + end, 417 + function() 418 + minOnPage = ((page - 1) * elementsByPage) + 1 419 + maxOnPage = page * elementsByPage 420 + if maxOnPage > #selectedElementsId then maxOnPage = #selectedElementsId end 421 + for i,id in pairs(selectedElementsId) do 422 + elementData = {} 423 + elementData.id = id 424 + elementData.name = core.getElementNameById(id) 425 + table.insert(temp_elements_for_sorting, elementData) 426 + end 427 + table.sort(temp_elements_for_sorting, function(a,b) return a.name:lower() < b.name:lower() end) 428 + for i = minOnPage, maxOnPage, 1 do 429 + if temp_elements_for_sorting[i] ~= nil then 430 + elementData = temp_elements_for_sorting[i] 431 + elementType = core.getElementDisplayNameById(elementData.id) 432 + elementData.type = elementType 433 + elementData.name = core.getElementNameById(elementData.id) 434 + elementData.position = core.getElementPositionById(elementData.id) 435 + table.insert(temp_refresh_id_list, elementData.id) 436 + table.insert(temp_elements, elementData) 437 + else 438 + temp_refresh_id_list = {} 439 + temp_elements_for_sorting = {} 440 + temp_elements = {} 441 + break 442 + end 443 + coroutine.yield(coroutinesTable[7]) 444 + end 445 + refresh_id_list = temp_refresh_id_list 446 + temp_refresh_id_list = {} 447 + elements = temp_elements 448 + temp_elements_for_sorting = {} 449 + temp_elements = {} 450 + end, 451 + function() 452 + hud_main_css = [[ 453 + <style> 454 + * { 455 + font-size: 1vh !important; 456 + font-familly: "Play-Bold"; 457 + } 458 + .hud_container { 459 + border: 1px solid black; 460 + border-radius:10px; 461 + background-color: rgba(15,24,29,.75); 462 + padding:10px; 463 + } 464 + .hud_help_commands { 465 + position: absolute; 466 + top: ]] .. tostring((10/1080)*100) .. [[vh; 467 + left: ]] .. tostring((25/1920)*100) .. [[vw; 468 + text-transform: uppercase; 469 + font-weight: bold; 470 + } 471 + .hud_list_container { 472 + position: absolute; 473 + top: ]] .. tostring((100/1080)*100) .. [[vh; 474 + left: ]] .. tostring((25/1920)*100) .. [[vw; 475 + text-transform: uppercase; 476 + font-weight: bold; 477 + } 478 + .hud_machine_detail { 479 + position: absolute; 480 + top: ]] .. tostring((250/1080)*100) .. [[vh; 481 + right: ]] .. tostring((25/1920)*100) .. [[vw; 482 + text-transform: uppercase; 483 + font-weight: bold; 484 + } 485 + .hud_machines_container { 486 + position: absolute; 487 + top: ]] .. tostring((100/1080)*100) .. [[vh; 488 + left: ]] .. tostring((225/1920)*100) .. [[vw; 489 + } 490 + .elementType { 491 + margin-top:10px; 492 + border-radius:5px; 493 + } 494 + .elementType.selected { 495 + border: 2px solid green; 496 + background-color: rgba(0,200,0,.45); 497 + } 498 + tr.selected td, tr.selected th{ 499 + border: 2px solid green; 500 + background-color: rgba(0,200,0,.1); 501 + } 502 + td, th { 503 + border-bottom:1px solid white; 504 + padding:5px; 505 + text-align: center; 506 + } 507 + th { 508 + font-weight: bold; 509 + } 510 + .text-success{color:rgb(34,177,76);} 511 + .text-danger{color:rgb(177,42,42);} 512 + .text-warning{color:rgb(249,212,123);} 513 + .text-info{color:#17a2b8;} 514 + .text-primary{color:#007bff;} 515 + .text-orangered{color:orangered;} 516 + .bg-success{background-color:rgb(34,177,76) !important;} 517 + .bg-danger{background-color:rgb(177,42,42) !important;} 518 + .bg-warning{background-color:rgb(249,212,123) !important;} 519 + .bg-info{background-color:#17a2b8 !important;} 520 + .bg-primary{background-color:#007bff !important;} 521 + small{font-size:.5em;} 522 + </style> 523 + ]] 524 + if not init then 525 + hud_elements_type_list = [[ 526 + <div class="hud_list_container hud_container"> 527 + <table style="width:100%"> 528 + <tr> 529 + <th>LOADING ]] .. math.floor(initIndex*100/#elementsIdList) .. [[% ...</th> 530 + </tr> 531 + </table> 532 + </div> 533 + ]] 534 + end 535 + if hud_displayed then 536 + system.setScreen(hud_main_css .. hud_help_command .. hud_elements_type_list .. hud_machines .. controlHud .. arhtml) 537 + else 538 + system.setScreen(hud_main_css .. hud_help_command .. arhtml) 539 + end 540 + end, 541 + function() 542 + selected_machine = elements[selected_machine_index] 543 + end, 544 + function() 545 + if selected_machine then 546 + if prevRecipe == nil then prevRecipe=''end 547 + if prevStatus == nil then prevStatus=99 end 548 + if selected_machine.status then prevStatus = selected_machine.status end 549 + if selected_machine.recipeName then prevRecipe = selected_machine.recipeName end 550 + local screenpos = library.getPointOnScreen(ConvertLocalToWorld(selected_machine.position, constructPos, constructRight, constructForward, constructUp)) 551 + if screenpos[1] > 1 then screenpos[1] = 1 elseif screenpos[1] < 0 then screenpos[1] = 0 end 552 + if screenpos[2] > .95 then screenpos[2] = .95 elseif screenpos[2] < 0 then screenpos[2] = 0 end 553 + arhtml = [[<div style="text-align:center;position:absolute;left:]] .. utils.round(screenpos[1]*100) .. [[%;top:]] .. utils.round(screenpos[2]*100) .. [[%;;margin-left:-500px;width:1000px;"><div style="width:fit-content;padding:5px;margin:auto;border:2px solid black;border-radius:10px;background-color:rgba(15,24,29,.75);text-align:center;" class="]] .. getIndustryStatusBgClass(prevStatus) .. [[">]] .. selected_machine.name .. [[<br>]] .. (selected_machine.recipeName or prevRecipe) .. [[<br><br><span style="font-weight:bold;">]] .. statusList[prevStatus] .. [[</span></div></div>]] 554 + end 555 + end, 556 + function() 557 + if enableRemoteControl then 558 + if selected_machine then 559 + if prevRecipe == nil then prevRecipe=''end 560 + if prevStatus == nil then prevStatus=99 end 561 + if prevMaintainProductAmount == nil then prevMaintainProductAmount = 0 end 562 + if prevBatchesRequested == nil then prevBatchesRequested = 0 end 563 + if selected_machine.status then prevStatus = selected_machine.status end 564 + if selected_machine.recipeName then prevRecipe = selected_machine.recipeName end 565 + if selected_machine.maintainProductAmount then prevMaintainProductAmount = selected_machine.maintainProductAmount end 566 + if selected_machine.batchesRequested then prevBatchesRequested = selected_machine.batchesRequested end 567 + controlHud = [[<div class="hud_machine_detail hud_container"> 568 + <table> 569 + <tr> 570 + <th colspan="3">]] .. selected_machine.name .. [[</th> 571 + </tr> 572 + <tr> 573 + <th class="]] .. getIndustryStatusClass(prevStatus) .. [[" colspan="3">]] .. statusList[prevStatus] .. [[</th> 574 + </tr> 575 + ]] 576 + if prevStatus == 1 then 577 + command_1 = "START" 578 + command_2 = "BATCH" 579 + command_3 = "MAINTAIN" 580 + controlHud = controlHud .. [[ 581 + <tr> 582 + <th>START</th> 583 + <th></th> 584 + <th>ALT+1</th> 585 + </tr> 586 + <tr> 587 + <th style="height:65px;">BATCH</th> 588 + <th rowspan="2"> 589 + <table> 590 + <tr> 591 + <th colspan="3">Quantity:</th> 592 + </tr> 593 + <tr> 594 + <th style="font-size:20px;"> 595 + ]] 596 + local has_quantity = false 597 + for k,v in pairs(craft_quantity_digits) do 598 + if tonumber(v) == nil then v = 0 end 599 + if tonumber(v) > 0 then 600 + has_quantity = true 601 + end 602 + end 603 + if not has_quantity then 604 + local value = "0" 605 + if prevMaintainProductAmount > 0 then 606 + value = tostring(math.floor(prevMaintainProductAmount)) 607 + elseif prevBatchesRequested > 0 and prevBatchesRequested <= 99999999 then 608 + value = tostring(math.floor(prevBatchesRequested)) 609 + end 610 + for i = #value, 1, -1 do 611 + local c = value:sub(i,i) 612 + craft_quantity_digits[9-(#value-(i-1))] = c 613 + end 614 + end 615 + for digit_index,digit in pairs(craft_quantity_digits) do 616 + controlHud = controlHud .. digit 617 + end 618 + controlHud = controlHud .. [[ 619 + </th> 620 + </tr> 621 + </table> 622 + </th> 623 + <th>ALT+2</th> 624 + </tr> 625 + <tr> 626 + <th>MAINTAIN</th> 627 + <th>ALT+3</th> 628 + </tr> 629 + ]] 630 + else 631 + command_1 = "STOP" 632 + command_2 = "SOFT_STOP" 633 + command_3 = "" 634 + controlHud = controlHud .. [[ 635 + <tr> 636 + <th>STOP</th> 637 + <th>ALT+1</th> 638 + </tr> 639 + <tr> 640 + <th>FINISH AND STOP</th> 641 + <th>ALT+2</th> 642 + </tr> 643 + ]] 644 + end 645 + controlHud = controlHud .. '</table></div>' 646 + end 647 + end 648 + end 649 + } 650 + 651 + function initCoroutines() 652 + for _,f in pairs(MyCoroutines) do 653 + local co = coroutine.create(f) 654 + table.insert(coroutinesTable, co) 655 + end 656 + end 657 + 658 + initCoroutines() 659 + 660 + runCoroutines = function() 661 + for i,co in ipairs(coroutinesTable) do 662 + if coroutine.status(co) == "dead" then 663 + coroutinesTable[i] = coroutine.create(MyCoroutines[i]) 664 + end 665 + if coroutine.status(co) == "suspended" then 666 + assert(coroutine.resume(co)) 667 + end 668 + end 669 + end 670 + 671 + MainCoroutine = coroutine.create(runCoroutines) 672 + 673 + --Enable Display of the HUD 674 + system.showScreen(1)
-3
Master program/source/unit/onStop.lua
··· 1 1 Storage.clear() 2 - for _,m in pairs(markers) do 3 - core.deleteSticker(m) 4 - end
-30
Master program/source/unit/onTimer_buildLists.lua
··· 1 - local maxForLoop = listIndex + maxAmountOfElementsLoadedBySecond 2 - if maxForLoop > #elementsId then maxForLoop = #elementsId end 3 - 4 - for i = listIndex, maxForLoop, 1 do 5 - listIndex = i 6 - local id = elementsId[i] 7 - elementType = core.getElementDisplayNameById(id) 8 - local elementName = core.getElementNameById(id):lower() 9 - if 10 - (elementType:lower():find("container") 11 - and elementName:find(containerMonitoringPrefix:lower())) 12 - or (not elementType:lower():find("container")) 13 - then 14 - local formatedName = removeQualityInName(elementType) 15 - table.insert(elementsTypes, formatedName) 16 - end 17 - if selected_type == removeQualityInName(elementType) then 18 - if 19 - (elementType:lower():find("container") and elementName:find(containerMonitoringPrefix:lower())) 20 - or (not elementType:lower():find("container")) 21 - then 22 - table.insert(selectedElementsId, id) 23 - end 24 - end 25 - end 26 - elementsTypes = removeDuplicatesInTable(elementsTypes) 27 - selectedElementsId = removeDuplicatesInTable(selectedElementsId) 28 - table.sort(elementsTypes, function(a,b) return a:lower() < b:lower() end) 29 - maxPage = math.ceil(#selectedElementsId / elementsByPage) 30 - if listIndex >= #elementsId then listIndex = 1 end
-15
Master program/source/unit/onTimer_helperRefresh.lua
··· 1 - local year, month, day, hour, minute, second = DUCurrentDateTime() 2 - local dateStr = string.format("%02d/%02d/%04d %02d:%02d:%02d",day,month,year,hour,minute,second) 3 - hud_help_command = [[<div class="hud_help_commands hud_container"> 4 - <table> 5 - <tr> 6 - <th colspan="2"> 7 - ]] .. dateStr .. [[ 8 - </th> 9 - </tr> 10 - <tr> 11 - <td>Show/Hide HUD</td> 12 - <th style="text-align:right;">Alt+7</th> 13 - </tr> 14 - </table> 15 - </div>]]
-37
Master program/source/unit/onTimer_init.lua
··· 1 - --load all the machines from the core step by step to avoid CPU Load Errors 2 - 3 - local maxForLoop = initIndex + maxAmountOfElementsLoadedBySecond 4 - if maxForLoop > #elementsIdList then maxForLoop = #elementsIdList end 5 - system.print("Loading elements from " .. initIndex .. " to " .. maxForLoop .. " on " .. #elementsIdList) 6 - 7 - for i = initIndex, maxForLoop, 1 do 8 - initIndex = i 9 - local id = elementsIdList[i] 10 - elementType = core.getElementDisplayNameById(id):lower() 11 - if (elementType:find("assembly line") and enableAssemblyMonitoring == true) or 12 - (elementType:find("glass furnace") and enableGlassMonitoring == true) or 13 - (elementType:find("3d printer") and enable3DPrinterMonitoring == true) or 14 - (elementType:find("smelter") and enableSmelterMonitoring == true) or 15 - (elementType:find("recycler") and enableRecyclerMonitoring == true) or 16 - (elementType:find("refinery") and enableHoneycombMonitoring == true) or 17 - (elementType:find("refiner") and enableRefinerMonitoring == true) or 18 - (elementType:find("industry") 19 - and ( 20 - (elementType:find("chemical") and enableChemicalMonitoring == true) or 21 - (elementType:find("electronics") and enableElectronicsMonitoring == true) or 22 - (elementType:find("metalwork") and enableMetalworkMonitoring == true) 23 - ) 24 - ) or 25 - (elementType == "transfer unit" and enableTransferMonitoring == true) --[[or 26 - (elementType:find("container") and enableContainerMonitoring == true) 27 - ]]-- 28 - then 29 - local formatedType = removeQualityInName(elementType) 30 - if machines_count[formatedType] ~= nil then 31 - machines_count[formatedType] = machines_count[formatedType] + 1 32 - else 33 - machines_count[formatedType] = 1 34 - end 35 - table.insert(elementsId, id) 36 - end 37 - end