Elin Decompiled Documentation EA 23.189 Nightly
Loading...
Searching...
No Matches
ElementContainer Class Reference
Inheritance diagram for ElementContainer:
EClass ElementContainerCard ElementContainerCondition ElementContainerFaction 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 (int a, int start, int step, int rate=75)
 
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 681 of file ElementContainer.cs.

682 {
683 List<Element> list = new List<Element>();
684 foreach (Element value in dict.Values)
685 {
686 if ((isValid == null || isValid(value)) && (mode != NoteMode.CharaMake || value.ValueWithoutLink != 0) && (value.Value != 0 || mode == NoteMode.CharaMakeAttributes) && (!value.HasTag("hidden") || EClass.debug.showExtra))
687 {
688 list.Add(value);
689 }
690 }
691 if (addRaceFeat)
692 {
693 Element element = Element.Create(29, 1);
694 element.owner = this;
695 list.Add(element);
696 }
697 if (list.Count == 0)
698 {
699 return;
700 }
701 onAdd?.Invoke();
702 switch (mode)
703 {
704 case NoteMode.CharaMake:
705 case NoteMode.CharaMakeAttributes:
706 list.Sort((Element a, Element b) => a.GetSortVal(UIList.SortMode.ByElementParent) - b.GetSortVal(UIList.SortMode.ByElementParent));
707 break;
708 case NoteMode.BonusTrait:
709 list.Sort((Element a, Element b) => GetSortVal(b) - GetSortVal(a));
710 break;
711 default:
712 list.Sort((Element a, Element b) => a.SortVal() - b.SortVal());
713 break;
714 }
715 foreach (Element item in list)
716 {
717 item.AddEncNote(n, Card, mode, funcText, onAddNote);
718 }
719 }
Definition: Card.cs:11
bool showExtra
Definition: CoreDebug.cs:168
Definition: EClass.cs:5
static CoreDebug debug
Definition: EClass.cs:48
static int GetSortVal(Element a)
Dictionary< int, Element > dict
int ValueWithoutLink
Definition: ELEMENT.cs:292
bool HasTag(string tag)
Definition: ELEMENT.cs:471
int GetSortVal(UIList.SortMode m)
Definition: ELEMENT.cs:1002
int Value
Definition: ELEMENT.cs:290
static Element Create(int id, int v=0)
Definition: ELEMENT.cs:1097
int SortVal(bool charaSheet=false)
Definition: ELEMENT.cs:460
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 721 of file ElementContainer.cs.

722 {
723 Transform transform = n.AddExtra<Transform>("noteRace");
724 UINote n2 = transform.Find("note1").GetComponent<UINote>();
725 UINote n3 = transform.Find("note2").GetComponent<UINote>();
726 AddNote(n3, (Element e) => e.HasTag("primary"), delegate
727 {
728 n3.AddHeader("HeaderNoteSmall", "attributes");
729 }, NoteMode.CharaMakeAttributes);
730 AddNote(n2, (Element e) => e.source.category == "skill" && !e.HasTag("hidden") && e.ValueWithoutLink > 1 && e.source.categorySub != "weapon", delegate
731 {
732 n2.AddHeader("HeaderNoteSmall", "skills");
733 }, NoteMode.CharaMake);
734 AddNote(n2, (Element e) => e is Feat, delegate
735 {
736 n2.AddHeader("HeaderNoteSmall", "feats");
737 }, NoteMode.CharaMake);
738 }
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:271
Definition: FEAT.cs:261
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 int num2 = orCreateElement.GetSourceValue(value, lv, type) * num;
89 orCreateElement.vSource += num2;
90 if (applyFeat && orCreateElement is Feat)
91 {
92 (orCreateElement as Feat).Apply(num2, this);
93 }
94 }
95 }
96 Rand.SetSeed();
97 }
Element GetOrCreateElement(Element ele)
virtual int GetSourceValue(int v, int lv, SourceValueType type)
Definition: ELEMENT.cs:436
virtual int GetSourcePotential(int v)
Definition: ELEMENT.cs:409
Definition: Rand.cs:4
static void SetSeed(int a=-1)
Definition: Rand.cs:37

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

100 {
101 int num = ((!invert) ? 1 : (-1));
103 Rand.SetSeed(t.uid);
104 foreach (KeyValuePair<int, int> item in material.elementMap)
105 {
106 int value = item.Value;
107 if (value == 0)
108 {
109 continue;
110 }
111 Element orCreateElement = GetOrCreateElement(item.Key);
112 if (!orCreateElement.source.IsMaterialEncAppliable(t))
113 {
114 if (orCreateElement.vBase == 0 && orCreateElement.vSource == 0 && orCreateElement.vLink == 0 && orCreateElement.vExp == 0 && orCreateElement.vPotential == 0)
115 {
116 Remove(orCreateElement.id);
117 }
118 continue;
119 }
120 int num2 = orCreateElement.GetMaterialSourceValue(t, value) * num;
121 orCreateElement.vSource += num2;
122 if (orCreateElement.vBase == 0 && orCreateElement.vSource == 0 && orCreateElement.vLink == 0 && orCreateElement.vExp == 0 && orCreateElement.vPotential == 0)
123 {
124 Remove(orCreateElement.id);
125 }
126 }
127 Rand.SetSeed();
128 }
SourceMaterial.Row material
Definition: Card.cs:2013
int uid
Definition: Card.cs:120
void Remove(int id)
int GetMaterialSourceValue(Thing t, int v)
Definition: ELEMENT.cs:419
int id
Definition: ELEMENT.cs:248
int vBase
Definition: ELEMENT.cs:250
int vExp
Definition: ELEMENT.cs:252
int vPotential
Definition: ELEMENT.cs:254
int vLink
Definition: ELEMENT.cs:258
int vSource
Definition: ELEMENT.cs:260

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

148 {
149 foreach (Element value in dict.Values)
150 {
151 if (value.HasTag("primary"))
152 {
153 value.vTempPotential = (value.ValueWithoutLink - ((mode != 2) ? 7 : 0)) * 5;
154 }
155 }
156 }

References dict, and Element.HasTag().

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

◆ Base()

int ElementContainer.Base ( int  ele)
inline

Definition at line 252 of file ElementContainer.cs.

253 {
254 return GetElement(ele)?.ValueWithoutLink ?? 0;
255 }
Element GetElement(string alias)

References GetElement(), and Element.ValueWithoutLink.

Referenced by Card.ClampInitialSkill(), Chara.ModTempElement(), and FoodEffect.Proc().

◆ CopyTo()

void ElementContainer.CopyTo ( ElementContainer  container)
inline

Definition at line 651 of file ElementContainer.cs.

652 {
653 container.dict.Clear();
654 foreach (KeyValuePair<int, Element> item in dict)
655 {
656 Element element = container.CreateElement(item.Key);
657 element.vBase = item.Value.vBase;
658 element.vExp = item.Value.vExp;
659 element.vSource = item.Value.vSource;
660 }
661 }
Element CreateElement(int id)

References dict, and item.

Referenced by Card.Duplicate().

◆ CreateElement()

Element ElementContainer.CreateElement ( int  id)
inline

Definition at line 495 of file ElementContainer.cs.

496 {
497 Element element = Element.Create(id);
498 if (element == null)
499 {
500 return null;
501 }
502 element.owner = this;
503 dict.Add(id, element);
504 return element;
505 }

References Element.Create(), and dict.

Referenced by GetOrCreateElement(), and ListElements().

◆ Exp()

int ElementContainer.Exp ( int  ele)
inline

Definition at line 205 of file ElementContainer.cs.

206 {
207 return GetElement(ele)?.vExp ?? 0;
208 }

References GetElement(), and Element.vExp.

◆ GetElement() [1/2]

Element ElementContainer.GetElement ( int  id)
inline

Definition at line 490 of file ElementContainer.cs.

491 {
492 return dict.TryGetValue(id);
493 }

References dict.

◆ GetElement() [2/2]

◆ GetFeatRef()

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

Definition at line 195 of file ElementContainer.cs.

196 {
197 if (!(GetElement(ele) is Feat feat))
198 {
199 return 0;
200 }
201 feat.Apply(feat.Value, this);
202 return Feat.featRef[idx].ToInt();
203 }
static string[] featRef
Definition: FEAT.cs:264

References Feat.featRef, and GetElement().

◆ GetOrCreateElement() [1/3]

◆ GetOrCreateElement() [2/3]

Element ElementContainer.GetOrCreateElement ( int  id)
inline

Definition at line 517 of file ElementContainer.cs.

518 {
519 Element value = null;
520 if (!dict.TryGetValue(id, out value))
521 {
522 value = CreateElement(id);
523 }
524 return value;
525 }

References CreateElement(), and dict.

◆ GetOrCreateElement() [3/3]

Element ElementContainer.GetOrCreateElement ( string  alias)
inline

Definition at line 512 of file ElementContainer.cs.

513 {
514 return GetOrCreateElement(EClass.sources.elements.alias[alias].id);
515 }

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

◆ GetSortVal()

static int ElementContainer.GetSortVal ( Element  a)
inlinestatic

Definition at line 663 of file ElementContainer.cs.

664 {
665 int num = a.Value;
666 if (a.source.textAlt.Length <= 2 || a.Value < 0)
667 {
668 num -= 100000;
669 }
670 if (a.id == 2)
671 {
672 num += 20000;
673 }
674 if (a.IsFoodTraitMain)
675 {
676 num += 10000;
677 }
678 return num;
679 }
bool IsFoodTraitMain
Definition: ELEMENT.cs:365

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

469 {
470 Act.Cost cost = e.GetCost(c);
471 int num = cost.cost * ((cost.type == Act.CostType.SP) ? 20 : 5) * (100 + c.Evalue(1208) * 30) / 100 + 10;
472 num = num * costMod / 100;
473 if (!e.source.aliasParent.IsEmpty())
474 {
475 int num2 = ValueWithoutLink(e.source.aliasParent) - ValueWithoutLink(e.source.id);
476 num = ((num2 < 0) ? (num * 100 / (100 - num2 * 25)) : (num * (100 + num2 * 5) / 100));
477 }
478 if (num < 0)
479 {
480 num = 0;
481 }
482 return num;
483 }
Definition: ACT.cs:62
CostType
Definition: ACT.cs:64
int Evalue(int ele)
Definition: Card.cs:2533
int ValueWithoutLink(int ele)
virtual Act.Cost GetCost(Chara c)
Definition: ELEMENT.cs:1021
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

Definition at line 210 of file ElementContainer.cs.

211 {
212 Element element = GetElement(ele);
213 if (element == null)
214 {
215 return false;
216 }
217 return element.Value > 0;
218 }

References GetElement().

Referenced by BaseCondition._WriteNote(), LayerSleep.Advance(), Element.CheckLevelBonus(), Has(), BuildMenu.OnActivate(), HotbarManager.ResetHotbar(), AI_PassTime.Run(), Card.Teleport(), BuildMenu.Toggle(), TraitFoodEgg.Update(), and Element.BonusInfo.WriteNote().

◆ Has() [2/3]

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

Definition at line 220 of file ElementContainer.cs.

221 {
222 return Has(row.id);
223 }
bool Has(int ele)

References Has().

◆ Has() [3/3]

bool ElementContainer.Has ( string  alias)
inline

Definition at line 225 of file ElementContainer.cs.

226 {
227 return Has(EClass.sources.elements.alias[alias].id);
228 }

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

◆ HasBase()

bool ElementContainer.HasBase ( int  ele)
inline

Definition at line 230 of file ElementContainer.cs.

231 {
232 Element element = GetElement(ele);
233 if (element == null)
234 {
235 return false;
236 }
237 int num = element.ValueWithoutLink;
238 switch (ele)
239 {
240 case 300:
241 num += Value(1516) * -4;
242 num += Value(1517) * 4;
243 break;
244 case 307:
245 num += Value(1524) * -4;
246 num += Value(1525) * 4;
247 break;
248 }
249 return num != 0;
250 }
int Value(int ele)

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

Referenced by ElementContainerCard.CheckSkillActions(), TraitBookSkill.OnRead(), TraitBookSkill.SetName(), TraitBookPlan.WriteNote(), and TraitBookSkill.WriteNote().

◆ ImportElementMap() [1/2]

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

Definition at line 130 of file ElementContainer.cs.

131 {
132 foreach (KeyValuePair<int, int> item in map)
133 {
134 GetOrCreateElement(item.Key).vSource += item.Value;
135 }
136 }

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

Referenced by WindowChara.RefreshNote().

◆ ImportElementMap() [2/2]

ElementContainer ElementContainer.ImportElementMap ( int[]  ints)
inline

Definition at line 138 of file ElementContainer.cs.

139 {
140 for (int i = 0; i < ints.Length; i += 2)
141 {
142 GetOrCreateElement(ints[i]).vSource += ints[i + 1];
143 }
144 return this;
145 }

References GetOrCreateElement(), and Element.vSource.

◆ Learn()

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

Definition at line 257 of file ElementContainer.cs.

258 {
259 ModBase(ele, v);
260 OnLearn(ele);
261 }
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(), and TraitBookSkill.OnRead().

◆ ListBestAttributes()

List< Element > ElementContainer.ListBestAttributes ( )
inline

Definition at line 614 of file ElementContainer.cs.

615 {
616 List<Element> obj = ListElements((Element a) => a.HasTag("primary"));
617 obj.Sort((Element a, Element b) => (b.ValueWithoutLink - a.ValueWithoutLink) * 100000 + a.id - b.id);
618 return obj;
619 }
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 621 of file ElementContainer.cs.

622 {
623 List<Element> obj = ListElements((Element a) => a.source.category == "skill");
624 obj.Sort((Element a, Element b) => (b.ValueWithoutLink - a.ValueWithoutLink) * 100000 + a.id - b.id);
625 return obj;
626 }

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

558 {
559 List<Element> list = new List<Element>();
560 List<Element> eles = dict.Values.ToList();
561 if (Card != null && Card.Chara != null)
562 {
564 {
565 AddElements(EClass.pc.faction.charaElements, isGlobal: true);
566 }
567 AddElements(Card.Chara.faithElements, isGlobal: false);
568 }
569 foreach (Element item2 in eles)
570 {
571 if (shoudList == null || shoudList(item2))
572 {
573 list.Add(item2);
574 }
575 }
576 if (comparison != null)
577 {
578 list.Sort(comparison);
579 }
580 return list;
581 void AddElements(ElementContainer container, bool isGlobal)
582 {
583 if (container == null)
584 {
585 return;
586 }
587 foreach (Element value in container.dict.Values)
588 {
589 bool flag = true;
590 foreach (Element item3 in eles)
591 {
592 if (value.id == item3.id)
593 {
594 flag = false;
595 break;
596 }
597 }
598 if (flag && value.Value != 0)
599 {
600 if (isGlobal)
601 {
603 eles.Add(item);
604 }
605 else
606 {
607 eles.Add(value);
608 }
609 }
610 }
611 }
612 }
virtual Chara Chara
Definition: Card.cs:2032
ElementContainerCard elements
Definition: Card.cs:39
Faction faction
Definition: Chara.cs:425
override bool IsPCFaction
Definition: Chara.cs:669
ElementContainer faithElements
Definition: Chara.cs:38
static Chara pc
Definition: EClass.cs:14
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 628 of file ElementContainer.cs.

629 {
630 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);
631 }

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

◆ ListLearnable()

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

Definition at line 633 of file ElementContainer.cs.

634 {
635 List<Element> list = new List<Element>();
636 foreach (KeyValuePair<int, Element> item in c.elements.dict)
637 {
638 if (!dict.ContainsKey(item.Key))
639 {
640 list.Add(item.Value);
641 }
642 }
643 return list;
644 }

References dict, item, and list.

◆ ListRune()

List< Element > ElementContainer.ListRune ( )
inline

Definition at line 646 of file ElementContainer.cs.

647 {
648 return ListElements((Element a) => !a.source.encSlot.IsEmpty() && a.vBase + a.vSource != 0);
649 }

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

409 {
410 Element orCreateElement = GetOrCreateElement(ele);
411 orCreateElement.vBase += v;
412 if (parent != null && (!LimitLink || orCreateElement.CanLink(this)))
413 {
414 parent.ModLink(ele, v);
415 }
416 orCreateElement.CheckLevelBonus(this);
417 orCreateElement.OnChangeValue();
418 if (orCreateElement.vBase == 0 && orCreateElement.vSource == 0 && orCreateElement.vLink == 0 && orCreateElement.vPotential == 0 && orCreateElement.vExp == 0)
419 {
420 Remove(orCreateElement.id);
421 }
422 return orCreateElement;
423 }
virtual bool LimitLink
ElementContainer parent
Element ModLink(int id, int v)
virtual void OnChangeValue()
Definition: ELEMENT.cs:957
void CheckLevelBonus(ElementContainer owner, UINote n=null)
Definition: ELEMENT.cs:961
virtual bool CanLink(ElementContainer owner)
Definition: ELEMENT.cs:466

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 DNA.Apply(), Feat.Apply(), Thing.ApplyMaterial(), Card.ApplySocket(), TraitDrink.BlendLove(), TraitDrink.BlendPoison(), CoreDebug.COM_MaxConstruction(), Card.Decay(), Card.EjectSockets(), CoreDebug.Fix_EtherDisease(), AI_Shear.GetFur(), Learn(), Card.MakeFoodFrom(), CraftUtil.MixIngredients(), Card.ModEncLv(), ModExp(), Chara.ModTempElement(), TraitDrinkMilkMother.OnDrink(), ElementContainerFaction.OnEquip(), FactionBranch.OnUnclaimZone(), ElementContainerFaction.OnUnequip(), ActEffect.Proc(), CoreDebug.QuickStart(), Chara.RefreshWorkElements(), AI_Idle.Run(), Card.SetBlessedState(), Card.SetLv(), Chara.SetMainElement(), SetTo(), ConDisease.Tick(), Map.TryShatter(), TraitFoodEgg.Update(), and FactionBranch.Upgrade().

◆ ModExp()

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

Definition at line 269 of file ElementContainer.cs.

270 {
271 if ((Card != null && Card.isChara && Card.Chara.isDead) || a == 0f)
272 {
273 return;
274 }
275 Element element = GetElement(ele);
276 if (element == null || !element.CanGainExp)
277 {
278 return;
279 }
280 if (a > 0f)
281 {
282 if (!chain && Card != null && Card.isChara)
283 {
284 a = a * (float)Card.Chara.GetDaysTogetherBonus() / 100f;
285 }
286 if (element.UseExpMod)
287 {
288 a = a * (float)Mathf.Clamp(element.UsePotential ? element.Potential : 100, 10, 1000) / (float)(100 + Mathf.Max(0, element.ValueWithoutLink) * 25);
289 if (EClass.rndf(1f) < a % 1f)
290 {
291 a += 1f;
292 }
293 }
294 if (!chain && element.source.parentFactor > 0f && Card != null && !element.source.aliasParent.IsEmpty())
295 {
296 Element element2 = element.GetParent(Card);
297 if (element2.CanGainExp)
298 {
299 ModExp(element2.id, Mathf.Clamp(a * element.source.parentFactor / 100f, 1f, 1000f), chain: true);
300 }
301 }
302 }
303 element.vExp += (int)a;
304 if (element.vExp >= element.ExpToNext)
305 {
306 int num = element.vExp - element.ExpToNext;
307 int vBase = element.vBase;
308 ModBase(ele, 1);
309 OnLevelUp(element, vBase);
310 element.vExp = Mathf.Clamp(num / 2, 0, element.ExpToNext / 2);
311 if (element.vTempPotential > 0)
312 {
313 element.vTempPotential -= element.vTempPotential / 4 + EClass.rnd(5) + 5;
314 if (element.vTempPotential < 0)
315 {
316 element.vTempPotential = 0;
317 }
318 }
319 else 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 }
328 else if (element.vExp < 0)
329 {
330 if (element.ValueWithoutLink <= 1)
331 {
332 element.vExp = 0;
333 return;
334 }
335 int vBase2 = element.vBase;
336 ModBase(ele, -1);
337 OnLevelDown(element, vBase2);
338 element.vExp = Mathf.Max(element.ExpToNext / 2, element.ExpToNext + element.vExp);
339 }
340 }
virtual bool isChara
Definition: Card.cs:2045
int GetDaysTogetherBonus()
Definition: Card.cs:2937
bool isDead
Definition: Chara.cs:387
static int rnd(long a)
Definition: EClass.cs:58
static float rndf(float a)
Definition: EClass.cs:92
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:298
virtual bool UseExpMod
Definition: ELEMENT.cs:308
int Potential
Definition: ELEMENT.cs:296
int vTempPotential
Definition: ELEMENT.cs:256
virtual bool UsePotential
Definition: ELEMENT.cs:332
Element GetParent(Card c)
Definition: ELEMENT.cs:520
virtual int ExpToNext
Definition: ELEMENT.cs:306

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(), StatsMana.Mod(), ModExp(), Card.ModExp(), 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(), FoodEffect.Proc(), AI_Fuck.Run(), AI_PlayMusic.Run(), AI_Shear.Run(), AI_Slaughter.Run(), AI_Steal.Run(), AI_UseCrafter.Run(), and Card.SpawnLoot().

◆ ModLink()

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

Definition at line 456 of file ElementContainer.cs.

457 {
458 Element orCreateElement = GetOrCreateElement(id);
459 orCreateElement.vLink += v;
460 orCreateElement.OnChangeValue();
461 if (parent != null && (!LimitLink || orCreateElement.CanLink(this)))
462 {
463 parent.ModLink(id, v);
464 }
465 return orCreateElement;
466 }

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

430 {
431 Element orCreateElement = GetOrCreateElement(ele);
432 orCreateElement.vPotential += v;
433 if (orCreateElement.vPotential > 1000)
434 {
435 orCreateElement.vPotential = 1000;
436 }
437 return orCreateElement;
438 }

References GetOrCreateElement(), and Element.vPotential.

Referenced by Feat.Apply(), and FoodEffect.Proc().

◆ ModTempPotential()

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

Definition at line 440 of file ElementContainer.cs.

441 {
442 Element orCreateElement = GetOrCreateElement(ele);
443 orCreateElement.vTempPotential += v;
444 if (orCreateElement.vTempPotential > 1000)
445 {
446 orCreateElement.vTempPotential = 1000;
447 }
448 OnModTempPotential(orCreateElement, v, threshMsg);
449 return orCreateElement;
450 }
virtual void OnModTempPotential(Element e, int v, int threshMsg)

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

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

◆ OnChangeValue()

virtual void ElementContainer.OnChangeValue ( )
inlinevirtual

Definition at line 425 of file ElementContainer.cs.

426 {
427 }

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

343 {
344 }

Referenced by Learn().

◆ OnLevelDown()

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

Reimplemented in ElementContainerCard.

Definition at line 354 of file ElementContainer.cs.

355 {
356 }

Referenced by ModExp().

◆ OnLevelUp()

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

Reimplemented in ElementContainerCard, and ElementContainerZone.

Definition at line 350 of file ElementContainer.cs.

351 {
352 }

Referenced by ModExp().

◆ OnModTempPotential()

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

Reimplemented in ElementContainerCard.

Definition at line 452 of file ElementContainer.cs.

453 {
454 }

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

347 {
348 }

Referenced by Train().

◆ Remove()

void ElementContainer.Remove ( int  id)
inline

Definition at line 395 of file ElementContainer.cs.

396 {
397 Element element = GetElement(id);
398 if (element != null)
399 {
400 if (parent != null && (!LimitLink || element.CanLink(this)))
401 {
402 parent.ModLink(id, -element.Value);
403 }
404 dict.Remove(id);
405 }
406 }

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

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

◆ SetBase() [1/2]

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

Definition at line 363 of file ElementContainer.cs.

364 {
365 Element orCreateElement = GetOrCreateElement(id);
366 if (parent != null && (!LimitLink || orCreateElement.CanLink(this)))
367 {
368 parent.ModLink(id, -orCreateElement.vBase + v);
369 }
370 orCreateElement.vBase = v;
371 orCreateElement.vExp = 0;
372 orCreateElement.vPotential = potential;
373 orCreateElement.OnChangeValue();
374 if (orCreateElement.vBase == 0 && orCreateElement.vSource == 0 && orCreateElement.vLink == 0 && orCreateElement.vPotential == 0 && orCreateElement.vExp == 0)
375 {
376 Remove(orCreateElement.id);
377 }
378 return orCreateElement;
379 }

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

533 {
534 if (parent != null)
535 {
536 foreach (Element value in dict.Values)
537 {
538 if (!LimitLink || value.CanLink(this))
539 {
540 parent.ModLink(value.id, -(value.vBase + value.vSource));
541 }
542 }
543 }
544 if (newParent != null)
545 {
546 foreach (Element value2 in dict.Values)
547 {
548 if (!LimitLink || value2.CanLink(this))
549 {
550 newParent.ModLink(value2.id, value2.vBase + value2.vSource);
551 }
552 }
553 }
554 parent = newParent;
555 }

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

382 {
383 Element orCreateElement = GetOrCreateElement(id);
384 int num = v - (orCreateElement.vBase + orCreateElement.vSource);
385 if (num != 0)
386 {
387 ModBase(id, num);
388 }
389 if (orCreateElement.vBase == 0 && orCreateElement.vSource == 0 && orCreateElement.vLink == 0 && orCreateElement.vPotential == 0 && orCreateElement.vExp == 0)
390 {
391 Remove(orCreateElement.id);
392 }
393 }

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(), TraitSeed.MakeSeed(), CraftUtil.MixIngredients(), TraitAgingShelf.OnProduce(), TraitDryBrick.OnProduce(), and Card.SetTier().

◆ Train()

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

Definition at line 263 of file ElementContainer.cs.

264 {
265 OnTrain(ele);
266 ModTempPotential(ele, a);
267 }
virtual void OnTrain(int ele)
Element ModTempPotential(int ele, int v, int threshMsg=0)

References ModTempPotential(), and OnTrain().

◆ Value()

int ElementContainer.Value ( int  ele)
inline

◆ ValueBonus()

virtual int ElementContainer.ValueBonus ( Element  e)
inlinevirtual

Reimplemented in ElementContainerCard.

Definition at line 180 of file ElementContainer.cs.

181 {
182 return 0;
183 }

◆ ValueWithoutLink() [1/2]

int ElementContainer.ValueWithoutLink ( int  ele)
inline

◆ ValueWithoutLink() [2/2]

int ElementContainer.ValueWithoutLink ( string  alias)
inline

Definition at line 190 of file ElementContainer.cs.

191 {
192 return GetElement(alias)?.ValueWithoutLink ?? 0;
193 }

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

virtual Card ElementContainer.Card
get

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