Repository navigation
Expand file tree
/
Copy pathAutoSorting.cs
More file actions
122 lines (102 loc) · 4.57 KB
/
Copy pathAutoSorting.cs
File metadata and controls
122 lines (102 loc) · 4.57 KB
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
const string ORE_CONTAINER = "Êîíòåéíåð ðóäè";
const string INGOT_CONTAINER = "Êîíòåéíåð çëèòê³â";
const string COMPONENT_CONTAINER = "Êîíòåéíåð êîìïîíåíò³â";
const string AMMO_CONTAINER = "Êîíòåéíåð çáðî¿";
const string LOCKED_CONTAINER = "Locked";
bool AUTO_RENAME = false;
List<IMyTerminalBlock> containers;
List<IMyTerminalBlock> oreContainers;
List<IMyTerminalBlock> ingotContainers;
List<IMyTerminalBlock> componentContainers;
List<IMyTerminalBlock> ammoContainers;
List<IMyTerminalBlock> gasContainers;
// destination inventory items are being sent to
IMyInventory containerDestination;
public Program()
{
Runtime.UpdateFrequency = UpdateFrequency.Update100;
}
void Main(string argument)
{
if (argument == "ren") AUTO_RENAME = true;
containers = new List<IMyTerminalBlock>();
GridTerminalSystem.GetBlocksOfType<IMyTerminalBlock>(containers);
oreContainers = new List<IMyTerminalBlock>();
ingotContainers = new List<IMyTerminalBlock>();
componentContainers = new List<IMyTerminalBlock>();
ammoContainers = new List<IMyTerminalBlock>();
gasContainers = new List<IMyTerminalBlock>();
// find all the containers with our custom name and store them
GridTerminalSystem.SearchBlocksOfName(ORE_CONTAINER, oreContainers);
GridTerminalSystem.SearchBlocksOfName(INGOT_CONTAINER, ingotContainers);
GridTerminalSystem.SearchBlocksOfName(COMPONENT_CONTAINER, componentContainers);
GridTerminalSystem.SearchBlocksOfName(AMMO_CONTAINER, ammoContainers);
// sort everything into the respective container
sort(ORE_CONTAINER, "Ore", oreContainers);
sort(INGOT_CONTAINER, "Ingot", ingotContainers);
sort(COMPONENT_CONTAINER, "Component", componentContainers);
sort(AMMO_CONTAINER, "Ammo", ammoContainers);
sort(AMMO_CONTAINER, "Gun", ammoContainers);// for drills, grinders, etc.
sort(AMMO_CONTAINER, "Gas", gasContainers);// for hydro tanks
sort(AMMO_CONTAINER, "Oxygen", gasContainers);// for oxygen tanks
}
void sort(string containerName, string type, List<IMyTerminalBlock> typeContainers)
{
if (typeContainers == null) return;
containerDestination = null;
for (int n = 0; n < typeContainers.Count; n++)
{
var _container = typeContainers[n];
if (_container.GetInventory(0) == null) continue;
var containerInv = _container.GetInventory(0);
if (!IsFull(containerInv))
{
containerDestination = containerInv;
break;
}
}
if (containerDestination == null) return;
// search all containers
foreach (IMyTerminalBlock container in containers)
{
IMyInventory containerInv = null;
if (container as IMyReactor != null) continue;
if (container as IMyGasGenerator != null) continue;
if (container.CustomName.Contains(LOCKED_CONTAINER)) continue;
if (container.GetInventory(1) != null) {containerInv = container.GetInventory(1);}
else if (container.GetInventory(0) != null) {containerInv = container.GetInventory(0);}
if (container.GetInventory(0) == null & container.GetInventory(1) == null) continue;
var containerItems = containerInv.GetItems();
for (int j = containerItems.Count - 1; j >= 0; j--)
{
if (containerItems[j].Content.ToString().Contains(type) && !container.CustomName.Contains(containerName))
{
containerInv.TransferItemTo(containerDestination, j, null, true, null);
}
}
if (container as IMyCargoContainer != null & AUTO_RENAME & !container.CustomName.Contains("Êîíòåéíåð")) container.SetCustomName(COMPONENT_CONTAINER);
// add percentages to names
if (container.CustomName.Contains(containerName))
{
// get rid of the % symbol the player added
container.SetCustomName(container.CustomName.Replace("%", "").Replace(" ", " "));
// get the container's name without the precentage
string[] delim = { " - " };
string[] fullName = container.CustomName.Split(delim, StringSplitOptions.RemoveEmptyEntries);
string name = fullName[0];
string percentage = " - " + getPercent(containerInv).ToString("0.##") + "%";
container.SetCustomName((name + percentage).Replace(" ", " "));
}
}
}
float getPercent(IMyInventory inv)
{
return ((float)inv.CurrentVolume / (float)inv.MaxVolume) * 100f;
}
bool IsFull(IMyInventory inv)
{
if (getPercent(inv) >= 99)
return true;
else
return false;
}