Elin Decompiled Documentation EA 23.290 Nightly
Loading...
Searching...
No Matches
CharaAbility.cs
Go to the documentation of this file.
1using System.Collections.Generic;
2using UnityEngine;
3
4public class CharaAbility : EClass
5{
6 public static List<SourceElement.Row> randomAbilities = new List<SourceElement.Row>();
7
8 public static List<SourceElement.Row> randomAbilitiesAdv = new List<SourceElement.Row>();
9
10 public Chara owner;
11
12 public ActList list = new ActList();
13
14 public static List<SourceElement.Row> BuildRandomAbilityList(bool adv)
15 {
16 List<SourceElement.Row> list = new List<SourceElement.Row>();
17 foreach (SourceElement.Row row in EClass.sources.elements.rows)
18 {
19 if (row.abilityType.Length == 0 || row.aliasRef == "mold")
20 {
21 continue;
22 }
23 switch (row.id)
24 {
25 case 5000:
26 case 5001:
27 case 5005:
28 case 5040:
29 case 5048:
30 case 6400:
31 case 6410:
32 case 6800:
33 case 8200:
34 continue;
35 }
36 if (row.idMold != 0 && !adv)
37 {
38 switch (row.aliasRef)
39 {
40 case "eleEther":
41 case "eleAcid":
42 case "eleCut":
43 case "eleImpact":
44 continue;
45 }
46 }
47 if (!row.tag.Contains("noRandomAbility"))
48 {
49 list.Add(row);
50 }
51 }
52 return list;
53 }
54
56 {
57 if (randomAbilities.Count == 0)
58 {
60 }
61 if (randomAbilitiesAdv.Count == 0)
62 {
64 }
65 if (!(owner.trait is TraitAdventurer))
66 {
67 return randomAbilities;
68 }
69 return randomAbilitiesAdv;
70 }
71
72 public CharaAbility(Chara _owner)
73 {
74 owner = _owner;
75 Refresh();
76 }
77
78 public void Refresh()
79 {
80 list.items.Clear();
81 string[] actCombat = owner.source.actCombat;
82 for (int i = 0; i < actCombat.Length; i++)
83 {
84 string[] array = actCombat[i].Split('/');
85 list.items.Add(new ActList.Item
86 {
87 act = ACT.dict[ConvertID(array[0])],
88 chance = ((array.Length > 1) ? array[1].ToInt() : 100),
89 pt = (array.Length > 2)
90 });
91 }
93 {
94 int num = owner.trait.MaxRandomAbility + EClass.rnd(2) - list.items.Count;
95 if (num > 1)
96 {
97 owner._listAbility = new List<int>();
98 for (int j = 0; j < num; j++)
99 {
100 owner._listAbility.Add(GetRandomAbilityList().RandomItemWeighted((SourceElement.Row e) => e.chance).id);
101 }
102 }
103 }
104 if (owner._listAbility == null)
105 {
106 return;
107 }
108 foreach (int item in owner._listAbility)
109 {
110 string alias = EClass.sources.elements.map[Mathf.Abs(item)].alias;
111 list.items.Add(new ActList.Item
112 {
113 act = ACT.dict[alias],
114 chance = 50,
115 pt = (item < 0)
116 });
117 }
118 string ConvertID(string s)
119 {
121 {
122 return s;
123 }
124 if (EClass.sources.elements.alias[s].aliasRef == "mold")
125 {
126 return s + owner.MainElement.source.alias.Replace("ele", "");
127 }
128 return s;
129 }
130 }
131
132 public void Add(int id, int chance, bool pt)
133 {
134 if (owner._listAbility == null)
135 {
136 owner._listAbility = new List<int>();
137 }
138 owner._listAbility.Add(id * ((!pt) ? 1 : (-1)));
139 if (owner.IsPC && owner.HasElement(1274))
140 {
141 Element element = owner.elements.GetElement(id);
142 if (element == null)
143 {
144 owner.elements.ModBase(id, 1);
145 }
146 else if (!(element is Spell))
147 {
148 element.vPotential = 0;
149 }
150 }
151 Refresh();
152 if (owner.IsPC)
153 {
155 }
156 }
157
158 public void AddRandom()
159 {
160 if (owner._listAbility == null)
161 {
162 owner._listAbility = new List<int>();
163 }
164 owner._listAbility.Add(GetRandomAbilityList().RandomItemWeighted((SourceElement.Row e) => e.chance).id);
165 Refresh();
166 }
167
168 public void Remove(int id)
169 {
170 owner._listAbility.Remove(id);
171 if (owner.IsPC && owner.HasElement(1274) && owner.HasElement(id) && owner._listAbility.IndexOf(id) == -1)
172 {
173 Element element = EClass.pc.elements.GetElement(id);
174 if (!(element is Spell))
175 {
176 element.vPotential = -1;
177 }
178 }
179 if (owner._listAbility.Count == 0)
180 {
181 owner._listAbility = null;
182 }
183 Refresh();
184 if (owner.IsPC)
185 {
187 }
188 }
189
190 public bool Has(int id)
191 {
192 foreach (ActList.Item item in list.items)
193 {
194 if (item.act.id == id)
195 {
196 return true;
197 }
198 }
199 return false;
200 }
201}
List< Item > items
Definition: ActList.cs:14
ElementContainerCard elements
Definition: Card.cs:42
bool HasElement(int ele, bool includeNagative=false)
Definition: Card.cs:6152
static List< SourceElement.Row > randomAbilities
Definition: CharaAbility.cs:6
void Refresh()
Definition: CharaAbility.cs:78
List< SourceElement.Row > GetRandomAbilityList()
Definition: CharaAbility.cs:55
ActList list
Definition: CharaAbility.cs:12
static List< SourceElement.Row > randomAbilitiesAdv
Definition: CharaAbility.cs:8
void Add(int id, int chance, bool pt)
void Remove(int id)
CharaAbility(Chara _owner)
Definition: CharaAbility.cs:72
void AddRandom()
static List< SourceElement.Row > BuildRandomAbilityList(bool adv)
Definition: CharaAbility.cs:14
bool Has(int id)
Definition: Chara.cs:10
Element MainElement
Definition: Chara.cs:731
new TraitChara trait
Definition: Chara.cs:505
override bool IsPC
Definition: Chara.cs:626
SourceChara.Row source
Definition: Chara.cs:160
List< int > _listAbility
Definition: Chara.cs:61
Definition: EClass.cs:6
static int rnd(long a)
Definition: EClass.cs:59
static SourceManager sources
Definition: EClass.cs:43
static Chara pc
Definition: EClass.cs:15
Element ModBase(int ele, int v)
Element GetElement(string alias)
SourceElement.Row source
Definition: ELEMENT.cs:278
static Element Void
Definition: ELEMENT.cs:243
static void Redraw()
SourceElement elements
Definition: SPELL.cs:626
virtual int MaxRandomAbility
Definition: TraitChara.cs:97