Elin Decompiled Documentation EA 23.331 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 && !c.category.GetRoot().tag.Contains("dye") && !c.category.tag.Contains("dye"))
195 {
196 return false;
197 }
198 if (!c.IsUnique && !c.IsImportant && !c.trait.CanOnlyCarry)
199 {
200 return true;
201 }
202 }
203 if (c.id == text || c.sourceCard._origin == text)
204 {
205 return true;
206 }
207 }
208 return false;
209 }
210
211 public virtual bool IsIngredient(string cat, Card c)
212 {
213 return true;
214 }
215
217 {
218 int num = r.id;
219 string[] ing = r.ing1;
220 for (int i = 0; i < ing.Length; i++)
221 {
222 if (ing[i].Contains('@'))
223 {
224 num -= 10000;
225 }
226 }
227 return num;
228 }
229
230 public virtual int GetDuration(AI_UseCrafter ai, int costSp)
231 {
232 return Mathf.Max(1, GetSource(ai).time * 100 / (80 + EClass.pc.Evalue(IDReqEle(ai.recipe?.source)) * 5));
233 }
234
235 public virtual int GetCostSp(AI_UseCrafter ai)
236 {
237 return GetSource(ai).sp;
238 }
239
241 {
242 List<SourceRecipe.Row> list = new List<SourceRecipe.Row>();
243 foreach (SourceRecipe.Row row in EClass.sources.recipes.rows)
244 {
245 if (row.factory == IdSource)
246 {
247 list.Add(row);
248 }
249 }
250 for (int i = 0; i < numIng; i++)
251 {
252 foreach (SourceRecipe.Row row2 in EClass.sources.recipes.rows)
253 {
254 if (i >= ai.ings.Count || !IsIngredient(i, row2, ai.ings[i]))
255 {
256 list.Remove(row2);
257 }
258 }
259 }
260 if (list.Count == 0)
261 {
262 return null;
263 }
264 list.Sort((SourceRecipe.Row a, SourceRecipe.Row b) => GetSortVal(a) - GetSortVal(b));
265 return list[0];
266 }
267
268 public virtual bool ShouldConsumeIng(SourceRecipe.Row item, int index)
269 {
270 if (IsFactory)
271 {
272 return true;
273 }
274 if (item == null)
275 {
276 return false;
277 }
278 int id = item.id;
279 if ((uint)(id - 47) <= 1u)
280 {
281 return index == 0;
282 }
283 return true;
284 }
285
286 public virtual Thing Craft(AI_UseCrafter ai)
287 {
288 Thing thing = ai.ings[0];
289 Thing thing2 = ((numIng > 1) ? ai.ings[1] : null);
290 SourceRecipe.Row source = GetSource(ai);
291 if (source == null)
292 {
293 return null;
294 }
295 if (!EClass.player.knownCraft.Contains(source.id))
296 {
297 SE.Play("idea");
298 Msg.Say("newKnownCraft");
299 EClass.player.knownCraft.Add(source.id);
300 if ((bool)LayerDragGrid.Instance)
301 {
303 }
304 }
305 string thing3 = source.thing;
306 MixType mixType = source.type.ToEnum<MixType>();
307 int num = source.num.Calc();
308 Thing t = null;
309 string[] array = thing3.Split('%');
310 bool claimed;
311 switch (mixType)
312 {
313 case MixType.Food:
314 t = CraftUtil.MixIngredients(thing3, ai.ings, CraftUtil.MixType.General, 0, EClass.pc);
315 break;
316 case MixType.Resource:
317 case MixType.FixedResource:
318 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;
319 break;
320 case MixType.Dye:
321 t = ThingGen.Create(thing3, thing2.material.id);
322 break;
323 case MixType.Butcher:
324 thing3 = SpawnListThing.Get("butcher", (SourceThing.Row a) => a.Category.id == "bodyparts").Select().id;
325 t = ThingGen.Create(thing3);
326 break;
327 case MixType.Grind:
328 if (source.tag.Contains("rust"))
329 {
330 EClass.pc.Say("polish", EClass.pc, ai.ings[1]);
331 ai.ings[1].ModEncLv(1);
332 ai.ings[0].ModNum(-1);
333 }
334 if (source.tag.Contains("mod_eject"))
335 {
336 ai.ings[1].EjectSockets();
337 ai.ings[0].ModNum(-1);
338 }
339 break;
340 case MixType.Sculpture:
341 {
342 t = ThingGen.Create(thing3);
343 List<CardRow> list2 = EClass.player.codex.ListKills();
344 list2.Add(EClass.sources.cards.map["putty"]);
345 list2.Add(EClass.sources.cards.map["snail"]);
346 CardRow cardRow = list2.RandomItemWeighted((CardRow a) => Mathf.Max(50 - a.LV, Mathf.Clamp(EClass.pc.Evalue(258) / 2, 1, a.LV * 2)));
347 t.c_idRefCard = cardRow.id;
348 t.ChangeMaterial(thing.material);
349 t.SetEncLv(Mathf.Min(EClass.rnd(EClass.rnd(Mathf.Max(5 + EClass.pc.Evalue(258) - cardRow.LV, 1))), 12));
350 t = CraftUtil.MixIngredients(t, ai.ings, CraftUtil.MixType.General, 999, EClass.pc).Thing;
351 break;
352 }
353 case MixType.RuneMold:
354 {
355 Thing eq = ai.ings[0];
356 Thing thing4 = eq.Duplicate(1);
357 thing4.SetEncLv(0);
358 List<Element> list = thing4.elements.ListRune();
359 if (list.Count == 0)
360 {
362 break;
363 }
364 foreach (Element item in list)
365 {
366 SocketData runeEnc = eq.GetRuneEnc(item.id);
367 item.vLink = 0;
368 if (runeEnc != null)
369 {
370 if (item.vBase + item.vSource != runeEnc.value)
371 {
372 item.vLink = item.vBase + item.vSource;
373 }
374 item.vBase = runeEnc.value;
375 item.vSource = 0;
376 }
377 }
378 if (eq.material.hardness > owner.material.hardness && !EClass.debug.enable)
379 {
380 Msg.Say("rune_tooHard", owner);
381 break;
382 }
383 EClass.ui.AddLayer<LayerList>().SetList2(list, (Element a) => GetName(a), delegate(Element a, ItemGeneral b)
384 {
385 owner.ModNum(-1);
386 eq.Destroy();
387 Thing thing8 = ThingGen.Create("rune");
389 thing8.refVal = a.id;
390 thing8.encLV = a.vBase + a.vSource;
391 EClass.pc.Pick(thing8);
392 EClass.pc.PlaySound("intonation");
393 EClass.pc.PlayEffect("intonation");
394 }, delegate(Element a, ItemGeneral b)
395 {
396 string lang = a.vBase + a.vSource + ((a.vLink != 0) ? (" (" + a.vLink + ")") : "");
397 b.SetSubText(lang, 200, FontColor.Default, TextAnchor.MiddleRight);
398 b.Build();
399 if (a.HasTag("noRune"))
400 {
401 b.button1.interactable = false;
402 b.button1.mainText.gameObject.AddComponent<CanvasGroup>().alpha = 0.5f;
403 }
404 }).SetSize(500f)
405 .SetOnKill(delegate
406 {
407 })
408 .SetTitles("wRuneMold");
409 break;
410 }
411 case MixType.SeedWork:
412 {
413 TraitSeed traitSeed = thing2.trait as TraitSeed;
414 string id = thing.id;
415 if (id == "mercury" || id == "blood_angel")
416 {
417 int num7 = thing2.encLV;
418 if (thing.id == "mercury")
419 {
420 num7 = num7 * 2 / 3;
421 }
422 t = TraitSeed.MakeSeed(traitSeed.row);
423 if (num7 > 0)
424 {
425 TraitSeed.LevelSeed(t, traitSeed.row, num7);
426 t.elements.SetBase(2, EClass.curve(t.encLV, 50, 10, 80));
427 }
428 }
429 else
430 {
431 t = TraitSeed.MakeSeed(traitSeed.row);
432 }
433 break;
434 }
435 case MixType.Talisman:
436 {
437 int num2 = EClass.pc.Evalue(1418);
438 Thing thing5 = ai.ings[1];
439 SourceElement.Row source2 = (thing5.trait as TraitSpellbook).source;
440 int num3 = thing5.c_charges * source2.charge * (100 + num2 * 50) / 500 + 1;
441 int num4 = 100;
442 Thing thing6 = ThingGen.Create("talisman").SetNum(num3);
443 thing6.refVal = source2.id;
444 thing6.encLV = num4 * (100 + num2 * 10) / 100;
445 thing.ammoData = thing6;
446 thing.c_ammo = num3;
447 EClass.pc.Say("talisman", thing, thing6);
448 thing5.Destroy();
449 break;
450 }
451 case MixType.Scratch:
452 claimed = false;
453 Prize(20, "medal", "save", cat: false);
454 Prize(10, "plat", "save", cat: false);
455 Prize(10, "furniture", "nice", cat: true);
456 Prize(4, "plamo_box", "nice", cat: false);
457 Prize(4, "food", "", cat: false);
458 Prize(1, "casino_coin", "", cat: false);
459 break;
460 case MixType.Fortune:
461 {
463 int num5 = 0;
464 FortuneRollData orCreateFortuneRollData = EClass._zone.GetOrCreateFortuneRollData(refresh: false);
465 int seed = orCreateFortuneRollData.seed + orCreateFortuneRollData.count + EClass.player.seedFortune;
467 for (int num6 = 3; num6 > 0; num6--)
468 {
469 if (EClass.rnd(FortuneRollData.chances[num6]) == 0)
470 {
471 num5 = num6;
472 break;
473 }
474 }
475 Rand.SetSeed();
476 if (num5 != 0)
477 {
478 owner.PlaySound((num5 == 3) ? "fortuneroll_winBig" : "fortuneroll_win");
479 }
480 Thing thing7 = ThingGen.Create("fortune_ball");
481 thing7.ChangeMaterial(FortuneRollData.mats[num5]);
482 EClass._zone.AddCard(thing7, owner.pos);
483 owner.PlaySound("fortuneroll_ball");
484 orCreateFortuneRollData.GetPrize(num5, seed);
485 if ((bool)LayerDragGrid.Instance)
486 {
488 }
489 break;
490 }
491 case MixType.Incubator:
493 break;
494 default:
495 t = ThingGen.Create(thing3);
496 if (thing3 == "gene")
497 {
498 if (ai.ings[0].c_DNA != null)
499 {
500 t.MakeRefFrom(ai.ings[0].c_idRefCard);
501 t.c_DNA = ai.ings[0].c_DNA;
502 t.c_DNA.GenerateWithGene(DNA.Type.Inferior, t);
503 }
504 }
505 else
506 {
507 t = CraftUtil.MixIngredients(t, ai.ings, CraftUtil.MixType.General, 999, EClass.pc).Thing;
508 }
509 break;
510 }
511 if (t != null)
512 {
513 if (t.HasElement(1229))
514 {
515 num = 1;
516 }
517 if (t.HasElement(704))
518 {
519 num = 1;
520 }
521 if (t.HasElement(703))
522 {
523 num = 1;
524 }
525 t.SetNum(num);
526 }
527 return t;
528 static string GetName(Element a)
529 {
530 string text = a.Name;
531 string encSlot = a.source.encSlot;
532 if ((encSlot == null || encSlot.Length != 0) && !(encSlot == "global") && !(encSlot == "all"))
533 {
534 text += " [";
535 string[] array2 = a.source.encSlot.Split(',');
536 foreach (string text2 in array2)
537 {
538 text += ((text2 == "weapon") ? "weapon_enc".lang() : EClass.sources.elements.alias[text2].GetName().ToTitleCase());
539 text += ", ";
540 }
541 text = text.TrimEnd(", ".ToCharArray()) + "]";
542 }
543 return text;
544 }
545 void Prize(int chance, string s, string col, bool cat)
546 {
547 if (!claimed && EClass.rnd(chance) == 0)
548 {
549 t = (cat ? ThingGen.CreateFromCategory(s, EClass.pc.LV) : ThingGen.Create(s, -1, EClass.pc.LV));
550 claimed = true;
551 if (col != "")
552 {
553 Msg.SetColor(col);
554 }
555 }
556 }
557 }
558
559 public override void TrySetAct(ActPlan p)
560 {
562 {
563 return;
564 }
565 if (IsFactory)
566 {
567 Thing _t = owner.Thing;
568 p.TrySetAct("craft", delegate
569 {
570 if (EClass.player.recipes.ListSources(_t).Count > 0)
571 {
572 EClass.ui.AddLayer<LayerCraft>().SetFactory(_t);
573 }
574 else
575 {
576 Msg.Say("noRecipes");
577 }
578 return false;
579 }, _t, CursorSystem.Craft);
580 }
581 else if (!(this is TraitIncubator) || EClass._zone.IsPCFactionOrTent)
582 {
583 p.TrySetAct(CrafterTitle, delegate
584 {
586 return false;
587 }, owner);
588 }
589 }
590
591 public override bool CanUse(Chara c)
592 {
594 {
595 return false;
596 }
597 return CanUseFromInventory;
598 }
599
600 public override bool OnUse(Chara c)
601 {
603 {
605 return false;
606 }
607 if (IsFactory)
608 {
609 Thing thing = owner.Thing;
610 if (EClass.player.recipes.ListSources(thing).Count > 0)
611 {
612 EClass.ui.AddLayer<LayerCraft>().SetFactory(thing);
613 }
614 else
615 {
616 Msg.Say("noRecipes");
617 }
618 return false;
619 }
621 return false;
622 }
623
624 public virtual void OnEndAI(AI_UseCrafter ai)
625 {
626 }
627}
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:3658
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:6613
Card ChangeMaterial(int idNew, bool ignoreFixedMaterial=false)
Definition: Card.cs:3210
Card MakeRefFrom(string id)
Definition: Card.cs:6000
Thing SetNum(int a)
Definition: Card.cs:3669
Point pos
Definition: Card.cs:60
Effect PlayEffect(string id, bool useRenderPos=true, float range=0f, Vector3 fix=default(Vector3))
Definition: Card.cs:6647
void Dye(string idMat)
Definition: Card.cs:6446
Trait trait
Definition: Card.cs:54
int encLV
Definition: Card.cs:329
void SetEncLv(int a)
Definition: Card.cs:4038
void Destroy()
Definition: Card.cs:5301
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:3618
DNA c_DNA
Definition: Card.cs:1933
void ModNum(int a, bool notify=true)
Definition: Card.cs:3689
List< int > sockets
Definition: Card.cs:48
bool HasElement(int ele, bool includeNagative=false)
Definition: Card.cs:6351
int LV
Definition: Card.cs:389
void Say(string lang, string ref1=null, string ref2=null)
Definition: Card.cs:7291
Definition: Chara.cs:10
Thing Pick(Thing t, bool msg=true, bool tryStack=true)
Definition: Chara.cs:4542
List< CardRow > ListKills()
Definition: CodexManager.cs:70
bool enable
Definition: CoreDebug.cs:301
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:8
void GenerateWithGene(Type _type, Card gene, Chara model=null)
Definition: DNA.cs:294
Type
Definition: DNA.cs:10
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:1182
RecipeManager recipes
Definition: Player.cs:1164
HashSet< int > knownCraft
Definition: Player.cs:1143
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:728
virtual bool Contains(RecipeSource r)
Definition: Trait.cs:615
string GetParam(int i, string def=null)
Definition: Trait.cs:587
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:4031
bool IsPCFactionOrTent
Definition: Zone.cs:480
virtual bool IsUserZone
Definition: Zone.cs:275
Card AddCard(Card t, Point point)
Definition: Zone.cs:2090