Quantcast
Channel: Forum - Space-Engineers.de
Viewing all articles
Browse latest Browse all 555

GridTerminalDingsbums.GetSonstnochwas...

$
0
0
... oder wie erstelle ich mir eine Script-Textwüste? ^^

Tatsächlich eine geschlagene Woche für dieses Script investiert und endlich habe ich fertig.

space-engineers.de/index.php/A…089f98783eed642b922fd53d6space-engineers.de/index.php/A…089f98783eed642b922fd53d6

Solche Power-Status-Anzeige-Scripts gibt es bereits zu genüge,
mir war es aber ein Bedürfnis, mich selbst auch mal daran zu versuchen.
An einigen Stellen habe ich die nötigen Info's natürlich aus dem Netz geholt,
aber einfach nur abkupfern wollte ich auch wieder nicht.

Am Ende will ich schon kapiert haben, was so beim ausführen des Codes passiert... :rolleyes:

Naja egal...

Durch *ähem* "organisches Wachstum" und durch Vermeidung jeglicher Vereinfachung
wie etwa die Verwendung von Unterprogrammen etc. (wozu gibts denn Copy 'n Paste ^^)
ist nun dass hier entstanden:

C#-Quellcode

  1. void Main () // SimpleScript (Power Status Panel)
  2. // Space Engineers 01-126-007
  3. {
  4. var INFOPANEL = (IMyTextPanel)
  5. GridTerminalSystem.GetBlockWithName ("LCD Panel (Power Status)"); // Bezeichnung des LCD-Panels
  6. double SOLARMAX = 0; // "Max Output" und "Current Output" Variablen
  7. double SOLARUSE = 0;
  8. double BATTERYMAX = 0;
  9. double BATTERYUSE = 0;
  10. double STOREDMAX = 0; // "Max Stored" Variable
  11. double STOREDMIN = 0; // "Stored Power" Variable
  12. double REACTORMAX = 0;
  13. double REACTORUSE = 0;
  14. var SOMAX = "kW"; // Einheiten-Anzeige
  15. var SOUSE = "kW";
  16. var BAMAX = "kW";
  17. var BAUSE = "kW";
  18. var STMAX = "kWh";
  19. var STMIN = "kWh";
  20. var REMAX = "kW";
  21. var REUSE = "kW";
  22. double SOPRO = 0; // Prozentwerte
  23. double BAPRO = 0;
  24. double STPRO = 0;
  25. double REPRO = 0;
  26. var ALLSOLARPANELS = new List <IMyTerminalBlock> ();
  27. GridTerminalSystem.GetBlocksOfType <IMySolarPanel> (ALLSOLARPANELS);
  28. if (ALLSOLARPANELS.Count > 0) // überprüfe alle Solarpanels im Grid
  29. {
  30. for (int Z = 0; Z < ALLSOLARPANELS.Count; Z++)
  31. {
  32. var SOLARPANEL = (IMySolarPanel) ALLSOLARPANELS [Z];
  33. var POWERMAX = Convert.ToDouble // "Max Output" Info's auslesen
  34. (
  35. SOLARPANEL.DetailedInfo.Split ('\n')
  36. [1].Split (' ') [2]
  37. );
  38. var MAX = SOLARPANEL.DetailedInfo.Split ('\n') [1].Split (' ') [3];
  39. if (MAX == "W") // Addition des "Max Output"-Werts in kW
  40. {
  41. SOLARMAX += POWERMAX * 0.001;
  42. }
  43. if (MAX == "kW")
  44. {
  45. SOLARMAX += POWERMAX;
  46. }
  47. if (MAX == "MW")
  48. {
  49. SOLARMAX += POWERMAX * 1000;
  50. }
  51. if (MAX == "GW")
  52. {
  53. SOLARMAX += POWERMAX * 1000000;
  54. }
  55. var POWERUSE = Convert.ToDouble // "Current Output" Info's auslesen
  56. (
  57. SOLARPANEL.DetailedInfo.Split ('\n')
  58. [2].Split (' ') [2]
  59. );
  60. var USE = SOLARPANEL.DetailedInfo.Split ('\n') [2].Split (' ') [3];
  61. if (USE == "W") // Addition des "Current Output"-Werts in kW
  62. {
  63. SOLARUSE += POWERUSE * 0.001;
  64. }
  65. if (USE == "kW")
  66. {
  67. SOLARUSE += POWERUSE;
  68. }
  69. if (USE == "MW")
  70. {
  71. SOLARUSE += POWERUSE * 1000;
  72. }
  73. if (USE == "GW")
  74. {
  75. SOLARUSE += POWERUSE * 1000000;
  76. }
  77. }
  78. if (SOLARMAX != 0) // keine Division durch Null - Prozentwert ermitteln
  79. {
  80. if (SOLARMAX > SOLARUSE) // um zu vermeiden dass während des Sonnenaufgangs
  81. // eine grössere Prozentzahl als 100 % angezeigt wird.
  82. {
  83. SOPRO = Math.Round (SOLARUSE / SOLARMAX * 100, 2);
  84. }
  85. else // ist natürlich etwas getrickst ;-)
  86. {
  87. SOPRO = Math.Round (SOLARMAX / SOLARUSE * 100, 2);
  88. }
  89. }
  90. if (SOLARMAX <= 1) // Einheiten-Anzeige für die aufaddierten Werte anpassen
  91. {
  92. SOLARMAX /= 0.001;
  93. SOMAX = "W";
  94. }
  95. if (SOLARMAX > 1000)
  96. {
  97. SOLARMAX /= 1000;
  98. SOMAX = "MW";
  99. }
  100. if (SOLARMAX > 1000)
  101. {
  102. SOLARMAX /= 1000;
  103. SOMAX = "GW";
  104. }
  105. if (SOLARUSE <= 1)
  106. {
  107. SOLARUSE /= 0.001;
  108. SOUSE = "W";
  109. }
  110. if (SOLARUSE > 1000)
  111. {
  112. SOLARUSE /= 1000;
  113. SOUSE = "MW";
  114. }
  115. if (SOLARUSE > 1000)
  116. {
  117. SOLARUSE /= 1000;
  118. SOUSE = "GW";
  119. }
  120. }
  121. var ALLBATTERIES = new List <IMyTerminalBlock> ();
  122. GridTerminalSystem.GetBlocksOfType <IMyBatteryBlock> (ALLBATTERIES);
  123. if (ALLBATTERIES.Count > 0) // überprüfe alle Batterien im Grid
  124. {
  125. for (int Z = 0; Z < ALLBATTERIES.Count; Z++)
  126. {
  127. var BATTERY = (IMyBatteryBlock) ALLBATTERIES [Z];
  128. var POWERMAX = Convert.ToDouble // "Max Output" Info's auslesen
  129. (
  130. BATTERY.DetailedInfo.Split ('\n')
  131. [1].Split (' ') [2]
  132. );
  133. var MAX = BATTERY.DetailedInfo.Split ('\n') [1].Split (' ') [3];
  134. if (MAX == "W") // Addition des "Max Output"-Werts in kW
  135. {
  136. BATTERYMAX += POWERMAX * 0.001;
  137. }
  138. if (MAX == "kW")
  139. {
  140. BATTERYMAX += POWERMAX;
  141. }
  142. if (MAX == "MW")
  143. {
  144. BATTERYMAX += POWERMAX * 1000;
  145. }
  146. if (MAX == "GW")
  147. {
  148. BATTERYMAX += POWERMAX * 1000000;
  149. }
  150. var POWERUSE = Convert.ToDouble // "Current Output" Info's auslesen
  151. (
  152. BATTERY.DetailedInfo.Split ('\n')
  153. [5].Split (' ') [2]
  154. );
  155. var USE = BATTERY.DetailedInfo.Split ('\n') [5].Split (' ') [3];
  156. if (USE == "W") // Addition des "Current Output"-Werts in kW
  157. {
  158. BATTERYUSE += POWERUSE * 0.001;
  159. }
  160. if (USE == "kW")
  161. {
  162. BATTERYUSE += POWERUSE;
  163. }
  164. if (USE == "MW")
  165. {
  166. BATTERYUSE += POWERUSE * 1000;
  167. }
  168. if (USE == "GW")
  169. {
  170. BATTERYUSE += POWERUSE * 1000000;
  171. }
  172. var STORAGEMAX = Convert.ToDouble // "Max Stored" Info's auslesen
  173. (
  174. BATTERY.DetailedInfo.Split ('\n')
  175. [3].Split (' ') [3]
  176. );
  177. var SMAX = BATTERY.DetailedInfo.Split ('\n') [3].Split (' ') [4];
  178. if (SMAX == "Wh") // Addition des "Max Stored"-Werts in kWh
  179. {
  180. STOREDMAX += STORAGEMAX * 0.001;
  181. }
  182. if (SMAX == "kWh")
  183. {
  184. STOREDMAX += STORAGEMAX;
  185. }
  186. if (SMAX == "MWh")
  187. {
  188. STOREDMAX += STORAGEMAX * 1000;
  189. }
  190. if (SMAX == "GWh")
  191. {
  192. STOREDMAX += STORAGEMAX * 1000000;
  193. }
  194. var STORAGEMIN = Convert.ToDouble // "Stored Power" Info's auslesen
  195. (
  196. BATTERY.DetailedInfo.Split ('\n')
  197. [6].Split (' ') [2]
  198. );
  199. var SMIN = BATTERY.DetailedInfo.Split ('\n') [6].Split (' ') [3];
  200. if (SMIN == "Wh") // Addition des "Stored Power"-Werts in kWh
  201. {
  202. STOREDMIN += STORAGEMIN * 0.001;
  203. }
  204. if (SMIN == "kWh")
  205. {
  206. STOREDMIN += STORAGEMIN;
  207. }
  208. if (SMIN == "MWh")
  209. {
  210. STOREDMIN += STORAGEMIN * 1000;
  211. }
  212. if (SMIN == "GWh")
  213. {
  214. STOREDMIN += STORAGEMIN * 1000000;
  215. }
  216. }
  217. if (BATTERYMAX != 0) // keine Division durch Null - Prozentwert ermitteln
  218. {
  219. BAPRO = Math.Round (BATTERYUSE / BATTERYMAX * 100, 2);
  220. }
  221. if (BATTERYMAX <= 1) // Einheiten-Anzeige für die aufaddierten Werte anpassen
  222. {
  223. BATTERYMAX /= 0.001;
  224. BAMAX = "W";
  225. }
  226. if (BATTERYMAX > 1000)
  227. {
  228. BATTERYMAX /= 1000;
  229. BAMAX = "MW";
  230. }
  231. if (BATTERYMAX > 1000)
  232. {
  233. BATTERYMAX /= 1000;
  234. BAMAX = "GW";
  235. }
  236. if (BATTERYUSE <= 1)
  237. {
  238. BATTERYUSE /= 0.001;
  239. BAUSE = "W";
  240. }
  241. if (BATTERYUSE > 1000)
  242. {
  243. BATTERYUSE /= 1000;
  244. BAUSE = "MW";
  245. }
  246. if (BATTERYUSE > 1000)
  247. {
  248. BATTERYUSE /= 1000;
  249. BAUSE = "GW";
  250. }
  251. if (STOREDMAX != 0) // keine Division durch Null - Prozentwert ermitteln
  252. {
  253. STPRO = Math.Round (STOREDMIN / STOREDMAX * 100, 2);
  254. }
  255. if (STOREDMAX <= 1) // Einheiten-Anzeige für die aufaddierten Werte anpassen
  256. {
  257. STOREDMAX /= 0.001;
  258. STMAX = "Wh";
  259. }
  260. if (STOREDMAX > 1000)
  261. {
  262. STOREDMAX /= 1000;
  263. STMAX = "MWh";
  264. }
  265. if (STOREDMAX > 1000)
  266. {
  267. STOREDMAX /= 1000;
  268. STMAX = "GWh";
  269. }
  270. if (STOREDMIN <= 1)
  271. {
  272. STOREDMIN /= 0.001;
  273. STMIN = "Wh";
  274. }
  275. if (STOREDMIN > 1000)
  276. {
  277. STOREDMIN /= 1000;
  278. STMIN = "MWh";
  279. }
  280. if (STOREDMIN > 1000)
  281. {
  282. STOREDMIN /= 1000;
  283. STMIN = "GWh";
  284. }
  285. }
  286. var ALLREACTORS = new List <IMyTerminalBlock> ();
  287. GridTerminalSystem.GetBlocksOfType <IMyReactor> (ALLREACTORS);
  288. if (ALLREACTORS.Count > 0) // überprüfe alle Reaktoren im Grid
  289. {
  290. for (int Z = 0; Z < ALLREACTORS.Count; Z++)
  291. {
  292. var REACTOR = (IMyReactor) ALLREACTORS [Z];
  293. var POWERMAX = Convert.ToDouble // "Max Output" Info's auslesen
  294. (
  295. REACTOR.DetailedInfo.Split ('\n')
  296. [1].Split (' ') [2]
  297. );
  298. var MAX = REACTOR.DetailedInfo.Split ('\n') [1].Split (' ') [3];
  299. if (MAX == "W") // Addition des "Max Output"-Werts in kW
  300. {
  301. REACTORMAX += POWERMAX * 0.001;
  302. }
  303. if (MAX == "kW")
  304. {
  305. REACTORMAX += POWERMAX;
  306. }
  307. if (MAX == "MW")
  308. {
  309. REACTORMAX += POWERMAX * 1000;
  310. }
  311. if (MAX == "GW")
  312. {
  313. REACTORMAX += POWERMAX * 1000000;
  314. }
  315. var POWERUSE = Convert.ToDouble // "Current Output" Info's auslesen
  316. (
  317. REACTOR.DetailedInfo.Split ('\n')
  318. [2].Split (' ') [2]
  319. );
  320. var USE = REACTOR.DetailedInfo.Split ('\n') [2].Split (' ') [3];
  321. if (USE == "W") // Addition des "Current Output"-Werts in kW
  322. {
  323. REACTORUSE += POWERUSE * 0.001;
  324. }
  325. if (USE == "kW")
  326. {
  327. REACTORUSE += POWERUSE;
  328. }
  329. if (USE == "MW")
  330. {
  331. REACTORUSE += POWERUSE * 1000;
  332. }
  333. if (USE == "GW")
  334. {
  335. REACTORUSE += POWERUSE * 1000000;
  336. }
  337. }
  338. if (REACTORMAX != 0) // keine Division durch Null - Prozentwert ermitteln
  339. {
  340. REPRO = Math.Round (REACTORUSE / REACTORMAX * 100, 2);
  341. }
  342. if (REACTORMAX <= 1) // Einheiten-Anzeige für die aufaddierten Werte anpassen
  343. {
  344. REACTORMAX /= 0.001;
  345. REMAX = "W";
  346. }
  347. if (REACTORMAX > 1000)
  348. {
  349. REACTORMAX /= 1000;
  350. REMAX = "MW";
  351. }
  352. if (REACTORMAX > 1000)
  353. {
  354. REACTORMAX /= 1000;
  355. REMAX = "GW";
  356. }
  357. if (REACTORUSE <= 1)
  358. {
  359. REACTORUSE /= 0.001;
  360. REUSE = "W";
  361. }
  362. if (REACTORUSE > 1000)
  363. {
  364. REACTORUSE /= 1000;
  365. REUSE = "MW";
  366. }
  367. if (REACTORUSE > 1000)
  368. {
  369. REACTORUSE /= 1000;
  370. REUSE = "GW";
  371. }
  372. }
  373. INFOPANEL.SetValue ("FontSize", 1.4f); // ermittelte Info's auf dem LCD-Panel anzeigen
  374. INFOPANEL.WritePublicText
  375. (
  376. "\n" +
  377. " SOLAR: " + SOPRO + " %" + "\n" +
  378. " " + Math.Round (SOLARUSE, 1) + " " + SOUSE + " / " + Math.Round (SOLARMAX, 1) + " " + SOMAX + "\n" +
  379. "\n" +
  380. " BATTERIES: " + BAPRO + " %" + "\n" +
  381. " " + Math.Round (BATTERYUSE, 1) + " " + BAUSE + " / " + Math.Round (BATTERYMAX, 1) + " " + BAMAX + "\n" +
  382. " STORED POWER: " + STPRO + " %" + "\n" +
  383. " " + Math.Round (STOREDMIN, 1) + " " + STMIN + " / " + Math.Round (STOREDMAX, 1) + " " + STMAX + "\n" +
  384. "\n" +
  385. " REACTORS: " + REPRO + " %" + "\n" +
  386. " " + Math.Round (REACTORUSE, 1) + " " + REUSE + " / " + Math.Round (REACTORMAX, 1) + " " + REMAX
  387. );
  388. }
Alles anzeigen

Gehe davon aus, man hätte es DEFINITIV eleganter lösen können... :D

Viewing all articles
Browse latest Browse all 555