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