-
Notifications
You must be signed in to change notification settings - Fork 0
/
script2.txt
130 lines (124 loc) · 4.93 KB
/
script2.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
const string PANEL_NAME = "LCD Panel";
const string CONTAINER_NAME = "Small Cargo Container";
const int PANEL_LINES = 22;
int lineOffset = 0;
void Main()
{
try {
List<IMyTerminalBlock> work = new List<IMyTerminalBlock>();
Dictionary<String,float> consolidated = new Dictionary<String,float>();
GridTerminalSystem.SearchBlocksOfName(PANEL_NAME, work);
IMyTextPanel panel = null;
for (int i = 0; i < work.Count; i++)
{
if (work[i] is IMyTextPanel) {
panel = (IMyTextPanel)work[i];
break;
}
}
List<IMyTerminalBlock> containerList = new List<IMyTerminalBlock>();
GridTerminalSystem.SearchBlocksOfName(CONTAINER_NAME, containerList);
for (int i = 0; i < containerList.Count; i++)
{
if (containerList[i] is IMyCargoContainer) {
var containerInvOwner = containerList[i] as IMyInventoryOwner;
var containerItems = containerInvOwner.GetInventory(0).GetItems();
for(int j = containerItems.Count - 1; j >= 0; j--)
{
String itemName = decodeItemName(containerItems[j].Content.SubtypeName,
containerItems[j].Content.TypeId.ToString()) + "|" +
containerItems[j].Content.TypeId.ToString();
float amount = (float)containerItems[j].Amount;
if (!consolidated.ContainsKey(itemName)) {
consolidated.Add(itemName, amount);
} else {
consolidated[itemName] += amount;
}
}
}
}
List<String> list = new List<String>();
var enumerator = consolidated.GetEnumerator();
while (enumerator.MoveNext())
{
var pair = enumerator.Current;
String itemKey = pair.Key;
float itemValue = pair.Value;
String txt = itemKey.Split('|')[0] + " - ";
String amt = amountFormatter(itemValue,itemKey.Split('|')[1]);
txt += amt;
list.Add(txt);
}
list.Sort();
list.Insert(0,"------------------------------------------------------");
list.Insert(0,CONTAINER_NAME + " Inventory");
for (int o=0; o < lineOffset; o++) {
String shiftedItem = list[0];
list.RemoveAt(0);
list.Add(shiftedItem);
}
panel.WritePublicText(String.Join("\n",list.ToArray()), false);
panel.ShowTextureOnScreen();
panel.ShowPublicTextOnScreen();
if (list.Count > PANEL_LINES) {
lineOffset++;
if (list.Count - lineOffset < PANEL_LINES) {
lineOffset = 0;
}
}
} catch (Exception ex) {
throw new Exception(ex.StackTrace);
}
}
String amountFormatter(float amt, String typeId) {
if (typeId.EndsWith("_Ore") || typeId.EndsWith("_Ingot")) {
if (amt > 1000.0f) {
return "" + Math.Round((float)amt/1000,2).ToString("###,###,##0.00") + "K";
} else {
return "" + Math.Round((float)amt,2).ToString("###,###,##0.00");
}
}
return "" + Math.Round((float)amt,0).ToString("###,###,##0");
}
String decodeItemName(String name, String typeId)
{
if (name.Equals("Construction")) { return "Construction Component"; }
if (name.Equals("MetalGrid")) { return "Metal Grid"; }
if (name.Equals("InteriorPlate")) { return "Interior Plate"; }
if (name.Equals("SteelPlate")) { return "Steel Plate"; }
if (name.Equals("SmallTube")) { return "Small Steel Tube"; }
if (name.Equals("LargeTube")) { return "Large Steel Tube"; }
if (name.Equals("BulletproofGlass")) { return "Bulletproof Glass"; }
if (name.Equals("Reactor")) { return "Reactor Component"; }
if (name.Equals("Thrust")) { return "Thruster Component"; }
if (name.Equals("GravityGenerator")) { return "GravGen Component"; }
if (name.Equals("Medical")) { return "Medical Component"; }
if (name.Equals("RadioCommunication")) { return "Radio Component"; }
if (name.Equals("Detector")) { return "Detector Component"; }
if (name.Equals("SolarCell")) { return "Solar Cell"; }
if (name.Equals("PowerCell")) { return "Power Cell"; }
if (name.Equals("AutomaticRifleItem")) { return "Rifle"; }
if (name.Equals("AutomaticRocketLauncher")) { return "Rocket Launcher"; }
if (name.Equals("WelderItem")) { return "Welder"; }
if (name.Equals("AngleGrinderItem")) { return "Grinder"; }
if (name.Equals("HandDrillItem")) { return "Hand Drill"; }
if (typeId.EndsWith("_Ore")) {
if (name.Equals("Stone")) {
return name;
}
return name + " Ore";
}
if (typeId.EndsWith("_Ingot")) {
if (name.Equals("Stone")) {
return "Gravel";
}
if (name.Equals("Magnesium")) {
return name + " Powder";
}
if (name.Equals("Silicon")) {
return name + " Wafer";
}
return name + " Ingot";
}
return name;
}