Elin Decompiled Documentation EA 23.153 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 if (r.type.ToEnum<MixType>() == MixType.Grind && idx == 1)
119 {
120 if (r.tag.Contains("rust") && c.encLV >= 0)
121 {
122 return false;
123 }
124 if (r.tag.Contains("mod_eject"))
125 {
126 if (c.sockets == null)
127 {
128 return false;
129 }
130 bool flag = false;
131 foreach (int socket in c.sockets)
132 {
133 if (socket != 0)
134 {
135 flag = true;
136 }
137 }
138 if (!flag)
139 {
140 return false;
141 }
142 }
143 }
144 string[] array2 = array;
145 foreach (string text in array2)
146 {
147 if (r.tag.Contains("noCarbone") && c.material.alias == "carbone")
148 {
149 return false;
150 }
151 if (text.StartsWith('#'))
152 {
153 string text2 = text.Replace("#", "");
154 if (c.category.IsChildOf(text2) && IsIngredient(text2, c))
155 {
156 return true;
157 }
158 continue;
159 }
160 string[] array3 = text.Split('@');
161 if (array3.Length > 1)
162 {
163 if (c.id != array3[0] && c.sourceCard._origin != array3[0])
164 {
165 return false;
166 }
167 if (c.refCard is SourceChara.Row row && row.race_row.tag.Contains(array3[1]))
168 {
169 return true;
170 }
171 if (c.material.tag.Contains(array3[1]))
172 {
173 return true;
174 }
175 continue;
176 }
177 if (text == "any")
178 {
179 if (this is TraitDyeMaker && !c.category.GetRoot().tag.Contains("dye") && !c.category.tag.Contains("dye"))
180 {
181 return false;
182 }
183 if (!c.IsUnique && !c.IsImportant && !c.trait.CanOnlyCarry)
184 {
185 return true;
186 }
187 }
188 if (c.id == text || c.sourceCard._origin == text)
189 {
190 return true;
191 }
192 }
193 return false;
194 }
195
196 public virtual bool IsIngredient(string cat, Card c)
197 {
198 return true;
199 }
200
202 {
203 int num = r.id;
204 string[] ing = r.ing1;
205 for (int i = 0; i < ing.Length; i++)
206 {
207 if (ing[i].Contains('@'))
208 {
209 num -= 10000;
210 }
211 }
212 return num;
213 }
214
215 public virtual int GetDuration(AI_UseCrafter ai, int costSp)
216 {
217 return Mathf.Max(1, GetSource(ai).time * 100 / (80 + EClass.pc.Evalue(IDReqEle(ai.recipe?.source)) * 5));
218 }
219
220 public virtual int GetCostSp(AI_UseCrafter ai)
221 {
222 return GetSource(ai).sp;
223 }
224
226 {
227 List<SourceRecipe.Row> list = new List<SourceRecipe.Row>();
228 foreach (SourceRecipe.Row row in EClass.sources.recipes.rows)
229 {
230 if (row.factory == IdSource)
231 {
232 list.Add(row);
233 }
234 }
235 for (int i = 0; i < numIng; i++)
236 {
237 foreach (SourceRecipe.Row row2 in EClass.sources.recipes.rows)
238 {
239 if (i >= ai.ings.Count || !IsIngredient(i, row2, ai.ings[i]))
240 {
241 list.Remove(row2);
242 }
243 }
244 }
245 if (list.Count == 0)
246 {
247 return null;
248 }
249 list.Sort((SourceRecipe.Row a, SourceRecipe.Row b) => GetSortVal(a) - GetSortVal(b));
250 return list[0];
251 }
252
253 public virtual bool ShouldConsumeIng(SourceRecipe.Row item, int index)
254 {
255 if (IsFactory)
256 {
257 return true;
258 }
259 if (item == null)
260 {
261 return false;
262 }
263 int id = item.id;
264 if ((uint)(id - 47) <= 1u)
265 {
266 return index == 0;
267 }
268 return true;
269 }
270
271 public virtual Thing Craft(AI_UseCrafter ai)
272 {
273 Thing thing = ai.ings[0];
274 Thing thing2 = ((numIng > 1) ? ai.ings[1] : null);
275 SourceRecipe.Row source = GetSource(ai);
276 if (source == null)
277 {
278 return null;
279 }
280 if (!EClass.player.knownCraft.Contains(source.id))
281 {
282 SE.Play("idea");
283 Msg.Say("newKnownCraft");
284 EClass.player.knownCraft.Add(source.id);
285 if ((bool)LayerDragGrid.Instance)
286 {
288 }
289 }
290 string thing3 = source.thing;
291 MixType mixType = source.type.ToEnum<MixType>();
292 int num = source.num.Calc();
293 Thing t = null;
294 string[] array = thing3.Split('%');
295 bool claimed;
296 switch (mixType)
297 {
298 case MixType.Food:
299 t = CraftUtil.MixIngredients(thing3, ai.ings, CraftUtil.MixType.General, 0, EClass.pc);
300 break;
301 case MixType.Resource:
302 case MixType.FixedResource:
303 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;
304 break;
305 case MixType.Dye:
306 t = ThingGen.Create(thing3, thing2.material.id);
307 break;
308 case MixType.Butcher:
309 thing3 = SpawnListThing.Get("butcher", (SourceThing.Row a) => a.Category.id == "bodyparts").Select().id;
310 t = ThingGen.Create(thing3);
311 break;
312 case MixType.Grind:
313 if (source.tag.Contains("rust"))
314 {
315 EClass.pc.Say("polish", EClass.pc, ai.ings[1]);
316 ai.ings[1].ModEncLv(1);
317 ai.ings[0].ModNum(-1);
318 }
319 if (source.tag.Contains("mod_eject"))
320 {
321 ai.ings[1].EjectSockets();
322 ai.ings[0].ModNum(-1);
323 }
324 break;
325 case MixType.Sculpture:
326 {
327 t = ThingGen.Create(thing3);
328 List<CardRow> list2 = EClass.player.codex.ListKills();
329 list2.Add(EClass.sources.cards.map["putty"]);
330 list2.Add(EClass.sources.cards.map["snail"]);
331 CardRow cardRow = list2.RandomItemWeighted((CardRow a) => Mathf.Max(50 - a.LV, Mathf.Clamp(EClass.pc.Evalue(258) / 2, 1, a.LV * 2)));
332 t.c_idRefCard = cardRow.id;
333 t.ChangeMaterial(thing.material);
334 t.SetEncLv(Mathf.Min(EClass.rnd(EClass.rnd(Mathf.Max(5 + EClass.pc.Evalue(258) - cardRow.LV, 1))), 12));
335 t = CraftUtil.MixIngredients(t, ai.ings, CraftUtil.MixType.General, 999, EClass.pc).Thing;
336 break;
337 }
338 case MixType.RuneMold:
339 {
340 Thing eq = ai.ings[0];
341 Thing thing4 = eq.Duplicate(1);
342 thing4.SetEncLv(0);
343 List<Element> list = thing4.elements.ListRune();
344 if (list.Count == 0)
345 {
347 break;
348 }
349 foreach (Element item in list)
350 {
351 SocketData runeEnc = eq.GetRuneEnc(item.id);
352 item.vLink = 0;
353 if (runeEnc != null)
354 {
355 if (item.vBase + item.vSource != runeEnc.value)
356 {
357 item.vLink = item.vBase + item.vSource;
358 }
359 item.vBase = runeEnc.value;
360 item.vSource = 0;
361 }
362 }
363 if (eq.material.hardness > owner.material.hardness && !EClass.debug.enable)
364 {
365 Msg.Say("rune_tooHard", owner);
366 break;
367 }
368 EClass.ui.AddLayer<LayerList>().SetList2(list, (Element a) => GetName(a), delegate(Element a, ItemGeneral b)
369 {
370 owner.ModNum(-1);
371 eq.Destroy();
372 Thing thing8 = ThingGen.Create("rune");
374 thing8.refVal = a.id;
375 thing8.encLV = a.vBase + a.vSource;
376 EClass.pc.Pick(thing8);
377 EClass.pc.PlaySound("intonation");
378 EClass.pc.PlayEffect("intonation");
379 }, delegate(Element a, ItemGeneral b)
380 {
381 string lang = a.vBase + a.vSource + ((a.vLink != 0) ? (" (" + a.vLink + ")") : "");
382 b.SetSubText(lang, 200, FontColor.Default, TextAnchor.MiddleRight);
383 b.Build();
384 if (a.HasTag("noRune"))
385 {
386 b.button1.interactable = false;
387 b.button1.mainText.gameObject.AddComponent<CanvasGroup>().alpha = 0.5f;
388 }
389 }).SetSize(500f)
390 .SetOnKill(delegate
391 {
392 })
393 .SetTitles("wRuneMold");
394 break;
395 }
396 case MixType.SeedWork:
397 {
398 TraitSeed traitSeed = thing.trait as TraitSeed;
399 string id = thing2.id;
400 if (id == "mercury" || id == "blood_angel")
401 {
402 int num7 = thing.encLV;
403 if (thing2.id == "mercury")
404 {
405 num7 = num7 * 2 / 3;
406 }
407 t = TraitSeed.MakeSeed(traitSeed.row);
408 if (num7 > 0)
409 {
410 TraitSeed.LevelSeed(t, traitSeed.row, num7);
411 t.elements.SetBase(2, EClass.curve(t.encLV, 50, 10, 80));
412 }
413 }
414 else
415 {
416 t = TraitSeed.MakeSeed(traitSeed.row);
417 }
418 break;
419 }
420 case MixType.Talisman:
421 {
422 int num2 = EClass.pc.Evalue(1418);
423 Thing thing5 = ai.ings[1];
424 SourceElement.Row source2 = (thing5.trait as TraitSpellbook).source;
425 int num3 = thing5.c_charges * source2.charge * (100 + num2 * 50) / 500 + 1;
426 int num4 = 100;
427 Thing thing6 = ThingGen.Create("talisman").SetNum(num3);
428 thing6.refVal = source2.id;
429 thing6.encLV = num4 * (100 + num2 * 10) / 100;
430 thing.ammoData = thing6;
431 thing.c_ammo = num3;
432 EClass.pc.Say("talisman", thing, thing6);
433 thing5.Destroy();
434 break;
435 }
436 case MixType.Scratch:
437 claimed = false;
438 Prize(20, "medal", "save", cat: false);
439 Prize(10, "plat", "save", cat: false);
440 Prize(10, "furniture", "nice", cat: true);
441 Prize(4, "plamo_box", "nice", cat: false);
442 Prize(4, "food", "", cat: false);
443 Prize(1, "casino_coin", "", cat: false);
444 break;
445 case MixType.Fortune:
446 {
448 int num5 = 0;
449 FortuneRollData orCreateFortuneRollData = EClass._zone.GetOrCreateFortuneRollData(refresh: false);
450 int seed = orCreateFortuneRollData.seed + orCreateFortuneRollData.count + EClass.player.seedFortune;
452 for (int num6 = 3; num6 > 0; num6--)
453 {
454 if (EClass.rnd(FortuneRollData.chances[num6]) == 0)
455 {
456 num5 = num6;
457 break;
458 }
459 }
460 Rand.SetSeed();
461 if (num5 != 0)
462 {
463 owner.PlaySound((num5 == 3) ? "fortuneroll_winBig" : "fortuneroll_win");
464 }
465 Thing thing7 = ThingGen.Create("fortune_ball");
466 thing7.ChangeMaterial(FortuneRollData.mats[num5]);
467 EClass._zone.AddCard(thing7, owner.pos);
468 owner.PlaySound("fortuneroll_ball");
469 orCreateFortuneRollData.GetPrize(num5, seed);
470 if ((bool)LayerDragGrid.Instance)
471 {
473 }
474 break;
475 }
476 case MixType.Incubator:
478 break;
479 default:
480 t = ThingGen.Create(thing3);
481 if (thing3 == "gene")
482 {
483 if (ai.ings[0].c_DNA != null)
484 {
485 t.MakeRefFrom(ai.ings[0].c_idRefCard);
486 t.c_DNA = ai.ings[0].c_DNA;
487 t.c_DNA.GenerateWithGene(DNA.Type.Inferior, t);
488 }
489 }
490 else
491 {
492 t = CraftUtil.MixIngredients(t, ai.ings, CraftUtil.MixType.General, 999, EClass.pc).Thing;
493 }
494 break;
495 }
496 if (t != null)
497 {
498 if (t.HasElement(1229))
499 {
500 num = 1;
501 }
502 if (t.HasElement(704))
503 {
504 num = 1;
505 }
506 if (t.HasElement(703))
507 {
508 num = 1;
509 }
510 t.SetNum(num);
511 }
512 return t;
513 static string GetName(Element a)
514 {
515 string text = a.Name;
516 string encSlot = a.source.encSlot;
517 if ((encSlot == null || encSlot.Length != 0) && !(encSlot == "global") && !(encSlot == "all"))
518 {
519 text += " [";
520 string[] array2 = a.source.encSlot.Split(',');
521 foreach (string text2 in array2)
522 {
523 text += ((text2 == "weapon") ? "weapon_enc".lang() : EClass.sources.elements.alias[text2].GetName().ToTitleCase());
524 text += ", ";
525 }
526 text = text.TrimEnd(", ".ToCharArray()) + "]";
527 }
528 return text;
529 }
530 void Prize(int chance, string s, string col, bool cat)
531 {
532 if (!claimed && EClass.rnd(chance) == 0)
533 {
534 t = (cat ? ThingGen.CreateFromCategory(s, EClass.pc.LV) : ThingGen.Create(s, -1, EClass.pc.LV));
535 claimed = true;
536 if (col != "")
537 {
538 Msg.SetColor(col);
539 }
540 }
541 }
542 }
543
544 public override void TrySetAct(ActPlan p)
545 {
546 if (IsFactory)
547 {
548 Thing _t = owner.Thing;
549 p.TrySetAct("craft", delegate
550 {
551 if (EClass.player.recipes.ListSources(_t).Count > 0)
552 {
553 EClass.ui.AddLayer<LayerCraft>().SetFactory(_t);
554 }
555 else
556 {
557 Msg.Say("noRecipes");
558 }
559 return false;
560 }, _t, CursorSystem.Craft);
561 }
562 else if (!(this is TraitIncubator) || EClass._zone.IsPCFaction)
563 {
564 p.TrySetAct(CrafterTitle, delegate
565 {
567 return false;
568 }, owner);
569 }
570 }
571
572 public override bool CanUse(Chara c)
573 {
574 return CanUseFromInventory;
575 }
576
577 public override bool OnUse(Chara c)
578 {
580 {
582 return false;
583 }
584 if (IsFactory)
585 {
586 Thing thing = owner.Thing;
587 if (EClass.player.recipes.ListSources(thing).Count > 0)
588 {
589 EClass.ui.AddLayer<LayerCraft>().SetFactory(thing);
590 }
591 else
592 {
593 Msg.Say("noRecipes");
594 }
595 return false;
596 }
598 return false;
599 }
600
601 public virtual void OnEndAI(AI_UseCrafter ai)
602 {
603 }
604}
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:345
string id
Definition: CardRow.cs:7
Definition: Card.cs:11
void MakeRefFrom(string id)
Definition: Card.cs:5386
Thing Split(int a)
Definition: Card.cs:3345
ElementContainerCard elements
Definition: Card.cs:37
string id
Definition: Card.cs:31
bool HasElement(int ele, int req=1)
Definition: Card.cs:5566
SourceMaterial.Row material
Definition: Card.cs:1987
SoundSource PlaySound(string id, float v=1f, bool spatial=true)
Definition: Card.cs:5776
Card ChangeMaterial(int idNew, bool ignoreFixedMaterial=false)
Definition: Card.cs:2957
Thing SetNum(int a)
Definition: Card.cs:3356
Point pos
Definition: Card.cs:55
Effect PlayEffect(string id, bool useRenderPos=true, float range=0f, Vector3 fix=default(Vector3))
Definition: Card.cs:5810
void Dye(string idMat)
Definition: Card.cs:5632
Trait trait
Definition: Card.cs:49
int encLV
Definition: Card.cs:310
void SetEncLv(int a)
Definition: Card.cs:3709
void Destroy()
Definition: Card.cs:4783
bool c_isImportant
Definition: Card.cs:996
virtual Thing Thing
Definition: Card.cs:1994
int Evalue(int ele)
Definition: Card.cs:2507
Thing Duplicate(int num)
Definition: Card.cs:3305
DNA c_DNA
Definition: Card.cs:1841
void ModNum(int a, bool notify=true)
Definition: Card.cs:3376
List< int > sockets
Definition: Card.cs:43
int LV
Definition: Card.cs:370
void Say(string lang, string ref1=null, string ref2=null)
Definition: Card.cs:6423
Definition: Chara.cs:10
Thing Pick(Thing t, bool msg=true, bool tryStack=true)
Definition: Chara.cs:4017
List< CardRow > ListKills()
Definition: CodexManager.cs:70
bool enable
Definition: CoreDebug.cs:285
static Thing MixIngredients(string idProduct, List< Thing > ings, MixType type, int idMat=0, Chara crafter=null)
Definition: CraftUtil.cs:144
static CursorInfo Craft
Definition: CursorSystem.cs:90
Definition: DNA.cs:8
void GenerateWithGene(Type _type, Card gene, Chara model=null)
Definition: DNA.cs:247
Type
Definition: DNA.cs:10
Definition: EClass.cs:5
static int curve(int a, int start, int step, int rate=75)
Definition: EClass.cs:63
static int rnd(int a)
Definition: EClass.cs:58
static Zone _zone
Definition: EClass.cs:20
static SourceManager sources
Definition: EClass.cs:42
static Player player
Definition: EClass.cs:12
static Chara pc
Definition: EClass.cs:14
static CoreDebug debug
Definition: EClass.cs:48
static UI ui
Definition: EClass.cs:16
List< Element > ListRune()
Element SetBase(string alias, int v, int potential=0)
int id
Definition: ELEMENT.cs:248
SourceElement.Row source
Definition: ELEMENT.cs:271
bool HasTag(string tag)
Definition: ELEMENT.cs:471
virtual string Name
Definition: ELEMENT.cs:302
int vLink
Definition: ELEMENT.cs:258
int vSource
Definition: ELEMENT.cs:260
void GetPrize(int grade, int seed)
static string[] mats
static int[] chances
void Build()
Definition: ItemGeneral.cs:171
UIButton SetSubText(string lang, int x, FontColor c=FontColor.Default, TextAnchor align=TextAnchor.MiddleLeft)
Definition: ItemGeneral.cs:129
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:931
RecipeManager recipes
Definition: Player.cs:913
HashSet< int > knownCraft
Definition: Player.cs:892
int seedFortune
Definition: Player.cs:769
Definition: Rand.cs:4
static void SetSeed(int a=-1)
Definition: Rand.cs:37
List< RecipeSource > ListSources(Thing factory, List< RecipeSource > newRecipes=null)
RecipeSource source
Definition: Recipe.cs:187
int LV
Definition: RenderRow.cs:22
Dictionary< string, CardRow > map
Definition: SourceCard.cs:8
SourceRace.Row race_row
Definition: SourceChara.cs:75
SourceMaterial materials
SourceCard cards
SourceRecipe recipes
SourceElement elements
virtual bool IsRegion
Definition: Spatial.cs:501
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(SourceObj.Row obj, PlantData plant=null)
Definition: TraitSeed.cs:88
static void LevelSeed(Thing t, SourceObj.Row obj, int num)
Definition: TraitSeed.cs:140
SourceObj.Row row
Definition: TraitSeed.cs:9
Definition: Trait.cs:7
virtual bool IsFactory
Definition: Trait.cs:139
virtual string GetName()
Definition: Trait.cs:684
virtual bool Contains(RecipeSource r)
Definition: Trait.cs:571
string GetParam(int i, string def=null)
Definition: Trait.cs:553
Card owner
Definition: Trait.cs:26
UIText mainText
Definition: UIButton.cs:102
UIButton button1
Definition: UIItem.cs:18
FortuneRollData GetOrCreateFortuneRollData(bool refresh=true)
Definition: Zone.cs:3640
bool IsPCFaction
Definition: Zone.cs:466
Card AddCard(Card t, Point point)
Definition: Zone.cs:1910