Elin Decompiled Documentation EA 23.153 Nightly
Loading...
Searching...
No Matches
ACT.cs
Go to the documentation of this file.
1using System.Collections.Generic;
2using UnityEngine;
3using UnityEngine.UI;
4
5public class ACT : EClass
6{
7 public new static ActWait Wait = new ActWait();
8
9 public static ActChat Chat = new ActChat();
10
11 public static ActPick Pick = new ActPick();
12
13 public static ActKick Kick = new ActKick();
14
15 public static ActMelee Melee = new ActMelee();
16
17 public static ActRanged Ranged = new ActRanged();
18
19 public static ActThrow Throw = new ActThrow();
20
21 public static ActItem Item = new ActItem();
22
23 public static Dictionary<string, Act> dict = new Dictionary<string, Act>();
24
25 public static void Init()
26 {
27 foreach (SourceElement.Row row in EClass.sources.elements.rows)
28 {
29 if (row.group == "ABILITY" || row.group == "SPELL")
30 {
31 dict[row.alias] = Create(row);
32 }
33 }
34 }
35
36 public static Act Create(int id)
37 {
38 return Create(EClass.sources.elements.map.TryGetValue(id, 6003));
39 }
40
41 public static Act Create(string id)
42 {
43 return Create(EClass.sources.elements.alias[id]);
44 }
45
46 public static Act Create(SourceElement.Row row)
47 {
48 if (row == null)
49 {
50 row = EClass.sources.elements.alias["AI_SelfHarm"];
51 }
52 Act act = ClassCache.Create<Act>(row.type.IsEmpty(row.alias), "Elin") ?? new Act();
53 if (act != null)
54 {
55 act.id = row.id;
56 act._source = row;
57 }
58 return act;
59 }
60}
61public class Act : Element
62{
63 public enum CostType
64 {
65 None,
66 MP,
67 SP
68 }
69
70 public struct Cost
71 {
72 public int cost;
73
74 public CostType type;
75 }
76
77 public static Chara CC;
78
79 public static Card TC;
80
81 public static Point TP = new Point();
82
83 public static Thing TOOL;
84
85 public static int powerMod = 100;
86
87 public static bool forcePt;
88
89 public static Act CurrentAct;
90
91 public override bool ShowPotential => false;
92
93 public override bool UsePotential => false;
94
95 public override bool ShowRelativeAttribute => true;
96
98
99 public virtual string ID => base.source.alias;
100
101 public virtual bool IsAct => true;
102
103 public virtual bool WillEndTurn => true;
104
105 public virtual bool CloseLayers => true;
106
107 public virtual int LeftHand => 0;
108
109 public virtual int RightHand => 0;
110
111 public virtual int ElementPowerMod => base.source.eleP;
112
113 public virtual bool ShowMapHighlight => false;
114
115 public virtual bool ShowMapHighlightBlock => false;
116
117 public virtual bool PickHeldOnStart => false;
118
119 public virtual bool DropHeldOnStart => false;
120
121 public virtual bool CanPressRepeat => false;
122
123 public virtual bool CanAutofire => false;
124
125 public virtual bool ResetAxis => false;
126
127 public virtual bool RequireTool => false;
128
129 public virtual bool IsHostileAct => false;
130
131 public virtual bool HideRightInfo => false;
132
134
135 public virtual float Radius => base.source.radius;
136
137 public virtual int PerformDistance => 1;
138
139 public virtual int MaxRadius => 99;
140
141 public virtual TargetType TargetType
142 {
143 get
144 {
145 if (!base.source.target.IsEmpty())
146 {
147 switch (base.source.target)
148 {
149 case "Enemy":
150 return TargetType.Enemy;
151 case "Chara":
152 return TargetType.Chara;
153 case "Ground":
154 return TargetType.Ground;
155 case "Neighbor":
157 case "Self":
158 return TargetType.Self;
159 case "Select":
160 return TargetType.Select;
161 case "Party":
162 return TargetType.Party;
163 case "SelfParty":
164 return TargetType.SelfParty;
165 }
166 }
167 return TargetType.Any;
168 }
169 }
170
171 public virtual bool LocalAct => true;
172
173 public virtual bool CanRapidFire => false;
174
175 public virtual float RapidDelay => 0.2f;
176
177 public virtual bool ShowAuto => false;
178
179 public virtual bool IsCrime => EClass._zone.IsCrime(EClass.pc, this);
180
181 public virtual CursorInfo GetCursorIcon(Card c)
182 {
183 return CursorIcon;
184 }
185
186 public virtual MultiSprite GetStateIcon()
187 {
188 return null;
189 }
190
191 public override Sprite GetSprite()
192 {
193 return base.source.GetSprite();
194 }
195
196 public virtual bool ShowMouseHint(Card c)
197 {
198 return true;
199 }
200
201 public virtual bool IsValidTC(Card c)
202 {
203 if (!c.isChara)
204 {
205 return c.trait.CanBeAttacked;
206 }
207 return true;
208 }
209
210 public virtual string GetHintText(string str = "")
211 {
212 return GetText(str);
213 }
214
215 public virtual string GetText(string str = "")
216 {
217 if (base.source != null)
218 {
219 id = base.source.id;
220 }
221 if (id == 0)
222 {
223 if (!Lang.Has(ToString()))
224 {
225 return ToString() + "/" + base.source?.ToString() + "/" + id;
226 }
227 return Lang.Get(ToString());
228 }
229 return Lang.ParseRaw(base.source.GetName(), str);
230 }
231
232 public virtual string GetTextSmall(Card c)
233 {
234 if (c == null)
235 {
236 return null;
237 }
238 return c.Name + c.GetExtraName();
239 }
240
242 {
243 if (base.source.abilityType.Length != 0)
244 {
245 switch (base.source.abilityType[0])
246 {
247 case "debuff":
248 case "debuffStats":
249 case "attack":
250 case "dot":
251 return true;
252 }
253 }
254 return false;
255 }
256
257 public virtual Color GetActPlanColor()
258 {
259 if (!IsCrime)
260 {
261 return EClass.Colors.colorAct;
262 }
264 }
265
266 public virtual bool Perform()
267 {
268 int num = id;
269 if ((num == 8230 || num == 8232) && TC.isThing)
270 {
271 int power = CC.elements.GetOrCreateElement(base.source.id).GetPower(CC);
272 ActEffect.Proc(base.source.proc[0].ToEnum<EffectId>(), power, BlessedState.Normal, CC, TC);
273 return true;
274 }
275 if (base.source.proc.Length != 0)
276 {
277 string text = base.source.aliasRef.IsEmpty(CC.MainElement.source.alias);
278 string text2 = base.source.proc[0];
279 if (text2 == "LulwyTrick" || text2 == "BuffStats")
280 {
281 text = base.source.proc[1];
282 }
283 else if (text == "mold")
284 {
285 text = CC.MainElement.source.alias;
286 }
287 if (TargetType.Range == TargetRange.Self && !forcePt)
288 {
289 TC = CC;
290 TP.Set(CC.pos);
291 }
292 int power2 = CC.elements.GetOrCreateElement(base.source.id).GetPower(CC);
293 ActEffect.ProcAt(base.source.proc[0].ToEnum<EffectId>(), power2, BlessedState.Normal, CC, TC, TP, base.source.tag.Contains("neg"), new ActRef
294 {
295 n1 = base.source.proc.TryGet(1, returnNull: true),
296 aliasEle = text,
297 act = this
298 });
299 }
300 return true;
301 }
302
303 public virtual bool CanPerform()
304 {
305 return true;
306 }
307
308 public bool Perform(Chara _cc, Card _tc = null, Point _tp = null)
309 {
310 if (CanPerform(_cc, _tc, _tp))
311 {
312 return Perform();
313 }
314 return false;
315 }
316
317 public bool CanPerform(Chara _cc, Card _tc = null, Point _tp = null)
318 {
319 CC = _cc;
320 TC = _tc;
321 TP.Set(_tp ?? TC?.pos ?? CC.pos);
323 if (forcePt && tt.Range == TargetRange.Self && !CC.IsPC)
324 {
325 tt = TargetType.Chara;
326 }
328 {
329 return false;
330 }
331 if (tt.Range == TargetRange.Self)
332 {
333 TP.Set(CC.pos);
334 return CanPerform();
335 }
337 {
338 Chara firstChara = TP.FirstChara;
339 if (firstChara != null && firstChara.IsPCFactionOrMinion)
340 {
341 bool flag = base.source.tag.Contains("neg");
342 if (base.source.id != 6011 && flag && !EInput.isShiftDown)
343 {
344 return false;
345 }
346 }
347 }
348 if (!(this is ActMelee) && tt.Range == TargetRange.Chara && (TC == null || !CC.CanSee(TC)))
349 {
350 return false;
351 }
352 bool distCheck = DistCheck(CC.pos, TP);
353 if (!distCheck && (CC.IsMultisize || (TC != null && TC.IsMultisize)))
354 {
355 if (CC.IsMultisize)
356 {
357 CC.ForeachPoint(delegate(Point p, bool main)
358 {
359 DistCheckMulti(p, TC);
360 });
361 }
362 else
363 {
364 DistCheckMulti(CC.pos, TC);
365 }
366 }
367 if (!distCheck)
368 {
369 return false;
370 }
371 return CanPerform();
372 bool DistCheck(Point p1, Point p2)
373 {
374 int num = p1.Distance(p2);
375 if (tt.RequireLos)
376 {
377 if (CC.IsPC)
378 {
379 if (!p2.IsSync)
380 {
381 return false;
382 }
383 }
384 else if ((num != 1 || !CC.IsMultisize) && !Los.IsVisible(p1, p2))
385 {
386 return false;
387 }
388 }
389 if (num >= tt.LimitDist)
390 {
391 return false;
392 }
393 if (num >= MaxRadius)
394 {
395 return false;
396 }
397 if (tt.RequireChara && !p2.HasChara)
398 {
399 return false;
400 }
401 if (tt.CanOnlyTargetEnemy)
402 {
403 foreach (Chara chara in p2.Charas)
404 {
405 if (CC.IsHostile(chara))
406 {
407 return true;
408 }
409 }
410 return false;
411 }
412 return true;
413 }
414 void DistCheckMulti(Point p1, Card c)
415 {
416 if (c == null && !distCheck)
417 {
418 distCheck = DistCheck(p1, TP);
419 }
420 else
421 {
422 c.ForeachPoint(delegate(Point p, bool main)
423 {
424 if (!distCheck)
425 {
426 distCheck = DistCheck(p1, p);
427 }
428 });
429 }
430 }
431 }
432
433 public static void SetReference(Chara _cc, Card _tc = null, Point _tp = null)
434 {
435 CC = _cc;
436 TC = _tc;
437 TP.Set(_tp ?? TC.pos);
438 }
439
440 public virtual bool IsToolValid()
441 {
442 if (CC == EClass.pc && TOOL != null)
443 {
444 return TOOL.parent == EClass.pc;
445 }
446 return false;
447 }
448
449 public static void SetTool(Thing t)
450 {
451 TOOL = t;
452 }
453
454 public new void SetImage(Image image)
455 {
456 image.sprite = GetSprite() ?? EClass.core.refs.icons.defaultAbility;
457 if (!base.source.aliasRef.IsEmpty())
458 {
459 image.color = EClass.setting.elements[base.source.aliasRef].colorSprite;
460 }
461 else
462 {
463 image.color = Color.white;
464 }
465 image.rectTransform.pivot = new Vector2(0.5f, 0.5f);
466 image.SetNativeSize();
467 }
468
469 public virtual void OnMarkMapHighlights()
470 {
471 EClass._map.ForeachSphere(EClass.pc.pos.x, EClass.pc.pos.z, base.act.MaxRadius, delegate(Point p)
472 {
473 if (!p.HasBlock && ShouldMapHighlight(p))
474 {
475 p.SetHighlight(8);
476 }
477 });
478 }
479
480 public virtual bool ShouldMapHighlight(Point p)
481 {
482 if (base.act.TargetType.ShowMapHighlight && base.act.ShowMapHighlight)
483 {
484 return base.act.CanPerform(EClass.pc, null, p);
485 }
486 return false;
487 }
488}
BlessedState
Definition: BlessedState.cs:2
EffectId
Definition: EffectId.cs:2
TargetRange
Definition: TargetRange.cs:2
Definition: ACT.cs:6
static ActRanged Ranged
Definition: ACT.cs:17
static ActPick Pick
Definition: ACT.cs:11
static Dictionary< string, Act > dict
Definition: ACT.cs:23
static Act Create(string id)
Definition: ACT.cs:41
static Act Create(SourceElement.Row row)
Definition: ACT.cs:46
static ActThrow Throw
Definition: ACT.cs:19
static Act Create(int id)
Definition: ACT.cs:36
static void Init()
Definition: ACT.cs:25
static ActChat Chat
Definition: ACT.cs:9
static ActKick Kick
Definition: ACT.cs:13
static ActMelee Melee
Definition: ACT.cs:15
static ActItem Item
Definition: ACT.cs:21
static void Proc(EffectId id, Card cc, Card tc=null, int power=100, ActRef actRef=default(ActRef))
Definition: ActEffect.cs:830
static void ProcAt(EffectId id, int power, BlessedState state, Card cc, Card tc, Point tp, bool isNeg, ActRef actRef=default(ActRef))
Definition: ActEffect.cs:407
Definition: ACT.cs:62
CostType
Definition: ACT.cs:64
override bool UsePotential
Definition: ACT.cs:93
virtual float Radius
Definition: ACT.cs:135
virtual CursorInfo CursorIcon
Definition: ACT.cs:97
virtual bool Perform()
Definition: ACT.cs:266
virtual bool CloseLayers
Definition: ACT.cs:105
virtual bool IsToolValid()
Definition: ACT.cs:440
virtual bool CanAutofire
Definition: ACT.cs:123
static Card TC
Definition: ACT.cs:79
virtual bool ShowAuto
Definition: ACT.cs:177
virtual bool CanPressRepeat
Definition: ACT.cs:121
virtual string GetHintText(string str="")
Definition: ACT.cs:210
virtual bool LocalAct
Definition: ACT.cs:171
override Sprite GetSprite()
Definition: ACT.cs:191
virtual bool ShowMapHighlightBlock
Definition: ACT.cs:115
virtual bool PickHeldOnStart
Definition: ACT.cs:117
virtual bool IsValidTC(Card c)
Definition: ACT.cs:201
virtual bool ShowMouseHint(Card c)
Definition: ACT.cs:196
virtual bool IsAct
Definition: ACT.cs:101
virtual bool IsHostileAct
Definition: ACT.cs:129
virtual bool ShowMapHighlight
Definition: ACT.cs:113
virtual int ElementPowerMod
Definition: ACT.cs:111
static Act CurrentAct
Definition: ACT.cs:89
virtual CursorInfo GetCursorIcon(Card c)
Definition: ACT.cs:181
static Point TP
Definition: ACT.cs:81
virtual int RightHand
Definition: ACT.cs:109
virtual bool HideRightInfo
Definition: ACT.cs:131
virtual bool IsCrime
Definition: ACT.cs:179
static bool forcePt
Definition: ACT.cs:87
static void SetTool(Thing t)
Definition: ACT.cs:449
virtual int PerformDistance
Definition: ACT.cs:137
virtual void OnMarkMapHighlights()
Definition: ACT.cs:469
static int powerMod
Definition: ACT.cs:85
virtual bool WillEndTurn
Definition: ACT.cs:103
virtual TargetType TargetType
Definition: ACT.cs:142
virtual bool ShouldMapHighlight(Point p)
Definition: ACT.cs:480
static Chara CC
Definition: ACT.cs:77
virtual string ID
Definition: ACT.cs:99
virtual Color GetActPlanColor()
Definition: ACT.cs:257
static Thing TOOL
Definition: ACT.cs:83
virtual int MaxRadius
Definition: ACT.cs:139
virtual int LeftHand
Definition: ACT.cs:107
virtual bool HaveLongPressAction
Definition: ACT.cs:133
override bool ShowRelativeAttribute
Definition: ACT.cs:95
virtual string GetTextSmall(Card c)
Definition: ACT.cs:232
bool CanPerform(Chara _cc, Card _tc=null, Point _tp=null)
Definition: ACT.cs:317
virtual float RapidDelay
Definition: ACT.cs:175
override bool ShowPotential
Definition: ACT.cs:91
virtual MultiSprite GetStateIcon()
Definition: ACT.cs:186
virtual string GetText(string str="")
Definition: ACT.cs:215
virtual bool CanPerform()
Definition: ACT.cs:303
bool IsTargetHostileParty()
Definition: ACT.cs:241
virtual bool DropHeldOnStart
Definition: ACT.cs:119
bool Perform(Chara _cc, Card _tc=null, Point _tp=null)
Definition: ACT.cs:308
virtual bool ResetAxis
Definition: ACT.cs:125
virtual bool RequireTool
Definition: ACT.cs:127
virtual bool CanRapidFire
Definition: ACT.cs:173
new void SetImage(Image image)
Definition: ACT.cs:454
static void SetReference(Chara _cc, Card _tc=null, Point _tp=null)
Definition: ACT.cs:433
Definition: Card.cs:11
bool IsPCFactionOrMinion
Definition: Card.cs:2208
virtual string GetExtraName()
Definition: Card.cs:2556
ElementContainerCard elements
Definition: Card.cs:37
void ForeachPoint(Action< Point, bool > action)
Definition: Card.cs:7400
Point pos
Definition: Card.cs:55
Trait trait
Definition: Card.cs:49
virtual bool isChara
Definition: Card.cs:2019
Definition: Chara.cs:10
Element MainElement
Definition: Chara.cs:713
override bool IsPC
Definition: Chara.cs:608
bool CanSee(Card c)
Definition: Chara.cs:1070
SourceChara.Row source
Definition: Chara.cs:154
override bool IsMultisize
Definition: Chara.cs:702
bool IsHostile()
Definition: Chara.cs:6034
Color colorHostileAct
bool shiftToUseNegativeAbilityOnSelf
Definition: CoreConfig.cs:193
new GameConfig game
Definition: CoreConfig.cs:600
Sprite defaultAbility
Definition: CoreRef.cs:116
Icons icons
Definition: CoreRef.cs:345
CoreRef refs
Definition: Core.cs:51
CoreConfig config
Definition: Core.cs:70
static CursorInfo Action
Definition: EClass.cs:5
static ColorProfile Colors
Definition: EClass.cs:38
static Core core
Definition: EClass.cs:6
static Zone _zone
Definition: EClass.cs:20
static Map _map
Definition: EClass.cs:18
static SourceManager sources
Definition: EClass.cs:42
static Chara pc
Definition: EClass.cs:14
static GameSetting setting
Definition: EClass.cs:34
Definition: EInput.cs:8
static bool isShiftDown
Definition: EInput.cs:261
Element GetOrCreateElement(Element ele)
int id
Definition: ELEMENT.cs:248
SourceElement.Row source
Definition: ELEMENT.cs:271
virtual int GetPower(Card c)
Definition: ELEMENT.cs:1068
UD_String_ElementRef elements
Definition: GameSetting.cs:315
Definition: Lang.cs:6
static string Get(string id)
Definition: Lang.cs:91
static string ParseRaw(string text, string val1, string val2=null, string val3=null, string val4=null, string val5=null)
Definition: Lang.cs:119
static bool Has(string id)
Definition: Lang.cs:100
Definition: Los.cs:5
static bool IsVisible(Point p1, Point p2, Action< Point, bool > _onVisit=null)
Definition: Los.cs:167
void ForeachSphere(int _x, int _z, float r, Action< Point > action)
Definition: Map.cs:2358
Definition: Point.cs:9
void SetHighlight(int id)
Definition: Point.cs:1404
Point Set(int _x, int _z)
Definition: Point.cs:491
int x
Definition: Point.cs:36
int z
Definition: Point.cs:39
bool IsSync
Definition: Point.cs:332
List< Chara > Charas
Definition: Point.cs:328
int Distance(Point p)
Definition: Point.cs:969
Chara FirstChara
Definition: Point.cs:276
bool HasBlock
Definition: Point.cs:141
bool HasChara
Definition: Point.cs:226
SourceElement elements
virtual bool IsRegion
Definition: Spatial.cs:501
Definition: TC.cs:4
static TargetTypeSelf Self
Definition: TargetType.cs:7
static TargetTypeGround Ground
Definition: TargetType.cs:15
static TargetTypeSelect Select
Definition: TargetType.cs:11
static TargetTypeSelfAndNeighbor SelfAndNeighbor
Definition: TargetType.cs:13
static TargetTypeParty Party
Definition: TargetType.cs:23
static TargetTypeSelfParty SelfParty
Definition: TargetType.cs:9
virtual int LimitDist
Definition: TargetType.cs:45
virtual bool CanOnlyTargetEnemy
Definition: TargetType.cs:27
static TargetTypeEnemy Enemy
Definition: TargetType.cs:19
static TargetTypeChara Chara
Definition: TargetType.cs:17
virtual bool RequireChara
Definition: TargetType.cs:31
virtual TargetRange Range
Definition: TargetType.cs:25
virtual bool CanSelectParty
Definition: TargetType.cs:39
virtual bool RequireLos
Definition: TargetType.cs:35
static TargetTypeAny Any
Definition: TargetType.cs:5
Definition: Thing.cs:8
virtual bool CanBeAttacked
Definition: Trait.cs:163
Definition: Wait.cs:2
bool IsCrime(Chara c, Act act)
Definition: Zone.cs:3363
Definition: ActRef.cs:2
Definition: ACT.cs:71
CostType type
Definition: ACT.cs:74
int cost
Definition: ACT.cs:72