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