Elin Decompiled Documentation EA 23.153 Nightly
Loading...
Searching...
No Matches
BaseListPeople.cs
Go to the documentation of this file.
1using System;
2using System.Collections.Generic;
3using System.Linq;
4using UnityEngine;
5
6public class BaseListPeople : ListOwner<Chara, ItemGeneral>
7{
8 public Chara owner;
9
11
12 public new LayerPeople layer => base.layer as LayerPeople;
13
14 public override string IdHeaderRow => "HeaderRowPeople";
15
16 public virtual bool ShowCharaSheet => false;
17
18 public virtual bool ShowShowMode => false;
19
21
22 public virtual bool ShowGoto => false;
23
24 public virtual bool ShowHome => false;
25
26 public virtual bool IsDisabled(Chara c)
27 {
28 if (!c.isDead && c.memberType != FactionMemberType.Guest)
29 {
30 return !c.IsInHomeZone();
31 }
32 return false;
33 }
34
35 public override void List()
36 {
37 list.callbacks = new UIList.Callback<Chara, ItemGeneral>
38 {
39 onInstantiate = delegate(Chara a, ItemGeneral b)
40 {
41 b.SetChara(a, (this is ListPeopleBuySlave) ? ItemGeneral.Mode.Slave : ItemGeneral.Mode.Default);
42 OnInstantiate(a, b);
43 b.Build();
44 },
45 onClick = delegate(Chara c, ItemGeneral i)
46 {
47 OnClick(c, i);
48 },
49 onSort = delegate(Chara a, UIList.SortMode m)
50 {
51 a.SetSortVal(m);
52 return -a.sortVal;
53 },
54 onList = delegate
55 {
56 OnList();
57 },
58 onRefresh = null
59 };
60 list.List();
61 }
62
63 public override void OnInstantiate(Chara a, ItemGeneral b)
64 {
65 SetSubText(a, b);
66 if (ShowHome)
67 {
68 if (a.IsPCFaction)
69 {
70 Sprite icon = a.affinity.GetIcon();
71 if ((bool)icon)
72 {
73 Util.Instantiate<UIItem>("UI/Element/Grid/Attach/affinity", b).image1.sprite = icon;
74 }
75 }
76 AddSubButtonWork(b, a);
77 Room room = a.FindRoom();
78 TraitBed bed = a.FindBed();
79 if (a.memberType == FactionMemberType.Default)
80 {
82 {
83 if (room == null)
84 {
85 SE.BeepSmall();
86 }
87 else
88 {
89 EClass.pc.SetAI(new AI_Goto(room.GetRandomFreePos(), 1));
90 layer.Close();
91 }
92 }, null, delegate(UITooltip t)
93 {
94 t.note.Clear();
95 t.note.AddHeader("infoHome".lang((room != null) ? room.Name : "none".lang()));
96 t.note.AddTopic("TopicLeft", "infoBed".lang(), (bed != null) ? bed.Name.ToTitleCase() : "none".lang());
97 t.note.Build();
98 if (room != null)
99 {
100 EClass.core.actionsNextFrame.Add(delegate
101 {
102 });
103 }
104 }).icon.SetAlpha((bed != null) ? 1f : 0.4f);
105 }
106 }
108 {
109 b.AddSubButton(EClass.core.refs.icons.inspect, delegate
110 {
111 SE.Play("pop_paper");
112 LayerChara layerChara = EClass.ui.AddLayerDontCloseOthers<LayerChara>();
113 layerChara.windows[0].SetRect(EClass.core.refs.rects.center);
114 layerChara.SetChara(a);
115 }, "charaInfo");
116 }
117 if (IsDisabled(a))
118 {
119 b.gameObject.AddComponent<CanvasGroup>().alpha = 0.6f;
120 }
121 }
122
124 {
125 BaseArea roomWork = a.GetRoomWork();
126 bool flag = true;
127 foreach (Hobby item in a.ListWorks().Concat(a.ListHobbies()))
128 {
129 if (item.GetEfficiency(a) <= 0)
130 {
131 flag = false;
132 break;
133 }
134 }
135 b.AddSubButton(EClass.core.refs.icons.work, delegate
136 {
137 if (roomWork == null)
138 {
139 SE.BeepSmall();
140 }
141 else
142 {
143 EClass.pc.SetAI(new AI_Goto(roomWork.GetRandomFreePos(), 1));
144 layer.Close();
145 }
146 }, null, delegate(UITooltip t)
147 {
148 WriteHobbies(t, a, roomWork);
149 }).icon.SetAlpha(flag ? 1f : 0.4f);
150 }
151
152 public void WriteHobbies(UITooltip t, Chara a, BaseArea roomWork)
153 {
154 t.note.Clear();
155 t.note.AddHeader("infoWork".lang((roomWork != null) ? roomWork.Name : "none".lang()));
156 foreach (Hobby item in a.ListWorks())
157 {
158 AddText(item, "work", a.source.works.Contains(item.source.alias));
159 }
160 foreach (Hobby item2 in a.ListHobbies())
161 {
162 AddText(item2, "hobby", a.source.hobbies.Contains(item2.source.alias));
163 }
164 if (a.IsPCParty)
165 {
166 t.note.Space(8);
167 t.note.AddText("workNotActive_party".lang(), FontColor.Warning);
168 }
169 if (a.IsPCFactionOrMinion && !a.trait.IsCountAsResident)
170 {
171 t.note.AddText("notCountResident".lang(), FontColor.Good);
172 }
173 t.note.Build();
174 void AddText(Hobby h, string lang, bool fix)
175 {
176 int efficiency = h.GetEfficiency(a);
177 string text = h.Name;
178 if (fix)
179 {
180 text += "*";
181 }
182 text = text.TagColor((efficiency == 0) ? FontColor.Warning : FontColor.Good);
183 string[] array = Lang.GetList("work_lv");
184 string text2 = array[Mathf.Clamp(efficiency / 50, (efficiency != 0) ? 1 : 0, array.Length - 1)];
185 t.note.AddTopic("TopicLeft", lang.lang(), text + " (" + text2 + ")");
186 if (!h.source.destTrait.IsEmpty())
187 {
188 bool flag = EClass._map.FindThing(Type.GetType("Trait" + h.source.destTrait + ", Elin"), a) != null;
189 List<CardRow> obj = EClass.sources.cards.rows.Where((CardRow t) => t.trait.Length != 0 && Type.GetType("Trait" + h.source.destTrait).IsAssignableFrom(Type.GetType("Trait" + t.trait[0]))).ToList();
190 obj.Sort((CardRow a, CardRow b) => a.LV - b.LV);
191 CardRow cardRow = obj[0];
192 t.note.AddText("NoteText_small", "・ " + "workDestTrait".lang(cardRow.GetName().ToTitleCase().TagColor(flag ? FontColor.Good : FontColor.Warning)));
193 }
194 if (efficiency == 0)
195 {
196 t.note.AddText("NoteText_small", "・ " + "workNotActive".lang());
197 }
198 else
199 {
200 for (int i = 0; i < h.source.things.Length; i += 2)
201 {
202 int num = Mathf.Max(1, h.source.things[i + 1].ToInt() * efficiency * a.homeBranch.GetProductBonus(a) / 100 / 1000);
203 string text3 = h.source.things[i];
204 string s = (text3.StartsWith("#") ? EClass.sources.categories.map[text3.Replace("#", "")].GetName() : EClass.sources.cards.map[h.source.things[i]].GetName());
205 if (h.source.alias == "Breeding")
206 {
207 num = a.race.breeder * 100 / 2500;
208 num = num * ((!(text3 == "_egg")) ? 1 : 2) / 3;
209 if (a.race.breeder > 0 && num <= 0)
210 {
211 num = 1;
212 }
213 }
214 t.note.AddText("NoteText_small", "・ " + "work_produce".lang(s.ToTitleCase(), num.ToString() ?? ""));
215 }
216 if (!h.source.elements.IsEmpty())
217 {
218 for (int j = 0; j < h.source.elements.Length; j += 2)
219 {
220 SourceElement.Row row = EClass.sources.elements.map[h.source.elements[j]];
221 int num2 = h.source.elements[j + 1];
222 int num3 = ((num2 < 0 || row.id == 2115 || row.id == 2207) ? (num2 / 10) : Mathf.Max(0, num2 * h.GetEfficiency(a) * a.homeBranch.efficiency / 100 / 1000));
223 t.note.AddText("NoteText_small", "・ " + "workBonus_skill".lang(row.GetName().ToTitleCase(), ((num2 > 0) ? "+" : "") + num3) + ((row.id == 2115 || row.id == 2207) ? (" " + "fixedFactionSkill".lang()) : ""), (num2 >= 0) ? FontColor.Default : FontColor.Bad);
224 }
225 }
226 string[] array2 = h.source.GetDetail().SplitNewline();
227 foreach (string text4 in array2)
228 {
229 if (!text4.IsEmpty())
230 {
231 t.note.AddText("NoteText_small", "・ " + text4);
232 }
233 }
234 }
235 t.note.Space(1);
236 }
237 }
238
239 public virtual void SetSubText(Chara a, ItemGeneral b)
240 {
241 switch (ShowMode)
242 {
243 case LayerPeople.ShowMode.Race:
244 b.SetSubText(a.race.GetName().ToTitleCase(wholeText: true), 300);
245 break;
246 case LayerPeople.ShowMode.Job:
247 b.SetSubText(a.job.GetName().ToTitleCase(wholeText: true), 300);
248 break;
249 case LayerPeople.ShowMode.Work:
250 {
251 string text = a.GetTextWork(simple: true) + "," + a.GetTextHobby(simple: true);
252 b.SetSubText(text.TrimEnd(','), 300);
253 break;
254 }
255 }
256 }
257
258 public override void OnClick(Chara c, ItemGeneral i)
259 {
261 {
262 if (c.currentZone != EClass._zone)
263 {
264 Msg.Say("isIn", c, (c.currentZone == null) ? "???" : c.currentZone.Name);
265 }
266 SE.BeepSmall();
267 return;
268 }
269 UIContextMenu uIContextMenu = EClass.ui.CreateContextMenuInteraction().SetHighlightTarget(i);
270 if (c.IsGuest())
271 {
272 uIContextMenu.AddButton("findMember", delegate
273 {
274 EClass.pc.SetAI(new AI_Goto(c, 1));
275 layer.Close();
276 });
277 }
278 else if (c.IsHomeMember())
279 {
280 if (!c.IsPC)
281 {
282 uIContextMenu.AddButton("findMember", delegate
283 {
284 EClass.pc.SetAI(new AI_Goto(c, 1));
285 layer.Close();
286 });
287 }
288 uIContextMenu.AddButton("changeName", delegate
289 {
290 Dialog.InputName("dialogChangeName", c.c_altName.IsEmpty(c.NameSimple), delegate(bool cancel, string text)
291 {
292 if (!cancel)
293 {
294 if (text == "*r")
295 {
296 text = NameGen.getRandomName();
297 }
298 c.c_altName = text;
299 layer.OnSwitchContent(layer.windows[0]);
300 }
301 });
302 });
303 if (c != EClass.pc)
304 {
305 if (c.sourceCard.idActor.IsEmpty() && c.host == null)
306 {
307 if (c.pccData == null)
308 {
309 uIContextMenu.AddButton("editPCC", delegate
310 {
311 EClass.ui.AddLayer<LayerEditPortrait>().Activate(c);
312 });
313 if (!c.IsPC)
314 {
315 uIContextMenu.AddButton("editSkin", delegate
316 {
317 LayerEditSkin layerEditSkin = EClass.ui.AddLayer<LayerEditSkin>();
318 layerEditSkin.SetOnKill(delegate
319 {
320 list.Refresh();
321 });
322 layerEditSkin.Activate(c);
323 });
324 }
325 uIContextMenu.AddButton("togglePCC", delegate
326 {
327 bool isSynced2 = c.isSynced;
328 c.pccData = PCCData.Create(c.IDPCCBodySet);
329 c.pccData.Randomize(c.IDPCCBodySet);
330 if (isSynced2)
331 {
333 }
334 EClass.scene.syncList.Remove(c.renderer);
335 c._CreateRenderer();
336 if (isSynced2)
337 {
340 }
341 list.Refresh();
342 SE.Click();
343 });
344 }
345 else
346 {
347 uIContextMenu.AddButton("editPCC", delegate
348 {
349 EClass.ui.AddLayer<LayerEditPCC>().Activate(c, UIPCC.Mode.Full);
350 });
351 uIContextMenu.AddButton("togglePCC", delegate
352 {
353 bool isSynced = c.isSynced;
354 if (isSynced)
355 {
357 }
358 EClass.scene.syncList.Remove(c.renderer);
359 c.pccData = null;
360 c._CreateRenderer();
361 if (isSynced)
362 {
365 }
366 list.Refresh();
367 });
368 }
369 }
370 if (c.homeBranch == EClass.Branch)
371 {
372 uIContextMenu.AddButton("makeMaid", delegate
373 {
374 if (EClass.Branch.uidMaid == c.uid)
375 {
376 EClass.Branch.uidMaid = 0;
377 }
378 else
379 {
380 EClass.Branch.uidMaid = c.uid;
381 }
382 list.Refresh();
383 SE.Click();
384 });
385 }
386 int @int = c.GetInt(36);
387 bool isLivestockTimerOn = memberType == FactionMemberType.Default && !EClass.world.date.IsExpired(@int);
388 int remainingHours = EClass.world.date.GetRemainingHours(@int);
389 if (!c.IsPCParty)
390 {
391 uIContextMenu.AddButton((c.memberType == FactionMemberType.Livestock) ? "daMakeResident" : (isLivestockTimerOn ? "daMakeLivestock2".lang(Date.GetText(remainingHours)) : "daMakeLivestock"), delegate
392 {
393 if (isLivestockTimerOn)
394 {
395 SE.Beep();
396 }
397 else
398 {
399 if (c.memberType == FactionMemberType.Livestock)
400 {
401 c.SetInt(36, EClass.world.date.GetRaw() + 14400);
402 }
403 EClass.Branch.ChangeMemberType(c, (c.memberType != FactionMemberType.Livestock) ? FactionMemberType.Livestock : FactionMemberType.Default);
404 foreach (ListOwner owner in layer.multi.owners)
405 {
406 owner.RefreshTab();
407 }
408 List();
409 SE.Click();
410 }
411 });
412 }
413 uIContextMenu.AddButton("addToReserve".lang() + " (" + EClass.Home.listReserve.Count + "/" + EClass.Home.GetMaxReserve() + ")", delegate
414 {
416 {
417 SE.Beep();
418 Msg.Say("reserveLimit");
419 return;
420 }
421 SE.MoveZone();
423 list.List();
424 foreach (ListOwner owner2 in layer.multi.owners)
425 {
426 owner2.RefreshTab();
427 }
428 });
429 }
430 }
431 uIContextMenu.Show();
432 }
433
434 public override void OnList()
435 {
436 if (memberType == FactionMemberType.Guest)
437 {
438 foreach (Chara chara in EClass._map.charas)
439 {
440 if (chara.IsGuest())
441 {
442 list.Add(chara);
443 }
444 }
445 return;
446 }
447 foreach (Chara member in EClass.Branch.members)
448 {
449 if (member.memberType == memberType && !member.isSummon)
450 {
451 list.Add(member);
452 }
453 }
454 foreach (Chara member2 in EClass.pc.party.members)
455 {
456 if (member2.memberType == memberType && !list.items.Contains(member2))
457 {
458 list.Add(member2);
459 }
460 }
461 }
462
463 public override void OnRefreshMenu()
464 {
465 WindowMenu menuLeft = window.menuLeft;
466 menuLeft.Clear();
467 if (!main)
468 {
469 return;
470 }
471 menuLeft.AddButton2Line("sort", () => list.sortMode.ToString(), delegate
472 {
473 list.NextSort();
474 });
475 if (ShowShowMode)
476 {
477 Lang.GetList("info_people");
478 menuLeft.AddButton2Line("info", () => "show" + layer.showMode, delegate
479 {
480 layer.showMode = layer.showMode.NextEnum();
481 List();
482 });
483 }
484 }
485}
FactionMemberType
FontColor
Definition: FontColor.cs:2
Sprite GetIcon()
Definition: Affinity.cs:81
virtual string Name
Definition: BaseArea.cs:37
int GetInt(int id, int? defaultInt=null)
Definition: BaseCard.cs:25
void SetInt(int id, int value=0)
Definition: BaseCard.cs:39
List< Action > actionsNextFrame
Definition: BaseCore.cs:31
virtual bool ShowGoto
void WriteHobbies(UITooltip t, Chara a, BaseArea roomWork)
virtual bool ShowHome
override void OnClick(Chara c, ItemGeneral i)
new LayerPeople layer
override string IdHeaderRow
override void OnRefreshMenu()
virtual bool ShowShowMode
virtual bool IsDisabled(Chara c)
override void OnInstantiate(Chara a, ItemGeneral b)
void AddSubButtonWork(ItemGeneral b, Chara a)
virtual void SetSubText(Chara a, ItemGeneral b)
FactionMemberType memberType
override void List()
virtual bool ShowCharaSheet
virtual LayerPeople.ShowMode ShowMode
override void OnList()
override void OnLeaveScreen()
override void OnEnterScreen()
string[] idActor
Definition: CardRow.cs:35
virtual string GetName(int i)
Definition: CardRow.cs:95
string[] trait
Definition: CardRow.cs:33
bool isSummon
Definition: Card.cs:694
string c_altName
Definition: Card.cs:1553
int sortVal
Definition: Card.cs:97
int uid
Definition: Card.cs:118
string NameSimple
Definition: Card.cs:2075
CardRenderer renderer
Definition: Card.cs:57
Definition: Chara.cs:10
string IDPCCBodySet
Definition: Chara.cs:487
override bool IsAliveInCurrentZone
Definition: Chara.cs:557
override void SetSortVal(UIList.SortMode m, CurrencyType currency=CurrencyType.Money)
Definition: Chara.cs:6757
override bool IsPC
Definition: Chara.cs:608
Chara host
Definition: Chara.cs:33
SourceJob.Row job
Definition: Chara.cs:462
override bool IsPCParty
Definition: Chara.cs:611
Party party
Definition: Chara.cs:43
AIAct SetAI(AIAct g)
Definition: Chara.cs:8189
TraitBed FindBed()
Definition: Chara.cs:6793
override bool isSynced
Definition: Chara.cs:687
override CardRenderer _CreateRenderer()
Definition: Chara.cs:6143
override bool IsPCFaction
Definition: Chara.cs:667
Zone currentZone
Definition: Chara.cs:251
FactionMemberType memberType
Definition: Chara.cs:46
bool IsHomeMember()
Definition: Chara.cs:6092
bool IsGuest()
Definition: Chara.cs:6117
override CardRow sourceCard
Definition: Chara.cs:446
BaseArea GetRoomWork()
Definition: Chara.cs:8231
Affinity affinity
Definition: Chara.cs:310
Room FindRoom()
Definition: Chara.cs:7355
FactionBranch homeBranch
Definition: Chara.cs:932
bool IsInHomeZone()
Definition: Chara.cs:6097
bool isDead
Definition: Chara.cs:385
PCCData pccData
Definition: Chara.cs:67
string GetTextWork(bool simple=false)
Definition: Chara.cs:8379
string GetTextHobby(bool simple=false)
Definition: Chara.cs:8369
SourceRace.Row race
Definition: Chara.cs:460
bool showExtra
Definition: CoreDebug.cs:167
Sprite home
Definition: CoreRef.cs:90
Sprite work
Definition: CoreRef.cs:94
Sprite inspect
Definition: CoreRef.cs:100
RectData center
Definition: CoreRef.cs:164
Icons icons
Definition: CoreRef.cs:345
Rects rects
Definition: CoreRef.cs:351
CoreRef refs
Definition: Core.cs:51
Definition: Date.cs:4
int GetRaw(int offsetHours=0)
Definition: Date.cs:322
bool IsExpired(int time)
Definition: Date.cs:332
string GetText(TextFormat format)
Definition: Date.cs:245
int GetRemainingHours(int rawDeadLine)
Definition: Date.cs:337
Definition: Dialog.cs:7
static Dialog InputName(string langDetail, string text, Action< bool, string > onClose, InputType inputType=InputType.Default)
Definition: Dialog.cs:528
Definition: EClass.cs:5
static Scene scene
Definition: EClass.cs:30
static Faction Home
Definition: EClass.cs:26
static Core core
Definition: EClass.cs:6
static Zone _zone
Definition: EClass.cs:20
static World world
Definition: EClass.cs:40
static Map _map
Definition: EClass.cs:18
static SourceManager sources
Definition: EClass.cs:42
static FactionBranch Branch
Definition: EClass.cs:22
static Chara pc
Definition: EClass.cs:14
static CoreDebug debug
Definition: EClass.cs:48
static UI ui
Definition: EClass.cs:16
void ChangeMemberType(Chara c, FactionMemberType type)
List< Chara > members
void AddReserve(Chara c)
Definition: FACTION.cs:327
List< HireInfo > listReserve
Definition: FACTION.cs:138
int GetMaxReserve()
Definition: FACTION.cs:192
Definition: Hobby.cs:4
SourceHobby.Row source
Definition: Hobby.cs:7
int GetEfficiency(Chara c)
Definition: Hobby.cs:30
string Name
Definition: Hobby.cs:9
void Build()
Definition: ItemGeneral.cs:171
UIButton AddSubButton(Sprite sprite, Action action, string lang=null, Action< UITooltip > onTooltip=null)
Definition: ItemGeneral.cs:86
void SetChara(Chara c, Mode mode=Mode.Default)
Definition: ItemGeneral.cs:27
UIButton SetSubText(string lang, int x, FontColor c=FontColor.Default, TextAnchor align=TextAnchor.MiddleLeft)
Definition: ItemGeneral.cs:129
Definition: Lang.cs:6
static string[] GetList(string id)
Definition: Lang.cs:114
LayerChara SetChara(Chara c)
Definition: LayerChara.cs:9
void Activate(Chara _chara)
override void OnSwitchContent(Window window)
Definition: LayerPeople.cs:82
ShowMode showMode
Definition: LayerPeople.cs:24
UIMultiList multi
Definition: LayerPeople.cs:30
List< Window > windows
Definition: Layer.cs:116
virtual void Close()
Definition: Layer.cs:463
Layer SetOnKill(Action action)
Definition: Layer.cs:579
void RefreshTab()
Definition: ListOwner.cs:97
Thing FindThing(Func< Thing, bool > func)
Definition: Map.cs:2570
List< Chara > charas
Definition: Map.cs:81
Definition: Msg.cs:5
static string Say(string idLang, string ref1, string ref2=null, string ref3=null, string ref4=null)
Definition: Msg.cs:58
List< Chara > members
Definition: Party.cs:18
int LV
Definition: RenderRow.cs:22
Definition: Room.cs:4
List< ISyncScreen > syncList
Definition: Scene.cs:137
List< CardRow > rows
Definition: SourceCard.cs:6
Dictionary< string, CardRow > map
Definition: SourceCard.cs:8
override string GetName()
SourceCard cards
SourceCategory categories
SourceElement elements
virtual string Name
Definition: Spatial.cs:495
void Show(UIItem i)
void AddButton(Func< string > funcText, UnityAction action=null)
Definition: UIItem.cs:5
Definition: UIList.cs:9
SortMode
Definition: UIList.cs:27
override void List()
Definition: UIList.cs:717
List< ListOwner > owners
Definition: UIMultiList.cs:6
void Clear()
Definition: UINote.cs:35
UIItem AddHeader(string text, Sprite sprite=null)
Definition: UINote.cs:79
UIItem AddTopic(string id, string text, string value=null)
Definition: UINote.cs:144
void Build()
Definition: UINote.cs:49
UINote note
Definition: UITooltip.cs:21
void Clear()
Definition: WindowMenu.cs:44
UIButton AddButton2Line(string idLang, Func< string > funcText, Action< UIButton > onClick=null, Sprite sprite=null, string idButton="2line")
Definition: WindowMenu.cs:91
GameDate date
Definition: World.cs:6