Elin Decompiled Documentation EA 23.234 Nightly
Loading...
Searching...
No Matches
ElementContainer.cs
Go to the documentation of this file.
1using System;
2using System.Collections.Generic;
3using System.Linq;
4using System.Runtime.Serialization;
5using Newtonsoft.Json;
6using UnityEngine;
7
8public class ElementContainer : EClass
9{
10 public enum NoteMode
11 {
12 Default,
15 Domain,
17 }
18
19 public Dictionary<int, Element> dict = new Dictionary<int, Element>();
20
22
23 public const int sizeElement = 5;
24
25 [JsonProperty(PropertyName = "A")]
26 public List<int> list;
27
28 public virtual Card Card => null;
29
30 public virtual Chara Chara => null;
31
32 public virtual bool LimitLink => true;
33
34 public virtual bool IsMeleeWeapon => false;
35
37 private void OnSerializing(StreamingContext context)
38 {
39 list = new List<int>();
40 foreach (Element value in dict.Values)
41 {
42 if (value.vBase != 0 || value.vExp != 0 || value.vPotential != 0 || value.vTempPotential != 0)
43 {
44 list.AddRange(new int[5] { value.id, value.vBase, value.vExp, value.vPotential, value.vTempPotential });
45 }
46 }
47 if (list.Count == 0)
48 {
49 list = null;
50 }
51 }
52
54 private void OnDeserialized(StreamingContext context)
55 {
56 if (list == null)
57 {
58 return;
59 }
60 for (int i = 0; i < list.Count; i += 5)
61 {
62 Element orCreateElement = GetOrCreateElement(list[i]);
63 if (orCreateElement != null)
64 {
65 orCreateElement.vBase += list[i + 1];
66 orCreateElement.vExp += list[i + 2];
67 orCreateElement.vPotential += list[i + 3];
68 orCreateElement.vTempPotential = list[i + 4];
69 orCreateElement.owner = this;
70 }
71 }
72 }
73
74 public void ApplyElementMap(int uid, SourceValueType type, Dictionary<int, int> map, int lv, bool invert = false, bool applyFeat = false)
75 {
76 int num = ((!invert) ? 1 : (-1));
77 Rand.SetSeed(uid);
78 foreach (KeyValuePair<int, int> item in map)
79 {
80 Element orCreateElement = GetOrCreateElement(item.Key);
81 int value = item.Value;
82 if (value != 0)
83 {
84 if (orCreateElement.source.category == "skill")
85 {
86 orCreateElement.vSourcePotential += orCreateElement.GetSourcePotential(value) * num;
87 }
88 if (lv > 10000000)
89 {
90 lv = 10000000;
91 }
92 long num2 = orCreateElement.GetSourceValue(value, lv, type) * num;
93 if (num2 >= 99999999)
94 {
95 num2 = 99999999L;
96 }
97 orCreateElement.vSource += (int)num2;
98 if (applyFeat && orCreateElement is Feat)
99 {
100 (orCreateElement as Feat).Apply((int)num2, this);
101 }
102 }
103 }
104 Rand.SetSeed();
105 }
106
107 public void ApplyMaterialElementMap(Thing t, bool invert = false)
108 {
109 int num = ((!invert) ? 1 : (-1));
111 Rand.SetSeed(t.uid);
112 foreach (KeyValuePair<int, int> item in material.elementMap)
113 {
114 int value = item.Value;
115 if (value == 0)
116 {
117 continue;
118 }
119 Element orCreateElement = GetOrCreateElement(item.Key);
120 if (!orCreateElement.source.IsMaterialEncAppliable(t))
121 {
122 if (orCreateElement.vBase == 0 && orCreateElement.vSource == 0 && orCreateElement.vLink == 0 && orCreateElement.vExp == 0 && orCreateElement.vPotential == 0)
123 {
124 Remove(orCreateElement.id);
125 }
126 continue;
127 }
128 int num2 = orCreateElement.GetMaterialSourceValue(t, value) * num;
129 orCreateElement.vSource += num2;
130 if (orCreateElement.vBase == 0 && orCreateElement.vSource == 0 && orCreateElement.vLink == 0 && orCreateElement.vExp == 0 && orCreateElement.vPotential == 0)
131 {
132 Remove(orCreateElement.id);
133 }
134 }
135 Rand.SetSeed();
136 }
137
138 public void ImportElementMap(Dictionary<int, int> map)
139 {
140 foreach (KeyValuePair<int, int> item in map)
141 {
142 GetOrCreateElement(item.Key).vSource += item.Value;
143 }
144 }
145
147 {
148 for (int i = 0; i < ints.Length; i += 2)
149 {
150 GetOrCreateElement(ints[i]).vSource += ints[i + 1];
151 }
152 return this;
153 }
154
155 public void ApplyPotential(int mode = 0)
156 {
157 foreach (Element value in dict.Values)
158 {
159 if (value.HasTag("primary"))
160 {
161 value.vTempPotential = (value.ValueWithoutLink - ((mode != 2) ? 7 : 0)) * 5;
162 }
163 }
164 }
165
166 public int Value(int ele)
167 {
168 Element element = GetElement(ele);
169 if (element == null)
170 {
171 if (EClass.core.game == null)
172 {
173 return 0;
174 }
175 if (Card == null || !Card.IsPCFactionOrMinion)
176 {
177 return 0;
178 }
179 if (ele != 78)
180 {
181 return EClass.pc.faction.charaElements.Value(ele);
182 }
183 return GetOrCreateElement(ele).Value;
184 }
185 return element.Value;
186 }
187
188 public virtual int ValueBonus(Element e)
189 {
190 return 0;
191 }
192
193 public int ValueWithoutLink(int ele)
194 {
195 return GetElement(ele)?.ValueWithoutLink ?? 0;
196 }
197
198 public int ValueWithoutLink(string alias)
199 {
200 return GetElement(alias)?.ValueWithoutLink ?? 0;
201 }
202
203 public int GetFeatRef(int ele, int idx = 0)
204 {
205 if (!(GetElement(ele) is Feat feat))
206 {
207 return 0;
208 }
209 feat.Apply(feat.Value, this);
210 return Feat.featRef[idx].ToInt();
211 }
212
213 public int Exp(int ele)
214 {
215 return GetElement(ele)?.vExp ?? 0;
216 }
217
218 public bool Has(int ele)
219 {
220 Element element = GetElement(ele);
221 if (element == null)
222 {
223 return false;
224 }
225 return element.Value > 0;
226 }
227
228 public bool Has(SourceElement.Row row)
229 {
230 return Has(row.id);
231 }
232
233 public bool Has(string alias)
234 {
235 return Has(EClass.sources.elements.alias[alias].id);
236 }
237
238 public bool HasBase(int ele)
239 {
240 Element element = GetElement(ele);
241 if (element == null)
242 {
243 return false;
244 }
245 int num = element.ValueWithoutLink;
246 switch (ele)
247 {
248 case 300:
249 num += Value(1516) * -4;
250 num += Value(1517) * 4;
251 break;
252 case 307:
253 num += Value(1524) * -4;
254 num += Value(1525) * 4;
255 break;
256 }
257 return num != 0;
258 }
259
260 public int Base(int ele)
261 {
262 return GetElement(ele)?.ValueWithoutLink ?? 0;
263 }
264
265 public void Learn(int ele, int v = 1)
266 {
267 ModBase(ele, v);
268 OnLearn(ele);
269 }
270
271 public void Train(int ele, int a = 10)
272 {
273 OnTrain(ele);
274 ModTempPotential(ele, a);
275 }
276
277 public void ModExp(int ele, float a, bool chain = false)
278 {
279 if ((Card != null && Card.isChara && Card.Chara.isDead) || a == 0f)
280 {
281 return;
282 }
283 Element element = GetElement(ele);
284 if (element == null || !element.CanGainExp)
285 {
286 return;
287 }
288 if (a > 0f)
289 {
290 if (!chain && Card != null && Card.isChara)
291 {
292 a = a * (float)Card.Chara.GetDaysTogetherBonus() / 100f;
293 }
294 if (element.UseExpMod)
295 {
296 a = a * (float)Mathf.Clamp(element.UsePotential ? element.Potential : 100, 10, 1000) / (float)(100 + Mathf.Max(0, element.ValueWithoutLink) * 25);
297 if (EClass.rndf(1f) < a % 1f)
298 {
299 a += 1f;
300 }
301 }
302 if (!chain && element.source.parentFactor > 0f && Card != null && !element.source.aliasParent.IsEmpty())
303 {
304 Element element2 = element.GetParent(Card);
305 if (element2.CanGainExp)
306 {
307 ModExp(element2.id, Mathf.Clamp(a * element.source.parentFactor / 100f, 1f, 1000f), chain: true);
308 }
309 }
310 }
311 element.vExp += (int)a;
312 if (element.vExp >= element.ExpToNext)
313 {
314 int num = element.vExp - element.ExpToNext;
315 int vBase = element.vBase;
316 ModBase(ele, 1);
317 OnLevelUp(element, vBase);
318 element.vExp = Mathf.Clamp(num / 2, 0, element.ExpToNext / 2);
319 if (element.vTempPotential > 0)
320 {
321 element.vTempPotential -= element.vTempPotential / 4 + EClass.rnd(5) + 5;
322 if (element.vTempPotential < 0)
323 {
324 element.vTempPotential = 0;
325 }
326 }
327 else if (element.vTempPotential < 0)
328 {
329 element.vTempPotential += -element.vTempPotential / 4 + EClass.rnd(5) + 5;
330 if (element.vTempPotential > 0)
331 {
332 element.vTempPotential = 0;
333 }
334 }
335 }
336 else if (element.vExp < 0)
337 {
338 if (element.ValueWithoutLink <= 1)
339 {
340 element.vExp = 0;
341 return;
342 }
343 int vBase2 = element.vBase;
344 ModBase(ele, -1);
345 OnLevelDown(element, vBase2);
346 element.vExp = Mathf.Max(element.ExpToNext / 2, element.ExpToNext + element.vExp);
347 }
348 }
349
350 public virtual void OnLearn(int ele)
351 {
352 }
353
354 public virtual void OnTrain(int ele)
355 {
356 }
357
358 public virtual void OnLevelUp(Element e, int lastValue)
359 {
360 }
361
362 public virtual void OnLevelDown(Element e, int lastValue)
363 {
364 }
365
366 public Element SetBase(string alias, int v, int potential = 0)
367 {
368 return SetBase(EClass.sources.elements.alias[alias].id, v, potential);
369 }
370
371 public Element SetBase(int id, int v, int potential = 0)
372 {
373 Element orCreateElement = GetOrCreateElement(id);
374 if (parent != null && (!LimitLink || orCreateElement.CanLink(this)))
375 {
376 parent.ModLink(id, -orCreateElement.vBase + v);
377 }
378 orCreateElement.vBase = v;
379 orCreateElement.vExp = 0;
380 orCreateElement.vPotential = potential;
381 orCreateElement.OnChangeValue();
382 if (orCreateElement.vBase == 0 && orCreateElement.vSource == 0 && orCreateElement.vLink == 0 && orCreateElement.vPotential == 0 && orCreateElement.vExp == 0)
383 {
384 Remove(orCreateElement.id);
385 }
386 return orCreateElement;
387 }
388
389 public void SetTo(int id, int v)
390 {
391 Element orCreateElement = GetOrCreateElement(id);
392 int num = v - (orCreateElement.vBase + orCreateElement.vSource);
393 if (num != 0)
394 {
395 ModBase(id, num);
396 }
397 if (orCreateElement.vBase == 0 && orCreateElement.vSource == 0 && orCreateElement.vLink == 0 && orCreateElement.vPotential == 0 && orCreateElement.vExp == 0)
398 {
399 Remove(orCreateElement.id);
400 }
401 }
402
403 public void Remove(int id)
404 {
405 Element element = GetElement(id);
406 if (element != null)
407 {
408 if (parent != null && (!LimitLink || element.CanLink(this)))
409 {
410 parent.ModLink(id, -element.Value);
411 }
412 dict.Remove(id);
413 }
414 }
415
416 public Element ModBase(int ele, int v)
417 {
418 Element orCreateElement = GetOrCreateElement(ele);
419 orCreateElement.vBase += v;
420 if (parent != null && (!LimitLink || orCreateElement.CanLink(this)))
421 {
422 parent.ModLink(ele, v);
423 }
424 orCreateElement.CheckLevelBonus(this);
425 orCreateElement.OnChangeValue();
426 if (orCreateElement.vBase == 0 && orCreateElement.vSource == 0 && orCreateElement.vLink == 0 && orCreateElement.vPotential == 0 && orCreateElement.vExp == 0)
427 {
428 Remove(orCreateElement.id);
429 }
430 return orCreateElement;
431 }
432
433 public virtual void OnChangeValue()
434 {
435 }
436
437 public Element ModPotential(int ele, int v)
438 {
439 Element orCreateElement = GetOrCreateElement(ele);
440 orCreateElement.vPotential += v;
441 if (orCreateElement.vPotential > 1000)
442 {
443 orCreateElement.vPotential = 1000;
444 }
445 return orCreateElement;
446 }
447
448 public Element ModTempPotential(int ele, int v, int threshMsg = 0)
449 {
450 Element orCreateElement = GetOrCreateElement(ele);
451 orCreateElement.vTempPotential += v;
452 if (orCreateElement.vTempPotential > 1000)
453 {
454 orCreateElement.vTempPotential = 1000;
455 }
456 OnModTempPotential(orCreateElement, v, threshMsg);
457 return orCreateElement;
458 }
459
460 public virtual void OnModTempPotential(Element e, int v, int threshMsg)
461 {
462 }
463
464 private Element ModLink(int id, int v)
465 {
466 Element orCreateElement = GetOrCreateElement(id);
467 orCreateElement.vLink += v;
468 orCreateElement.OnChangeValue();
469 if (parent != null && (!LimitLink || orCreateElement.CanLink(this)))
470 {
471 parent.ModLink(id, v);
472 }
473 return orCreateElement;
474 }
475
476 public int GetSpellExp(Chara c, Element e, int costMod = 100)
477 {
478 Act.Cost cost = e.GetCost(c);
479 int num = cost.cost * ((cost.type == Act.CostType.SP) ? 20 : 5) * (100 + c.Evalue(1208) * 30) / 100 + 10;
480 num = num * costMod / 100;
481 if (!e.source.aliasParent.IsEmpty())
482 {
483 int num2 = ValueWithoutLink(e.source.aliasParent) - ValueWithoutLink(e.source.id);
484 num = ((num2 < 0) ? (num * 100 / (100 - num2 * 25)) : (num * (100 + num2 * 5) / 100));
485 }
486 if (num < 0)
487 {
488 num = 0;
489 }
490 return num;
491 }
492
493 public Element GetElement(string alias)
494 {
495 return GetElement(EClass.sources.elements.alias.TryGetValue(alias)?.id ?? 0);
496 }
497
498 public Element GetElement(int id)
499 {
500 return dict.TryGetValue(id);
501 }
502
503 public Element CreateElement(int id)
504 {
505 Element element = Element.Create(id);
506 if (element == null)
507 {
508 return null;
509 }
510 element.owner = this;
511 dict.Add(id, element);
512 return element;
513 }
514
516 {
517 return GetOrCreateElement(ele.id);
518 }
519
520 public Element GetOrCreateElement(string alias)
521 {
522 return GetOrCreateElement(EClass.sources.elements.alias[alias].id);
523 }
524
526 {
527 Element value = null;
528 if (!dict.TryGetValue(id, out value))
529 {
530 value = CreateElement(id);
531 }
532 return value;
533 }
534
535 public void SetParent(Card c)
536 {
537 SetParent(c?.elements);
538 }
539
540 public void SetParent(ElementContainer newParent = null)
541 {
542 if (parent != null)
543 {
544 foreach (Element value in dict.Values)
545 {
546 if (!LimitLink || value.CanLink(this))
547 {
548 parent.ModLink(value.id, -(value.vBase + value.vSource));
549 }
550 }
551 }
552 if (newParent != null)
553 {
554 foreach (Element value2 in dict.Values)
555 {
556 if (!LimitLink || value2.CanLink(this))
557 {
558 newParent.ModLink(value2.id, value2.vBase + value2.vSource);
559 }
560 }
561 }
562 parent = newParent;
563 }
564
565 public List<Element> ListElements(Func<Element, bool> shoudList = null, Comparison<Element> comparison = null)
566 {
567 List<Element> list = new List<Element>();
568 List<Element> eles = dict.Values.ToList();
569 if (Card != null && Card.Chara != null)
570 {
572 {
573 AddElements(EClass.pc.faction.charaElements, isGlobal: true);
574 }
575 AddElements(Card.Chara.faithElements, isGlobal: false);
576 }
577 foreach (Element item2 in eles)
578 {
579 if (shoudList == null || shoudList(item2))
580 {
581 list.Add(item2);
582 }
583 }
584 if (comparison != null)
585 {
586 list.Sort(comparison);
587 }
588 return list;
589 void AddElements(ElementContainer container, bool isGlobal)
590 {
591 if (container == null)
592 {
593 return;
594 }
595 foreach (Element value in container.dict.Values)
596 {
597 bool flag = true;
598 foreach (Element item3 in eles)
599 {
600 if (value.id == item3.id)
601 {
602 flag = false;
603 break;
604 }
605 }
606 if (flag && value.Value != 0)
607 {
608 if (isGlobal)
609 {
611 eles.Add(item);
612 }
613 else
614 {
615 eles.Add(value);
616 }
617 }
618 }
619 }
620 }
621
622 public List<Element> ListBestAttributes()
623 {
624 List<Element> obj = ListElements((Element a) => a.HasTag("primary"));
625 obj.Sort((Element a, Element b) => (b.ValueWithoutLink != a.ValueWithoutLink) ? (b.ValueWithoutLink - a.ValueWithoutLink) : (a.id - b.id));
626 return obj;
627 }
628
629 public List<Element> ListBestSkills()
630 {
631 List<Element> obj = ListElements((Element a) => a.source.category == "skill");
632 obj.Sort((Element a, Element b) => (b.ValueWithoutLink != a.ValueWithoutLink) ? (b.ValueWithoutLink - a.ValueWithoutLink) : (a.id - b.id));
633 return obj;
634 }
635
636 public List<Element> ListGeneFeats()
637 {
638 return ListElements((Element a) => a.ValueWithoutLink > 0 && a.source.category == "feat" && a.source.cost.Length != 0 && a.source.cost[0] > 0 && a.source.geneSlot >= 0);
639 }
640
641 public List<Element> ListLearnable(Chara c)
642 {
643 List<Element> list = new List<Element>();
644 foreach (KeyValuePair<int, Element> item in c.elements.dict)
645 {
646 if (!dict.ContainsKey(item.Key))
647 {
648 list.Add(item.Value);
649 }
650 }
651 return list;
652 }
653
654 public List<Element> ListRune()
655 {
656 return ListElements((Element a) => !a.source.encSlot.IsEmpty() && a.vBase + a.vSource != 0);
657 }
658
659 public void CopyTo(ElementContainer container)
660 {
661 container.dict.Clear();
662 foreach (KeyValuePair<int, Element> item in dict)
663 {
664 Element element = container.CreateElement(item.Key);
665 element.vBase = item.Value.vBase;
666 element.vExp = item.Value.vExp;
667 element.vSource = item.Value.vSource;
668 }
669 }
670
671 public static int GetSortVal(Element a)
672 {
673 int num = a.Value;
674 if (a.source.textAlt.Length <= 2 || a.Value < 0)
675 {
676 num -= 100000;
677 }
678 if (a.id == 2)
679 {
680 num += 20000;
681 }
682 if (a.IsFoodTraitMain)
683 {
684 num += 10000;
685 }
686 return num;
687 }
688
689 public void AddNote(UINote n, Func<Element, bool> isValid = null, Action onAdd = null, NoteMode mode = NoteMode.Default, bool addRaceFeat = false, Func<Element, string, string> funcText = null, Action<UINote, Element> onAddNote = null)
690 {
691 List<Element> list = new List<Element>();
692 foreach (Element value in dict.Values)
693 {
694 if ((isValid == null || isValid(value)) && (mode != NoteMode.CharaMake || value.ValueWithoutLink != 0) && (value.Value != 0 || mode == NoteMode.CharaMakeAttributes) && (!value.HasTag("hidden") || EClass.debug.showExtra))
695 {
696 list.Add(value);
697 }
698 }
699 if (addRaceFeat)
700 {
701 Element element = Element.Create(29, 1);
702 element.owner = this;
703 list.Add(element);
704 }
705 if (list.Count == 0)
706 {
707 return;
708 }
709 onAdd?.Invoke();
710 switch (mode)
711 {
712 case NoteMode.CharaMake:
713 case NoteMode.CharaMakeAttributes:
714 list.Sort((Element a, Element b) => a.GetSortVal(UIList.SortMode.ByElementParent) - b.GetSortVal(UIList.SortMode.ByElementParent));
715 break;
716 case NoteMode.BonusTrait:
717 list.Sort((Element a, Element b) => GetSortVal(b) - GetSortVal(a));
718 break;
719 default:
720 list.Sort((Element a, Element b) => a.SortVal() - b.SortVal());
721 break;
722 }
723 foreach (Element item in list)
724 {
725 item.AddEncNote(n, Card, mode, funcText, onAddNote);
726 }
727 }
728
729 public void AddNoteAll(UINote n)
730 {
731 Transform transform = n.AddExtra<Transform>("noteRace");
732 UINote n2 = transform.Find("note1").GetComponent<UINote>();
733 UINote n3 = transform.Find("note2").GetComponent<UINote>();
734 AddNote(n3, (Element e) => e.HasTag("primary"), delegate
735 {
736 n3.AddHeader("HeaderNoteSmall", "attributes");
737 }, NoteMode.CharaMakeAttributes);
738 AddNote(n2, (Element e) => e.source.category == "skill" && !e.HasTag("hidden") && e.ValueWithoutLink > 1 && e.source.categorySub != "weapon", delegate
739 {
740 n2.AddHeader("HeaderNoteSmall", "skills");
741 }, NoteMode.CharaMake);
742 AddNote(n2, (Element e) => e is Feat, delegate
743 {
744 n2.AddHeader("HeaderNoteSmall", "feats");
745 }, NoteMode.CharaMake);
746 }
747}
SourceValueType
Definition: ACT.cs:62
CostType
Definition: ACT.cs:64
Definition: Card.cs:11
bool IsPCFactionOrMinion
Definition: Card.cs:2260
virtual Chara Chara
Definition: Card.cs:2058
ElementContainerCard elements
Definition: Card.cs:41
SourceMaterial.Row material
Definition: Card.cs:2039
int uid
Definition: Card.cs:122
virtual bool isChara
Definition: Card.cs:2071
int GetDaysTogetherBonus()
Definition: Card.cs:2969
int Evalue(int ele)
Definition: Card.cs:2559
Definition: Chara.cs:10
Faction faction
Definition: Chara.cs:427
override bool IsPCFaction
Definition: Chara.cs:671
ElementContainer faithElements
Definition: Chara.cs:38
bool isDead
Definition: Chara.cs:389
bool showExtra
Definition: CoreDebug.cs:168
Game game
Definition: Core.cs:72
Definition: EClass.cs:5
static Core core
Definition: EClass.cs:6
static int rnd(long a)
Definition: EClass.cs:58
static SourceManager sources
Definition: EClass.cs:42
static float rndf(float a)
Definition: EClass.cs:92
static Chara pc
Definition: EClass.cs:14
static CoreDebug debug
Definition: EClass.cs:48
static int GetSortVal(Element a)
void ModExp(int ele, float a, bool chain=false)
List< Element > ListElements(Func< Element, bool > shoudList=null, Comparison< Element > comparison=null)
void Train(int ele, int a=10)
void ApplyPotential(int mode=0)
bool Has(string alias)
virtual bool LimitLink
Dictionary< int, Element > dict
void SetParent(Card c)
ElementContainer parent
void AddNoteAll(UINote n)
List< Element > ListLearnable(Chara c)
void Learn(int ele, int v=1)
void AddNote(UINote n, Func< Element, bool > isValid=null, Action onAdd=null, NoteMode mode=NoteMode.Default, bool addRaceFeat=false, Func< Element, string, string > funcText=null, Action< UINote, Element > onAddNote=null)
bool Has(int ele)
void ApplyMaterialElementMap(Thing t, bool invert=false)
Element ModLink(int id, int v)
int ValueWithoutLink(string alias)
Element ModPotential(int ele, int v)
Element SetBase(int id, int v, int potential=0)
int Value(int ele)
virtual void OnTrain(int ele)
Element ModTempPotential(int ele, int v, int threshMsg=0)
Element GetOrCreateElement(int id)
void ImportElementMap(Dictionary< int, int > map)
virtual int ValueBonus(Element e)
void OnSerializing(StreamingContext context)
ElementContainer ImportElementMap(int[] ints)
List< Element > ListRune()
void CopyTo(ElementContainer container)
int ValueWithoutLink(int ele)
Element ModBase(int ele, int v)
virtual void OnLevelDown(Element e, int lastValue)
List< Element > ListBestSkills()
virtual bool IsMeleeWeapon
Element GetElement(int id)
int GetFeatRef(int ele, int idx=0)
virtual void OnChangeValue()
void OnDeserialized(StreamingContext context)
void ApplyElementMap(int uid, SourceValueType type, Dictionary< int, int > map, int lv, bool invert=false, bool applyFeat=false)
List< Element > ListBestAttributes()
virtual void OnModTempPotential(Element e, int v, int threshMsg)
virtual void OnLearn(int ele)
void SetTo(int id, int v)
bool Has(SourceElement.Row row)
Element SetBase(string alias, int v, int potential=0)
void Remove(int id)
List< Element > ListGeneFeats()
virtual void OnLevelUp(Element e, int lastValue)
Element GetOrCreateElement(Element ele)
void SetParent(ElementContainer newParent=null)
Element CreateElement(int id)
int GetSpellExp(Chara c, Element e, int costMod=100)
bool HasBase(int ele)
Element GetElement(string alias)
Element GetOrCreateElement(string alias)
virtual bool CanGainExp
Definition: ELEMENT.cs:300
virtual void OnChangeValue()
Definition: ELEMENT.cs:960
virtual long GetSourceValue(long v, int lv, SourceValueType type)
Definition: ELEMENT.cs:438
int ValueWithoutLink
Definition: ELEMENT.cs:294
virtual bool UseExpMod
Definition: ELEMENT.cs:310
int Potential
Definition: ELEMENT.cs:298
int GetMaterialSourceValue(Thing t, int v)
Definition: ELEMENT.cs:421
int id
Definition: ELEMENT.cs:250
int vBase
Definition: ELEMENT.cs:252
SourceElement.Row source
Definition: ELEMENT.cs:273
int vExp
Definition: ELEMENT.cs:254
int vPotential
Definition: ELEMENT.cs:256
virtual int GetSourcePotential(int v)
Definition: ELEMENT.cs:411
bool HasTag(string tag)
Definition: ELEMENT.cs:473
int vTempPotential
Definition: ELEMENT.cs:258
int GetSortVal(UIList.SortMode m)
Definition: ELEMENT.cs:1005
int Value
Definition: ELEMENT.cs:292
void CheckLevelBonus(ElementContainer owner, UINote n=null)
Definition: ELEMENT.cs:964
static Element Create(int id, int v=0)
Definition: ELEMENT.cs:1104
virtual bool CanLink(ElementContainer owner)
Definition: ELEMENT.cs:468
int vLink
Definition: ELEMENT.cs:260
virtual Act.Cost GetCost(Chara c)
Definition: ELEMENT.cs:1028
int vSource
Definition: ELEMENT.cs:262
virtual bool UsePotential
Definition: ELEMENT.cs:334
Element GetParent(Card c)
Definition: ELEMENT.cs:522
bool IsFoodTraitMain
Definition: ELEMENT.cs:367
virtual int ExpToNext
Definition: ELEMENT.cs:308
int SortVal(bool charaSheet=false)
Definition: ELEMENT.cs:462
ElementContainerFaction charaElements
Definition: FACTION.cs:146
Definition: FEAT.cs:293
static string[] featRef
Definition: FEAT.cs:296
Definition: Rand.cs:4
static void SetSeed(int a=-1)
Definition: Rand.cs:37
SourceElement elements
Definition: Thing.cs:8
Definition: UIList.cs:9
SortMode
Definition: UIList.cs:27
Definition: UINote.cs:6
Definition: ACT.cs:71