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