Elin Decompiled Documentation EA 23.317 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 => 0;
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 SetRefVal(int a, int b)
170 {
171 refVal = a;
172 refVal2 = b;
173 }
174
175 public virtual Color GetSpriteColor()
176 {
177 if (!IsElemental)
178 {
179 return Color.white;
180 }
181 return EClass.setting.elements[EClass.sources.elements.map[refVal].alias].colorSprite;
182 }
183
184 public override string ToString()
185 {
186 return Name + " " + value + " " + phase;
187 }
188
189 public override string GetText()
190 {
191 if (!IsNullPhase())
192 {
193 return GetPhaseStr();
194 }
195 return "";
196 }
197
198 public override int GetValue()
199 {
200 return value;
201 }
202
203 public override Color GetColor(Gradient g)
204 {
205 return g.Evaluate((base.source.phase.LastItem() == 0) ? 0f : ((float)phase / (float)base.source.phase.LastItem()));
206 }
207
208 public virtual void SetOwner(Chara _owner, bool onDeserialize = false)
209 {
210 owner = _owner;
211 phase = GetPhase();
213 if (UseElements)
214 {
216 if (base.source.elements.Length != 0)
217 {
218 for (int i = 0; i < base.source.elements.Length; i += 2)
219 {
220 elements.SetBase(GetElementSource(i).id, base.source.elements[i + 1].Calc(power, 0, P2));
221 }
222 }
224 }
225 if (onDeserialize)
226 {
228 }
229 }
230
231 public void RefreshEmoIcon()
232 {
233 if (EmoIcon > owner.emoIcon)
234 {
235 owner.emoIcon = EmoIcon;
236 }
237 }
238
240 {
241 string text = base.source.elements[i];
242 if (text == "res")
243 {
244 text = sourceElement.aliasRef;
245 }
246 else if (text == "ele")
247 {
248 text = sourceElement.alias;
249 }
250 return EClass.sources.elements.alias[text];
251 }
252
253 public void Start()
254 {
256 phase = -1;
257 SetPhase();
258 OnStart();
260 PlayEffect();
261 if (!ShouldTryNullify)
262 {
263 return;
264 }
265 for (int num = owner.conditions.Count - 1; num >= 0; num--)
266 {
267 if (TryNullify(owner.conditions[num]))
268 {
269 owner.conditions[num].Kill();
270 }
271 }
272 }
273
274 public virtual bool TryNullify(Condition c)
275 {
276 if (base.source.nullify.Length == 0)
277 {
278 return false;
279 }
280 string[] nullify = base.source.nullify;
281 foreach (string text in nullify)
282 {
283 if (c.source.alias == text)
284 {
285 owner.Say("nullify", owner, Name.ToLower(), c.Name.ToLower());
286 return true;
287 }
288 }
289 return false;
290 }
291
292 public virtual void OnBeforeStart()
293 {
294 }
295
296 public virtual void OnStart()
297 {
298 }
299
300 public virtual void OnStartOrStack()
301 {
302 }
303
304 public virtual void OnHit(Card attacker, AttackSource source)
305 {
306 }
307
308 public virtual void PlayEffect()
309 {
310 if (!Condition.ignoreEffect && base.source.effect.Length != 0)
311 {
312 if (!base.source.effect[0].IsEmpty())
313 {
314 owner.PlayEffect(base.source.effect[0]);
315 }
316 owner.PlaySound((base.source.effect.Length >= 2) ? base.source.effect[1] : base.source.effect[0]);
317 }
318 }
319
320 public virtual void PlayEndEffect()
321 {
322 if (base.source.effect.Length >= 3)
323 {
324 if (!base.source.effect[2].IsEmpty())
325 {
326 owner.PlayEffect(base.source.effect[2]);
327 }
328 owner.PlaySound((base.source.effect.Length >= 4) ? base.source.effect[3] : base.source.effect[2]);
329 }
330 }
331
332 public virtual void OnRefresh()
333 {
334 }
335
336 public void SetPhase()
337 {
338 int num = GetPhase();
339 if (phase != num)
340 {
341 int num2 = phase;
342 phase = num;
343 PhaseMsg(num > num2);
344 OnChangePhase(num2, num);
345 }
346 }
347
348 public bool IsNullPhase()
349 {
350 if (base.source.strPhase.Length == 0)
351 {
352 return false;
353 }
354 return base.source.strPhase[GetPhase()] == "#";
355 }
356
357 public override int GetPhase()
358 {
359 return base.source.phase[Mathf.Clamp(value, 0, 99) / 10];
360 }
361
362 public void PhaseMsg(bool inc)
363 {
364 bool flag = (base.source.invert ? (!inc) : inc);
365 string[] array = (inc ? base.source.GetText("textPhase") : base.source.GetText("textPhase2")).Split(Environment.NewLine.ToCharArray());
366 if (array.Length > phase && !array[phase].IsEmpty())
367 {
368 if (Type == ConditionType.Stance)
369 {
370 Msg.SetColor("ono");
371 }
372 else if (!base.source.invert && flag)
373 {
374 Msg.SetColor("negative");
375 }
376 else if (base.source.invert && !flag)
377 {
378 Msg.SetColor("positive");
379 }
380 PopText();
381 owner.Say(array[phase].Split('|').RandomItem(), owner, RefString1);
382 }
383 }
384
385 public override string GetPhaseStr()
386 {
387 string[] textArray = base.source.GetTextArray("strPhase");
388 if (textArray.Length == 0)
389 {
390 return Name;
391 }
392 return textArray[phase].IsEmpty("");
393 }
394
395 public virtual void Tick()
396 {
397 }
398
399 public void Mod(int a, bool force = false)
400 {
401 if ((!isPerfume || force) && value != 0)
402 {
403 value += a;
404 SetPhase();
406 }
407 }
408
409 public virtual void OnValueChanged()
410 {
411 }
412
413 public virtual void OnChangePhase(int lastPhase, int newPhase)
414 {
415 }
416
417 public virtual void OnRemoved()
418 {
419 }
420
421 public virtual int EvaluatePower(int p)
422 {
423 return p;
424 }
425
426 public virtual int EvaluateTurn(int p)
427 {
428 return Mathf.Min(Mathf.Max(1, base.source.duration.Calc(p, 0, P2)), (MaxDuration == 0) ? int.MaxValue : MaxDuration);
429 }
430
432 {
433 return new BaseNotification();
434 }
435
437 {
438 if (base.source.defenseAttb.IsEmpty())
439 {
440 return null;
441 }
442 if (c == null)
443 {
444 return Element.Create(base.source.defenseAttb[0]);
445 }
446 return c.elements.GetOrCreateElement(base.source.defenseAttb[0]);
447 }
448
449 public override void _WriteNote(UINote n, bool asChild = false)
450 {
451 List<string> list = new List<string>();
452 Element defenseAttribute = GetDefenseAttribute();
453 if (defenseAttribute != null)
454 {
455 list.Add("hintDefenseAttb".lang(defenseAttribute.Name.ToTitleCase()));
456 }
457 OnWriteNote(list);
458 string[] nullify = base.source.nullify;
459 foreach (string key in nullify)
460 {
461 list.Add("hintNullify".lang(EClass.sources.stats.alias[key].GetName()));
462 }
463 for (int j = 0; j < base.source.elements.Length; j += 2)
464 {
465 Element e = Element.Create(GetElementSource(j).id, base.source.elements[j + 1].Calc(power, 0, P2));
466 if (e.IsFlag)
467 {
468 list.Add(e.Name.TagColorGoodBad(() => e.Value >= 0));
469 }
470 else if (elements != null && elements.Has(e.id) && elements.Value(e.id) != e.Value)
471 {
472 list.Add("modValue".lang(e.Name, ((e.Value < 0) ? "" : "+") + elements.Value(e.id) + (e.source.tag.Contains("ratio") ? "%" : "") + " (" + e.Value + ")").TagColor(() => e.Value >= 0));
473 }
474 else
475 {
476 list.Add("modValue".lang(e.Name, ((e.Value < 0) ? "" : "+") + e.Value + (e.source.tag.Contains("ratio") ? "%" : "")).TagColorGoodBad(() => e.Value >= 0));
477 }
478 }
479 if (list.Count <= 0)
480 {
481 return;
482 }
483 if (!asChild)
484 {
485 n.Space(8);
486 }
487 foreach (string item in list)
488 {
489 n.AddText("_bullet".lang() + item);
490 }
491 }
492
493 public virtual void OnWriteNote(List<string> list)
494 {
495 }
496
498 {
499 return null;
500 }
501}
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
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
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:6561
Effect PlayEffect(string id, bool useRenderPos=true, float range=0f, Vector3 fix=default(Vector3))
Definition: Card.cs:6595
void Say(string lang, string ref1=null, string ref2=null)
Definition: Card.cs:7239
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:257
SourceElement.Row source
Definition: ELEMENT.cs:280
int Value
Definition: ELEMENT.cs:299
virtual string Name
Definition: ELEMENT.cs:311
static Element Create(int id, int v=0)
Definition: ELEMENT.cs:1121
bool IsFlag
Definition: ELEMENT.cs:309
UD_String_ElementRef elements
Definition: GameSetting.cs:317
Definition: Msg.cs:5
static void SetColor()
Definition: Msg.cs:22
Definition: Point.cs:9
SourceStat stats
SourceElement elements
Definition: UINote.cs:6