Elin Decompiled Documentation EA 23.102 Nightly
Loading...
Searching...
No Matches
AI_UseCrafter.cs
Go to the documentation of this file.
1using System.Collections.Generic;
2
3public class AI_UseCrafter : AIAct
4{
6
8
9 public Recipe recipe;
10
11 public int num = 1;
12
13 public List<Thing> ings = new List<Thing>();
14
15 public override int LeftHand => 1001;
16
17 public override int RightHand => 1002;
18
19 public override bool CanManualCancel()
20 {
21 if ((bool)layer)
22 {
23 return layer.CanCancelAI;
24 }
25 return false;
26 }
27
28 public override void OnStart()
29 {
30 if (crafter.Icon != 0)
31 {
33 }
34 }
35
36 public override void OnSuccess()
37 {
38 OnEnd();
39 }
40
41 public override void OnCancel()
42 {
43 OnEnd();
44 if ((bool)layer)
45 {
46 layer.Close();
47 }
48 }
49
50 public void OnEnd()
51 {
52 foreach (Thing ing in ings)
53 {
54 if (ing != null && ing.ExistsOnMap)
55 {
56 ing.isHidden = false;
57 EClass.pc.Pick(ing);
58 }
59 }
61 {
62 crafter.Toggle(on: false);
63 }
64 if (!crafter.idSoundBG.IsEmpty())
65 {
67 }
68 if ((bool)layer)
69 {
71 }
72 crafter.OnEndAI(this);
73 }
74
75 public override IEnumerable<Status> Run()
76 {
77 do
78 {
80 {
81 yield return Success();
82 }
83 if (!crafter.idSoundBG.IsEmpty())
84 {
85 SE.Play(crafter.idSoundBG);
86 }
87 List<Thing> targets = layer.GetTargets();
88 BlessedState blessed = BlessedState.Normal;
89 for (int j = 0; j < targets.Count; j++)
90 {
91 Thing t2 = targets[j];
92 if (!IsIngValid(t2, j))
93 {
94 if (j == 0)
95 {
97 }
98 else
99 {
101 }
102 yield return Success();
103 }
104 }
105 if (!crafter.IsFuelEnough(num, targets))
106 {
107 Msg.Say("notEnoughFuel");
109 yield return Success();
110 }
111 ings = new List<Thing>();
112 for (int k = 0; k < targets.Count; k++)
113 {
114 Thing thing = targets[k].Split(layer.GetReqIngredient(k));
115 ings.Add(thing);
116 if (thing.blessedState <= BlessedState.Cursed && blessed > thing.blessedState)
117 {
118 blessed = thing.blessedState;
119 }
120 if (thing.blessedState > BlessedState.Normal && blessed == BlessedState.Normal)
121 {
122 blessed = thing.blessedState;
123 }
125 {
127 card.altitude = ((!crafter.owner.ExistsOnMap) ? 1 : 0);
128 if (crafter.animeType == TraitCrafter.AnimeType.Microwave)
129 {
130 card.isHidden = true;
131 }
132 }
133 }
134 if ((bool)LayerDragGrid.Instance)
135 {
137 }
138 bool requireOn = crafter.IsRequireFuel || crafter.ToggleType != ToggleType.None;
139 if (requireOn && !crafter.owner.isOn)
140 {
141 crafter.Toggle(on: true);
142 }
143 int costSP = crafter.GetCostSp(this);
144 int duration = crafter.GetDuration(this, costSP);
145 Progress_Custom progress = new Progress_Custom
146 {
147 canProgress = delegate
148 {
149 if (requireOn && !crafter.owner.isOn)
150 {
151 return false;
152 }
153 foreach (Thing ing in ings)
154 {
155 if (ing.isDestroyed || (crafter.IsConsumeIng && !ing.ExistsOnMap))
156 {
157 return false;
158 }
159 }
160 if ((bool)LayerDragGrid.Instance)
161 {
163 for (int num = 0; num < invOwnerDraglet.numDragGrid; num++)
164 {
165 if (invOwnerDraglet.buttons[num].Card == null)
166 {
167 return false;
168 }
169 }
170 if (invOwnerDraglet.numDragGrid == 2 && ings[0] == ings[1] && ings[0].Num == 1)
171 {
172 return false;
173 }
174 }
175 return !crafter.owner.isDestroyed;
176 },
177 onProgressBegin = delegate
178 {
180 {
181 crafter.owner.animeCounter = 0.01f;
182 }
183 },
184 onProgress = delegate
185 {
187 {
189 }
192 {
194 if ((uint)(animeType - 1) <= 1u)
195 {
197 }
198 }
199 foreach (Thing ing2 in ings)
200 {
202 }
203 },
204 onProgressComplete = delegate
205 {
207 {
209 }
212 if (recipe != null)
213 {
214 for (int l = 0; l < num; l++)
215 {
216 recipe.Craft(blessed, l == 0, ings, crafter);
217 }
218 EClass.Sound.Play("craft");
219 Point from = (crafter.owner.ExistsOnMap ? crafter.owner.pos : owner.pos);
220 Effect.Get("smoke").Play(from);
221 Effect.Get("mine").Play(from).SetParticleColor(recipe.GetColorMaterial().GetColor())
222 .Emit(10 + EClass.rnd(10));
223 owner.renderer.PlayAnime(AnimeID.JumpSmall);
225 }
226 else
227 {
228 Thing thing2 = crafter.Craft(this);
229 if (thing2 != null)
230 {
231 if (thing2.category.ignoreBless == 0)
232 {
233 thing2.SetBlessedState(blessed);
234 }
235 thing2.PlaySoundDrop(spatial: false);
236 EClass._zone.AddCard(thing2, EClass.pc.pos);
237 thing2.Identify(show: false);
238 owner.Pick(thing2);
239 }
240 }
241 for (int m = 0; m < ings.Count; m++)
242 {
244 {
245 ings[m].Destroy();
246 }
247 }
248 foreach (Thing ing3 in ings)
249 {
250 if (ing3.ExistsOnMap)
251 {
252 owner.Pick(ing3);
253 }
254 }
256 {
258 if (crafter.owner.c_charges <= 0)
259 {
260 crafter.owner.c_charges = 0;
261 crafter.Toggle(on: false);
262 }
263 }
264 for (int n = 0; n < num; n++)
265 {
266 owner.RemoveCondition<ConInvulnerable>();
267 owner.elements.ModExp(orCreateElement.id, costSP * 12 * (100 + duration * 2) / 100);
268 owner.stamina.Mod(-costSP);
269 if (owner == null || owner.isDead)
270 {
271 break;
272 }
273 }
274 Rand.SetSeed();
275 if (crafter is TraitCookerMicrowave && recipe.id == "onsentamago" && EClass.rnd(3) != 0)
276 {
277 int power = EClass.curve((200 + ings[0].Quality * 5) * (100 + EClass.pc.Evalue(287) * 10) / 100, 400, 100);
278 ActEffect.ProcAt(EffectId.Explosive, power, BlessedState.Normal, crafter.owner.ExistsOnMap ? crafter.owner : EClass.pc, EClass.pc, EClass.pc.pos, isNeg: true, new ActRef
279 {
280 aliasEle = "eleImpact"
281 });
282 }
283 }
284 }.SetDuration(duration, 5);
285 owner.SetTempHand(-1, -1);
287 {
288 progress.SetDuration(1, 1);
289 }
290 yield return Do(progress);
291 if (progress.status == Status.Fail)
292 {
293 yield return Cancel();
294 }
296 {
297 yield return Cancel();
298 }
300 {
302 break;
303 }
304 }
305 while ((bool)layer && layer.RepeatAI);
306 bool IsIngValid(Thing t, int i)
307 {
308 if (t == null || t.isDestroyed)
309 {
310 return false;
311 }
312 Card rootCard = t.GetRootCard();
313 if (rootCard != null && rootCard.isChara && !rootCard.IsPCFaction)
314 {
315 return false;
316 }
318 {
319 return false;
320 }
321 return true;
322 }
323 }
324}
AnimeID
Definition: AnimeID.cs:2
BlessedState
Definition: BlessedState.cs:2
EffectId
Definition: EffectId.cs:2
ToggleType
Definition: ToggleType.cs:2
Definition: AIAct.cs:6
Status Do(AIAct _seq, Func< Status > _onChildFail=null)
Definition: AIAct.cs:416
virtual Status Cancel()
Definition: AIAct.cs:291
new Chara owner
Definition: AIAct.cs:14
Status
Definition: AIAct.cs:8
TraitCrafter crafter
Definition: AI_UseCrafter.cs:7
override int RightHand
LayerBaseCraft layer
Definition: AI_UseCrafter.cs:5
override void OnStart()
override bool CanManualCancel()
List< Thing > ings
override IEnumerable< Status > Run()
override void OnSuccess()
override void OnCancel()
override int LeftHand
static void ProcAt(EffectId id, int power, BlessedState state, Card cc, Card tc, Point tp, bool isNeg, ActRef actRef=default(ActRef))
Definition: ActEffect.cs:392
void Add(Act a, string s="")
Definition: ActPlan.cs:11
void PlayAnime(AnimeID id, bool force)
Definition: Card.cs:11
bool isDestroyed
Definition: Card.cs:71
Thing Split(int a)
Definition: Card.cs:3231
ElementContainerCard elements
Definition: Card.cs:37
SoundSource PlaySound(string id, float v=1f, bool spatial=true)
Definition: Card.cs:5404
bool ExistsOnMap
Definition: Card.cs:1961
virtual void SetBlessedState(BlessedState s)
Definition: Card.cs:3572
Point pos
Definition: Card.cs:55
void ShowEmo(Emo _emo=Emo.none, float duration=0f, bool skipSame=true)
Definition: Card.cs:5372
void ModCharge(int a, bool destroy=false)
Definition: Card.cs:3627
virtual bool isChara
Definition: Card.cs:1959
Card GetRootCard()
Definition: Card.cs:3173
int Evalue(int ele)
Definition: Card.cs:2431
bool isOn
Definition: Card.cs:514
virtual bool IsPCFaction
Definition: Card.cs:2129
BlessedState blessedState
Definition: Card.cs:262
void PlaySoundDrop(bool spatial=true)
Definition: Card.cs:5389
SourceCategory.Row category
Definition: Card.cs:1925
int c_charges
Definition: Card.cs:1205
CardRenderer renderer
Definition: Card.cs:57
Stats stamina
Definition: Chara.cs:955
void SetTempHand(int right=0, int left=0)
Definition: Chara.cs:6057
bool isDead
Definition: Chara.cs:374
override void LookAt(Card c)
Definition: Chara.cs:3219
Thing Pick(Thing t, bool msg=true, bool tryStack=true)
Definition: Chara.cs:3920
bool godCraft
Definition: CoreDebug.cs:180
Definition: EClass.cs:5
static int curve(int a, int start, int step, int rate=75)
Definition: EClass.cs:55
static int rnd(int a)
Definition: EClass.cs:50
static Zone _zone
Definition: EClass.cs:20
static Chara pc
Definition: EClass.cs:14
static CoreDebug debug
Definition: EClass.cs:48
static SoundManager Sound
Definition: EClass.cs:46
Definition: Effect.cs:7
static Effect Get(Effect original)
Definition: Effect.cs:85
void Play(float delay, Point from, float fixY=0f, Point to=null, Sprite sprite=null)
Definition: Effect.cs:100
void ModExp(int ele, int a, bool chain=false)
Element GetOrCreateElement(Element ele)
List< ButtonGrid > buttons
Definition: InvOwner.cs:542
virtual int numDragGrid
Definition: InvOwner.cs:624
virtual int GetReqIngredient(int index)
virtual bool CanCancelAI
virtual bool RepeatAI
virtual List< Thing > GetTargets()
virtual void RefreshCurrentGrid()
virtual void ClearButtons()
virtual void OnEndCraft()
InvOwnerDraglet owner
static LayerDragGrid Instance
virtual void Close()
Definition: Layer.cs:463
Definition: Msg.cs:5
static string Say(string idLang, string ref1, string ref2=null, string ref3=null, string ref4=null)
Definition: Msg.cs:58
Definition: Point.cs:9
bool Equals(int _x, int _z)
Definition: Point.cs:924
Definition: Rand.cs:4
static void SetSeed(int a=-1)
Definition: Rand.cs:37
Definition: Recipe.cs:7
string id
Definition: Recipe.cs:161
RecipeSource source
Definition: Recipe.cs:187
void TryGetFirstTimeBonus()
Definition: Recipe.cs:963
virtual Thing Craft(BlessedState blessed, bool sound=false, List< Thing > ings=null, TraitCrafter crafter=null, bool model=false)
Definition: Recipe.cs:536
virtual SourceMaterial.Row GetColorMaterial()
Definition: Recipe.cs:481
virtual void Mod(int a)
Definition: Stats.cs:135
Definition: Thing.cs:8
Thing Identify(bool show=true, IDTSource idtSource=IDTSource.Identify)
Definition: Thing.cs:1959
virtual bool IsConsumeIng
Definition: TraitCrafter.cs:61
virtual string IDReqEle(RecipeSource r)
Definition: TraitCrafter.cs:67
virtual bool StopSoundProgress
Definition: TraitCrafter.cs:45
virtual Emo Icon
Definition: TraitCrafter.cs:31
virtual bool CloseOnComplete
Definition: TraitCrafter.cs:63
virtual string idSoundProgress
Definition: TraitCrafter.cs:41
virtual string idSoundBG
Definition: TraitCrafter.cs:53
virtual bool ShouldConsumeIng(SourceRecipe.Row item, int index)
SourceRecipe.Row GetSource(AI_UseCrafter ai)
virtual AnimeType animeType
Definition: TraitCrafter.cs:37
virtual bool AutoTurnOff
Definition: TraitCrafter.cs:59
virtual void OnEndAI(AI_UseCrafter ai)
virtual int GetCostSp(AI_UseCrafter ai)
virtual AnimeID IdAnimeProgress
Definition: TraitCrafter.cs:39
virtual bool IsCraftIngredient(Card c, int idx)
Definition: TraitCrafter.cs:72
virtual int GetDuration(AI_UseCrafter ai, int costSp)
virtual string idSoundComplete
Definition: TraitCrafter.cs:43
virtual Thing Craft(AI_UseCrafter ai)
virtual bool IsFactory
Definition: Trait.cs:135
virtual int FuelCost
Definition: Trait.cs:447
bool IsRequireFuel
Definition: Trait.cs:451
virtual void Toggle(bool on, bool silent=false)
Definition: Trait.cs:1106
Card owner
Definition: Trait.cs:26
bool IsFuelEnough(int num=1, List< Thing > excludes=null, bool tryRefuel=true)
Definition: Trait.cs:1269
Card AddCard(Card t, Point point)
Definition: Zone.cs:1893
Definition: ActRef.cs:2