Advertisement
Guest User

Untitled

a guest
Jul 20th, 2019
936
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 99.63 KB | None | 0 0
  1. /* v:2.0173 [1.191 compatibility, new Inventory variants]
  2. * Automatic LCDs 2 - In-game script by MMaster
  3. *
  4. * Last Update: Added NB (no bars), NN (no numbers) & NNB (no bars or numbers) variants of Inventory, InvList, Missing and all their variants (check guide)
  5. * First test of cockpit (and other blocks) panels support - read guide section 'How to use with cockpits?'
  6. * Script now correctly uses the Text Padding property of the LCD (you can set it however you want and the script will work with it)
  7. * Optimizations for servers running script limiter - use SlowMode!
  8. * Added SlowMode setting to considerably slow down the script (4-5 times less processing per second)
  9. * Now using MDK!
  10. * First part of rewrite of memory management which should optimize memory allocations a lot (more optimizations in progress)
  11. *
  12. * Previous updates: Look at Change notes tab on Steam workshop page. */
  13.  
  14. /* Customize these: */
  15.  
  16. // Use this tag to identify LCDs managed by this script
  17. // Name filtering rules can be used here so you can use even G:Group or T:[My LCD]
  18. public string LCD_TAG = "T:[LCDS]";
  19.  
  20. // Set to true if you want to slow down the script
  21. public const bool SlowMode = false;
  22.  
  23. // How many lines to scroll per step
  24. public const int SCROLL_LINES_PER_STEP = 1;
  25.  
  26. // Script automatically figures if LCD is using monospace font
  27. // if you use custom font scroll down to the bottom, then scroll a bit up until you find AddCharsSize lines
  28. // monospace font name and size definition is above those
  29.  
  30. // Enable initial boot sequence (after compile / world load)
  31. public const bool ENABLE_BOOT = true;
  32.  
  33. /* READ THIS FULL GUIDE
  34. http://steamcommunity.com/sharedfiles/filedetails/?id=407158161
  35.  
  36. Basic video guide
  37. Please watch the video guide even if you don't understand my English. You can see how things are done there.
  38.  
  39. https://youtu.be/vqpPQ_20Xso
  40.  
  41.  
  42. Please carefully read the FULL GUIDE before asking questions I had to remove guide from here to add more features :(
  43. Please DO NOT publish this script or its derivations without my permission! Feel free to use it in blueprints!
  44.  
  45. Special Thanks
  46. Keen Software House for awesome Space Engineers game
  47. Malware for contributing to programmable blocks game code and MDK!
  48.  
  49. Watch Twitter: https://twitter.com/MattsPlayCorner
  50. and Facebook: https://www.facebook.com/MattsPlayCorner1080p
  51. for more crazy stuff from me in the future :)
  52.  
  53. If you want to make scripts for Space Engineers check out MDK by Malware:
  54. https://github.com/malware-dev/MDK-SE/wiki/Quick-Introduction-to-Space-Engineers-Ingame-Scripts
  55. */
  56. bool MDK_IS_GREAT = true;
  57. /* Customize characters used by script */
  58. class MMStyle {
  59. // Monospace font characters (\uXXXX is special character code)
  60. public const char BAR_MONO_START = '[';
  61. public const char BAR_MONO_END = ']';
  62. public const char BAR_MONO_EMPTY = '\u2591'; // 25% rect
  63. public const char BAR_MONO_FILL = '\u2588'; // full rect
  64.  
  65. // Classic (Debug) font characters
  66. // Start and end characters of progress bar need to be the same width!
  67. public const char BAR_START = '[';
  68. public const char BAR_END = ']';
  69. // Empty and fill characters of progress bar need to be the same width!
  70. public const char BAR_EMPTY = '\'';
  71. public const char BAR_FILL = '|';
  72. }
  73. // (for developer) Debug level to show
  74. public const int DebugLevel = 0;
  75.  
  76. // (for modded lcds) Affects all LCDs managed by this programmable block
  77. /* LCD height modifier
  78. 0.5f makes the LCD have only 1/2 the lines of normal LCD
  79. 2.0f makes it fit 2x more lines on LCD */
  80. public const float HEIGHT_MOD = 1.0f;
  81.  
  82. /* line width modifier
  83. 0.5f moves the right edge to 50% of normal LCD width
  84. 2.0f makes it fit 200% more text on line */
  85. public const float WIDTH_MOD = 1.0f;
  86.  
  87. List<string> BOOT_FRAMES = new List<string>() {
  88. /* BOOT FRAMES
  89. * Each @"<text>" marks single frame, add as many as you want each will be displayed for one second
  90. * @"" is multiline string so you can write multiple lines */
  91. @"
  92. Initializing systems"
  93. ,
  94. @"
  95. Verifying connections"
  96. ,
  97. @"
  98. Loading commands"
  99. };
  100.  
  101. void ItemsConf() {
  102. // ITEMS AND QUOTAS LIST
  103. // (subType, mainType, quota, display name, short name)
  104. // VANILLA ITEMS
  105. Add("Stone", "Ore");
  106. Add("Iron", "Ore");
  107. Add("Nickel", "Ore");
  108. Add("Cobalt", "Ore");
  109. Add("Magnesium", "Ore");
  110. Add("Silicon", "Ore");
  111. Add("Silver", "Ore");
  112. Add("Gold", "Ore");
  113. Add("Platinum", "Ore");
  114. Add("Uranium", "Ore");
  115. Add("Ice", "Ore");
  116. Add("Scrap", "Ore");
  117. Add("Stone", "Ingot", 40000, "Gravel", "gravel");
  118. Add("Iron", "Ingot", 300000);
  119. Add("Nickel", "Ingot", 900000);
  120. Add("Cobalt", "Ingot", 120000);
  121. Add("Magnesium", "Ingot", 80000);
  122. Add("Silicon", "Ingot", 80000);
  123. Add("Silver", "Ingot", 800000);
  124. Add("Gold", "Ingot", 80000);
  125. Add("Platinum", "Ingot", 45000);
  126. Add("Uranium", "Ingot", 12000);
  127. Add("AutomaticRifleItem", "Tool", 0, "Automatic Rifle");
  128. Add("PreciseAutomaticRifleItem", "Tool", 0, "* Precise Rifle");
  129. Add("RapidFireAutomaticRifleItem", "Tool", 0, "** Rapid-Fire Rifle");
  130. Add("UltimateAutomaticRifleItem", "Tool", 0, "*** Elite Rifle");
  131. Add("WelderItem", "Tool", 0, "Welder");
  132. Add("Welder2Item", "Tool", 0, "* Enh. Welder");
  133. Add("Welder3Item", "Tool", 0, "** Prof. Welder");
  134. Add("Welder4Item", "Tool", 0, "*** Elite Welder");
  135. Add("AngleGrinderItem", "Tool", 0, "Angle Grinder");
  136. Add("AngleGrinder2Item", "Tool", 0, "* Enh. Grinder");
  137. Add("AngleGrinder3Item", "Tool", 0, "** Prof. Grinder");
  138. Add("AngleGrinder4Item", "Tool", 0, "*** Elite Grinder");
  139. Add("HandDrillItem", "Tool", 0, "Hand Drill");
  140. Add("HandDrill2Item", "Tool", 0, "* Enh. Drill");
  141. Add("HandDrill3Item", "Tool", 0, "** Prof. Drill");
  142. Add("HandDrill4Item", "Tool", 0, "*** Elite Drill");
  143. Add("Construction", "Component", 50000);
  144. Add("MetalGrid", "Component", 15500, "Metal Grid");
  145. Add("InteriorPlate", "Component", 55000, "Interior Plate");
  146. Add("SteelPlate", "Component", 300000, "Steel Plate");
  147. Add("Girder", "Component", 3500);
  148. Add("SmallTube", "Component", 26000, "Small Tube");
  149. Add("LargeTube", "Component", 6000, "Large Tube");
  150. Add("Motor", "Component", 16000);
  151. Add("Display", "Component", 500);
  152. Add("BulletproofGlass", "Component", 12000, "Bulletp. Glass", "bpglass");
  153. Add("Computer", "Component", 6500);
  154. Add("Reactor", "Component", 10000);
  155. Add("Thrust", "Component", 16000, "Thruster", "thruster");
  156. Add("GravityGenerator", "Component", 250, "GravGen", "gravgen");
  157. Add("Medical", "Component", 120);
  158. Add("RadioCommunication", "Component", 250, "Radio-comm", "radio");
  159. Add("Detector", "Component", 400);
  160. Add("Explosives", "Component", 500);
  161. Add("SolarCell", "Component", 2800, "Solar Cell");
  162. Add("PowerCell", "Component", 2800, "Power Cell");
  163. Add("Superconductor", "Component", 3000);
  164. Add("Canvas", "Component", 300);
  165. Add("NATO_5p56x45mm", "Ammo", 8000, "5.56x45mm", "5.56x45mm");
  166. Add("NATO_25x184mm", "Ammo", 2500, "25x184mm", "25x184mm");
  167. Add("Missile200mm", "Ammo", 1600, "200mm Missile", "200mmmissile");
  168. Add("OxygenBottle", "OxygenContainerObject", 5, "Oxygen Bottle");
  169. Add("HydrogenBottle", "GasContainerObject", 5, "Hydrogen Bottle");
  170.  
  171. // MODDED ITEMS
  172. // (subType, mainType, quota, display name, short name, used)
  173. // * if used is true, item will be shown in inventory even for 0 items
  174. // * if used is false, item will be used only for display name and short name
  175. // AzimuthSupercharger
  176. Add("AzimuthSupercharger", "Component", 1600, "Supercharger", "supercharger", false);
  177. // OKI Ammo
  178. Add("OKI23mmAmmo", "Ammo", 500, "23x180mm", "23x180mm", false);
  179. Add("OKI50mmAmmo", "Ammo", 500, "50x450mm", "50x450mm", false);
  180. Add("OKI122mmAmmo", "Ammo", 200, "122x640mm", "122x640mm", false);
  181. Add("OKI230mmAmmo", "Ammo", 100, "230x920mm", "230x920mm", false);
  182.  
  183. // REALLY REALLY REALLY
  184. // DO NOT MODIFY ANYTHING BELOW THIS (TRANSLATION STRINGS ARE AT THE BOTTOM)
  185. }
  186. void Add(string sT, string mT, int q = 0, string dN = "", string sN = "", bool u = true) { Ǝ.Ƌ(sT, mT, q, dN, sN, u); }
  187. Ƅ Ǝ;ȑ ƚ;ġ ϓ;ɔ n=null;void ϒ(string Ƙ){}void ϑ(string ϐ,string Ϗ){string Ƕ=ϐ.ToLower();switch(Ƕ){case"lcd_tag":LCD_TAG=Ϗ;
  188. break;}}void ώ(){string[]lj=Me.CustomData.Split('\n');for(int E=0;E<lj.Length;E++){string ǎ=lj[E];int š=ǎ.IndexOf('=');if(š<0){ϒ
  189. (ǎ);continue;}string ύ=ǎ.Substring(0,š).Trim();string ǫ=ǎ.Substring(š+1).Trim();ϑ(ύ,ǫ);}}void ό(ȑ ƚ){Ǝ=new Ƅ();ItemsConf(
  190. );ώ();n=new ɔ(this,DebugLevel,ƚ);n.Ǝ=Ǝ;n.ɥ=LCD_TAG;n.ɤ=SCROLL_LINES_PER_STEP;n.ɣ=ENABLE_BOOT;n.ɢ=BOOT_FRAMES;n.ɡ=!
  191. MDK_IS_GREAT;n.ɠ=HEIGHT_MOD;n.ɪ=WIDTH_MOD;n.Ǡ();}void ϋ(){ƚ.ǂ=this;n.ǂ=this;}Program(){Runtime.UpdateFrequency=UpdateFrequency.
  192. Update1;}void Main(string ą,UpdateType ϊ){try{if(ƚ==null){ƚ=new ȑ(this,DebugLevel,SlowMode);ό(ƚ);ϓ=new ġ(n);ƚ.Ȗ(ϓ,0);}else{ϋ();
  193. n.Ő.Љ();}if(ą.Length==0&&(ϊ&(UpdateType.Update1|UpdateType.Update10|UpdateType.Update100))==0){ƚ.ȡ();return;}if(ą!=""){if
  194. (ϓ.ć(ą)){ƚ.ȡ();return;}}ϓ.ğ=0;ƚ.Ƞ();}catch(Exception ex){Echo("ERROR DESCRIPTION:\n"+ex.ToString());Me.Enabled=false;}}
  195. class ο:ɑ{ġ Ē;ɔ n;string ą="";public ο(ɔ Û,ġ đ,string IJ){Ɍ=-1;ɐ="ArgScroll";ą=IJ;Ē=đ;n=Û;}int Ŭ;α δ;public override void Ʉ(){δ
  196. =new α(ƒ,n.Ő);}int γ=0;int ì=0;ʣ Ƙ;public override bool Ƀ(bool ö){if(!ö){ì=0;δ.ų();Ƙ=new ʣ(ƒ);γ=0;}if(ì==0){if(!Ƙ.ˁ(ą,ö))
  197. return false;if(Ƙ.ˉ.Count>0){if(!int.TryParse(Ƙ.ˉ[0].IJ,out Ŭ))Ŭ=1;else if(Ŭ<1)Ŭ=1;}if(Ƙ.ʢ.EndsWith("up"))Ŭ=-Ŭ;else if(!Ƙ.ʢ.
  198. EndsWith("down"))Ŭ=0;ì++;ö=false;}if(ì==1){if(!δ.ϴ("textpanel",Ƙ.ʹ,ö))return false;ì++;ö=false;}è k;for(;γ<δ.ϳ();γ++){if(!ƒ.Ȝ(20
  199. ))return false;IMyTextPanel β=δ.ή[γ]as IMyTextPanel;if(!Ē.Ĉ.TryGetValue(β,out k))continue;if(k==null||k.å!=β)continue;if(
  200. k.à)k.æ.ĺ=10;if(Ŭ>0)k.æ.Ľ(Ŭ);else if(Ŭ<0)k.æ.œ(-Ŭ);else k.æ.Ĺ();k.L();}return true;}}class α{ȑ ƒ;Ͻ ΰ;IMyCubeGrid ί{get{
  201. return ƒ.ǂ.Me.CubeGrid;}}IMyGridTerminalSystem ƿ{get{return ƒ.ǂ.GridTerminalSystem;}}public List<IMyTerminalBlock>ή=new List<
  202. IMyTerminalBlock>();public α(ȑ ƚ,Ͻ ζ){ƒ=ƚ;ΰ=ζ;}int ω=0;public double ψ(ref double χ,ref double φ,bool ö){if(!ö)ω=0;for(;ω<ή.Count;ω++){
  203. if(!ƒ.Ȝ(4))return Double.NaN;IMyInventory υ=ή[ω].GetInventory(0);if(υ==null)continue;χ+=(double)υ.CurrentVolume;φ+=(double
  204. )υ.MaxVolume;}χ*=1000;φ*=1000;return(φ>0?χ/φ*100:100);}int τ=0;double σ=0;public double ς(bool ö){if(!ö){τ=0;σ=0;}for(;τ<
  205. ή.Count;τ++){if(!ƒ.Ȝ(6))return Double.NaN;for(int ρ=0;ρ<2;ρ++){IMyInventory υ=ή[τ].GetInventory(ρ);if(υ==null)continue;σ
  206. +=(double)υ.CurrentMass;}}return σ*1000;}int π=0;private bool ξ(bool ö=false){if(!ö)π=0;while(π<ή.Count){if(!ƒ.Ȝ(4))return
  207. false;if(ή[π].CubeGrid!=ί){ή.RemoveAt(π);continue;}π++;}return true;}List<IMyBlockGroup>ν=new List<IMyBlockGroup>();List<
  208. IMyTerminalBlock>μ=new List<IMyTerminalBlock>();int λ=0;public bool κ(string ʹ,bool ö){int ι=ʹ.IndexOf(':');string θ=(ι>=1&&ι<=2?ʹ.
  209. Substring(0,ι):"");bool ε=θ.Contains("T");if(θ!="")ʹ=ʹ.Substring(ι+1);if(ʹ==""||ʹ=="*"){if(!ö){μ.Clear();ƿ.GetBlocks(μ);ή.AddList
  210. (μ);}if(ε)if(!ξ(ö))return false;return true;}string η=(θ.Contains("G")?ʹ.Trim():"");if(η!=""){if(!ö){ν.Clear();ƿ.
  211. GetBlockGroups(ν);λ=0;}for(;λ<ν.Count;λ++){IMyBlockGroup ϔ=ν[λ];if(string.Compare(ϔ.Name,η,true)==0){if(!ö){μ.Clear();ϔ.GetBlocks(μ);ή
  212. .AddList(μ);}if(ε)if(!ξ(ö))return false;return true;}}return true;}if(!ö){μ.Clear();ƿ.SearchBlocksOfName(ʹ,μ);ή.AddList(μ
  213. );}if(ε)if(!ξ(ö))return false;return true;}List<IMyBlockGroup>ϼ=new List<IMyBlockGroup>();List<IMyTerminalBlock>Ϻ=new
  214. List<IMyTerminalBlock>();int Ϲ=0;int ϸ=0;public bool Ϸ(string ʏ,string η,bool ε,bool ö){if(!ö){ϼ.Clear();ƿ.GetBlockGroups(ϼ)
  215. ;Ϲ=0;}for(;Ϲ<ϼ.Count;Ϲ++){IMyBlockGroup ϔ=ϼ[Ϲ];if(string.Compare(ϔ.Name,η,true)==0){if(!ö){ϸ=0;Ϻ.Clear();ϔ.GetBlocks(Ϻ);}
  216. else ö=false;for(;ϸ<Ϻ.Count;ϸ++){if(!ƒ.Ȝ(6))return false;if(ε&&Ϻ[ϸ].CubeGrid!=ί)continue;if(ΰ.Ͽ(Ϻ[ϸ],ʏ))ή.Add(Ϻ[ϸ]);}return
  217. true;}}return true;}List<IMyTerminalBlock>ϵ=new List<IMyTerminalBlock>();int ϻ=0;public bool ϴ(string ʏ,string ʹ,bool ö){int
  218. ι=ʹ.IndexOf(':');string θ=(ι>=1&&ι<=2?ʹ.Substring(0,ι):"");bool ε=θ.Contains("T");if(θ!="")ʹ=ʹ.Substring(ι+1);if(!ö){ϵ.
  219. Clear();ϻ=0;}string η=(θ.Contains("G")?ʹ.Trim():"");if(η!=""){if(!Ϸ(ʏ,η,ε,ö))return false;return true;}if(!ö)ΰ.Ѐ(ref ϵ,ʏ);if(
  220. ʹ==""||ʹ=="*"){if(!ö)ή.AddList(ϵ);if(ε)if(!ξ(ö))return false;return true;}for(;ϻ<ϵ.Count;ϻ++){if(!ƒ.Ȝ(4))return false;if(
  221. ε&&ϵ[ϻ].CubeGrid!=ί)continue;if(ϵ[ϻ].CustomName.Contains(ʹ))ή.Add(ϵ[ϻ]);}return true;}public void ϲ(α ϱ){ή.AddList(ϱ.ή);}
  222. public void ų(){ή.Clear();}public int ϳ(){return ή.Count;}}class Ͻ{ȑ ƒ;ɔ n;public MyGridProgram ǂ{get{return ƒ.ǂ;}}public
  223. IMyGridTerminalSystem ƿ{get{return ƒ.ǂ.GridTerminalSystem;}}public Ͻ(ȑ ƚ,ɔ Û){ƒ=ƚ;n=Û;}void Ј<ǡ>(List<IMyTerminalBlock>Ї,Func<
  224. IMyTerminalBlock,bool>І=null)where ǡ:class,IMyTerminalBlock{ƿ.GetBlocksOfType<ǡ>(Ї,І);}public Dictionary<string,Action<List<
  225. IMyTerminalBlock>,Func<IMyTerminalBlock,bool>>>Ѕ;public void Љ(){if(Ѕ!=null)return;Ѕ=new Dictionary<string,Action<List<IMyTerminalBlock>
  226. ,Func<IMyTerminalBlock,bool>>>(){{"CargoContainer",Ј<IMyCargoContainer>},{"TextPanel",Ј<IMyTextPanel>},{"Assembler",Ј<
  227. IMyAssembler>},{"Refinery",Ј<IMyRefinery>},{"Reactor",Ј<IMyReactor>},{"SolarPanel",Ј<IMySolarPanel>},{"BatteryBlock",Ј<
  228. IMyBatteryBlock>},{"Beacon",Ј<IMyBeacon>},{"RadioAntenna",Ј<IMyRadioAntenna>},{"AirVent",Ј<IMyAirVent>},{"ConveyorSorter",Ј<
  229. IMyConveyorSorter>},{"OxygenTank",Ј<IMyGasTank>},{"OxygenGenerator",Ј<IMyGasGenerator>},{"OxygenFarm",Ј<IMyOxygenFarm>},{"LaserAntenna",Ј
  230. <IMyLaserAntenna>},{"Thrust",Ј<IMyThrust>},{"Gyro",Ј<IMyGyro>},{"SensorBlock",Ј<IMySensorBlock>},{"ShipConnector",Ј<
  231. IMyShipConnector>},{"ReflectorLight",Ј<IMyReflectorLight>},{"InteriorLight",Ј<IMyInteriorLight>},{"LandingGear",Ј<IMyLandingGear>},{
  232. "ProgrammableBlock",Ј<IMyProgrammableBlock>},{"TimerBlock",Ј<IMyTimerBlock>},{"MotorStator",Ј<IMyMotorStator>},{"PistonBase",Ј<
  233. IMyPistonBase>},{"Projector",Ј<IMyProjector>},{"ShipMergeBlock",Ј<IMyShipMergeBlock>},{"SoundBlock",Ј<IMySoundBlock>},{"Collector",Ј<
  234. IMyCollector>},{"JumpDrive",Ј<IMyJumpDrive>},{"Door",Ј<IMyDoor>},{"GravityGeneratorSphere",Ј<IMyGravityGeneratorSphere>},{
  235. "GravityGenerator",Ј<IMyGravityGenerator>},{"ShipDrill",Ј<IMyShipDrill>},{"ShipGrinder",Ј<IMyShipGrinder>},{"ShipWelder",Ј<IMyShipWelder>}
  236. ,{"Parachute",Ј<IMyParachute>},{"LargeGatlingTurret",Ј<IMyLargeGatlingTurret>},{"LargeInteriorTurret",Ј<
  237. IMyLargeInteriorTurret>},{"LargeMissileTurret",Ј<IMyLargeMissileTurret>},{"SmallGatlingGun",Ј<IMySmallGatlingGun>},{
  238. "SmallMissileLauncherReload",Ј<IMySmallMissileLauncherReload>},{"SmallMissileLauncher",Ј<IMySmallMissileLauncher>},{"VirtualMass",Ј<IMyVirtualMass>}
  239. ,{"Warhead",Ј<IMyWarhead>},{"FunctionalBlock",Ј<IMyFunctionalBlock>},{"LightingBlock",Ј<IMyLightingBlock>},{
  240. "ControlPanel",Ј<IMyControlPanel>},{"Cockpit",Ј<IMyCockpit>},{"CryoChamber",Ј<IMyCryoChamber>},{"MedicalRoom",Ј<IMyMedicalRoom>},{
  241. "RemoteControl",Ј<IMyRemoteControl>},{"ButtonPanel",Ј<IMyButtonPanel>},{"CameraBlock",Ј<IMyCameraBlock>},{"OreDetector",Ј<
  242. IMyOreDetector>},{"ShipController",Ј<IMyShipController>},{"Decoy",Ј<IMyDecoy>}};}public void Є(ref List<IMyTerminalBlock>ā,string Ѓ){
  243. Action<List<IMyTerminalBlock>,Func<IMyTerminalBlock,bool>>Ђ;if(Ѓ=="SurfaceProvider"){ƿ.GetBlocksOfType<IMyTextSurfaceProvider>
  244. (ā);return;}if(Ѕ.TryGetValue(Ѓ,out Ђ))Ђ(ā,null);else{if(Ѓ=="WindTurbine"){ƿ.GetBlocksOfType<IMyPowerProducer>(ā,(Ё)=>Ё.
  245. BlockDefinition.TypeIdString.EndsWith("WindTurbine"));return;}if(Ѓ=="HydrogenEngine"){ƿ.GetBlocksOfType<IMyPowerProducer>(ā,(Ё)=>Ё.
  246. BlockDefinition.TypeIdString.EndsWith("HydrogenEngine"));return;}}}public void Ѐ(ref List<IMyTerminalBlock>ā,string Ͼ){Є(ref ā,ϝ(Ͼ.Trim
  247. ()));}public bool Ͽ(IMyTerminalBlock å,string Ͼ){string ϯ=ϝ(Ͼ);switch(ϯ){case"FunctionalBlock":return true;case
  248. "ShipController":return(å as IMyShipController!=null);default:return å.BlockDefinition.TypeIdString.Contains(ϝ(Ͼ));}}public string ϝ(
  249. string Ϫ){if(Ϫ=="surfaceprovider")return"SurfaceProvider";if(Ϫ.ǭ("carg")||Ϫ.ǭ("conta"))return"CargoContainer";if(Ϫ.ǭ("text")||
  250. Ϫ.ǭ("lcd"))return"TextPanel";if(Ϫ.ǭ("ass"))return"Assembler";if(Ϫ.ǭ("refi"))return"Refinery";if(Ϫ.ǭ("reac"))return
  251. "Reactor";if(Ϫ.ǭ("solar"))return"SolarPanel";if(Ϫ.ǭ("wind"))return"WindTurbine";if(Ϫ.ǭ("hydro")&&Ϫ.Contains("eng"))return
  252. "HydrogenEngine";if(Ϫ.ǭ("bat"))return"BatteryBlock";if(Ϫ.ǭ("bea"))return"Beacon";if(Ϫ.Ǭ("vent"))return"AirVent";if(Ϫ.Ǭ("sorter"))return
  253. "ConveyorSorter";if(Ϫ.Ǭ("tank"))return"OxygenTank";if(Ϫ.Ǭ("farm")&&Ϫ.Ǭ("oxy"))return"OxygenFarm";if(Ϫ.Ǭ("gene")&&Ϫ.Ǭ("oxy"))return
  254. "OxygenGenerator";if(Ϫ.Ǭ("cryo"))return"CryoChamber";if(string.Compare(Ϫ,"laserantenna",true)==0)return"LaserAntenna";if(Ϫ.Ǭ("antenna"))
  255. return"RadioAntenna";if(Ϫ.ǭ("thrust"))return"Thrust";if(Ϫ.ǭ("gyro"))return"Gyro";if(Ϫ.ǭ("sensor"))return"SensorBlock";if(Ϫ.Ǭ(
  256. "connector"))return"ShipConnector";if(Ϫ.ǭ("reflector")||Ϫ.ǭ("spotlight"))return"ReflectorLight";if((Ϫ.ǭ("inter")&&Ϫ.Ǫ("light")))
  257. return"InteriorLight";if(Ϫ.ǭ("land"))return"LandingGear";if(Ϫ.ǭ("program"))return"ProgrammableBlock";if(Ϫ.ǭ("timer"))return
  258. "TimerBlock";if(Ϫ.ǭ("motor")||Ϫ.ǭ("rotor"))return"MotorStator";if(Ϫ.ǭ("piston"))return"PistonBase";if(Ϫ.ǭ("proj"))return"Projector";
  259. if(Ϫ.Ǭ("merge"))return"ShipMergeBlock";if(Ϫ.ǭ("sound"))return"SoundBlock";if(Ϫ.ǭ("col"))return"Collector";if(Ϫ.Ǭ("jump"))
  260. return"JumpDrive";if(string.Compare(Ϫ,"door",true)==0)return"Door";if((Ϫ.Ǭ("grav")&&Ϫ.Ǭ("sphe")))return
  261. "GravityGeneratorSphere";if(Ϫ.Ǭ("grav"))return"GravityGenerator";if(Ϫ.Ǫ("drill"))return"ShipDrill";if(Ϫ.Ǭ("grind"))return"ShipGrinder";if(Ϫ.Ǫ(
  262. "welder"))return"ShipWelder";if(Ϫ.ǭ("parach"))return"Parachute";if((Ϫ.Ǭ("turret")&&Ϫ.Ǭ("gatl")))return"LargeGatlingTurret";if((Ϫ
  263. .Ǭ("turret")&&Ϫ.Ǭ("inter")))return"LargeInteriorTurret";if((Ϫ.Ǭ("turret")&&Ϫ.Ǭ("miss")))return"LargeMissileTurret";if(Ϫ.Ǭ
  264. ("gatl"))return"SmallGatlingGun";if((Ϫ.Ǭ("launcher")&&Ϫ.Ǭ("reload")))return"SmallMissileLauncherReload";if((Ϫ.Ǭ(
  265. "launcher")))return"SmallMissileLauncher";if(Ϫ.Ǭ("mass"))return"VirtualMass";if(string.Compare(Ϫ,"warhead",true)==0)return
  266. "Warhead";if(Ϫ.ǭ("func"))return"FunctionalBlock";if(string.Compare(Ϫ,"shipctrl",true)==0)return"ShipController";if(Ϫ.ǭ("light"))
  267. return"LightingBlock";if(Ϫ.ǭ("contr"))return"ControlPanel";if(Ϫ.ǭ("coc"))return"Cockpit";if(Ϫ.ǭ("medi"))return"MedicalRoom";if
  268. (Ϫ.ǭ("remote"))return"RemoteControl";if(Ϫ.ǭ("but"))return"ButtonPanel";if(Ϫ.ǭ("cam"))return"CameraBlock";if(Ϫ.Ǭ("detect")
  269. )return"OreDetector";if(Ϫ.ǭ("decoy"))return"Decoy";return"Unknown";}public string Ϝ(IMyBatteryBlock Ō){string ϛ="";if(Ō.
  270. ChargeMode==ChargeMode.Recharge)ϛ="(+) ";else if(Ō.ChargeMode==ChargeMode.Discharge)ϛ="(-) ";else ϛ="(±) ";return ϛ+n.Ǽ((Ō.
  271. CurrentStoredPower/Ō.MaxStoredPower)*100.0f)+"%";}Dictionary<MyLaserAntennaStatus,string>Ϛ=new Dictionary<MyLaserAntennaStatus,string>(){{
  272. MyLaserAntennaStatus.Idle,"IDLE"},{MyLaserAntennaStatus.Connecting,"CONNECTING"},{MyLaserAntennaStatus.Connected,"CONNECTED"},{
  273. MyLaserAntennaStatus.OutOfRange,"OUT OF RANGE"},{MyLaserAntennaStatus.RotatingToTarget,"ROTATING"},{MyLaserAntennaStatus.
  274. SearchingTargetForAntenna,"SEARCHING"}};public string ϙ(IMyLaserAntenna Ŋ){return Ϛ[Ŋ.Status];}public double Ϙ(IMyJumpDrive ŋ,out double ʡ,out
  275. double ƀ){ʡ=ŋ.CurrentStoredPower;ƀ=ŋ.MaxStoredPower;return(ƀ>0?ʡ/ƀ*100:0);}public double ϗ(IMyJumpDrive ŋ){double ʡ=ŋ.
  276. CurrentStoredPower;double ƀ=ŋ.MaxStoredPower;return(ƀ>0?ʡ/ƀ*100:0);}}class ϖ:ɑ{ɔ n;ġ Ē;public int ϕ=0;public ϖ(ɔ Û,ġ j){ɐ="BootPanelsTask"
  277. ;Ɍ=1;n=Û;Ē=j;if(!n.ɣ){ϕ=int.MaxValue;Ē.û=true;}}ǒ ď;public override void Ʉ(){ď=n.ď;}public override bool Ƀ(bool ö){if(ϕ>n
  278. .ɢ.Count){Ʌ();return true;}if(!ö&&ϕ==0){Ē.û=false;}if(!ϭ(ö))return false;ϕ++;return true;}public override void ɂ(){Ē.û=
  279. true;}public void Ϟ(){ü ç=Ē.ç;for(int E=0;E<ç.º();E++){è k=ç.z(E);k.G();}ϕ=(n.ɣ?0:int.MaxValue);}int E;ŝ Ϯ=null;public bool
  280. ϭ(bool ö){ü ç=Ē.ç;if(!ö)E=0;int Ϭ=0;for(;E<ç.º();E++){if(!ƒ.Ȝ(40)||Ϭ>5)return false;è k=ç.z(E);Ϯ=n.Ǐ(Ϯ,k);float?ϫ=k.Þ?.
  281. FontSize;if(ϫ!=null&&ϫ>3f)continue;if(Ϯ.ŗ.Count<=0)Ϯ.Ŕ(n.Lj(null,k));else n.Lj(Ϯ.ŗ[0],k);n.Ƭ();n.Ƣ(ď.ǡ("B1"));double ʑ=(double)ϕ/n
  282. .ɢ.Count*100;n.Ư(ʑ);if(ϕ==n.ɢ.Count){n.Ǎ("");n.Ƣ("Automatic LCDs 2");n.Ƣ("by MMaster");}else n.nj(n.ɢ[ϕ]);bool à=k.à;k.à=
  283. false;n.Ǒ(k,Ϯ);k.à=à;Ϭ++;}return true;}public bool ϩ(){return ϕ<=n.ɢ.Count;}}public enum Ϩ{ϧ=0,Ϧ=1,ϥ=2,Ϥ=3,ϣ=4,Ϣ=5,ϡ=6,Ϡ=7,ϟ=
  284. 8,ϰ=9,έ=10,Β=11,ʷ=12,ʶ=13,ʵ=14,ʴ=15,ʳ=16,ʲ=17,ʱ=18,ʰ=19,ʯ=20,ʮ=21,ʭ=22,ʬ=23,ʫ=24,ʪ=25,ʩ=26,ʨ=27,ʧ=28,ʦ=29,ʥ=30,ʤ=31,}
  285. class ʣ{ȑ ƒ;public string ʢ="";public string ʹ="";public string ˎ="";public string ˍ="";public Ϩ ˌ=Ϩ.ϧ;public ʣ(ȑ ƚ){ƒ=ƚ;}Ϩ ˋ
  286. (){if(ʢ=="echo"||ʢ=="center"||ʢ=="right")return Ϩ.Ϧ;if(ʢ.StartsWith("hscroll"))return Ϩ.ʥ;if(ʢ.StartsWith("inventory")||ʢ
  287. .StartsWith("missing")||ʢ.StartsWith("invlist"))return Ϩ.ϥ;if(ʢ.StartsWith("working"))return Ϩ.ʱ;if(ʢ.StartsWith("cargo")
  288. )return Ϩ.Ϥ;if(ʢ.StartsWith("mass"))return Ϩ.ϣ;if(ʢ.StartsWith("shipmass"))return Ϩ.ʬ;if(ʢ=="oxygen")return Ϩ.Ϣ;if(ʢ.
  289. StartsWith("tanks"))return Ϩ.ϡ;if(ʢ.StartsWith("powertime"))return Ϩ.Ϡ;if(ʢ.StartsWith("powerused"))return Ϩ.ϟ;if(ʢ.StartsWith(
  290. "power"))return Ϩ.ϰ;if(ʢ.StartsWith("speed"))return Ϩ.έ;if(ʢ.StartsWith("accel"))return Ϩ.Β;if(ʢ.StartsWith("alti"))return Ϩ.ʪ;
  291. if(ʢ.StartsWith("charge"))return Ϩ.ʷ;if(ʢ.StartsWith("docked"))return Ϩ.ʤ;if(ʢ.StartsWith("time")||ʢ.StartsWith("date"))
  292. return Ϩ.ʶ;if(ʢ.StartsWith("countdown"))return Ϩ.ʵ;if(ʢ.StartsWith("textlcd"))return Ϩ.ʴ;if(ʢ.EndsWith("count"))return Ϩ.ʳ;if(
  293. ʢ.StartsWith("dampeners")||ʢ.StartsWith("occupied"))return Ϩ.ʲ;if(ʢ.StartsWith("damage"))return Ϩ.ʰ;if(ʢ.StartsWith(
  294. "amount"))return Ϩ.ʯ;if(ʢ.StartsWith("pos"))return Ϩ.ʮ;if(ʢ.StartsWith("distance"))return Ϩ.ʫ;if(ʢ.StartsWith("details"))return
  295. Ϩ.ʭ;if(ʢ.StartsWith("stop"))return Ϩ.ʩ;if(ʢ.StartsWith("gravity"))return Ϩ.ʨ;if(ʢ.StartsWith("customdata"))return Ϩ.ʧ;if(
  296. ʢ.StartsWith("prop"))return Ϩ.ʦ;return Ϩ.ϧ;}public ƙ ˊ(){switch(ˌ){case Ϩ.Ϧ:return new ґ();case Ϩ.ϥ:return new ҟ();case Ϩ
  297. .Ϥ:return new ʘ();case Ϩ.ϣ:return new ӂ();case Ϩ.Ϣ:return new ҩ();case Ϩ.ϡ:return new щ();case Ϩ.Ϡ:return new г();case Ϩ.
  298. ϟ:return new П();case Ϩ.ϰ:return new ң();case Ϩ.έ:return new ѓ();case Ϩ.Β:return new ʓ();case Ϩ.ʷ:return new Λ();case Ϩ.ʶ
  299. :return new ˬ();case Ϩ.ʵ:return new Ω();case Ϩ.ʴ:return new ĸ();case Ϩ.ʳ:return new ʎ();case Ϩ.ʲ:return new ѩ();case Ϩ.ʱ:
  300. return new Ķ();case Ϩ.ʰ:return new Α();case Ϩ.ʯ:return new һ();case Ϩ.ʮ:return new ҥ();case Ϩ.ʭ:return new Ͷ();case Ϩ.ʬ:return
  301. new ѧ();case Ϩ.ʫ:return new Ά();case Ϩ.ʪ:return new ʐ();case Ϩ.ʩ:return new ь();case Ϩ.ʨ:return new Ґ();case Ϩ.ʧ:return new
  302. Σ();case Ϩ.ʦ:return new ќ();case Ϩ.ʥ:return new ҏ();case Ϩ.ʤ:return new ҕ();default:return new ƙ();}}public List<ʾ>ˉ=new
  303. List<ʾ>();string[]ˈ=null;string ˇ="";bool ˆ=false;int Ĵ=1;public bool ˁ(string ˀ,bool ö){if(!ö){ˌ=Ϩ.ϧ;ʹ="";ʢ="";ˎ=ˀ.
  304. TrimStart(' ');ˉ.Clear();if(ˎ=="")return true;int ʿ=ˎ.IndexOf(' ');if(ʿ<0||ʿ>=ˎ.Length-1)ˍ="";else ˍ=ˎ.Substring(ʿ+1);ˈ=ˎ.Split(
  305. ' ');ˇ="";ˆ=false;ʢ=ˈ[0].ToLower();Ĵ=1;}for(;Ĵ<ˈ.Length;Ĵ++){if(!ƒ.Ȝ(40))return false;string IJ=ˈ[Ĵ];if(IJ=="")continue;if(IJ[
  306. 0]=='{'&&IJ[IJ.Length-1]=='}'){IJ=IJ.Substring(1,IJ.Length-2);if(IJ=="")continue;if(ʹ=="")ʹ=IJ;else ˉ.Add(new ʾ(IJ));continue;}if
  307. (IJ[0]=='{'){ˆ=true;ˇ=IJ.Substring(1);continue;}if(IJ[IJ.Length-1]=='}'){ˆ=false;ˇ+=' '+IJ.Substring(0,IJ.Length-1);if(ʹ=="")ʹ=
  308. ˇ;else ˉ.Add(new ʾ(ˇ));continue;}if(ˆ){if(ˇ.Length!=0)ˇ+=' ';ˇ+=IJ;continue;}if(ʹ=="")ʹ=IJ;else ˉ.Add(new ʾ(IJ));}ˌ=ˋ();
  309. return true;}}class ʾ{public string ʽ="";public string ʼ="";public string IJ="";public List<string>ʻ=new List<string>();public
  310. ʾ(string ʺ){IJ=ʺ;}public void ˁ(){if(IJ==""||ʽ!=""||ʼ!=""||ʻ.Count>0)return;string ʡ=IJ.Trim();if(ʡ[0]=='+'||ʡ[0]=='-'){ʽ+=ʡ
  311. [0];ʡ=IJ.Substring(1);}string[]ƞ=ʡ.Split('/');string ʔ=ƞ[0];if(ƞ.Length>1){ʼ=ƞ[0];ʔ=ƞ[1];}else ʼ="";if(ʔ.Length>0){string[
  312. ]Ć=ʔ.Split(',');for(int E=0;E<Ć.Length;E++)if(Ć[E]!="")ʻ.Add(Ć[E]);}}}class ʓ:ƙ{public ʓ(){Ɍ=0.5;ɐ="CmdAccel";}public
  313. override bool ƕ(bool ö){double ʒ=0;if(Ƙ.ʹ!="")double.TryParse(Ƙ.ʹ.Trim(),out ʒ);n.Ƌ(ď.ǡ("AC1")+" ");n.ƴ(n.ǀ.ɾ.ToString("F1")+
  314. " m/s²");if(ʒ>0){double ʑ=n.ǀ.ɾ/ʒ*100;n.Ư(ʑ);}return true;}}class ʐ:ƙ{public ʐ(){Ɍ=1;ɐ="CmdAltitude";}public override bool ƕ(
  315. bool ö){string ʏ=(Ƙ.ʢ.EndsWith("sea")?"sea":"ground");switch(ʏ){case"sea":n.Ƌ(ď.ǡ("ALT1"));n.ƴ(n.ǀ.ɴ.ToString("F0")+" m");
  316. break;default:n.Ƌ(ď.ǡ("ALT2"));n.ƴ(n.ǀ.ɲ.ToString("F0")+" m");break;}return true;}}class ʎ:ƙ{public ʎ(){Ɍ=15;ɐ=
  317. "CmdBlockCount";}α ĵ;public override void Ʉ(){ĵ=new α(ƒ,n.Ő);}bool ʍ;bool ʌ;int Ĵ=0;int ì=0;public override bool ƕ(bool ö){if(!ö){ʍ=(Ƙ.
  318. ʢ=="enabledcount");ʌ=(Ƙ.ʢ=="prodcount");Ĵ=0;ì=0;}if(Ƙ.ˉ.Count==0){if(ì==0){if(!ö)ĵ.ų();if(!ĵ.κ(Ƙ.ʹ,ö))return false;ì++;ö=
  319. false;}if(!ʚ(ĵ,"blocks",ʍ,ʌ,ö))return false;return true;}for(;Ĵ<Ƙ.ˉ.Count;Ĵ++){ʾ IJ=Ƙ.ˉ[Ĵ];if(!ö)IJ.ˁ();if(!Ŀ(IJ,ö))return false
  320. ;ö=false;}return true;}int İ=0;int ı=0;bool Ŀ(ʾ IJ,bool ö){if(!ö){İ=0;ı=0;}for(;İ<IJ.ʻ.Count;İ++){if(ı==0){if(!ö)ĵ.ų();if(!
  321. ĵ.ϴ(IJ.ʻ[İ],Ƙ.ʹ,ö))return false;ı++;ö=false;}if(!ʚ(ĵ,IJ.ʻ[İ],ʍ,ʌ,ö))return false;ı=0;ö=false;}return true;}Dictionary<
  322. string,int>ʠ=new Dictionary<string,int>();Dictionary<string,int>ʟ=new Dictionary<string,int>();List<string>ʞ=new List<string>(
  323. );int ú=0;int ʝ=0;int ʜ=0;ʊ ʛ=new ʊ();bool ʚ(α ā,string ʏ,bool ʍ,bool ʌ,bool ö){if(ā.ϳ()==0){ʛ.ų().ʄ(char.ToUpper(ʏ[0])).
  324. ʄ(ʏ.ToLower(),1,ʏ.Length-1);n.Ƌ(ʛ.ʄ(" ").ʄ(ď.ǡ("C1")).ʄ(" "));string ʙ=(ʍ||ʌ?"0 / 0":"0");n.ƴ(ʙ);return true;}if(!ö){ʠ.
  325. Clear();ʟ.Clear();ʞ.Clear();ú=0;ʝ=0;ʜ=0;}if(ʜ==0){for(;ú<ā.ϳ();ú++){if(!ƒ.Ȝ(15))return false;IMyProductionBlock ŏ=ā.ή[ú]as
  326. IMyProductionBlock;ʛ.ų().ʄ(ā.ή[ú].DefinitionDisplayNameText);string Ƕ=ʛ.ɓ();if(ʞ.Contains(Ƕ)){ʠ[Ƕ]++;if((ʍ&&ā.ή[ú].IsWorking)||(ʌ&&ŏ!=null
  327. &&ŏ.IsProducing))ʟ[Ƕ]++;}else{ʠ.Add(Ƕ,1);ʞ.Add(Ƕ);if(ʍ||ʌ)if((ʍ&&ā.ή[ú].IsWorking)||(ʌ&&ŏ!=null&&ŏ.IsProducing))ʟ.Add(Ƕ,1)
  328. ;else ʟ.Add(Ƕ,0);}}ʜ++;ö=false;}for(;ʝ<ʠ.Count;ʝ++){if(!ƒ.Ȝ(8))return false;n.Ƌ(ʞ[ʝ]+" "+ď.ǡ("C1")+" ");string ʙ=(ʍ||ʌ?ʟ[
  329. ʞ[ʝ]]+" / ":"")+ʠ[ʞ[ʝ]];n.ƴ(ʙ);}return true;}}class ʘ:ƙ{α ĵ;public ʘ(){Ɍ=2;ɐ="CmdCargo";}public override void Ʉ(){ĵ=new α
  330. (ƒ,n.Ő);}bool ʗ=true;bool ʕ=false;bool ʖ=false;bool ˏ=false;double Ο=0;double Ν=0;int ì=0;public override bool ƕ(bool ö){
  331. if(!ö){ĵ.ų();ʗ=Ƙ.ʢ.Contains("all");ˏ=Ƙ.ʢ.EndsWith("bar");ʕ=(Ƙ.ʢ[Ƙ.ʢ.Length-1]=='x');ʖ=(Ƙ.ʢ[Ƙ.ʢ.Length-1]=='p');Ο=0;Ν=0;ì=0
  332. ;}if(ì==0){if(ʗ){if(!ĵ.κ(Ƙ.ʹ,ö))return false;}else{if(!ĵ.ϴ("cargocontainer",Ƙ.ʹ,ö))return false;}ì++;ö=false;}double Μ=ĵ.
  333. ψ(ref Ο,ref Ν,ö);if(Double.IsNaN(Μ))return false;if(ˏ){n.Ư(Μ);return true;}n.Ƌ(ď.ǡ("C2")+" ");if(!ʕ&&!ʖ){n.ƴ(n.ȅ(Ο)+
  334. "L / "+n.ȅ(Ν)+"L");n.Ƶ(Μ,1.0f,n.ɗ);n.Ǎ(' '+n.Ǽ(Μ)+"%");}else if(ʖ){n.ƴ(n.Ǽ(Μ)+"%");n.Ư(Μ);}else n.ƴ(n.Ǽ(Μ)+"%");return true;}}
  335. class Λ:ƙ{public Λ(){Ɍ=3;ɐ="CmdCharge";}α ĵ;public override void Ʉ(){ĵ=new α(ƒ,n.Ő);}int ì=0;int ú=0;bool ʕ=false;bool Ξ=
  336. false;bool ˏ=false;Dictionary<long,double>e=new Dictionary<long,double>();Dictionary<long,double>Ι=new Dictionary<long,double
  337. >();Dictionary<long,double>Θ=new Dictionary<long,double>();Dictionary<long,double>Η=new Dictionary<long,double>();
  338. Dictionary<long,double>Ζ=new Dictionary<long,double>();double Ε(long Δ,double ʡ,double ƀ){double Γ=0;double Κ=0;double Π=0;double
  339. Χ=0;if(Ι.TryGetValue(Δ,out Π)){Χ=Η[Δ];}if(e.TryGetValue(Δ,out Γ)){Κ=Θ[Δ];}double ά=(ƒ.ȍ-Π);double Ϋ=0;if(ά>0)Ϋ=(ʡ-Χ)/ά;if
  340. (Ϋ<0){if(!Ζ.TryGetValue(Δ,out Ϋ))Ϋ=0;}else Ζ[Δ]=Ϋ;if(Γ>0){Ι[Δ]=e[Δ];Η[Δ]=Θ[Δ];}e[Δ]=ƒ.ȍ;Θ[Δ]=ʡ;return(Ϋ>0?(ƀ-ʡ)/Ϋ:0);}
  341. public override bool ƕ(bool ö){if(!ö){ĵ.ų();ˏ=Ƙ.ʢ.EndsWith("bar");ʕ=Ƙ.ʢ.Contains("x");Ξ=Ƙ.ʢ.Contains("time");ú=0;ì=0;}if(ì==0)
  342. {if(!ĵ.ϴ("jumpdrive",Ƙ.ʹ,ö))return false;if(ĵ.ϳ()<=0){n.Ǎ("Charge: "+ď.ǡ("D2"));return true;}ì++;ö=false;}for(;ú<ĵ.ϳ();ú
  343. ++){if(!ƒ.Ȝ(25))return false;IMyJumpDrive ŋ=ĵ.ή[ú]as IMyJumpDrive;double ʡ,ƀ,ʑ;ʑ=n.Ő.Ϙ(ŋ,out ʡ,out ƀ);if(ˏ){n.Ư(ʑ);}else{n
  344. .Ƌ(ŋ.CustomName+" ");if(Ξ){TimeSpan Ϊ=TimeSpan.FromSeconds(Ε(ŋ.EntityId,ʡ,ƀ));n.ƴ(n.ǁ.ȓ(Ϊ));if(!ʕ){n.Ƶ(ʑ,1.0f,n.ɗ);n.ƴ(
  345. ' '+ʑ.ToString("0.0")+"%");}}else{if(!ʕ){n.ƴ(n.ȅ(ʡ)+"Wh / "+n.ȅ(ƀ)+"Wh");n.Ƶ(ʑ,1.0f,n.ɗ);}n.ƴ(' '+ʑ.ToString("0.0")+"%");}}
  346. }return true;}}class Ω:ƙ{public Ω(){Ɍ=1;ɐ="CmdCountdown";}public override bool ƕ(bool ö){bool ˢ=Ƙ.ʢ.EndsWith("c");bool Ψ=
  347. Ƙ.ʢ.EndsWith("r");string Φ="";int ː=Ƙ.ˎ.IndexOf(' ');if(ː>=0)Φ=Ƙ.ˎ.Substring(ː+1).Trim();DateTime Υ=DateTime.Now;DateTime
  348. Τ;if(!DateTime.TryParseExact(Φ,"H:mm d.M.yyyy",System.Globalization.CultureInfo.InvariantCulture,System.Globalization.
  349. DateTimeStyles.None,out Τ)){n.Ǎ(ď.ǡ("C3"));n.Ǎ(" Countdown 19:02 28.2.2015");return true;}TimeSpan ˑ=Τ-Υ;string ķ="";if(ˑ.Ticks<=0)ķ=
  350. ď.ǡ("C4");else{if((int)ˑ.TotalDays>0)ķ+=(int)ˑ.TotalDays+" "+ď.ǡ("C5")+" ";if(ˑ.Hours>0||ķ!="")ķ+=ˑ.Hours+"h ";if(ˑ.
  351. Minutes>0||ķ!="")ķ+=ˑ.Minutes+"m ";ķ+=ˑ.Seconds+"s";}if(ˢ)n.Ƣ(ķ);else if(Ψ)n.ƴ(ķ);else n.Ǎ(ķ);return true;}}class Σ:ƙ{public Σ(
  352. ){Ɍ=1;ɐ="CmdCustomData";}public override bool ƕ(bool ö){string ķ="";if(Ƙ.ʹ!=""&&Ƙ.ʹ!="*"){IMyTerminalBlock Ρ=n.ƿ.
  353. GetBlockWithName(Ƙ.ʹ)as IMyTerminalBlock;if(Ρ==null){n.Ǎ("CustomData: "+ď.ǡ("CD1")+Ƙ.ʹ);return true;}ķ=Ρ.CustomData;}else{n.Ǎ(
  354. "CustomData:"+ď.ǡ("CD2"));return true;}if(ķ.Length==0)return true;n.nj(ķ);return true;}}class Α:ƙ{public Α(){Ɍ=5;ɐ="CmdDamage";}α ĵ;
  355. public override void Ʉ(){ĵ=new α(ƒ,n.Ő);}bool Ɯ=false;int ú=0;public override bool ƕ(bool ö){bool ʕ=Ƙ.ʢ.StartsWith("damagex");
  356. bool ʹ=Ƙ.ʢ.EndsWith("noc");bool ͳ=(!ʹ&&Ƙ.ʢ.EndsWith("c"));float Ͳ=100;if(!ö){ĵ.ų();Ɯ=false;ú=0;}if(!ĵ.κ(Ƙ.ʹ,ö))return false;
  357. if(Ƙ.ˉ.Count>0){if(!float.TryParse(Ƙ.ˉ[0].IJ,out Ͳ))Ͳ=100;}Ͳ-=0.00001f;for(;ú<ĵ.ϳ();ú++){if(!ƒ.Ȝ(30))return false;
  358. IMyTerminalBlock å=ĵ.ή[ú];IMySlimBlock ͱ=å.CubeGrid.GetCubeBlock(å.Position);if(ͱ==null)continue;float Ͱ=(ʹ?ͱ.MaxIntegrity:ͱ.
  359. BuildIntegrity);if(!ͳ)Ͱ-=ͱ.CurrentDamage;float ʑ=100*(Ͱ/ͱ.MaxIntegrity);if(ʑ>=Ͳ)continue;Ɯ=true;string ˮ=n.ǜ(ͱ.FatBlock.
  360. DisplayNameText,n.ɞ*0.69f-n.ɗ);n.Ƌ(ˮ+' ');if(!ʕ){n.Ʃ(n.ȅ(Ͱ)+" / ",0.69f);n.Ƌ(n.ȅ(ͱ.MaxIntegrity));}n.ƴ(' '+ʑ.ToString("0.0")+'%');n.Ư(ʑ
  361. );}if(!Ɯ)n.Ǎ(ď.ǡ("D3"));return true;}}class ˬ:ƙ{public ˬ(){Ɍ=1;ɐ="CmdDateTime";}public override bool ƕ(bool ö){bool ˤ=(Ƙ.
  362. ʢ.StartsWith("datetime"));bool ˣ=(Ƙ.ʢ.StartsWith("date"));bool ˢ=Ƙ.ʢ.Contains("c");int ˡ=Ƙ.ʢ.IndexOf('+');if(ˡ<0)ˡ=Ƙ.ʢ.
  363. IndexOf('-');float ˠ=0;if(ˡ>=0)float.TryParse(Ƙ.ʢ.Substring(ˡ),out ˠ);DateTime ˑ=DateTime.Now.AddHours(ˠ);string ķ="";int ː=Ƙ.ˎ
  364. .IndexOf(' ');if(ː>=0)ķ=Ƙ.ˎ.Substring(ː+1);if(!ˤ){if(!ˣ)ķ+=ˑ.ToShortTimeString();else ķ+=ˑ.ToShortDateString();}else{if(ķ
  365. =="")ķ=String.Format("{0:d} {0:t}",ˑ);else{ķ=ķ.Replace("/","\\/");ķ=ķ.Replace(":","\\:");ķ=ķ.Replace("\"","\\\"");ķ=ķ.
  366. Replace("'","\\'");ķ=ˑ.ToString(ķ+' ');ķ=ķ.Substring(0,ķ.Length-1);}}if(ˢ)n.Ƣ(ķ);else n.Ǎ(ķ);return true;}}class Ͷ:ƙ{public Ͷ()
  367. {Ɍ=5;ɐ="CmdDetails";}string Ώ="";α ĵ;public override void Ʉ(){ĵ=new α(ƒ,n.Ő);if(Ƙ.ˉ.Count>0)Ώ=Ƙ.ˉ[0].IJ.Trim();}int ì=0;
  368. int ú=1;bool Ύ=false;IMyTerminalBlock å;public override bool ƕ(bool ö){if(Ƙ.ʹ==""||Ƙ.ʹ=="*"){n.Ǎ("Details: "+ď.ǡ("D1"));
  369. return true;}if(!ö){ĵ.ų();Ύ=Ƙ.ʢ.Contains("non");ì=0;ú=1;}if(ì==0){if(!ĵ.κ(Ƙ.ʹ,ö))return true;if(ĵ.ϳ()<=0){n.Ǎ("Details: "+ď.ǡ(
  370. "D2"));return true;}ì++;ö=false;}int Ό=(Ƙ.ʢ.EndsWith("x")?1:0);if(ì==1){if(!ö){å=ĵ.ή[0];if(!Ύ)n.Ǎ(å.CustomName);}if(!Ή(å,Ό,ö
  371. ))return false;ì++;ö=false;}for(;ú<ĵ.ϳ();ú++){if(!ö){å=ĵ.ή[ú];if(!Ύ){n.Ǎ("");n.Ǎ(å.CustomName);}}if(!Ή(å,Ό,ö))return
  372. false;ö=false;}return true;}string[]lj;int Ί=0;bool ΐ=false;ʊ ƫ=new ʊ();bool Ή(IMyTerminalBlock å,int Έ,bool ö){if(!ö){lj=ƫ.ų()
  373. .ʄ(å.DetailedInfo).ʄ('\n').ʄ(å.CustomInfo).ɓ().Split('\n');Ί=Έ;ΐ=(Ώ.Length==0);}for(;Ί<lj.Length;Ί++){if(!ƒ.Ȝ(5))return
  374. false;if(lj[Ί].Length==0)continue;if(!ΐ){if(!lj[Ί].Contains(Ώ))continue;ΐ=true;}n.Ǎ(ƫ.ų().ʄ(" ").ʄ(lj[Ί]));}return true;}}class
  375. Ά:ƙ{public Ά(){Ɍ=1;ɐ="CmdDistance";}string ͽ="";string[]ͼ;Vector3D ͻ;string ͺ="";bool ʸ=false;public override void Ʉ(){ʸ=
  376. false;if(Ƙ.ˉ.Count<=0)return;ͽ=Ƙ.ˉ[0].IJ.Trim();ͼ=ͽ.Split(':');if(ͼ.Length<5||ͼ[0]!="GPS")return;double ͷ,Њ,Җ;if(!double.
  377. TryParse(ͼ[2],out ͷ))return;if(!double.TryParse(ͼ[3],out Њ))return;if(!double.TryParse(ͼ[4],out Җ))return;ͻ=new Vector3D(ͷ,Њ,Җ);
  378. ͺ=ͼ[1];ʸ=true;}public override bool ƕ(bool ö){if(!ʸ){n.Ǎ("Distance: "+ď.ǡ("DTU")+" '"+ͽ+"'.");return true;}
  379. IMyTerminalBlock å=j.D.å;if(Ƙ.ʹ!=""&&Ƙ.ʹ!="*"){å=n.ƿ.GetBlockWithName(Ƙ.ʹ);if(å==null){n.Ǎ("Distance: "+ď.ǡ("P1")+": "+Ƙ.ʹ);return true;
  380. }}double ъ=Vector3D.Distance(å.GetPosition(),ͻ);n.Ƌ(ͺ+": ");n.ƴ(n.ȅ(ъ)+"m ");return true;}}class ҕ:ƙ{α ĵ;public ҕ(){Ɍ=2;ɐ
  381. ="CmdDocked";}public override void Ʉ(){ĵ=new α(ƒ,n.Ő);}int ì=0;int Ҕ=0;bool ғ=false;bool Ғ=false;IMyShipConnector ʼn;
  382. public override bool ƕ(bool ö){if(!ö){if(Ƙ.ʢ.EndsWith("e"))ғ=true;if(Ƙ.ʢ.Contains("cn"))Ғ=true;ĵ.ų();ì=0;}if(ì==0){if(!ĵ.ϴ(
  383. "connector",Ƙ.ʹ,ö))return false;ì++;Ҕ=0;ö=false;}if(ĵ.ϳ()<=0){n.Ǎ("Docked: "+ď.ǡ("DO1"));return true;}for(;Ҕ<ĵ.ϳ();Ҕ++){ʼn=ĵ.ή[Ҕ]as
  384. IMyShipConnector;if(ʼn.Status==MyShipConnectorStatus.Connected){if(Ғ){n.Ƌ(ʼn.CustomName+":");n.ƴ(ʼn.OtherConnector.CubeGrid.CustomName);}
  385. else{n.Ǎ(ʼn.OtherConnector.CubeGrid.CustomName);}}else{if(ғ){if(Ғ){n.Ƌ(ʼn.CustomName+":");n.ƴ("-");}else n.Ǎ("-");}}}return
  386. true;}}class ґ:ƙ{public ґ(){Ɍ=30;ɐ="CmdEcho";}public override bool ƕ(bool ö){string ʏ=(Ƙ.ʢ=="center"?"c":(Ƙ.ʢ=="right"?"r":
  387. "n"));switch(ʏ){case"c":n.Ƣ(Ƙ.ˍ);break;case"r":n.ƴ(Ƙ.ˍ);break;default:n.Ǎ(Ƙ.ˍ);break;}return true;}}class Ґ:ƙ{public Ґ(){Ɍ=
  388. 1;ɐ="CmdGravity";}public override bool ƕ(bool ö){string ʏ=(Ƙ.ʢ.Contains("nat")?"n":(Ƙ.ʢ.Contains("art")?"a":(Ƙ.ʢ.Contains
  389. ("tot")?"t":"s")));Vector3D ϔ;if(n.ǀ.ɯ==null){n.Ǎ("Gravity: "+ď.ǡ("GNC"));return true;}switch(ʏ){case"n":n.Ƌ(ď.ǡ("G2")+
  390. " ");ϔ=n.ǀ.ɯ.GetNaturalGravity();n.ƴ(ϔ.Length().ToString("F1")+" m/s²");break;case"a":n.Ƌ(ď.ǡ("G3")+" ");ϔ=n.ǀ.ɯ.
  391. GetArtificialGravity();n.ƴ(ϔ.Length().ToString("F1")+" m/s²");break;case"t":n.Ƌ(ď.ǡ("G1")+" ");ϔ=n.ǀ.ɯ.GetTotalGravity();n.ƴ(ϔ.Length().
  392. ToString("F1")+" m/s²");break;default:n.Ƌ(ď.ǡ("GN"));n.Ʃ(" | ",0.33f);n.Ʃ(ď.ǡ("GA")+" | ",0.66f);n.ƴ(ď.ǡ("GT"),1.0f);n.Ƌ("");ϔ=n
  393. .ǀ.ɯ.GetNaturalGravity();n.Ʃ(ϔ.Length().ToString("F1")+" | ",0.33f);ϔ=n.ǀ.ɯ.GetArtificialGravity();n.Ʃ(ϔ.Length().
  394. ToString("F1")+" | ",0.66f);ϔ=n.ǀ.ɯ.GetTotalGravity();n.ƴ(ϔ.Length().ToString("F1")+" ");break;}return true;}}class ҏ:ƙ{public ҏ
  395. (){Ɍ=0.5;ɐ="CmdHScroll";}ʊ җ=new ʊ();int қ=1;public override bool ƕ(bool ö){if(җ.ʈ==0){string ķ=Ƙ.ˍ+" ";if(ķ.Length==0)
  396. return true;float Ҡ=n.ɞ;float Ʀ=n.Ǟ(ķ,n.ƹ);float ю=Ҡ/Ʀ;if(ю>1)җ.ʄ(string.Join("",Enumerable.Repeat(ķ,(int)Math.Ceiling(ю))));
  397. else җ.ʄ(ķ);if(ķ.Length>40)қ=3;else if(ķ.Length>5)қ=2;else қ=1;n.Ǎ(җ);return true;}bool Ψ=Ƙ.ʢ.EndsWith("r");if(Ψ){җ.ƫ.Insert
  398. (0,җ.ɓ(җ.ʈ-қ,қ));җ.ʃ(җ.ʈ-қ,қ);}else{җ.ʄ(җ.ɓ(0,қ));җ.ʃ(0,қ);}n.Ǎ(җ);return true;}}class ҟ:ƙ{public ҟ(){Ɍ=7;ɐ="CmdInvList";
  399. }float Ҟ=-1;float ҝ=-1;public override void Ʉ(){ĵ=new α(ƒ,n.Ő);ѻ=new Ɣ(ƒ,n);}ʊ ƫ=new ʊ(100);Dictionary<string,string>ҡ=
  400. new Dictionary<string,string>();void Ҝ(string Ȥ,double ѱ,int Ô){if(Ô>0){if(!Ҋ)n.Ƶ(Math.Min(100,100*ѱ/Ô),0.3f);string ˮ;if(ҡ
  401. .ContainsKey(Ȥ)){ˮ=ҡ[Ȥ];}else{if(!ҋ)ˮ=n.ǜ(Ȥ,n.ɞ*0.5f-ҙ-ҝ);else{if(!Ҋ)ˮ=n.ǜ(Ȥ,n.ɞ*0.5f);else ˮ=n.ǜ(Ȥ,n.ɞ*0.9f);}ҡ[Ȥ]=ˮ;}ƫ.
  402. ų();if(!Ҋ)ƫ.ʄ(' ');if(!ҋ){n.Ƌ(ƫ.ʄ(ˮ).ʄ(' '));n.Ʃ(n.ȅ(ѱ),1.0f,ҙ+ҝ);n.Ǎ(ƫ.ų().ʄ(" / ").ʄ(n.ȅ(Ô)));}else{n.Ǎ(ƫ.ʄ(ˮ));}}else{
  403. if(!ҋ){n.Ƌ(ƫ.ų().ʄ(Ȥ).ʄ(':'));n.ƴ(n.ȅ(ѱ),1.0f,Ҟ);}else n.Ǎ(ƫ.ų().ʄ(Ȥ));}}void Қ(string Ȥ,double ѱ,double Ѱ,int Ô){if(Ô>0){
  404. if(!ҋ){n.Ƌ(ƫ.ų().ʄ(Ȥ).ʄ(' '));n.Ʃ(n.ȅ(ѱ),0.51f);n.Ƌ(ƫ.ų().ʄ(" / ").ʄ(n.ȅ(Ô)));n.ƴ(ƫ.ų().ʄ(" +").ʄ(n.ȅ(Ѱ)).ʄ(" ").ʄ(ď.ǡ(
  405. "I1")),1.0f);}else n.Ǎ(ƫ.ų().ʄ(Ȥ));if(!Ҋ)n.Ư(Math.Min(100,100*ѱ/Ô));}else{if(!ҋ){n.Ƌ(ƫ.ų().ʄ(Ȥ).ʄ(':'));n.Ʃ(n.ȅ(ѱ),0.51f);n.
  406. ƴ(ƫ.ų().ʄ(" +").ʄ(n.ȅ(Ѱ)).ʄ(" ").ʄ(ď.ǡ("I1")),1.0f);}else{n.Ǎ(ƫ.ų().ʄ(Ȥ));}}}float ҙ=0;bool Ҙ(Ŷ ź){int Ô=(ҍ?ź.ŵ:ź.ƀ);if(Ô
  407. <0)return true;float Ʋ=n.Ǟ(n.ȅ(Ô),n.ƹ);if(Ʋ>ҙ)ҙ=Ʋ;return true;}List<Ŷ>Ѻ;int ѹ=0;int Ѹ=0;bool ѷ(bool ö,bool Ѷ,string Î,
  408. string О){if(!ö){Ѹ=0;ѹ=0;}if(Ѹ==0){if(ѿ){if((Ѻ=ѻ.ż(Î,ö,Ҙ))==null)return false;}else{if((Ѻ=ѻ.ż(Î,ö))==null)return false;}Ѹ++;ö=
  409. false;}if(Ѻ.Count>0){if(!Ѷ&&!ö){if(!n.Ƹ)n.Ǎ();n.Ƣ(ƫ.ų().ʄ("<< ").ʄ(О).ʄ(" ").ʄ(ď.ǡ("I2")).ʄ(" >>"));}for(;ѹ<Ѻ.Count;ѹ++){if(!
  410. ƒ.Ȝ(30))return false;double ѱ=Ѻ[ѹ].Ɖ;if(ҍ&&ѱ>=Ѻ[ѹ].ŵ)continue;int Ô=Ѻ[ѹ].ƀ;if(ҍ)Ô=Ѻ[ѹ].ŵ;string Ȥ=n.Dz(Ѻ[ѹ].Ï,Ѻ[ѹ].Î);Ҝ(Ȥ,
  411. ѱ,Ô);}}return true;}List<Ŷ>ѵ;int Ѵ=0;int ѳ=0;bool Ѳ(bool ö){if(!ö){Ѵ=0;ѳ=0;}if(ѳ==0){if((ѵ=ѻ.ż("Ingot",ö))==null)return
  412. false;ѳ++;ö=false;}if(ѵ.Count>0){if(!Ҍ&&!ö){if(!n.Ƹ)n.Ǎ();n.Ƣ(ƫ.ų().ʄ("<< ").ʄ(ď.ǡ("I4")).ʄ(" ").ʄ(ď.ǡ("I2")).ʄ(" >>"));}for(
  413. ;Ѵ<ѵ.Count;Ѵ++){if(!ƒ.Ȝ(40))return false;double ѱ=ѵ[Ѵ].Ɖ;if(ҍ&&ѱ>=ѵ[Ѵ].ŵ)continue;int Ô=ѵ[Ѵ].ƀ;if(ҍ)Ô=ѵ[Ѵ].ŵ;string Ȥ=n.Dz
  414. (ѵ[Ѵ].Ï,ѵ[Ѵ].Î);if(ѵ[Ѵ].Ï!="Scrap"){double Ѱ=ѻ.ſ(ѵ[Ѵ].Ï+" Ore",ѵ[Ѵ].Ï,"Ore").Ɖ;Қ(Ȥ,ѱ,Ѱ,Ô);}else Ҝ(Ȥ,ѱ,Ô);}}return true;}α
  415. ĵ=null;Ɣ ѻ;List<ʾ>ˉ;bool Ѽ,ʕ,ҍ,Ҍ,ҋ,Ҋ;int Ĵ,İ;string ҁ="";float Ҁ=0;bool ѿ=true;void Ѿ(){if(n.ƹ!=ҁ||Ҁ!=n.ɞ){ҡ.Clear();Ҁ=n.
  416. ɞ;}if(n.ƹ!=ҁ){ҝ=n.Ǟ(" / ",n.ƹ);Ҟ=n.Ǹ(' ',n.ƹ);ҁ=n.ƹ;}ĵ.ų();Ѽ=Ƙ.ʢ.EndsWith("x")||Ƙ.ʢ.EndsWith("xs");ʕ=Ƙ.ʢ.EndsWith("s")||Ƙ
  417. .ʢ.EndsWith("sx");ҍ=Ƙ.ʢ.StartsWith("missing");Ҍ=Ƙ.ʢ.Contains("list");Ҋ=Ƙ.ʢ.Contains("nb");ҋ=Ƙ.ʢ.Contains("nn");ѻ.ų();ˉ=Ƙ.
  418. ˉ;if(ˉ.Count==0)ˉ.Add(new ʾ("all"));}bool Ҏ(bool ö){if(!ö)Ĵ=0;for(;Ĵ<ˉ.Count;Ĵ++){ʾ IJ=ˉ[Ĵ];IJ.ˁ();string Î=IJ.ʼ;if(!ö)İ=0;
  419. else ö=false;for(;İ<IJ.ʻ.Count;İ++){if(!ƒ.Ȝ(30))return false;string[]Ć=IJ.ʻ[İ].Split(':');double Ȃ;if(string.Compare(Ć[0],
  420. "all",true)==0)Ć[0]="";int ŵ=1;int ƀ=-1;if(Ć.Length>1){if(Double.TryParse(Ć[1],out Ȃ)){if(ҍ)ŵ=(int)Math.Ceiling(Ȃ);else ƀ=(
  421. int)Math.Ceiling(Ȃ);}}string Ɵ=Ć[0];if(!string.IsNullOrEmpty(Î))Ɵ+=' '+Î;ѻ.Ơ(Ɵ,IJ.ʽ=="-",ŵ,ƀ);}}return true;}int Й=0;int ρ=0
  422. ;int ѽ=0;List<MyInventoryItem>ƃ=new List<MyInventoryItem>();bool Ң(bool ö){α ϱ=ĵ;if(!ö)Й=0;for(;Й<ϱ.ή.Count;Й++){if(!ö)ρ=
  423. 0;for(;ρ<ϱ.ή[Й].InventoryCount;ρ++){IMyInventory υ=ϱ.ή[Й].GetInventory(ρ);if(!ö){ѽ=0;ƃ.Clear();υ.GetItems(ƃ);}else ö=
  424. false;for(;ѽ<ƃ.Count;ѽ++){if(!ƒ.Ȝ(40))return false;MyInventoryItem À=ƃ[ѽ];string Ñ=n.ǵ(À);string Ï,Î;n.dz(Ñ,out Ï,out Î);if(
  425. string.Compare(Î,"ore",true)==0){if(ѻ.Ɲ(Ï+" ingot",Ï,"Ingot")&&ѻ.Ɲ(Ñ,Ï,Î))continue;}else{if(ѻ.Ɲ(Ñ,Ï,Î))continue;}n.dz(Ñ,out Ï,
  426. out Î);Ŷ ŷ=ѻ.ſ(Ñ,Ï,Î);ŷ.Ɖ+=(double)À.Amount;}}}return true;}int ì=0;public override bool ƕ(bool ö){if(!ö){Ѿ();ì=0;}for(;ì<=
  427. 10;ì++){switch(ì){case 0:if(!ĵ.κ(Ƙ.ʹ,ö))return false;break;case 1:if(!Ҏ(ö))return false;if(Ѽ)ì++;break;case 2:if(!ѻ.Ÿ(ö))
  428. return false;break;case 3:if(!Ң(ö))return false;break;case 4:if(!ѷ(ö,Ҍ,"Ore",ď.ǡ("I3")))return false;break;case 5:if(ʕ){if(!ѷ(
  429. ö,Ҍ,"Ingot",ď.ǡ("I4")))return false;}else{if(!Ѳ(ö))return false;}break;case 6:if(!ѷ(ö,Ҍ,"Component",ď.ǡ("I5")))return
  430. false;break;case 7:if(!ѷ(ö,Ҍ,"OxygenContainerObject",ď.ǡ("I6")))return false;break;case 8:if(!ѷ(ö,true,"GasContainerObject",
  431. ""))return false;break;case 9:if(!ѷ(ö,Ҍ,"AmmoMagazine",ď.ǡ("I7")))return false;break;case 10:if(!ѷ(ö,Ҍ,"PhysicalGunObject"
  432. ,ď.ǡ("I8")))return false;break;}ö=false;}ѿ=false;return true;}}class һ:ƙ{public һ(){Ɍ=2;ɐ="CmdAmount";}α ĵ;public
  433. override void Ʉ(){ĵ=new α(ƒ,n.Ő);}bool Һ;bool Ҹ=false;int ı=0;int Ĵ=0;int İ=0;public override bool ƕ(bool ö){if(!ö){Һ=!Ƙ.ʢ.
  434. EndsWith("x");Ҹ=Ƙ.ʢ.EndsWith("bar");if(Ҹ)Һ=true;if(Ƙ.ˉ.Count==0)Ƙ.ˉ.Add(new ʾ(
  435. "reactor,gatlingturret,missileturret,interiorturret,gatlinggun,launcherreload,launcher,oxygenerator"));Ĵ=0;}for(;Ĵ<Ƙ.ˉ.Count;Ĵ++){ʾ IJ=Ƙ.ˉ[Ĵ];if(!ö){IJ.ˁ();ı=0;İ=0;}for(;İ<IJ.ʻ.Count;İ++){if(ı==0){if(!ö){if(IJ.ʻ[İ]=="")
  436. continue;ĵ.ų();}string ľ=IJ.ʻ[İ];if(!ĵ.ϴ(ľ,Ƙ.ʹ,ö))return false;ı++;ö=false;}if(!ҿ(ö))return false;ö=false;ı=0;}}return true;}int
  437. ҷ=0;int ī=0;double ŷ=0;double ҹ=0;double Ҽ=0;int ѽ=0;IMyTerminalBlock Ӄ;IMyInventory Ӂ;List<MyInventoryItem>ƃ=new List<
  438. MyInventoryItem>();string Ӏ="";bool ҿ(bool ö){if(!ö){ҷ=0;ī=0;}for(;ҷ<ĵ.ϳ();ҷ++){if(ī==0){if(!ƒ.Ȝ(50))return false;Ӄ=ĵ.ή[ҷ];Ӂ=Ӄ.
  439. GetInventory(0);if(Ӂ==null)continue;ī++;ö=false;}if(!ö){ƃ.Clear();Ӂ.GetItems(ƃ);Ӏ=(ƃ.Count>0?ƃ[0].Type.ToString():"");ѽ=0;ŷ=0;ҹ=0;Ҽ=
  440. 0;}for(;ѽ<ƃ.Count;ѽ++){if(!ƒ.Ȝ(30))return false;MyInventoryItem À=ƃ[ѽ];if(À.Type.ToString()!=Ӏ)Ҽ+=(double)À.Amount;else ŷ
  441. +=(double)À.Amount;}string Ҿ=ď.ǡ("A1");string Ŵ=Ӄ.CustomName;if(ŷ>0&&(double)Ӂ.CurrentVolume>0){double ҽ=Ҽ*(double)Ӂ.
  442. CurrentVolume/(ŷ+Ҽ);ҹ=Math.Floor(ŷ*((double)Ӂ.MaxVolume-ҽ)/((double)Ӂ.CurrentVolume-ҽ));Ҿ=n.ȅ(ŷ)+" / "+(Ҽ>0?"~":"")+n.ȅ(ҹ);}if(!Ҹ||ҹ
  443. <=0){Ŵ=n.ǜ(Ŵ,n.ɞ*0.8f);n.Ƌ(Ŵ);n.ƴ(Ҿ);}if(Һ&&ҹ>0){double ʑ=100*ŷ/ҹ;n.Ư(ʑ);}ī=0;ö=false;}return true;}}class ӂ:ƙ{α ĵ;public
  444. ӂ(){Ɍ=2;ɐ="CmdMass";}public override void Ʉ(){ĵ=new α(ƒ,n.Ő);}bool ʕ=false;bool ʖ=false;int ì=0;public override bool ƕ(
  445. bool ö){if(!ö){ĵ.ų();ʕ=(Ƙ.ʢ[Ƙ.ʢ.Length-1]=='x');ʖ=(Ƙ.ʢ[Ƙ.ʢ.Length-1]=='p');ì=0;}if(ì==0){if(!ĵ.κ(Ƙ.ʹ,ö))return false;ì++;ö=
  446. false;}double Ç=ĵ.ς(ö);if(Double.IsNaN(Ç))return false;double ʒ=0;int ѥ=Ƙ.ˉ.Count;if(ѥ>0){double.TryParse(Ƙ.ˉ[0].IJ.Trim(),out
  447. ʒ);if(ѥ>1){string Ѥ=Ƙ.ˉ[1].IJ.Trim();char э=' ';if(Ѥ.Length>0)э=Char.ToLower(Ѥ[0]);int ј="kmgtpezy".IndexOf(э);if(ј>=0)ʒ*=
  448. Math.Pow(1000.0,ј);}ʒ*=1000.0;}n.Ƌ(ď.ǡ("M1")+" ");if(ʒ<=0){n.ƴ(n.ȃ(Ç,false));return true;}double ʑ=Ç/ʒ*100;if(!ʕ&&!ʖ){n.ƴ(n.
  449. ȃ(Ç)+" / "+n.ȃ(ʒ));n.Ƶ(ʑ,1.0f,n.ɗ);n.Ǎ(' '+n.Ǽ(ʑ)+"%");}else if(ʖ){n.ƴ(n.Ǽ(ʑ)+"%");n.Ư(ʑ);}else n.ƴ(n.Ǽ(ʑ)+"%");return
  450. true;}}class ҩ:ƙ{ȱ ǁ;α ĵ;public ҩ(){Ɍ=3;ɐ="CmdOxygen";}public override void Ʉ(){ǁ=n.ǁ;ĵ=new α(ƒ,n.Ő);}int ì=0;int ú=0;bool Ɯ
  451. =false;int Ҩ=0;double ȳ=0;double ȴ=0;double Ʈ;public override bool ƕ(bool ö){if(!ö){ĵ.ų();ì=0;ú=0;Ʈ=0;}if(ì==0){if(!ĵ.ϴ(
  452. "airvent",Ƙ.ʹ,ö))return false;Ɯ=(ĵ.ϳ()>0);ì++;ö=false;}if(ì==1){for(;ú<ĵ.ϳ();ú++){if(!ƒ.Ȝ(8))return false;IMyAirVent Ŏ=ĵ.ή[ú]as
  453. IMyAirVent;Ʈ=Math.Max(Ŏ.GetOxygenLevel()*100,0f);n.Ƌ(Ŏ.CustomName);if(Ŏ.CanPressurize)n.ƴ(n.Ǽ(Ʈ)+"%");else n.ƴ(ď.ǡ("O1"));n.Ư(Ʈ);}
  454. ì++;ö=false;}if(ì==2){if(!ö)ĵ.ų();if(!ĵ.ϴ("oxyfarm",Ƙ.ʹ,ö))return false;Ҩ=ĵ.ϳ();ì++;ö=false;}if(ì==3){if(Ҩ>0){if(!ö)ú=0;
  455. double ҧ=0;for(;ú<Ҩ;ú++){if(!ƒ.Ȝ(4))return false;IMyOxygenFarm Ҧ=ĵ.ή[ú]as IMyOxygenFarm;ҧ+=Ҧ.GetOutput()*100;}Ʈ=ҧ/Ҩ;if(Ɯ)n.Ǎ(
  456. "");Ɯ|=(Ҩ>0);n.Ƌ(ď.ǡ("O2"));n.ƴ(n.Ǽ(Ʈ)+"%");n.Ư(Ʈ);}ì++;ö=false;}if(ì==4){if(!ö)ĵ.ų();if(!ĵ.ϴ("oxytank",Ƙ.ʹ,ö))return
  457. false;Ҩ=ĵ.ϳ();if(Ҩ==0){if(!Ɯ)n.Ǎ(ď.ǡ("O3"));return true;}ì++;ö=false;}if(ì==5){if(!ö){ȳ=0;ȴ=0;ú=0;}if(!ǁ.ȶ(ĵ.ή,"oxygen",ref ȴ
  458. ,ref ȳ,ö))return false;if(ȳ==0){if(!Ɯ)n.Ǎ(ď.ǡ("O3"));return true;}Ʈ=ȴ/ȳ*100;if(Ɯ)n.Ǎ("");n.Ƌ(ď.ǡ("O4"));n.ƴ(n.Ǽ(Ʈ)+"%");n
  459. .Ư(Ʈ);ì++;}return true;}}class ҥ:ƙ{public ҥ(){Ɍ=1;ɐ="CmdPosition";}public override bool ƕ(bool ö){bool Ҥ=(Ƙ.ʢ=="posxyz");
  460. bool ͽ=(Ƙ.ʢ=="posgps");IMyTerminalBlock å=j.D.å;if(Ƙ.ʹ!=""&&Ƙ.ʹ!="*"){å=n.ƿ.GetBlockWithName(Ƙ.ʹ);if(å==null){n.Ǎ("Pos: "+ď.
  461. ǡ("P1")+": "+Ƙ.ʹ);return true;}}if(ͽ){Vector3D Ŧ=å.GetPosition();n.Ǎ("GPS:"+ď.ǡ("P2")+":"+Ŧ.GetDim(0).ToString("F2")+":"+
  462. Ŧ.GetDim(1).ToString("F2")+":"+Ŧ.GetDim(2).ToString("F2")+":");return true;}n.Ƌ(ď.ǡ("P2")+": ");if(!Ҥ){n.ƴ(å.GetPosition(
  463. ).ToString("F0"));return true;}n.Ǎ("");n.Ƌ(" X: ");n.ƴ(å.GetPosition().GetDim(0).ToString("F0"));n.Ƌ(" Y: ");n.ƴ(å.
  464. GetPosition().GetDim(1).ToString("F0"));n.Ƌ(" Z: ");n.ƴ(å.GetPosition().GetDim(2).ToString("F0"));return true;}}class ң:ƙ{public ң(
  465. ){Ɍ=3;ɐ="CmdPower";}ȱ ǁ;α Ҫ;α Ҷ;α ҵ;α Ч;α Ҵ;α ĵ;public override void Ʉ(){Ҫ=new α(ƒ,n.Ő);Ҷ=new α(ƒ,n.Ő);ҵ=new α(ƒ,n.Ő);Ч=
  466. new α(ƒ,n.Ő);Ҵ=new α(ƒ,n.Ő);ĵ=new α(ƒ,n.Ő);ǁ=n.ǁ;}string О;bool ҳ;string Х;string Ҳ;int ұ;int ì=0;public override bool ƕ(
  467. bool ö){if(!ö){О=(Ƙ.ʢ.EndsWith("x")?"s":(Ƙ.ʢ.EndsWith("p")?"p":(Ƙ.ʢ.EndsWith("v")?"v":"n")));ҳ=(Ƙ.ʢ.StartsWith(
  468. "powersummary"));Х="a";Ҳ="";if(Ƙ.ʢ.Contains("stored"))Х="s";else if(Ƙ.ʢ.Contains("in"))Х="i";else if(Ƙ.ʢ.Contains("out"))Х="o";ì=0;Ҫ.ų
  469. ();Ҷ.ų();ҵ.ų();Ч.ų();Ҵ.ų();}if(Х=="a"){if(ì==0){if(!Ҫ.ϴ("reactor",Ƙ.ʹ,ö))return false;ö=false;ì++;}if(ì==1){if(!Ҷ.ϴ(
  470. "hydrogenengine",Ƙ.ʹ,ö))return false;ö=false;ì++;}if(ì==2){if(!ҵ.ϴ("solarpanel",Ƙ.ʹ,ö))return false;ö=false;ì++;}if(ì==3){if(!Ҵ.ϴ(
  471. "windturbine",Ƙ.ʹ,ö))return false;ö=false;ì++;}}else if(ì==0)ì=4;if(ì==4){if(!Ч.ϴ("battery",Ƙ.ʹ,ö))return false;ö=false;ì++;}int Ұ=Ҫ.
  472. ϳ();int ү=Ҷ.ϳ();int Ү=ҵ.ϳ();int ҭ=Ч.ϳ();int Ҭ=Ҵ.ϳ();if(ì==5){ұ=0;if(Ұ>0)ұ++;if(ү>0)ұ++;if(Ү>0)ұ++;if(Ҭ>0)ұ++;if(ҭ>0)ұ++;
  473. if(ұ<1){n.Ǎ(ď.ǡ("P6"));return true;}if(Ƙ.ˉ.Count>0){if(Ƙ.ˉ[0].IJ.Length>0)Ҳ=Ƙ.ˉ[0].IJ;}ì++;ö=false;}if(Х!="a"){if(!Ш(Ч,(Ҳ==
  474. ""?ď.ǡ("P7"):Ҳ),Х,О,ö))return false;return true;}string Ц=ď.ǡ("P8");if(!ҳ){if(ì==6){if(Ұ>0)if(!љ(Ҫ,(Ҳ==""?ď.ǡ("P9"):Ҳ),О,ö
  475. ))return false;ì++;ö=false;}if(ì==7){if(ү>0)if(!љ(Ҷ,(Ҳ==""?ď.ǡ("P12"):Ҳ),О,ö))return false;ì++;ö=false;}if(ì==8){if(Ү>0)
  476. if(!љ(ҵ,(Ҳ==""?ď.ǡ("P10"):Ҳ),О,ö))return false;ì++;ö=false;}if(ì==9){if(Ҭ>0)if(!љ(Ҵ,(Ҳ==""?ď.ǡ("P13"):Ҳ),О,ö))return false
  477. ;ì++;ö=false;}if(ì==10){if(ҭ>0)if(!Ш(Ч,(Ҳ==""?ď.ǡ("P7"):Ҳ),Х,О,ö))return false;ì++;ö=false;}}else{Ц=ď.ǡ("P11");ұ=10;if(ì
  478. ==6)ì=11;}if(ұ==1)return true;if(!ö){ĵ.ų();ĵ.ϲ(Ҫ);ĵ.ϲ(Ҷ);ĵ.ϲ(ҵ);ĵ.ϲ(Ҵ);ĵ.ϲ(Ч);}if(!љ(ĵ,Ц,О,ö))return false;return true;}
  479. void М(double ʡ,double ƀ){double К=(ƀ>0?ʡ/ƀ*100:0);switch(О){case"s":n.ƴ(ƫ.ų().ʄ(' ').ʄ(К.ToString("F1")).ʄ("%"));break;case
  480. "v":n.ƴ(ƫ.ų().ʄ(n.ȅ(ʡ)).ʄ("W / ").ʄ(n.ȅ(ƀ)).ʄ("W"));break;case"c":n.ƴ(ƫ.ų().ʄ(n.ȅ(ʡ)).ʄ("W"));break;case"p":n.ƴ(ƫ.ų().ʄ(' '
  481. ).ʄ(К.ToString("F1")).ʄ("%"));n.Ư(К);break;default:n.ƴ(ƫ.ų().ʄ(n.ȅ(ʡ)).ʄ("W / ").ʄ(n.ȅ(ƀ)).ʄ("W"));n.Ƶ(К,1.0f,n.ɗ);n.ƴ(ƫ.
  482. ų().ʄ(' ').ʄ(К.ToString("F1")).ʄ("%"));break;}}double ҫ=0;double Ж=0,ѯ=0;int в=0;bool љ(α а,string Ц,string ʏ,bool ö){if(
  483. !ö){Ж=0;ѯ=0;в=0;}if(в==0){if(!ǁ.ȼ(а.ή,ǁ.ȯ,ref ҫ,ref ҫ,ref Ж,ref ѯ,ö))return false;в++;ö=false;}if(!ƒ.Ȝ(50))return false;
  484. double К=(ѯ>0?Ж/ѯ*100:0);n.Ƌ(Ц+": ");М(Ж*1000000,ѯ*1000000);return true;}double Я=0,Ю=0,Э=0,Ь=0;double Ы=0,Ъ=0;int Щ=0;ʊ ƫ=new
  485. ʊ(100);bool Ш(α Ч,string Ц,string Х,string ʏ,bool ö){if(!ö){Я=Ю=0;Э=Ь=0;Ы=Ъ=0;Щ=0;}if(Щ==0){if(!ǁ.ȫ(Ч.ή,ref Э,ref Ь,ref Я
  486. ,ref Ю,ref Ы,ref Ъ,ö))return false;Э*=1000000;Ь*=1000000;Я*=1000000;Ю*=1000000;Ы*=1000000;Ъ*=1000000;Щ++;ö=false;}double
  487. Ф=(Ъ>0?Ы/Ъ*100:0);double У=(Ю>0?Я/Ю*100:0);double б=(Ь>0?Э/Ь*100:0);bool Т=Х=="a";if(Щ==1){if(!ƒ.Ȝ(50))return false;if(Т)
  488. {if(ʏ!="p"){n.Ƌ(ƫ.ų().ʄ(Ц).ʄ(": "));n.ƴ(ƫ.ų().ʄ("(IN ").ʄ(n.ȅ(Э)).ʄ("W / OUT ").ʄ(n.ȅ(Я)).ʄ("W)"));}else n.Ǎ(ƫ.ų().ʄ(Ц).ʄ
  489. (": "));n.Ƌ(ƫ.ų().ʄ(" ").ʄ(ď.ǡ("P3")).ʄ(": "));}else n.Ƌ(ƫ.ų().ʄ(Ц).ʄ(": "));if(Т||Х=="s")switch(ʏ){case"s":n.ƴ(ƫ.ų().ʄ(
  490. ' ').ʄ(Ф.ToString("F1")).ʄ("%"));break;case"v":n.ƴ(ƫ.ų().ʄ(n.ȅ(Ы)).ʄ("Wh / ").ʄ(n.ȅ(Ъ)).ʄ("Wh"));break;case"p":n.ƴ(ƫ.ų().ʄ(
  491. ' ').ʄ(Ф.ToString("F1")).ʄ("%"));n.Ư(Ф);break;default:n.ƴ(ƫ.ų().ʄ(n.ȅ(Ы)).ʄ("Wh / ").ʄ(n.ȅ(Ъ)).ʄ("Wh"));n.Ƶ(Ф,1.0f,n.ɗ);n.ƴ
  492. (ƫ.ų().ʄ(' ').ʄ(Ф.ToString("F1")).ʄ("%"));break;}if(Х=="s")return true;Щ++;ö=false;}if(Щ==2){if(!ƒ.Ȝ(50))return false;if(
  493. Т)n.Ƌ(ƫ.ų().ʄ(" ").ʄ(ď.ǡ("P4")).ʄ(": "));if(Т||Х=="o")switch(ʏ){case"s":n.ƴ(ƫ.ų().ʄ(' ').ʄ(У.ToString("F1")).ʄ("%"));
  494. break;case"v":n.ƴ(ƫ.ų().ʄ(n.ȅ(Я)).ʄ("W / ").ʄ(n.ȅ(Ю)).ʄ("W"));break;case"p":n.ƴ(ƫ.ų().ʄ(' ').ʄ(У.ToString("F1")).ʄ("%"));n.Ư(
  495. У);break;default:n.ƴ(ƫ.ų().ʄ(n.ȅ(Я)).ʄ("W / ").ʄ(n.ȅ(Ю)).ʄ("W"));n.Ƶ(У,1.0f,n.ɗ);n.ƴ(ƫ.ų().ʄ(' ').ʄ(У.ToString("F1")).ʄ(
  496. "%"));break;}if(Х=="o")return true;Щ++;ö=false;}if(!ƒ.Ȝ(50))return false;if(Т)n.Ƌ(ƫ.ų().ʄ(" ").ʄ(ď.ǡ("P5")).ʄ(": "));if(Т
  497. ||Х=="i")switch(ʏ){case"s":n.ƴ(ƫ.ų().ʄ(' ').ʄ(б.ToString("F1")).ʄ("%"));break;case"v":n.ƴ(ƫ.ų().ʄ(n.ȅ(Э)).ʄ("W / ").ʄ(n.ȅ(
  498. Ь)).ʄ("W"));break;case"p":n.ƴ(ƫ.ų().ʄ(' ').ʄ(б.ToString("F1")).ʄ("%"));n.Ư(б);break;default:n.ƴ(ƫ.ų().ʄ(n.ȅ(Э)).ʄ("W / ")
  499. .ʄ(n.ȅ(Ь)).ʄ("W"));n.Ƶ(б,1.0f,n.ɗ);n.ƴ(ƫ.ų().ʄ(' ').ʄ(б.ToString("F1")).ʄ("%"));break;}return true;}}class г:ƙ{public г()
  500. {Ɍ=7;ɐ="CmdPowerTime";}class ф{public TimeSpan ċ=new TimeSpan(-1);public double Џ=-1;public double у=0;}ф т=new ф();α с;α
  501. р;public override void Ʉ(){с=new α(ƒ,n.Ő);р=new α(ƒ,n.Ő);}int п=0;double о=0;double н=0,х=0;double м=0,л=0,к=0;double й=0
  502. ,и=0;int з=0;private bool ж(string ʹ,out TimeSpan е,out double д,bool ö){MyResourceSourceComponent ȸ;
  503. MyResourceSinkComponent ȗ;double С=ɍ;ф Л=т;е=Л.ċ;д=Л.Џ;if(!ö){с.ų();р.ų();Л.Џ=0;п=0;о=0;н=х=0;м=0;л=к=0;й=и=0;з=0;}if(п==0){if(!с.ϴ("reactor",ʹ
  504. ,ö))return false;ö=false;п++;}if(п==1){for(;з<с.ή.Count;з++){if(!ƒ.Ȝ(6))return false;IMyReactor å=с.ή[з]as IMyReactor;if(
  505. å==null||!å.IsWorking)continue;if(å.Components.TryGet<MyResourceSourceComponent>(out ȸ)){н+=ȸ.CurrentOutputByType(n.ǁ.ȯ);
  506. х+=ȸ.MaxOutputByType(n.ǁ.ȯ);}о+=(double)å.GetInventory(0).CurrentMass;}ö=false;п++;}if(п==2){if(!р.ϴ("battery",ʹ,ö))
  507. return false;ö=false;п++;}if(п==3){if(!ö)з=0;for(;з<р.ή.Count;з++){if(!ƒ.Ȝ(15))return false;IMyBatteryBlock å=р.ή[з]as
  508. IMyBatteryBlock;if(å==null||!å.IsWorking)continue;if(å.Components.TryGet<MyResourceSourceComponent>(out ȸ)){л=ȸ.CurrentOutputByType(n.ǁ
  509. .ȯ);к=ȸ.MaxOutputByType(n.ǁ.ȯ);}if(å.Components.TryGet<MyResourceSinkComponent>(out ȗ)){л-=ȗ.CurrentInputByType(n.ǁ.ȯ);}
  510. double З=(л<0?(å.MaxStoredPower-å.CurrentStoredPower)/(-л/3600):0);if(З>Л.Џ)Л.Џ=З;if(å.ChargeMode==ChargeMode.Recharge)
  511. continue;й+=л;и+=к;м+=å.CurrentStoredPower;}ö=false;п++;}double Ж=н+й;if(Ж<=0)Л.ċ=TimeSpan.FromSeconds(-1);else{double Е=Л.ċ.
  512. TotalSeconds;double Д;double Г=(Л.у-о)/С;if(н<=0)Г=Math.Min(Ж,х)/3600000;double В=0;if(и>0)В=Math.Min(Ж,и)/3600;if(Г<=0&&В<=0)Д=-1;
  513. else if(Г<=0)Д=м/В;else if(В<=0)Д=о/Г;else{double Б=В;double А=(н<=0?Ж/3600:Г*Ж/н);Д=м/Б+о/А;}if(Е<=0||Д<0)Е=Д;else Е=(Е+Д)/
  514. 2;try{Л.ċ=TimeSpan.FromSeconds(Е);}catch{Л.ċ=TimeSpan.FromSeconds(-1);}}Л.у=о;д=Л.Џ;е=Л.ċ;return true;}int ì=0;bool ˏ=
  515. false;bool ʕ=false;bool ʖ=false;double Џ=0;TimeSpan Ȓ;int Ў=0,Ѝ=0,Ќ=0;int ǰ=0;int Ћ=0;public override bool ƕ(bool ö){if(!ö){ˏ
  516. =Ƙ.ʢ.EndsWith("bar");ʕ=(Ƙ.ʢ[Ƙ.ʢ.Length-1]=='x');ʖ=(Ƙ.ʢ[Ƙ.ʢ.Length-1]=='p');ì=0;Ў=Ѝ=Ќ=ǰ=0;Ћ=0;Џ=0;}if(ì==0){if(Ƙ.ˉ.Count>0
  517. ){for(;Ћ<Ƙ.ˉ.Count;Ћ++){if(!ƒ.Ȝ(100))return false;Ƙ.ˉ[Ћ].ˁ();if(Ƙ.ˉ[Ћ].ʻ.Count<=0)continue;string IJ=Ƙ.ˉ[Ћ].ʻ[0];int.
  518. TryParse(IJ,out ǰ);if(Ћ==0)Ў=ǰ;else if(Ћ==1)Ѝ=ǰ;else if(Ћ==2)Ќ=ǰ;}}ì++;ö=false;}if(ì==1){if(!ж(Ƙ.ʹ,out Ȓ,out Џ,ö))return false;ì
  519. ++;ö=false;}if(!ƒ.Ȝ(30))return false;double ċ=0;TimeSpan Р;try{Р=new TimeSpan(Ў,Ѝ,Ќ);}catch{Р=TimeSpan.FromSeconds(-1);}
  520. string ķ;if(Ȓ.TotalSeconds>0||Џ<=0){if(!ˏ)n.Ƌ(ď.ǡ("PT1")+" ");ķ=n.ǁ.ȓ(Ȓ);ċ=Ȓ.TotalSeconds;}else{if(!ˏ)n.Ƌ(ď.ǡ("PT2")+" ");ķ=n.
  521. ǁ.ȓ(TimeSpan.FromSeconds(Џ));if(Р.TotalSeconds>=Џ)ċ=Р.TotalSeconds-Џ;else ċ=0;}if(Р.Ticks<=0){n.ƴ(ķ);return true;}double
  522. ʑ=ċ/Р.TotalSeconds*100;if(ʑ>100)ʑ=100;if(ˏ){n.Ư(ʑ);return true;}if(!ʕ&&!ʖ){n.ƴ(ķ);n.Ƶ(ʑ,1.0f,n.ɗ);n.Ǎ(' '+ʑ.ToString(
  523. "0.0")+"%");}else if(ʖ){n.ƴ(ʑ.ToString("0.0")+"%");n.Ư(ʑ);}else n.ƴ(ʑ.ToString("0.0")+"%");return true;}}class П:ƙ{public П()
  524. {Ɍ=7;ɐ="CmdPowerUsed";}ȱ ǁ;α ĵ;public override void Ʉ(){ĵ=new α(ƒ,n.Ő);ǁ=n.ǁ;}string О;string Н;string ϛ;void М(double ʡ,
  525. double ƀ){double К=(ƀ>0?ʡ/ƀ*100:0);switch(О){case"s":n.ƴ(К.ToString("0.0")+"%",1.0f);break;case"v":n.ƴ(n.ȅ(ʡ)+"W / "+n.ȅ(ƀ)+
  526. "W",1.0f);break;case"c":n.ƴ(n.ȅ(ʡ)+"W",1.0f);break;case"p":n.ƴ(К.ToString("0.0")+"%",1.0f);n.Ư(К);break;default:n.ƴ(n.ȅ(ʡ)+
  527. "W / "+n.ȅ(ƀ)+"W");n.Ƶ(К,1.0f,n.ɗ);n.ƴ(' '+К.ToString("0.0")+"%");break;}}double Ȱ=0,Ȳ=0;int Й=0;int ì=0;ѡ И=new ѡ();public
  528. override bool ƕ(bool ö){if(!ö){О=(Ƙ.ʢ.EndsWith("x")?"s":(Ƙ.ʢ.EndsWith("usedp")||Ƙ.ʢ.EndsWith("topp")?"p":(Ƙ.ʢ.EndsWith("v")?"v":
  529. (Ƙ.ʢ.EndsWith("c")?"c":"n"))));Н=(Ƙ.ʢ.Contains("top")?"top":"");ϛ=(Ƙ.ˉ.Count>0?Ƙ.ˉ[0].IJ:ď.ǡ("PU1"));Ȱ=Ȳ=0;ì=0;Й=0;ĵ.ų();И
  530. .Ã();}if(ì==0){if(!ĵ.κ(Ƙ.ʹ,ö))return false;ö=false;ì++;}MyResourceSinkComponent ȗ;MyResourceSourceComponent ȸ;switch(Н){
  531. case"top":if(ì==1){for(;Й<ĵ.ή.Count;Й++){if(!ƒ.Ȝ(20))return false;IMyTerminalBlock å=ĵ.ή[Й];if(å.Components.TryGet<
  532. MyResourceSinkComponent>(out ȗ)){ListReader<MyDefinitionId>Ȕ=ȗ.AcceptedResources;if(Ȕ.IndexOf(ǁ.ȯ)<0)continue;Ȱ=ȗ.CurrentInputByType(ǁ.ȯ)*
  533. 1000000;}else continue;И.X(Ȱ,å);}ö=false;ì++;}if(И.º()<=0){n.Ǎ("PowerUsedTop: "+ď.ǡ("D2"));return true;}int ļ=10;if(Ƙ.ˉ.Count>0
  534. )if(!int.TryParse(ϛ,out ļ)){ļ=10;}if(ļ>И.º())ļ=И.º();if(ì==2){if(!ö){Й=И.º()-1;И.v();}for(;Й>=И.º()-ļ;Й--){if(!ƒ.Ȝ(30))
  535. return false;IMyTerminalBlock å=И.z(Й);string Ŵ=n.ǜ(å.CustomName,n.ɞ*0.4f);if(å.Components.TryGet<MyResourceSinkComponent>(out
  536. ȗ)){Ȱ=ȗ.CurrentInputByType(ǁ.ȯ)*1000000;Ȳ=ȗ.MaxRequiredInputByType(ǁ.ȯ)*1000000;}n.Ƌ(Ŵ+" ");М(Ȱ,Ȳ);}}break;default:for(;Й
  537. <ĵ.ή.Count;Й++){if(!ƒ.Ȝ(10))return false;double Ѣ;IMyTerminalBlock å=ĵ.ή[Й];if(å.Components.TryGet<
  538. MyResourceSinkComponent>(out ȗ)){ListReader<MyDefinitionId>Ȕ=ȗ.AcceptedResources;if(Ȕ.IndexOf(ǁ.ȯ)<0)continue;Ѣ=ȗ.CurrentInputByType(ǁ.ȯ);Ȳ+=ȗ.
  539. MaxRequiredInputByType(ǁ.ȯ);}else continue;if(å.Components.TryGet<MyResourceSourceComponent>(out ȸ)&&(å as IMyBatteryBlock!=null)){Ѣ-=ȸ.
  540. CurrentOutputByType(ǁ.ȯ);if(Ѣ<=0)continue;}Ȱ+=Ѣ;}n.Ƌ(ϛ);М(Ȱ*1000000,Ȳ*1000000);break;}return true;}public class ѡ{List<KeyValuePair<double,
  541. IMyTerminalBlock>>Ѡ=new List<KeyValuePair<double,IMyTerminalBlock>>();public void X(double џ,IMyTerminalBlock å){Ѡ.Add(new KeyValuePair<
  542. double,IMyTerminalBlock>(џ,å));}public int º(){return Ѡ.Count;}public IMyTerminalBlock z(int w){return Ѡ[w].Value;}public void
  543. Ã(){Ѡ.Clear();}public void v(){Ѡ.Sort((Ё,ѝ)=>(Ё.Key.CompareTo(ѝ.Key)));}}}class ќ:ƙ{α ĵ;public ќ(){Ɍ=1;ɐ="CmdProp";}
  544. public override void Ʉ(){ĵ=new α(ƒ,n.Ő);}int ì=0;int Й=0;bool ћ=false;string њ=null;string ў=null;string ѣ=null;string Ѩ=null;
  545. public override bool ƕ(bool ö){if(!ö){ћ=Ƙ.ʢ.StartsWith("props");њ=ў=ѣ=Ѩ=null;Й=0;ì=0;}if(Ƙ.ˉ.Count<1){n.Ǎ(Ƙ.ʢ+": "+
  546. "Missing property name.");return true;}if(ì==0){if(!ö)ĵ.ų();if(!ĵ.κ(Ƙ.ʹ,ö))return false;Ѯ();ì++;ö=false;}if(ì==1){int ļ=ĵ.ϳ();if(ļ==0){n.Ǎ(Ƙ.ʢ+
  547. ": "+"No blocks found.");return true;}for(;Й<ļ;Й++){if(!ƒ.Ȝ(50))return false;IMyTerminalBlock å=ĵ.ή[Й];if(å.GetProperty(њ)!=
  548. null){if(ў==null){string ϛ=n.ǜ(å.CustomName,n.ɞ*0.7f);n.Ƌ(ϛ);}else n.Ƌ(ў);n.ƴ(ѭ(å,њ,ѣ,Ѩ));if(!ћ)return true;}}}return true;}
  549. void Ѯ(){њ=Ƙ.ˉ[0].IJ;if(Ƙ.ˉ.Count>1){if(!ћ)ў=Ƙ.ˉ[1].IJ;else ѣ=Ƙ.ˉ[1].IJ;if(Ƙ.ˉ.Count>2){if(!ћ)ѣ=Ƙ.ˉ[2].IJ;else Ѩ=Ƙ.ˉ[2].IJ;if(Ƙ.ˉ
  550. .Count>3&&!ћ)Ѩ=Ƙ.ˉ[3].IJ;}}}string ѭ(IMyTerminalBlock å,string Ѭ,string ѫ=null,string Ѫ=null){return(å.GetValue<bool>(Ѭ)?(
  551. ѫ!=null?ѫ:ď.ǡ("W9")):(Ѫ!=null?Ѫ:ď.ǡ("W1")));}}class ѩ:ƙ{public ѩ(){Ɍ=5;ɐ="CmdShipCtrl";}α ĵ;public override void Ʉ(){ĵ=
  552. new α(ƒ,n.Ő);}public override bool ƕ(bool ö){if(!ö)ĵ.ų();if(!ĵ.ϴ("shipctrl",Ƙ.ʹ,ö))return false;if(ĵ.ϳ()<=0){if(Ƙ.ʹ!=""&&Ƙ.
  553. ʹ!="*")n.Ǎ(Ƙ.ʢ+": "+ď.ǡ("SC1")+" ("+Ƙ.ʹ+")");else n.Ǎ(Ƙ.ʢ+": "+ď.ǡ("SC1"));return true;}if(Ƙ.ʢ.StartsWith("damp")){bool Ќ
  554. =(ĵ.ή[0]as IMyShipController).DampenersOverride;n.Ƌ(ď.ǡ("SCD"));n.ƴ(Ќ?"ON":"OFF");}else{bool Ќ=(ĵ.ή[0]as
  555. IMyShipController).IsUnderControl;n.Ƌ(ď.ǡ("SCO"));n.ƴ(Ќ?"YES":"NO");}return true;}}class ѧ:ƙ{public ѧ(){Ɍ=1;ɐ="CmdShipMass";}public
  556. override bool ƕ(bool ö){bool Ѧ=Ƙ.ʢ.EndsWith("base");double ʒ=0;if(Ƙ.ʹ!="")double.TryParse(Ƙ.ʹ.Trim(),out ʒ);int ѥ=Ƙ.ˉ.Count;if(ѥ
  557. >0){string Ѥ=Ƙ.ˉ[0].IJ.Trim();char э=' ';if(Ѥ.Length>0)э=Char.ToLower(Ѥ[0]);int ј="kmgtpezy".IndexOf(э);if(ј>=0)ʒ*=Math.
  558. Pow(1000.0,ј);}double ɸ=(Ѧ?n.ǀ.ʁ:n.ǀ.ɷ);if(!Ѧ)n.Ƌ(ď.ǡ("SM1")+" ");else n.Ƌ(ď.ǡ("SM2")+" ");n.ƴ(n.ȃ(ɸ,true,'k')+" ");if(ʒ>0)
  559. n.Ư(ɸ/ʒ*100);return true;}}class ѓ:ƙ{public ѓ(){Ɍ=0.5;ɐ="CmdSpeed";}public override bool ƕ(bool ö){double ʒ=0;double ю=1;
  560. string э="m/s";if(Ƙ.ʢ.Contains("kmh")){ю=3.6;э="km/h";}else if(Ƙ.ʢ.Contains("mph")){ю=2.23694;э="mph";}if(Ƙ.ʹ!="")double.
  561. TryParse(Ƙ.ʹ.Trim(),out ʒ);n.Ƌ(ď.ǡ("S1")+" ");n.ƴ((n.ǀ.ʀ*ю).ToString("F1")+" "+э+" ");if(ʒ>0)n.Ư(n.ǀ.ʀ/ʒ*100);return true;}}
  562. class ь:ƙ{public ь(){Ɍ=1;ɐ="CmdStopTask";}public override bool ƕ(bool ö){double ы=0;if(Ƙ.ʢ.Contains("best"))ы=n.ǀ.ʀ/n.ǀ.ɼ;
  563. else ы=n.ǀ.ʀ/n.ǀ.ɹ;double ъ=n.ǀ.ʀ/2*ы;if(Ƙ.ʢ.Contains("time")){n.Ƌ(ď.ǡ("ST"));if(double.IsNaN(ы)){n.ƴ("N/A");return true;}
  564. string ķ="";try{TimeSpan ˑ=TimeSpan.FromSeconds(ы);if((int)ˑ.TotalDays>0)ķ=" > 24h";else{if(ˑ.Hours>0)ķ=ˑ.Hours+"h ";if(ˑ.
  565. Minutes>0||ķ!="")ķ+=ˑ.Minutes+"m ";ķ+=ˑ.Seconds+"s";}}catch{ķ="N/A";}n.ƴ(ķ);return true;}n.Ƌ(ď.ǡ("SD"));if(!double.IsNaN(ъ)&&!
  566. double.IsInfinity(ъ))n.ƴ(n.ȅ(ъ)+"m ");else n.ƴ("N/A");return true;}}class щ:ƙ{ȱ ǁ;α ĵ;public щ(){Ɍ=2;ɐ="CmdTanks";}public
  567. override void Ʉ(){ǁ=n.ǁ;ĵ=new α(ƒ,n.Ő);}int ì=0;char О='n';string ш;double ч=0;double ц=0;double Ʈ;bool ˏ=false;public override
  568. bool ƕ(bool ö){List<ʾ>ˉ=Ƙ.ˉ;if(ˉ.Count==0){n.Ǎ(ď.ǡ("T4"));return true;}if(!ö){О=(Ƙ.ʢ.EndsWith("x")?'s':(Ƙ.ʢ.EndsWith("p")?
  569. 'p':(Ƙ.ʢ.EndsWith("v")?'v':'n')));ˏ=Ƙ.ʢ.EndsWith("bar");ì=0;if(ш==null){ш=ˉ[0].IJ.Trim();ш=char.ToUpper(ш[0])+ш.Substring(1)
  570. .ToLower();}ĵ.ų();ч=0;ц=0;}if(ì==0){if(!ĵ.ϴ("oxytank",Ƙ.ʹ,ö))return false;ö=false;ì++;}if(ì==1){if(!ĵ.ϴ("hydrogenengine",
  571. Ƙ.ʹ,ö))return false;ö=false;ì++;}if(ì==2){if(!ǁ.ȶ(ĵ.ή,ш,ref ч,ref ц,ö))return false;ö=false;ì++;}if(ц==0){n.Ǎ(String.
  572. Format(ď.ǡ("T5"),ш));return true;}Ʈ=ч/ц*100;if(ˏ){n.Ư(Ʈ);return true;}n.Ƌ(ш);switch(О){case's':n.ƴ(' '+n.Ǽ(Ʈ)+"%");break;case
  573. 'v':n.ƴ(n.ȅ(ч)+"L / "+n.ȅ(ц)+"L");break;case'p':n.ƴ(' '+n.Ǽ(Ʈ)+"%");n.Ư(Ʈ);break;default:n.ƴ(n.ȅ(ч)+"L / "+n.ȅ(ц)+"L");n.Ƶ(
  574. Ʈ,1.0f,n.ɗ);n.ƴ(' '+Ʈ.ToString("0.0")+"%");break;}return true;}}class ї{ɔ n=null;public string I="Debug";public float і=
  575. 1.0f;public List<ʊ>lj=new List<ʊ>();public int Ŗ=0;public float ѕ=0;public ї(ɔ Û){n=Û;lj.Add(new ʊ());}public void є(string ķ)
  576. {lj[Ŗ].ʄ(ķ);}public void є(ʊ ƪ){lj[Ŗ].ʄ(ƪ);}public void ђ(){lj.Add(new ʊ());Ŗ++;ѕ=0;}public void ђ(string ǎ){lj[Ŗ].ʄ(ǎ);ђ();}
  577. public void ё(List<ʊ>ѐ){if(lj[Ŗ].ʈ==0)lj.RemoveAt(Ŗ);else Ŗ++;lj.AddList(ѐ);Ŗ+=ѐ.Count-1;ђ();}public List<ʊ>ţ(){if(lj[Ŗ].ʈ==0)
  578. return lj.GetRange(0,Ŗ);else return lj;}public void я(string Nj,string O=""){string[]lj=Nj.Split('\n');for(int E=0;E<lj.Length;E++)ђ
  579. (O+lj[E]);}public void Ƭ(){lj.Clear();ђ();Ŗ=0;}public int ű(){return Ŗ+(lj[Ŗ].ʈ>0?1:0);}public string Ť(){return String.Join
  580. ("\n",lj);}public void ţ(List<ʊ>Ţ,int š,int Š){int ş=š+Š;int Ş=ű();if(ş>Ş)ş=Ş;for(int E=š;E<ş;E++)Ţ.Add(lj[E]);}}class ŝ{ɔ
  581. n=null;public float Ŝ=1.0f;public int ś=17;public int Ś=0;int ř=1;int Ř=1;public List<ї>ŗ=new List<ї>();public int Ŗ=0;
  582. public ŝ(ɔ Û){n=Û;}public void ŕ(int ļ){Ř=ļ;}public void ť(){ś=(int)Math.Floor(ɔ.ɨ*Ŝ*Ř/ɔ.ɦ);}public void Ŕ(ї ķ){ŗ.Add(ķ);}
  583. public void ų(){ŗ.Clear();}public int ű(){int ļ=0;foreach(var ķ in ŗ){ļ+=ķ.ű();}return ļ;}ʊ Ű=new ʊ(256);public ʊ Ť(){Ű.ų();
  584. int ļ=ŗ.Count;for(int E=0;E<ļ-1;E++){Ű.ʄ(ŗ[E].Ť());Ű.ʄ("\n");}if(ļ>0)Ű.ʄ(ŗ[ļ-1].Ť());return Ű;}List<ʊ>ů=new List<ʊ>(20);
  585. public ʊ Ů(int ŭ=0){Ű.ų();ů.Clear();if(Ř<=0)return Ű;int Ų=ŗ.Count;int Ŭ=0;int ū=(ś/Ř);int Ū=(ŭ*ū);int Ŧ=Ś+Ū;int ũ=Ŧ+ū;bool Ũ=
  586. false;for(int E=0;E<Ų;E++){ї ķ=ŗ[E];int Ş=ķ.ű();int ŧ=Ŭ;Ŭ+=Ş;if(!Ũ&&Ŭ>Ŧ){int š=Ŧ-ŧ;if(Ŭ>=ũ){ķ.ţ(ů,š,ũ-ŧ-š);break;}Ũ=true;ķ.ţ(
  587. ů,š,Ş);continue;}if(Ũ){if(Ŭ>=ũ){ķ.ţ(ů,0,ũ-ŧ);break;}ķ.ţ(ů,0,Ş);}}int ļ=ů.Count;for(int E=0;E<ļ-1;E++){Ű.ʄ(ů[E]);Ű.ʄ("\n")
  588. ;}if(ļ>0)Ű.ʄ(ů[ļ-1]);return Ű;}public bool œ(int ļ=-1){if(ļ<=0)ļ=n.ɤ;if(Ś-ļ<=0){Ś=0;return true;}Ś-=ļ;return false;}
  589. public bool Ľ(int ļ=-1){if(ļ<=0)ļ=n.ɤ;int Ļ=ű();if(Ś+ļ+ś>=Ļ){Ś=Math.Max(Ļ-ś,0);return true;}Ś+=ļ;return false;}public int ĺ=0;
  590. public void Ĺ(){if(ĺ>0){ĺ--;return;}if(ű()<=ś){Ś=0;ř=1;return;}if(ř>0){if(Ľ()){ř=-1;ĺ=2;}}else{if(œ()){ř=1;ĺ=2;}}}}class ĸ:ƙ{
  591. public ĸ(){Ɍ=1;ɐ="CmdTextLCD";}public override bool ƕ(bool ö){string ķ="";if(Ƙ.ʹ!=""&&Ƙ.ʹ!="*"){IMyTextPanel þ=n.ƿ.
  592. GetBlockWithName(Ƙ.ʹ)as IMyTextPanel;if(þ==null){n.Ǎ("TextLCD: "+ď.ǡ("T1")+Ƙ.ʹ);return true;}ķ=þ.GetText();}else{n.Ǎ("TextLCD:"+ď.ǡ("T2"
  593. ));return true;}if(ķ.Length==0)return true;n.nj(ķ);return true;}}class Ķ:ƙ{public Ķ(){Ɍ=5;ɐ="CmdWorking";}α ĵ;public
  594. override void Ʉ(){ĵ=new α(ƒ,n.Ő);}int ì=0;int Ĵ=0;bool ij;public override bool ƕ(bool ö){if(!ö){ì=0;ij=(Ƙ.ʢ=="workingx");Ĵ=0;}if(Ƙ
  595. .ˉ.Count==0){if(ì==0){if(!ö)ĵ.ų();if(!ĵ.κ(Ƙ.ʹ,ö))return false;ì++;ö=false;}if(!Ń(ĵ,ij,"",ö))return false;return true;}for(
  596. ;Ĵ<Ƙ.ˉ.Count;Ĵ++){ʾ IJ=Ƙ.ˉ[Ĵ];if(!ö)IJ.ˁ();if(!Ŀ(IJ,ö))return false;ö=false;}return true;}int ı=0;int İ=0;string[]į;string ľ
  597. ;string Į;bool Ŀ(ʾ IJ,bool ö){if(!ö){ı=0;İ=0;}for(;İ<IJ.ʻ.Count;İ++){if(ı==0){if(!ö){if(string.IsNullOrEmpty(IJ.ʻ[İ]))
  598. continue;ĵ.ų();į=IJ.ʻ[İ].Split(':');ľ=į[0];Į=(į.Length>1?į[1]:"");}if(!string.IsNullOrEmpty(ľ)){if(!ĵ.ϴ(ľ,Ƙ.ʹ,ö))return false;}
  599. else{if(!ĵ.κ(Ƙ.ʹ,ö))return false;}ı++;ö=false;}if(!Ń(ĵ,ij,Į,ö))return false;ı=0;ö=false;}return true;}string ő(
  600. IMyTerminalBlock å){Ͻ Ő=n.Ő;if(!å.IsWorking)return ď.ǡ("W1");IMyProductionBlock ŏ=å as IMyProductionBlock;if(ŏ!=null)if(ŏ.IsProducing)
  601. return ď.ǡ("W2");else return ď.ǡ("W3");IMyAirVent Ŏ=å as IMyAirVent;if(Ŏ!=null){if(Ŏ.CanPressurize)return(Ŏ.GetOxygenLevel()*
  602. 100).ToString("F1")+"%";else return ď.ǡ("W4");}IMyGasTank ō=å as IMyGasTank;if(ō!=null)return(ō.FilledRatio*100).ToString(
  603. "F1")+"%";IMyBatteryBlock Ō=å as IMyBatteryBlock;if(Ō!=null)return Ő.Ϝ(Ō);IMyJumpDrive ŋ=å as IMyJumpDrive;if(ŋ!=null)return
  604. Ő.ϗ(ŋ).ToString("0.0")+"%";IMyLandingGear Ŋ=å as IMyLandingGear;if(Ŋ!=null){switch((int)Ŋ.LockMode){case 0:return ď.ǡ(
  605. "W8");case 1:return ď.ǡ("W10");case 2:return ď.ǡ("W7");}}IMyDoor Œ=å as IMyDoor;if(Œ!=null){if(Œ.Status==DoorStatus.Open)
  606. return ď.ǡ("W5");return ď.ǡ("W6");}IMyShipConnector ʼn=å as IMyShipConnector;if(ʼn!=null){if(ʼn.Status==MyShipConnectorStatus.
  607. Unconnected)return ď.ǡ("W8");if(ʼn.Status==MyShipConnectorStatus.Connected)return ď.ǡ("W7");else return ď.ǡ("W10");}IMyLaserAntenna
  608. ň=å as IMyLaserAntenna;if(ň!=null)return Ő.ϙ(ň);IMyRadioAntenna Ň=å as IMyRadioAntenna;if(Ň!=null)return n.ȅ(Ň.Radius)+
  609. "m";IMyBeacon ņ=å as IMyBeacon;if(ņ!=null)return n.ȅ(ņ.Radius)+"m";IMyThrust Ņ=å as IMyThrust;if(Ņ!=null&&Ņ.ThrustOverride>
  610. 0)return n.ȅ(Ņ.ThrustOverride)+"N";return ď.ǡ("W9");}int ń=0;bool Ń(α ā,bool ł,string Ł,bool ö){if(!ö)ń=0;for(;ń<ā.ϳ();ń
  611. ++){if(!ƒ.Ȝ(20))return false;IMyTerminalBlock å=ā.ή[ń];string ŀ=(ł?(å.IsWorking?ď.ǡ("W9"):ď.ǡ("W1")):ő(å));if(!string.
  612. IsNullOrEmpty(Ł)&&String.Compare(ŀ,Ł,true)!=0)continue;if(ł)ŀ=ő(å);string Ŵ=å.CustomName;Ŵ=n.ǜ(Ŵ,n.ɞ*0.7f);n.Ƌ(Ŵ);n.ƴ(ŀ);}return true
  613. ;}}class ƙ:ɑ{public ї ķ=null;protected ʣ Ƙ;protected ɔ n;protected ė j;protected ǒ ď;public ƙ(){Ɍ=3600;ɐ="CommandTask";}
  614. public void Ɨ(ė f,ʣ Ɩ){j=f;n=j.n;Ƙ=Ɩ;ď=n.ď;}public virtual bool ƕ(bool ö){n.Ǎ(ď.ǡ("UC")+": '"+Ƙ.ˎ+"'");return true;}public
  615. override bool Ƀ(bool ö){ķ=n.Lj(ķ,j.D);if(!ö)n.Ƭ();return ƕ(ö);}}class Ɣ{Dictionary<string,string>Ɠ=new Dictionary<string,string>(
  616. StringComparer.InvariantCultureIgnoreCase){{"ingot","ingot"},{"ore","ore"},{"component","component"},{"tool","physicalgunobject"},{
  617. "ammo","ammomagazine"},{"oxygen","oxygencontainerobject"},{"gas","gascontainerobject"}};ȑ ƒ;ɔ n;ƅ Ƒ;ƅ Ɛ;ƅ Ə;Ƅ Ǝ;bool ƍ;public
  618. ƅ ƌ;public Ɣ(ȑ ƚ,ɔ Û,int J=20){Ƒ=new ƅ();Ɛ=new ƅ();Ə=new ƅ();ƍ=false;ƌ=new ƅ();ƒ=ƚ;n=Û;Ǝ=n.Ǝ;}public void ų(){Ə.Ã();Ɛ.Ã()
  619. ;Ƒ.Ã();ƍ=false;ƌ.Ã();}public void Ơ(string Ɵ,bool Ɗ=false,int ŵ=1,int ƀ=-1){if(string.IsNullOrEmpty(Ɵ)){ƍ=true;return;}
  620. string[]ƞ=Ɵ.Split(' ');string Î="";Ŷ ź=new Ŷ(Ɗ,ŵ,ƀ);if(ƞ.Length==2){if(!Ɠ.TryGetValue(ƞ[1],out Î))Î=ƞ[1];}string Ï=ƞ[0];if(Ɠ.
  621. TryGetValue(Ï,out ź.Î)){Ɛ.X(ź.Î,ź);return;}n.DZ(ref Ï,ref Î);if(string.IsNullOrEmpty(Î)){ź.Ï=Ï;Ƒ.X(ź.Ï,ź);return;}ź.Ï=Ï;ź.Î=Î;Ə.X(Ï+
  622. ' '+Î,ź);}public Ŷ ơ(string Ñ,string Ï,string Î){Ŷ ź;ź=Ə.µ(Ñ);if(ź!=null)return ź;ź=Ƒ.µ(Ï);if(ź!=null)return ź;ź=Ɛ.µ(Î);if(
  623. ź!=null)return ź;return null;}public bool Ɲ(string Ñ,string Ï,string Î){Ŷ ź;bool Ɯ=false;ź=Ɛ.µ(Î);if(ź!=null){if(ź.Ɗ)
  624. return true;Ɯ=true;}ź=Ƒ.µ(Ï);if(ź!=null){if(ź.Ɗ)return true;Ɯ=true;}ź=Ə.µ(Ñ);if(ź!=null){if(ź.Ɗ)return true;Ɯ=true;}return!(ƍ
  625. ||Ɯ);}public Ŷ ƛ(string Ñ,string Ï,string Î){Ŷ ŷ=new Ŷ();Ŷ ź=ơ(Ñ,Ï,Î);if(ź!=null){ŷ.ŵ=ź.ŵ;ŷ.ƀ=ź.ƀ;}ŷ.Ï=Ï;ŷ.Î=Î;ƌ.X(Ñ,ŷ);
  626. return ŷ;}public Ŷ ſ(string Ñ,string Ï,string Î){Ŷ ŷ=ƌ.µ(Ñ);if(ŷ==null)ŷ=ƛ(Ñ,Ï,Î);return ŷ;}int ž=0;List<Ŷ>Ž;public List<Ŷ>ż(
  627. string Î,bool ö,Func<Ŷ,bool>Ż=null){if(!ö){Ž=new List<Ŷ>();ž=0;}for(;ž<ƌ.º();ž++){if(!ƒ.Ȝ(5))return null;Ŷ ź=ƌ.z(ž);if(Ɲ(ź.Ï+
  628. ' '+ź.Î,ź.Ï,ź.Î))continue;if((string.Compare(ź.Î,Î,true)==0)&&(Ż==null||Ż(ź)))Ž.Add(ź);}return Ž;}int Ź=0;public bool Ÿ(
  629. bool ö){if(!ö){Ź=0;}for(;Ź<Ǝ.A.Count;Ź++){if(!ƒ.Ȝ(10))return false;Í À=Ǝ.ƃ[Ǝ.A[Ź]];if(!À.Ç)continue;string Ñ=À.Ì+' '+À.Ë;if(
  630. Ɲ(Ñ,À.Ì,À.Ë))continue;Ŷ ŷ=ſ(Ñ,À.Ì,À.Ë);if(ŷ.ƀ==-1)ŷ.ƀ=À.Ê;}return true;}}class Ŷ{public int ŵ;public int ƀ;public string
  631. Ï="";public string Î="";public bool Ɗ;public double Ɖ;public Ŷ(bool ƈ=false,int Ƈ=1,int Ɔ=-1){ŵ=Ƈ;Ɗ=ƈ;ƀ=Ɔ;}}class ƅ{
  632. Dictionary<string,Ŷ>Ö=new Dictionary<string,Ŷ>(StringComparer.InvariantCultureIgnoreCase);List<string>A=new List<string>();public
  633. void X(string ª,Ŷ À){if(!Ö.ContainsKey(ª)){A.Add(ª);Ö.Add(ª,À);}}public int º(){return Ö.Count;}public Ŷ µ(string ª){if(Ö.
  634. ContainsKey(ª))return Ö[ª];return null;}public Ŷ z(int w){return Ö[A[w]];}public void Ã(){A.Clear();Ö.Clear();}public void v(){A.
  635. Sort();}}class Ƅ{public Dictionary<string,Í>ƃ=new Dictionary<string,Í>(StringComparer.InvariantCultureIgnoreCase);Dictionary
  636. <string,Í>Ƃ=new Dictionary<string,Í>(StringComparer.InvariantCultureIgnoreCase);public List<string>A=new List<string>();
  637. public Dictionary<string,Í>Ɓ=new Dictionary<string,Í>(StringComparer.InvariantCultureIgnoreCase);public void Ƌ(string Ï,string
  638. Î,int Ô,string Ó,string Ò,bool Ç){if(Î=="Ammo")Î="AmmoMagazine";else if(Î=="Tool")Î="PhysicalGunObject";string Ñ=Ï+' '+Î;
  639. Í À=new Í(Ï,Î,Ô,Ó,Ò,Ç);ƃ.Add(Ñ,À);if(!Ƃ.ContainsKey(Ï))Ƃ.Add(Ï,À);if(Ò!="")Ɓ.Add(Ò,À);A.Add(Ñ);}public Í Ð(string Ï="",
  640. string Î=""){if(ƃ.ContainsKey(Ï+" "+Î))return ƃ[Ï+" "+Î];if(string.IsNullOrEmpty(Î)){Í À=null;Ƃ.TryGetValue(Ï,out À);return À;
  641. }if(string.IsNullOrEmpty(Ï))for(int E=0;E<ƃ.Count;E++){Í À=ƃ[A[E]];if(string.Compare(Î,À.Ë,true)==0)return À;}return null
  642. ;}}class Í{public string Ì;public string Ë;public int Ê;public string É;public string È;public bool Ç;public Í(string Æ,
  643. string Õ,int Å=0,string Ø="",string ë="",bool é=true){Ì=Æ;Ë=Õ;Ê=Å;É=Ø;È=ë;Ç=é;}}class è{ɔ n=null;public C ç=new C();public ŝ æ
  644. ;public IMyTerminalBlock å;public IMyTextSurface ä;public int ã=0;public int â=0;public string á="";public string ê="";
  645. public bool à=true;public IMyTextSurface Þ=>(Ü?ä:å as IMyTextSurface);public int Ý=>(Ü?(n.LJ(å)?0:1):ç.º());public bool Ü=false
  646. ;public è(ɔ Û,string Ú){n=Û;ê=Ú;}public è(ɔ Û,string Ú,IMyTerminalBlock Ù,IMyTextSurface F,int ß){n=Û;ê=Ú;å=Ù;ä=F;ã=ß;Ü=
  647. true;}public bool Ä(){return æ.ű()>æ.ś||æ.Ś!=0;}float r=1.0f;bool U=false;public float S(){if(U)return r;U=true;if(å.
  648. BlockDefinition.SubtypeId.Contains("Corner_LCD")){r=0.15f;if(å.BlockDefinition.SubtypeId.Contains("Flat"))r=0.1765f;if(å.
  649. BlockDefinition.SubtypeId.Contains("Small"))r*=1.8f;}return r;}bool R=false;public void Q(){if(R)return;if(!Ü){ç.v();å=ç.z(0);}int P=å.
  650. CustomName.IndexOf("!MARGIN:");if(P<0||P+8>=å.CustomName.Length){â=1;á=" ";}else{string O=å.CustomName.Substring(P+8);int N=O.
  651. IndexOf(" ");if(N>=0)O=O.Substring(0,N);if(!int.TryParse(O,out â))â=1;á=new String(' ',â);}if(å.CustomName.Contains("!NOSCROLL"
  652. ))à=false;else à=true;R=true;}public void L(ŝ K=null){if(æ==null||å==null)return;if(K==null)K=æ;if(!Ü){IMyTextSurface F=å
  653. as IMyTextSurface;if(F!=null){float J=F.FontSize;string I=F.Font;for(int E=0;E<ç.º();E++){IMyTextSurface D=ç.z(E)as
  654. IMyTextSurface;if(D==null)continue;D.Alignment=VRage.Game.GUI.TextPanel.TextAlignment.LEFT;D.FontSize=J;D.Font=I;string H=K.Ů(E).ɓ();D
  655. .ContentType=VRage.Game.GUI.TextPanel.ContentType.TEXT_AND_IMAGE;D.WriteText(H);}}}else{ä.Alignment=VRage.Game.GUI.
  656. TextPanel.TextAlignment.LEFT;ä.ContentType=VRage.Game.GUI.TextPanel.ContentType.TEXT_AND_IMAGE;ä.WriteText(K.Ů().ɓ());}R=false;}
  657. public void G(){if(å==null)return;if(Ü){ä.WriteText("");return;}IMyTextSurface F=å as IMyTextSurface;if(F==null)return;for(int
  658. E=0;E<ç.º();E++){IMyTextSurface D=ç.z(E)as IMyTextSurface;if(D==null)continue;D.WriteText("");}}}class C{Dictionary<
  659. string,IMyTerminalBlock>B=new Dictionary<string,IMyTerminalBlock>();Dictionary<IMyTerminalBlock,string>V=new Dictionary<
  660. IMyTerminalBlock,string>();List<string>A=new List<string>();public void X(string ª,IMyTerminalBlock À){if(!A.Contains(ª)){A.Add(ª);B.Add
  661. (ª,À);V.Add(À,ª);}}public void Â(string ª){if(A.Contains(ª)){A.Remove(ª);V.Remove(B[ª]);B.Remove(ª);}}public void Á(
  662. IMyTerminalBlock À){if(V.ContainsKey(À)){A.Remove(V[À]);B.Remove(V[À]);V.Remove(À);}}public int º(){return B.Count;}public
  663. IMyTerminalBlock µ(string ª){if(A.Contains(ª))return B[ª];return null;}public IMyTerminalBlock z(int w){return B[A[w]];}public void Ã(){
  664. A.Clear();B.Clear();V.Clear();}public void v(){A.Sort();}}class o:ɑ{public ɔ n;public è k;ė j;public o(ė f){j=f;n=j.n;k=j
  665. .D;Ɍ=0.5;ɐ="PanelDisplay";}double e=0;public void b(){e=0;}int a=0;int Z=0;bool W=true;double Y=double.MaxValue;int ì=0;
  666. public override bool Ƀ(bool ö){ƙ ę;if(!ö&&(j.Ě==false||j.ē==null||j.ē.Count<=0))return true;if(j.Ē.ğ>3)return ɇ(0);if(!ö){Z=0;
  667. W=false;Y=double.MaxValue;ì=0;}if(ì==0){while(Z<j.ē.Count){if(!ƒ.Ȝ(5))return false;if(j.Ĕ.TryGetValue(j.ē[Z],out ę)){if(!
  668. ę.Ɋ)return ɇ(ę.ɏ-ƒ.ȍ+0.001);if(ę.Ɏ>e)W=true;if(ę.ɏ<Y)Y=ę.ɏ;}Z++;}ì++;ö=false;}double Ę=Y-ƒ.ȍ+0.001;if(!W&&!k.Ä())return ɇ
  669. (Ę);n.Ǐ(k.æ,k);if(W){if(!ö){e=ƒ.ȍ;k.æ.ų();a=0;}while(a<j.ē.Count){if(!ƒ.Ȝ(7))return false;if(!j.Ĕ.TryGetValue(j.ē[a],out
  670. ę)){k.æ.ŗ.Add(n.Lj(null,k));n.Ƭ();n.Ǎ("ERR: No cmd task ("+j.ē[a]+")");a++;continue;}k.æ.Ŕ(ę.ķ);a++;}}n.Ǒ(k);j.Ē.ğ++;if(Ɍ<
  671. Ę&&!k.Ä())return ɇ(Ę);return true;}}class ė:ɑ{public ɔ n;public è D;public o Ė=null;string ĕ="N/A";public Dictionary<
  672. string,ƙ>Ĕ=new Dictionary<string,ƙ>();public List<string>ē=null;public ġ Ē;public bool Ě{get{return Ē.û;}}public ė(ġ đ,è Đ){Ɍ=
  673. 5;D=Đ;Ē=đ;n=đ.n;ɐ="PanelProcess";}ǒ ď;public override void Ʉ(){ď=n.ď;}ʣ Ď=null;ƙ č(string Č,bool ö){if(!ö)Ď=new ʣ(ƒ);if(!
  674. Ď.ˁ(Č,ö))return null;ƙ ċ=Ď.ˊ();ċ.Ɨ(this,Ď);ƒ.Ȗ(ċ,0);return ċ;}string Ċ="";void ĉ(){try{Ċ=D.å.ǧ(D.ã,n.ɥ);}catch{Ċ="";
  675. return;}Ċ=Ċ?.Replace("\\\n","\n");}int a=0;int ě=0;List<string>Ĥ=null;HashSet<string>ĭ=new HashSet<string>();int ī=0;bool Ī(
  676. bool ö){if(!ö){char[]ĩ={';','\n'};string Ĩ=Ċ.Replace("\\;","\f");if(Ĩ.StartsWith("@")){int ħ=Ĩ.IndexOf("\n");if(ħ<0){Ĩ="";}
  677. else{Ĩ=Ĩ.Substring(ħ+1);}}Ĥ=new List<string>(Ĩ.Split(ĩ,StringSplitOptions.RemoveEmptyEntries));ĭ.Clear();a=0;ě=0;ī=0;}while(
  678. a<Ĥ.Count){if(!ƒ.Ȝ(500))return false;if(Ĥ[a].StartsWith("//")){Ĥ.RemoveAt(a);continue;}Ĥ[a]=Ĥ[a].Replace('\f',';');if(!Ĕ.
  679. ContainsKey(Ĥ[a])){if(ī!=1)ö=false;ī=1;ƙ ę=č(Ĥ[a],ö);if(ę==null)return false;ö=false;Ĕ.Add(Ĥ[a],ę);ī=0;}if(!ĭ.Contains(Ĥ[a]))ĭ.Add(
  680. Ĥ[a]);a++;}if(ē!=null){ƙ ċ;while(ě<ē.Count){if(!ƒ.Ȝ(7))return false;if(!ĭ.Contains(ē[ě]))if(Ĕ.TryGetValue(ē[ě],out ċ)){ċ.
  681. Ʌ();Ĕ.Remove(ē[ě]);}ě++;}}ē=Ĥ;return true;}public override void ɂ(){if(ē!=null){ƙ ċ;for(int Ħ=0;Ħ<ē.Count;Ħ++){if(Ĕ.
  682. TryGetValue(ē[Ħ],out ċ))ċ.Ʌ();}ē=null;}if(Ė!=null){Ė.Ʌ();Ė=null;}else{}}ŝ Ĭ=null;string ĥ="";bool ģ=false;public override bool Ƀ(
  683. bool ö){if(D.Ý<=0){Ʌ();return true;}if(!ö){D.æ=n.Ǐ(D.æ,D);Ĭ=n.Ǐ(Ĭ,D);ĉ();if(Ċ==null){if(D.Ü){Ē.ó(D.ä,D.å as IMyTextPanel);}
  684. else{Ʌ();}return true;}if(D.å.CustomName!=ĥ){ģ=true;}else{ģ=false;}ĥ=D.å.CustomName;}if(Ċ!=ĕ){if(!Ī(ö))return false;if(Ċ==""
  685. ){ĕ="";if(Ē.û){if(Ĭ.ŗ.Count<=0)Ĭ.ŗ.Add(n.Lj(null,D));else n.Lj(Ĭ.ŗ[0],D);n.Ƭ();n.Ǎ(ď.ǡ("H1"));bool Ģ=D.à;D.à=false;n.Ǒ(D,Ĭ)
  686. ;D.à=Ģ;return true;}return this.ɇ(2);}ģ=true;}ĕ=Ċ;if(Ė!=null&&ģ){ƒ.ȧ(Ė);Ė.b();ƒ.Ȗ(Ė,0);}else if(Ė==null){Ė=new o(this);ƒ.
  687. Ȗ(Ė,0);}return true;}}class ġ:ɑ{const string Ġ="T:!LCD!";public int ğ=0;public ɔ n;public ü ç=new ü();α Ğ;α ĝ;Dictionary<
  688. è,ė>Ĝ=new Dictionary<è,ė>();public Dictionary<IMyTextSurface,è>Ĉ=new Dictionary<IMyTextSurface,è>();public bool û=false;ϖ
  689. Ą=null;public ġ(ɔ Û){Ɍ=5;n=Û;ɐ="ProcessPanels";}public override void Ʉ(){Ğ=new α(ƒ,n.Ő);ĝ=new α(ƒ,n.Ő);Ą=new ϖ(n,this);}
  690. int ù=0;bool ø(bool ö){if(!ö)ù=0;if(ù==0){if(!Ğ.κ(n.ɥ,ö))return false;ù++;ö=false;}if(ù==1){if(n.ɥ=="T:[LCD]"&&Ġ!="")if(!Ğ.
  691. κ(Ġ,ö))return false;ù++;ö=false;}return true;}string õ(IMyTerminalBlock å){int ô=å.CustomName.IndexOf("!LINK:");if(ô>=0&&
  692. å.CustomName.Length>ô+6){return å.CustomName.Substring(ô+6)+' '+å.Position.ToString();}return å.EntityId.ToString();}
  693. public void ó(IMyTextSurface F,IMyTextPanel D){è k;if(F==null)return;if(!Ĉ.TryGetValue(F,out k))return;if(D!=null){k.ç.Á(D);}Ĉ
  694. .Remove(F);if(k.Ý<=0||k.Ü){ė ò;if(Ĝ.TryGetValue(k,out ò)){ç.Á(k.ê);Ĝ.Remove(k);ò.Ʌ();}}}void ñ(IMyTerminalBlock å){
  695. IMyTextSurfaceProvider ð=å as IMyTextSurfaceProvider;IMyTextSurface F=å as IMyTextSurface;if(F!=null){ó(F,å as IMyTextPanel);return;}if(ð==
  696. null)return;for(int E=0;E<ð.SurfaceCount;E++){F=ð.GetSurface(E);ó(F,null);}}string Ú;string ï;bool î;int ú=0;int í=0;public
  697. override bool Ƀ(bool ö){if(!ö){Ğ.ų();ú=0;í=0;}if(!ø(ö))return false;while(ú<Ğ.ϳ()){if(!ƒ.Ȝ(20))return false;IMyTerminalBlock å=(
  698. Ğ.ή[ú]as IMyTerminalBlock);if(å==null||!å.IsWorking){Ğ.ή.RemoveAt(ú);continue;}IMyTextSurfaceProvider ð=å as
  699. IMyTextSurfaceProvider;IMyTextSurface F=å as IMyTextSurface;IMyTextPanel D=å as IMyTextPanel;è k;Ú=õ(å);string[]Ć=Ú.Split(' ');ï=Ć[0];î=Ć.
  700. Length>1;if(D!=null){if(Ĉ.ContainsKey(F)){k=Ĉ[F];if(k.ê==Ú+"@0"||(î&&k.ê==ï)){ú++;continue;}ñ(å);}if(!î){k=new è(n,Ú+"@0",å,F,
  701. 0);ė ò=new ė(this,k);ƒ.Ȗ(ò,0);Ĝ.Add(k,ò);ç.X(k.ê,k);Ĉ.Add(F,k);ú++;continue;}k=ç.µ(ï);if(k==null){k=new è(n,ï);ç.X(ï,k);ė
  702. ò=new ė(this,k);ƒ.Ȗ(ò,0);Ĝ.Add(k,ò);}k.ç.X(Ú,å);Ĉ.Add(F,k);}else{if(ð==null){ú++;continue;}for(int E=0;E<ð.SurfaceCount;E
  703. ++){F=ð.GetSurface(E);if(Ĉ.ContainsKey(F)){k=Ĉ[F];if(k.ê==Ú+'@'+E.ToString()){continue;}ó(F,null);}if(å.ǧ(E,n.ɥ)==null)
  704. continue;k=new è(n,Ú+"@"+E.ToString(),å,F,E);ė ò=new ė(this,k);ƒ.Ȗ(ò,0);Ĝ.Add(k,ò);ç.X(k.ê,k);Ĉ.Add(F,k);}}ú++;}while(í<ĝ.ϳ()){
  705. if(!ƒ.Ȝ(300))return false;IMyTerminalBlock å=ĝ.ή[í];if(å==null)continue;if(!Ğ.ή.Contains(å)){ñ(å);}í++;}ĝ.ų();ĝ.ϲ(Ğ);if(!Ą
  706. .ɋ&&Ą.ϩ())ƒ.Ȗ(Ą,0);return true;}public bool ć(string ą){if(string.Compare(ą,"clear",true)==0){Ą.Ϟ();if(!Ą.ɋ)ƒ.Ȗ(Ą,0);
  707. return true;}if(string.Compare(ą,"boot",true)==0){Ą.ϕ=0;if(!Ą.ɋ)ƒ.Ȗ(Ą,0);return true;}if(ą.ǭ("scroll")){ο ă=new ο(n,this,ą);ƒ.
  708. Ȗ(ă,0);return true;}if(string.Compare(ą,"props",true)==0){Ͻ Ă=n.Ő;List<IMyTerminalBlock>ā=new List<IMyTerminalBlock>();
  709. List<ITerminalAction>Ā=new List<ITerminalAction>();List<ITerminalProperty>ÿ=new List<ITerminalProperty>();IMyTextPanel þ=ƒ.ǂ
  710. .GridTerminalSystem.GetBlockWithName("DEBUG")as IMyTextPanel;if(þ==null){return true;}þ.WriteText("Properties: ");foreach
  711. (var À in Ă.Ѕ){þ.WriteText(À.Key+" =============="+"\n",true);À.Value(ā,null);if(ā.Count<=0){þ.WriteText("No blocks\n",
  712. true);continue;}ā[0].GetProperties(ÿ,(k)=>{return k.Id!="Name"&&k.Id!="OnOff"&&!k.Id.StartsWith("Show");});foreach(var ý in
  713. ÿ){þ.WriteText("P "+ý.Id+" "+ý.TypeName+"\n",true);}ÿ.Clear();ā.Clear();}}return false;}}class ü{Dictionary<string,è>Ö=
  714. new Dictionary<string,è>();List<string>A=new List<string>();public void X(string ª,è À){if(!Ö.ContainsKey(ª)){A.Add(ª);Ö.
  715. Add(ª,À);}}public int º(){return Ö.Count;}public è µ(string ª){if(Ö.ContainsKey(ª))return Ö[ª];return null;}public è z(int
  716. w){return Ö[A[w]];}public void Á(string ª){Ö.Remove(ª);A.Remove(ª);}public void Ã(){A.Clear();Ö.Clear();}public void v(){
  717. A.Sort();}}class ȱ{ȑ ƒ;ɔ n;public MyDefinitionId ȯ=new MyDefinitionId(typeof(VRage.Game.ObjectBuilders.Definitions.
  718. MyObjectBuilder_GasProperties),"Electricity");public MyDefinitionId Ȯ=new MyDefinitionId(typeof(VRage.Game.ObjectBuilders.Definitions.
  719. MyObjectBuilder_GasProperties),"Oxygen");public MyDefinitionId ȭ=new MyDefinitionId(typeof(VRage.Game.ObjectBuilders.Definitions.
  720. MyObjectBuilder_GasProperties),"Hydrogen");public ȱ(ȑ ƚ,ɔ Û){ƒ=ƚ;n=Û;}int Ȭ=0;public bool ȫ(List<IMyTerminalBlock>ā,ref double Ȱ,ref double Ȳ,ref
  721. double Ⱥ,ref double ȹ,ref double ɀ,ref double ȿ,bool ö){if(!ö)Ȭ=0;MyResourceSinkComponent ȗ;MyResourceSourceComponent ȸ;for(;Ȭ
  722. <ā.Count;Ȭ++){if(!ƒ.Ȝ(8))return false;if(ā[Ȭ].Components.TryGet<MyResourceSinkComponent>(out ȗ)){Ȱ+=ȗ.CurrentInputByType(
  723. ȯ);Ȳ+=ȗ.MaxRequiredInputByType(ȯ);}if(ā[Ȭ].Components.TryGet<MyResourceSourceComponent>(out ȸ)){Ⱥ+=ȸ.CurrentOutputByType(
  724. ȯ);ȹ+=ȸ.MaxOutputByType(ȯ);}IMyBatteryBlock Ⱦ=(ā[Ȭ]as IMyBatteryBlock);ɀ+=Ⱦ.CurrentStoredPower;ȿ+=Ⱦ.MaxStoredPower;}
  725. return true;}int Ƚ=0;public bool ȼ(List<IMyTerminalBlock>ā,MyDefinitionId Ȼ,ref double Ȱ,ref double Ȳ,ref double Ⱥ,ref double
  726. ȹ,bool ö){if(!ö)Ƚ=0;MyResourceSinkComponent ȗ;MyResourceSourceComponent ȸ;for(;Ƚ<ā.Count;Ƚ++){if(!ƒ.Ȝ(6))return false;if(
  727. ā[Ƚ].Components.TryGet<MyResourceSinkComponent>(out ȗ)){Ȱ+=ȗ.CurrentInputByType(Ȼ);Ȳ+=ȗ.MaxRequiredInputByType(Ȼ);}if(ā[Ƚ
  728. ].Components.TryGet<MyResourceSourceComponent>(out ȸ)){Ⱥ+=ȸ.CurrentOutputByType(Ȼ);ȹ+=ȸ.MaxOutputByType(Ȼ);}}return true;
  729. }int ȷ=0;public bool ȶ(List<IMyTerminalBlock>ā,string ȵ,ref double ȴ,ref double ȳ,bool ö){if(!ö){ȷ=0;ȳ=0;ȴ=0;}
  730. MyResourceSinkComponent ȗ;for(;ȷ<ā.Count;ȷ++){if(!ƒ.Ȝ(30))return false;IMyGasTank ō=ā[ȷ]as IMyGasTank;if(ō==null)continue;double ȕ=0;if(ō.
  731. Components.TryGet<MyResourceSinkComponent>(out ȗ)){ListReader<MyDefinitionId>Ȕ=ȗ.AcceptedResources;int E=0;for(;E<Ȕ.Count;E++){if(
  732. string.Compare(Ȕ[E].SubtypeId.ToString(),ȵ,true)==0){ȕ=ō.Capacity;ȳ+=ȕ;ȴ+=ȕ*ō.FilledRatio;break;}}}}return true;}public string
  733. ȓ(TimeSpan Ȓ){string ķ="";if(Ȓ.Ticks<=0)return"-";if((int)Ȓ.TotalDays>0)ķ+=(long)Ȓ.TotalDays+" "+n.ď.ǡ("C5")+" ";if(Ȓ.
  734. Hours>0||ķ!="")ķ+=Ȓ.Hours+"h ";if(Ȓ.Minutes>0||ķ!="")ķ+=Ȓ.Minutes+"m ";return ķ+Ȓ.Seconds+"s";}}class ȑ{public const double Ȑ
  735. =0.05;public const int ȏ=1000;public const int Ȏ=10000;public double ȍ{get{return ȋ;}}int Ȍ=ȏ;double ȋ=0;List<ɑ>Ȋ=new
  736. List<ɑ>(100);public MyGridProgram ǂ;bool ȉ=false;int Ȉ=0;public ȑ(MyGridProgram Ƽ,int ƻ=1,bool ȇ=false){ǂ=Ƽ;Ȉ=ƻ;ȉ=ȇ;}public
  737. void Ȗ(ɑ ò,double Ș,bool ȩ=false){ò.ɋ=true;ò.Ɉ(this);if(ȩ){ò.ɏ=ȍ;Ȋ.Insert(0,ò);return;}if(Ș<=0)Ș=0.001;ò.ɏ=ȍ+Ș;for(int E=0;E
  738. <Ȋ.Count;E++){if(Ȋ[E].ɏ>ò.ɏ){Ȋ.Insert(E,ò);return;}if(ò.ɏ-Ȋ[E].ɏ<Ȑ)ò.ɏ=Ȋ[E].ɏ+Ȑ;}Ȋ.Add(ò);}public void ȧ(ɑ ò){if(Ȋ.
  739. Contains(ò)){Ȋ.Remove(ò);ò.ɋ=false;}}public void ȥ(ʊ Ȧ,int ȣ=1){if(Ȉ==ȣ)ǂ.Echo(Ȧ.ɓ());}public void ȥ(string Ȥ,int ȣ=1){if(Ȉ==ȣ)ǂ
  740. .Echo(Ȥ);}const double Ȣ=(16.66666666/16);double Ȩ=0;public void ȡ(){Ȩ+=ǂ.Runtime.TimeSinceLastRun.TotalSeconds*Ȣ;}ʊ ƫ=
  741. new ʊ();public void Ƞ(){double ȟ=ǂ.Runtime.TimeSinceLastRun.TotalSeconds*Ȣ+Ȩ;Ȩ=0;ȋ+=ȟ;Ȍ=(int)Math.Min((ȟ*60)*ȏ/(ȉ?5:1),Ȏ-
  742. 1000);while(Ȋ.Count>=1){ɑ ò=Ȋ[0];if(Ȍ-ǂ.Runtime.CurrentInstructionCount<=0)break;if(ò.ɏ>ȋ){int Ȟ=(int)(60*(ò.ɏ-ȋ));if(Ȟ>=100
  743. ){ǂ.Runtime.UpdateFrequency=UpdateFrequency.Update100;}else{if(Ȟ>=10||ȉ)ǂ.Runtime.UpdateFrequency=UpdateFrequency.
  744. Update10;else ǂ.Runtime.UpdateFrequency=UpdateFrequency.Update1;}break;}Ȋ.Remove(ò);if(!ò.Ɇ())break;}}public int ȝ(){return(Ȏ-ǂ.
  745. Runtime.CurrentInstructionCount);}public bool Ȝ(int ț){return((Ȍ-ǂ.Runtime.CurrentInstructionCount)>=ț);}public void Ț(){ȥ(ƫ.ų(
  746. ).ʄ("Remaining Instr: ").ʄ(ȝ()));}}class ș:ɑ{MyShipVelocities Ȫ;public Vector3D Ɂ{get{return Ȫ.LinearVelocity;}}public
  747. Vector3D ɬ{get{return Ȫ.AngularVelocity;}}double ʂ=0;public double ʀ{get{if(ɱ!=null)return ɱ.GetShipSpeed();else return ʂ;}}
  748. double ɿ=0;public double ɾ{get{return ɿ;}}double ɽ=0;public double ɼ{get{return ɽ;}}double ɻ=0;double ɺ=0;public double ɹ{get{
  749. return ɻ;}}MyShipMass ɸ;public double ɷ{get{return ɸ.TotalMass;}}public double ʁ{get{return ɸ.BaseMass;}}double ɶ=double.NaN;
  750. public double ɴ{get{return ɶ;}}double ɳ=double.NaN;public double ɲ{get{return ɳ;}}IMyShipController ɱ=null;IMySlimBlock ɰ=null
  751. ;public IMyShipController ɯ{get{return ɱ;}}Vector3D ɮ;public ș(ȑ ƚ){ɐ="ShipMgr";ƒ=ƚ;ɮ=ƒ.ǂ.Me.GetPosition();Ɍ=0.5;}List<
  752. IMyTerminalBlock>ɭ=new List<IMyTerminalBlock>();int ɵ=0;public override bool Ƀ(bool ö){if(!ö){ɭ.Clear();ƒ.ǂ.GridTerminalSystem.
  753. GetBlocksOfType<IMyShipController>(ɭ);ɵ=0;if(ɱ!=null&&ɱ.CubeGrid.GetCubeBlock(ɱ.Position)!=ɰ)ɱ=null;}if(ɭ.Count>0){for(;ɵ<ɭ.Count;ɵ++){
  754. if(!ƒ.Ȝ(20))return false;IMyShipController ʆ=ɭ[ɵ]as IMyShipController;if(ʆ.IsMainCockpit||ʆ.IsUnderControl){ɱ=ʆ;ɰ=ʆ.
  755. CubeGrid.GetCubeBlock(ʆ.Position);if(ʆ.IsMainCockpit){ɵ=ɭ.Count;break;}}}if(ɱ==null){ɱ=ɭ[0]as IMyShipController;ɰ=ɱ.CubeGrid.
  756. GetCubeBlock(ɱ.Position);}ɸ=ɱ.CalculateShipMass();if(!ɱ.TryGetPlanetElevation(MyPlanetElevation.Sealevel,out ɶ))ɶ=double.NaN;if(!ɱ.
  757. TryGetPlanetElevation(MyPlanetElevation.Surface,out ɳ))ɳ=double.NaN;Ȫ=ɱ.GetShipVelocities();}double ʋ=ʂ;ʂ=Ɂ.Length();ɿ=(ʂ-ʋ)/ɍ;if(-ɿ>ɽ)ɽ=-ɿ;
  758. if(-ɿ>ɻ){ɻ=-ɿ;ɺ=ƒ.ȍ;}if(ƒ.ȍ-ɺ>5&&-ɿ>0.1)ɻ-=(ɻ+ɿ)*0.3f;return true;}}class ʊ{public StringBuilder ƫ;public ʊ(int ʉ=0){ƫ=new
  759. StringBuilder(ʉ);}public int ʈ{get{return ƫ.Length;}}public ʊ ų(){ƫ.Clear();return this;}public ʊ ʄ(string Ĩ){ƫ.Append(Ĩ);return this
  760. ;}public ʊ ʄ(double ʇ){ƫ.Append(ʇ);return this;}public ʊ ʄ(char ǰ){ƫ.Append(ǰ);return this;}public ʊ ʄ(ʊ ʅ){ƫ.Append(ʅ.ƫ)
  761. ;return this;}public ʊ ʄ(string Ĩ,int Ǿ,int ɒ){ƫ.Append(Ĩ,Ǿ,ɒ);return this;}public ʊ ʄ(char ǰ,int Š){ƫ.Append(ǰ,Š);return
  762. this;}public ʊ ʃ(int Ǿ,int ɒ){ƫ.Remove(Ǿ,ɒ);return this;}public string ɓ(){return ƫ.ToString();}public string ɓ(int Ǿ,int ɒ)
  763. {return ƫ.ToString(Ǿ,ɒ);}public char this[int ª]{get{return ƫ[ª];}}}class ɑ{public string ɐ="MMTask";public double ɏ=0;
  764. public double Ɏ=0;public double ɍ=0;public double Ɍ=-1;public bool ɋ=false;public bool Ɋ=false;double ɉ=0;protected ȑ ƒ;public
  765. void Ɉ(ȑ ƚ){ƒ=ƚ;}protected bool ɇ(double Ș){ɉ=Math.Max(Ș,0.0001);return true;}public bool Ɇ(){if(Ɏ>0){ɍ=ƒ.ȍ-Ɏ;ƒ.ȥ((Ɋ?
  766. "Running":"Resuming")+" task: "+ɐ);Ɋ=Ƀ(!Ɋ);}else{ɍ=0;ƒ.ȥ("Init task: "+ɐ);Ʉ();ƒ.ȥ("Running..");Ɋ=Ƀ(false);if(!Ɋ)Ɏ=0.001;}if(Ɋ){Ɏ=
  767. ƒ.ȍ;if((Ɍ>=0||ɉ>0)&&ɋ)ƒ.Ȗ(this,(ɉ>0?ɉ:Ɍ));else{ɋ=false;Ɏ=0;}}else{if(ɋ)ƒ.Ȗ(this,0,true);}ƒ.ȥ("Task "+(Ɋ?"":"NOT ")+
  768. "finished. "+(ɋ?(ɉ>0?"Postponed by "+ɉ.ToString("F1")+"s":"Scheduled after "+Ɍ.ToString("F1")+"s"):"Stopped."));ɉ=0;return Ɋ;}public
  769. void Ʌ(){ƒ.ȧ(this);ɂ();ɋ=false;Ɋ=false;Ɏ=0;}public virtual void Ʉ(){}public virtual bool Ƀ(bool ö){return true;}public
  770. virtual void ɂ(){}}class ɔ{public const float ɫ=512;public const float ɩ=ɫ/0.7783784f;public const float ɨ=ɫ/0.7783784f;public
  771. const float ɧ=ɩ;public const float ɦ=37;public string ɥ="T:[LCD]";public int ɤ=1;public bool ɣ=true;public List<string>ɢ=null
  772. ;public bool ɡ=true;public int Ȉ=0;public float ɪ=1.0f;public float ɠ=1.0f;public float ɟ{get{return ɧ*ƺ.і;}}public float
  773. ɞ{get{return(float)ɟ-2*ɖ[ƹ]*â;}}string ɝ;string ɜ;float ɛ=-1;Dictionary<string,float>ɚ=new Dictionary<string,float>(2);
  774. Dictionary<string,float>ə=new Dictionary<string,float>(2);Dictionary<string,float>ɘ=new Dictionary<string,float>(2);public float ɗ
  775. {get{return ɘ[ƹ];}}Dictionary<string,float>ɖ=new Dictionary<string,float>(2);Dictionary<string,float>ɕ=new Dictionary<
  776. string,float>(2);Dictionary<string,float>Ȇ=new Dictionary<string,float>(2);int â=0;string á="";Dictionary<string,char>dž=new
  777. Dictionary<string,char>(2);Dictionary<string,char>Dž=new Dictionary<string,char>(2);Dictionary<string,char>DŽ=new Dictionary<string,
  778. char>(2);Dictionary<string,char>ǃ=new Dictionary<string,char>(2);public ȑ ƒ;public MyGridProgram ǂ;public ȱ ǁ;public Ͻ Ő;
  779. public ș ǀ;public Ƅ Ǝ;public ǒ ď;public IMyGridTerminalSystem ƿ{get{return ǂ.GridTerminalSystem;}}public IMyProgrammableBlock
  780. ƾ{get{return ǂ.Me;}}public Action<string>ƽ{get{return ǂ.Echo;}}public ɔ(MyGridProgram Ƽ,int ƻ,ȑ ƚ){ƒ=ƚ;Ȉ=ƻ;ǂ=Ƽ;ď=new ǒ();
  781. ǁ=new ȱ(ƚ,this);Ő=new Ͻ(ƚ,this);Ő.Љ();ǀ=new ș(ƒ);ƒ.Ȗ(ǀ,0);}ї ƺ=null;public string ƹ{get{return ƺ.I;}}public bool Ƹ{get{
  782. return(ƺ.ű()==0);}}public bool LJ(IMyTerminalBlock å){if(å==null||å.WorldMatrix==MatrixD.Identity)return true;return ƿ.
  783. GetBlockWithId(å.EntityId)==null;}public ї Lj(ї ǐ,è k){k.Q();IMyTextSurface F=k.Þ;if(ǐ==null)ǐ=new ї(this);ǐ.I=F.Font;if(!ɖ.ContainsKey
  784. (ǐ.I))ǐ.I=ɝ;ǐ.і=(F.SurfaceSize.X/F.TextureSize.X)*(F.TextureSize.X/F.TextureSize.Y)*ɪ/F.FontSize*(100f-F.TextPadding*2)/
  785. 100;á=k.á;â=k.â;ƺ=ǐ;return ǐ;}public ŝ Ǐ(ŝ æ,è k){k.Q();IMyTextSurface F=k.Þ;if(æ==null)æ=new ŝ(this);æ.ŕ(k.Ý);æ.Ŝ=k.S()*(F
  786. .SurfaceSize.Y/F.TextureSize.Y)*ɠ/F.FontSize*(100f-F.TextPadding*2)/100;æ.ť();á=k.á;â=k.â;return æ;}public void Ǎ(){ƺ.ђ()
  787. ;}public void Ǎ(ʊ ǎ){if(ƺ.ѕ<=0)ƺ.є(á);ƺ.є(ǎ);ƺ.ђ();}public void Ǎ(string ǎ){if(ƺ.ѕ<=0)ƺ.є(á);ƺ.ђ(ǎ);}public void nj(string
  788. Nj){ƺ.я(Nj,á);}public void NJ(List<ʊ>lj){ƺ.ё(lj);}public void Ƌ(ʊ ƪ,bool Ƴ=true){if(ƺ.ѕ<=0)ƺ.є(á);ƺ.є(ƪ);if(Ƴ)ƺ.ѕ+=Ǟ(ƪ,ƺ.I);}
  789. public void Ƌ(string ķ,bool Ƴ=true){if(ƺ.ѕ<=0)ƺ.є(á);ƺ.є(ķ);if(Ƴ)ƺ.ѕ+=Ǟ(ķ,ƺ.I);}public void ƴ(ʊ ƪ,float ƨ=1.0f,float Ƨ=0f){Ʃ(ƪ
  790. ,ƨ,Ƨ);ƺ.ђ();}public void ƴ(string ķ,float ƨ=1.0f,float Ƨ=0f){Ʃ(ķ,ƨ,Ƨ);ƺ.ђ();}ʊ ƫ=new ʊ();public void Ʃ(ʊ ƪ,float ƨ=1.0f,
  791. float Ƨ=0f){float Ʀ=Ǟ(ƪ,ƺ.I);float ƥ=ƨ*ɧ*ƺ.і-ƺ.ѕ-Ƨ;if(â>0)ƥ-=2*ɖ[ƺ.I]*â;if(ƥ<Ʀ){ƺ.є(ƪ);ƺ.ѕ+=Ʀ;return;}ƥ-=Ʀ;int Ƥ=(int)Math.
  792. Floor(ƥ/ɖ[ƺ.I]);float ƣ=Ƥ*ɖ[ƺ.I];ƫ.ų().ʄ(' ',Ƥ).ʄ(ƪ);ƺ.є(ƫ);ƺ.ѕ+=ƣ+Ʀ;}public void Ʃ(string ķ,float ƨ=1.0f,float Ƨ=0f){float Ʀ
  793. =Ǟ(ķ,ƺ.I);float ƥ=ƨ*ɧ*ƺ.і-ƺ.ѕ-Ƨ;if(â>0)ƥ-=2*ɖ[ƺ.I]*â;if(ƥ<Ʀ){ƺ.є(ķ);ƺ.ѕ+=Ʀ;return;}ƥ-=Ʀ;int Ƥ=(int)Math.Floor(ƥ/ɖ[ƺ.I]);
  794. float ƣ=Ƥ*ɖ[ƺ.I];ƫ.ų().ʄ(' ',Ƥ).ʄ(ķ);ƺ.є(ƫ);ƺ.ѕ+=ƣ+Ʀ;}public void Ƣ(ʊ ƪ){Ʒ(ƪ);ƺ.ђ();}public void Ƣ(string ķ){Ʒ(ķ);ƺ.ђ();}
  795. public void Ʒ(ʊ ƪ){float Ʀ=Ǟ(ƪ,ƺ.I);float ƶ=ɧ/2*ƺ.і-ƺ.ѕ;if(ƶ<Ʀ/2){ƺ.є(ƪ);ƺ.ѕ+=Ʀ;return;}ƶ-=Ʀ/2;int Ƥ=(int)Math.Round(ƶ/ɖ[ƺ.I],
  796. MidpointRounding.AwayFromZero);float ƣ=Ƥ*ɖ[ƺ.I];ƫ.ų().ʄ(' ',Ƥ).ʄ(ƪ);ƺ.є(ƫ);ƺ.ѕ+=ƣ+Ʀ;}public void Ʒ(string ķ){float Ʀ=Ǟ(ķ,ƺ.I);float ƶ=ɧ/
  797. 2*ƺ.і-ƺ.ѕ;if(ƶ<Ʀ/2){ƺ.є(ķ);ƺ.ѕ+=Ʀ;return;}ƶ-=Ʀ/2;int Ƥ=(int)Math.Round(ƶ/ɖ[ƺ.I],MidpointRounding.AwayFromZero);float ƣ=Ƥ*
  798. ɖ[ƺ.I];ƫ.ų().ʄ(' ',Ƥ).ʄ(ķ);ƺ.є(ƫ);ƺ.ѕ+=ƣ+Ʀ;}public void Ƶ(double Ʈ,float ƭ=1.0f,float Ƨ=0f,bool Ƴ=true){if(â>0)Ƨ+=2*â*ɖ[ƺ
  799. .I];float Ʋ=ɧ*ƭ*ƺ.і-ƺ.ѕ-Ƨ;if(Double.IsNaN(Ʈ))Ʈ=0;int Ʊ=(int)(Ʋ/ɕ[ƺ.I])-2;if(Ʊ<=0)Ʊ=2;int ư=Math.Min((int)(Ʈ*Ʊ)/100,Ʊ);if(
  800. ư<0)ư=0;if(ƺ.ѕ<=0)ƺ.є(á);ƫ.ų().ʄ(dž[ƺ.I]).ʄ(ǃ[ƺ.I],ư).ʄ(DŽ[ƺ.I],Ʊ-ư).ʄ(Dž[ƺ.I]);ƺ.є(ƫ);if(Ƴ)ƺ.ѕ+=ɕ[ƺ.I]*Ʊ+2*Ȇ[ƺ.I];}public
  801. void Ư(double Ʈ,float ƭ=1.0f,float Ƨ=0f){Ƶ(Ʈ,ƭ,Ƨ,false);ƺ.ђ();}public void Ƭ(){ƺ.Ƭ();}public void Ǒ(è D,ŝ K=null){D.L(K);if(
  802. D.à)D.æ.Ĺ();}public void Ƿ(string Ƕ,string ķ){IMyTextPanel D=ǂ.GridTerminalSystem.GetBlockWithName(Ƕ)as IMyTextPanel;if(D
  803. ==null)return;D.WriteText(ķ+"\n",true);}public string ǵ(MyInventoryItem À){string Ǵ=À.Type.TypeId.ToString();Ǵ=Ǵ.Substring
  804. (Ǵ.LastIndexOf('_')+1);return À.Type.SubtypeId+" "+Ǵ;}public void dz(string Ñ,out string Ï,out string Î){int š=Ñ.
  805. LastIndexOf(' ');if(š>=0){Ï=Ñ.Substring(0,š);Î=Ñ.Substring(š+1);return;}Ï=Ñ;Î="";}public string Dz(string Ñ){string Ï,Î;dz(Ñ,out Ï,
  806. out Î);return Dz(Ï,Î);}public string Dz(string Ï,string Î){Í À=Ǝ.Ð(Ï,Î);if(À!=null){if(À.É.Length>0)return À.É;return À.Ì;}
  807. return System.Text.RegularExpressions.Regex.Replace(Ï,"([a-z])([A-Z])","$1 $2");}public void DZ(ref string Ï,ref string Î){Í À;
  808. if(Ǝ.Ɓ.TryGetValue(Ï,out À)){Ï=À.Ì;Î=À.Ë;return;}À=Ǝ.Ð(Ï,Î);if(À!=null){Ï=À.Ì;if((string.Compare(Î,"Ore",true)==0)||(
  809. string.Compare(Î,"Ingot",true)==0))return;Î=À.Ë;}}public string ȅ(double Ȃ,bool ȁ=true,char Ȅ=' '){if(!ȁ)return Ȃ.ToString(
  810. "#,###,###,###,###,###,###,###,###,###");string Ȁ=" kMGTPEZY";double ǿ=Ȃ;int Ǿ=Ȁ.IndexOf(Ȅ);var ǽ=(Ǿ<0?0:Ǿ);while(ǿ>=1000&&ǽ+1<Ȁ.Length){ǿ/=1000;ǽ++;}ƫ.ų().ʄ(
  811. Math.Round(ǿ,1,MidpointRounding.AwayFromZero));if(ǽ>0)ƫ.ʄ(" ").ʄ(Ȁ[ǽ]);return ƫ.ɓ();}public string ȃ(double Ȃ,bool ȁ=true,
  812. char Ȅ=' '){if(!ȁ)return Ȃ.ToString("#,###,###,###,###,###,###,###,###,###");string Ȁ=" ktkMGTPEZY";double ǿ=Ȃ;int Ǿ=Ȁ.
  813. IndexOf(Ȅ);var ǽ=(Ǿ<0?0:Ǿ);while(ǿ>=1000&&ǽ+1<Ȁ.Length){ǿ/=1000;ǽ++;}ƫ.ų().ʄ(Math.Round(ǿ,1,MidpointRounding.AwayFromZero));if(
  814. ǽ==1)ƫ.ʄ(" kg");else if(ǽ==2)ƫ.ʄ(" t");else if(ǽ>2)ƫ.ʄ(" ").ʄ(Ȁ[ǽ]).ʄ("t");return ƫ.ɓ();}public string Ǽ(double Ʈ){return
  815. (Math.Floor(Ʈ*10)/10).ToString("F1");}Dictionary<char,float>ǻ=new Dictionary<char,float>();void Ǻ(string ǹ,float J){J+=1;
  816. for(int E=0;E<ǹ.Length;E++){if(J>ɚ[ɝ])ɚ[ɝ]=J;ǻ.Add(ǹ[E],J);}}public float Ǹ(char ǰ,string I){float Ʋ;if(I==ɜ||!ǻ.
  817. TryGetValue(ǰ,out Ʋ))return ɚ[I];return Ʋ;}public float Ǟ(ʊ ǟ,string I){if(I==ɜ)return ǟ.ʈ*ɚ[I];float ǝ=0;for(int E=0;E<ǟ.ʈ;E++)ǝ+=
  818. Ǹ(ǟ[E],I);return ǝ;}public float Ǟ(string Ĩ,string I){if(I==ɜ)return Ĩ.Length*ɚ[I];float ǝ=0;for(int E=0;E<Ĩ.Length;E++)ǝ
  819. +=Ǹ(Ĩ[E],I);return ǝ;}public string ǜ(string ķ,float Ǜ){if(Ǜ/ɚ[ƺ.I]>=ķ.Length)return ķ;float ǚ=Ǟ(ķ,ƺ.I);if(ǚ<=Ǜ)return ķ;
  820. float Ǚ=ǚ/ķ.Length;Ǜ-=ə[ƺ.I];int ǘ=(int)Math.Max(Ǜ/Ǚ,1);if(ǘ<ķ.Length/2){ƫ.ų().ʄ(ķ,0,ǘ);ǚ=Ǟ(ƫ,ƺ.I);}else{ƫ.ų().ʄ(ķ);ǘ=ķ.
  821. Length;}while(ǚ>Ǜ&&ǘ>1){ǘ--;ǚ-=Ǹ(ķ[ǘ],ƺ.I);}if(ƫ.ʈ>ǘ)ƫ.ʃ(ǘ,ƫ.ʈ-ǘ);return ƫ.ʄ("..").ɓ();}void Ǘ(string ǖ){ɝ=ǖ;dž[ɝ]=MMStyle.
  822. BAR_START;Dž[ɝ]=MMStyle.BAR_END;DŽ[ɝ]=MMStyle.BAR_EMPTY;ǃ[ɝ]=MMStyle.BAR_FILL;ɚ[ɝ]=0f;}void Ǖ(string ǔ,float Ǔ){ɜ=ǔ;ɛ=Ǔ;ɚ[ɜ]=ɛ+1;ə[
  823. ɜ]=2*(ɛ+1);dž[ɜ]=MMStyle.BAR_MONO_START;Dž[ɜ]=MMStyle.BAR_MONO_END;DŽ[ɜ]=MMStyle.BAR_MONO_EMPTY;ǃ[ɜ]=MMStyle.BAR_MONO_FILL;ɖ
  824. [ɜ]=Ǹ(' ',ɜ);ɕ[ɜ]=Ǹ(DŽ[ɜ],ɜ);Ȇ[ɜ]=Ǹ(dž[ɜ],ɜ);ɘ[ɜ]=Ǟ(" 100.0%",ɜ);}public void Ǡ(){if(ǻ.Count>0)return;
  825. // Monospace font name, width of single character
  826. // Change this if you want to use different (modded) monospace font
  827. Ǖ("Monospace", 24f);
  828.  
  829. // Classic/Debug font name (uses widths of characters below)
  830. // Change this if you want to use different font name (non-monospace)
  831. Ǘ("Debug");
  832. // Font characters width (font "aw" values here)
  833. Ǻ("3FKTabdeghknopqsuy£µÝàáâãäåèéêëðñòóôõöøùúûüýþÿāăąďđēĕėęěĝğġģĥħĶķńņňʼnōŏőśŝşšŢŤŦũūŭůűųŶŷŸșȚЎЗКЛбдекруцяёђћўџ", 17f);
  834. Ǻ("ABDNOQRSÀÁÂÃÄÅÐÑÒÓÔÕÖØĂĄĎĐŃŅŇŌŎŐŔŖŘŚŜŞŠȘЅЊЖф□", 21f);
  835. Ǻ("#0245689CXZ¤¥ÇßĆĈĊČŹŻŽƒЁЌАБВДИЙПРСТУХЬ€", 19f);
  836. Ǻ("¥$&GHPUVY§ÙÚÛÜÞĀĜĞĠĢĤĦŨŪŬŮŰŲОФЦЪЯжы†‡", 20f);
  837. Ǻ("! !I`ijl ¡¨¯´¸ÌÍÎÏìíîïĨĩĪīĮįİıĵĺļľłˆˇ˘˙˚˛˜˝ІЇії‹›∙", 8f);
  838. Ǻ("?7?Jcz¢¿çćĉċčĴźżžЃЈЧавийнопсъьѓѕќ", 16f);
  839. Ǻ("():《》,。、;【】(),.1:;[]ft{}·ţťŧț", 9f);
  840. Ǻ("+<=>E^~¬±¶ÈÉÊË×÷ĒĔĖĘĚЄЏЕНЭ−", 18f);
  841. Ǻ("L_vx«»ĹĻĽĿŁГгзлхчҐ–•", 15f);
  842. Ǻ("\"-rª­ºŀŕŗř", 10f);
  843. Ǻ("WÆŒŴ—…‰", 31f);
  844. Ǻ("'|¦ˉ‘’‚", 6f);
  845. Ǻ("@©®мшњ", 25f);
  846. Ǻ("mw¼ŵЮщ", 27f);
  847. Ǻ("/ijтэє", 14f);
  848. Ǻ("\\°“”„", 12f);
  849. Ǻ("*²³¹", 11f);
  850. Ǻ("¾æœЉ", 28f);
  851. Ǻ("%IJЫ", 24f);
  852. Ǻ("MМШ", 26f);
  853. Ǻ("½Щ", 29f);
  854. Ǻ("ю", 23f);
  855. Ǻ("ј", 7f);
  856. Ǻ("љ", 22f);
  857. Ǻ("ґ", 13f);
  858. Ǻ("™", 30f);
  859. // End of font characters width
  860. ɖ[ɝ]=Ǹ(' ',ɝ);ɕ[ɝ]=Ǹ(DŽ[ɝ],ɝ);Ȇ[ɝ]=Ǹ(dž[ɝ],ɝ);ɘ[ɝ]=Ǟ(" 100.0%",ɝ);ə[ɝ]=Ǹ('.',ɝ)*2;}}class ǒ{public string ǡ(string
  861. ǯ){return TT[ǯ];}
  862. readonly Dictionary<string, string> TT = new Dictionary<string, string>
  863. {
  864. // TRANSLATION STRINGS
  865. // msg id, text
  866. { "AC1", "Acceleration:" },
  867. // amount
  868. { "A1", "EMPTY" },
  869. { "ALT1", "Altitude:"},
  870. { "ALT2", "Ground:"},
  871. { "B1", "Booting up..." },
  872. { "C1", "count:" },
  873. { "C2", "Cargo Used:" },
  874. { "C3", "Invalid countdown format, use:" },
  875. { "C4", "EXPIRED" },
  876. { "C5", "days" },
  877. // customdata
  878. { "CD1", "Block not found: " },
  879. { "CD2", "Missing block name" },
  880. { "D1", "You need to enter name." },
  881. { "D2", "No blocks found." },
  882. { "D3", "No damaged blocks found." },
  883. { "DO1", "No connectors found." }, // NEW
  884. { "DTU", "Invalid GPS format" },
  885. { "GA", "Artif."}, // (not more than 5 characters)
  886. { "GN", "Natur."}, // (not more than 5 characters)
  887. { "GT", "Total"}, // (not more than 5 characters)
  888. { "G1", "Total Gravity:"},
  889. { "G2", "Natur. Gravity:"},
  890. { "G3", "Artif. Gravity:"},
  891. { "GNC", "No cockpit!"},
  892. { "H1", "Write commands to Custom Data of this panel." },
  893. // inventory
  894. { "I1", "ore" },
  895. { "I2", "summary" },
  896. { "I3", "Ores" },
  897. { "I4", "Ingots" },
  898. { "I5", "Components" },
  899. { "I6", "Gas" },
  900. { "I7", "Ammo" },
  901. { "I8", "Tools" },
  902. { "M1", "Cargo Mass:" },
  903. // oxygen
  904. { "O1", "Leaking" },
  905. { "O2", "Oxygen Farms" },
  906. { "O3", "No oxygen blocks found." },
  907. { "O4", "Oxygen Tanks" },
  908. // position
  909. { "P1", "Block not found" },
  910. { "P2", "Location" },
  911. // power
  912. { "P3", "Stored" },
  913. { "P4", "Output" },
  914. { "P5", "Input" },
  915. { "P6", "No power source found!" },
  916. { "P7", "Batteries" },
  917. { "P8", "Total Output" },
  918. { "P9", "Reactors" },
  919. { "P10", "Solars" },
  920. { "P11", "Power" },
  921. { "P12", "Engines" }, // NEW!
  922. { "P13", "Turbines" }, // NEW!
  923. { "PT1", "Power Time:" },
  924. { "PT2", "Charge Time:" },
  925. { "PU1", "Power Used:" },
  926. { "S1", "Speed:" },
  927. { "SM1", "Ship Mass:" },
  928. { "SM2", "Ship Base Mass:" },
  929. { "SD", "Stop Distance:" },
  930. { "ST", "Stop Time:" },
  931. // text
  932. { "T1", "Source LCD not found: " },
  933. { "T2", "Missing source LCD name" },
  934. // tanks
  935. { "T4", "Missing tank type. eg: 'Tanks * Hydrogen'" },
  936. { "T5", "No {0} tanks found." }, // {0} is tank type
  937. { "UC", "Unknown command" },
  938. // occupied & dampeners
  939. { "SC1", "Cannot find control block." },
  940. { "SCD", "Dampeners: " },
  941. { "SCO", "Occupied: " },
  942. // working
  943. { "W1", "OFF" },
  944. { "W2", "WORK" },
  945. { "W3", "IDLE" },
  946. { "W4", "LEAK" },
  947. { "W5", "OPEN" },
  948. { "W6", "CLOSED" },
  949. { "W7", "LOCK" },
  950. { "W8", "UNLOCK" },
  951. { "W9", "ON" },
  952. { "W10", "READY" }
  953. };
  954. }
  955. }static class Ǯ{public static bool ǭ(this string Ĩ,string ǫ){return Ĩ.StartsWith(ǫ,StringComparison.
  956. InvariantCultureIgnoreCase);}public static bool Ǭ(this string Ĩ,string ǫ){if(Ĩ==null)return false;return Ĩ.IndexOf(ǫ,StringComparison.
  957. InvariantCultureIgnoreCase)>=0;}public static bool Ǫ(this string Ĩ,string ǫ){return Ĩ.EndsWith(ǫ,StringComparison.InvariantCultureIgnoreCase);}}
  958. static class ǩ{public static string Ǩ(this IMyTerminalBlock å){int Ŧ=å.CustomData.IndexOf("\n---\n");if(Ŧ<0){if(å.CustomData.
  959. StartsWith("---\n"))return å.CustomData.Substring(4);return å.CustomData;}return å.CustomData.Substring(Ŧ+5);}public static string
  960. ǧ(this IMyTerminalBlock å,int š,string Ǧ){string ǥ=å.Ǩ();string Ǥ="@"+š.ToString()+" AutoLCD";string ǣ='\n'+Ǥ;int Ŧ=0;if(
  961. !ǥ.StartsWith(Ǥ,StringComparison.InvariantCultureIgnoreCase)){Ŧ=ǥ.IndexOf(ǣ,StringComparison.InvariantCultureIgnoreCase);
  962. }if(Ŧ<0){if(š==0){if(ǥ.Length==0)return"";if(ǥ[0]=='@')return null;Ŧ=ǥ.IndexOf("\n@");if(Ŧ<0)return ǥ;return ǥ.Substring(
  963. 0,Ŧ);}else return null;}int Ǣ=ǥ.IndexOf("\n@",Ŧ+1);if(Ǣ<0){if(Ŧ==0)return ǥ;return ǥ.Substring(Ŧ+1);}if(Ŧ==0)return ǥ.
  964. Substring(0,Ǣ);return ǥ.Substring(Ŧ+1,Ǣ-Ŧ);}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement