Elin Decompiled Documentation EA 23.331 Nightly
Loading...
Searching...
No Matches
TaskClean.cs
Go to the documentation of this file.
1using System.Collections.Generic;
2using System.Linq;
3
4public class TaskClean : Task
5{
6 public Point dest;
7
8 public override string GetText(string str = "")
9 {
10 return "actClean".lang();
11 }
12
13 public static bool CanClean(Point p)
14 {
15 if (!p.HasDirt)
16 {
17 return p.cell.HasLiquid;
18 }
19 return true;
20 }
21
22 public override bool CanPerform()
23 {
24 return CanClean(dest);
25 }
26
27 public override bool CanManualCancel()
28 {
29 return true;
30 }
31
32 public override IEnumerable<Status> Run()
33 {
34 while (true)
35 {
36 int range = owner.Tool?.Evalue(770) ?? 0;
37 range = ((range <= 0) ? 1 : (2 + range / 10));
38 dest = GetTarget(dest, range);
39 if (dest == null)
40 {
41 yield return Success();
42 }
43 yield return DoGoto(dest, 1);
44 if (!CanClean(dest) || owner.Dist(dest) > 1)
45 {
46 yield return Cancel();
47 }
48 for (int i = 0; i < ((!dest.cell.HasLiquid) ? 1 : 5); i++)
49 {
52 yield return KeepRunning();
53 }
54 EClass.pc.Say("clean", owner);
55 EClass.pc.PlaySound("clean_floor");
56 if (range > 1)
57 {
58 List<Point> list = EClass._map.ListPointsInSquare(dest, range - 1, mustBeWalkable: false);
59 list.Sort((Point a, Point b) => a.Distance(dest) - b.Distance(dest));
60 foreach (Point item in list)
61 {
62 if (owner == null || owner.isDead)
63 {
64 break;
65 }
66 Clean(item);
67 }
68 }
69 else
70 {
71 Clean(dest);
72 }
73 yield return KeepRunning();
74 }
75 static void Clean(Point p)
76 {
77 if (CanClean(p))
78 {
79 EClass._map.SetDecal(p.x, p.z);
80 EClass._map.SetLiquid(p.x, p.z, 0, 0);
81 p.PlayEffect("vanish");
82 EClass.pc.ModExp(293, 30);
84 EClass.pc.stamina.Mod(-1);
85 }
86 }
87 }
88
89 public static Point GetTarget(Point dest, int ranage)
90 {
91 List<Point> list = new List<Point>();
92 foreach (Point item in EClass._map.ListPointsInCircle(dest, 2 + ranage * 2, mustBeWalkable: false))
93 {
94 if (CanClean(item) && item.IsInBounds)
95 {
96 list.Add(item);
97 }
98 }
99 if (list.Count == 0)
100 {
101 return null;
102 }
103 list.Sort((Point a, Point b) => dest.Distance(a) - dest.Distance(b));
104 return list.First();
105 }
106}
new Chara owner
Definition: AIAct.cs:14
Status DoGoto(Point pos, int dist=0, bool ignoreConnection=false, Func< Status > _onChildFail=null)
Definition: AIAct.cs:446
Status KeepRunning()
Definition: AIAct.cs:335
virtual void NextFrame()
SoundSource PlaySound(string id, float v=1f, bool spatial=true)
Definition: Card.cs:6613
Thing Tool
Definition: Card.cs:2480
int Evalue(int ele)
Definition: Card.cs:2704
int Dist(Card c)
Definition: Card.cs:8172
void ModExp(string alias, int a)
Definition: Card.cs:2781
CardRenderer renderer
Definition: Card.cs:64
void Say(string lang, string ref1=null, string ref2=null)
Definition: Card.cs:7291
bool HasLiquid
Definition: Cell.cs:681
Stats stamina
Definition: Chara.cs:1205
bool isDead
Definition: Chara.cs:393
override void LookAt(Card c)
Definition: Chara.cs:3752
Definition: EClass.cs:6
static Map _map
Definition: EClass.cs:19
static Player player
Definition: EClass.cs:13
static Chara pc
Definition: EClass.cs:15
void SetLiquid(int x, int z, CellEffect effect=null)
Definition: Map.cs:1523
void SetDecal(int x, int z, int id=0, int amount=1, bool refresh=true)
Definition: Map.cs:2097
List< Point > ListPointsInSquare(Point center, int radius, bool mustBeWalkable=true, bool los=true)
Definition: Map.cs:2337
List< Point > ListPointsInCircle(Point center, float radius, bool mustBeWalkable=true, bool los=true)
Definition: Map.cs:2324
long clean
Definition: Player.cs:225
Stats stats
Definition: Player.cs:1083
Definition: Point.cs:9
bool HasDirt
Definition: Point.cs:85
int x
Definition: Point.cs:36
int z
Definition: Point.cs:39
Effect PlayEffect(string id)
Definition: Point.cs:1254
int Distance(Point p)
Definition: Point.cs:995
Cell cell
Definition: Point.cs:51
virtual void Mod(int a)
Definition: Stats.cs:135
override bool CanPerform()
Definition: TaskClean.cs:22
static bool CanClean(Point p)
Definition: TaskClean.cs:13
Point dest
Definition: TaskClean.cs:6
static Point GetTarget(Point dest, int ranage)
Definition: TaskClean.cs:89
override IEnumerable< Status > Run()
Definition: TaskClean.cs:32
override bool CanManualCancel()
Definition: TaskClean.cs:27
override string GetText(string str="")
Definition: TaskClean.cs:8
Definition: Task.cs:4
override Status Cancel()
Definition: Task.cs:54