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