Elin Decompiled Documentation EA 23.271 Nightly
Loading...
Searching...
No Matches
ActPlan.cs
Go to the documentation of this file.
1using System;
2using System.Collections.Generic;
3using System.Linq;
4using UnityEngine;
5using UnityEngine.UI;
6
7public class ActPlan : EClass
8{
9 public class List : List<Item>
10 {
11 public void Add(Act a, string s = "")
12 {
13 Add(new Item
14 {
15 act = a
16 });
17 }
18 }
19
20 public class Item
21 {
22 public Act act;
23
24 public Card tc;
25
26 public Point pos;
27
28 public Chara cc => EClass.pc;
29
30 public bool HideHint
31 {
32 get
33 {
34 if (!EClass.pc.isBlind)
35 {
36 if (tc != null && tc.isChara)
37 {
38 return !EClass.pc.CanSee(tc);
39 }
40 return false;
41 }
42 return true;
43 }
44 }
45
46 public string GetText(bool showName)
47 {
48 return act.GetText() + ((showName && act.GetTextSmall(tc) != null) ? ("\n<size=28>" + act.GetTextSmall(tc) + "</size>") : "");
49 }
50
51 public string GetTextContext(bool showName)
52 {
53 return act.GetText() + ((showName && tc != null && !HideHint) ? ("<size=13> (" + tc.Name + ")</size>") : "");
54 }
55
56 public bool Perform(bool repeated = false)
57 {
58 if (AM_Adv.actCount == 0 && !Dialog.warned)
59 {
60 warning = true;
61 Card lastMouseCard = EClass.scene.mouseTarget.card;
62 Chara _CC = Act.CC;
63 Card _TC = Act.TC;
64 Point _TP = new Point(Act.TP);
65 if (EClass._zone.IsCrime(EClass.pc, act) && act.ID != "actContainer")
66 {
67 Dialog.TryWarnCrime(delegate
68 {
69 Act.CC = _CC;
70 Act.TC = _TC;
71 Act.TP.Set(_TP);
72 EClass.scene.mouseTarget.card = lastMouseCard;
73 if (Perform())
74 {
76 }
77 });
78 return false;
79 }
80 if (act is TaskHarvest && (act as TaskHarvest).mode == BaseTaskHarvest.HarvestType.Disassemble)
81 {
83 {
84 Act.CC = _CC;
85 Act.TC = _TC;
86 Act.TP.Set(_TP);
87 if (Perform())
88 {
90 }
91 });
92 return false;
93 }
94 }
95 warning = false;
96 int num = cc.pos.Distance(pos);
97 bool flag = num == 1 && cc.CanInteractTo(pos);
98 AIAct aIAct = act as AIAct;
99 if (act.IsAct)
100 {
101 Act.CC = EClass.pc;
102 if (act.PerformDistance != -1 && (num > act.PerformDistance || (num == 1 && !flag)))
103 {
105 {
106 pos = pos.Copy()
107 });
108 return false;
109 }
110 bool num2 = act.Perform(cc, tc, pos);
111 if (num2 && !EClass.pc.HasNoGoal)
112 {
114 }
115 if (num2)
116 {
117 return EClass.pc.HasNoGoal;
118 }
119 return false;
120 }
121 if (repeated)
122 {
123 if (cc.ai.GetType() == act.GetType() && cc.ai.IsRunning)
124 {
125 return false;
126 }
127 aIAct.Reset();
128 if (!act.CanPerform())
129 {
131 return false;
132 }
133 if (aIAct is Task task)
134 {
135 task.isDestroyed = false;
136 TaskPoint taskPoint = task as TaskPoint;
137 if (EClass.scene.mouseTarget.isValid && taskPoint != null)
138 {
139 taskPoint.isRepeated = true;
140 taskPoint.pos = EClass.scene.mouseTarget.pos.Copy();
141 }
142 }
143 }
144 cc.SetAIImmediate(aIAct);
145 ActionMode.Adv.SetTurbo(aIAct.UseTurbo ? (-1) : 0);
146 return false;
147 }
148 }
149
150 public static bool warning;
151
152 public Point pos = new Point();
153
155
156 public bool performed;
157
158 public bool altAction;
159
161
163
164 private bool showOrder;
165
166 public List list = new List();
167
168 public int dist;
169
170 public Thing tool;
171
173
174 public Act lastAct;
175
176 public bool IsSelf => dist == 0;
177
179
181 {
182 get
183 {
185 {
186 return dist == 1;
187 }
188 return false;
189 }
190 }
191
192 public bool canRepeat
193 {
194 get
195 {
196 if (list.Count == 1)
197 {
198 return list[0].act.CanPressRepeat;
199 }
200 return false;
201 }
202 }
203
204 public Chara cc => EClass.pc;
205
207 {
208 get
209 {
210 if (list.Count != 0)
211 {
212 if (list.Count <= 1)
213 {
214 return list[0].act.GetCursorIcon(list[0].tc);
215 }
216 return CursorSystem.Notice;
217 }
218 return null;
219 }
220 }
221
222 public bool WillEndTurn
223 {
224 get
225 {
226 if (list.Count > 0)
227 {
228 return list[0].act.WillEndTurn;
229 }
230 return false;
231 }
232 }
233
234 public bool HideRightInfo
235 {
236 get
237 {
238 if (list.Count > 0)
239 {
240 return list[0].act.HideRightInfo;
241 }
242 return false;
243 }
244 }
245
246 public bool HasAct => list.Count > 0;
247
248 public bool ShowAct
249 {
250 get
251 {
252 if (HasAct)
253 {
254 if (lastAct != list[0].act)
255 {
256 return list[0].act.ShowMouseHint(list[0].tc);
257 }
258 return false;
259 }
260 return false;
261 }
262 }
263
265 {
266 get
267 {
268 if (list.Count > 1)
269 {
270 return list[0].tc != list.LastItem().tc;
271 }
272 return false;
273 }
274 }
275
276 public string GetText(bool showName)
277 {
278 if (list.Count == 0)
279 {
280 return "";
281 }
282 if (list.Count == 1)
283 {
284 return list[0].GetText(showName);
285 }
286 return "+" + list.Count + ((HasMultipleTargets || list[0].tc == null) ? ("\n<size=28>(" + "multipleTargets".lang() + ")</size>") : ("\n<size=28>" + list[0].tc.Name + list[0].tc.GetExtraName() + "</size>"));
287 }
288
289 public Func<bool> GetAction()
290 {
291 if (list.Count == 0)
292 {
293 return () => false;
294 }
295 if (list.Count > 1)
296 {
297 return delegate
298 {
300 {
301 return false;
302 }
304 return false;
305 };
306 }
307 Item item = list[0];
308 return delegate
309 {
310 if (performed && !item.act.CanPressRepeat)
311 {
312 return false;
313 }
314 performed = true;
315 lastAct = item.act;
316 return item.Perform(performed);
317 };
318 }
319
320 public void Order(string id)
321 {
322 EClass.player.forceTalk = true;
323 EClass.pc.SayRaw(id.lang());
324 }
325
326 public void ShowContextMenu()
327 {
328 UIContextMenu uIContextMenu = EClass.ui.CreateContextMenuInteraction();
329 int num = 1;
330 if (showOrder)
331 {
332 UIContextMenu uIContextMenu2 = uIContextMenu.AddChild("order_ally");
333 uIContextMenu2.AddButton("order_fight", delegate
334 {
335 Order("order_fight");
336 });
337 uIContextMenu2.AddButton("order_heal", delegate
338 {
339 Order("order_heal");
340 });
341 uIContextMenu2.AddButton("order_wait", delegate
342 {
343 Order("order_wait");
344 });
345 }
346 foreach (Item i in list)
347 {
348 string textContext = i.GetTextContext(HasMultipleTargets);
349 textContext = textContext.Replace("\n", " ").Replace(Environment.NewLine, " ");
350 uIContextMenu.AddButton(textContext, delegate
351 {
352 performed = true;
353 if (i.Perform())
354 {
356 }
357 });
358 num++;
359 if (num >= 21)
360 {
361 break;
362 }
363 }
364 uIContextMenu.Show();
365 EClass.ui.hud.HideMouseInfo();
366 }
367
368 public bool TrySetAct(string lang, Func<bool> onPerform, Card tc, CursorInfo cursor = null, int dist = 1, bool isHostileAct = false, bool localAct = true, bool canRepeat = false)
369 {
370 return TrySetAct(new DynamicAct(lang, onPerform)
371 {
372 id = lang,
373 dist = dist,
374 isHostileAct = isHostileAct,
375 localAct = localAct,
376 cursor = ((cursor == CursorSystem.Arrow) ? null : cursor),
377 canRepeat = () => canRepeat
378 }, tc);
379 }
380
381 public bool TrySetAct(string lang, Func<bool> onPerform, CursorInfo cursor = null, int dist = 1)
382 {
383 return TrySetAct(new DynamicAct(lang, onPerform)
384 {
385 id = lang,
386 dist = dist,
387 cursor = ((cursor == CursorSystem.Arrow) ? null : cursor)
388 });
389 }
390
391 public bool TrySetAct(Act _act, Card _tc = null)
392 {
393 if (!ignoreAddCondition && !_act.CanPerform(cc, _tc, pos))
394 {
395 return false;
396 }
397 Item item = new Item
398 {
399 act = _act,
400 tc = _tc,
401 pos = pos.Copy()
402 };
403 if (_tc != null && _tc.isChara)
404 {
405 int num = -1;
406 for (int i = 0; i < list.Count; i++)
407 {
408 if (list[i].tc == _tc)
409 {
410 num = i;
411 }
412 }
413 if (num != -1)
414 {
415 list.Insert(num + 1, item);
416 }
417 else
418 {
419 list.Add(item);
420 }
421 }
422 else
423 {
424 list.Add(item);
425 }
426 return true;
427 }
428
429 public void Clear()
430 {
431 list.Clear();
432 pos.IsValid = false;
433 }
434
435 public void Update(PointTarget target)
436 {
437 if (warning)
438 {
439 return;
440 }
441 _Update(target);
442 if (!HasAct)
443 {
444 return;
445 }
446 Color effectColor = ((list.Count == 1) ? list[0].act.GetActPlanColor() : EClass.Colors.colorAct);
447 if (input == ActInput.LeftMouse || input == ActInput.Key)
448 {
449 EClass.ui.hud.textLeft.SetText(GetText(showName: true));
450 Outline[] components = EClass.ui.hud.textLeft.GetComponents<Outline>();
451 for (int i = 0; i < components.Length; i++)
452 {
453 components[i].effectColor = effectColor;
454 }
455 }
456 else if (input == ActInput.RightMouse)
457 {
459 EClass.ui.hud.imageRight.rectTransform.localScale = new Vector3(2f, 2f, 1f);
460 EClass.ui.hud.textRight.SetText(GetText(showName: true));
461 Outline[] components = EClass.ui.hud.textRight.GetComponents<Outline>();
462 for (int i = 0; i < components.Length; i++)
463 {
464 components[i].effectColor = effectColor;
465 }
466 }
467 }
468
469 public void _Update(PointTarget target)
470 {
471 showOrder = false;
472 performed = false;
473 list.Clear();
474 listPick.Clear();
475 if (!pos.Equals(target.pos))
476 {
477 lastAct = null;
478 }
479 pos.Set(target.pos);
481 if (!pos.IsValid || EClass.pc.isDead)
482 {
483 return;
484 }
485 Point _pos = new Point(pos);
486 _ = target.pos.cell;
487 List<Card> items = _pos.ListCards();
488 bool isKey = input == ActInput.Key;
489 altAction = (EInput.isShiftDown && !EInput.isAltDown && !isKey) || input == ActInput.AllAction;
490 _canInteractNeighbor = dist == 0 || (dist == 1 && cc.CanInteractTo(_pos));
491 if (EClass.pc.isBlind && !_pos.Equals(EClass.pc.pos) && !isKey && input != 0)
492 {
493 return;
494 }
495 if (isKey || input == ActInput.LeftMouse || input == ActInput.AllAction)
496 {
497 if (EClass.ui.IsDragging)
498 {
499 return;
500 }
501 if (_pos.cell.outOfBounds)
502 {
503 if (EClass.player.CanExitBorder(_pos))
504 {
506 }
507 return;
508 }
509 if (!isKey && _pos.Equals(cc.pos) && EClass._zone.IsRegion)
510 {
511 TrySetAct("actNewZone", delegate
512 {
514 return false;
516 if (input == ActInput.AllAction)
517 {
518 TrySetAct("LayerTravel", delegate
519 {
520 EClass.ui.AddLayer<LayerTravel>();
521 return false;
522 }, null, CursorSystem.MoveZone, 1, isHostileAct: false, localAct: false);
523 }
524 }
525 items.ForeachReverse(delegate(Card _c)
526 {
527 Chara c2 = _c.Chara;
528 if (c2 != null && !c2.IsPC && EClass.pc.CanSee(c2))
529 {
530 int num = c2.Dist(EClass.pc);
531 if (num <= 1 || !EClass.pc.isBlind)
532 {
533 if (c2.mimicry != null && !c2.IsPCParty)
534 {
535 if (num <= 1)
536 {
537 c2.mimicry.TrySetAct(this);
538 }
539 }
540 else
541 {
542 if (!EClass.pc.isBlind && !c2.IsHostile() && (input == ActInput.AllAction || !(c2.IsPCParty || c2.IsMinion || isKey)) && (input == ActInput.AllAction || !c2.IsNeutral() || c2.quest != null || EClass.game.quests.IsDeliverTarget(c2)) && c2.isSynced && num <= 2)
543 {
544 bool flag5 = !c2.HasCondition<ConSuspend>() && (!c2.isRestrained || !c2.IsPCFaction);
546 {
547 flag5 = false;
548 }
549 if (flag5 || altAction)
550 {
551 if (EClass.pc.HasElement(1216) && c2.HasCondition<ConSleep>())
552 {
554 {
555 target = c2,
556 variation = AI_Fuck.Variation.Succubus
557 }, c2);
558 }
559 TrySetAct(ACT.Chat, c2);
560 }
561 }
562 if (!c2.IsPC && num <= 2 && ((c2.IsPCFaction && !c2.IsDisabled) || EClass.debug.enable) && input == ActInput.AllAction)
563 {
564 TrySetAct("actTrade", delegate
565 {
567 return false;
568 }, c2, null, 2);
569 }
570 if (c2.host != EClass.pc)
571 {
572 TraitShackle traitShackle = c2.pos.FindThing<TraitShackle>();
574 {
575 if (traitShackle != null && traitShackle.AllowTraining)
576 {
578 {
579 target = c2
580 });
581 }
582 }
583 else if ((c2.IsHostile() || altAction || c2.isRestrained) && c2.IsAliveInCurrentZone)
584 {
585 TrySetAct(ACT.Melee, c2);
586 }
587 }
588 if (c2.IsPCPartyMinion && !c2.Chara.IsEscorted() && altAction)
589 {
590 TrySetAct("ActBanishSummon", delegate
591 {
592 c2.Banish(EClass.pc);
593 return true;
594 }, c2, null, 99);
595 List<Chara> list2 = new List<Chara>();
596 foreach (Chara chara in EClass._map.charas)
597 {
598 if (chara.IsPCFactionMinion && !chara.IsEscorted())
599 {
600 list2.Add(chara);
601 }
602 }
603 if (list2.Count > 1)
604 {
605 TrySetAct("ActBanishSummonAll", delegate
606 {
607 foreach (Chara item in list2)
608 {
609 item.Banish(EClass.pc);
610 }
611 return true;
612 }, c2, null, 99);
613 }
614 }
615 }
616 }
617 }
618 });
619 if (_pos.IsHidden)
620 {
621 return;
622 }
624 {
625 items.ForeachReverse(delegate(Card _c)
626 {
627 Chara c = _c.Chara;
628 if (c != null && (c.mimicry == null || c.IsPCParty))
629 {
630 bool flag3 = EClass.pc.CanSee(c);
631 if (flag3)
632 {
633 if (input == ActInput.LeftMouse && c.IsPCFaction && !c.IsPC && pos.FindThing<TraitHitchingPost>() != null)
634 {
635 Chara ride = c;
636 List<string> list = EClass.core.pccs.sets["ride"].map["body"].map.Keys.ToList();
637 int index = list.IndexOf(ride.c_idRidePCC);
638 if (index == -1)
639 {
640 index = 0;
641 }
642 TrySetAct("ActChangeRideSkin", delegate
643 {
644 UIContextMenu uIContextMenu = EClass.ui.CreateContextMenuInteraction();
645 uIContextMenu.AddSlider("rideSkin", (float a) => list[(int)a].Split('-')[0] ?? "", index, delegate(float a)
646 {
647 ride.c_idRidePCC = list[(int)a];
648 ride._CreateRenderer();
649 }, 0f, list.Count - 1, isInt: true, hideOther: false);
650 uIContextMenu.Show();
651 return false;
652 }, c);
653 }
654 if (c.host != null && EClass.pc.held != null && altAction)
655 {
656 bool flag4 = true;
658 {
659 flag4 = false;
660 }
661 if (!c.IsDisabled && flag4 && c.CanAcceptGift(EClass.pc, EClass.pc.held))
662 {
663 string lang = "actGive";
664 if (c.Evalue(1232) > 0 && EClass.pc.held.trait is TraitDrinkMilkMother)
665 {
666 lang = "actMilk";
667 }
668 TrySetAct(lang, delegate
669 {
670 if (!c.IsValidGiftWeight(EClass.pc.held, 1))
671 {
672 c.Talk("tooHeavy");
673 return true;
674 }
676 {
677 Dialog.YesNo("dialogGive".lang(EClass.pc.held.GetName(NameStyle.Full, 1)), func);
678 }
679 else
680 {
681 func();
682 }
683 return true;
684 }, c);
685 }
686 }
687 }
688 if (input == ActInput.AllAction && EClass.pc.held != null && EClass.pc.held.trait is TraitDrink)
689 {
690 TrySetAct(c.IsPC ? "actPour" : "ActThrow", delegate
691 {
692 ActThrow.Throw(EClass.pc, c.pos, c, EClass.pc.held.Split(1));
693 return true;
694 }, (c.host != null) ? c : EClass.pc.held);
695 }
696 if (!c.IsPC && c.host == null && ((!EClass.pc.isBlind && flag3) || input != ActInput.AllAction))
697 {
698 if (c.isRestrained && (input == ActInput.AllAction || (!c.IsRestrainedResident && !c.IsHostile())))
699 {
700 TrySetAct("ActUnrestrain", delegate
701 {
702 c.TryUnrestrain(force: true, EClass.pc);
703 return true;
704 }, c);
705 }
706 if (!EClass.pc.isBlind && flag3 && input == ActInput.AllAction)
707 {
708 TrySetAct(ACT.Kick, c);
709 if (c.IsMofuable)
710 {
711 TrySetAct("ActCuddle", delegate
712 {
713 EClass.pc.Cuddle(c);
714 return true;
715 }, c);
716 }
718 {
719 TrySetAct("inspect", delegate
720 {
721 c.Inspect();
722 return false;
723 }, c);
724 }
725 }
726 }
727 }
728 else if (_c.isThing)
729 {
730 if (!EClass.pc.isBlind)
731 {
732 Thing t = _c.Thing;
733 if (input == ActInput.AllAction)
734 {
735 if ((EClass.debug.enable || EClass.player.HasKeyItem("license_illumination")) && t.LightData != null)
736 {
737 if (t.c_lightColor != 0)
738 {
739 TrySetAct("actClearLight", delegate
740 {
741 t.c_lightColor = 0;
742 t.RecalculateFOV();
743 t.renderer.GetTC<TCExtra>()?.RefreshColor();
744 return false;
745 }, t);
746 }
747 TrySetAct("actSetLight", delegate
748 {
749 Color lightColor = t.LightColor;
750 EClass.ui.AddLayer<LayerColorPicker>().SetColor(lightColor, lightColor, delegate(PickerState state, Color _c)
751 {
752 if (state == PickerState.Cancel)
753 {
754 t.c_lightColor = 0;
755 }
756 else
757 {
758 t.c_lightColor = (byte)Mathf.Clamp(_c.r * 32f, 1f, 31f) * 1024 + (byte)Mathf.Clamp(_c.g * 32f, 1f, 31f) * 32 + (byte)Mathf.Clamp(_c.b * 32f, 1f, 31f);
759 }
760 t.RecalculateFOV();
762 });
763 return false;
764 }, t);
765 }
767 {
768 TrySetAct("(debug) Toggle Float", delegate
769 {
770 t.isFloating = !t.isFloating;
771 return false;
772 }, t);
773 }
775 {
776 if (t.trait.CanEat(EClass.pc))
777 {
778 TrySetAct(new AI_Eat
779 {
780 target = t
781 }, t);
782 }
783 if (t.trait.CanDrink(EClass.pc))
784 {
786 {
787 target = t
788 }, t);
789 }
790 if (t.trait.CanRead(EClass.pc))
791 {
793 {
794 target = t
795 }, t);
796 }
797 if (t.trait.IsBlendBase)
798 {
799 TrySetAct("invBlend", delegate
800 {
802 return true;
803 }, t);
804 }
805 if (t.trait.CanName)
806 {
807 TrySetAct("changeName", delegate
808 {
809 Dialog.InputName("dialogChangeName", t.c_refText.IsEmpty(""), delegate(bool cancel, string text)
810 {
811 if (!cancel)
812 {
813 t.c_refText = text;
814 }
815 });
816 return false;
817 }, t);
818 }
819 }
820 }
821 if (isKey)
822 {
823 _ = t.trait.CanBeAttacked;
824 }
825 else
826 {
827 if (t.placeState == PlaceState.roaming && (_pos.cell.blocked || t.ignoreAutoPick || altAction || input == ActInput.AllAction || _pos.Equals(EClass.pc.pos)) && EClass.pc.CanPick(t))
828 {
829 listPick.Add(t);
830 }
831 if (t.IsInstalled)
832 {
833 t.trait.TrySetToggleAct(this);
834 t.trait.TrySetAct(this);
835 }
836 }
837 }
838 }
839 void func()
840 {
842 }
843 });
844 if (listPick.Count > 0)
845 {
846 if (listPick.Count == 1)
847 {
848 Thing _t = listPick[0];
850 {
851 TrySetAct("actPickOne", delegate
852 {
853 EClass.pc.Pick(_t);
854 return true;
855 }, listPick[0], CursorSystem.Hand, 1, isHostileAct: false, localAct: false);
856 }
857 }
858 else
859 {
860 IList<Card> _cards = items.Copy();
861 TrySetAct("actPickAll", delegate
862 {
863 foreach (Card item2 in _cards)
864 {
865 if (item2.isThing && item2.placeState == PlaceState.roaming)
866 {
867 EClass.pc.Pick(item2.Thing);
868 }
869 }
870 return true;
871 }, null, CursorSystem.Hand, 1, isHostileAct: false, localAct: false);
872 }
873 }
874 if (input == ActInput.AllAction && pos.IsSky && !EClass.game.IsSurvival)
875 {
876 TrySetAct("actSkyJump", delegate
877 {
879 return false;
880 });
881 }
882 if (_pos.Equals(cc.pos))
883 {
884 if (cc.held != null && !cc.held.IsHotItem)
885 {
886 TrySetAct("actPick", delegate
887 {
888 _ = cc.held;
889 cc.PickHeld(msg: true);
890 ActionMode.AdvOrRegion.updatePlans = true;
891 return false;
892 }, cc.held, CursorSystem.Inventory, 1, isHostileAct: false, localAct: false);
893 }
894 else if (!HasAct && !cc.isRestrained)
895 {
897 }
898 if (EClass.debug.enable)
899 {
900 showOrder = true;
901 }
902 if (input == ActInput.AllAction && EClass.pc.held != null && !EClass.pc.held.trait.CanOnlyCarry)
903 {
904 TrySetAct("actDrop", delegate
905 {
907 return true;
908 });
909 }
910 if (cc.isRestrained)
911 {
912 TrySetAct("ActUnrestrain", delegate
913 {
914 cc.TryUnrestrain(force: true, EClass.pc);
915 return true;
916 }, cc);
917 }
918 }
919 }
920 if (list.Count == 0 && input == ActInput.AllAction && EClass.pc.held == null && pos.cell.IsSnowTile && !pos.IsBlocked && !pos.HasObj && !pos.HasThing)
921 {
923 {
924 pos = pos.Copy()
925 });
926 }
927 if (list.Count != 0 && input != ActInput.AllAction)
928 {
929 return;
930 }
931 items.ForeachReverse(delegate(Card _c)
932 {
933 if (_c.isThing && _c.trait.CanBeAttacked && !(_c.trait is TraitTrainingDummy))
934 {
935 TrySetAct(ACT.Melee, _c);
936 }
937 });
938 }
939 else
940 {
941 if (input != ActInput.RightMouse)
942 {
943 return;
944 }
945 if (pos.cell.outOfBounds || EClass.ui.IsDragging)
946 {
947 return;
948 }
950 if (!hotItem.IsGameAction)
951 {
952 TrySetAct(hotItem.Name, delegate
953 {
954 hotItem.OnClick(hotItem.button, hotItem.hotbar);
955 return false;
956 }, null, -1);
957 }
958 else
959 {
960 hotItem.TrySetAct(this);
961 }
962 bool flag = EClass.game.config.autoCombat.enable && EClass.scene.mouseTarget.TargetChara != null && EClass.scene.mouseTarget.TargetChara.mimicry == null;
963 if (hotItem.Thing != null && hotItem.Thing.trait.DisableAutoCombat)
964 {
965 flag = false;
966 }
967 if (flag)
968 {
970 bool flag2 = true;
971 if (targetChara.hostility >= Hostility.Friend)
972 {
973 flag2 = false;
974 }
976 {
977 flag2 = false;
978 }
979 if (list.Count >= 2)
980 {
981 flag2 = false;
982 }
983 if (list.Count == 1)
984 {
985 if (targetChara.hostility >= Hostility.Neutral)
986 {
987 flag2 = false;
988 }
989 if (!list[0].act.ShowAuto)
990 {
991 flag2 = false;
992 }
993 if (EClass.player.currentHotItem is HotItemNoItem && targetChara.hostility <= Hostility.Enemy)
994 {
995 flag2 = true;
996 }
997 }
998 if (flag2)
999 {
1000 list.Clear();
1001 TrySetAct(new GoalAutoCombat(targetChara));
1002 }
1003 }
1004 if (list.Count == 0 && !EClass.core.config.test.toolNoPick)
1005 {
1007 }
1008 if ((bool)WidgetCurrentTool.Instance)
1009 {
1011 }
1012 }
1013 }
1014}
ActInput
Definition: ActInput.cs:2
Hostility
Definition: Hostility.cs:2
PickerState
Definition: PickerState.cs:2
PlaceState
Definition: PlaceState.cs:2
if(item3.idFile==idFirstFile &&item3.id==idFirstTopic)
Definition: UIBook.cs:627
Definition: ACT.cs:6
static ActChat Chat
Definition: ACT.cs:9
static new ActWait Wait
Definition: ACT.cs:7
static ActKick Kick
Definition: ACT.cs:13
static ActMelee Melee
Definition: ACT.cs:15
Definition: AIAct.cs:6
virtual bool UseTurbo
Definition: AIAct.cs:88
virtual bool IsRunning
Definition: AIAct.cs:31
void Reset()
Definition: AIAct.cs:330
Definition: AI_Eat.cs:5
Definition: AM_Adv.cs:6
static int actCount
Definition: AM_Adv.cs:101
void SetTurbo(int mtp=-1)
Definition: AM_Adv.cs:1040
string GetText(bool showName)
Definition: ActPlan.cs:46
Card tc
Definition: ActPlan.cs:24
bool HideHint
Definition: ActPlan.cs:31
Point pos
Definition: ActPlan.cs:26
bool Perform(bool repeated=false)
Definition: ActPlan.cs:56
string GetTextContext(bool showName)
Definition: ActPlan.cs:51
Chara cc
Definition: ActPlan.cs:28
void Add(Act a, string s="")
Definition: ActPlan.cs:11
int dist
Definition: ActPlan.cs:168
bool _canInteractNeighbor
Definition: ActPlan.cs:162
bool HideRightInfo
Definition: ActPlan.cs:235
bool altAction
Definition: ActPlan.cs:158
bool showOrder
Definition: ActPlan.cs:164
bool ShowAct
Definition: ActPlan.cs:249
Thing tool
Definition: ActPlan.cs:170
Chara cc
Definition: ActPlan.cs:204
Act lastAct
Definition: ActPlan.cs:174
static bool warning
Definition: ActPlan.cs:150
bool HasMultipleTargets
Definition: ActPlan.cs:265
bool ignoreAddCondition
Definition: ActPlan.cs:160
bool IsNeighborBlocked
Definition: ActPlan.cs:181
CursorInfo CursorIcon
Definition: ActPlan.cs:207
ActInput input
Definition: ActPlan.cs:154
string GetText(bool showName)
Definition: ActPlan.cs:276
Point pos
Definition: ActPlan.cs:152
void Update(PointTarget target)
Definition: ActPlan.cs:435
Func< bool > GetAction()
Definition: ActPlan.cs:289
void Order(string id)
Definition: ActPlan.cs:320
bool IsSelfOrNeighbor
Definition: ActPlan.cs:178
bool IsSelf
Definition: ActPlan.cs:176
bool TrySetAct(Act _act, Card _tc=null)
Definition: ActPlan.cs:391
void ShowContextMenu()
Definition: ActPlan.cs:326
List< Thing > listPick
Definition: ActPlan.cs:172
List list
Definition: ActPlan.cs:166
bool WillEndTurn
Definition: ActPlan.cs:223
void _Update(PointTarget target)
Definition: ActPlan.cs:469
void Clear()
Definition: ActPlan.cs:429
bool TrySetAct(string lang, Func< bool > onPerform, Card tc, CursorInfo cursor=null, int dist=1, bool isHostileAct=false, bool localAct=true, bool canRepeat=false)
Definition: ActPlan.cs:368
bool TrySetAct(string lang, Func< bool > onPerform, CursorInfo cursor=null, int dist=1)
Definition: ActPlan.cs:381
bool performed
Definition: ActPlan.cs:156
bool canRepeat
Definition: ActPlan.cs:193
bool HasAct
Definition: ActPlan.cs:246
static bool SearchMedal(Chara c, Point p)
Definition: ActWait.cs:22
Definition: ACT.cs:62
virtual bool Perform()
Definition: ACT.cs:266
static Card TC
Definition: ACT.cs:79
virtual bool IsAct
Definition: ACT.cs:101
static Point TP
Definition: ACT.cs:81
virtual int PerformDistance
Definition: ACT.cs:139
static Chara CC
Definition: ACT.cs:77
virtual string ID
Definition: ACT.cs:99
virtual string GetTextSmall(Card c)
Definition: ACT.cs:232
virtual string GetText(string str="")
Definition: ACT.cs:215
virtual bool CanPerform()
Definition: ACT.cs:303
static AM_Adv Adv
Definition: ActionMode.cs:15
TC GetTC(string id)
Definition: Card.cs:11
bool IsPCFactionOrMinion
Definition: Card.cs:2275
virtual bool isThing
Definition: Card.cs:2082
virtual Chara Chara
Definition: Card.cs:2071
bool isNPCProperty
Definition: Card.cs:555
bool IsRestrainedResident
Definition: Card.cs:2261
bool isFloating
Definition: Card.cs:651
bool isRestrained
Definition: Card.cs:567
bool ignoreAutoPick
Definition: Card.cs:507
string c_refText
Definition: Card.cs:1630
string Name
Definition: Card.cs:2140
bool IsHotItem
Definition: Card.cs:120
PlaceState placeState
Definition: Card.cs:84
void RecalculateFOV()
Definition: Card.cs:6534
Point pos
Definition: Card.cs:60
int c_lightColor
Definition: Card.cs:1097
Trait trait
Definition: Card.cs:54
string c_idRidePCC
Definition: Card.cs:1654
bool IsInstalled
Definition: Card.cs:2384
virtual bool isChara
Definition: Card.cs:2084
virtual Thing Thing
Definition: Card.cs:2059
int Evalue(int ele)
Definition: Card.cs:2574
int Dist(Card c)
Definition: Card.cs:7842
LightData LightData
Definition: Card.cs:2433
void TryUnrestrain(bool force=false, Chara c=null)
Definition: Card.cs:7275
Color LightColor
Definition: Card.cs:1109
void Inspect()
Definition: Card.cs:8027
void SayRaw(string text, string ref1=null, string ref2=null)
Definition: Card.cs:6974
CardRenderer renderer
Definition: Card.cs:62
bool HasElement(int ele, bool includeNagative=false)
Definition: Card.cs:6065
bool IsSnowTile
Definition: Cell.cs:782
bool IsTopWater
Definition: Cell.cs:700
bool outOfBounds
Definition: Cell.cs:414
Definition: Chara.cs:10
override bool IsAliveInCurrentZone
Definition: Chara.cs:563
Card held
Definition: Chara.cs:70
bool CanAcceptGift(Chara c, Card t)
Definition: Chara.cs:8231
AIAct ai
Definition: Chara.cs:204
void Cuddle(Chara c, bool headpat=false)
Definition: Chara.cs:6264
bool CanPick(Card c)
Definition: Chara.cs:4290
override bool IsPC
Definition: Chara.cs:614
Chara host
Definition: Chara.cs:33
bool IsValidGiftWeight(Card t, int num=-1)
Definition: Chara.cs:8200
bool IsMofuable
Definition: Chara.cs:1113
override bool IsPCParty
Definition: Chara.cs:617
void PickHeld(bool msg=false)
Definition: Chara.cs:4544
bool HasCondition(string alias)
Definition: Chara.cs:9430
void Banish(Chara owner)
Definition: Chara.cs:2364
AIAct SetAI(AIAct g)
Definition: Chara.cs:8899
override bool IsDisabled
Definition: Chara.cs:587
override bool IsMinion
Definition: Chara.cs:629
override bool isSynced
Definition: Chara.cs:693
ConTransmuteMimic mimicry
Definition: Chara.cs:106
override CardRenderer _CreateRenderer()
Definition: Chara.cs:6650
override bool IsPCFaction
Definition: Chara.cs:673
override bool IsPCPartyMinion
Definition: Chara.cs:641
bool CanSee(Card c)
Definition: Chara.cs:1232
override bool IsPCFactionMinion
Definition: Chara.cs:657
void SetAIImmediate(AIAct g)
Definition: Chara.cs:8931
bool CanInteractTo(Card c)
Definition: Chara.cs:2551
static NoGoal _NoGoalRepeat
Definition: Chara.cs:200
bool HasNoGoal
Definition: Chara.cs:1002
void DropThing(Thing t, int num=-1)
Definition: Chara.cs:4641
void GiveGift(Chara c, Thing t)
Definition: Chara.cs:8256
Quest quest
Definition: Chara.cs:24
bool isBlind
Definition: Chara.cs:132
void FallFromZone()
Definition: Chara.cs:3516
Hostility hostility
Definition: Chara.cs:293
Card SplitHeld(int a)
Definition: Chara.cs:4604
bool IsHostile()
Definition: Chara.cs:6533
bool isDead
Definition: Chara.cs:391
Thing Pick(Thing t, bool msg=true, bool tryStack=true)
Definition: Chara.cs:4328
bool IsEscorted()
Definition: Chara.cs:2428
bool IsNeutral()
Definition: Chara.cs:6580
virtual void TrySetAct(ActPlan p)
new GameConfig game
Definition: CoreConfig.cs:609
bool showExtra
Definition: CoreDebug.cs:168
bool enable
Definition: CoreDebug.cs:286
PCCManager pccs
Definition: Core.cs:41
CoreConfig config
Definition: Core.cs:70
static CursorInfo Arrow
Definition: CursorSystem.cs:46
static CursorInfo Hand
Definition: CursorSystem.cs:60
static CursorInfo Inventory
Definition: CursorSystem.cs:92
static CursorInfo Notice
Definition: CursorSystem.cs:76
static CursorInfo MoveZone
Definition: CursorSystem.cs:86
Definition: Dialog.cs:7
static bool warned
Definition: Dialog.cs:49
static Dialog InputName(string langDetail, string text, Action< bool, string > onClose, InputType inputType=InputType.Default)
Definition: Dialog.cs:528
static void TryWarnDisassemble(Action action)
Definition: Dialog.cs:406
static void TryWarnCrime(Action action)
Definition: Dialog.cs:376
Definition: EClass.cs:6
static Game game
Definition: EClass.cs:9
static Scene scene
Definition: EClass.cs:31
static ColorProfile Colors
Definition: EClass.cs:39
static Core core
Definition: EClass.cs:7
static Zone _zone
Definition: EClass.cs:21
static Map _map
Definition: EClass.cs:19
static Player player
Definition: EClass.cs:13
static Chara pc
Definition: EClass.cs:15
static CoreDebug debug
Definition: EClass.cs:49
static UI ui
Definition: EClass.cs:17
ConfigAutoCombat autoCombat
Definition: Game.cs:94
bool IsSurvival
Definition: Game.cs:276
Config config
Definition: Game.cs:219
QuestManager quests
Definition: Game.cs:183
static bool disableTool
Definition: HotItemHeld.cs:11
static bool _TrySetAct(ActPlan p)
virtual void SetImage(Image icon)
Definition: HotItem.cs:91
virtual bool TrySetAct(ActPlan p)
Definition: HotItem.cs:107
virtual bool IsGameAction
Definition: HotItem.cs:46
virtual Thing Thing
Definition: HotItem.cs:38
static LayerDragGrid Create(InvOwnerDraglet owner, bool refuelFromLayerDragGrid=false)
static LayerInventory CreateContainer(Card owner)
List< Chara > charas
Definition: Map.cs:81
bool CanExitBorder(Point p)
Definition: Player.cs:1891
bool HasKeyItem(string alias)
Definition: Player.cs:2165
void EndTurn(bool consume=true)
Definition: Player.cs:2083
void EnterLocalZone(bool encounter=false, Chara mob=null)
Definition: Player.cs:1948
void ExitBorder(ActPlan p=null)
Definition: Player.cs:1849
HotItem currentHotItem
Definition: Player.cs:1100
bool isValid
Definition: PointTarget.cs:30
Chara TargetChara
Definition: PointTarget.cs:41
Definition: Point.cs:9
List< Card > ListCards(bool includeMasked=false)
Definition: Point.cs:1051
Point Copy()
Definition: Point.cs:491
bool IsSky
Definition: Point.cs:224
Point Set(int _x, int _z)
Definition: Point.cs:503
bool IsBlocked
Definition: Point.cs:363
bool HasThing
Definition: Point.cs:251
bool Equals(int _x, int _z)
Definition: Point.cs:960
bool IsValid
Definition: Point.cs:88
bool HasObj
Definition: Point.cs:137
int Distance(Point p)
Definition: Point.cs:989
bool IsHidden
Definition: Point.cs:347
Cell cell
Definition: Point.cs:51
Thing FindThing(Func< Thing, bool > func)
Definition: Point.cs:1140
bool IsDeliverTarget(Chara c)
PointTarget mouseTarget
Definition: Scene.cs:135
virtual bool IsRegion
Definition: Spatial.cs:515
void RefreshColor()
Definition: TCExtra.cs:171
Definition: Task.cs:4
Definition: Thing.cs:8
virtual bool AllowTraining
Definition: TraitShackle.cs:15
virtual bool IsBlendBase
Definition: Trait.cs:275
virtual bool CanBeAttacked
Definition: Trait.cs:177
virtual bool IsTool
Definition: Trait.cs:379
virtual void TrySetAct(ActPlan p)
Definition: Trait.cs:1056
virtual bool CanRead(Chara c)
Definition: Trait.cs:991
virtual void TrySetToggleAct(ActPlan p)
Definition: Trait.cs:1262
virtual bool CanName
Definition: Trait.cs:147
virtual bool CanEat(Chara c)
Definition: Trait.cs:1000
virtual bool DisableAutoCombat
Definition: Trait.cs:211
virtual bool CanDrink(Chara c)
Definition: Trait.cs:1009
virtual bool CanOnlyCarry
Definition: Trait.cs:305
virtual string Name
Definition: UIButton.cs:19
void Show(UIItem i)
UIContextMenuItem AddSlider(string text, Func< float, string > textFunc, float value, Action< float > action, float min=0f, float max=1f, bool isInt=false, bool hideOther=true, bool useInput=false)
void AddButton(Func< string > funcText, UnityAction action=null)
UIContextMenu AddChild(string idLang, TextAnchor anchor)
static WidgetCurrentTool Instance
UIPlaceHelper placer
virtual bool IsUserZone
Definition: Zone.cs:271
ZoneInstance instance
Definition: Zone.cs:55
bool IsCrime(Chara c, Act act)
Definition: Zone.cs:3579