Advertisement
klassekatze

Grid Analyzer

May 22nd, 2023 (edited)
1,597
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 84.25 KB | None | 0 0
  1. /*
  2.  * R e a d m e
  3.  * -----------
  4.  *
  5.  * GridAnalyzer is primarily intended for use in creative. Most of what it does is only done on script startup-- to rerun it, the script should be recompiled.
  6.  *
  7.  * PCU counts are hardcoded for Draconis Expanse. These numbers may not be up to date; they are just an aid.
  8.  *
  9.  * On startup, the script will examine the grid and generate a report. The report is echoed and saved to CustomData.
  10.  * The report will warn about the absence of beacons, survival kits, gas tanks,
  11.  * connectors, cockpits, gyros, projector, maglocks, rotors, and antenna. In some cases, it provides a count.
  12.  * While not every build needs all of these, these warnings ensure none of them are left out by accident.
  13.  *
  14.  * The report will then list the thrust acceleration available in each direction, relative to the cockpit. This requires the grid to be a ship, not a station.
  15.  *
  16.  * Finally, the report will list a count of every type of functional block in the ship, along with their mass and PCU utilization.
  17.  * This list will be generated twice, sorted by PCU and then by mass.
  18.  *
  19.  * If the mod (DevTool) Programmable Block DebugAPI ( https://steamcommunity.com/sharedfiles/filedetails/?id=2654858862 ) is present,
  20.  * the script will examine the grid and render 3D boxes around thrusters and cargo containers that can't reach fuel or lack conveyor connection to the cockpit, respectively.
  21.  *
  22.  * Command list:
  23.  * check
  24.  *  - reruns thruster fuel, conveyor checks, and re-renders at the end
  25.  * clear
  26.  *  - clears all debug rendering
  27.  * ontop
  28.  *  - toggles whether things render through solids or not
  29.  * highlight TEXT
  30.  *  - will highlight or un-highlight blocks with a type name or custom name containing TEXT
  31.  *
  32.  */
  33.  
  34. public Program()
  35. {
  36.     Utility.setup();
  37.     report();
  38.     Runtime.UpdateFrequency = UpdateFrequency.Update1;
  39. }
  40.  
  41. struct ReportEntry
  42. {
  43.     public string name;
  44.     public int count;
  45.     public int PCU;
  46.     public int mass;
  47. }
  48.  
  49. int gridCount<T>(Func<IMyTerminalBlock, bool> f = null) where T : class
  50. {
  51.     List<IMyTerminalBlock> blocks = new List<IMyTerminalBlock>();
  52.     GridTerminalSystem.GetBlocksOfType<T>(blocks, f);
  53.     return blocks.Count;
  54. }
  55.  
  56. string newtons(double n)
  57. {
  58.     if (n < 1000) return n.ToString("0.0") + "N";
  59.     if (n < 1000000) return (n/1000).ToString("0.0") + "kN";
  60.     /*if (n < 1000000000)*/ return (n / 1000000).ToString("0.0") + "MN";
  61. }
  62. public void report()
  63. {
  64.     //int total_PCU = 0;
  65.     //int total_mass = 0;
  66.     Dictionary<string, string> displayname_to_defname = new Dictionary<string, string>();
  67.     Dictionary<string, int> blocktype_count = new Dictionary<string, int>();
  68.     Dictionary<string, int> mass_by_blocktype = new Dictionary<string, int>();
  69.  
  70.     //List<ReportEntry> entries = new List<ReportEntry>();
  71.  
  72.     List<IMyTerminalBlock> blocks = new List<IMyTerminalBlock>();
  73.     GridTerminalSystem.GetBlocksOfType<IMyTerminalBlock>(blocks);
  74.     for(int i = 0; i < blocks.Count; i++)
  75.     {
  76.         IMyTerminalBlock block = blocks[i];
  77.         string name = Utility.getName(block);
  78.         if (!blocktype_count.ContainsKey(name)) blocktype_count[name] = 0;
  79.         if (!mass_by_blocktype.ContainsKey(name)) mass_by_blocktype[name] = 0;
  80.         if (!displayname_to_defname.ContainsKey(name))
  81.         {
  82.             displayname_to_defname[name] = Utility.getDefName(block);
  83.         }
  84.         blocktype_count[name] += 1;
  85.         mass_by_blocktype[name] += (int)Math.Ceiling(block.Mass);
  86.     }
  87.  
  88.     List<ReportEntry> entries = new List<ReportEntry>();
  89.  
  90.     string report = "";
  91.     foreach(KeyValuePair<string, int> kvp in blocktype_count)
  92.     {
  93.         var key = kvp.Key;
  94.         int count = blocktype_count[key];
  95.         int pcu = Utility.getPCU(displayname_to_defname[key]);
  96.  
  97.         ReportEntry e = new ReportEntry();
  98.         e.name = key;
  99.         e.count = count;
  100.         e.PCU = pcu*count;
  101.         e.mass = mass_by_blocktype[key];
  102.         entries.Add(e);
  103.         //entries.a
  104.         //report += count + " " + key + " totalling " + pcu * count + " PCU and " + mass_by_blocktype[key] + " mass\n";
  105.     }
  106.     List<IMyShipController> ctrls = new List<IMyShipController>();
  107.     GridTerminalSystem.GetBlocksOfType<IMyShipController>(ctrls);
  108.     if (ctrls.Count > 0)
  109.     {
  110.         var c = ctrls[0];
  111.         int bm = (int)c.CalculateShipMass().BaseMass;
  112.         foreach (ReportEntry e in entries)
  113.         {
  114.             bm -= e.mass;
  115.         }
  116.         var r = new ReportEntry();
  117.         r.name = "remainder (armor etc)";
  118.         r.count = -1;
  119.         r.mass = bm;
  120.         entries.Add(r);
  121.     }
  122.  
  123.     report += "Report saved to CustomData.\n\n";
  124.  
  125.     if (gridCount<IMyBeacon>() < 1) report += "WARNING: No beacon!\n";
  126.     int skits = gridCount<IMyTerminalBlock>(b => b.DefinitionDisplayNameText.ToLower().Contains("survival") || b is IMyMedicalRoom);
  127.     if (skits < 1) report += "WARNING: No medical room or skit!\n";
  128.     else report += "Skits: " + skits + "\n";
  129.     int pbc = gridCount<IMyProgrammableBlock>();
  130.     report += "Program blocks: " + pbc + "\n";
  131.     if (gridCount<IMyGyro>() < 1) report += "WARNING: No gyros!\n";
  132.     if (gridCount<IMyGasTank>(b => b.DefinitionDisplayNameText.ToLower().Contains("hydrogen")) < 1)report += "WARNING: No hydrogen tanks!\n";
  133.     if (gridCount<IMyGasTank>(b => b.DefinitionDisplayNameText.ToLower().Contains("oxygen")) < 1) report += "WARNING: No oxygen tanks!\n";
  134.     if (gridCount<IMyShipConnector>() < 1) report += "WARNING: No connectors!\n";
  135.     if (gridCount<IMyCockpit>() < 1) report += "WARNING: No cockpit!\n";
  136.     //if (gridCount<IMyUpgradeModule>(b => b.DefinitionDisplayNameText.ToLower().Contains("stabilizer")) < 1) report += "WARNING: No Epstein Stabilizer!\n";
  137.     if (gridCount<IMyCargoContainer>() < 1) report += "WARNING: No cargo containers!\n";
  138.     if (gridCount<IMyProjector>() < 1) report += "WARNING: No projector!\n";
  139.     if (gridCount<IMyLandingGear>() < 1) report += "WARNING: No maglocks!\n";
  140.     if (gridCount<IMyMotorStator>() < 1) report += "WARNING: No rotor!\n";
  141.     if (gridCount<IMyRadioAntenna>() < 1) report += "WARNING: No antenna!\n";
  142.  
  143.     report += "\nTHRUST REPORT:\n";
  144.  
  145.     List<IMyThrust> thrusters = new List<IMyThrust>();
  146.     double mass = 0;
  147.     GridTerminalSystem.GetBlocksOfType<IMyThrust>(thrusters);
  148.     if (ctrls.Count > 0)
  149.     {
  150.         mass = ctrls[0].CalculateShipMass().PhysicalMass;
  151.  
  152.         Dictionary<Base6Directions.Direction, double> thrustByDir = new Dictionary<Base6Directions.Direction, double>();
  153.         foreach (var d in (Base6Directions.Direction[])Enum.GetValues(typeof(Base6Directions.Direction)))
  154.         {
  155.             thrustByDir[d] = 0;
  156.         }
  157.         foreach (var t in thrusters)
  158.         {
  159.             var met = t.MaxEffectiveThrust;
  160.             var d = ctrls[0].Orientation.TransformDirectionInverse(t.Orientation.Forward);
  161.             if (!thrustByDir.ContainsKey(d)) thrustByDir[d] = met;
  162.             else thrustByDir[d] += met;
  163.         }
  164.         foreach (var d in (Base6Directions.Direction[])Enum.GetValues(typeof(Base6Directions.Direction)))
  165.         {
  166.             double t = thrustByDir[d];
  167.             report += d + " dir thrust: " + newtons(t) + " (" + (t / mass).ToString("0.0") + "m/s)\n";
  168.         }
  169.     }else
  170.     {
  171.         report += "Thrust report requires a cockpit.\n";
  172.     }
  173.  
  174.     report += "\nREPORT BY PCU:\n";
  175.     entries.Sort(delegate (ReportEntry x, ReportEntry y)
  176.      {
  177.          return y.PCU.CompareTo(x.PCU);
  178.      });
  179.     foreach (ReportEntry e in entries)
  180.     {
  181.         report += " "+e.count + " " + e.name + ": " + e.PCU + " PCU, " + e.mass + " mass\n";
  182.     }
  183.     report += "\nREPORT BY MASS:\n";
  184.     entries.Sort(delegate (ReportEntry x, ReportEntry y)
  185.     {
  186.         return y.mass.CompareTo(x.mass);
  187.     });
  188.     foreach (ReportEntry e in entries)
  189.     {
  190.         report += " " + e.count + " " + e.name + ": " + e.PCU + " PCU, " + e.mass + " mass\n";
  191.     }
  192.  
  193.     Echo(report);
  194.     Me.CustomData = report;
  195. }
  196.  
  197. DebugAPI Debug;
  198.  
  199. List<IMyThrust> thrusters = new List<IMyThrust>();
  200. List<IMyGasGenerator> gasgenerators = new List<IMyGasGenerator>();
  201. List<IMyGasTank> tanks_hydrogen = new List<IMyGasTank>();
  202. IMyShipController ctrl = null;
  203. Dictionary<IMyThrust, bool> thrusterC = new Dictionary<IMyThrust, bool>();
  204.  
  205. double chkNewtons = 0;
  206.  
  207. void updBlocks()
  208. {
  209.     thrusters.Clear();
  210.     gasgenerators.Clear();
  211.     tanks_hydrogen.Clear();
  212.     GridTerminalSystem.GetBlocksOfType(gasgenerators);
  213.     GridTerminalSystem.GetBlocksOfType(thrusters);
  214.     GridTerminalSystem.GetBlocksOfType(tanks_hydrogen, b => b.OwnerId == Me.OwnerId && b.CubeGrid == Me.CubeGrid && b.DefinitionDisplayNameText.Contains("Hydrogen"));
  215.     chkNewtons = 0;
  216.     foreach (var b in tanks_hydrogen) chkNewtons += (double)b.Capacity;
  217.     chkNewtons = chkNewtons / 1000000 * 500;
  218.  
  219.     List<IMyShipController> ctrls = new List<IMyShipController>();
  220.     GridTerminalSystem.GetBlocksOfType<IMyShipController>(ctrls);
  221.     ctrl = ctrls[0];
  222. }
  223.  
  224.  
  225.  
  226. int itr = 0;
  227.  
  228. double hydrogenLevel()
  229. {
  230.     double r = 0;
  231.     foreach(var b in tanks_hydrogen)r += (double)b.FilledRatio * (double)b.Capacity;
  232.     return r;
  233. }
  234.  
  235. public bool usingHydrogen()
  236. {
  237.     foreach (var b in tanks_hydrogen)
  238.     {
  239.         Me.CustomData = b.DetailedInfo;
  240.     }
  241.     return false;
  242. }
  243.  
  244.  
  245. int tchk = -1;
  246.  
  247. void startcheck()
  248. {
  249.     if (!runningCheck)
  250.     {
  251.         checking = false;
  252.         runningCheck = true;
  253.         checkNewOnly = false;
  254.         tchk = -1;
  255.     }
  256. }
  257. bool checkNewOnly = false;
  258. bool runningCheck = true;
  259. bool checking = false;
  260. double hStartLevel = 0;
  261. public void thrustCheck()
  262. {
  263.     if (!runningCheck) return;
  264.     if (ctrl == null) return;
  265.     if(tchk == -1)
  266.     {
  267.         echo("initializing thrust check for "+ thrusters.Count+" thrusters");
  268.         foreach (var g in gasgenerators) g.Enabled = false;
  269.         foreach (IMyThrust t in thrusters)
  270.         {
  271.             t.Enabled = false;
  272.             t.ThrustOverride = 0;
  273.         }
  274.         tchk = 0;
  275.     }else
  276.     {
  277.         if (checkNewOnly && tchk < thrusters.Count)
  278.         {
  279.             bool skip = false;
  280.             do
  281.             {
  282.                 if (thrusterC.ContainsKey(thrusters[tchk]))
  283.                 {
  284.                     tchk += 1;
  285.                     skip = true;
  286.                 }
  287.                 else skip = false;
  288.             } while (tchk < thrusters.Count && skip);
  289.         }
  290.         if (tchk >= thrusters.Count)
  291.         {
  292.             echo("thruster checks done");
  293.             runningCheck = false;
  294.             foreach (IMyThrust th in thrusters)
  295.             {
  296.                 th.Enabled = true;
  297.                 th.ThrustOverride = 0;
  298.             }
  299.             foreach (var g in gasgenerators) g.Enabled = true;
  300.             tchk = -1;
  301.             renderDirty = true;
  302.             //Debug.PrintChat("finished tchk setting renderDirty=true", font: DebugAPI.Font.Red);
  303.         }
  304.         else
  305.         {
  306.             var t = thrusters[tchk];
  307.             if (!checking)
  308.             {
  309.                 if (ctrl.GetShipVelocities().LinearVelocity.Length() > 0.01) return;
  310.                 //SAN check - suspend this until ship isn't moving much
  311.                 echo("checking thruster " + tchk + "/" + thrusters.Count);
  312.                 checking = true;
  313.                 hStartLevel = hydrogenLevel();
  314.                 t.Enabled = true;
  315.                 t.ThrustOverride = (float)chkNewtons;
  316.             }
  317.             else
  318.             {
  319.                 checking = false;
  320.                 bool connected = hydrogenLevel() != hStartLevel;
  321.                 t.Enabled = false;
  322.                 t.ThrustOverride = 0;
  323.                 thrusterC[t] = connected;
  324.                 tchk += 1;
  325.             }
  326.         }
  327.     }
  328. }
  329. bool renderDirty = false;
  330.  
  331. MyOrientedBoundingBoxD getBlockOBB(IMyTerminalBlock b)
  332. {
  333.     float cellSize = b.CubeGrid.GridSize;
  334.     Vector3D offset = Vector3D.Half * cellSize;
  335.     BoundingBoxD gridLocalBB = new BoundingBoxD(b.CubeGrid.Min * cellSize - offset, b.CubeGrid.Max * cellSize + offset);
  336.     Vector3D min = (b.Min * cellSize) - offset;// * cellSize - offset;
  337.     Vector3D max = ((b.Max + 1) * cellSize) - offset;
  338.     gridLocalBB = new BoundingBoxD(min, max);
  339.     MyOrientedBoundingBoxD obb = new MyOrientedBoundingBoxD(gridLocalBB, b.CubeGrid.WorldMatrix);
  340.     //Debug.DrawOBB(obb, new Color(255, 0, 255));
  341.     return obb;
  342. }
  343.  
  344. void echo(string s)
  345. {
  346.     Echo(s);
  347.     Me.GetSurface(0).WriteText(s);
  348. }
  349.  
  350.  
  351. void normalizeNumbering()
  352. {
  353.     List<IMyTerminalBlock> blocks = new List<IMyTerminalBlock>();
  354.     GridTerminalSystem.GetBlocksOfType(blocks);
  355.     Dictionary<string, int> btypecount = new Dictionary<string, int>();
  356.     foreach(var b in blocks)
  357.     {
  358.         var tn = b.DefinitionDisplayNameText;
  359.         if (!btypecount.ContainsKey(tn)) btypecount[tn] = 1;
  360.         else btypecount[tn] += 1;
  361.  
  362.         var isnumbered = false;
  363.         var l= b.CustomName.Split(' ').Last();
  364.         int i = 0;
  365.         bool result = int.TryParse(l, out i);
  366.         if (result && i.ToString() == l) isnumbered = true;
  367.  
  368.         if (isnumbered)
  369.         {
  370.             string nonum = b.CustomName.Substring(0, b.CustomName.Length - (l.Length + 1));
  371.             string newname = nonum + " " + (btypecount[tn]);
  372.             b.CustomName = newname;
  373.         }
  374.  
  375.     }
  376. }
  377.  
  378. List<IMyTerminalBlock> highlightlist = new List<IMyTerminalBlock>();
  379.  
  380. bool onTop = false;
  381. void updateAnalyticRender()
  382. {
  383.     if (Debug != null && Debug.ModDetected)
  384.     {
  385.         try
  386.         {
  387.             //runningCheck = true;
  388.             Debug.RemoveDraw();
  389.             //Debug.DrawMatrix(Me.WorldMatrix, onTop: true);
  390.  
  391.             List<IMyTerminalBlock> connectables = new List<IMyTerminalBlock>();
  392.             GridTerminalSystem.GetBlocksOfType(connectables, b => b.HasInventory || b is IMyThrust);
  393.             List<IMyShipController> ctrls = new List<IMyShipController>();
  394.             GridTerminalSystem.GetBlocksOfType(ctrls, b => b.HasInventory);
  395.             if (ctrls.Count > 0)
  396.             {
  397.                 List<IMyTerminalBlock> broken_inventories = new List<IMyTerminalBlock>();
  398.                 List<IMyTerminalBlock> broken_thrusters = new List<IMyTerminalBlock>();
  399.                 foreach (IMyTerminalBlock b in connectables)
  400.                 {
  401.                     if (b.HasInventory)
  402.                     {
  403.                         var i = b.GetInventory(0);
  404.                         List<MyItemType> it = new List<MyItemType>();
  405.                         i.GetAcceptedItems(it);
  406.                         bool broken = true;
  407.                         foreach (var c in ctrls)
  408.                         {
  409.                             IMyGasTank t;
  410.                             if (c.GetInventory(0).CanTransferItemTo(i, it[0]))
  411.                             {
  412.                                 broken = false;
  413.                                 break;
  414.                             }
  415.                         }
  416.                         if (broken) broken_inventories.Add(b);
  417.                     }
  418.                     else if (b is IMyThrust)
  419.                     {
  420.                         IMyThrust i = (IMyThrust)b;
  421.                         if (thrusterC.ContainsKey(i))
  422.                         {
  423.                             if (!thrusterC[i]) broken_thrusters.Add(b);
  424.                         }
  425.                         else
  426.                         {
  427.                             //Debug.PrintChat("recheck because "+i.CustomName, font: DebugAPI.Font.Red);
  428.                             updBlocks();
  429.                             startcheck();
  430.                             checkNewOnly = true;
  431.                         }
  432.                     }
  433.                 }
  434.  
  435.                 float cellSize = Me.CubeGrid.GridSize;
  436.  
  437.                 foreach (var b in broken_inventories)
  438.                 {
  439.                     Debug.DrawOBB(getBlockOBB(b), Color.Red * 0.25f, DebugAPI.Style.SolidAndWireframe, onTop: onTop);
  440.                 }
  441.                 foreach (var b in broken_thrusters)
  442.                 {
  443.                     Debug.DrawOBB(getBlockOBB(b), Color.Yellow * 0.25f, DebugAPI.Style.SolidAndWireframe, onTop: onTop);
  444.                 }
  445.  
  446.                 foreach (var b in highlightlist)
  447.                 {
  448.                     Debug.DrawOBB(getBlockOBB(b), Color.Green * 0.25f, DebugAPI.Style.SolidAndWireframe, onTop: onTop);
  449.                 }
  450.             }
  451.         }
  452.         catch (Exception e)
  453.         {
  454.             // example way to get notified on error then allow PB to stop (crash)
  455.             Debug.PrintChat($"{e.Message}\n{e.StackTrace}", font: DebugAPI.Font.Red);
  456.             Me.CustomData = e.ToString();
  457.             throw;
  458.         }
  459.     }
  460. }
  461.  
  462. double lastMass = 0;
  463. int lConnect = 0;
  464.  
  465. bool fr = true;
  466. int tick = 0;
  467. public void Main(string argument, UpdateType updateSource)
  468. {
  469.     if (argument == "nn")
  470.     {
  471.         normalizeNumbering();
  472.     }
  473.  
  474.     tick += 1;
  475.     if (Debug == null)
  476.     {
  477.         Debug = new DebugAPI(this);
  478.  
  479.  
  480.         if (Debug.ModDetected)
  481.         {
  482.             var s = Me.GetSurface(0);
  483.             s.ContentType = ContentType.TEXT_AND_IMAGE;
  484.             updBlocks();
  485.             startcheck();
  486.         }
  487.         else
  488.         {
  489.             Runtime.UpdateFrequency = UpdateFrequency.None;
  490.             return;
  491.         }
  492.     }
  493.     if (ctrl == null) return;
  494.     /*if (tick % 30 == 0)
  495.             {
  496.                 List<IMyShipController> ctrls = new List<IMyShipController>();
  497.                 if (ctrls.Count > 0)
  498.                 {
  499.                     List<IMyTerminalBlock> connectables = new List<IMyTerminalBlock>();
  500.                     GridTerminalSystem.GetBlocksOfType(connectables, b => b.HasInventory || b is IMyThrust);
  501.  
  502.  
  503.                     //var m = ctrls[0].CalculateShipMass().BaseMass;
  504.                     if (connectables.Count != lConnect)
  505.                     {
  506.                         lConnect = connectables.Count;
  507.                         updBlocks();
  508.                         startcheck();
  509.                         checkNewOnly = true;
  510.                     }
  511.                 }
  512.             }*/
  513.  
  514.     if (tick % 2 == 0)thrustCheck();
  515.  
  516.     /*if(!runningCheck && fr)
  517.             {
  518.                 fr = false;
  519.                 updateAnalyticRender();
  520.                 runningCheck = false;
  521.             }*/
  522.  
  523.     if (renderDirty)
  524.     {
  525.         if(renderDirty)// Debug.PrintChat("renderDirty", font: DebugAPI.Font.Red);
  526.         renderDirty = false;
  527.         updateAnalyticRender();
  528.     }
  529.     if(argument == "clear")
  530.     {
  531.         Debug.RemoveDraw();
  532.         highlightlist.Clear();
  533.     }
  534.     else if (argument == "check")
  535.     {
  536.         updBlocks();
  537.         startcheck();
  538.     }else if(argument == "ontop")
  539.     {
  540.         onTop = !onTop;
  541.         updateAnalyticRender();
  542.     }else if(argument.StartsWith("highlight "))
  543.     {
  544.         var s = argument.Substring("highlight ".Length);
  545.         List<IMyTerminalBlock> blox = new List<IMyTerminalBlock>();
  546.         GridTerminalSystem.GetBlocksOfType(blox);
  547.         foreach(var b in blox)
  548.         {
  549.             string n = b.DefinitionDisplayNameText.ToLower();
  550.             string cn = b.CustomName.ToLower();
  551.             if(n.Contains(s) || cn.Contains(s))
  552.             {
  553.                 if (highlightlist.Contains(b)) highlightlist.Remove(b);
  554.                 else highlightlist.Add(b);
  555.             }
  556.         }
  557.         updateAnalyticRender();
  558.     }
  559. }
  560.  
  561. /// <summary>
  562.         /// Create an instance of this and hold its reference.
  563.         /// </summary>
  564. public class DebugAPI
  565. {
  566.     public readonly bool ModDetected;
  567.  
  568.     /// <summary>
  569.             /// Recommended to be used at start of Main(), unless you wish to draw things persistently and remove them manually.
  570.             /// <para>Removes everything except AdjustNumber and chat messages.</para>
  571.             /// </summary>
  572.     public void RemoveDraw() => _removeDraw?.Invoke(_pb);
  573.     Action<IMyProgrammableBlock> _removeDraw;
  574.  
  575.     /// <summary>
  576.             /// Removes everything that was added by this API (except chat messages), including DeclareAdjustNumber()!
  577.             /// <para>For calling in Main() you should use <see cref="RemoveDraw"/> instead.</para>
  578.             /// </summary>
  579.     public void RemoveAll() => _removeAll?.Invoke(_pb);
  580.     Action<IMyProgrammableBlock> _removeAll;
  581.  
  582.     /// <summary>
  583.             /// You can store the integer returned by other methods then remove it with this when you wish.
  584.             /// <para>Or you can not use this at all and call <see cref="RemoveDraw"/> on every Main() so that your drawn things live a single PB run.</para>
  585.             /// </summary>
  586.     public void Remove(int id) => _remove?.Invoke(_pb, id);
  587.     Action<IMyProgrammableBlock, int> _remove;
  588.  
  589.     public int DrawPoint(Vector3D origin, Color color, float radius = 0.2f, float seconds = DefaultSeconds, bool? onTop = null) => _point?.Invoke(_pb, origin, color, radius, seconds, onTop ?? _defaultOnTop) ?? -1;
  590.     Func<IMyProgrammableBlock, Vector3D, Color, float, float, bool, int> _point;
  591.  
  592.     public int DrawLine(Vector3D start, Vector3D end, Color color, float thickness = DefaultThickness, float seconds = DefaultSeconds, bool? onTop = null) => _line?.Invoke(_pb, start, end, color, thickness, seconds, onTop ?? _defaultOnTop) ?? -1;
  593.     Func<IMyProgrammableBlock, Vector3D, Vector3D, Color, float, float, bool, int> _line;
  594.  
  595.     public int DrawAABB(BoundingBoxD bb, Color color, Style style = Style.Wireframe, float thickness = DefaultThickness, float seconds = DefaultSeconds, bool? onTop = null) => _aabb?.Invoke(_pb, bb, color, (int)style, thickness, seconds, onTop ?? _defaultOnTop) ?? -1;
  596.     Func<IMyProgrammableBlock, BoundingBoxD, Color, int, float, float, bool, int> _aabb;
  597.  
  598.     public int DrawOBB(MyOrientedBoundingBoxD obb, Color color, Style style = Style.Wireframe, float thickness = DefaultThickness, float seconds = DefaultSeconds, bool? onTop = null) => _obb?.Invoke(_pb, obb, color, (int)style, thickness, seconds, onTop ?? _defaultOnTop) ?? -1;
  599.     Func<IMyProgrammableBlock, MyOrientedBoundingBoxD, Color, int, float, float, bool, int> _obb;
  600.  
  601.     public int DrawSphere(BoundingSphereD sphere, Color color, Style style = Style.Wireframe, float thickness = DefaultThickness, int lineEveryDegrees = 15, float seconds = DefaultSeconds, bool? onTop = null) => _sphere?.Invoke(_pb, sphere, color, (int)style, thickness, lineEveryDegrees, seconds, onTop ?? _defaultOnTop) ?? -1;
  602.     Func<IMyProgrammableBlock, BoundingSphereD, Color, int, float, int, float, bool, int> _sphere;
  603.  
  604.     public int DrawMatrix(MatrixD matrix, float length = 1f, float thickness = DefaultThickness, float seconds = DefaultSeconds, bool? onTop = null) => _matrix?.Invoke(_pb, matrix, length, thickness, seconds, onTop ?? _defaultOnTop) ?? -1;
  605.     Func<IMyProgrammableBlock, MatrixD, float, float, float, bool, int> _matrix;
  606.  
  607.     /// <summary>
  608.             /// Adds a HUD marker for a world position.
  609.             /// <para>White is used if <paramref name="color"/> is null.</para>
  610.             /// </summary>
  611.     public int DrawGPS(string name, Vector3D origin, Color? color = null, float seconds = DefaultSeconds) => _gps?.Invoke(_pb, name, origin, color, seconds) ?? -1;
  612.     Func<IMyProgrammableBlock, string, Vector3D, Color?, float, int> _gps;
  613.  
  614.     /// <summary>
  615.             /// Adds a notification center on screen. Do not give 0 or lower <paramref name="seconds"/>.
  616.             /// </summary>
  617.     public int PrintHUD(string message, Font font = Font.Debug, float seconds = 2) => _printHUD?.Invoke(_pb, message, font.ToString(), seconds) ?? -1;
  618.     Func<IMyProgrammableBlock, string, string, float, int> _printHUD;
  619.  
  620.     /// <summary>
  621.             /// Shows a message in chat as if sent by the PB (or whoever you want the sender to be)
  622.             /// <para>If <paramref name="sender"/> is null, the PB's CustomName is used.</para>
  623.             /// <para>The <paramref name="font"/> affects the fontface and color of the entire message, while <paramref name="senderColor"/> only affects the sender name's color.</para>
  624.             /// </summary>
  625.     public void PrintChat(string message, string sender = null, Color? senderColor = null, Font font = Font.Debug) => _chat?.Invoke(_pb, message, sender, senderColor, font.ToString());
  626.     Action<IMyProgrammableBlock, string, string, Color?, string> _chat;
  627.  
  628.     /// <summary>
  629.             /// Used for realtime adjustments, allows you to hold the specified key/button with mouse scroll in order to adjust the <paramref name="initial"/> number by <paramref name="step"/> amount.
  630.             /// <para>Add this once at start then store the returned id, then use that id with <see cref="GetAdjustNumber(int)"/>.</para>
  631.             /// </summary>
  632.     public void DeclareAdjustNumber(out int id, double initial, double step = 0.05, Input modifier = Input.Control, string label = null) => id = _adjustNumber?.Invoke(_pb, initial, step, modifier.ToString(), label) ?? -1;
  633.     Func<IMyProgrammableBlock, double, double, string, string, int> _adjustNumber;
  634.  
  635.     /// <summary>
  636.             /// See description for: <see cref="DeclareAdjustNumber(double, double, Input, string)"/>.
  637.             /// <para>The <paramref name="noModDefault"/> is returned when the mod is not present.</para>
  638.             /// </summary>
  639.     public double GetAdjustNumber(int id, double noModDefault = 1) => _getAdjustNumber?.Invoke(_pb, id) ?? noModDefault;
  640.     Func<IMyProgrammableBlock, int, double> _getAdjustNumber;
  641.  
  642.     /// <summary>
  643.             /// Gets simulation tick since this session started. Returns -1 if mod is not present.
  644.             /// </summary>
  645.     public int GetTick() => _tick?.Invoke() ?? -1;
  646.     Func<int> _tick;
  647.  
  648.     public enum Style { Solid, Wireframe, SolidAndWireframe }
  649.     public enum Input { MouseLeftButton, MouseRightButton, MouseMiddleButton, MouseExtraButton1, MouseExtraButton2, LeftShift, RightShift, LeftControl, RightControl, LeftAlt, RightAlt, Tab, Shift, Control, Alt, Space, PageUp, PageDown, End, Home, Insert, Delete, Left, Up, Right, Down, D0, D1, D2, D3, D4, D5, D6, D7, D8, D9, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, NumPad0, NumPad1, NumPad2, NumPad3, NumPad4, NumPad5, NumPad6, NumPad7, NumPad8, NumPad9, Multiply, Add, Separator, Subtract, Decimal, Divide, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12 }
  650.     public enum Font { Debug, White, Red, Green, Blue, DarkBlue }
  651.  
  652.     const float DefaultThickness = 0.02f;
  653.     const float DefaultSeconds = -1;
  654.  
  655.     IMyProgrammableBlock _pb;
  656.     bool _defaultOnTop;
  657.  
  658.     /// <summary>
  659.             /// NOTE: if mod is not present then methods will simply not do anything, therefore you can leave the methods in your released code.
  660.             /// </summary>
  661.             /// <param name="program">pass `this`.</param>
  662.             /// <param name="drawOnTopDefault">set the default for onTop on all objects that have such an option.</param>
  663.     public DebugAPI(MyGridProgram program, bool drawOnTopDefault = false)
  664.     {
  665.         if (program == null)
  666.             throw new Exception("Pass `this` into the API, not null.");
  667.  
  668.         _defaultOnTop = drawOnTopDefault;
  669.         _pb = program.Me;
  670.  
  671.         var methods = _pb.GetProperty("DebugAPI")?.As<IReadOnlyDictionary<string, Delegate>>()?.GetValue(_pb);
  672.         if (methods != null)
  673.         {
  674.             Assign(out _removeAll, methods["RemoveAll"]);
  675.             Assign(out _removeDraw, methods["RemoveDraw"]);
  676.             Assign(out _remove, methods["Remove"]);
  677.             Assign(out _point, methods["Point"]);
  678.             Assign(out _line, methods["Line"]);
  679.             Assign(out _aabb, methods["AABB"]);
  680.             Assign(out _obb, methods["OBB"]);
  681.             Assign(out _sphere, methods["Sphere"]);
  682.             Assign(out _matrix, methods["Matrix"]);
  683.             Assign(out _gps, methods["GPS"]);
  684.             Assign(out _printHUD, methods["HUDNotification"]);
  685.             Assign(out _chat, methods["Chat"]);
  686.             Assign(out _adjustNumber, methods["DeclareAdjustNumber"]);
  687.             Assign(out _getAdjustNumber, methods["GetAdjustNumber"]);
  688.             Assign(out _tick, methods["Tick"]);
  689.  
  690.             RemoveAll(); // cleanup from past compilations on this same PB
  691.  
  692.             ModDetected = true;
  693.         }
  694.     }
  695.  
  696.     void Assign<T>(out T field, object method) => field = (T)method;
  697. }
  698.  
  699. public class Utility
  700. {
  701.     static Dictionary<string, int> PCUTable = new Dictionary<string, int>();
  702.  
  703.     static int mobl = "MyObjectBuilder_".Length;
  704.  
  705.     public static string getName(IMyTerminalBlock block)
  706.     {
  707.         return block.DefinitionDisplayNameText;
  708.     }
  709.     public static string getDefName(IMyTerminalBlock block)
  710.     {
  711.         string n = block.BlockDefinition.TypeIdString.Substring(mobl) + "/" + block.BlockDefinition.SubtypeId;
  712.         return n;
  713.     }
  714.     public static int getPCU(string defname)
  715.     {
  716.         if (PCUTable.ContainsKey(defname)) return PCUTable[defname];
  717.         return 0;
  718.         //DisplayNames[n] = t.DefinitionDisplayNameText;
  719.     }
  720.  
  721.  
  722.     public static void setup()
  723.     {
  724.         if (PCUTable.Count > 0) return;
  725.  
  726.         PCUTable["MyProgrammableBlock/SmallProgrammableBlock"]=100;
  727. PCUTable["MyObjectBuilder_Projector/LargeProjector"]=50;
  728. PCUTable["MyObjectBuilder_Projector/SmallProjector"]=50;
  729. PCUTable["SensorBlock/SmallBlockSensor"]=25;
  730. PCUTable["SensorBlock/LargeBlockSensor"]=25;
  731. PCUTable["TargetDummyBlock/TargetDummy"]=25;
  732. PCUTable["SoundBlock/SmallBlockSoundBlock"]=25;
  733. PCUTable["SoundBlock/LargeBlockSoundBlock"]=25;
  734. PCUTable["ButtonPanel/ButtonPanelLarge"]=5;
  735. PCUTable["ButtonPanel/ButtonPanelSmall"]=5;
  736. PCUTable["ButtonPanel/LargeButtonPanelPedestal"]=5;
  737. PCUTable["ButtonPanel/SmallButtonPanelPedestal"]=5;
  738. PCUTable["TimerBlock/TimerBlockLarge"]=25;
  739. PCUTable["TimerBlock/TimerBlockSmall"]=25;
  740. PCUTable["MyProgrammableBlock/LargeProgrammableBlock"]=100;
  741. PCUTable["TurretControlBlock/LargeTurretControlBlock"]=100;
  742. PCUTable["TurretControlBlock/SmallTurretControlBlock"]=100;
  743. PCUTable["EventControllerBlock/EventControllerLarge"]=10;
  744. PCUTable["EventControllerBlock/EventControllerSmall"]=10;
  745. PCUTable["PathRecorderBlock/LargePathRecorderBlock"]=25;
  746. PCUTable["PathRecorderBlock/SmallPathRecorderBlock"]=25;
  747. PCUTable["BasicMissionBlock/LargeBasicMission"]=15;
  748. PCUTable["BasicMissionBlock/SmallBasicMission"]=15;
  749. PCUTable["FlightMovementBlock/LargeFlightMovement"]=25;
  750. PCUTable["FlightMovementBlock/SmallFlightMovement"]=25;
  751. PCUTable["DefensiveCombatBlock/LargeDefensiveCombat"]=25;
  752. PCUTable["DefensiveCombatBlock/SmallDefensiveCombat"]=25;
  753. PCUTable["OffensiveCombatBlock/LargeOffensiveCombat"]=25;
  754. PCUTable["OffensiveCombatBlock/SmallOffensiveCombat"]=25;
  755. PCUTable["RadioAntenna/LargeBlockRadioAntenna"]=100;
  756. PCUTable["Beacon/LargeBlockBeacon"]=50;
  757. PCUTable["Beacon/SmallBlockBeacon"]=50;
  758. PCUTable["RadioAntenna/SmallBlockRadioAntenna"]=100;
  759. PCUTable["RemoteControl/LargeBlockRemoteControl"]=25;
  760. PCUTable["RemoteControl/SmallBlockRemoteControl"]=25;
  761. PCUTable["LaserAntenna/LargeBlockLaserAntenna"]=100;
  762. PCUTable["LaserAntenna/SmallBlockLaserAntenna"]=100;
  763. PCUTable["TerminalBlock/ControlPanel"]=5;
  764. PCUTable["TerminalBlock/SmallControlPanel"]=5;
  765. PCUTable["TerminalBlock/LargeControlPanelPedestal"]=5;
  766. PCUTable["TerminalBlock/SmallControlPanelPedestal"]=5;
  767. PCUTable["Cockpit/LargeBlockCockpit"]=50;
  768. PCUTable["Cockpit/LargeBlockCockpitSeat"]=150;
  769. PCUTable["Cockpit/SmallBlockCockpit"]=150;
  770. PCUTable["Cockpit/DBSmallBlockFighterCockpit"]=150;
  771. PCUTable["Cockpit/CockpitOpen"]=50;
  772. PCUTable["Cockpit/RoverCockpit"]=100;
  773. PCUTable["Gyro/LargeBlockGyro"]=50;
  774. PCUTable["Gyro/SmallBlockGyro"]=50;
  775. PCUTable["Cockpit/OpenCockpitSmall"]=50;
  776. PCUTable["Cockpit/OpenCockpitLarge"]=150;
  777. PCUTable["Cockpit/LargeBlockDesk"]=15;
  778. PCUTable["Cockpit/LargeBlockDeskCorner"]=15;
  779. PCUTable["Cockpit/LargeBlockDeskCornerInv"]=15;
  780. PCUTable["CryoChamber/LargeBlockBed"]=15;
  781. PCUTable["CargoContainer/LargeBlockLockerRoom"]=10;
  782. PCUTable["CargoContainer/LargeBlockLockerRoomCorner"]=10;
  783. PCUTable["Cockpit/LargeBlockCouch"]=15;
  784. PCUTable["Cockpit/LargeBlockCouchCorner"]=15;
  785. PCUTable["CargoContainer/LargeBlockLockers"]=10;
  786. PCUTable["Cockpit/LargeBlockBathroomOpen"]=15;
  787. PCUTable["Cockpit/LargeBlockBathroom"]=15;
  788. PCUTable["Cockpit/LargeBlockToilet"]=15;
  789. PCUTable["Projector/LargeBlockConsole"]=150;
  790. PCUTable["Cockpit/SmallBlockCockpitIndustrial"]=150;
  791. PCUTable["Cockpit/LargeBlockCockpitIndustrial"]=150;
  792. PCUTable["VendingMachine/FoodDispenser"]=10;
  793. PCUTable["Jukebox/Jukebox"]=25;
  794. PCUTable["TextPanel/TransparentLCDLarge"]=50;
  795. PCUTable["TextPanel/TransparentLCDSmall"]=50;
  796. PCUTable["ReflectorLight/RotatingLightLarge"]=25;
  797. PCUTable["ReflectorLight/RotatingLightSmall"]=25;
  798. PCUTable["CubeBlock/Freight1"]=10;
  799. PCUTable["CubeBlock/Freight2"]=10;
  800. PCUTable["CubeBlock/Freight3"]=10;
  801. PCUTable["SolarPanel/LargeBlockColorableSolarPanel"]=55;
  802. PCUTable["SolarPanel/LargeBlockColorableSolarPanelCorner"]=55;
  803. PCUTable["SolarPanel/LargeBlockColorableSolarPanelCornerInverted"]=55;
  804. PCUTable["SolarPanel/SmallBlockColorableSolarPanel"]=55;
  805. PCUTable["SolarPanel/SmallBlockColorableSolarPanelCorner"]=55;
  806. PCUTable["SolarPanel/SmallBlockColorableSolarPanelCornerInverted"]=55;
  807. PCUTable["WindTurbine/LargeBlockWindTurbineReskin"]=55;
  808. PCUTable["Beacon/LargeBlockBeaconReskin"]=50;
  809. PCUTable["Beacon/SmallBlockBeaconReskin"]=50;
  810. PCUTable["CryoChamber/LargeBlockCryoRoom"]=15;
  811. PCUTable["Cockpit/SmallBlockCapCockpit"]=150;
  812. PCUTable["TextPanel/HoloLCDLarge"]=50;
  813. PCUTable["TextPanel/HoloLCDSmall"]=50;
  814. PCUTable["MedicalRoom/LargeMedicalRoomReskin"]=30;
  815. PCUTable["InteriorLight/LargeBlockInsetAquarium"]=25;
  816. PCUTable["CryoChamber/LargeBlockHalfBed"]=15;
  817. PCUTable["CryoChamber/LargeBlockHalfBedOffset"]=15;
  818. PCUTable["TextPanel/LargeFullBlockLCDPanel"]=50;
  819. PCUTable["TextPanel/SmallFullBlockLCDPanel"]=50;
  820. PCUTable["TextPanel/LargeDiagonalLCDPanel"]=50;
  821. PCUTable["TextPanel/SmallDiagonalLCDPanel"]=50;
  822. PCUTable["TextPanel/LargeCurvedLCDPanel"]=50;
  823. PCUTable["TextPanel/SmallCurvedLCDPanel"]=50;
  824. PCUTable["TerminalBlock/LargeCrate"]=10;
  825. PCUTable["CubeBlock/LargeBarrel"]=10;
  826. PCUTable["CubeBlock/SmallBarrel"]=10;
  827. PCUTable["CubeBlock/LargeBarrelThree"]=10;
  828. PCUTable["CubeBlock/LargeBarrelStack"]=10;
  829. PCUTable["Warhead/LargeExplosiveBarrel"]=100;
  830. PCUTable["Warhead/SmallExplosiveBarrel"]=100;
  831. PCUTable["Cockpit/LargeBlockInsetPlantCouch"]=15;
  832. PCUTable["CryoChamber/LargeBlockInsetBed"]=15;
  833. PCUTable["ButtonPanel/LargeBlockInsetButtonPanel"]=75;
  834. PCUTable["Jukebox/LargeBlockInsetEntertainmentCorner"]=25;
  835. PCUTable["CargoContainer/LargeBlockInsetBookshelf"]=10;
  836. PCUTable["InteriorLight/LargeBlockInsetKitchen"]=25;
  837. PCUTable["Door/"]=115;
  838. PCUTable["Door/SmallDoor"]=115;
  839. PCUTable["AirtightHangarDoor/"]=115;
  840. PCUTable["AirtightSlideDoor/LargeBlockSlideDoor"]=115;
  841. PCUTable["StoreBlock/StoreBlock"]=10;
  842. PCUTable["SafeZoneBlock/SafeZoneBlock"]=50;
  843. PCUTable["ContractBlock/ContractBlock"]=10;
  844. PCUTable["VendingMachine/VendingMachine"]=10;
  845. PCUTable["StoreBlock/AtmBlock"]=10;
  846. PCUTable["BatteryBlock/LargeBlockBatteryBlock"]=15;
  847. PCUTable["BatteryBlock/SmallBlockBatteryBlock"]=15;
  848. PCUTable["BatteryBlock/SmallBlockSmallBatteryBlock"]=15;
  849. PCUTable["Reactor/SmallBlockSmallGenerator"]=300;
  850. PCUTable["Reactor/SmallBlockLargeGenerator"]=300;
  851. PCUTable["Reactor/LargeBlockSmallGenerator"]=300;
  852. PCUTable["Reactor/LargeBlockLargeGenerator"]=300;
  853. PCUTable["HydrogenEngine/LargeHydrogenEngine"]=25;
  854. PCUTable["HydrogenEngine/SmallHydrogenEngine"]=25;
  855. PCUTable["WindTurbine/LargeBlockWindTurbine"]=55;
  856. PCUTable["SolarPanel/LargeBlockSolarPanel"]=55;
  857. PCUTable["SolarPanel/SmallBlockSolarPanel"]=55;
  858. PCUTable["RadioAntenna/LargeBlockRadioAntennaDish"]=100;
  859. PCUTable["Door/LargeBlockGate"]=115;
  860. PCUTable["Door/LargeBlockOffsetDoor"]=115;
  861. PCUTable["CubeBlock/DeadBody01"]=10;
  862. PCUTable["CubeBlock/DeadBody02"]=10;
  863. PCUTable["CubeBlock/DeadBody03"]=10;
  864. PCUTable["CubeBlock/DeadBody04"]=10;
  865. PCUTable["CubeBlock/DeadBody05"]=10;
  866. PCUTable["CubeBlock/DeadBody06"]=10;
  867. PCUTable["GravityGenerator/"]=185;
  868. PCUTable["GravityGeneratorSphere/"]=200;
  869. PCUTable["VirtualMass/VirtualMassLarge"]=250;
  870. PCUTable["VirtualMass/VirtualMassSmall"]=250;
  871. PCUTable["SpaceBall/SpaceBallLarge"]=25;
  872. PCUTable["SpaceBall/SpaceBallSmall"]=25;
  873. PCUTable["InteriorLight/LargeBlockInsetLight"]=25;
  874. PCUTable["InteriorLight/SmallBlockInsetLight"]=25;
  875. PCUTable["TerminalBlock/LargeBlockAccessPanel1"]=5;
  876. PCUTable["TerminalBlock/LargeBlockAccessPanel2"]=5;
  877. PCUTable["ButtonPanel/LargeBlockAccessPanel3"]=5;
  878. PCUTable["TerminalBlock/LargeBlockAccessPanel4"]=5;
  879. PCUTable["TerminalBlock/SmallBlockAccessPanel1"]=5;
  880. PCUTable["TerminalBlock/SmallBlockAccessPanel2"]=5;
  881. PCUTable["TerminalBlock/SmallBlockAccessPanel3"]=5;
  882. PCUTable["TerminalBlock/SmallBlockAccessPanel4"]=5;
  883. PCUTable["AirVent/AirVentFan"]=10;
  884. PCUTable["AirVent/AirVentFanFull"]=10;
  885. PCUTable["AirVent/SmallAirVentFan"]=10;
  886. PCUTable["AirVent/SmallAirVentFanFull"]=10;
  887. PCUTable["CameraBlock/LargeCameraTopMounted"]=25;
  888. PCUTable["CameraBlock/SmallCameraTopMounted"]=25;
  889. PCUTable["SensorBlock/SmallBlockSensorReskin"]=25;
  890. PCUTable["SensorBlock/LargeBlockSensorReskin"]=25;
  891. PCUTable["MyProgrammableBlock/LargeProgrammableBlockReskin"]=100;
  892. PCUTable["MyProgrammableBlock/SmallProgrammableBlockReskin"]=100;
  893. PCUTable["TimerBlock/TimerBlockReskinLarge"]=25;
  894. PCUTable["TimerBlock/TimerBlockReskinSmall"]=25;
  895. PCUTable["Cockpit/SpeederCockpit"]=50;
  896. PCUTable["Cockpit/SpeederCockpitCompact"]=50;
  897. PCUTable["EmotionControllerBlock/EmotionControllerLarge"]=50;
  898. PCUTable["EmotionControllerBlock/EmotionControllerSmall"]=50;
  899. PCUTable["LandingGear/LargeBlockMagneticPlate"]=35;
  900. PCUTable["LandingGear/SmallBlockMagneticPlate"]=35;
  901. PCUTable["CargoContainer/LargeBlockLargeIndustrialContainer"]=10;
  902. PCUTable["ButtonPanel/VerticalButtonPanelLarge"]=5;
  903. PCUTable["ButtonPanel/VerticalButtonPanelSmall"]=5;
  904. PCUTable["ConveyorConnector/LargeBlockConveyorPipeSeamless"]=10;
  905. PCUTable["ConveyorConnector/LargeBlockConveyorPipeCorner"]=10;
  906. PCUTable["Conveyor/LargeBlockConveyorPipeJunction"]=10;
  907. PCUTable["Conveyor/LargeBlockConveyorPipeIntersection"]=10;
  908. PCUTable["ConveyorConnector/LargeBlockConveyorPipeFlange"]=10;
  909. PCUTable["ConveyorConnector/LargeBlockConveyorPipeEnd"]=10;
  910. PCUTable["Conveyor/LargeBlockConveyorPipeT"]=10;
  911. PCUTable["OxygenTank/LargeHydrogenTankIndustrial"]=25;
  912. PCUTable["Assembler/LargeAssemblerIndustrial"]=400;
  913. PCUTable["Refinery/LargeRefineryIndustrial"]=900;
  914. PCUTable["ConveyorSorter/LargeBlockConveyorSorterIndustrial"]=25;
  915. PCUTable["Thrust/LargeBlockLargeHydrogenThrustIndustrial"]=150;
  916. PCUTable["Thrust/LargeBlockSmallHydrogenThrustIndustrial"]=150;
  917. PCUTable["Thrust/SmallBlockLargeHydrogenThrustIndustrial"]=150;
  918. PCUTable["Thrust/SmallBlockSmallHydrogenThrustIndustrial"]=150;
  919. PCUTable["Cockpit/PassengerSeatLarge"]=15;
  920. PCUTable["Cockpit/PassengerSeatSmall"]=15;
  921. PCUTable["Cockpit/PassengerSeatSmallNew"]=15;
  922. PCUTable["Cockpit/PassengerSeatSmallOffset"]=15;
  923. PCUTable["InteriorLight/AirDuctLight"]=25;
  924. PCUTable["TextPanel/SmallTextPanel"]=50;
  925. PCUTable["TextPanel/SmallLCDPanelWide"]=50;
  926. PCUTable["TextPanel/SmallLCDPanel"]=50;
  927. PCUTable["TextPanel/LargeBlockCorner_LCD_1"]=50;
  928. PCUTable["TextPanel/LargeBlockCorner_LCD_2"]=50;
  929. PCUTable["TextPanel/LargeBlockCorner_LCD_Flat_1"]=50;
  930. PCUTable["TextPanel/LargeBlockCorner_LCD_Flat_2"]=50;
  931. PCUTable["TextPanel/SmallBlockCorner_LCD_1"]=50;
  932. PCUTable["TextPanel/SmallBlockCorner_LCD_2"]=50;
  933. PCUTable["TextPanel/SmallBlockCorner_LCD_Flat_1"]=50;
  934. PCUTable["TextPanel/SmallBlockCorner_LCD_Flat_2"]=50;
  935. PCUTable["TextPanel/LargeTextPanel"]=50;
  936. PCUTable["TextPanel/LargeLCDPanel"]=50;
  937. PCUTable["TextPanel/LargeLCDPanelWide"]=50;
  938. PCUTable["ReflectorLight/LargeBlockFrontLight"]=25;
  939. PCUTable["ReflectorLight/SmallBlockFrontLight"]=25;
  940. PCUTable["InteriorLight/SmallLight"]=25;
  941. PCUTable["InteriorLight/SmallBlockSmallLight"]=25;
  942. PCUTable["InteriorLight/LargeBlockLight_1corner"]=25;
  943. PCUTable["InteriorLight/LargeBlockLight_2corner"]=25;
  944. PCUTable["InteriorLight/SmallBlockLight_1corner"]=25;
  945. PCUTable["InteriorLight/SmallBlockLight_2corner"]=25;
  946. PCUTable["OxygenTank/OxygenTankSmall"]=25;
  947. PCUTable["OxygenTank/"]=25;
  948. PCUTable["OxygenTank/LargeHydrogenTank"]=25;
  949. PCUTable["OxygenTank/LargeHydrogenTankSmall"]=25;
  950. PCUTable["OxygenTank/SmallHydrogenTank"]=25;
  951. PCUTable["OxygenTank/SmallHydrogenTankSmall"]=25;
  952. PCUTable["AirVent/"]=10;
  953. PCUTable["AirVent/AirVentFull"]=10;
  954. PCUTable["AirVent/SmallAirVent"]=10;
  955. PCUTable["AirVent/SmallAirVentFull"]=10;
  956. PCUTable["CargoContainer/SmallBlockSmallContainer"]=10;
  957. PCUTable["CargoContainer/SmallBlockMediumContainer"]=10;
  958. PCUTable["CargoContainer/SmallBlockLargeContainer"]=10;
  959. PCUTable["CargoContainer/LargeBlockSmallContainer"]=10;
  960. PCUTable["CargoContainer/LargeBlockLargeContainer"]=10;
  961. PCUTable["Conveyor/SmallBlockConveyor"]=10;
  962. PCUTable["Conveyor/SmallBlockConveyorConverter"]=10;
  963. PCUTable["Conveyor/LargeBlockConveyor"]=30;
  964. PCUTable["Collector/Collector"]=25;
  965. PCUTable["Collector/CollectorSmall"]=25;
  966. PCUTable["ShipConnector/Connector"]=125;
  967. PCUTable["ShipConnector/ConnectorSmall"]=125;
  968. PCUTable["ShipConnector/ConnectorMedium"]=125;
  969. PCUTable["ConveyorConnector/ConveyorTube"]=10;
  970. PCUTable["ConveyorConnector/ConveyorTubeDuct"]=10;
  971. PCUTable["ConveyorConnector/ConveyorTubeDuctCurved"]=10;
  972. PCUTable["Conveyor/ConveyorTubeDuctT"]=10;
  973. PCUTable["ConveyorConnector/ConveyorTubeSmall"]=10;
  974. PCUTable["ConveyorConnector/ConveyorTubeDuctSmall"]=10;
  975. PCUTable["ConveyorConnector/ConveyorTubeDuctSmallCurved"]=10;
  976. PCUTable["Conveyor/ConveyorTubeDuctSmallT"]=10;
  977. PCUTable["ConveyorConnector/ConveyorTubeMedium"]=10;
  978. PCUTable["ConveyorConnector/ConveyorFrameMedium"]=10;
  979. PCUTable["ConveyorConnector/ConveyorTubeCurved"]=10;
  980. PCUTable["ConveyorConnector/ConveyorTubeSmallCurved"]=10;
  981. PCUTable["ConveyorConnector/ConveyorTubeCurvedMedium"]=10;
  982. PCUTable["Conveyor/SmallShipConveyorHub"]=25;
  983. PCUTable["Conveyor/ConveyorTubeSmallT"]=10;
  984. PCUTable["Conveyor/ConveyorTubeT"]=10;
  985. PCUTable["ConveyorSorter/LargeBlockConveyorSorter"]=25;
  986. PCUTable["ConveyorSorter/MediumBlockConveyorSorter"]=25;
  987. PCUTable["ConveyorSorter/SmallBlockConveyorSorter"]=25;
  988. PCUTable["PistonBase/LargePistonBase"]=100;
  989. PCUTable["ExtendedPistonBase/LargePistonBase"]=100;
  990. PCUTable["PistonBase/SmallPistonBase"]=100;
  991. PCUTable["ExtendedPistonBase/SmallPistonBase"]=100;
  992. PCUTable["MotorStator/LargeStator"]=100;
  993. PCUTable["MotorStator/SmallStator"]=100;
  994. PCUTable["MotorAdvancedStator/LargeAdvancedStator"]=100;
  995. PCUTable["MotorAdvancedStator/SmallAdvancedStator"]=100;
  996. PCUTable["MotorAdvancedStator/SmallAdvancedStatorSmall"]=100;
  997. PCUTable["MotorAdvancedStator/LargeHinge"]=100;
  998. PCUTable["MotorAdvancedStator/MediumHinge"]=100;
  999. PCUTable["MotorAdvancedStator/SmallHinge"]=100;
  1000. PCUTable["MedicalRoom/LargeMedicalRoom"]=30;
  1001. PCUTable["CryoChamber/LargeBlockCryoChamber"]=15;
  1002. PCUTable["CryoChamber/SmallBlockCryoChamber"]=15;
  1003. PCUTable["Refinery/LargeRefinery"]=900;
  1004. PCUTable["Refinery/Blast Furnace"]=750;
  1005. PCUTable["OxygenGenerator/"]=500;
  1006. PCUTable["OxygenGenerator/OxygenGeneratorSmall"]=500;
  1007. PCUTable["Assembler/LargeAssembler"]=400;
  1008. PCUTable["Assembler/BasicAssembler"]=40;
  1009. PCUTable["SurvivalKit/SurvivalKitLarge"]=140;
  1010. PCUTable["SurvivalKit/SurvivalKit"]=140;
  1011. PCUTable["OxygenFarm/LargeBlockOxygenFarm"]=25;
  1012. PCUTable["ExhaustBlock/SmallExhaustPipe"]=50;
  1013. PCUTable["ExhaustBlock/LargeExhaustPipe"]=50;
  1014. PCUTable["Cockpit/BuggyCockpit"]=100;
  1015. PCUTable["MotorSuspension/OffroadSuspension3x3"]=50;
  1016. PCUTable["MotorSuspension/OffroadSuspension5x5"]=50;
  1017. PCUTable["MotorSuspension/OffroadSuspension1x1"]=50;
  1018. PCUTable["MotorSuspension/OffroadSuspension2x2"]=50;
  1019. PCUTable["MotorSuspension/OffroadSmallSuspension3x3"]=50;
  1020. PCUTable["MotorSuspension/OffroadSmallSuspension5x5"]=50;
  1021. PCUTable["MotorSuspension/OffroadSmallSuspension1x1"]=50;
  1022. PCUTable["MotorSuspension/OffroadSmallSuspension2x2"]=50;
  1023. PCUTable["MotorSuspension/OffroadSuspension3x3mirrored"]=50;
  1024. PCUTable["MotorSuspension/OffroadSuspension5x5mirrored"]=50;
  1025. PCUTable["MotorSuspension/OffroadSuspension1x1mirrored"]=50;
  1026. PCUTable["MotorSuspension/OffroadSuspension2x2Mirrored"]=50;
  1027. PCUTable["MotorSuspension/OffroadSmallSuspension3x3mirrored"]=50;
  1028. PCUTable["MotorSuspension/OffroadSmallSuspension5x5mirrored"]=50;
  1029. PCUTable["MotorSuspension/OffroadSmallSuspension1x1mirrored"]=50;
  1030. PCUTable["MotorSuspension/OffroadSmallSuspension2x2Mirrored"]=50;
  1031. PCUTable["Wheel/OffroadSmallRealWheel1x1"]=25;
  1032. PCUTable["Wheel/OffroadSmallRealWheel2x2"]=25;
  1033. PCUTable["Wheel/OffroadSmallRealWheel"]=25;
  1034. PCUTable["Wheel/OffroadSmallRealWheel5x5"]=25;
  1035. PCUTable["Wheel/OffroadRealWheel1x1"]=25;
  1036. PCUTable["Wheel/OffroadRealWheel2x2"]=25;
  1037. PCUTable["Wheel/OffroadRealWheel"]=25;
  1038. PCUTable["Wheel/OffroadRealWheel5x5"]=25;
  1039. PCUTable["Wheel/OffroadSmallRealWheel1x1mirrored"]=25;
  1040. PCUTable["Wheel/OffroadSmallRealWheel2x2Mirrored"]=25;
  1041. PCUTable["Wheel/OffroadSmallRealWheelmirrored"]=25;
  1042. PCUTable["Wheel/OffroadSmallRealWheel5x5mirrored"]=25;
  1043. PCUTable["Wheel/OffroadRealWheel1x1mirrored"]=25;
  1044. PCUTable["Wheel/OffroadRealWheel2x2Mirrored"]=25;
  1045. PCUTable["Wheel/OffroadRealWheelmirrored"]=25;
  1046. PCUTable["Wheel/OffroadRealWheel5x5mirrored"]=25;
  1047. PCUTable["Wheel/OffroadWheel1x1"]=25;
  1048. PCUTable["Wheel/OffroadSmallWheel1x1"]=25;
  1049. PCUTable["Wheel/OffroadWheel3x3"]=25;
  1050. PCUTable["Wheel/OffroadSmallWheel3x3"]=25;
  1051. PCUTable["Wheel/OffroadWheel5x5"]=25;
  1052. PCUTable["Wheel/OffroadSmallWheel5x5"]=25;
  1053. PCUTable["Wheel/OffroadWheel2x2"]=25;
  1054. PCUTable["Wheel/OffroadSmallWheel2x2"]=25;
  1055. PCUTable["MotorSuspension/OffroadShortSuspension3x3"]=50;
  1056. PCUTable["MotorSuspension/OffroadShortSuspension5x5"]=50;
  1057. PCUTable["MotorSuspension/OffroadShortSuspension1x1"]=50;
  1058. PCUTable["MotorSuspension/OffroadShortSuspension2x2"]=50;
  1059. PCUTable["MotorSuspension/OffroadSmallShortSuspension3x3"]=50;
  1060. PCUTable["MotorSuspension/OffroadSmallShortSuspension5x5"]=50;
  1061. PCUTable["MotorSuspension/OffroadSmallShortSuspension1x1"]=50;
  1062. PCUTable["MotorSuspension/OffroadSmallShortSuspension2x2"]=50;
  1063. PCUTable["MotorSuspension/OffroadShortSuspension3x3mirrored"]=50;
  1064. PCUTable["MotorSuspension/OffroadShortSuspension5x5mirrored"]=50;
  1065. PCUTable["MotorSuspension/OffroadShortSuspension1x1mirrored"]=50;
  1066. PCUTable["MotorSuspension/OffroadShortSuspension2x2Mirrored"]=50;
  1067. PCUTable["MotorSuspension/OffroadSmallShortSuspension3x3mirrored"]=50;
  1068. PCUTable["MotorSuspension/OffroadSmallShortSuspension5x5mirrored"]=50;
  1069. PCUTable["MotorSuspension/OffroadSmallShortSuspension1x1mirrored"]=50;
  1070. PCUTable["MotorSuspension/OffroadSmallShortSuspension2x2Mirrored"]=50;
  1071. PCUTable["InteriorLight/OffsetLight"]=25;
  1072. PCUTable["ReflectorLight/OffsetSpotlight"]=25;
  1073. PCUTable["TextPanel/LargeLCDPanel5x5"]=50;
  1074. PCUTable["TextPanel/LargeLCDPanel5x3"]=50;
  1075. PCUTable["TextPanel/LargeLCDPanel3x3"]=50;
  1076. PCUTable["TerminalBlock/LargeBlockSciFiTerminal"]=5;
  1077. PCUTable["ButtonPanel/LargeSciFiButtonTerminal"]=50;
  1078. PCUTable["Door/SmallSideDoor"]=115;
  1079. PCUTable["ButtonPanel/LargeSciFiButtonPanel"]=100;
  1080. PCUTable["Thrust/SmallBlockSmallThrustSciFi"]=15;
  1081. PCUTable["Thrust/SmallBlockLargeThrustSciFi"]=15;
  1082. PCUTable["Thrust/LargeBlockSmallThrustSciFi"]=15;
  1083. PCUTable["Thrust/LargeBlockLargeThrustSciFi"]=15;
  1084. PCUTable["Thrust/LargeBlockLargeAtmosphericThrustSciFi"]=15;
  1085. PCUTable["Thrust/LargeBlockSmallAtmosphericThrustSciFi"]=15;
  1086. PCUTable["Thrust/SmallBlockLargeAtmosphericThrustSciFi"]=250;
  1087. PCUTable["Thrust/SmallBlockSmallAtmosphericThrustSciFi"]=250;
  1088. PCUTable["Thrust/SmallBlockSmallThrust"]=15;
  1089. PCUTable["Thrust/SmallBlockLargeThrust"]=15;
  1090. PCUTable["Thrust/LargeBlockSmallThrust"]=15;
  1091. PCUTable["Thrust/LargeBlockLargeThrust"]=15;
  1092. PCUTable["Thrust/LargeBlockLargeHydrogenThrust"]=150;
  1093. PCUTable["Thrust/LargeBlockSmallHydrogenThrust"]=150;
  1094. PCUTable["Thrust/SmallBlockLargeHydrogenThrust"]=150;
  1095. PCUTable["Thrust/SmallBlockSmallHydrogenThrust"]=150;
  1096. PCUTable["Thrust/LargeBlockLargeAtmosphericThrust"]=15;
  1097. PCUTable["Thrust/LargeBlockSmallAtmosphericThrust"]=15;
  1098. PCUTable["Thrust/SmallBlockLargeAtmosphericThrust"]=250;
  1099. PCUTable["Thrust/SmallBlockSmallAtmosphericThrust"]=250;
  1100. PCUTable["Thrust/LargeBlockLargeFlatAtmosphericThrust"]=15;
  1101. PCUTable["Thrust/LargeBlockLargeFlatAtmosphericThrustDShape"]=15;
  1102. PCUTable["Thrust/LargeBlockSmallFlatAtmosphericThrust"]=15;
  1103. PCUTable["Thrust/LargeBlockSmallFlatAtmosphericThrustDShape"]=15;
  1104. PCUTable["Thrust/SmallBlockLargeFlatAtmosphericThrust"]=250;
  1105. PCUTable["Thrust/SmallBlockLargeFlatAtmosphericThrustDShape"]=250;
  1106. PCUTable["Thrust/SmallBlockSmallFlatAtmosphericThrust"]=250;
  1107. PCUTable["Thrust/SmallBlockSmallFlatAtmosphericThrustDShape"]=250;
  1108. PCUTable["Drill/SmallBlockDrill"]=190;
  1109. PCUTable["Drill/LargeBlockDrill"]=190;
  1110. PCUTable["ShipGrinder/LargeShipGrinder"]=100;
  1111. PCUTable["ShipGrinder/SmallShipGrinder"]=100;
  1112. PCUTable["ShipWelder/LargeShipWelder"]=150;
  1113. PCUTable["ShipWelder/SmallShipWelder"]=150;
  1114. PCUTable["OreDetector/LargeOreDetector"]=100;
  1115. PCUTable["OreDetector/SmallBlockOreDetector"]=100;
  1116. PCUTable["LandingGear/LargeBlockLandingGear"]=35;
  1117. PCUTable["LandingGear/SmallBlockLandingGear"]=35;
  1118. PCUTable["LandingGear/LargeBlockSmallMagneticPlate"]=35;
  1119. PCUTable["LandingGear/SmallBlockSmallMagneticPlate"]=35;
  1120. PCUTable["JumpDrive/LargeJumpDrive"]=100;
  1121. PCUTable["CameraBlock/SmallCameraBlock"]=25;
  1122. PCUTable["CameraBlock/LargeCameraBlock"]=25;
  1123. PCUTable["MergeBlock/LargeShipMergeBlock"]=125;
  1124. PCUTable["MergeBlock/SmallShipMergeBlock"]=125;
  1125. PCUTable["MergeBlock/SmallShipSmallMergeBlock"]=125;
  1126. PCUTable["Parachute/LgParachute"]=50;
  1127. PCUTable["Parachute/SmParachute"]=50;
  1128. PCUTable["CargoContainer/LargeBlockWeaponRack"]=10;
  1129. PCUTable["CargoContainer/SmallBlockWeaponRack"]=10;
  1130. PCUTable["InteriorLight/PassageSciFiLight"]=25;
  1131. PCUTable["Cockpit/PassengerBench"]=15;
  1132. PCUTable["InteriorLight/LargeLightPanel"]=25;
  1133. PCUTable["InteriorLight/SmallLightPanel"]=25;
  1134. PCUTable["Reactor/LargeBlockSmallGeneratorWarfare2"]=300;
  1135. PCUTable["Reactor/LargeBlockLargeGeneratorWarfare2"]=300;
  1136. PCUTable["Reactor/SmallBlockSmallGeneratorWarfare2"]=300;
  1137. PCUTable["Reactor/SmallBlockLargeGeneratorWarfare2"]=300;
  1138. PCUTable["AirtightHangarDoor/AirtightHangarDoorWarfare2A"]=115;
  1139. PCUTable["AirtightHangarDoor/AirtightHangarDoorWarfare2B"]=115;
  1140. PCUTable["AirtightHangarDoor/AirtightHangarDoorWarfare2C"]=115;
  1141. PCUTable["SmallMissileLauncher/SmallMissileLauncherWarfare2"]=425;
  1142. PCUTable["SmallGatlingGun/SmallGatlingGunWarfare2"]=80;
  1143. PCUTable["BatteryBlock/LargeBlockBatteryBlockWarfare2"]=15;
  1144. PCUTable["BatteryBlock/SmallBlockBatteryBlockWarfare2"]=15;
  1145. PCUTable["Door/SlidingHatchDoor"]=115;
  1146. PCUTable["Door/SlidingHatchDoorHalf"]=115;
  1147. PCUTable["Searchlight/SmallSearchlight"]=50;
  1148. PCUTable["Searchlight/LargeSearchlight"]=50;
  1149. PCUTable["HeatVentBlock/LargeHeatVentBlock"]=50;
  1150. PCUTable["HeatVentBlock/SmallHeatVentBlock"]=50;
  1151. PCUTable["Cockpit/SmallBlockStandingCockpit"]=50;
  1152. PCUTable["Cockpit/LargeBlockStandingCockpit"]=50;
  1153. PCUTable["Thrust/SmallBlockSmallModularThruster"]=15;
  1154. PCUTable["Thrust/SmallBlockLargeModularThruster"]=15;
  1155. PCUTable["Thrust/LargeBlockSmallModularThruster"]=15;
  1156. PCUTable["Thrust/LargeBlockLargeModularThruster"]=15;
  1157. PCUTable["Warhead/LargeWarhead"]=100;
  1158. PCUTable["Warhead/SmallWarhead"]=50;
  1159. PCUTable["Decoy/LargeDecoy"]=50;
  1160. PCUTable["Decoy/SmallDecoy"]=50;
  1161. PCUTable["LargeGatlingTurret/"]=225;
  1162. PCUTable["LargeGatlingTurret/SmallGatlingTurret"]=225;
  1163. PCUTable["LargeMissileTurret/"]=275;
  1164. PCUTable["LargeMissileTurret/SmallMissileTurret"]=100;
  1165. PCUTable["InteriorTurret/LargeInteriorTurret"]=125;
  1166. PCUTable["SmallMissileLauncher/"]=425;
  1167. PCUTable["SmallMissileLauncher/LargeMissileLauncher"]=825;
  1168. PCUTable["SmallMissileLauncherReload/SmallRocketLauncherReload"]=425;
  1169. PCUTable["SmallGatlingGun/"]=80;
  1170. PCUTable["SmallGatlingGun/SmallBlockAutocannon"]=80;
  1171. PCUTable["SmallMissileLauncherReload/SmallBlockMediumCalibreGun"]=80;
  1172. PCUTable["SmallMissileLauncher/LargeBlockLargeCalibreGun"]=80;
  1173. PCUTable["SmallMissileLauncherReload/LargeRailgun"]=80;
  1174. PCUTable["SmallMissileLauncherReload/SmallRailgun"]=80;
  1175. PCUTable["LargeMissileTurret/LargeCalibreTurret"]=275;
  1176. PCUTable["LargeMissileTurret/LargeBlockMediumCalibreTurret"]=275;
  1177. PCUTable["LargeMissileTurret/SmallBlockMediumCalibreTurret"]=275;
  1178. PCUTable["LargeGatlingTurret/AutoCannonTurret"]=225;
  1179. PCUTable["SmallMissileLauncher/LargeFlareLauncher"]=150;
  1180. PCUTable["SmallMissileLauncher/SmallFlareLauncher"]=150;
  1181. PCUTable["MotorSuspension/Suspension3x3"]=50;
  1182. PCUTable["MotorSuspension/Suspension5x5"]=50;
  1183. PCUTable["MotorSuspension/Suspension1x1"]=50;
  1184. PCUTable["MotorSuspension/Suspension2x2"]=50;
  1185. PCUTable["MotorSuspension/SmallSuspension3x3"]=50;
  1186. PCUTable["MotorSuspension/SmallSuspension5x5"]=50;
  1187. PCUTable["MotorSuspension/SmallSuspension1x1"]=50;
  1188. PCUTable["MotorSuspension/SmallSuspension2x2"]=50;
  1189. PCUTable["MotorSuspension/Suspension3x3mirrored"]=50;
  1190. PCUTable["MotorSuspension/Suspension5x5mirrored"]=50;
  1191. PCUTable["MotorSuspension/Suspension1x1mirrored"]=50;
  1192. PCUTable["MotorSuspension/Suspension2x2Mirrored"]=50;
  1193. PCUTable["MotorSuspension/SmallSuspension3x3mirrored"]=50;
  1194. PCUTable["MotorSuspension/SmallSuspension5x5mirrored"]=50;
  1195. PCUTable["MotorSuspension/SmallSuspension1x1mirrored"]=50;
  1196. PCUTable["MotorSuspension/SmallSuspension2x2Mirrored"]=50;
  1197. PCUTable["Wheel/SmallRealWheel1x1"]=25;
  1198. PCUTable["Wheel/SmallRealWheel2x2"]=25;
  1199. PCUTable["Wheel/SmallRealWheel"]=25;
  1200. PCUTable["Wheel/SmallRealWheel5x5"]=25;
  1201. PCUTable["Wheel/RealWheel1x1"]=25;
  1202. PCUTable["Wheel/RealWheel2x2"]=25;
  1203. PCUTable["Wheel/RealWheel"]=25;
  1204. PCUTable["Wheel/RealWheel5x5"]=25;
  1205. PCUTable["Wheel/SmallRealWheel1x1mirrored"]=25;
  1206. PCUTable["Wheel/SmallRealWheel2x2Mirrored"]=25;
  1207. PCUTable["Wheel/SmallRealWheelmirrored"]=25;
  1208. PCUTable["Wheel/SmallRealWheel5x5mirrored"]=25;
  1209. PCUTable["Wheel/RealWheel1x1mirrored"]=25;
  1210. PCUTable["Wheel/RealWheel2x2Mirrored"]=25;
  1211. PCUTable["Wheel/RealWheelmirrored"]=25;
  1212. PCUTable["Wheel/RealWheel5x5mirrored"]=25;
  1213. PCUTable["Wheel/Wheel1x1"]=25;
  1214. PCUTable["Wheel/SmallWheel1x1"]=25;
  1215. PCUTable["Wheel/Wheel3x3"]=25;
  1216. PCUTable["Wheel/SmallWheel3x3"]=25;
  1217. PCUTable["Wheel/Wheel5x5"]=25;
  1218. PCUTable["Wheel/SmallWheel5x5"]=25;
  1219. PCUTable["Wheel/Wheel2x2"]=25;
  1220. PCUTable["Wheel/SmallWheel2x2"]=25;
  1221. PCUTable["MotorSuspension/ShortSuspension3x3"]=50;
  1222. PCUTable["MotorSuspension/ShortSuspension5x5"]=50;
  1223. PCUTable["MotorSuspension/ShortSuspension1x1"]=50;
  1224. PCUTable["MotorSuspension/ShortSuspension2x2"]=50;
  1225. PCUTable["MotorSuspension/SmallShortSuspension3x3"]=50;
  1226. PCUTable["MotorSuspension/SmallShortSuspension5x5"]=50;
  1227. PCUTable["MotorSuspension/SmallShortSuspension1x1"]=50;
  1228. PCUTable["MotorSuspension/SmallShortSuspension2x2"]=50;
  1229. PCUTable["MotorSuspension/ShortSuspension3x3mirrored"]=50;
  1230. PCUTable["MotorSuspension/ShortSuspension5x5mirrored"]=50;
  1231. PCUTable["MotorSuspension/ShortSuspension1x1mirrored"]=50;
  1232. PCUTable["MotorSuspension/ShortSuspension2x2Mirrored"]=50;
  1233. PCUTable["MotorSuspension/SmallShortSuspension3x3mirrored"]=50;
  1234. PCUTable["MotorSuspension/SmallShortSuspension5x5mirrored"]=50;
  1235. PCUTable["MotorSuspension/SmallShortSuspension1x1mirrored"]=50;
  1236. PCUTable["MotorSuspension/SmallShortSuspension2x2Mirrored"]=50;
  1237. PCUTable["Beacon/DisposableNpcBeaconLarge"]=50;
  1238. PCUTable["Beacon/DisposableNpcBeaconSmall"]=50;
  1239. PCUTable["Projector/MES-Blocks-ShipyardTerminal"]=150;
  1240. PCUTable["ButtonPanel/MES-Blocks-SuitUpgradeStation"]=5;
  1241. PCUTable["ButtonPanel/MES-Blocks-ResearchTerminal"]=50;
  1242. PCUTable["Conveyor/ProprietaryLargeBlockConveyor"]=10;
  1243. PCUTable["ConveyorConnector/ProprietaryConveyorTube"]=10;
  1244. PCUTable["ConveyorConnector/ProprietaryConveyorTubeCurved"]=10;
  1245. PCUTable["ConveyorSorter/ProprietaryLargeBlockConveyorSorter"]=25;
  1246. PCUTable["Gyro/ProprietaryLargeBlockGyro"]=50;
  1247. PCUTable["Thrust/MES-NPC-Thrust-Atmo-LargeGrid-Large"]=15;
  1248. PCUTable["Thrust/MES-NPC-Thrust-Atmo-LargeGrid-Small"]=15;
  1249. PCUTable["Thrust/MES-NPC-Thrust-Atmo-SmallGrid-Large"]=15;
  1250. PCUTable["Thrust/MES-NPC-Thrust-Atmo-SmallGrid-Small"]=15;
  1251. PCUTable["Thrust/MES-NPC-Thrust-Hydro-LargeGrid-Large"]=15;
  1252. PCUTable["Thrust/MES-NPC-Thrust-Hydro-LargeGrid-Small"]=15;
  1253. PCUTable["Thrust/MES-NPC-Thrust-Hydro-SmallGrid-Large"]=15;
  1254. PCUTable["Thrust/MES-NPC-Thrust-Hydro-SmallGrid-Small"]=15;
  1255. PCUTable["Thrust/MES-NPC-Thrust-IndustryHydro-LargeGrid-Large"]=15;
  1256. PCUTable["Thrust/MES-NPC-Thrust-IndustryHydro-LargeGrid-Small"]=15;
  1257. PCUTable["Thrust/MES-NPC-Thrust-IndustryHydro-SmallGrid-Large"]=15;
  1258. PCUTable["Thrust/MES-NPC-Thrust-IndustryHydro-SmallGrid-Small"]=15;
  1259. PCUTable["Thrust/MES-NPC-Thrust-Ion-SmallGrid-Small"]=15;
  1260. PCUTable["Thrust/MES-NPC-Thrust-Ion-SmallGrid-Large"]=15;
  1261. PCUTable["Thrust/MES-NPC-Thrust-Ion-LargeGrid-Small"]=15;
  1262. PCUTable["Thrust/MES-NPC-Thrust-Ion-LargeGrid-Large"]=15;
  1263. PCUTable["Thrust/MES-NPC-Thrust-IonSciFi-SmallGrid-Small"]=15;
  1264. PCUTable["Thrust/MES-NPC-Thrust-IonSciFi-SmallGrid-Large"]=15;
  1265. PCUTable["Thrust/MES-NPC-Thrust-IonSciFi-LargeGrid-Small"]=15;
  1266. PCUTable["Thrust/MES-NPC-Thrust-IonSciFi-LargeGrid-Large"]=15;
  1267. PCUTable["Thrust/MES-NPC-Thrust-AtmoSciFi-LargeGrid-Large"]=15;
  1268. PCUTable["Thrust/MES-NPC-Thrust-AtmoSciFi-LargeGrid-Small"]=15;
  1269. PCUTable["Thrust/MES-NPC-Thrust-AtmoSciFi-SmallGrid-Large"]=15;
  1270. PCUTable["Thrust/MES-NPC-Thrust-AtmoSciFi-SmallGrid-Small"]=15;
  1271. PCUTable["Thrust/MES-NPC-Thrust-WarfareIon-SmallGrid-Small"]=15;
  1272. PCUTable["Thrust/MES-NPC-Thrust-WarfareIon-SmallGrid-Large"]=15;
  1273. PCUTable["Thrust/MES-NPC-Thrust-WarfareIon-LargeGrid-Small"]=15;
  1274. PCUTable["Thrust/MES-NPC-Thrust-WarfareIon-LargeGrid-Large"]=15;
  1275. PCUTable["RemoteControl/RivalAIRemoteControlLarge"]=25;
  1276. PCUTable["RemoteControl/RivalAIRemoteControlSmall"]=25;
  1277. PCUTable["RadioAntenna/MES-Suppressor-Energy-Small"]=250;
  1278. PCUTable["RadioAntenna/MES-Suppressor-Energy-Large"]=250;
  1279. PCUTable["RadioAntenna/MES-Suppressor-Player-Small"]=250;
  1280. PCUTable["RadioAntenna/MES-Suppressor-Player-Large"]=250;
  1281. PCUTable["RadioAntenna/MES-Suppressor-Nanobots-Small"]=250;
  1282. PCUTable["RadioAntenna/MES-Suppressor-Nanobots-Large"]=250;
  1283. PCUTable["RadioAntenna/MES-Suppressor-JumpDrive-Small"]=250;
  1284. PCUTable["RadioAntenna/MES-Suppressor-JumpDrive-Large"]=250;
  1285. PCUTable["RadioAntenna/MES-Suppressor-Jetpack-Small"]=250;
  1286. PCUTable["RadioAntenna/MES-Suppressor-Jetpack-Large"]=250;
  1287. PCUTable["RadioAntenna/MES-Suppressor-Drill-Small"]=250;
  1288. PCUTable["RadioAntenna/MES-Suppressor-Drill-Large"]=250;
  1289. PCUTable["Reactor/ProprietarySmallBlockSmallGenerator"]=25;
  1290. PCUTable["Reactor/ProprietarySmallBlockLargeGenerator"]=25;
  1291. PCUTable["Reactor/ProprietaryLargeBlockSmallGenerator"]=25;
  1292. PCUTable["Reactor/ProprietaryLargeBlockLargeGenerator"]=25;
  1293. PCUTable["GravityGenerator/ProprietaryGravGen"]=185;
  1294. PCUTable["GravityGeneratorSphere/ProprietaryGravGenSphere"]=200;
  1295. PCUTable["VirtualMass/ProprietaryVirtualMassLarge"]=25;
  1296. PCUTable["VirtualMass/ProprietaryVirtualMassSmall"]=25;
  1297. PCUTable["SpaceBall/ProprietarySpaceBallLarge"]=25;
  1298. PCUTable["SpaceBall/ProprietarySpaceBallSmall"]=25;
  1299. PCUTable["Thrust/ProprietarySmallBlockSmallThrust"]=15;
  1300. PCUTable["Thrust/ProprietarySmallBlockLargeThrust"]=15;
  1301. PCUTable["Thrust/ProprietaryLargeBlockSmallThrust"]=15;
  1302. PCUTable["Thrust/ProprietaryLargeBlockLargeThrust"]=15;
  1303. PCUTable["LaserAntenna/ProprietaryLargeBlockLaserAntenna"]=100;
  1304. PCUTable["LaserAntenna/ProprietarySmallBlockLaserAntenna"]=100;
  1305. PCUTable["JumpDrive/ProprietaryLargeJumpDrive"]=100;
  1306. PCUTable["TurretControlBlock/MES-NpcLargeTurretControlBlock"]=100;
  1307. PCUTable["TurretControlBlock/MES-NpcSmallTurretControlBlock"]=100;
  1308. PCUTable["Conveyor/Maintenance_Door_Large"]=20;
  1309. PCUTable["Conveyor/Maintenance_Shaft_Large"]=20;
  1310. PCUTable["Conveyor/Maintenance_Junction_Large"]=20;
  1311. PCUTable["AdvancedDoor/Maintenance_Door_Hatch_Large"]=115;
  1312. PCUTable["MyProgrammableBlock/LCD_Wall"]=100;
  1313. PCUTable["MyProgrammableBlock/LCD_Wall_offset"]=100;
  1314. PCUTable["TextPanel/digital_linear_computer_Small"]=50;
  1315. PCUTable["TextPanel/digital_linear_computer_Large"]=50;
  1316. PCUTable["MyProgrammableBlock/digital_linear_medium"]=100;
  1317. PCUTable["MyProgrammableBlock/digital_linear_large"]=100;
  1318. PCUTable["Cockpit/EngineerConsole"]=50;
  1319. PCUTable["Cockpit/NavigationConsole"]=50;
  1320. PCUTable["Cockpit/captains_chair_Large"]=50;
  1321. PCUTable["Cockpit/generic_pilotseat"]=50;
  1322. PCUTable["Cockpit/generic_corner"]=50;
  1323. PCUTable["ButtonPanel/corner_panel_Large"]=5;
  1324. PCUTable["Projector/holoprojector"]=150;
  1325. PCUTable["Cockpit/SB_bridge_seat"]=15;
  1326. PCUTable["MyProgrammableBlock/digital_linear_mediumSmall"]=100;
  1327. PCUTable["MyProgrammableBlock/digital_linear_largeSmall"]=100;
  1328. PCUTable["Cockpit/EngineerConsoleSmall"]=50;
  1329. PCUTable["Cockpit/NavigationConsoleSmall"]=50;
  1330. PCUTable["Cockpit/captains_chair_LargeSmall"]=50;
  1331. PCUTable["Cockpit/generic_pilotseatSmall"]=50;
  1332. PCUTable["Cockpit/generic_cornerSmall"]=50;
  1333. PCUTable["ButtonPanel/corner_panel_LargeSmall"]=5;
  1334. PCUTable["Projector/holoprojectorSmall"]=150;
  1335. PCUTable["CryoChamber/EngineerConsole_cryo"]=50;
  1336. PCUTable["CryoChamber/NavigationConsole_cryo"]=50;
  1337. PCUTable["CryoChamber/captains_chair_Large_cryo"]=50;
  1338. PCUTable["CryoChamber/generic_pilotseat_cryo"]=50;
  1339. PCUTable["CryoChamber/generic_pilotseat_cyro"]=50;
  1340. PCUTable["CryoChamber/generic_corner_cryo"]=50;
  1341. PCUTable["ConveyorConnector/AQD_LG_ConveyorCornerArmored"]=10;
  1342. PCUTable["Conveyor/AQD_LG_ConveyorJunctionTubes"]=30;
  1343. PCUTable["ConveyorConnector/AQD_LG_ConveyorStraight5x1"]=10;
  1344. PCUTable["ConveyorConnector/AQD_LG_ConveyorStraightArmored"]=10;
  1345. PCUTable["Conveyor/AQD_LG_ConveyorX"]=20;
  1346. PCUTable["Conveyor/AQD_LG_ConveyorXArmored"]=20;
  1347. PCUTable["Conveyor/AQD_LG_ConveyorT"]=15;
  1348. PCUTable["Conveyor/AQD_LG_ConveyorTArmored"]=15;
  1349. PCUTable["ReflectorLight/MA_Spotlight30"]=25;
  1350. PCUTable["ReflectorLight/MA_Spotlight30_sm"]=25;
  1351. PCUTable["ReflectorLight/MA_Spotlight45"]=25;
  1352. PCUTable["ReflectorLight/MA_Spotlight45_sm"]=25;
  1353. PCUTable["ReflectorLight/MA_ClassicSpot"]=25;
  1354. PCUTable["ReflectorLight/MA_ClassicSpot_sm"]=25;
  1355. PCUTable["ReflectorLight/MA_ClassicSpot45"]=25;
  1356. PCUTable["ReflectorLight/MA_ClassicSpot45_sm"]=25;
  1357. PCUTable["ReflectorLight/MA_ClassicSpot_LB"]=25;
  1358. PCUTable["ReflectorLight/MA_ClassicSpot_LB_sm"]=25;
  1359. PCUTable["ReflectorLight/MA_ClassicSpot_LB2"]=25;
  1360. PCUTable["ReflectorLight/MA_ClassicSpot_LB2_sm"]=25;
  1361. PCUTable["ReflectorLight/MA_ClassicSpotBar"]=25;
  1362. PCUTable["ReflectorLight/MA_ClassicSpotBar_sm"]=25;
  1363. PCUTable["ReflectorLight/MA_ClassicSpot_mtg"]=25;
  1364. PCUTable["ReflectorLight/MA_ClassicSpot_mtg_sm"]=25;
  1365. PCUTable["ReflectorLight/MA_Lightbox30"]=25;
  1366. PCUTable["ReflectorLight/MA_Lightbox30_sm"]=25;
  1367. PCUTable["LargeMissileTurret/AutoCannonTurret"]=225;
  1368. PCUTable["ConveyorSorter/LargeRailgun"]=80;
  1369. PCUTable["ConveyorSorter/SmallRailgun"]=80;
  1370. PCUTable["CubeBlock/AQD_LG_LA_Slope3x1"]=3;
  1371. PCUTable["CubeBlock/AQD_SG_LA_Slope3x1"]=3;
  1372. PCUTable["CubeBlock/AQD_LG_HA_Slope3x1"]=3;
  1373. PCUTable["CubeBlock/AQD_SG_HA_Slope3x1"]=3;
  1374. PCUTable["CubeBlock/AQD_LG_LA_Slope3x1_Corner"]=3;
  1375. PCUTable["CubeBlock/AQD_SG_LA_Slope3x1_Corner"]=3;
  1376. PCUTable["CubeBlock/AQD_LG_HA_Slope3x1_Corner"]=3;
  1377. PCUTable["CubeBlock/AQD_SG_HA_Slope3x1_Corner"]=3;
  1378. PCUTable["CubeBlock/AQD_LG_LA_Slope3x1_InvCorner"]=3;
  1379. PCUTable["CubeBlock/AQD_SG_LA_Slope3x1_InvCorner"]=3;
  1380. PCUTable["CubeBlock/AQD_LG_HA_Slope3x1_InvCorner"]=3;
  1381. PCUTable["CubeBlock/AQD_SG_HA_Slope3x1_InvCorner"]=3;
  1382. PCUTable["CubeBlock/AQD_LG_LA_Slope3x1_Transition"]=3;
  1383. PCUTable["CubeBlock/AQD_LG_LA_Slope3x1_TransitionMirror"]=3;
  1384. PCUTable["CubeBlock/AQD_SG_LA_Slope3x1_Transition"]=3;
  1385. PCUTable["CubeBlock/AQD_SG_LA_Slope3x1_TransitionMirror"]=3;
  1386. PCUTable["CubeBlock/AQD_LG_HA_Slope3x1_Transition"]=3;
  1387. PCUTable["CubeBlock/AQD_LG_HA_Slope3x1_TransitionMirror"]=3;
  1388. PCUTable["CubeBlock/AQD_SG_HA_Slope3x1_Transition"]=3;
  1389. PCUTable["CubeBlock/AQD_SG_HA_Slope3x1_TransitionMirror"]=3;
  1390. PCUTable["CubeBlock/AQD_LG_LA_Slope4x1"]=4;
  1391. PCUTable["CubeBlock/AQD_SG_LA_Slope4x1"]=4;
  1392. PCUTable["CubeBlock/AQD_LG_HA_Slope4x1"]=4;
  1393. PCUTable["CubeBlock/AQD_SG_HA_Slope4x1"]=4;
  1394. PCUTable["CubeBlock/AQD_LG_LA_Slope4x1_Corner"]=4;
  1395. PCUTable["CubeBlock/AQD_SG_LA_Slope4x1_Corner"]=4;
  1396. PCUTable["CubeBlock/AQD_LG_HA_Slope4x1_Corner"]=4;
  1397. PCUTable["CubeBlock/AQD_SG_HA_Slope4x1_Corner"]=4;
  1398. PCUTable["CubeBlock/AQD_LG_LA_Slope4x1_InvCorner"]=4;
  1399. PCUTable["CubeBlock/AQD_SG_LA_Slope4x1_InvCorner"]=4;
  1400. PCUTable["CubeBlock/AQD_LG_HA_Slope4x1_InvCorner"]=4;
  1401. PCUTable["CubeBlock/AQD_SG_HA_Slope4x1_InvCorner"]=4;
  1402. PCUTable["CubeBlock/AQD_LG_LA_Slope4x1_Transition"]=4;
  1403. PCUTable["CubeBlock/AQD_LG_LA_Slope4x1_TransitionMirror"]=4;
  1404. PCUTable["CubeBlock/AQD_SG_LA_Slope4x1_Transition"]=4;
  1405. PCUTable["CubeBlock/AQD_SG_LA_Slope4x1_TransitionMirror"]=4;
  1406. PCUTable["CubeBlock/AQD_LG_HA_Slope4x1_Transition"]=4;
  1407. PCUTable["CubeBlock/AQD_LG_HA_Slope4x1_TransitionMirror"]=4;
  1408. PCUTable["CubeBlock/AQD_SG_HA_Slope4x1_Transition"]=4;
  1409. PCUTable["CubeBlock/AQD_SG_HA_Slope4x1_TransitionMirror"]=4;
  1410. PCUTable["LargeMissileTurret/MXA_CoilgunH"]=500;
  1411. PCUTable["LargeMissileTurret/MXA_CoilgunL"]=350;
  1412. PCUTable["ConveyorSorter/MXA_CoilgunPD"]=200;
  1413. PCUTable["ConveyorSorter/MXA_CoilgunPD_S"]=200;
  1414. PCUTable["ConveyorSorter/MXA_Rampart2"]=250;
  1415. PCUTable["ConveyorSorter/MXA_Rampart2_S"]=250;
  1416. PCUTable["ConveyorSorter/MXA_BreakWater"]=750;
  1417. PCUTable["ConveyorSorter/MXA_SoFCoilgun"]=350;
  1418. PCUTable["SmallMissileLauncher/MXA_Sabre_Coilgun"]=100;
  1419. PCUTable["SmallMissileLauncher/MXA_Sabre_E_Coilgun"]=100;
  1420. PCUTable["ConveyorSorter/MXA_MACL"]=2500;
  1421. PCUTable["ConveyorSorter/MXA_MACL_S"]=2000;
  1422. PCUTable["ConveyorSorter/MXA_SMAC"]=7500;
  1423. PCUTable["ConveyorSorter/MXA_M2MAC"]=2000;
  1424. PCUTable["ConveyorSorter/MXA_M2MAC_S"]=1500;
  1425. PCUTable["ConveyorSorter/MXA_ArcherPods"]=300;
  1426. PCUTable["ConveyorSorter/MXA_M58ArcherPods"]=250;
  1427. PCUTable["ConveyorSorter/MXA_M58ArcherPods_S"]=225;
  1428. PCUTable["ConveyorSorter/MXA_Shiva"]=500;
  1429. PCUTable["TextPanel/NPC_Dummies_Desk"]=10;
  1430. PCUTable["TextPanel/NPC_Dummies_DeskCorner"]=10;
  1431. PCUTable["TextPanel/NPC_Dummies_Couch"]=10;
  1432. PCUTable["TextPanel/NPC_Dummies_CouchCorner"]=10;
  1433. PCUTable["TextPanel/NPC_Dummies_PassengerSeat"]=10;
  1434. PCUTable["TextPanel/NPC_Dummies_Standing_Wall"]=10;
  1435. PCUTable["TextPanel/NPC_Dummies_Standing_Akimbo"]=10;
  1436. PCUTable["TextPanel/NPC_Dummies_Standing_ArmPad"]=10;
  1437. PCUTable["TextPanel/NPC_Dummies_ControlSeat"]=10;
  1438. PCUTable["TextPanel/NPC_Dummies_Standing_Normal"]=10;
  1439. PCUTable["TextPanel/NPC_Dummies_Standing_Salute"]=10;
  1440. PCUTable["TextPanel/NPC_Dummies_Standing_Console"]=10;
  1441. PCUTable["TextPanel/NPC_Dummies_Standing_Console_Offset"]=10;
  1442. PCUTable["TextPanel/NPC_Dummies_Standing_ArmPad_Offset"]=10;
  1443. PCUTable["TextPanel/NPC_Dummies_Bed_Lying"]=10;
  1444. PCUTable["TextPanel/NPC_Dummies_Bed_Sitting"]=10;
  1445. PCUTable["TextPanel/NPC_Dummies_Standing_Rifle"]=10;
  1446. PCUTable["StoreBlock/NPC_Dummies_Store_Standing"]=10;
  1447. PCUTable["StoreBlock/NPC_Dummies_Store_Desk"]=10;
  1448. PCUTable["ContractBlock/NPC_Dummies_Contracts_Crates"]=10;
  1449. PCUTable["ContractBlock/NPC_Dummies_Contracts_Standing"]=10;
  1450. PCUTable["ContractBlock/NPC_Dummies_Contracts_Desk"]=10;
  1451. PCUTable["TextPanel/NPC_Dummies_Standing_LeaningDesk"]=10;
  1452. PCUTable["TextPanel/NPC_Dummies_Standing_LeaningDesk_Offset"]=10;
  1453. PCUTable["TextPanel/NPC_Dummies_Standing_LeaningRailing"]=10;
  1454. PCUTable["TextPanel/NPC_Dummies_F_Standing_Normal"]=10;
  1455. PCUTable["TextPanel/NPC_Dummies_F_Standing_Cup"]=10;
  1456. PCUTable["TextPanel/NPC_Dummies_F_Desk"]=10;
  1457. PCUTable["TextPanel/NPC_Dummies_F_DeskCorner"]=10;
  1458. PCUTable["TextPanel/NPC_Dummies_F_PassengerSeat"]=10;
  1459. PCUTable["TextPanel/NPC_Dummies_F_Couch"]=10;
  1460. PCUTable["TextPanel/NPC_Dummies_F_CouchCorner"]=10;
  1461. PCUTable["TextPanel/NPC_Dummies_Standing_Normal_Small"]=10;
  1462. PCUTable["TextPanel/NPC_Dummies_Standing_Wall_Small"]=10;
  1463. PCUTable["TextPanel/NPC_Dummies_Standing_Akimbo_Small"]=10;
  1464. PCUTable["TextPanel/NPC_Dummies_Standing_ArmPad_Small"]=10;
  1465. PCUTable["TextPanel/NPC_Dummies_Standing_Salute_Small"]=10;
  1466. PCUTable["TextPanel/NPC_Dummies_Standing_Console_Small_R"]=10;
  1467. PCUTable["TextPanel/NPC_Dummies_Standing_Console_Small_L"]=10;
  1468. PCUTable["TextPanel/NPC_Dummies_Standing_Rifle_Small"]=10;
  1469. PCUTable["TextPanel/NPC_Dummies_F_Standing_Normal_Small"]=10;
  1470. PCUTable["TextPanel/NPC_Dummies_F_Standing_Cup_Small"]=10;
  1471. PCUTable["StoreBlock/NPC_Dummies_Store_Standing_Small"]=10;
  1472. PCUTable["TextPanel/NPC_Dummies_PassengerSeat_Small"]=10;
  1473. PCUTable["TextPanel/NPC_Dummies_PassengerSeat_Small_Offset"]=10;
  1474. PCUTable["TextPanel/NPC_Dummies_F_PassengerSeat_Small"]=10;
  1475. PCUTable["TextPanel/NPC_Dummies_F_PassengerSeat_Small_Offset"]=10;
  1476. PCUTable["TextPanel/NPC_Dummies_ControlSeat_Small"]=10;
  1477. PCUTable["TextPanel/NPC_Dummies_Cryo_Small"]=10;
  1478. PCUTable["InteriorLight/MA_Lantern"]=25;
  1479. PCUTable["ReflectorLight/MA_Pole_Lights"]=100;
  1480. PCUTable["CargoContainer/EasyArmory"]=10;
  1481. PCUTable["CargoContainer/EasyDisArmory"]=10;
  1482. PCUTable["CargoContainer/EasyDisArmory2"]=10;
  1483. PCUTable["CargoContainer/Prizebox"]=10;
  1484. PCUTable["CryoChamber/AVTECH_Interface"]=25;
  1485. PCUTable["CryoChamber/AVTECH_Interface_SG"]=25;
  1486. PCUTable["LargeMissileTurret/ARYXCycloneCannon"]=500;
  1487. PCUTable["LargeMissileTurret/ARYXCycloneCannon_SG"]=500;
  1488. PCUTable["LargeMissileTurret/ARYXHurricaneCannon"]=500;
  1489. PCUTable["LargeMissileTurret/ARYXTyphoonCannon"]=500;
  1490. PCUTable["LargeMissileTurret/ARYXTsunamiCannon"]=500;
  1491. PCUTable["SmallMissileLauncher/ARYXTempestCannon"]=200;
  1492. PCUTable["SmallMissileLauncher/ARYXTempestCannon_SG"]=200;
  1493. PCUTable["SmallMissileLauncher/ARYXWindfallCannon"]=100;
  1494. PCUTable["SmallMissileLauncher/ARYXStormCannon"]=80;
  1495. PCUTable["LargeMissileTurret/ARYXBurstTurret"]=200;
  1496. PCUTable["LargeMissileTurret/ARYXBurstTurret_SG"]=200;
  1497. PCUTable["ConveyorSorter/ARYXBurstTurretSlanted"]=200;
  1498. PCUTable["ConveyorSorter/ARYXHydraTurret"]=200;
  1499. PCUTable["ConveyorSorter/ARYXInterceptorPDGun"]=150;
  1500. PCUTable["ConveyorSorter/ARYXTacticalModule"]=99999;
  1501. PCUTable["ConveyorSorter/ARYXLargeIonCannon"]=1000;
  1502. PCUTable["LargeMissileTurret/ARYXHeavyFlakTurret"]=200;
  1503. PCUTable["ConveyorSorter/ARYXMissileBattery"]=300;
  1504. PCUTable["ConveyorSorter/ARYXRocketArtillery"]=300;
  1505. PCUTable["LargeMissileTurret/ARYXPlasmaBeamCannon"]=300;
  1506. PCUTable["LargeMissileTurret/ARYXPhaseRepeaterCannon"]=300;
  1507. PCUTable["ConveyorSorter/ARYXOculusLaserBase"]=100;
  1508. PCUTable["ConveyorSorter/ARYXArgusLaser"]=100;
  1509. PCUTable["ConveyorSorter/ARYXSmallBombBay"]=125;
  1510. PCUTable["LargeMissileTurret/ARYXJuryCannon"]=200;
  1511. PCUTable["LargeGatlingTurret/ARYXAtlasPDC"]=200;
  1512. PCUTable["ConveyorSorter/ARYXSlantedAtlasPDC"]=200;
  1513. PCUTable["LargeGatlingTurret/ARYXCodexPDC"]=100;
  1514. PCUTable["ConveyorSorter/ARYXSlantedCodexPDC"]=100;
  1515. PCUTable["ConveyorSorter/ARYXSlantedInvCodexPDC"]=100;
  1516. PCUTable["LargeGatlingTurret/ARYXCodexPDC_SG"]=100;
  1517. PCUTable["LargeMissileTurret/ARYXAuroraLaser"]=100;
  1518. PCUTable["LargeMissileTurret/ARYXWarriorGatling"]=300;
  1519. PCUTable["ConveyorSorter/ARYXWarriorGatlingGun"]=300;
  1520. PCUTable["LargeMissileTurret/ARYXVariableLaser"]=150;
  1521. PCUTable["LargeMissileTurret/ARYXPulseTurret"]=100;
  1522. PCUTable["LargeMissileTurret/ARYXCompactPulseTurret"]=100;
  1523. PCUTable["ConveyorSorter/ARYXGravPulseLaserSG"]=100;
  1524. PCUTable["LargeMissileTurret/ARYXNucleonShotgun"]=100;
  1525. PCUTable["ConveyorSorter/AryxNucleonShotgun_SG"]=100;
  1526. PCUTable["ConveyorSorter/ARYXFlechetteLauncher"]=100;
  1527. PCUTable["ConveyorSorter/ARYXVariableLauncher"]=200;
  1528. PCUTable["SmallGatlingGun/ARYX_FixedAtlasGatling"]=100;
  1529. PCUTable["SmallGatlingGun/ARYX_SmallChaingun"]=100;
  1530. PCUTable["ConveyorSorter/ARYXSmallPulseLaser_Fixed"]=80;
  1531. PCUTable["ConveyorSorter/ARYXSmallPhysicsGun"]=120;
  1532. PCUTable["ConveyorSorter/ARYXSiegeMortarCannon"]=800;
  1533. PCUTable["ConveyorSorter/ARYX_SmallFlareLauncher"]=150;
  1534. PCUTable["ConveyorSorter/ARYX_LargeFlareLauncher"]=200;
  1535. PCUTable["SmallMissileLauncher/ARYX_Fixed_Chord_auto"]=100;
  1536. PCUTable["ConveyorSorter/ARYXSmallFlechetteLauncher"]=100;
  1537. PCUTable["LargeMissileTurret/ARYXFlakTurret"]=150;
  1538. PCUTable["LargeMissileTurret/ARYX_ChordAutocannon"]=100;
  1539. PCUTable["LargeMissileTurret/ARYX_ChordAutocannon_SG"]=100;
  1540. PCUTable["LargeMissileTurret/ARYX_EchoAutocannon"]=100;
  1541. PCUTable["ConveyorSorter/ARYXGladiatorMissileLauncher"]=200;
  1542. PCUTable["ConveyorSorter/ARYXTorpLauncher"]=150;
  1543. PCUTable["ConveyorSorter/ARYXInlineTorpLauncher"]=150;
  1544. PCUTable["ConveyorSorter/ARYXHeavyTorpedoLauncher"]=300;
  1545. PCUTable["ConveyorSorter/ARYXLongbowLauncher"]=150;
  1546. PCUTable["ConveyorSorter/ARYXLongbowLauncher_SG"]=150;
  1547. PCUTable["ConveyorSorter/ARYXHeavyMissileSalvoLauncher"]=200;
  1548. PCUTable["ConveyorSorter/ARYXPlasmaPulser"]=100;
  1549. PCUTable["ConveyorSorter/ARYX_FocusBeam_CompactSG"]=100;
  1550. PCUTable["LargeMissileTurret/ARYX_FocusBeam_CompactTurret"]=100;
  1551. PCUTable["ConveyorSorter/ARYXFocusLance"]=400;
  1552. PCUTable["ConveyorSorter/ARYXGaussCannon"]=1500;
  1553. PCUTable["LargeMissileTurret/ARYXGaussTurret"]=2000;
  1554. PCUTable["ConveyorSorter/ARYXCatalystCannon"]=99999;
  1555. PCUTable["ConveyorSorter/ARYXRailgun"]=750;
  1556. PCUTable["ConveyorSorter/ARYXLightCoilgun"]=750;
  1557. PCUTable["ConveyorSorter/ARYXHeavyCoilgun"]=750;
  1558. PCUTable["ConveyorSorter/ARYXKingswordSupercannon"]=2500;
  1559. PCUTable["LargeMissileTurret/ARYXRailgunTurret"]=1000;
  1560. PCUTable["LargeMissileTurret/ARYXPicketRailgun"]=500;
  1561. PCUTable["ConveyorSorter/ARYXLightRailgun"]=300;
  1562. PCUTable["LargeMissileTurret/ARYXSentinel"]=200;
  1563. PCUTable["LargeMissileTurret/ARYXReaperPulseCannon"]=1500;
  1564. PCUTable["ConveyorSorter/ARYXMace"]=200;
  1565. PCUTable["LargeMissileTurret/ARYX_FW_NovaBlaster"]=150;
  1566. PCUTable["ConveyorSorter/ARYX_NovaBlaster_SG"]=100;
  1567. PCUTable["ConveyorSorter/AWE_MarkV_SuperLaser_Large_CB"]=1500;
  1568. PCUTable["ConveyorSorter/ARYXLargeRadar"]=50;
  1569. PCUTable["ConveyorSorter/ARYXSmallRadar"]=50;
  1570. PCUTable["LargeMissileTurret/ARYXMagnetarCannon"]=500;
  1571. PCUTable["LargeMissileTurret/ARYXQuasarCannon"]=500;
  1572. PCUTable["LargeMissileTurret/ARYXPulsarCannon"]=300;
  1573. PCUTable["ConveyorSorter/ARYX_Small_Sidekick_Hangar"]=500;
  1574. PCUTable["ConveyorSorter/ARYXTeslaLanceFixed"]=400;
  1575. PCUTable["ConveyorSorter/ARYXPlasmaFlamethrower"]=400;
  1576. PCUTable["LargeMissileTurret/ARYXSpartanTurret"]=200;
  1577. PCUTable["ConveyorSorter/ARYX_SpartanCannonSG"]=100;
  1578. PCUTable["LargeMissileTurret/ARYXVulcanTurret"]=200;
  1579. PCUTable["ConveyorSorter/ARYX_SabreMissileHardpoint"]=80;
  1580. PCUTable["ConveyorSorter/ARYX_NyxMissileHardpoint"]=100;
  1581. PCUTable["UpgradeModule/EpsteinStabalizer"]=5;
  1582. PCUTable["UpgradeModule/EpsteinStabalizerSG"]=5;
  1583. PCUTable["Reactor/MCRNFusion"]=300;
  1584. PCUTable["OxygenGenerator/UN_O2GEN"]=500;
  1585. PCUTable["RadioAntenna/AntennaCorner"]=100;
  1586. PCUTable["RadioAntenna/AntennaSlope"]=100;
  1587. PCUTable["RadioAntenna/Antenna45Corner"]=100;
  1588. PCUTable["RadioAntenna/AntennaCube"]=100;
  1589. PCUTable["RadioAntenna/LongboiArrayLG"]=100;
  1590. PCUTable["RadioAntenna/LongboiArraySG"]=100;
  1591. PCUTable["RadioAntenna/AntennaCubeSG"]=100;
  1592. PCUTable["RadioAntenna/Antenna45CornerSG"]=100;
  1593. PCUTable["RadioAntenna/AntennaSlopeSG"]=100;
  1594. PCUTable["RadioAntenna/AntennaCornerSG"]=100;
  1595. PCUTable["ShipConnector/Connector_Junction"]=150;
  1596. PCUTable["ShipConnector/Mini_Connector"]=150;
  1597. PCUTable["InteriorLight/Armoured_Light_HalfBlock"]=25;
  1598. PCUTable["InteriorLight/Armoured_Light_Block"]=25;
  1599. PCUTable["CameraBlock/InnerArmouredCamera"]=25;
  1600. PCUTable["CameraBlock/InnerArmouredCamera+"]=25;
  1601. PCUTable["CameraBlock/SmallCameraTopMounted+"]=25;
  1602. PCUTable["CameraBlock/LargeCameraTopMounted+"]=25;
  1603. PCUTable["AirtightHangarDoor/shangar3"]=115;
  1604. PCUTable["AirtightHangarDoor/shangar4"]=115;
  1605. PCUTable["AirtightHangarDoor/shangar5"]=115;
  1606. PCUTable["AirtightHangarDoor/shangar6"]=115;
  1607. PCUTable["AirtightHangarDoor/shangar7"]=115;
  1608. PCUTable["AirtightHangarDoor/shangar8"]=115;
  1609. PCUTable["AirtightHangarDoor/shangar9"]=115;
  1610. PCUTable["AirtightHangarDoor/shangar10"]=115;
  1611. PCUTable["Assembler/NPTradeCrafter"]=40;
  1612. PCUTable["Assembler/NPFuelCrafter"]=40;
  1613. PCUTable["OxygenGenerator/Extractor"]=50;
  1614. PCUTable["OxygenGenerator/ExtractorSmall"]=50;
  1615. PCUTable["AirVent/GanymedeAirVent"]=10;
  1616. PCUTable["HydrogenEngine/PassengerCabin"]=25;
  1617. PCUTable["BatteryBlock/GanymedeBatteryLG1"]=15;
  1618. PCUTable["BatteryBlock/GanymedeBatteryLG2"]=15;
  1619. PCUTable["BatteryBlock/GanymedeBatteryLG3"]=15;
  1620. PCUTable["Cockpit/RazorbackControlSeat"]=15;
  1621. PCUTable["Cockpit/RazorbackControlSeat2"]=15;
  1622. PCUTable["SolarPanel/SolarArrayBlock"]=55;
  1623. PCUTable["Thrust/ARYLNX_Epstein_Drive"]=150;
  1624. PCUTable["Thrust/ARYLNX_MUNR_Epstein_Drive"]=125;
  1625. PCUTable["Thrust/ARYLNX_PNDR_Epstein_Drive"]=150;
  1626. PCUTable["Thrust/ARYLNX_QUADRA_Epstein_Drive"]=125;
  1627. PCUTable["Thrust/ARYLNX_RAIDER_Epstein_Drive"]=125;
  1628. PCUTable["Thrust/ARYLNX_ROCI_Epstein_Drive"]=200;
  1629. PCUTable["Thrust/ARYLNX_Leo_Epstein_Drive"]=200;
  1630. PCUTable["Thrust/ARYLYNX_SILVERSMITH_Epstein_DRIVE"]=200;
  1631. PCUTable["Thrust/ARYLNX_DRUMMER_Epstein_Drive"]=200;
  1632. PCUTable["Thrust/ARYLNX_SCIRCOCCO_Epstein_Drive"]=200;
  1633. PCUTable["Thrust/ARYLNX_Mega_Epstein_Drive"]=300;
  1634. PCUTable["Thrust/LynxRcsThruster1"]=8;
  1635. PCUTable["Thrust/AryxRCSRamp"]=8;
  1636. PCUTable["Thrust/AryxRCSHalfRamp"]=8;
  1637. PCUTable["Thrust/AryxRCSSlant"]=8;
  1638. PCUTable["Thrust/AryxRCS"]=8;
  1639. PCUTable["Thrust/ARYLNX_MESX_Epstein_Drive1"]=200;
  1640. PCUTable["Thrust/ARYLNX_MESX_Epstein_Drive2"]=300;
  1641. PCUTable["Thrust/ARYLNX_RZB_Epstein_Drive"]=75;
  1642. PCUTable["Thrust/ARYXLNX_YACHT_EPSTEIN_DRIVE"]=75;
  1643. PCUTable["Thrust/Silverfish_RCS"]=8;
  1644. PCUTable["Thrust/AryxRCSRamp_S"]=8;
  1645. PCUTable["Thrust/AryxRCSHalfRamp_S"]=8;
  1646. PCUTable["Thrust/AryxRCSSlant_S"]=8;
  1647. PCUTable["Thrust/AryxRCS_S"]=8;
  1648. PCUTable["CameraBlock/LBZoomPlusCamera"]=25;
  1649. PCUTable["CameraBlock/SBZoomPlusCamera"]=25;
  1650. PCUTable["Reactor/LargeBlockSmallGenerator_Belter"]=300;
  1651. PCUTable["Reactor/SmallBlockSmallGenerator_Belter"]=300;
  1652. PCUTable["UpgradeModule/LargeProductivityModule_Belter"]=100;
  1653. PCUTable["UpgradeModule/LargeEffectivenessModule_Belter"]=100;
  1654. PCUTable["UpgradeModule/LargeEnergyModule_Belter"]=100;
  1655. PCUTable["OreDetector/LargeOreDetector_Belter"]=100;
  1656. PCUTable["OreDetector/SmallBlockRamshackleOreDetector"]=100;
  1657. PCUTable["SolarPanel/LargeBlockSolarPanel_Belter"]=110;
  1658. PCUTable["LandingGear/LargeClamp"]=35;
  1659. PCUTable["Drill/RamshackleDrill"]=190;
  1660. PCUTable["Drill/SmallRamshackleDrill"]=190;
  1661. PCUTable["ShipGrinder/RamshackleGrinder"]=100;
  1662. PCUTable["ShipGrinder/LargeRamshackleGrinder"]=150;
  1663. PCUTable["ShipWelder/RamshackleWelder"]=150;
  1664. PCUTable["ShipWelder/LargeRamshackleWelder"]=150;
  1665. PCUTable["OxygenTank/TychoCompressedHydroTank"]=25;
  1666. PCUTable["OxygenTank/StationHydrogenTank"]=25;
  1667. PCUTable["ButtonPanel/VerticalButtonPanelLargeOffset"]=5;
  1668. PCUTable["ButtonPanel/ButtonPanelLargeOffset"]=5;
  1669. PCUTable["ButtonPanel/LargeSciFiButtonPanelOffset"]=100;
  1670. PCUTable["ShipWelder/Large_MCRN_Welder"]=150;
  1671. PCUTable["ShipWelder/Small_MCRN_Welder"]=150;
  1672. PCUTable["ShipWelder/Large_UNN_Welder"]=150;
  1673. PCUTable["ShipWelder/Small_UNN_Welder"]=150;
  1674. PCUTable["Drill/Small_UNN_Drill_Base"]=190;
  1675. PCUTable["Drill/Large_UNN_Drill_Base"]=190;
  1676. PCUTable["UpgradeModule/LargeProductivityModule_Inner"]=100;
  1677. PCUTable["UpgradeModule/LargeEffectivenessModule_Inner"]=100;
  1678. PCUTable["UpgradeModule/LargeEnergyModule_Inner"]=100;
  1679. PCUTable["Assembler/Packager"]=400;
  1680. PCUTable["Conveyor/ArmorConveyer4WayHat"]=20;
  1681. PCUTable["Conveyor/ArmorConveyor5Way"]=25;
  1682. PCUTable["Conveyor/ArmorConveyorElbow"]=15;
  1683. PCUTable["OxygenTank/SmallOxygenTankSmall"]=25;
  1684. PCUTable["Conveyor/Conveyor4WayDuct"]=10;
  1685. PCUTable["Conveyor/ConveyorElbowDuct"]=10;
  1686. PCUTable["Conveyor/Conveyor4WayAltDuct"]=10;
  1687. PCUTable["Conveyor/Conveyor5WayDuct"]=10;
  1688. PCUTable["ConveyorSorter/Ostman-Jazinski Flak Cannon"]=400;
  1689. PCUTable["ConveyorSorter/Ostman-Jazinski Flak Cannon MES"]=400;
  1690. PCUTable["ConveyorSorter/Tycho Class Torpedo Mount"]=75;
  1691. PCUTable["ConveyorSorter/Tycho Class Torpedo Mount MES"]=75;
  1692. PCUTable["ConveyorSorter/Zakosetara Heavy Railgun"]=2000;
  1693. PCUTable["SmallGatlingGun/Zakosetara Heavy Railgun MES"]=2000;
  1694. PCUTable["ConveyorSorter/Nariman Dynamics PDC Slope Base"]=400;
  1695. PCUTable["ConveyorSorter/Nariman Dynamics PDC Slope Base MES"]=400;
  1696. PCUTable["ConveyorSorter/Nariman Dynamics PDC"]=400;
  1697. PCUTable["ConveyorSorter/Nariman Dynamics PDC MES"]=400;
  1698. PCUTable["ConveyorSorter/V-14 Stiletto Light Railgun"]=2500;
  1699. PCUTable["ConveyorSorter/V-14 Stiletto Light Railgun MES"]=2500;
  1700. PCUTable["ConveyorSorter/VX-12 Foehammer Ultra-Heavy Railgun"]=7500;
  1701. PCUTable["ConveyorSorter/VX-12 Foehammer Ultra-Heavy Railgun MES"]=7500;
  1702. PCUTable["ConveyorSorter/Ares_Class_Torpedo_Launcher_F"]=600;
  1703. PCUTable["ConveyorSorter/Ares_Class_Torpedo_Launcher_F_MES"]=600;
  1704. PCUTable["ConveyorSorter/Ares_Class_TorpedoLauncher"]=600;
  1705. PCUTable["ConveyorSorter/Ares_Class_TorpedoLauncher_MES"]=600;
  1706. PCUTable["ConveyorSorter/Artemis_Torpedo_Tube"]=200;
  1707. PCUTable["ConveyorSorter/Artemis_Torpedo_Tube_MES"]=200;
  1708. PCUTable["ConveyorSorter/ZeusClass_Rapid_Torpedo_Launcher"]=1800;
  1709. PCUTable["ConveyorSorter/ZeusClass_Rapid_Torpedo_Launcher_MES"]=1800;
  1710. PCUTable["ConveyorSorter/Dawson-Pattern Medium Railgun"]=2500;
  1711. PCUTable["ConveyorSorter/Dawson-Pattern Medium Railgun MES"]=2500;
  1712. PCUTable["ConveyorSorter/Farren-Pattern Heavy Railgun"]=7500;
  1713. PCUTable["ConveyorSorter/Farren-Pattern Heavy Railgun MES"]=7500;
  1714. PCUTable["ConveyorSorter/Redfields Ballistics PDC Slope Base"]=400;
  1715. PCUTable["ConveyorSorter/Redfields Ballistics PDC Slope Base MES"]=400;
  1716. PCUTable["ConveyorSorter/Redfields Ballistics PDC"]=400;
  1717. PCUTable["ConveyorSorter/Redfields Ballistics PDC MES"]=400;
  1718. PCUTable["ConveyorSorter/Apollo Class Torpedo Launcher"]=200;
  1719. PCUTable["ConveyorSorter/Apollo Class Torpedo Launcher MES"]=200;
  1720. PCUTable["ConveyorSorter/Mounted Zakosetara Heavy Railgun"]=2500;
  1721. PCUTable["ConveyorSorter/Mounted Zakosetara Heavy Railgun MES"]=2500;
  1722. PCUTable["ShipConnector/Connector_Passageway"]=125;
  1723. PCUTable["ShipConnector/Small_Connector_Passageway_SG"]=100;
  1724. PCUTable["ShipConnector/Small_Connector_Passageway_LG"]=100;
  1725. PCUTable["Conveyor/LargeBlockConveyorPipeTJunction"]=10;
  1726. PCUTable["Conveyor/LargeBlockConveyorPipeElbowJunction"]=10;
  1727. PCUTable["Conveyor/LargeBlockConveyorPipeElbow"]=10;
  1728. PCUTable["Conveyor/LargeBlockConveyorPipe5-Way"]=10;
  1729. PCUTable["ConveyorConnector/SmallBlockConveyorPipeCorner"]=10;
  1730. PCUTable["ConveyorConnector/SmallBlockConveyorPipeEnd"]=10;
  1731. PCUTable["ConveyorConnector/SmallBlockConveyorPipeFlange"]=10;
  1732. PCUTable["ConveyorConnector/SmallBlockConveyorPipeSeamless"]=10;
  1733. PCUTable["Conveyor/SmallBlockConveyorPipeIntersection"]=10;
  1734. PCUTable["Conveyor/SmallBlockConveyorPipeJunction"]=10;
  1735. PCUTable["Conveyor/SmallBlockConveyorPipeTJunction"]=10;
  1736. PCUTable["Conveyor/SmallBlockConveyorPipeElbow"]=10;
  1737. PCUTable["Conveyor/SmallBlockConveyorPipeElbowJunction"]=10;
  1738. PCUTable["Conveyor/SmallBlockConveyorPipe5-Way"]=10;
  1739. PCUTable["Conveyor/SmallArmouredConveyorCorner"]=7;
  1740. PCUTable["Conveyor/SmallArmouredConveyorX"]=7;
  1741. PCUTable["Conveyor/SmallArmouredConveyorElbow"]=7;
  1742. PCUTable["Conveyor/SmallArmouredConveyorElbowT"]=7;
  1743. PCUTable["Conveyor/SmallArmouredConveyorElbowX"]=7;
  1744. PCUTable["Conveyor/SmallArmouredConveyorStraight"]=7;
  1745. PCUTable["Conveyor/SmallArmouredConveyorT"]=7;
  1746. PCUTable["Conveyor/SmallBlockArmourConveyor"]=10;
  1747. PCUTable["CargoContainer/1x1x3CargoSG"]=10;
  1748. PCUTable["CargoContainer/2x1x2CargoSG"]=10;
  1749. PCUTable["CargoContainer/2x1x2CargoSGInv"]=10;
  1750. PCUTable["CargoContainer/2x2x2CargoSG"]=10;
  1751. PCUTable["CargoContainer/StorageShelfv1SG"]=10;
  1752. PCUTable["CargoContainer/StorageShelfv2SG"]=10;
  1753. PCUTable["CargoContainer/StorageShelfv3SG"]=10;
  1754. PCUTable["CargoContainer/9x11x5CargoSG"]=10;
  1755. PCUTable["CargoContainer/HalfBlockCargo"]=10;
  1756. PCUTable["CargoContainer/EDPAccessCargoTube"]=10;
  1757. PCUTable["CargoContainer/StorageShelfv1LG"]=10;
  1758. PCUTable["CargoContainer/StorageShelfv2LG"]=10;
  1759. PCUTable["CargoContainer/StorageShelfv3LG"]=10;
  1760. PCUTable["CargoContainer/3x3x1Cargo"]=10;
  1761. PCUTable["CargoContainer/3x3x1OpenCargo"]=10;
  1762. PCUTable["CargoContainer/3x3x1OpenCargoV2"]=10;
  1763. PCUTable["CargoContainer/3x5x3LargeContainer"]=10;
  1764. PCUTable["CargoContainer/3x11x3LargeContainer"]=10;
  1765. PCUTable["CargoContainer/7x11x3LargeContainer"]=10;
  1766. PCUTable["SmallMissileLauncherReload/Apollo Class Torpedo Launcher"]=500;
  1767. PCUTable["SmallMissileLauncherReload/Apollo Class Torpedo Launcher MES"]=500;
  1768. PCUTable["LargeMissileTurret/Ostman-Jazinski Flak Cannon"]=400;
  1769. PCUTable["LargeMissileTurret/Ostman-Jazinski Flak Cannon MES"]=400;
  1770. PCUTable["SmallMissileLauncherReload/Tycho Class Torpedo Mount"]=75;
  1771. PCUTable["SmallMissileLauncherReload/Tycho Class Torpedo Mount MES"]=75;
  1772. PCUTable["SmallGatlingGun/Zakosetara Heavy Railgun"]=1875;
  1773. PCUTable["LargeGatlingTurret/Nariman Dynamics PDC"]=400;
  1774. PCUTable["LargeGatlingTurret/Nariman Dynamics PDC MES"]=400;
  1775. PCUTable["LargeMissileTurret/V-14 Stiletto Light Railgun"]=2500;
  1776. PCUTable["LargeMissileTurret/V-14 Stiletto Light Railgun MES"]=2500;
  1777. PCUTable["LargeMissileTurret/VX-12 Foehammer Ultra-Heavy Railgun"]=7000;
  1778. PCUTable["LargeMissileTurret/VX-12 Foehammer Ultra-Heavy Railgun MES"]=7000;
  1779. PCUTable["SmallMissileLauncherReload/Ares_Class_Torpedo_Launcher_F"]=300;
  1780. PCUTable["SmallMissileLauncherReload/Ares_Class_Torpedo_Launcher_F_MES"]=300;
  1781. PCUTable["SmallMissileLauncherReload/Ares_Class_TorpedoLauncher"]=300;
  1782. PCUTable["SmallMissileLauncherReload/Ares_Class_TorpedoLauncher_MES"]=300;
  1783. PCUTable["SmallMissileLauncherReload/ZeusClass_Rapid_Torpedo_Launcher"]=1000;
  1784. PCUTable["SmallMissileLauncherReload/ZeusClass_Rapid_Torpedo_Launcher_MES"]=1000;
  1785. PCUTable["LargeMissileTurret/Dawson-Pattern Medium Railgun"]=2500;
  1786. PCUTable["LargeMissileTurret/Dawson-Pattern Medium Railgun MES"]=2500;
  1787. PCUTable["LargeMissileTurret/Farren-Pattern Heavy Railgun"]=6000;
  1788. PCUTable["LargeMissileTurret/Farren-Pattern Heavy Railgun MES"]=6000;
  1789. PCUTable["LargeGatlingTurret/Redfields Ballistics PDC"]=400;
  1790. PCUTable["LargeGatlingTurret/Redfields Ballistics PDC MES"]=400;
  1791. PCUTable["InteriorLight/Long_Interior_Light_Center"]=25;
  1792. PCUTable["InteriorLight/Long_Interior_Light_SB"]=25;
  1793. PCUTable["InteriorLight/Long_Interior_Light_Corner"]=25;
  1794. PCUTable["InteriorLight/Long_Interior_Light_Double"]=25;
  1795. PCUTable["InteriorLight/Long_Interior_Light_Diagonal"]=25;
  1796. PCUTable["InteriorLight/Long_Interior_Light_Diagonal_Mirrored"]=25;
  1797. PCUTable["InteriorLight/InteriorLightBulb"]=25;
  1798. PCUTable["InteriorLight/SmallLightPole"]=25;
  1799. PCUTable["InteriorLight/SmallLightPoleCorner"]=25;
  1800. PCUTable["InteriorLight/SmallLightPoleDouble"]=25;
  1801. PCUTable["InteriorLight/MediumLightPole"]=25;
  1802. PCUTable["ReflectorLight/LargeWorkLight"]=25;
  1803. PCUTable["ReflectorLight/LargeLightPole"]=25;
  1804. PCUTable["ReflectorLight/CleanSpotlight_LB"]=25;
  1805. PCUTable["ReflectorLight/CleanSpotlight_SB"]=25;
  1806. PCUTable["ReflectorLight/CleanSpotlightSlope_LB"]=25;
  1807. PCUTable["ReflectorLight/CleanSpotlightSlope_SB"]=25;
  1808. PCUTable["ReflectorLight/CleanSpotlightSlope2_LB"]=25;
  1809. PCUTable["ReflectorLight/CleanSpotlightSlope2_SB"]=25;
  1810. PCUTable["ReflectorLight/CleanSpotlightSlanted_LB"]=25;
  1811. PCUTable["ReflectorLight/CleanSpotlightSlanted_SB"]=25;
  1812. PCUTable["ReflectorLight/CleanSpotlightSlanted2_LB"]=25;
  1813. PCUTable["ReflectorLight/CleanSpotlightSlanted2_SB"]=25;
  1814. PCUTable["ReflectorLight/SlimSpotlight_LB"]=25;
  1815. PCUTable["ReflectorLight/SlimSpotlight_SB"]=25;
  1816. PCUTable["ReflectorLight/SmallFloodLight_LB"]=25;
  1817. PCUTable["ReflectorLight/SmallFloodLight_SB"]=25;
  1818. PCUTable["InteriorLight/RoundInteriorLightOffset"]=25;
  1819. PCUTable["InteriorLight/RoundInteriorLight_SB"]=25;
  1820. PCUTable["InteriorLight/RoundInteriorLight"]=25;
  1821. PCUTable["MedicalRoom/LargeRefillStation"]=30;
  1822. PCUTable["MedicalRoom/SmallRefillStation"]=30;
  1823. PCUTable["AdvancedDoor/EDPBulkheadDoor1"]=115;
  1824. PCUTable["AdvancedDoor/VLSHatchType1"]=115;
  1825. PCUTable["Door/EDPAngledDoor1SG"]=115;
  1826. PCUTable["Door/EDPAngledDoor1x2SG"]=115;
  1827. PCUTable["Door/EDPAngledDoor1"]=115;
  1828. PCUTable["Door/EDPAngledDoor1x2"]=115;
  1829. PCUTable["Door/EDPDoorT1v1SG"]=115;
  1830. PCUTable["Door/EDPDoorT2v1SG"]=115;
  1831. PCUTable["Door/EDPDoorT1v1"]=115;
  1832. PCUTable["Door/EDPDoorT2v1"]=115;
  1833. PCUTable["Door/EDPDoorT1v1OS"]=115;
  1834. PCUTable["Door/EDPDoorT2v1OS"]=115;
  1835. PCUTable["Door/EDPDoorT1v1HB"]=115;
  1836. PCUTable["Door/EDPDoorT2v1HB"]=115;
  1837. PCUTable["Door/EDPAirlockDoor1SG"]=115;
  1838. PCUTable["Door/EDPAirlockDoor2SG"]=115;
  1839. PCUTable["Door/EDPAirlockDoor1"]=115;
  1840. PCUTable["Door/EDPAirlockDoor2"]=115;
  1841. PCUTable["Door/EDPInteriorDoorSG"]=115;
  1842. PCUTable["Door/EDPInteriorDoor"]=115;
  1843. PCUTable["Door/EDPInteriorDoor2"]=115;
  1844. PCUTable["AdvancedDoor/EDPBulkheadDoor1a"]=115;
  1845. PCUTable["AdvancedDoor/EDPHatchSG"]=115;
  1846. PCUTable["AdvancedDoor/VLSHatchType1HB"]=115;
  1847. PCUTable["Door/EDPHatchV2SG"]=115;
  1848. PCUTable["Door/EDPHatchV2"]=115;
  1849. PCUTable["Door/EDPHatchV2HB"]=115;
  1850. PCUTable["Door/EDPLadderHatch"]=115;
  1851. PCUTable["AdvancedDoor/EDPRailingGate"]=115;
  1852. PCUTable["AdvancedDoor/EDPRailingGate2"]=115;
  1853.  
  1854.     }
  1855. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement