Elin Decompiled Documentation EA 23.344.1 Nightly
Loading...
Searching...
No Matches
TraitCrafter.cs
Go to the documentation of this file.
1using System.Collections.Generic;
2using UnityEngine;
3
4public class TraitCrafter : Trait
5{
6 public enum MixType
7 {
8 None,
9 Food,
11 Dye,
12 Butcher,
13 Grind,
16 Scratch,
18 Fortune,
22 }
23
24 public enum AnimeType
25 {
26 Default,
28 Pot
29 }
30
31 public override bool ShowFuelWindow => false;
32
33 public virtual Emo Icon => Emo.none;
34
35 public virtual int numIng => 1;
36
37 public virtual string IdSource => "";
38
39 public virtual AnimeType animeType => AnimeType.Default;
40
41 public virtual AnimeID IdAnimeProgress => AnimeID.HitObj;
42
43 public virtual string idSoundProgress => "";
44
45 public virtual string idSoundComplete => null;
46
47 public virtual bool StopSoundProgress => false;
48
49 public override bool IsNightOnlyLight => false;
50
51 public virtual bool CanUseFromInventory => true;
52
53 public override bool HoldAsDefaultInteraction => true;
54
55 public virtual string idSoundBG => null;
56
57 public virtual string CrafterTitle => "";
58
59 public virtual bool CanTriggerFire => base.IsRequireFuel;
60
61 public virtual bool AutoTurnOff => false;
62
63 public virtual bool IsConsumeIng => true;
64
65 public virtual bool CloseOnComplete => false;
66
67 public virtual int CostSP => 1;
68
69 public virtual int WitchDoubleCraftChance(Thing t)
70 {
71 return 0;
72 }
73
74 public virtual string IDReqEle(RecipeSource r)
75 {
76 return GetParam(1) ?? "handicraft";
77 }
78
79 public virtual bool IsCraftIngredient(Card c, int idx)
80 {
81 foreach (SourceRecipe.Row row in EClass.sources.recipes.rows)
82 {
83 if (idx == 1)
84 {
86 if (!IsIngredient(0, row, card) || (card == c && card.Num < 2))
87 {
88 continue;
89 }
90 }
91 if (IsIngredient(idx, row, c))
92 {
93 return true;
94 }
95 }
96 return false;
97 }
98
99 public bool IsIngredient(int idx, SourceRecipe.Row r, Card c)
100 {
101 if (r.factory != IdSource || c == null)
102 {
103 return false;
104 }
105 if (c.c_isImportant && ShouldConsumeIng(r, idx))
106 {
107 return false;
108 }
109 if (c.trait is TraitFoodFishSlice)
110 {
111 return false;
112 }
113 if (r.tag.Contains("debug") && !EClass.debug.enable)
114 {
115 return false;
116 }
117 string[] array = ((idx == 0) ? r.ing1 : r.ing2);
118 switch (r.type.ToEnum<MixType>())
119 {
120 case MixType.Grind:
121 {
122 if (idx != 1)
123 {
124 break;
125 }
126 if (r.tag.Contains("rust") && c.encLV >= 0)
127 {
128 return false;
129 }
130 if (!r.tag.Contains("mod_eject"))
131 {
132 break;
133 }
134 if (c.sockets == null)
135 {
136 return false;
137 }
138 bool flag = false;
139 foreach (int socket in c.sockets)
140 {
141 if (socket != 0)
142 {
143 flag = true;
144 }
145 }
146 if (!flag)
147 {
148 return false;
149 }
150 break;
151 }
152 case MixType.SeedWork:
153 if (idx == 1 && c.id == "seed" && c.encLV == 0)
154 {
155 return false;
156 }
157 break;
158 }
159 string[] array2 = array;
160 foreach (string text in array2)
161 {
162 if (r.tag.Contains("noCarbone") && c.material.alias == "carbone")
163 {
164 return false;
165 }
166 if (text.StartsWith('#'))
167 {
168 string text2 = text.Replace("#", "");
169 if (c.category.IsChildOf(text2) && IsIngredient(text2, c))
170 {
171 return true;
172 }
173 continue;
174 }
175 string[] array3 = text.Split('@');
176 if (array3.Length > 1)
177 {
178 if (c.id != array3[0] && c.sourceCard._origin != array3[0])
179 {
180 return false;
181 }
182 if (c.refCard is SourceChara.Row row && row.race_row.tag.Contains(array3[1]))
183 {
184 return true;
185 }
186 if (c.material.tag.Contains(array3[1]))
187 {
188 return true;
189 }
190 continue;
191 }
192 if (text == "any")
193 {
194 if (this is TraitDyeMaker)
195 {
196 if (c.id == "dye")
197 {
198 return false;
199 }
200 if (!c.category.GetRoot().tag.Contains("dye") && !c.category.tag.Contains("dye"))
201 {
202 return false;
203 }
204 }
205 if (!c.IsUnique && !c.IsImportant && !c.trait.CanOnlyCarry)
206 {
207 return true;
208 }
209 }
210 if (c.id == text || c.sourceCard._origin == text)
211 {
212 return true;
213 }
214 }
215 return false;
216 }
217
218 public virtual bool IsIngredient(string cat, Card c)
219 {
220 return true;
221 }
222
224 {
225 int num = r.id;
226 string[] ing = r.ing1;
227 for (int i = 0; i < ing.Length; i++)
228 {
229 if (ing[i].Contains('@'))
230 {
231 num -= 10000;
232 }
233 }
234 return num;
235 }
236
237 public virtual int GetDuration(AI_UseCrafter ai, int costSp)
238 {
239 return Mathf.Max(1, GetSource(ai).time * 100 / (80 + EClass.pc.Evalue(IDReqEle(ai.recipe?.source)) * 5));
240 }
241
242 public virtual int GetCostSp(AI_UseCrafter ai)
243 {
244 return GetSource(ai).sp;
245 }
246
248 {
249 List<SourceRecipe.Row> list = new List<SourceRecipe.Row>();
250 foreach (SourceRecipe.Row row in EClass.sources.recipes.rows)
251 {
252 if (row.factory == IdSource)
253 {
254 list.Add(row);
255 }
256 }
257 for (int i = 0; i < numIng; i++)
258 {
259 foreach (SourceRecipe.Row row2 in EClass.sources.recipes.rows)
260 {
261 if (i >= ai.ings.Count || !IsIngredient(i, row2, ai.ings[i]))
262 {
263 list.Remove(row2);
264 }
265 }
266 }
267 if (list.Count == 0)
268 {
269 return null;
270 }
271 list.Sort((SourceRecipe.Row a, SourceRecipe.Row b) => GetSortVal(a) - GetSortVal(b));
272 return list[0];
273 }
274
275 public virtual bool ShouldConsumeIng(SourceRecipe.Row item, int index)
276 {
277 if (IsFactory)
278 {
279 return true;
280 }
281 if (item == null)
282 {
283 return false;
284 }
285 int id = item.id;
286 if ((uint)(id - 47) <= 1u)
287 {
288 return index == 0;
289 }
290 return true;
291 }
292
293 public virtual Thing Craft(AI_UseCrafter ai)
294 {
295 Thing thing = ai.ings[0];
296 Thing thing2 = ((numIng > 1) ? ai.ings[1] : null);
297 SourceRecipe.Row source = GetSource(ai);
298 if (source == null)
299 {
300 return null;
301 }
302 if (!EClass.player.knownCraft.Contains(source.id))
303 {
304 SE.Play("idea");
305 Msg.Say("newKnownCraft");
306 EClass.player.knownCraft.Add(source.id);
307 if ((bool)LayerDragGrid.Instance)
308 {
310 }
311 }
312 string thing3 = source.thing;
313 MixType mixType = source.type.ToEnum<MixType>();
314 int num = source.num.Calc();
315 Thing t = null;
316 string[] array = thing3.Split('%');
317 bool claimed;
318 switch (mixType)
319 {
320 case MixType.Food:
321 t = CraftUtil.MixIngredients(thing3, ai.ings, CraftUtil.MixType.General, 0, EClass.pc);
322 break;
323 case MixType.Resource:
324 case MixType.FixedResource:
325 t = CraftUtil.MixIngredients(ThingGen.Create(array[0], (array.Length > 1) ? EClass.sources.materials.alias[array[1]].id : thing.material.id), ai.ings, (mixType == MixType.FixedResource) ? CraftUtil.MixType.NoMix : CraftUtil.MixType.General, 999, EClass.pc).Thing;
326 break;
327 case MixType.Dye:
328 t = ThingGen.Create(thing3, thing2.material.id);
329 break;
330 case MixType.Butcher:
331 thing3 = SpawnListThing.Get("butcher", (SourceThing.Row a) => a.Category.id == "bodyparts").Select().id;
332 t = ThingGen.Create(thing3);
333 break;
334 case MixType.Grind:
335 if (source.tag.Contains("rust"))
336 {
337 EClass.pc.Say("polish", EClass.pc, ai.ings[1]);
338 ai.ings[1].ModEncLv(1);
339 ai.ings[0].ModNum(-1);
340 }
341 if (source.tag.Contains("mod_eject"))
342 {
343 ai.ings[1].EjectSockets();
344 ai.ings[0].ModNum(-1);
345 }
346 break;
347 case MixType.Sculpture:
348 {
349 t = ThingGen.Create(thing3);
350 List<CardRow> list2 = EClass.player.codex.ListKills();
351 list2.Add(EClass.sources.cards.map["putty"]);
352 list2.Add(EClass.sources.cards.map["snail"]);
353 CardRow cardRow = list2.RandomItemWeighted((CardRow a) => Mathf.Max(50 - a.LV, Mathf.Clamp(EClass.pc.Evalue(258) / 2, 1, a.LV * 2)));
354 t.c_idRefCard = cardRow.id;
355 t.ChangeMaterial(thing.material);
356 t.SetEncLv(Mathf.Min(EClass.rnd(EClass.rnd(Mathf.Max(5 + EClass.pc.Evalue(258) - cardRow.LV, 1))), 12));
357 t = CraftUtil.MixIngredients(t, ai.ings, CraftUtil.MixType.General, 999, EClass.pc).Thing;
358 break;
359 }
360 case MixType.RuneMold:
361 {
362 Thing eq = ai.ings[0];
363 Thing thing4 = eq.Duplicate(1);
364 thing4.SetEncLv(0);
365 List<Element> list = thing4.elements.ListRune();
366 if (list.Count == 0)
367 {
369 break;
370 }
371 foreach (Element item in list)
372 {
373 SocketData runeEnc = eq.GetRuneEnc(item.id);
374 item.vLink = 0;
375 if (runeEnc != null)
376 {
377 if (item.vBase + item.vSource != runeEnc.value)
378 {
379 item.vLink = item.vBase + item.vSource;
380 }
381 item.vBase = runeEnc.value;
382 item.vSource = 0;
383 }
384 }
385 if (eq.material.hardness > owner.material.hardness && !EClass.debug.enable)
386 {
387 Msg.Say("rune_tooHard", owner);
388 break;
389 }
390 EClass.ui.AddLayer<LayerList>().SetList2(list, (Element a) => GetName(a), delegate(Element a, ItemGeneral b)
391 {
392 owner.ModNum(-1);
393 eq.Destroy();
394 Thing thing8 = ThingGen.Create("rune");
396 thing8.refVal = a.id;
397 thing8.encLV = a.vBase + a.vSource;
398 EClass.pc.Pick(thing8);
399 EClass.pc.PlaySound("intonation");
400 EClass.pc.PlayEffect("intonation");
401 }, delegate(Element a, ItemGeneral b)
402 {
403 string lang = a.vBase + a.vSource + ((a.vLink != 0) ? (" (" + a.vLink + ")") : "");
404 b.SetSubText(lang, 200, FontColor.Default, TextAnchor.MiddleRight);
405 b.Build();
406 if (a.HasTag("noRune"))
407 {
408 b.button1.interactable = false;
409 b.button1.mainText.gameObject.AddComponent<CanvasGroup>().alpha = 0.5f;
410 }
411 }).SetSize(500f)
412 .SetOnKill(delegate
413 {
414 })
415 .SetTitles("wRuneMold");
416 break;
417 }
418 case MixType.SeedWork:
419 {
420 TraitSeed traitSeed = thing2.trait as TraitSeed;
421 string id = thing.id;
422 if (id == "mercury" || id == "blood_angel")
423 {
424 int num7 = thing2.encLV;
425 if (thing.id == "mercury")
426 {
427 num7 = num7 * 2 / 3;
428 }
429 t = TraitSeed.MakeSeed(traitSeed.row);
430 if (num7 > 0)
431 {
432 TraitSeed.LevelSeed(t, traitSeed.row, num7);
433 t.elements.SetBase(2, EClass.curve(t.encLV, 50, 10, 80));
434 }
435 }
436 else
437 {
438 t = TraitSeed.MakeSeed(traitSeed.row);
439 }
440 break;
441 }
442 case MixType.Talisman:
443 {
444 int num2 = EClass.pc.Evalue(1418);
445 Thing thing5 = ai.ings[1];
446 SourceElement.Row source2 = (thing5.trait as TraitSpellbook).source;
447 int num3 = thing5.c_charges * source2.charge * (100 + num2 * 50) / 500 + 1;
448 int num4 = 100;
449 Thing thing6 = ThingGen.Create("talisman").SetNum(num3);
450 thing6.refVal = source2.id;
451 thing6.encLV = num4 * (100 + num2 * 10) / 100;
452 thing.ammoData = thing6;
453 thing.c_ammo = num3;
454 EClass.pc.Say("talisman", thing, thing6);
455 thing5.Destroy();
456 break;
457 }
458 case MixType.Scratch:
459 claimed = false;
460 Prize(20, "medal", "save", cat: false);
461 Prize(10, "plat", "save", cat: false);
462 Prize(10, "furniture", "nice", cat: true);
463 Prize(4, "plamo_box", "nice", cat: false);
464 Prize(4, "food", "", cat: false);
465 Prize(1, "casino_coin", "", cat: false);
466 break;
467 case MixType.Fortune:
468 {
470 int num5 = 0;
471 FortuneRollData orCreateFortuneRollData = EClass._zone.GetOrCreateFortuneRollData(refresh: false);
472 int seed = orCreateFortuneRollData.seed + orCreateFortuneRollData.count + EClass.player.seedFortune;
474 for (int num6 = 3; num6 > 0; num6--)
475 {
476 if (EClass.rnd(FortuneRollData.chances[num6]) == 0)
477 {
478 num5 = num6;
479 break;
480 }
481 }
482 Rand.SetSeed();
483 if (num5 != 0)
484 {
485 owner.PlaySound((num5 == 3) ? "fortuneroll_winBig" : "fortuneroll_win");
486 }
487 Thing thing7 = ThingGen.Create("fortune_ball");
488 thing7.ChangeMaterial(FortuneRollData.mats[num5]);
489 EClass._zone.AddCard(thing7, owner.pos);
490 owner.PlaySound("fortuneroll_ball");
491 orCreateFortuneRollData.GetPrize(num5, seed);
492 if ((bool)LayerDragGrid.Instance)
493 {
495 }
496 break;
497 }
498 case MixType.Incubator:
500 break;
501 default:
502 t = ThingGen.Create(thing3);
503 if (thing3 == "gene")
504 {
505 if (ai.ings[0].c_DNA != null)
506 {
507 t.MakeRefFrom(ai.ings[0].c_idRefCard);
508 t.c_DNA = ai.ings[0].c_DNA;
509 t.c_DNA.GenerateWithGene(DNA.Type.Inferior, t);
510 }
511 }
512 else
513 {
514 t = CraftUtil.MixIngredients(t, ai.ings, CraftUtil.MixType.General, 999, EClass.pc).Thing;
515 }
516 break;
517 }
518 if (t != null)
519 {
520 if (t.HasElement(1229))
521 {
522 num = 1;
523 }
524 if (t.HasElement(704))
525 {
526 num = 1;
527 }
528 if (t.HasElement(703))
529 {
530 num = 1;
531 }
532 t.SetNum(num);
533 }
534 return t;
535 static string GetName(Element a)
536 {
537 string text = a.Name;
538 string encSlot = a.source.encSlot;
539 if ((encSlot == null || encSlot.Length != 0) && !(encSlot == "global") && !(encSlot == "all"))
540 {
541 text += " [";
542 string[] array2 = a.source.encSlot.Split(',');
543 foreach (string text2 in array2)
544 {
545 text += ((text2 == "weapon") ? "weapon_enc".lang() : EClass.sources.elements.alias[text2].GetName().ToTitleCase());
546 text += ", ";
547 }
548 text = text.TrimEnd(", ".ToCharArray()) + "]";
549 }
550 return text;
551 }
552 void Prize(int chance, string s, string col, bool cat)
553 {
554 if (!claimed && EClass.rnd(chance) == 0)
555 {
556 t = (cat ? ThingGen.CreateFromCategory(s, EClass.pc.LV) : ThingGen.Create(s, -1, EClass.pc.LV));
557 claimed = true;
558 if (col != "")
559 {
560 Msg.SetColor(col);
561 }
562 }
563 }
564 }
565
566 public override void TrySetAct(ActPlan p)
567 {
569 {
570 return;
571 }
572 if (IsFactory)
573 {
574 Thing _t = owner.Thing;
575 p.TrySetAct("craft", delegate
576 {
577 if (EClass.player.recipes.ListSources(_t).Count > 0)
578 {
579 EClass.ui.AddLayer<LayerCraft>().SetFactory(_t);
580 }
581 else
582 {
583 Msg.Say("noRecipes");
584 }
585 return false;
586 }, _t, CursorSystem.Craft);
587 }
588 else if (!(this is TraitIncubator) || EClass._zone.IsPCFactionOrTent)
589 {
590 p.TrySetAct(CrafterTitle, delegate
591 {
593 return false;
594 }, owner);
595 }
596 }
597
598 public override bool CanUse(Chara c)
599 {
601 {
602 return false;
603 }
604 return CanUseFromInventory;
605 }
606
607 public override bool OnUse(Chara c)
608 {
610 {
612 return false;
613 }
614 if (IsFactory)
615 {
616 Thing thing = owner.Thing;
617 if (EClass.player.recipes.ListSources(thing).Count > 0)
618 {
619 EClass.ui.AddLayer<LayerCraft>().SetFactory(thing);
620 }
621 else
622 {
623 Msg.Say("noRecipes");
624 }
625 return false;
626 }
628 return false;
629 }
630
631 public virtual void OnEndAI(AI_UseCrafter ai)
632 {
633 }
634}
AnimeID
Definition: AnimeID.cs:2
@ seed
Emo
Definition: Emo.cs:2
FontColor
Definition: FontColor.cs:2
List< Thing > ings
bool TrySetAct(string lang, Func< bool > onPerform, Card tc, CursorInfo cursor=null, int dist=1, bool isHostileAct=false, bool localAct=true, bool canRepeat=false)
Definition: ActPlan.cs:372
string id
Definition: CardRow.cs:7
Definition: Card.cs:11
Thing Split(int a)
Definition: Card.cs:3665
ElementContainerCard elements
Definition: Card.cs:42
string id
Definition: Card.cs:36
bool isNPCProperty
Definition: Card.cs:557
SourceMaterial.Row material
Definition: Card.cs:2103
SoundSource PlaySound(string id, float v=1f, bool spatial=true)
Definition: Card.cs:6645
Card ChangeMaterial(int idNew, bool ignoreFixedMaterial=false)
Definition: Card.cs:3217
Card MakeRefFrom(string id)
Definition: Card.cs:6027
Thing SetNum(int a)
Definition: Card.cs:3676
Point pos
Definition: Card.cs:60
Effect PlayEffect(string id, bool useRenderPos=true, float range=0f, Vector3 fix=default(Vector3))
Definition: Card.cs:6679
void Dye(string idMat)
Definition: Card.cs:6478
Trait trait
Definition: Card.cs:54
int encLV
Definition: Card.cs:329
void SetEncLv(int a)
Definition: Card.cs:4045
void Destroy()
Definition: Card.cs:5314
bool c_isImportant
Definition: Card.cs:1051
virtual Thing Thing
Definition: Card.cs:2110
int Evalue(int ele)
Definition: Card.cs:2704
Thing Duplicate(int num)
Definition: Card.cs:3625
DNA c_DNA
Definition: Card.cs:1933
void ModNum(int a, bool notify=true)
Definition: Card.cs:3696
List< int > sockets
Definition: Card.cs:48
bool HasElement(int ele, bool includeNagative=false)
Definition: Card.cs:6383
int LV
Definition: Card.cs:389
void Say(string lang, string ref1=null, string ref2=null)
Definition: Card.cs:7323
Definition: Chara.cs:10
Thing Pick(Thing t, bool msg=true, bool tryStack=true)
Definition: Chara.cs:4577
List< CardRow > ListKills()
Definition: CodexManager.cs:70
bool enable
Definition: CoreDebug.cs:302
static Thing MixIngredients(string idProduct, List< Thing > ings, MixType type, int idMat=0, Chara crafter=null)
Definition: CraftUtil.cs:364
static CursorInfo Craft
Definition: CursorSystem.cs:90
Definition: DNA.cs:9
void GenerateWithGene(Type _type, Card gene, Chara model=null)
Definition: DNA.cs:286
Type
Definition: DNA.cs:11
Definition: EClass.cs:6
static int curve(long _a, int start, int step, int rate=75)
Definition: EClass.cs:69
static Zone _zone
Definition: EClass.cs:21
static int rnd(long a)
Definition: EClass.cs:59
static SourceManager sources
Definition: EClass.cs:43
static Player player
Definition: EClass.cs:13
static Chara pc
Definition: EClass.cs:15
static CoreDebug debug
Definition: EClass.cs:49
static UI ui
Definition: EClass.cs:17
List< Element > ListRune()
Element SetBase(string alias, int v, int potential=0)
int id
Definition: ELEMENT.cs:259
SourceElement.Row source
Definition: ELEMENT.cs:282
bool HasTag(string tag)
Definition: ELEMENT.cs:482
virtual string Name
Definition: ELEMENT.cs:313
int vLink
Definition: ELEMENT.cs:269
int vSource
Definition: ELEMENT.cs:271
void GetPrize(int grade, int seed)
static string[] mats
static int[] chances
void Build()
Definition: ItemGeneral.cs:210
UIButton SetSubText(string lang, int x, FontColor c=FontColor.Default, TextAnchor align=TextAnchor.MiddleLeft)
Definition: ItemGeneral.cs:161
UIDragGridInfo info
List< ButtonGrid > buttons
static LayerDragGrid Instance
static LayerDragGrid CreateCraft(TraitCrafter crafter)
Layer SetOnKill(Action action)
Definition: Layer.cs:579
Definition: Msg.cs:5
static string SayCannotUseHere()
Definition: Msg.cs:101
static string SayNothingHappen()
Definition: Msg.cs:96
static string Say(string idLang, string ref1, string ref2=null, string ref3=null, string ref4=null)
Definition: Msg.cs:58
static void SetColor()
Definition: Msg.cs:22
CodexManager codex
Definition: Player.cs:1185
RecipeManager recipes
Definition: Player.cs:1167
HashSet< int > knownCraft
Definition: Player.cs:1146
int seedFortune
Definition: Player.cs:1017
Definition: Rand.cs:4
static void SetSeed(int a=-1)
Definition: Rand.cs:44
List< RecipeSource > ListSources(Thing factory, List< RecipeSource > newRecipes=null)
RecipeSource source
Definition: Recipe.cs:204
int LV
Definition: RenderRow.cs:22
Dictionary< string, CardRow > map
Definition: SourceCard.cs:9
SourceRace.Row race_row
Definition: SourceChara.cs:80
SourceMaterial materials
SourceCard cards
SourceRecipe recipes
SourceElement elements
virtual bool IsRegion
Definition: Spatial.cs:515
static SpawnList Get(string id, Func< SourceThing.Row, bool > func)
string id
Definition: SpawnList.cs:10
static Thing CreateFromCategory(string idCat, int lv=-1)
Definition: ThingGen.cs:75
static Thing Create(string id, int idMat=-1, int lv=-1)
Definition: ThingGen.cs:53
Definition: Thing.cs:8
virtual bool IsConsumeIng
Definition: TraitCrafter.cs:63
virtual string IDReqEle(RecipeSource r)
Definition: TraitCrafter.cs:74
virtual bool StopSoundProgress
Definition: TraitCrafter.cs:47
virtual Emo Icon
Definition: TraitCrafter.cs:33
virtual int WitchDoubleCraftChance(Thing t)
Definition: TraitCrafter.cs:69
virtual bool CloseOnComplete
Definition: TraitCrafter.cs:65
virtual string idSoundProgress
Definition: TraitCrafter.cs:43
virtual string IdSource
Definition: TraitCrafter.cs:37
virtual string idSoundBG
Definition: TraitCrafter.cs:55
virtual string CrafterTitle
Definition: TraitCrafter.cs:57
virtual bool IsIngredient(string cat, Card c)
virtual bool ShouldConsumeIng(SourceRecipe.Row item, int index)
SourceRecipe.Row GetSource(AI_UseCrafter ai)
virtual int CostSP
Definition: TraitCrafter.cs:67
virtual AnimeType animeType
Definition: TraitCrafter.cs:39
override bool OnUse(Chara c)
virtual bool AutoTurnOff
Definition: TraitCrafter.cs:61
override bool CanUse(Chara c)
override bool ShowFuelWindow
Definition: TraitCrafter.cs:31
virtual int numIng
Definition: TraitCrafter.cs:35
bool IsIngredient(int idx, SourceRecipe.Row r, Card c)
Definition: TraitCrafter.cs:99
virtual void OnEndAI(AI_UseCrafter ai)
int GetSortVal(SourceRecipe.Row r)
override void TrySetAct(ActPlan p)
virtual bool CanUseFromInventory
Definition: TraitCrafter.cs:51
virtual int GetCostSp(AI_UseCrafter ai)
virtual AnimeID IdAnimeProgress
Definition: TraitCrafter.cs:41
virtual bool IsCraftIngredient(Card c, int idx)
Definition: TraitCrafter.cs:79
virtual int GetDuration(AI_UseCrafter ai, int costSp)
virtual string idSoundComplete
Definition: TraitCrafter.cs:45
override bool IsNightOnlyLight
Definition: TraitCrafter.cs:49
virtual Thing Craft(AI_UseCrafter ai)
override bool HoldAsDefaultInteraction
Definition: TraitCrafter.cs:53
virtual bool CanTriggerFire
Definition: TraitCrafter.cs:59
static Chara Incubate(Thing egg, Point pos, Card incubator=null)
static Thing MakeSeed(string idSource)
Definition: TraitSeed.cs:105
static void LevelSeed(Thing t, SourceObj.Row obj, int num)
Definition: TraitSeed.cs:184
SourceObj.Row row
Definition: TraitSeed.cs:9
Definition: Trait.cs:7
virtual bool IsFactory
Definition: Trait.cs:143
virtual string GetName()
Definition: Trait.cs:730
virtual bool Contains(RecipeSource r)
Definition: Trait.cs:617
string GetParam(int i, string def=null)
Definition: Trait.cs:589
Card owner
Definition: Trait.cs:28
UIText mainText
Definition: UIButton.cs:102
UIButton button1
Definition: UIItem.cs:18
FortuneRollData GetOrCreateFortuneRollData(bool refresh=true)
Definition: Zone.cs:4141
bool IsPCFactionOrTent
Definition: Zone.cs:483
virtual bool IsUserZone
Definition: Zone.cs:278
Card AddCard(Card t, Point point)
Definition: Zone.cs:2148