Elin Decompiled Documentation EA 23.344.1 Nightly
Loading...
Searching...
No Matches
BaseCondition.cs
Go to the documentation of this file.
1using System;
2using System.Collections.Generic;
3using Newtonsoft.Json;
4using UnityEngine;
5
6public class BaseCondition : BaseStats
7{
8 [JsonProperty]
9 public int[] _ints = new int[5];
10
11 public int phase = -1;
12
14
15 public Chara owner;
16
17 public int value
18 {
19 get
20 {
21 return _ints[0];
22 }
23 set
24 {
25 _ints[0] = value;
26 }
27 }
28
29 public int power
30 {
31 get
32 {
33 return _ints[1];
34 }
35 set
36 {
37 _ints[1] = value;
38 }
39 }
40
41 public int refVal
42 {
43 get
44 {
45 return _ints[2];
46 }
47 set
48 {
49 _ints[2] = value;
50 }
51 }
52
53 public int refVal2
54 {
55 get
56 {
57 return _ints[3];
58 }
59 set
60 {
61 _ints[3] = value;
62 }
63 }
64
65 public bool givenByPcParty
66 {
67 get
68 {
69 return (_ints[4] & 2) != 0;
70 }
71 set
72 {
73 _ints[4] = (value ? (_ints[4] | 2) : (_ints[4] & -3));
74 }
75 }
76
77 public bool isPerfume
78 {
79 get
80 {
81 return (_ints[4] & 4) != 0;
82 }
83 set
84 {
85 _ints[4] = (value ? (_ints[4] | 4) : (_ints[4] & -5));
86 }
87 }
88
89 public override Chara Owner => owner;
90
91 public virtual string Name => base.source.GetText();
92
93 public virtual bool IsToggle => false;
94
95 public virtual bool AllowMultipleInstance => false;
96
97 public virtual bool ConsumeTurn => false;
98
99 public virtual bool HasDuration => base.source.duration != "-1";
100
101 public virtual int MaxDuration => base.source.durationMax;
102
103 public virtual bool PreventRegen => false;
104
105 public virtual bool ShouldRefresh => false;
106
107 public virtual bool CancelAI => false;
108
109 public virtual bool TimeBased => false;
110
111 public virtual bool SyncRide => false;
112
113 public virtual bool UseElements => base.source.elements.Length != 0;
114
115 public virtual int GainResistFactor => base.source.gainRes;
116
117 public virtual int P2 { get; set; }
118
120
121 public virtual bool IsElemental => false;
122
123 public virtual string RefString1
124 {
125 get
126 {
127 if (!IsElemental)
128 {
129 return "";
130 }
131 return sourceElement.GetName().ToLower();
132 }
133 }
134
135 public virtual bool ShouldTryNullify => base.source.nullify.Length != 0;
136
137 public virtual bool CanManualRemove => false;
138
139 public virtual bool CanStack(Condition c)
140 {
141 return true;
142 }
143
144 public virtual bool ShouldOverride(Condition c)
145 {
146 return false;
147 }
148
149 public virtual bool IsOverrideConditionMet(Condition c, int turn)
150 {
151 return turn > value;
152 }
153
154 public virtual bool TryMove(Point p)
155 {
156 return true;
157 }
158
160 {
161 return elements;
162 }
163
164 public void SetElement(int id)
165 {
166 refVal = id;
167 }
168
169 public void SetValue(int a, int _p2 = 0)
170 {
171 value = a;
172 P2 = _p2;
173 }
174
175 public void SetRefVal(int a, int b)
176 {
177 refVal = a;
178 refVal2 = b;
179 }
180
181 public virtual Color GetSpriteColor()
182 {
183 if (!IsElemental)
184 {
185 return Color.white;
186 }
187 return EClass.setting.elements[EClass.sources.elements.map[refVal].alias].colorSprite;
188 }
189
190 public override string ToString()
191 {
192 return Name + " " + value + " " + phase;
193 }
194
195 public override string GetText()
196 {
197 if (!IsNullPhase())
198 {
199 return GetPhaseStr();
200 }
201 return "";
202 }
203
204 public override int GetValue()
205 {
206 return value;
207 }
208
209 public override Color GetColor(Gradient g)
210 {
211 return g.Evaluate((base.source.phase.LastItem() == 0) ? 0f : ((float)phase / (float)base.source.phase.LastItem()));
212 }
213
214 public virtual void SetOwner(Chara _owner, bool onDeserialize = false)
215 {
216 owner = _owner;
217 phase = GetPhase();
220 if (onDeserialize)
221 {
223 }
224 }
225
226 public void RefreshElements()
227 {
228 if (!UseElements)
229 {
230 return;
231 }
232 if (elements != null)
233 {
235 }
237 if (base.source.elements.Length != 0)
238 {
239 for (int i = 0; i < base.source.elements.Length; i += 2)
240 {
241 elements.SetBase(GetElementSource(i).id, base.source.elements[i + 1].Calc(power, 0, P2));
242 }
243 }
245 }
246
247 public void RefreshEmoIcon()
248 {
249 if (EmoIcon > owner.emoIcon)
250 {
251 owner.emoIcon = EmoIcon;
252 }
253 }
254
256 {
257 string text = base.source.elements[i];
258 if (text == "res")
259 {
260 text = sourceElement.aliasRef;
261 }
262 else if (text == "ele")
263 {
264 text = sourceElement.alias;
265 }
266 return EClass.sources.elements.alias[text];
267 }
268
269 public void Start()
270 {
272 phase = -1;
273 SetPhase();
274 OnStart();
276 PlayEffect();
277 if (!ShouldTryNullify)
278 {
279 return;
280 }
281 for (int num = owner.conditions.Count - 1; num >= 0; num--)
282 {
283 if (TryNullify(owner.conditions[num]))
284 {
285 owner.conditions[num].Kill();
286 }
287 }
288 }
289
290 public virtual bool TryNullify(Condition c)
291 {
292 if (base.source.nullify.Length == 0)
293 {
294 return false;
295 }
296 string[] nullify = base.source.nullify;
297 foreach (string text in nullify)
298 {
299 if (c.source.alias == text)
300 {
301 owner.Say("nullify", owner, Name.ToLower(), c.Name.ToLower());
302 return true;
303 }
304 }
305 return false;
306 }
307
308 public virtual void OnBeforeStart()
309 {
310 }
311
312 public virtual void OnStart()
313 {
314 }
315
316 public virtual void OnStartOrStack()
317 {
318 }
319
320 public virtual void OnHit(Card attacker, AttackSource source)
321 {
322 }
323
324 public virtual void PlayEffect()
325 {
326 if (!Condition.ignoreEffect && base.source.effect.Length != 0)
327 {
328 if (!base.source.effect[0].IsEmpty())
329 {
330 owner.PlayEffect(base.source.effect[0]);
331 }
332 owner.PlaySound((base.source.effect.Length >= 2) ? base.source.effect[1] : base.source.effect[0]);
333 }
334 }
335
336 public virtual void PlayEndEffect()
337 {
338 if (base.source.effect.Length >= 3)
339 {
340 if (!base.source.effect[2].IsEmpty())
341 {
342 owner.PlayEffect(base.source.effect[2]);
343 }
344 owner.PlaySound((base.source.effect.Length >= 4) ? base.source.effect[3] : base.source.effect[2]);
345 }
346 }
347
348 public virtual void OnRefresh()
349 {
350 }
351
352 public void SetPhase()
353 {
354 int num = GetPhase();
355 if (phase != num)
356 {
357 int num2 = phase;
358 phase = num;
359 PhaseMsg(num > num2);
360 OnChangePhase(num2, num);
361 }
362 }
363
364 public bool IsNullPhase()
365 {
366 if (base.source.strPhase.Length == 0)
367 {
368 return false;
369 }
370 return base.source.strPhase[GetPhase()] == "#";
371 }
372
373 public override int GetPhase()
374 {
375 return base.source.phase[Mathf.Clamp(value, 0, 99) / 10];
376 }
377
378 public void PhaseMsg(bool inc)
379 {
380 bool flag = (base.source.invert ? (!inc) : inc);
381 string[] array = (inc ? base.source.GetText("textPhase") : base.source.GetText("textPhase2")).Split(Environment.NewLine.ToCharArray());
382 if (array.Length > phase && !array[phase].IsEmpty())
383 {
384 if (Type == ConditionType.Stance)
385 {
386 Msg.SetColor("ono");
387 }
388 else if (!base.source.invert && flag)
389 {
390 Msg.SetColor("negative");
391 }
392 else if (base.source.invert && !flag)
393 {
394 Msg.SetColor("positive");
395 }
396 PopText();
397 owner.Say(array[phase].Split('|').RandomItem(), owner, RefString1);
398 }
399 }
400
401 public override string GetPhaseStr()
402 {
403 string[] textArray = base.source.GetTextArray("strPhase");
404 if (textArray.Length == 0)
405 {
406 return Name;
407 }
408 return textArray[phase].IsEmpty("");
409 }
410
411 public virtual void Tick()
412 {
413 }
414
415 public void Mod(int a, bool force = false)
416 {
417 if ((!isPerfume || force) && value != 0)
418 {
419 value += a;
420 SetPhase();
422 }
423 }
424
425 public virtual void OnValueChanged()
426 {
427 }
428
429 public virtual void OnChangePhase(int lastPhase, int newPhase)
430 {
431 }
432
433 public virtual void OnRemoved()
434 {
435 }
436
437 public virtual int EvaluatePower(int p)
438 {
439 return p;
440 }
441
442 public virtual int EvaluateTurn(int p)
443 {
444 return Mathf.Min(Mathf.Max(1, base.source.duration.Calc(p, 0, P2)), (MaxDuration == 0) ? int.MaxValue : MaxDuration);
445 }
446
448 {
449 return new BaseNotification();
450 }
451
453 {
454 if (base.source.defenseAttb.IsEmpty())
455 {
456 return null;
457 }
458 if (c == null)
459 {
460 return Element.Create(base.source.defenseAttb[0]);
461 }
462 return c.elements.GetOrCreateElement(base.source.defenseAttb[0]);
463 }
464
465 public override void _WriteNote(UINote n, bool asChild = false)
466 {
467 List<string> list = new List<string>();
468 Element defenseAttribute = GetDefenseAttribute();
469 if (defenseAttribute != null)
470 {
471 list.Add("hintDefenseAttb".lang(defenseAttribute.Name.ToTitleCase()));
472 }
473 OnWriteNote(list);
474 string[] nullify = base.source.nullify;
475 foreach (string key in nullify)
476 {
477 list.Add("hintNullify".lang(EClass.sources.stats.alias[key].GetName()));
478 }
479 for (int j = 0; j < base.source.elements.Length; j += 2)
480 {
481 Element e = Element.Create(GetElementSource(j).id, base.source.elements[j + 1].Calc(power, 0, P2));
482 if (e.IsFlag)
483 {
484 list.Add(e.Name.TagColorGoodBad(() => e.Value >= 0));
485 }
486 else if (elements != null && elements.Has(e.id) && elements.Value(e.id) != e.Value)
487 {
488 list.Add("modValue".lang(e.Name, ((e.Value < 0) ? "" : "+") + elements.Value(e.id) + (e.source.tag.Contains("ratio") ? "%" : "") + " (" + e.Value + ")").TagColor(() => e.Value >= 0));
489 }
490 else
491 {
492 list.Add("modValue".lang(e.Name, ((e.Value < 0) ? "" : "+") + e.Value + (e.source.tag.Contains("ratio") ? "%" : "")).TagColorGoodBad(() => e.Value >= 0));
493 }
494 }
495 if (list.Count <= 0)
496 {
497 return;
498 }
499 if (!asChild)
500 {
501 n.Space(8);
502 }
503 foreach (string item in list)
504 {
505 n.AddText("_bullet".lang() + item);
506 }
507 }
508
509 public virtual void OnWriteNote(List<string> list)
510 {
511 }
512
514 {
515 return null;
516 }
517}
AttackSource
Definition: AttackSource.cs:2
ConditionType
Definition: ConditionType.cs:2
virtual void OnChangePhase(int lastPhase, int newPhase)
virtual ElementContainer GetElementContainer()
virtual void OnWriteNote(List< string > list)
bool IsNullPhase()
virtual bool IsOverrideConditionMet(Condition c, int turn)
void RefreshEmoIcon()
void SetElement(int id)
virtual bool CanStack(Condition c)
virtual bool SyncRide
virtual bool HasDuration
virtual void OnStartOrStack()
virtual bool IsToggle
override Chara Owner
virtual void OnValueChanged()
virtual bool ShouldRefresh
virtual RendererReplacer GetRendererReplacer()
override string GetText()
virtual int MaxDuration
virtual bool CancelAI
virtual bool ShouldTryNullify
virtual bool PreventRegen
virtual void PlayEffect()
virtual string Name
void SetValue(int a, int _p2=0)
virtual int EvaluatePower(int p)
virtual bool CanManualRemove
virtual bool UseElements
virtual void OnStart()
virtual int GainResistFactor
virtual BaseNotification CreateNotification()
virtual bool TryMove(Point p)
override void _WriteNote(UINote n, bool asChild=false)
virtual string RefString1
void RefreshElements()
SourceElement.Row GetElementSource(int i)
override Color GetColor(Gradient g)
virtual bool AllowMultipleInstance
virtual bool ConsumeTurn
Element GetDefenseAttribute(Chara c=null)
virtual int EvaluateTurn(int p)
override string GetPhaseStr()
virtual int P2
override int GetValue()
virtual bool TimeBased
virtual void OnRefresh()
virtual void OnRemoved()
virtual void OnHit(Card attacker, AttackSource source)
virtual Color GetSpriteColor()
void Mod(int a, bool force=false)
void PhaseMsg(bool inc)
virtual void SetOwner(Chara _owner, bool onDeserialize=false)
SourceElement.Row sourceElement
virtual bool TryNullify(Condition c)
virtual bool ShouldOverride(Condition c)
virtual void PlayEndEffect()
ElementContainer elements
void SetRefVal(int a, int b)
virtual void Tick()
override string ToString()
override int GetPhase()
virtual void OnBeforeStart()
virtual bool IsElemental
virtual ConditionType Type
Definition: BaseStats.cs:33
SourceStat.Row source
Definition: BaseStats.cs:16
virtual Emo2 EmoIcon
Definition: BaseStats.cs:31
int id
Definition: BaseStats.cs:11
void PopText()
Definition: BaseStats.cs:95
Definition: Card.cs:11
SoundSource PlaySound(string id, float v=1f, bool spatial=true)
Definition: Card.cs:6645
Effect PlayEffect(string id, bool useRenderPos=true, float range=0f, Vector3 fix=default(Vector3))
Definition: Card.cs:6679
void Say(string lang, string ref1=null, string ref2=null)
Definition: Card.cs:7323
Definition: Chara.cs:10
List< Condition > conditions
Definition: Chara.cs:215
Emo2 emoIcon
Definition: Chara.cs:108
static bool ignoreEffect
Definition: Condition.cs:6
Definition: EClass.cs:6
static SourceManager sources
Definition: EClass.cs:43
static GameSetting setting
Definition: EClass.cs:35
void SetParent(Card c)
bool Has(int ele)
int Value(int ele)
Element SetBase(string alias, int v, int potential=0)
int id
Definition: ELEMENT.cs:259
SourceElement.Row source
Definition: ELEMENT.cs:282
int Value
Definition: ELEMENT.cs:301
virtual string Name
Definition: ELEMENT.cs:313
static Element Create(int id, int v=0)
Definition: ELEMENT.cs:1163
bool IsFlag
Definition: ELEMENT.cs:311
UD_String_ElementRef elements
Definition: GameSetting.cs:360
Definition: Msg.cs:5
static void SetColor()
Definition: Msg.cs:22
Definition: Point.cs:9
SourceStat stats
SourceElement elements
Definition: UINote.cs:6