Elin Decompiled Documentation EA 23.102 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[id]);
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 override bool ShowPotential => false;
90
91 public override bool UsePotential => false;
92
93 public override bool ShowRelativeAttribute => true;
94
96
97 public virtual string ID => base.source.alias;
98
99 public virtual bool IsAct => true;
100
101 public virtual bool WillEndTurn => true;
102
103 public virtual bool CloseLayers => true;
104
105 public virtual int LeftHand => 0;
106
107 public virtual int RightHand => 0;
108
109 public virtual int ElementPowerMod => base.source.eleP;
110
111 public virtual bool ShowMapHighlight => false;
112
113 public virtual bool ShowMapHighlightBlock => false;
114
115 public virtual bool PickHeldOnStart => false;
116
117 public virtual bool DropHeldOnStart => false;
118
119 public virtual bool CanPressRepeat => false;
120
121 public virtual bool CanAutofire => false;
122
123 public virtual bool ResetAxis => false;
124
125 public virtual bool RequireTool => false;
126
127 public virtual bool IsHostileAct => false;
128
129 public virtual bool HideRightInfo => false;
130
132
133 public virtual float Radius => base.source.radius;
134
135 public virtual int PerformDistance => 1;
136
137 public virtual int MaxRadius => 99;
138
139 public virtual TargetType TargetType
140 {
141 get
142 {
143 if (!base.source.target.IsEmpty())
144 {
145 switch (base.source.target)
146 {
147 case "Enemy":
148 return TargetType.Enemy;
149 case "Chara":
150 return TargetType.Chara;
151 case "Ground":
152 return TargetType.Ground;
153 case "Neighbor":
155 case "Self":
156 return TargetType.Self;
157 case "Select":
158 return TargetType.Select;
159 case "Party":
160 return TargetType.Party;
161 case "SelfParty":
162 return TargetType.SelfParty;
163 }
164 }
165 return TargetType.Any;
166 }
167 }
168
169 public virtual bool LocalAct => true;
170
171 public virtual bool CanRapidFire => false;
172
173 public virtual float RapidDelay => 0.2f;
174
175 public virtual bool ShowAuto => false;
176
177 public virtual bool IsCrime => EClass._zone.IsCrime(EClass.pc, this);
178
179 public virtual CursorInfo GetCursorIcon(Card c)
180 {
181 return CursorIcon;
182 }
183
184 public virtual MultiSprite GetStateIcon()
185 {
186 return null;
187 }
188
189 public override Sprite GetSprite()
190 {
191 return base.source.GetSprite();
192 }
193
194 public virtual bool ShowMouseHint(Card c)
195 {
196 return true;
197 }
198
199 public virtual bool IsValidTC(Card c)
200 {
201 if (!c.isChara)
202 {
203 return c.trait.CanBeAttacked;
204 }
205 return true;
206 }
207
208 public virtual string GetHintText(string str = "")
209 {
210 return GetText(str);
211 }
212
213 public virtual string GetText(string str = "")
214 {
215 if (base.source != null)
216 {
217 id = base.source.id;
218 }
219 if (id == 0)
220 {
221 if (!Lang.Has(ToString()))
222 {
223 return ToString() + "/" + base.source?.ToString() + "/" + id;
224 }
225 return Lang.Get(ToString());
226 }
227 return Lang.ParseRaw(base.source.GetName(), str);
228 }
229
230 public virtual string GetTextSmall(Card c)
231 {
232 if (c == null)
233 {
234 return null;
235 }
236 return c.Name + c.GetExtraName();
237 }
238
240 {
241 if (base.source.abilityType.Length != 0)
242 {
243 switch (base.source.abilityType[0])
244 {
245 case "debuff":
246 case "debuffStats":
247 case "attack":
248 case "dot":
249 return true;
250 }
251 }
252 return false;
253 }
254
255 public virtual Color GetActPlanColor()
256 {
257 if (!IsCrime)
258 {
259 return EClass.Colors.colorAct;
260 }
262 }
263
264 public virtual bool Perform()
265 {
266 int num = id;
267 if ((num == 8230 || num == 8232) && TC.isThing)
268 {
269 int power = CC.elements.GetOrCreateElement(base.source.id).GetPower(CC);
270 ActEffect.Proc(base.source.proc[0].ToEnum<EffectId>(), power, BlessedState.Normal, CC, TC);
271 return true;
272 }
273 if (base.source.proc.Length != 0)
274 {
275 string text = base.source.aliasRef.IsEmpty(CC.MainElement.source.alias);
276 string text2 = base.source.proc[0];
277 if (text2 == "LulwyTrick" || text2 == "BuffStats")
278 {
279 text = base.source.proc[1];
280 }
281 else if (text == "mold")
282 {
283 text = CC.MainElement.source.alias;
284 }
285 if (TargetType.Range == TargetRange.Self && !forcePt)
286 {
287 TC = CC;
288 TP.Set(CC.pos);
289 }
290 int power2 = CC.elements.GetOrCreateElement(base.source.id).GetPower(CC);
291 ActEffect.ProcAt(base.source.proc[0].ToEnum<EffectId>(), power2, BlessedState.Normal, CC, TC, TP, base.source.tag.Contains("neg"), new ActRef
292 {
293 n1 = base.source.proc.TryGet(1, returnNull: true),
294 aliasEle = text,
295 act = this
296 });
297 }
298 return true;
299 }
300
301 public virtual bool CanPerform()
302 {
303 return true;
304 }
305
306 public bool Perform(Chara _cc, Card _tc = null, Point _tp = null)
307 {
308 if (CanPerform(_cc, _tc, _tp))
309 {
310 return Perform();
311 }
312 return false;
313 }
314
315 public bool CanPerform(Chara _cc, Card _tc = null, Point _tp = null)
316 {
317 CC = _cc;
318 TC = _tc;
319 TP.Set(_tp ?? TC?.pos ?? CC.pos);
321 if (forcePt && tt.Range == TargetRange.Self && !CC.IsPC)
322 {
323 tt = TargetType.Chara;
324 }
326 {
327 return false;
328 }
329 if (tt.Range == TargetRange.Self)
330 {
331 TP.Set(CC.pos);
332 return CanPerform();
333 }
335 {
336 Chara firstChara = TP.FirstChara;
337 if (firstChara != null && firstChara.IsPCFactionOrMinion)
338 {
339 bool flag = base.source.tag.Contains("neg");
340 if (base.source.id != 6011 && flag && !EInput.isShiftDown)
341 {
342 return false;
343 }
344 }
345 }
346 if (!(this is ActMelee) && tt.Range == TargetRange.Chara && (TC == null || !CC.CanSee(TC)))
347 {
348 return false;
349 }
350 bool distCheck = DistCheck(CC.pos, TP);
351 if (!distCheck && (CC.IsMultisize || (TC != null && TC.IsMultisize)))
352 {
353 if (CC.IsMultisize)
354 {
355 CC.ForeachPoint(delegate(Point p, bool main)
356 {
357 DistCheckMulti(p, TC);
358 });
359 }
360 else
361 {
362 DistCheckMulti(CC.pos, TC);
363 }
364 }
365 if (!distCheck)
366 {
367 return false;
368 }
369 return CanPerform();
370 bool DistCheck(Point p1, Point p2)
371 {
372 int num = p1.Distance(p2);
373 if (tt.RequireLos)
374 {
375 if (CC.IsPC)
376 {
377 if (!p2.IsSync)
378 {
379 return false;
380 }
381 }
382 else if ((num != 1 || !CC.IsMultisize) && !Los.IsVisible(p1, p2))
383 {
384 return false;
385 }
386 }
387 if (num >= tt.LimitDist)
388 {
389 return false;
390 }
391 if (num >= MaxRadius)
392 {
393 return false;
394 }
395 if (tt.RequireChara && !p2.HasChara)
396 {
397 return false;
398 }
399 if (tt.CanOnlyTargetEnemy)
400 {
401 foreach (Chara chara in p2.Charas)
402 {
403 if (CC.IsHostile(chara))
404 {
405 return true;
406 }
407 }
408 return false;
409 }
410 return true;
411 }
412 void DistCheckMulti(Point p1, Card c)
413 {
414 if (c == null && !distCheck)
415 {
416 distCheck = DistCheck(p1, TP);
417 }
418 else
419 {
420 c.ForeachPoint(delegate(Point p, bool main)
421 {
422 if (!distCheck)
423 {
424 distCheck = DistCheck(p1, p);
425 }
426 });
427 }
428 }
429 }
430
431 public static void SetReference(Chara _cc, Card _tc = null, Point _tp = null)
432 {
433 CC = _cc;
434 TC = _tc;
435 TP.Set(_tp ?? TC.pos);
436 }
437
438 public virtual bool IsToolValid()
439 {
440 if (CC == EClass.pc && TOOL != null)
441 {
442 return TOOL.parent == EClass.pc;
443 }
444 return false;
445 }
446
447 public static void SetTool(Thing t)
448 {
449 TOOL = t;
450 }
451
452 public new void SetImage(Image image)
453 {
454 image.sprite = GetSprite() ?? EClass.core.refs.icons.defaultAbility;
455 if (!base.source.aliasRef.IsEmpty())
456 {
457 image.color = EClass.setting.elements[base.source.aliasRef].colorSprite;
458 }
459 else
460 {
461 image.color = Color.white;
462 }
463 image.rectTransform.pivot = new Vector2(0.5f, 0.5f);
464 image.SetNativeSize();
465 }
466
467 public virtual void OnMarkMapHighlights()
468 {
469 EClass._map.ForeachSphere(EClass.pc.pos.x, EClass.pc.pos.z, base.act.MaxRadius, delegate(Point p)
470 {
471 if (!p.HasBlock && ShouldMapHighlight(p))
472 {
473 p.SetHighlight(8);
474 }
475 });
476 }
477
478 public virtual bool ShouldMapHighlight(Point p)
479 {
480 if (base.act.TargetType.ShowMapHighlight && base.act.ShowMapHighlight)
481 {
482 return base.act.CanPerform(EClass.pc, null, p);
483 }
484 return false;
485 }
486}
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:788
static void ProcAt(EffectId id, int power, BlessedState state, Card cc, Card tc, Point tp, bool isNeg, ActRef actRef=default(ActRef))
Definition: ActEffect.cs:392
Definition: ACT.cs:62
CostType
Definition: ACT.cs:64
override bool UsePotential
Definition: ACT.cs:91
virtual float Radius
Definition: ACT.cs:133
virtual CursorInfo CursorIcon
Definition: ACT.cs:95
virtual bool Perform()
Definition: ACT.cs:264
virtual bool CloseLayers
Definition: ACT.cs:103
virtual bool IsToolValid()
Definition: ACT.cs:438
virtual bool CanAutofire
Definition: ACT.cs:121
static Card TC
Definition: ACT.cs:79
virtual bool ShowAuto
Definition: ACT.cs:175
virtual bool CanPressRepeat
Definition: ACT.cs:119
virtual string GetHintText(string str="")
Definition: ACT.cs:208
virtual bool LocalAct
Definition: ACT.cs:169
override Sprite GetSprite()
Definition: ACT.cs:189
virtual bool ShowMapHighlightBlock
Definition: ACT.cs:113
virtual bool PickHeldOnStart
Definition: ACT.cs:115
virtual bool IsValidTC(Card c)
Definition: ACT.cs:199
virtual bool ShowMouseHint(Card c)
Definition: ACT.cs:194
virtual bool IsAct
Definition: ACT.cs:99
virtual bool IsHostileAct
Definition: ACT.cs:127
virtual bool ShowMapHighlight
Definition: ACT.cs:111
virtual int ElementPowerMod
Definition: ACT.cs:109
virtual CursorInfo GetCursorIcon(Card c)
Definition: ACT.cs:179
static Point TP
Definition: ACT.cs:81
virtual int RightHand
Definition: ACT.cs:107
virtual bool HideRightInfo
Definition: ACT.cs:129
virtual bool IsCrime
Definition: ACT.cs:177
static bool forcePt
Definition: ACT.cs:87
static void SetTool(Thing t)
Definition: ACT.cs:447
virtual int PerformDistance
Definition: ACT.cs:135
virtual void OnMarkMapHighlights()
Definition: ACT.cs:467
static int powerMod
Definition: ACT.cs:85
virtual bool WillEndTurn
Definition: ACT.cs:101
virtual TargetType TargetType
Definition: ACT.cs:140
virtual bool ShouldMapHighlight(Point p)
Definition: ACT.cs:478
static Chara CC
Definition: ACT.cs:77
virtual string ID
Definition: ACT.cs:97
virtual Color GetActPlanColor()
Definition: ACT.cs:255
static Thing TOOL
Definition: ACT.cs:83
virtual int MaxRadius
Definition: ACT.cs:137
virtual int LeftHand
Definition: ACT.cs:105
virtual bool HaveLongPressAction
Definition: ACT.cs:131
override bool ShowRelativeAttribute
Definition: ACT.cs:93
virtual string GetTextSmall(Card c)
Definition: ACT.cs:230
bool CanPerform(Chara _cc, Card _tc=null, Point _tp=null)
Definition: ACT.cs:315
virtual float RapidDelay
Definition: ACT.cs:173
override bool ShowPotential
Definition: ACT.cs:89
virtual MultiSprite GetStateIcon()
Definition: ACT.cs:184
virtual string GetText(string str="")
Definition: ACT.cs:213
virtual bool CanPerform()
Definition: ACT.cs:301
bool IsTargetHostileParty()
Definition: ACT.cs:239
virtual bool DropHeldOnStart
Definition: ACT.cs:117
bool Perform(Chara _cc, Card _tc=null, Point _tp=null)
Definition: ACT.cs:306
virtual bool ResetAxis
Definition: ACT.cs:123
virtual bool RequireTool
Definition: ACT.cs:125
virtual bool CanRapidFire
Definition: ACT.cs:171
new void SetImage(Image image)
Definition: ACT.cs:452
static void SetReference(Chara _cc, Card _tc=null, Point _tp=null)
Definition: ACT.cs:431
Definition: Card.cs:11
bool IsPCFactionOrMinion
Definition: Card.cs:2132
virtual string GetExtraName()
Definition: Card.cs:2480
ElementContainerCard elements
Definition: Card.cs:37
void ForeachPoint(Action< Point, bool > action)
Definition: Card.cs:6942
Point pos
Definition: Card.cs:55
Trait trait
Definition: Card.cs:49
virtual bool isChara
Definition: Card.cs:1959
Definition: Chara.cs:10
Element MainElement
Definition: Chara.cs:702
override bool IsPC
Definition: Chara.cs:597
bool CanSee(Card c)
Definition: Chara.cs:1027
SourceChara.Row source
Definition: Chara.cs:143
override bool IsMultisize
Definition: Chara.cs:691
bool IsHostile()
Definition: Chara.cs:5884
Color colorHostileAct
bool shiftToUseNegativeAbilityOnSelf
Definition: CoreConfig.cs:193
new GameConfig game
Definition: CoreConfig.cs:596
Sprite defaultAbility
Definition: CoreRef.cs:114
Icons icons
Definition: CoreRef.cs:339
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:240
SourceElement.Row source
Definition: ELEMENT.cs:263
virtual int GetPower(Card c)
Definition: ELEMENT.cs:884
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:1388
Point Set(int _x, int _z)
Definition: Point.cs:479
int x
Definition: Point.cs:36
int z
Definition: Point.cs:39
bool IsSync
Definition: Point.cs:320
List< Chara > Charas
Definition: Point.cs:316
int Distance(Point p)
Definition: Point.cs:953
Chara FirstChara
Definition: Point.cs:264
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:159
Definition: Wait.cs:2
bool IsCrime(Chara c, Act act)
Definition: Zone.cs:3259
Definition: ActRef.cs:2
Definition: ACT.cs:71
CostType type
Definition: ACT.cs:74
int cost
Definition: ACT.cs:72