Elin Decompiled Documentation EA 23.357 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< Element > ListElements (Func< Element, bool > shoudList=null, Comparison< Element > comparison=null)
 
List< Element > ListBestAttributes ()
 
List< Element > ListBestSkills ()
 
List< Element > ListGeneFeats ()
 
List< Element > ListLearnable (Chara c)
 
List< Element > ListRune ()
 
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, Element > dict = 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 699 of file ElementContainer.cs.

700 {
701 List<Element> list = new List<Element>();
702 foreach (Element value in dict.Values)
703 {
704 if ((isValid == null || isValid(value)) && (mode != NoteMode.CharaMake || value.ValueWithoutLink != 0) && (value.Value != 0 || mode == NoteMode.CharaMakeAttributes) && (!value.HasTag("hidden") || EClass.debug.showExtra))
705 {
706 list.Add(value);
707 }
708 }
709 if (addRaceFeat)
710 {
711 Element element = Element.Create(29, 1);
712 element.owner = this;
713 list.Add(element);
714 }
715 if (list.Count == 0)
716 {
717 return;
718 }
719 onAdd?.Invoke();
720 switch (mode)
721 {
722 case NoteMode.CharaMake:
723 case NoteMode.CharaMakeAttributes:
724 list.Sort((Element a, Element b) => a.GetSortVal(UIList.SortMode.ByElementParent) - b.GetSortVal(UIList.SortMode.ByElementParent));
725 break;
726 case NoteMode.BonusTrait:
727 list.Sort((Element a, Element b) => GetSortVal(b) - GetSortVal(a));
728 break;
729 default:
730 list.Sort((Element a, Element b) => a.SortVal() - b.SortVal());
731 break;
732 }
733 foreach (Element item in list)
734 {
735 item.AddEncNote(n, Card, mode, funcText, onAddNote);
736 }
737 }
Definition: Card.cs:11
bool showExtra
Definition: CoreDebug.cs:184
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:1069
int Value
Definition: ELEMENT.cs:301
static Element Create(int id, int v=0)
Definition: ELEMENT.cs:1163
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 739 of file ElementContainer.cs.

740 {
741 Transform transform = n.AddExtra<Transform>("noteRace");
742 UINote n2 = transform.Find("note1").GetComponent<UINote>();
743 UINote n3 = transform.Find("note2").GetComponent<UINote>();
744 AddNote(n3, (Element e) => e.HasTag("primary"), delegate
745 {
746 n3.AddHeader("HeaderNoteSmall", "attributes");
747 }, NoteMode.CharaMakeAttributes);
748 AddNote(n2, (Element e) => e.source.category == "skill" && !e.HasTag("hidden") && e.ValueWithoutLink > 1 && e.source.categorySub != "weapon", delegate
749 {
750 n2.AddHeader("HeaderNoteSmall", "skills");
751 }, NoteMode.CharaMake);
752 AddNote(n2, (Element e) => e is Feat, delegate
753 {
754 n2.AddHeader("HeaderNoteSmall", "feats");
755 }, NoteMode.CharaMake);
756 }
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:345
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 669 of file ElementContainer.cs.

670 {
671 container.dict.Clear();
672 foreach (KeyValuePair<int, Element> item in dict)
673 {
674 Element element = container.CreateElement(item.Key);
675 element.vBase = item.Value.vBase;
676 element.vExp = item.Value.vExp;
677 element.vSource = item.Value.vSource;
678 }
679 }
Element CreateElement(int id)

References dict, and item.

Referenced by Card.Duplicate().

◆ CreateElement()

Element ElementContainer.CreateElement ( int  id)
inline

Definition at line 513 of file ElementContainer.cs.

514 {
515 Element element = Element.Create(id);
516 if (element == null)
517 {
518 return null;
519 }
520 element.owner = this;
521 dict.Add(id, element);
522 return element;
523 }

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 508 of file ElementContainer.cs.

509 {
510 return dict.TryGetValue(id);
511 }

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:348

References Feat.featRef, and GetElement().

◆ GetOrCreateElement() [1/3]

◆ GetOrCreateElement() [2/3]

Element ElementContainer.GetOrCreateElement ( int  id)
inline

Definition at line 535 of file ElementContainer.cs.

536 {
537 Element value = null;
538 if (!dict.TryGetValue(id, out value))
539 {
540 value = CreateElement(id);
541 }
542 return value;
543 }

References CreateElement(), and dict.

◆ GetOrCreateElement() [3/3]

Element ElementContainer.GetOrCreateElement ( string  alias)
inline

Definition at line 530 of file ElementContainer.cs.

531 {
532 return GetOrCreateElement(EClass.sources.elements.alias[alias].id);
533 }

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

◆ GetSortVal()

static int ElementContainer.GetSortVal ( Element  a)
inlinestatic

Definition at line 681 of file ElementContainer.cs.

682 {
683 int num = a.Value;
684 if (a.source.textAlt.Length <= 2 || a.Value < 0)
685 {
686 num -= 100000;
687 }
688 if (a.id == 2)
689 {
690 num += 20000;
691 }
692 if (a.IsFoodTraitMain)
693 {
694 num += 10000;
695 }
696 return num;
697 }
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 482 of file ElementContainer.cs.

483 {
484 Act.Cost cost = e.GetCost(c);
485 int num = cost.cost * ((cost.type == Act.CostType.SP) ? 20 : 5) * (100 + c.Evalue(1208) * 30) / 100 + 10;
486 num = num * costMod / 100;
487 if (!e.source.aliasParent.IsEmpty())
488 {
489 int num2 = ValueWithoutLink(e.source.aliasParent) - ValueWithoutLink(e.source.id);
490 if (num2 > 10000)
491 {
492 num2 = 10000;
493 }
494 num = ((num2 < 0) ? (num * 100 / (100 - num2 * 25)) : (num * (100 + num2 * 5) / 100));
495 }
496 if (num < 0)
497 {
498 num = 0;
499 }
500 return num;
501 }
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:1092
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(), Element.CheckLevelBonus(), 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 Element element = GetElement(ele);
269 if (element is Ability && !element.PotentialAsStock)
270 {
271 element.vPotential = 1;
272 }
273 OnLearn(ele);
274 }
Element ModBase(int ele, int v)
virtual void OnLearn(int ele)
virtual bool PotentialAsStock
Definition: ELEMENT.cs:345

References GetElement(), ModBase(), OnLearn(), and Element.PotentialAsStock.

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

◆ ListBestAttributes()

List< Element > ElementContainer.ListBestAttributes ( )
inline

Definition at line 632 of file ElementContainer.cs.

633 {
634 List<Element> obj = ListElements((Element a) => a.HasTag("primary"));
635 obj.Sort((Element a, Element b) => (b.ValueWithoutLink != a.ValueWithoutLink) ? (b.ValueWithoutLink - a.ValueWithoutLink) : (a.id - b.id));
636 return obj;
637 }
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 639 of file ElementContainer.cs.

640 {
641 List<Element> obj = ListElements((Element a) => a.source.category == "skill");
642 obj.Sort((Element a, Element b) => (b.ValueWithoutLink != a.ValueWithoutLink) ? (b.ValueWithoutLink - a.ValueWithoutLink) : (a.id - b.id));
643 return obj;
644 }

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 575 of file ElementContainer.cs.

576 {
577 List<Element> list = new List<Element>();
578 List<Element> eles = dict.Values.ToList();
579 if (Card != null && Card.Chara != null)
580 {
582 {
583 AddElements(EClass.pc.faction.charaElements, isGlobal: true);
584 }
585 AddElements(Card.Chara.faithElements, isGlobal: false);
586 }
587 foreach (Element item2 in eles)
588 {
589 if (shoudList == null || shoudList(item2))
590 {
591 list.Add(item2);
592 }
593 }
594 if (comparison != null)
595 {
596 list.Sort(comparison);
597 }
598 return list;
599 void AddElements(ElementContainer container, bool isGlobal)
600 {
601 if (container == null)
602 {
603 return;
604 }
605 foreach (Element value in container.dict.Values)
606 {
607 bool flag = true;
608 foreach (Element item3 in eles)
609 {
610 if (value.id == item3.id)
611 {
612 flag = false;
613 break;
614 }
615 }
616 if (flag && value.Value != 0)
617 {
618 if (isGlobal)
619 {
621 eles.Add(item);
622 }
623 else
624 {
625 eles.Add(value);
626 }
627 }
628 }
629 }
630 }
virtual Chara Chara
Definition: Card.cs:2122
ElementContainerCard elements
Definition: Card.cs:42
Faction faction
Definition: Chara.cs:433
override bool IsPCFaction
Definition: Chara.cs:691
ElementContainer faithElements
Definition: Chara.cs:40
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 646 of file ElementContainer.cs.

647 {
648 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);
649 }

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

◆ ListLearnable()

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

Definition at line 651 of file ElementContainer.cs.

652 {
653 List<Element> list = new List<Element>();
654 foreach (KeyValuePair<int, Element> item in c.elements.dict)
655 {
656 if (!dict.ContainsKey(item.Key))
657 {
658 list.Add(item.Value);
659 }
660 }
661 return list;
662 }

References dict, item, and list.

◆ ListRune()

List< Element > ElementContainer.ListRune ( )
inline

Definition at line 664 of file ElementContainer.cs.

665 {
666 return ListElements((Element a) => !a.source.encSlot.IsEmpty() && a.vBase + a.vSource != 0);
667 }

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 422 of file ElementContainer.cs.

423 {
424 Element orCreateElement = GetOrCreateElement(ele);
425 orCreateElement.vBase += v;
426 if (parent != null && (!LimitLink || orCreateElement.CanLink(this)))
427 {
428 parent.ModLink(ele, v);
429 }
430 orCreateElement.CheckLevelBonus(this);
431 orCreateElement.OnChangeValue();
432 if (orCreateElement.vBase == 0 && orCreateElement.vSource == 0 && orCreateElement.vLink == 0 && orCreateElement.vPotential == 0 && orCreateElement.vExp == 0)
433 {
434 Remove(orCreateElement.id);
435 }
436 return orCreateElement;
437 }
virtual bool LimitLink
ElementContainer parent
Element ModLink(int id, int v)
virtual void OnChangeValue()
Definition: ELEMENT.cs:1024
void CheckLevelBonus(ElementContainer owner, UINote n=null)
Definition: ELEMENT.cs:1028
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 282 of file ElementContainer.cs.

283 {
284 if ((Card != null && Card.isChara && Card.Chara.isDead) || a == 0f)
285 {
286 return;
287 }
288 Element element = GetElement(ele);
289 if (element == null || !element.CanGainExp)
290 {
291 return;
292 }
293 if (a > 0f)
294 {
295 if (!chain && Card != null && Card.isChara)
296 {
297 a = a * (float)Card.Chara.GetDaysTogetherBonus() / 100f;
298 }
299 if (element.UseExpMod)
300 {
301 a = a * (float)Mathf.Clamp(element.UsePotential ? element.Potential : 100, 10, 1000) / (float)(100 + Mathf.Max(0, element.ValueWithoutLink) * 25);
302 if (EClass.rndf(1f) < a % 1f)
303 {
304 a += 1f;
305 }
306 }
307 if (!chain && element.source.parentFactor > 0f && Card != null && !element.source.aliasParent.IsEmpty())
308 {
309 Element element2 = element.GetParent(Card);
310 if (element2.CanGainExp)
311 {
312 ModExp(element2.id, Mathf.Clamp(a * element.source.parentFactor / 100f, 1f, 1000f), chain: true);
313 }
314 }
315 }
316 element.vExp += (int)a;
317 if (element.vExp >= element.ExpToNext)
318 {
319 int num = element.vExp - element.ExpToNext;
320 int vBase = element.vBase;
321 ModBase(ele, 1);
322 OnLevelUp(element, vBase);
323 element.vExp = Mathf.Clamp(num / 2, 0, element.ExpToNext / 2);
324 if (element.vTempPotential > 0)
325 {
326 element.vTempPotential -= element.vTempPotential / 4 + EClass.rnd(5) + 5;
327 if (element.vTempPotential < 0)
328 {
329 element.vTempPotential = 0;
330 }
331 }
332 else if (element.vTempPotential < 0)
333 {
334 element.vTempPotential += -element.vTempPotential / 4 + EClass.rnd(5) + 5;
335 if (element.vTempPotential > 0)
336 {
337 element.vTempPotential = 0;
338 }
339 }
340 }
341 else if (element.vExp < 0)
342 {
343 if (element.ValueWithoutLink <= 1)
344 {
345 element.vExp = 0;
346 return;
347 }
348 int vBase2 = element.vBase;
349 ModBase(ele, -1);
350 OnLevelDown(element, vBase2);
351 element.vExp = Mathf.Max(element.ExpToNext / 2, element.ExpToNext + element.vExp);
352 }
353 }
virtual bool isChara
Definition: Card.cs:2135
int GetDaysTogetherBonus()
Definition: Card.cs:3160
bool isDead
Definition: Chara.cs:395
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:559
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< T >.Tick().

◆ ModLink()

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

Definition at line 470 of file ElementContainer.cs.

471 {
472 Element orCreateElement = GetOrCreateElement(id);
473 orCreateElement.vLink += v;
474 orCreateElement.OnChangeValue();
475 if (parent != null && (!LimitLink || orCreateElement.CanLink(this)))
476 {
477 parent.ModLink(id, v);
478 }
479 return orCreateElement;
480 }

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 443 of file ElementContainer.cs.

444 {
445 Element orCreateElement = GetOrCreateElement(ele);
446 orCreateElement.vPotential += v;
447 if (orCreateElement.vPotential > 1000)
448 {
449 orCreateElement.vPotential = 1000;
450 }
451 return orCreateElement;
452 }

References GetOrCreateElement(), and Element.vPotential.

Referenced by Feat.Apply().

◆ ModTempPotential()

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

Definition at line 454 of file ElementContainer.cs.

455 {
456 Element orCreateElement = GetOrCreateElement(ele);
457 orCreateElement.vTempPotential += v;
458 if (orCreateElement.vTempPotential > 1000)
459 {
460 orCreateElement.vTempPotential = 1000;
461 }
462 OnModTempPotential(orCreateElement, v, threshMsg);
463 return orCreateElement;
464 }
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 439 of file ElementContainer.cs.

440 {
441 }

◆ 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 355 of file ElementContainer.cs.

356 {
357 }

Referenced by Learn().

◆ OnLevelDown()

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

Reimplemented in ElementContainerCard.

Definition at line 367 of file ElementContainer.cs.

368 {
369 }

Referenced by ModExp().

◆ OnLevelUp()

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

Reimplemented in ElementContainerCard, and ElementContainerZone.

Definition at line 363 of file ElementContainer.cs.

364 {
365 }

Referenced by ModExp().

◆ OnModTempPotential()

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

Reimplemented in ElementContainerCard.

Definition at line 466 of file ElementContainer.cs.

467 {
468 }

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 359 of file ElementContainer.cs.

360 {
361 }

Referenced by Train().

◆ Remove()

void ElementContainer.Remove ( int  id)
inline

Definition at line 408 of file ElementContainer.cs.

409 {
410 Element element = GetElement(id);
411 if (element != null)
412 {
413 if (parent != null && (!LimitLink || element.CanLink(this)))
414 {
415 parent.ModLink(id, -element.Value);
416 }
417 dict.Remove(id);
418 element.owner = null;
419 }
420 }

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 376 of file ElementContainer.cs.

377 {
378 Element orCreateElement = GetOrCreateElement(id);
379 if (parent != null && (!LimitLink || orCreateElement.CanLink(this)))
380 {
381 parent.ModLink(id, -orCreateElement.vBase + v);
382 }
383 orCreateElement.vBase = v;
384 orCreateElement.vExp = 0;
385 orCreateElement.vPotential = potential;
386 orCreateElement.OnChangeValue();
387 if (orCreateElement.vBase == 0 && orCreateElement.vSource == 0 && orCreateElement.vLink == 0 && orCreateElement.vPotential == 0 && orCreateElement.vExp == 0)
388 {
389 Remove(orCreateElement.id);
390 }
391 return orCreateElement;
392 }

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 550 of file ElementContainer.cs.

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

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 394 of file ElementContainer.cs.

395 {
396 Element orCreateElement = GetOrCreateElement(id);
397 int num = v - (orCreateElement.vBase + orCreateElement.vSource);
398 if (num != 0)
399 {
400 ModBase(id, num);
401 }
402 if (orCreateElement.vBase == 0 && orCreateElement.vSource == 0 && orCreateElement.vLink == 0 && orCreateElement.vPotential == 0 && orCreateElement.vExp == 0)
403 {
404 Remove(orCreateElement.id);
405 }
406 }

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 276 of file ElementContainer.cs.

277 {
278 OnTrain(ele);
279 ModTempPotential(ele, a);
280 }
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: