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