Elin Decompiled Documentation EA 23.329 Nightly
Loading...
Searching...
No Matches
ElementContainer Class Reference
Inheritance diagram for ElementContainer:
EClass ElementContainerCard ElementContainerCondition ElementContainerFaction ElementContainerField ElementContainerZone

Public Types

enum  NoteMode {
  Default , CharaMake , CharaMakeAttributes , Domain ,
  BonusTrait
}
 

Public Member Functions

void ApplyElementMap (int uid, SourceValueType type, Dictionary< int, int > map, int lv, bool invert=false, bool applyFeat=false)
 
void ApplyMaterialElementMap (Thing t, bool invert=false)
 
void ImportElementMap (Dictionary< int, int > map)
 
ElementContainer ImportElementMap (int[] ints)
 
void ApplyPotential (int mode=0)
 
int Value (int ele)
 
virtual int ValueBonus (Element e)
 
int ValueWithoutLink (int ele)
 
int ValueWithoutLink (string alias)
 
int GetFeatRef (int ele, int idx=0)
 
int Exp (int ele)
 
bool Has (int ele)
 
bool Has (SourceElement.Row row)
 
bool Has (string alias)
 
bool HasBase (int ele)
 
int Base (int ele)
 
void Learn (int ele, int v=1)
 
void Train (int ele, int a=10)
 
void ModExp (int ele, float a, bool chain=false)
 
virtual void OnLearn (int ele)
 
virtual void OnTrain (int ele)
 
virtual void OnLevelUp (Element e, int lastValue)
 
virtual void OnLevelDown (Element e, int lastValue)
 
Element SetBase (string alias, int v, int potential=0)
 
Element SetBase (int id, int v, int potential=0)
 
void SetTo (int id, int v)
 
void Remove (int id)
 
Element ModBase (int ele, int v)
 
virtual void OnChangeValue ()
 
Element ModPotential (int ele, int v)
 
Element ModTempPotential (int ele, int v, int threshMsg=0)
 
virtual void OnModTempPotential (Element e, int v, int threshMsg)
 
int GetSpellExp (Chara c, Element e, int costMod=100)
 
Element GetElement (string alias)
 
Element GetElement (int id)
 
Element CreateElement (int id)
 
Element GetOrCreateElement (Element ele)
 
Element GetOrCreateElement (string alias)
 
Element GetOrCreateElement (int id)
 
void SetParent (Card c)
 
void SetParent (ElementContainer newParent=null)
 
List< ElementListElements (Func< Element, bool > shoudList=null, Comparison< Element > comparison=null)
 
List< ElementListBestAttributes ()
 
List< ElementListBestSkills ()
 
List< ElementListGeneFeats ()
 
List< ElementListLearnable (Chara c)
 
List< ElementListRune ()
 
void CopyTo (ElementContainer container)
 
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)
 
void AddNoteAll (UINote n)
 

Static Public Member Functions

static int GetSortVal (Element a)
 
- Static Public Member Functions inherited from EClass
static int rndSeed (int a, int seed)
 
static int rnd (long a)
 
static int rnd (int a)
 
static int curve (long _a, int start, int step, int rate=75)
 
static int sqrt (int a)
 
static int rndHalf (int a)
 
static float rndf (float a)
 
static int rndSqrt (int a)
 
static void Wait (float a, Card c)
 
static void Wait (float a, Point p)
 
static int Bigger (int a, int b)
 
static int Smaller (int a, int b)
 

Public Attributes

Dictionary< int, Elementdict = new Dictionary<int, Element>()
 
ElementContainer parent
 
List< int > list
 

Static Public Attributes

const int sizeElement = 5
 
- Static Public Attributes inherited from EClass
static Core core
 

Properties

virtual Card Card [get]
 
virtual Chara Chara [get]
 
virtual bool LimitLink [get]
 
virtual bool IsMeleeWeapon [get]
 
- Properties inherited from EClass
static Game game [get]
 
static bool AdvMode [get]
 
static Player player [get]
 
static Chara pc [get]
 
static UI ui [get]
 
static Map _map [get]
 
static Zone _zone [get]
 
static FactionBranch Branch [get]
 
static FactionBranch BranchOrHomeBranch [get]
 
static Faction Home [get]
 
static Faction Wilds [get]
 
static Scene scene [get]
 
static BaseGameScreen screen [get]
 
static GameSetting setting [get]
 
static GameData gamedata [get]
 
static ColorProfile Colors [get]
 
static World world [get]
 
static SourceManager sources [get]
 
static SourceManager editorSources [get]
 
static SoundManager Sound [get]
 
static CoreDebug debug [get]
 

Private Member Functions

void OnSerializing (StreamingContext context)
 
void OnDeserialized (StreamingContext context)
 
Element ModLink (int id, int v)
 

Detailed Description

Definition at line 8 of file ElementContainer.cs.

Member Enumeration Documentation

◆ NoteMode

Enumerator
Default 
CharaMake 
CharaMakeAttributes 
Domain 
BonusTrait 

Definition at line 10 of file ElementContainer.cs.

Member Function Documentation

◆ AddNote()

void ElementContainer.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 
)
inline

Definition at line 694 of file ElementContainer.cs.

695 {
696 List<Element> list = new List<Element>();
697 foreach (Element value in dict.Values)
698 {
699 if ((isValid == null || isValid(value)) && (mode != NoteMode.CharaMake || value.ValueWithoutLink != 0) && (value.Value != 0 || mode == NoteMode.CharaMakeAttributes) && (!value.HasTag("hidden") || EClass.debug.showExtra))
700 {
701 list.Add(value);
702 }
703 }
704 if (addRaceFeat)
705 {
706 Element element = Element.Create(29, 1);
707 element.owner = this;
708 list.Add(element);
709 }
710 if (list.Count == 0)
711 {
712 return;
713 }
714 onAdd?.Invoke();
715 switch (mode)
716 {
717 case NoteMode.CharaMake:
718 case NoteMode.CharaMakeAttributes:
719 list.Sort((Element a, Element b) => a.GetSortVal(UIList.SortMode.ByElementParent) - b.GetSortVal(UIList.SortMode.ByElementParent));
720 break;
721 case NoteMode.BonusTrait:
722 list.Sort((Element a, Element b) => GetSortVal(b) - GetSortVal(a));
723 break;
724 default:
725 list.Sort((Element a, Element b) => a.SortVal() - b.SortVal());
726 break;
727 }
728 foreach (Element item in list)
729 {
730 item.AddEncNote(n, Card, mode, funcText, onAddNote);
731 }
732 }
Definition: Card.cs:11
bool showExtra
Definition: CoreDebug.cs:183
Definition: EClass.cs:6
static CoreDebug debug
Definition: EClass.cs:49
static int GetSortVal(Element a)
Dictionary< int, Element > dict
int ValueWithoutLink
Definition: ELEMENT.cs:303
bool HasTag(string tag)
Definition: ELEMENT.cs:482
int GetSortVal(UIList.SortMode m)
Definition: ELEMENT.cs:1030
int Value
Definition: ELEMENT.cs:301
static Element Create(int id, int v=0)
Definition: ELEMENT.cs:1123
int SortVal(bool charaSheet=false)
Definition: ELEMENT.cs:471
Definition: UIList.cs:9
SortMode
Definition: UIList.cs:27

References Element.Create(), EClass.debug, dict, GetSortVal(), Element.GetSortVal(), Element.HasTag(), item, list, CoreDebug.showExtra, Element.SortVal(), Element.Value, and Element.ValueWithoutLink.

Referenced by AddNoteAll(), UICharaMaker.Refresh(), and RecipeCard.WriteNote().

◆ AddNoteAll()

void ElementContainer.AddNoteAll ( UINote  n)
inline

Definition at line 734 of file ElementContainer.cs.

735 {
736 Transform transform = n.AddExtra<Transform>("noteRace");
737 UINote n2 = transform.Find("note1").GetComponent<UINote>();
738 UINote n3 = transform.Find("note2").GetComponent<UINote>();
739 AddNote(n3, (Element e) => e.HasTag("primary"), delegate
740 {
741 n3.AddHeader("HeaderNoteSmall", "attributes");
742 }, NoteMode.CharaMakeAttributes);
743 AddNote(n2, (Element e) => e.source.category == "skill" && !e.HasTag("hidden") && e.ValueWithoutLink > 1 && e.source.categorySub != "weapon", delegate
744 {
745 n2.AddHeader("HeaderNoteSmall", "skills");
746 }, NoteMode.CharaMake);
747 AddNote(n2, (Element e) => e is Feat, delegate
748 {
749 n2.AddHeader("HeaderNoteSmall", "feats");
750 }, NoteMode.CharaMake);
751 }
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)
SourceElement.Row source
Definition: ELEMENT.cs:282
Definition: FEAT.cs:341
Definition: UINote.cs:6

References AddNote(), Element.HasTag(), Element.source, and Element.ValueWithoutLink.

Referenced by UICharaMaker.ListJob(), and UICharaMaker.ListRace().

◆ ApplyElementMap()

void ElementContainer.ApplyElementMap ( int  uid,
SourceValueType  type,
Dictionary< int, int >  map,
int  lv,
bool  invert = false,
bool  applyFeat = false 
)
inline

Definition at line 74 of file ElementContainer.cs.

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 }
Element GetOrCreateElement(Element ele)
virtual long GetSourceValue(long v, int lv, SourceValueType type)
Definition: ELEMENT.cs:447
virtual int GetSourcePotential(int v)
Definition: ELEMENT.cs:420
Definition: Rand.cs:4
static void SetSeed(int a=-1)
Definition: Rand.cs:44

References GetOrCreateElement(), Element.GetSourcePotential(), Element.GetSourceValue(), item, Rand.SetSeed(), and Element.source.

Referenced by Chara.ApplyJob(), Chara.ApplyRace(), UICharaMaker.ListJob(), UICharaMaker.ListRace(), Chara.OnDeserialized(), Card.SetLv(), and ElementContainerCard.SetOwner().

◆ ApplyMaterialElementMap()

void ElementContainer.ApplyMaterialElementMap ( Thing  t,
bool  invert = false 
)
inline

Definition at line 107 of file ElementContainer.cs.

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 }
SourceMaterial.Row material
Definition: Card.cs:2103
int uid
Definition: Card.cs:125
void Remove(int id)
int GetMaterialSourceValue(Thing t, int v)
Definition: ELEMENT.cs:430
int id
Definition: ELEMENT.cs:259
int vBase
Definition: ELEMENT.cs:261
int vExp
Definition: ELEMENT.cs:263
int vPotential
Definition: ELEMENT.cs:265
int vLink
Definition: ELEMENT.cs:269
int vSource
Definition: ELEMENT.cs:271

References Element.GetMaterialSourceValue(), GetOrCreateElement(), Element.id, item, Card.material, material, Remove(), Rand.SetSeed(), Element.source, Card.uid, Element.vBase, Element.vExp, Element.vLink, Element.vPotential, and Element.vSource.

Referenced by Thing.ApplyMaterialElements().

◆ ApplyPotential()

void ElementContainer.ApplyPotential ( int  mode = 0)
inline

Definition at line 155 of file ElementContainer.cs.

156 {
157 foreach (Element value in dict.Values)
158 {
159 if (value.HasTag("primary"))
160 {
161 value.vTempPotential = Mathf.Max(30, (value.ValueWithoutLink - ((mode != 2) ? 8 : 0)) * 7);
162 }
163 }
164 }

References dict, Element.HasTag(), and Element.ValueWithoutLink.

Referenced by UICharaMaker.ListJob(), UICharaMaker.ListRace(), and UICharaMaker.Refresh().

◆ Base()

int ElementContainer.Base ( int  ele)
inline

Definition at line 260 of file ElementContainer.cs.

261 {
262 return GetElement(ele)?.ValueWithoutLink ?? 0;
263 }
Element GetElement(string alias)

References GetElement(), and Element.ValueWithoutLink.

Referenced by Card.ClampInitialSkill(), Chara.ModTempElement(), ActEffect.Proc(), and ConVampire.Tick().

◆ CopyTo()

void ElementContainer.CopyTo ( ElementContainer  container)
inline

Definition at line 664 of file ElementContainer.cs.

665 {
666 container.dict.Clear();
667 foreach (KeyValuePair<int, Element> item in dict)
668 {
669 Element element = container.CreateElement(item.Key);
670 element.vBase = item.Value.vBase;
671 element.vExp = item.Value.vExp;
672 element.vSource = item.Value.vSource;
673 }
674 }
Element CreateElement(int id)

References dict, and item.

Referenced by Card.Duplicate().

◆ CreateElement()

Element ElementContainer.CreateElement ( int  id)
inline

Definition at line 508 of file ElementContainer.cs.

509 {
510 Element element = Element.Create(id);
511 if (element == null)
512 {
513 return null;
514 }
515 element.owner = this;
516 dict.Add(id, element);
517 return element;
518 }

References Element.Create(), and dict.

Referenced by GetOrCreateElement(), and ListElements().

◆ Exp()

int ElementContainer.Exp ( int  ele)
inline

Definition at line 213 of file ElementContainer.cs.

214 {
215 return GetElement(ele)?.vExp ?? 0;
216 }

References GetElement(), and Element.vExp.

◆ GetElement() [1/2]

Element ElementContainer.GetElement ( int  id)
inline

Definition at line 503 of file ElementContainer.cs.

504 {
505 return dict.TryGetValue(id);
506 }

References dict.

◆ GetElement() [2/2]

◆ GetFeatRef()

int ElementContainer.GetFeatRef ( int  ele,
int  idx = 0 
)
inline

Definition at line 203 of file ElementContainer.cs.

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 }
static string[] featRef
Definition: FEAT.cs:344

References Feat.featRef, and GetElement().

◆ GetOrCreateElement() [1/3]

◆ GetOrCreateElement() [2/3]

Element ElementContainer.GetOrCreateElement ( int  id)
inline

Definition at line 530 of file ElementContainer.cs.

531 {
532 Element value = null;
533 if (!dict.TryGetValue(id, out value))
534 {
535 value = CreateElement(id);
536 }
537 return value;
538 }

References CreateElement(), and dict.

◆ GetOrCreateElement() [3/3]

Element ElementContainer.GetOrCreateElement ( string  alias)
inline

Definition at line 525 of file ElementContainer.cs.

526 {
527 return GetOrCreateElement(EClass.sources.elements.alias[alias].id);
528 }

References SourceManager.elements, GetOrCreateElement(), and EClass.sources.

◆ GetSortVal()

static int ElementContainer.GetSortVal ( Element  a)
inlinestatic

Definition at line 676 of file ElementContainer.cs.

677 {
678 int num = a.Value;
679 if (a.source.textAlt.Length <= 2 || a.Value < 0)
680 {
681 num -= 100000;
682 }
683 if (a.id == 2)
684 {
685 num += 20000;
686 }
687 if (a.IsFoodTraitMain)
688 {
689 num += 10000;
690 }
691 return num;
692 }
bool IsFoodTraitMain
Definition: ELEMENT.cs:376

References Element.id, Element.IsFoodTraitMain, Element.source, and Element.Value.

Referenced by AddNote(), and Thing.ListLimitedValidTraits().

◆ GetSpellExp()

int ElementContainer.GetSpellExp ( Chara  c,
Element  e,
int  costMod = 100 
)
inline

Definition at line 477 of file ElementContainer.cs.

478 {
479 Act.Cost cost = e.GetCost(c);
480 int num = cost.cost * ((cost.type == Act.CostType.SP) ? 20 : 5) * (100 + c.Evalue(1208) * 30) / 100 + 10;
481 num = num * costMod / 100;
482 if (!e.source.aliasParent.IsEmpty())
483 {
484 int num2 = ValueWithoutLink(e.source.aliasParent) - ValueWithoutLink(e.source.id);
485 if (num2 > 10000)
486 {
487 num2 = 10000;
488 }
489 num = ((num2 < 0) ? (num * 100 / (100 - num2 * 25)) : (num * (100 + num2 * 5) / 100));
490 }
491 if (num < 0)
492 {
493 num = 0;
494 }
495 return num;
496 }
Definition: ACT.cs:62
CostType
Definition: ACT.cs:64
int Evalue(int ele)
Definition: Card.cs:2704
int ValueWithoutLink(int ele)
virtual Act.Cost GetCost(Chara c)
Definition: ELEMENT.cs:1053
Definition: ACT.cs:71

References Card.Evalue(), Element.GetCost(), Element.source, and ValueWithoutLink().

Referenced by ActMelee.Attack().

◆ Has() [1/3]

bool ElementContainer.Has ( int  ele)
inline

◆ Has() [2/3]

bool ElementContainer.Has ( SourceElement::Row  row)
inline

Definition at line 228 of file ElementContainer.cs.

229 {
230 return Has(row.id);
231 }
bool Has(int ele)

References Has().

◆ Has() [3/3]

bool ElementContainer.Has ( string  alias)
inline

Definition at line 233 of file ElementContainer.cs.

234 {
235 return Has(EClass.sources.elements.alias[alias].id);
236 }

References SourceManager.elements, Has(), and EClass.sources.

◆ HasBase()

bool ElementContainer.HasBase ( int  ele)
inline

Definition at line 238 of file ElementContainer.cs.

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 }
int Value(int ele)

References GetElement(), Value(), and Element.ValueWithoutLink.

Referenced by LayerSleep.Advance(), ElementContainerCard.CheckSkillActions(), Trait.OnBarter(), TraitBookSkill.OnRead(), TraitBookSkill.SetName(), TraitBookPlan.WriteNote(), and TraitBookSkill.WriteNote().

◆ ImportElementMap() [1/2]

void ElementContainer.ImportElementMap ( Dictionary< int, int >  map)
inline

Definition at line 138 of file ElementContainer.cs.

139 {
140 foreach (KeyValuePair<int, int> item in map)
141 {
142 GetOrCreateElement(item.Key).vSource += item.Value;
143 }
144 }

References GetOrCreateElement(), item, and Element.vSource.

Referenced by WindowChara.RefreshNote().

◆ ImportElementMap() [2/2]

ElementContainer ElementContainer.ImportElementMap ( int[]  ints)
inline

Definition at line 146 of file ElementContainer.cs.

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 }

References GetOrCreateElement(), and Element.vSource.

◆ Learn()

void ElementContainer.Learn ( int  ele,
int  v = 1 
)
inline

Definition at line 265 of file ElementContainer.cs.

266 {
267 ModBase(ele, v);
268 OnLearn(ele);
269 }
Element ModBase(int ele, int v)
virtual void OnLearn(int ele)

References ModBase(), and OnLearn().

Referenced by LayerSleep.Advance(), DNA.Apply(), Element.CheckLevelBonus(), Religion.JoinFaith(), QuestWedding.OnDropReward(), and TraitBookSkill.OnRead().

◆ ListBestAttributes()

List< Element > ElementContainer.ListBestAttributes ( )
inline

Definition at line 627 of file ElementContainer.cs.

628 {
629 List<Element> obj = ListElements((Element a) => a.HasTag("primary"));
630 obj.Sort((Element a, Element b) => (b.ValueWithoutLink != a.ValueWithoutLink) ? (b.ValueWithoutLink - a.ValueWithoutLink) : (a.id - b.id));
631 return obj;
632 }
List< Element > ListElements(Func< Element, bool > shoudList=null, Comparison< Element > comparison=null)

References Element.HasTag(), Element.id, ListElements(), and Element.ValueWithoutLink.

Referenced by AI_Fuck.Finish(), and TraitDrinkMilkMother.OnDrink().

◆ ListBestSkills()

List< Element > ElementContainer.ListBestSkills ( )
inline

Definition at line 634 of file ElementContainer.cs.

635 {
636 List<Element> obj = ListElements((Element a) => a.source.category == "skill");
637 obj.Sort((Element a, Element b) => (b.ValueWithoutLink != a.ValueWithoutLink) ? (b.ValueWithoutLink - a.ValueWithoutLink) : (a.id - b.id));
638 return obj;
639 }

References Element.id, ListElements(), Element.source, and Element.ValueWithoutLink.

Referenced by TraitDrinkMilkMother.OnDrink(), and LayerEmbark.RefreshMembers().

◆ ListElements()

List< Element > ElementContainer.ListElements ( Func< Element, bool >  shoudList = null,
Comparison< Element comparison = null 
)
inline

Definition at line 570 of file ElementContainer.cs.

571 {
572 List<Element> list = new List<Element>();
573 List<Element> eles = dict.Values.ToList();
574 if (Card != null && Card.Chara != null)
575 {
577 {
578 AddElements(EClass.pc.faction.charaElements, isGlobal: true);
579 }
580 AddElements(Card.Chara.faithElements, isGlobal: false);
581 }
582 foreach (Element item2 in eles)
583 {
584 if (shoudList == null || shoudList(item2))
585 {
586 list.Add(item2);
587 }
588 }
589 if (comparison != null)
590 {
591 list.Sort(comparison);
592 }
593 return list;
594 void AddElements(ElementContainer container, bool isGlobal)
595 {
596 if (container == null)
597 {
598 return;
599 }
600 foreach (Element value in container.dict.Values)
601 {
602 bool flag = true;
603 foreach (Element item3 in eles)
604 {
605 if (value.id == item3.id)
606 {
607 flag = false;
608 break;
609 }
610 }
611 if (flag && value.Value != 0)
612 {
613 if (isGlobal)
614 {
616 eles.Add(item);
617 }
618 else
619 {
620 eles.Add(value);
621 }
622 }
623 }
624 }
625 }
virtual Chara Chara
Definition: Card.cs:2122
ElementContainerCard elements
Definition: Card.cs:42
Faction faction
Definition: Chara.cs:431
override bool IsPCFaction
Definition: Chara.cs:689
ElementContainer faithElements
Definition: Chara.cs:38
static Chara pc
Definition: EClass.cs:15
ElementContainerFaction charaElements
Definition: FACTION.cs:146

References Card.Chara, Faction.charaElements, CreateElement(), dict, Card.elements, Chara.faction, Chara.faithElements, Element.id, Chara.IsPCFaction, item, list, EClass.pc, and Element.Value.

Referenced by WidgetStatsBar.Build(), Card.CanAddRune(), ListBestAttributes(), ListBestSkills(), ListGeneFeats(), ListRune(), ActEffect.Proc(), WindowCharaMini.Refresh(), WindowChara.RefreshSkill(), and WindowChara.RefreshStatic().

◆ ListGeneFeats()

List< Element > ElementContainer.ListGeneFeats ( )
inline

Definition at line 641 of file ElementContainer.cs.

642 {
643 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);
644 }

References ListElements(), Element.source, and Element.ValueWithoutLink.

◆ ListLearnable()

List< Element > ElementContainer.ListLearnable ( Chara  c)
inline

Definition at line 646 of file ElementContainer.cs.

647 {
648 List<Element> list = new List<Element>();
649 foreach (KeyValuePair<int, Element> item in c.elements.dict)
650 {
651 if (!dict.ContainsKey(item.Key))
652 {
653 list.Add(item.Value);
654 }
655 }
656 return list;
657 }

References dict, item, and list.

◆ ListRune()

List< Element > ElementContainer.ListRune ( )
inline

Definition at line 659 of file ElementContainer.cs.

660 {
661 return ListElements((Element a) => !a.source.encSlot.IsEmpty() && a.vBase + a.vSource != 0);
662 }

References ListElements(), Element.source, Element.vBase, and Element.vSource.

Referenced by TraitCrafter.Craft().

◆ ModBase()

Element ElementContainer.ModBase ( int  ele,
int  v 
)
inline

Definition at line 417 of file ElementContainer.cs.

418 {
419 Element orCreateElement = GetOrCreateElement(ele);
420 orCreateElement.vBase += v;
421 if (parent != null && (!LimitLink || orCreateElement.CanLink(this)))
422 {
423 parent.ModLink(ele, v);
424 }
425 orCreateElement.CheckLevelBonus(this);
426 orCreateElement.OnChangeValue();
427 if (orCreateElement.vBase == 0 && orCreateElement.vSource == 0 && orCreateElement.vLink == 0 && orCreateElement.vPotential == 0 && orCreateElement.vExp == 0)
428 {
429 Remove(orCreateElement.id);
430 }
431 return orCreateElement;
432 }
virtual bool LimitLink
ElementContainer parent
Element ModLink(int id, int v)
virtual void OnChangeValue()
Definition: ELEMENT.cs:985
void CheckLevelBonus(ElementContainer owner, UINote n=null)
Definition: ELEMENT.cs:989
virtual bool CanLink(ElementContainer owner)
Definition: ELEMENT.cs:477

References Element.CanLink(), Element.CheckLevelBonus(), GetOrCreateElement(), Element.id, LimitLink, ModLink(), Element.OnChangeValue(), parent, Remove(), Element.vBase, Element.vExp, Element.vLink, Element.vPotential, and Element.vSource.

Referenced by Card._OnDeserialized(), CharaAbility.Add(), DNA.Apply(), Feat.Apply(), Thing.ApplyMaterial(), Card.ApplySocket(), TraitDrink.BlendLove(), TraitDrink.BlendPoison(), CoreDebug.COM_MaxConstruction(), Card.Decay(), Card.EjectSockets(), AI_Fuck.Finish(), CoreDebug.Fix_EtherDisease(), AI_Shear.GetFur(), Learn(), CraftUtil.MakeBloodMeal(), Card.MakeFoodFrom(), CraftUtil.MixIngredients(), Card.ModEncLv(), ModExp(), Chara.ModTempElement(), TraitDrinkMilkMother.OnDrink(), ElementContainerFaction.OnEquip(), FactionBranch.OnUnclaimZone(), ElementContainerFaction.OnUnequip(), ZoneEventWedding.OnVisit(), ActEffect.Proc(), CoreDebug.QuickStart(), Chara.RefreshWorkElements(), AI_Idle.Run(), Card.SetBlessedState(), Card.SetLv(), Chara.SetMainElement(), SetTo(), ConDisease.Tick(), ConPeaky.Tick(), ConVampire.Tick(), Map.TryShatter(), TraitFoodEgg.Update(), CoreDebug.UpdateInput(), and FactionBranch.Upgrade().

◆ ModExp()

void ElementContainer.ModExp ( int  ele,
float  a,
bool  chain = false 
)
inline

Definition at line 277 of file ElementContainer.cs.

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 }
virtual bool isChara
Definition: Card.cs:2135
int GetDaysTogetherBonus()
Definition: Card.cs:3153
bool isDead
Definition: Chara.cs:393
static int rnd(long a)
Definition: EClass.cs:59
static float rndf(float a)
Definition: EClass.cs:102
void ModExp(int ele, float a, bool chain=false)
virtual void OnLevelDown(Element e, int lastValue)
virtual void OnLevelUp(Element e, int lastValue)
virtual bool CanGainExp
Definition: ELEMENT.cs:309
virtual bool UseExpMod
Definition: ELEMENT.cs:319
int Potential
Definition: ELEMENT.cs:307
int vTempPotential
Definition: ELEMENT.cs:267
virtual bool UsePotential
Definition: ELEMENT.cs:343
Element GetParent(Card c)
Definition: ELEMENT.cs:531
virtual int ExpToNext
Definition: ELEMENT.cs:317

References Element.CanGainExp, Card.Chara, Element.ExpToNext, Card.GetDaysTogetherBonus(), GetElement(), Element.GetParent(), Element.id, Card.isChara, Chara.isDead, ModBase(), ModExp(), OnLevelDown(), OnLevelUp(), Element.Potential, EClass.rnd(), EClass.rndf(), Element.source, Element.UseExpMod, Element.UsePotential, Element.ValueWithoutLink, Element.vBase, Element.vExp, and Element.vTempPotential.

Referenced by TraitAltar._OnOffer(), LayerSleep.Advance(), Chara.ApplyDeathPenalty(), AI_Fuck.Finish(), StatsMana.Mod(), ModExp(), Card.ModExp(), Card.ModExpParty(), Player.MoveZone(), Policy.OnAdvanceHour(), TaskChopWood.OnCreateProgress(), TaskDig.OnCreateProgress(), TaskDrawWater.OnCreateProgress(), TaskHarvest.OnCreateProgress(), TaskMine.OnCreateProgress(), TaskPlow.OnCreateProgress(), TaskPourWater.OnCreateProgress(), TaskCraft.OnProgress(), AI_Fish.ProgressFish.OnProgressComplete(), TaskCraft.OnProgressComplete(), TaskDig.OnProgressComplete(), TaskMine.OnProgressComplete(), TraitBookSkill.OnRead(), TraitScrollStatic.OnRead(), AI_Fuck.Run(), AI_PlayMusic.Run(), AI_Shear.Run(), AI_Slaughter.Run(), AI_Steal.Run(), AI_UseCrafter.Run(), Card.SpawnLoot(), and BaseSong.Tick().

◆ ModLink()

Element ElementContainer.ModLink ( int  id,
int  v 
)
inlineprivate

Definition at line 465 of file ElementContainer.cs.

466 {
467 Element orCreateElement = GetOrCreateElement(id);
468 orCreateElement.vLink += v;
469 orCreateElement.OnChangeValue();
470 if (parent != null && (!LimitLink || orCreateElement.CanLink(this)))
471 {
472 parent.ModLink(id, v);
473 }
474 return orCreateElement;
475 }

References Element.CanLink(), GetOrCreateElement(), LimitLink, ModLink(), Element.OnChangeValue(), and parent.

Referenced by ModBase(), ModLink(), Remove(), SetBase(), and SetParent().

◆ ModPotential()

Element ElementContainer.ModPotential ( int  ele,
int  v 
)
inline

Definition at line 438 of file ElementContainer.cs.

439 {
440 Element orCreateElement = GetOrCreateElement(ele);
441 orCreateElement.vPotential += v;
442 if (orCreateElement.vPotential > 1000)
443 {
444 orCreateElement.vPotential = 1000;
445 }
446 return orCreateElement;
447 }

References GetOrCreateElement(), and Element.vPotential.

Referenced by Feat.Apply().

◆ ModTempPotential()

Element ElementContainer.ModTempPotential ( int  ele,
int  v,
int  threshMsg = 0 
)
inline

Definition at line 449 of file ElementContainer.cs.

450 {
451 Element orCreateElement = GetOrCreateElement(ele);
452 orCreateElement.vTempPotential += v;
453 if (orCreateElement.vTempPotential > 1000)
454 {
455 orCreateElement.vTempPotential = 1000;
456 }
457 OnModTempPotential(orCreateElement, v, threshMsg);
458 return orCreateElement;
459 }
virtual void OnModTempPotential(Element e, int v, int threshMsg)

References GetOrCreateElement(), OnModTempPotential(), and Element.vTempPotential.

Referenced by AI_Fuck.Finish(), ActEffect.Proc(), AI_Idle.Run(), and Train().

◆ OnChangeValue()

virtual void ElementContainer.OnChangeValue ( )
inlinevirtual

Definition at line 434 of file ElementContainer.cs.

435 {
436 }

◆ OnDeserialized()

void ElementContainer.OnDeserialized ( StreamingContext  context)
inlineprivate

Definition at line 54 of file ElementContainer.cs.

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 }

References GetOrCreateElement(), and list.

◆ OnLearn()

virtual void ElementContainer.OnLearn ( int  ele)
inlinevirtual

Reimplemented in ElementContainerCard, and ElementContainerZone.

Definition at line 350 of file ElementContainer.cs.

351 {
352 }

Referenced by Learn().

◆ OnLevelDown()

virtual void ElementContainer.OnLevelDown ( Element  e,
int  lastValue 
)
inlinevirtual

Reimplemented in ElementContainerCard.

Definition at line 362 of file ElementContainer.cs.

363 {
364 }

Referenced by ModExp().

◆ OnLevelUp()

virtual void ElementContainer.OnLevelUp ( Element  e,
int  lastValue 
)
inlinevirtual

Reimplemented in ElementContainerCard, and ElementContainerZone.

Definition at line 358 of file ElementContainer.cs.

359 {
360 }

Referenced by ModExp().

◆ OnModTempPotential()

virtual void ElementContainer.OnModTempPotential ( Element  e,
int  v,
int  threshMsg 
)
inlinevirtual

Reimplemented in ElementContainerCard.

Definition at line 461 of file ElementContainer.cs.

462 {
463 }

Referenced by ModTempPotential().

◆ OnSerializing()

void ElementContainer.OnSerializing ( StreamingContext  context)
inlineprivate

Definition at line 37 of file ElementContainer.cs.

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 }

References dict, Element.id, list, Element.vBase, Element.vExp, Element.vPotential, and Element.vTempPotential.

◆ OnTrain()

virtual void ElementContainer.OnTrain ( int  ele)
inlinevirtual

Reimplemented in ElementContainerCard.

Definition at line 354 of file ElementContainer.cs.

355 {
356 }

Referenced by Train().

◆ Remove()

void ElementContainer.Remove ( int  id)
inline

Definition at line 403 of file ElementContainer.cs.

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 element.owner = null;
414 }
415 }

References Element.CanLink(), dict, GetElement(), LimitLink, ModLink(), parent, and Element.Value.

Referenced by ApplyMaterialElementMap(), Card.CheckJustCooked(), ModBase(), Chara.ModTempElement(), Trait.OnBarter(), Player.OnStartNewGame(), ActEffect.Proc(), Zone.RemoveFieldEffect(), SetBase(), and SetTo().

◆ SetBase() [1/2]

Element ElementContainer.SetBase ( int  id,
int  v,
int  potential = 0 
)
inline

Definition at line 371 of file ElementContainer.cs.

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 }

References Element.CanLink(), GetOrCreateElement(), Element.id, LimitLink, ModLink(), Element.OnChangeValue(), parent, Remove(), Element.vBase, Element.vExp, Element.vLink, Element.vPotential, and Element.vSource.

◆ SetBase() [2/2]

◆ SetParent() [1/2]

◆ SetParent() [2/2]

void ElementContainer.SetParent ( ElementContainer  newParent = null)
inline

Definition at line 545 of file ElementContainer.cs.

546 {
547 if (parent != null)
548 {
549 foreach (Element value in dict.Values)
550 {
551 if (!LimitLink || value.CanLink(this))
552 {
553 parent.ModLink(value.id, -(value.vBase + value.vSource));
554 }
555 }
556 }
557 if (newParent != null)
558 {
559 foreach (Element value2 in dict.Values)
560 {
561 if (!LimitLink || value2.CanLink(this))
562 {
563 newParent.ModLink(value2.id, value2.vBase + value2.vSource);
564 }
565 }
566 }
567 parent = newParent;
568 }

References Element.CanLink(), dict, Element.id, LimitLink, ModLink(), parent, Element.vBase, and Element.vSource.

◆ SetTo()

void ElementContainer.SetTo ( int  id,
int  v 
)
inline

Definition at line 389 of file ElementContainer.cs.

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 }

References GetOrCreateElement(), Element.id, ModBase(), Remove(), Element.vBase, Element.vExp, Element.vLink, Element.vPotential, and Element.vSource.

Referenced by Card.AddRune(), Card.ClampInitialSkill(), DNA.GenerateWithGene(), CraftUtil.MakeBloodMeal(), CraftUtil.MakeBloodSample(), TraitSeed.MakeSeed(), CraftUtil.MixIngredients(), TraitAgingShelf.OnProduce(), TraitDryBrick.OnProduce(), Chara.RestockEquip(), and Card.SetTier().

◆ Train()

void ElementContainer.Train ( int  ele,
int  a = 10 
)
inline

Definition at line 271 of file ElementContainer.cs.

272 {
273 OnTrain(ele);
274 ModTempPotential(ele, a);
275 }
virtual void OnTrain(int ele)
Element ModTempPotential(int ele, int v, int threshMsg=0)

References ModTempPotential(), and OnTrain().

◆ Value()

◆ ValueBonus()

virtual int ElementContainer.ValueBonus ( Element  e)
inlinevirtual

Reimplemented in ElementContainerCard.

Definition at line 188 of file ElementContainer.cs.

189 {
190 return 0;
191 }

◆ ValueWithoutLink() [1/2]

int ElementContainer.ValueWithoutLink ( int  ele)
inline

◆ ValueWithoutLink() [2/2]

int ElementContainer.ValueWithoutLink ( string  alias)
inline

Definition at line 198 of file ElementContainer.cs.

199 {
200 return GetElement(alias)?.ValueWithoutLink ?? 0;
201 }

References GetElement(), and Element.ValueWithoutLink.

Member Data Documentation

◆ dict

◆ list

List<int> ElementContainer.list

◆ parent

ElementContainer ElementContainer.parent

Definition at line 21 of file ElementContainer.cs.

Referenced by ModBase(), ModLink(), Remove(), SetBase(), and SetParent().

◆ sizeElement

const int ElementContainer.sizeElement = 5
static

Definition at line 23 of file ElementContainer.cs.

Property Documentation

◆ Card

◆ Chara

virtual Chara ElementContainer.Chara
get

◆ IsMeleeWeapon

virtual bool ElementContainer.IsMeleeWeapon
get

Definition at line 34 of file ElementContainer.cs.

Referenced by AttbWeapon.CanLink().

◆ LimitLink

virtual bool ElementContainer.LimitLink
get

Definition at line 32 of file ElementContainer.cs.

Referenced by ModBase(), ModLink(), Remove(), SetBase(), and SetParent().


The documentation for this class was generated from the following file: