Elin Decompiled Documentation EA 23.102 Nightly
Loading...
Searching...
No Matches
TaskDump.cs
Go to the documentation of this file.
1using System.Collections.Generic;
2using System.Linq;
3
4public class TaskDump : Task
5{
6 public static void TryPerform()
7 {
8 if (EClass.ui.AllowInventoryInteractions)
9 {
11 {
12 Msg.Say("dump_invalid");
13 }
14 else if (!EClass.pc.HasNoGoal)
15 {
16 SE.Beep();
17 }
18 else
19 {
21 }
22 }
23 }
24
25 public override bool CanManualCancel()
26 {
27 return true;
28 }
29
30 public override IEnumerable<Status> Run()
31 {
32 List<Thing> containers = new List<Thing>();
33 EClass._map.things.ForEach(delegate(Thing t)
34 {
35 if (IsValidContainer(t))
36 {
37 containers.Add(t);
38 }
39 });
40 while (containers.Count > 0)
41 {
42 bool flag = true;
43 int num = SortVal(containers.First());
44 foreach (Thing item in containers)
45 {
46 if (SortVal(item) != num)
47 {
48 flag = false;
49 break;
50 }
51 }
52 if (flag)
53 {
54 containers.Sort((Thing a, Thing b) => EClass.pc.Dist(b) - EClass.pc.Dist(a));
55 }
56 else
57 {
58 containers.Sort((Thing a, Thing b) => SortVal(a) - SortVal(b));
59 }
60 Thing c = containers.LastItem();
61 containers.RemoveAt(containers.Count - 1);
62 if (!IsValidContainer(c))
63 {
64 continue;
65 }
66 EClass.ui.CloseLayers();
67 Point pos = c.pos.Copy();
68 if (c.IsMultisize)
69 {
70 int minDist = 999;
71 c.ForeachPoint(delegate(Point p, bool isCenter)
72 {
73 if (p.IsValid && p.IsInBounds)
74 {
75 PathProgress pathProgress = PathManager.Instance.RequestPathImmediate(EClass.pc.pos, p, EClass.pc, PathManager.MoveType.Default, -1, 1);
76 if (pathProgress.HasPath && pathProgress.nodes.Count < minDist)
77 {
78 minDist = pathProgress.nodes.Count;
79 pos = p.Copy();
80 }
81 }
82 });
83 }
84 yield return DoGoto(pos, 1, ignoreConnection: false, () => Status.Running);
85 if (!IsValidContainer(c))
86 {
87 continue;
88 }
89 if (!c.ExistsOnMap)
90 {
91 Msg.Say("dump_noExist", c);
92 continue;
93 }
94 if (EClass.pc.Dist(c) > 1)
95 {
96 Msg.Say("dump_tooFar", c);
97 continue;
98 }
99 List<Thing> list = ListThingsToPut(c);
100 int num2 = 0;
101 if (c.trait is TraitShippingChest)
102 {
104 }
105 foreach (Thing item2 in list)
106 {
107 if (!c.things.IsFull(item2) && !item2.isDestroyed)
108 {
109 item2.PlaySoundDrop(spatial: false);
110 if (c.parent is Card)
111 {
112 (c.parent as Card).SetDirtyWeight();
113 }
114 Msg.Say("dump_item", item2, c);
115 c.AddCard(item2);
116 num2++;
117 }
118 }
119 if (num2 > 0)
120 {
121 Msg.Say("dump_dumped", num2.ToString() ?? "", c.Name);
122 }
123 }
124 static int SortVal(Thing t)
125 {
126 return t.GetWindowSaveData()?.priority ?? 0;
127 }
128 }
129
130 public override void OnCancelOrSuccess()
131 {
132 Msg.Say("dump_end");
133 SE.Play("auto_dump");
134 }
135
136 public bool IsValidContainer(Thing c)
137 {
138 if ((!c.ExistsOnMap && !c.IsInstalled) || !c.CanSearchContents)
139 {
140 return false;
141 }
142 if (c.trait is TraitShippingChest)
143 {
145 }
146 if (c.GetWindowSaveData() == null || c.GetWindowSaveData().autodump == AutodumpFlag.none)
147 {
148 return false;
149 }
150 if (ListThingsToPut(c).Count == 0)
151 {
152 return false;
153 }
154 return true;
155 }
156
157 public List<Thing> ListThingsToPut(Thing c)
158 {
159 List<Thing> list = new List<Thing>();
160 if (c.trait is TraitShippingChest)
161 {
163 }
165 if (data == null)
166 {
167 return list;
168 }
169 switch (data.autodump)
170 {
171 case AutodumpFlag.distribution:
172 EClass.pc.things.Foreach(delegate(Thing t)
173 {
174 if (!ExcludeDump(t))
175 {
176 if (data.userFilter)
177 {
178 switch (data.IsFilterPass(t.GetName(NameStyle.Full, 1)))
179 {
180 case Window.SaveData.FilterResult.Block:
181 return;
182 case Window.SaveData.FilterResult.PassWithoutFurtherTest:
183 list.Add(t);
184 return;
185 }
186 }
187 if (data.advDistribution)
188 {
189 foreach (int cat in data.cats)
190 {
191 if (t.category.uid == cat)
192 {
193 list.Add(t);
194 break;
195 }
196 }
197 return;
198 }
199 ContainerFlag containerFlag = t.category.GetRoot().id.ToEnum<ContainerFlag>();
200 if (containerFlag == ContainerFlag.none)
201 {
202 containerFlag = ContainerFlag.other;
203 }
204 if (!data.flag.HasFlag(containerFlag))
205 {
206 list.Add(t);
207 }
208 }
209 });
210 break;
211 case AutodumpFlag.existing:
212 foreach (Thing ct in c.things)
213 {
214 EClass.pc.things.Foreach(delegate(Thing t)
215 {
216 if (!list.Contains(t) && !ExcludeDump(t) && t.CanStackTo(ct))
217 {
218 if (data.userFilter)
219 {
220 Window.SaveData.FilterResult filterResult = data.IsFilterPass(t.GetName(NameStyle.Full, 1));
221 if (filterResult != Window.SaveData.FilterResult.Block)
222 {
223 _ = 2;
224 list.Add(t);
225 }
226 }
227 else
228 {
229 list.Add(t);
230 }
231 }
232 });
233 }
234 break;
235 case AutodumpFlag.sameCategory:
236 {
237 if (c.things.Count == 0)
238 {
239 break;
240 }
241 HashSet<SourceCategory.Row> cats = new HashSet<SourceCategory.Row>();
242 foreach (Thing thing in c.things)
243 {
244 cats.Add(thing.category);
245 }
246 EClass.pc.things.Foreach(delegate(Thing t)
247 {
248 if (!ExcludeDump(t))
249 {
250 if (data.userFilter)
251 {
252 switch (data.IsFilterPass(t.GetName(NameStyle.Full, 1)))
253 {
254 case Window.SaveData.FilterResult.Block:
255 return;
256 case Window.SaveData.FilterResult.PassWithoutFurtherTest:
257 list.Add(t);
258 return;
259 }
260 }
261 if (cats.Contains(t.category))
262 {
263 list.Add(t);
264 }
265 }
266 });
267 break;
268 }
269 }
270 return list;
271 bool ExcludeDump(Thing t)
272 {
274 {
275 return true;
276 }
277 if (t.IsContainer && t.things.Count > 0)
278 {
279 return true;
280 }
281 if (data.noRotten && t.IsDecayed)
282 {
283 return true;
284 }
285 if (data.onlyRottable && t.trait.Decay == 0)
286 {
287 return true;
288 }
289 if (!(t.parent is Card card))
290 {
291 return false;
292 }
293 return card.GetWindowSaveData()?.excludeDump ?? false;
294 }
295 }
296}
AutodumpFlag
Definition: AutodumpFlag.cs:2
ContainerFlag
Definition: ContainerFlag.cs:5
NameStyle
Definition: NameStyle.cs:2
if(item3.idFile==idFirstFile &&item3.id==idFirstTopic)
Definition: UIBook.cs:627
Status
Definition: AIAct.cs:8
Status DoGoto(Point pos, int dist=0, bool ignoreConnection=false, Func< Status > _onChildFail=null)
Definition: AIAct.cs:432
Thing container_shipping
Definition: CardManager.cs:52
Definition: Card.cs:11
bool isDestroyed
Definition: Card.cs:71
virtual bool IsMultisize
Definition: Card.cs:2034
bool IsDecayed
Definition: Card.cs:2147
ICardParent parent
Definition: Card.cs:51
bool ExistsOnMap
Definition: Card.cs:1961
bool IsHotItem
Definition: Card.cs:115
void ForeachPoint(Action< Point, bool > action)
Definition: Card.cs:6942
Point pos
Definition: Card.cs:55
Trait trait
Definition: Card.cs:49
Window.SaveData GetWindowSaveData()
Definition: Card.cs:2376
bool c_isImportant
Definition: Card.cs:984
ThingContainer things
Definition: Card.cs:34
bool IsInstalled
Definition: Card.cs:2241
int Dist(Card c)
Definition: Card.cs:6777
void PlaySoundDrop(bool spatial=true)
Definition: Card.cs:5389
SourceCategory.Row category
Definition: Card.cs:1925
bool IsContainer
Definition: Card.cs:1965
void SetAIImmediate(AIAct g)
Definition: Chara.cs:8077
bool HasNoGoal
Definition: Chara.cs:821
Definition: EClass.cs:5
static Game game
Definition: EClass.cs:8
static Zone _zone
Definition: EClass.cs:20
static Map _map
Definition: EClass.cs:18
static Chara pc
Definition: EClass.cs:14
static UI ui
Definition: EClass.cs:16
int SortVal(bool charaSheet=false)
Definition: ELEMENT.cs:452
CardManager cards
Definition: Game.cs:155
List< Thing > things
Definition: Map.cs:49
Definition: Msg.cs:5
static string Say(string idLang, string ref1, string ref2=null, string ref3=null, string ref4=null)
Definition: Msg.cs:58
Definition: Point.cs:9
Point Copy()
Definition: Point.cs:467
bool IsValid
Definition: Point.cs:88
bool IsInBounds
Definition: Point.cs:104
bool IsValidContainer(Thing c)
Definition: TaskDump.cs:136
override void OnCancelOrSuccess()
Definition: TaskDump.cs:130
List< Thing > ListThingsToPut(Thing c)
Definition: TaskDump.cs:157
static void TryPerform()
Definition: TaskDump.cs:6
override bool CanManualCancel()
Definition: TaskDump.cs:25
override IEnumerable< Status > Run()
Definition: TaskDump.cs:30
Definition: Task.cs:4
void Foreach(Action< Thing > action, bool onlyAccessible=true)
Definition: Thing.cs:8
bool isEquipped
Definition: Thing.cs:17
bool CanSearchContents
Definition: Thing.cs:80
override string GetName(NameStyle style, int _num=-1)
Definition: Thing.cs:494
override bool CanStackTo(Thing to)
Definition: Thing.cs:1542
virtual bool CanBeDropped
Definition: Trait.cs:289
virtual int Decay
Definition: Trait.cs:115
virtual bool CanOnlyCarry
Definition: Trait.cs:283
ContainerFlag flag
Definition: Window.cs:267
bool userFilter
Definition: Window.cs:132
bool advDistribution
Definition: Window.cs:427
AutodumpFlag autodump
Definition: Window.cs:207
Definition: Window.cs:13
bool IsPCFaction
Definition: Zone.cs:464