Elin Decompiled Documentation EA 23.239 Nightly Patch 1
Loading...
Searching...
No Matches
Recipe.cs
Go to the documentation of this file.
1using System.Collections.Generic;
2using Newtonsoft.Json;
3using UnityEngine;
4using UnityEngine.UI;
5
6public class Recipe : EClass
7{
8 public enum State
9 {
10 Valid,
12 }
13
14 public enum IngType
15 {
16 Default,
18 }
19
20 public class Ingredient : EClass
21 {
22 [JsonProperty]
23 public int uid;
24
25 [JsonProperty]
26 public int req;
27
28 [JsonProperty]
29 public int mat = -1;
30
31 [JsonProperty]
32 public int refVal = -1;
33
34 [JsonProperty]
35 public string id;
36
37 [JsonProperty]
38 public string tag;
39
40 [JsonProperty]
41 public List<string> idOther = new List<string>();
42
43 [JsonProperty]
45
46 public Thing thing;
47
48 public bool optional;
49
50 public bool dye;
51
52 public bool useCat;
53
54 public bool IsThingSpecified => uid != 0;
55
56 public string IdThing
57 {
58 get
59 {
60 if (!useCat)
61 {
62 return id;
63 }
64 return EClass.sources.categories.map[id].GetIdThing();
65 }
66 }
67
69 {
70 if (thing == null)
71 {
73 if (thing == null)
74 {
76 if (thing == null)
77 {
79 if (thing == null)
80 {
82 }
83 }
84 }
85 }
86 return thing;
87 }
88
89 public bool CanSetThing(Thing t)
90 {
91 if (t.id != id || t.Num < req)
92 {
93 return false;
94 }
95 return true;
96 }
97
98 public void SetThing(Thing t = null)
99 {
100 uid = t?.uid ?? 0;
101 thing = t;
102 mat = t?.material.id ?? (-1);
103 }
104
105 public string GetName()
106 {
107 if (useCat)
108 {
109 string text = CatName(id);
110 if (idOther.Count > 0)
111 {
112 foreach (string item in idOther)
113 {
114 text = text + ", " + CatName(item);
115 }
116 }
117 return "ingCat".lang(text);
118 }
119 string text2 = EClass.sources.cards.map[id].GetName().IsEmpty(("card_" + id).lang());
120 string text3 = (tag.IsEmpty() ? "" : ("(" + ("tag_" + tag).lang() + ")"));
121 if (idOther.Count > 0)
122 {
123 foreach (string item2 in idOther)
124 {
125 text3 = text3 + ", " + EClass.sources.cards.map[item2].GetName();
126 }
127 }
128 return text2 + text3;
129 static string CatName(string id)
130 {
131 return EClass.sources.categories.map[id].GetName();
132 }
133 }
134
136 {
137 if (ingType == IngType.CreativeFood && t.HasElement(10) && !t.category.IsChildOf("seasoning") && !t.category.IsChildOf("meal") && !(t.trait is TraitFoodFishSlice))
138 {
139 return true;
140 }
141 if (!tag.IsEmpty() && !t.material.tag.Contains(tag))
142 {
143 return false;
144 }
145 if (useCat)
146 {
147 if (t.category.IsChildOf(id))
148 {
149 return true;
150 }
151 foreach (string item in idOther)
152 {
153 if (t.category.IsChildOf(item))
154 {
155 return true;
156 }
157 }
158 return false;
159 }
160 if (t.id == id || t.source._origin == id)
161 {
162 return true;
163 }
164 foreach (string item2 in idOther)
165 {
166 if (t.id == id || t.source._origin == item2)
167 {
168 return true;
169 }
170 }
171 return false;
172 }
173 }
174
175 public static Dictionary<string, Recipe> recipeCache = new Dictionary<string, Recipe>();
176
177 [JsonProperty]
178 public string id;
179
180 [JsonProperty]
181 public List<Ingredient> ingredients = new List<Ingredient>();
182
183 [JsonProperty]
184 public bool UseStock;
185
186 [JsonProperty]
187 public bool IngAsProduct;
188
189 [JsonProperty]
190 public bool VirtualBlock;
191
192 public int _dir;
193
194 public int sync;
195
196 public int idMat = -1;
197
198 public int idSkin;
199
200 public State state;
201
203
205
207
208 public virtual TileRow tileRow => source.row as TileRow;
209
210 public virtual RenderRow renderRow => source.row;
211
212 public string Name => GetName();
213
214 public virtual TileType tileType
215 {
216 get
217 {
218 if (!(source.type == "Bridge") || source.row.tileType is TileTypeBridge)
219 {
220 return renderRow.tileType;
221 }
222 return TileType.Bridge;
223 }
224 }
225
227
228 public int MaxAltitude
229 {
230 get
231 {
233 {
234 return tileType.MaxAltitude;
235 }
236 return 0;
237 }
238 }
239
240 public int RecipeLv => EClass.player.recipes.knownRecipes.TryGetValue(id, 0);
241
242 public bool IsFloor => tileType.IsFloor;
243
244 public bool IsObj => tileRow is SourceObj.Row;
245
246 public virtual bool IsBlock => !IsFloorOrBridge;
247
249
250 public bool IsBridge => source.type == "Bridge";
251
252 public virtual bool IsThing => false;
253
254 public virtual Card Mold => null;
255
256 public virtual int W
257 {
258 get
259 {
260 if (_dir % 2 != 0)
261 {
262 return renderRow.H;
263 }
264 return renderRow.W;
265 }
266 }
267
268 public virtual int H
269 {
270 get
271 {
272 if (_dir % 2 != 0)
273 {
274 return renderRow.W;
275 }
276 return renderRow.H;
277 }
278 }
279
280 public virtual bool RequireIngredients => true;
281
282 public bool MultiSize
283 {
284 get
285 {
286 if (W == 1)
287 {
288 return H != 1;
289 }
290 return true;
291 }
292 }
293
295
296 public virtual int CostMoney => 0;
297
298 public virtual bool CanRotate
299 {
300 get
301 {
302 if (tileType.CanRotate(buildMode: true))
303 {
304 return tileRow._tiles.Length > 1;
305 }
306 return false;
307 }
308 }
309
310 public static Recipe GetOrCreate(string id)
311 {
312 Recipe recipe = recipeCache.TryGetValue(id);
313 if (recipe == null)
314 {
315 RecipeSource recipeSource = RecipeManager.dict.TryGetValue(id);
316 if (recipeSource != null)
317 {
318 recipe = Create(recipeSource);
319 recipeCache.Add(id, recipe);
320 }
321 }
322 return recipe;
323 }
324
325 public static Recipe Create(RecipeSource _source, int idMat = -1, Thing ing = null)
326 {
327 string type = _source.type;
328 Recipe recipe = (_source.isBridgePillar ? new RecipeBridgePillar() : (type.IsEmpty() ? new RecipeCard() : ((type == "Custom") ? new RecipeCustom() : new Recipe())));
329 recipe.id = _source.id;
330 recipe._source = _source;
331 recipe.idMat = idMat;
332 if (ing != null)
333 {
334 recipe.BuildIngredientList(ing);
335 if (ing.trait is TraitTile)
336 {
337 recipe.VirtualBlock = true;
338 }
339 }
340 return recipe;
341 }
342
343 public static Recipe Create(Thing t)
344 {
345 RecipeSource recipeSource = RecipeManager.dict.TryGetValue(t.id);
346 if (recipeSource == null)
347 {
348 return null;
349 }
350 RecipeCard recipeCard = new RecipeCard
351 {
352 id = recipeSource.id,
353 _source = recipeSource,
354 IngAsProduct = true,
355 idSkin = t.idSkin
356 };
357 recipeCard.BuildIngredientList(t);
358 if (t.uid == 0 || recipeCard.ingredients[0].uid == 0 || recipeCard.ingredients[0].thing == null)
359 {
360 Debug.LogError("expection: invalid ingredient " + t);
361 }
362 return recipeCard;
363 }
364
365 public static void DropIngredients(string id, string idMatMain, int num = 1)
366 {
368 Recipe orCreate = GetOrCreate(EClass.sources.cards.map[id].RecipeID);
369 orCreate.BuildIngredientList();
370 Msg.Say("dropReward");
371 foreach (Ingredient ingredient in orCreate.ingredients)
372 {
373 Thing thing = ThingGen.Create(ingredient.id).SetNum(ingredient.req);
374 if (ingredient == orCreate.ingredients[0])
375 {
376 thing.ChangeMaterial(idMatMain);
377 thing.SetNum(num);
378 }
379 EClass.player.DropReward(thing, silent: true);
380 }
381 }
382
383 public bool IsStaticLV()
384 {
385 switch (source.idFactory)
386 {
387 case "factory_floor":
388 case "factory_block":
389 case "factory_wall":
390 case "factory_platform":
391 return true;
392 default:
393 return renderRow.Category.IsChildOf("block");
394 }
395 }
396
397 public int GetQualityBonus()
398 {
399 if (IsStaticLV())
400 {
401 return 0;
402 }
403 Element reqSkill = source.GetReqSkill();
404 int num = reqSkill.Value - EClass.pc.Evalue(reqSkill.id);
405 int num2 = 0;
406 if (num > 0)
407 {
408 if (num < 5)
409 {
410 return 0;
411 }
412 return -(num - 4) * 10;
413 }
414 num2 += EClass.curve(-num, 10, 20, 80) / 10 * 10 + 10;
415 if (RecipeLv > 0)
416 {
417 num2 += (int)Mathf.Sqrt(RecipeLv - 1) * 10;
418 }
419 return num2;
420 }
421
422 public virtual int GetRefVal()
423 {
424 if (source.row is SourceBlock.Row)
425 {
426 return (source.row as SourceBlock.Row).id;
427 }
428 if (source.row is SourceFloor.Row)
429 {
430 return (source.row as SourceFloor.Row).id;
431 }
432 if (source.row is SourceObj.Row)
433 {
434 return (source.row as SourceObj.Row).id;
435 }
436 return -1;
437 }
438
439 public virtual string GetIdThing()
440 {
441 if (source.row is SourceBlock.Row)
442 {
443 return (source.row as SourceBlock.Row).idThing;
444 }
445 if (source.row is SourceFloor.Row)
446 {
447 if (!IsBridge)
448 {
449 return "floor";
450 }
451 return "platform";
452 }
453 if (source.row is SourceObj.Row)
454 {
455 return "obj";
456 }
457 return null;
458 }
459
460 public virtual bool ShouldShowHighlight(HitResult r)
461 {
462 return r != HitResult.Valid;
463 }
464
466 {
468 {
469 return BaseTileSelector.BoxType.Box;
470 }
471 return BaseTileSelector.BoxType.Fence;
472 }
473
474 public int GetDefaultColor()
475 {
476 if (UseStock)
477 {
478 Thing thing = ingredients[0].thing;
479 return renderRow.GetColorInt(thing.isDyed ? thing.DyeMat : thing.material);
480 }
482 }
483
485 {
486 int num = -1;
487 if (ingredients.Count > 0)
488 {
489 num = ((ingredients[0].thing == null) ? ingredients[0].mat : ingredients[0].thing.material.id);
490 }
491 if (num == -1)
492 {
493 num = 3;
494 }
495 return EClass.sources.materials.rows[num];
496 }
497
499 {
500 if (idMat != -1)
501 {
502 return EClass.sources.materials.rows[idMat];
503 }
504 if (UseStock)
505 {
506 ingredients[0].RefreshThing();
507 Thing thing = ingredients[0].thing;
508 if (thing != null)
509 {
510 if (!thing.isDyed)
511 {
512 return thing.material;
513 }
514 return thing.DyeMat;
515 }
516 return EClass.sources.materials.rows[3];
517 }
518 int num = ((ingredients.Count > 0) ? ingredients[source.colorIng].mat : 3);
519 if (num == -1)
520 {
521 num = 3;
522 }
523 return EClass.sources.materials.rows[num];
524 }
525
526 public virtual void BuildIngredientList()
527 {
529 {
531 }
532 }
533
535 {
536 UseStock = true;
538 {
539 id = t.id,
540 tag = null,
541 req = 1,
542 uid = t.uid,
543 thing = t,
544 mat = t.material.id
545 };
546 ingredients.Add(item);
547 }
548
549 public virtual void OnChangeIngredient()
550 {
551 }
552
553 public virtual Thing Craft(BlessedState blessed, bool sound = false, List<Thing> ings = null, TraitCrafter crafter = null, bool model = false)
554 {
555 Thing thing = null;
556 string type = source.type;
557 thing = ((type == "Block") ? ThingGen.CreateBlock(tileRow.id, GetMainMaterial().id) : ((!(type == "Obj")) ? ThingGen.CreateFloor(tileRow.id, GetMainMaterial().id, source.isBridge) : ThingGen.CreateObj(tileRow.id, GetMainMaterial().id)));
558 if (thing == null)
559 {
560 return null;
561 }
562 thing.trait.OnCrafted(this, ings);
563 thing.SetBlessedState(blessed);
564 if (model)
565 {
566 return thing;
567 }
568 Msg.Say("crafted", thing);
569 thing = EClass.pc.AddCard(thing) as Thing;
570 if (thing.GetRootCard() == EClass.pc)
571 {
572 EClass.pc.HoldCard(thing);
573 }
574 return thing;
575 }
576
577 public bool HasSameTile(Point point, int dir, int altitude, int bridgeHeight)
578 {
579 if (IsObj)
580 {
581 if (point.growth != null && point.sourceObj == tileRow && point.cell.matObj == GetColorMaterial())
582 {
583 return true;
584 }
585 if (dir == point.cell.objDir && point.cell.matObj == GetColorMaterial() && point.sourceObj == tileRow)
586 {
587 return true;
588 }
589 }
590 else if (IsBridge)
591 {
592 if (dir == point.cell.floorDir && point.matBridge == GetColorMaterial() && point.sourceBridge == tileRow && Mathf.Clamp(bridgeHeight + altitude, 0, 255) == point.cell.bridgeHeight)
593 {
594 return true;
595 }
596 }
597 else if (IsFloorOrBridge)
598 {
599 if (dir == point.cell.floorDir && point.matFloor == GetColorMaterial() && point.sourceFloor == tileRow)
600 {
601 return true;
602 }
603 }
604 else if (IsWallOrFence)
605 {
606 if (point.matBlock == GetColorMaterial() && point.sourceBlock == tileRow && dir == point.cell.blockDir)
607 {
608 return true;
609 }
610 }
611 else if (IsBlock && point.matBlock == GetColorMaterial() && (point.sourceBlock == tileRow || (tileRow != null && tileRow.tileType == point.sourceBlock.tileType && tileRow.tileType == TileType.Slope)))
612 {
613 if (point.sourceBlock.tileType.AltitudeAsDir && dir != point.cell.objDir)
614 {
615 return false;
616 }
617 return true;
618 }
619 return false;
620 }
621
622 public virtual void Build(TaskBuild task)
623 {
624 Build(task.owner, null, task.pos, (ingredients.Count > 0) ? ingredients[0].mat : task.recipe.idMat, task.dir, task.altitude, task.bridgeHeight);
625 }
626
627 public virtual void Build(Chara chara, Card t, Point pos, int mat, int dir, int altitude, int bridgeHeight)
628 {
629 if (mat == -1)
630 {
631 mat = 2;
632 }
633 EClass.pc.PlaySound(EClass.sources.materials.rows[mat].GetSoundImpact());
634 pos.cell.isModified = true;
635 switch (source.type)
636 {
637 case "Block":
638 {
639 int ramp = tileRow.id;
640 if (ramp == 3)
641 {
642 ramp = EClass.sources.materials.rows[mat].ramp;
643 }
645 {
646 EClass._map.SetRoofBlock(pos.x, pos.z, mat, ramp, dir, altitude);
647 break;
648 }
649 if (pos.HasObj && !pos.sourceObj.tileType.CanBuiltOnBlock)
650 {
652 EClass._map.SetObj(pos.x, pos.z);
653 }
654 EClass._map.SetBlock(pos.x, pos.z, mat, ramp, dir);
655 if (tileType.IsBlockPass && pos.HasChara)
656 {
657 foreach (Chara item in pos.ListCharas())
658 {
659 chara.Kick(item, ignoreSelf: false, karmaLoss: false);
660 }
661 }
663 {
664 pos.cell.objDir = dir;
665 }
666 {
667 foreach (Card item2 in pos.ListCards())
668 {
669 if (item2.isThing && item2.placeState == PlaceState.roaming)
670 {
671 item2._Move(item2.pos.GetNearestPoint());
672 }
673 }
674 break;
675 }
676 }
677 case "Floor":
678 if (pos.HasObj && pos.sourceObj.tileType.RemoveOnFloorChange && (!BuildMenu.Instance || !EClass.debug.ignoreBuildRule))
679 {
680 EClass._map.SetObj(pos.x, pos.z);
681 }
682 EClass._map.SetFloor(pos.x, pos.z, mat, tileRow.id, dir);
683 break;
684 case "Bridge":
685 if (pos.sourceObj.tileType.RemoveOnFloorChange)
686 {
687 EClass._map.SetObj(pos.x, pos.z);
688 }
689 EClass._map.SetBridge(pos.x, pos.z, Mathf.Clamp(bridgeHeight + altitude, 0, 255), mat, tileRow.id, dir);
690 break;
691 case "Obj":
692 EClass._map.SetObj(pos.x, pos.z, mat, tileRow.id, 1, dir, ignoreRandomMat: true);
694 {
695 EClass._map.SetBlockDir(pos.x, pos.z, dir);
696 }
697 if (pos.growth != null)
698 {
700 }
701 break;
702 }
703 }
704
705 public virtual void OnRenderMarker(Point point, bool active, HitResult result, bool main, int dir, int bridgeHeight)
706 {
707 if (dir != -1)
708 {
709 _dir = dir;
710 }
711 RenderParam renderParam = tileRow.GetRenderParam(DefaultMaterial, _dir, point, bridgeHeight);
712 renderParam.matColor = (active ? EClass.Colors.blockColors.Active : EClass.Colors.blockColors.Inactive);
713 point.ApplyAnime(renderParam);
714 if (tileType.IsWater)
715 {
717 {
718 EClass.screen.guide.passGuideFloor.Add(point, (float)result, 0.3f);
719 }
720 return;
721 }
723 {
724 Vector3 v = point.Position();
726 {
728 }
729 }
731 {
732 if (bridgeHeight > 0 && !point.cell.skipRender && EClass.screen.guide.isActive)
733 {
734 EClass.screen.guide.passGuideFloor.Add(point, (float)result, 0.3f);
735 }
736 if (!tileType.IsWallOrFence && (point.HasChara || (point.HasObj && point.cell.blocked)))
737 {
738 Vector3 v2 = point.Position();
740 {
742 }
743 return;
744 }
746 {
747 EClass.screen.tileMap.SetRoofHeight(renderParam, point.cell, point.x, point.z, 0, bridgeHeight, tileType.IsWallOrFence ? _dir : (-1), ignoreAltitudeY: true);
748 }
749 renderParam.y = renderParam.y - EClass.screen.tileMap.rendererBlockMarker.offset.y + renderRow.renderData.offset.y;
750 renderParam.z += EClass.setting.render.tileMarkerZ;
751 int num = ((tileType.blockRenderMode != BlockRenderMode.Pillar) ? 1 : (_dir + 1 + ((_dir >= 7) ? _dir : 0)));
752 if (num == 1)
753 {
755 }
756 else
757 {
759 }
760 }
762 {
763 if (point.HasObj)
764 {
765 _ = ref point.Position();
766 }
767 renderParam.z += ((point.cell.liquidLv > 0) ? (-0.01f) : EClass.setting.render.tileMarkerZFloor);
769 }
770 else
771 {
772 renderParam.z += EClass.setting.render.tileMarkerZ;
773 renderRow.renderData.Draw(renderParam);
774 }
775 }
776
777 public string GetName()
778 {
779 if (UseStock && ingredients[0].thing == null)
780 {
781 return "";
782 }
783 string text = (UseStock ? ingredients[0].thing.Name : source.Name);
784 if (text == "")
785 {
786 text = ("card_" + source.id).lang();
787 }
788 if (text == "*r")
789 {
790 text = source.row.GetText("aka");
791 }
792 if (text == "*r")
793 {
794 text = "(" + source.row.GetField<string>("id") + ")";
795 }
796 return text.ToTitleCase();
797 }
798
799 public virtual string GetDetail()
800 {
801 return renderRow.GetText("detail").IsEmpty(source.GetDetail());
802 }
803
804 public virtual void WriteNote(UINote n)
805 {
806 n.Clear();
807 n.Build();
808 }
809
810 public void WriteReqFactory(UINote n, bool hasFactory = true)
811 {
813 {
814 n.AddHeaderTopic("reqFactory".lang(source.NameFactory.TagColor(hasFactory ? FontColor.Default : FontColor.Bad)));
815 n.Space(8);
816 }
817 }
818
819 public void WriteReqSkill(UINote n)
820 {
821 n.AddHeaderTopic("reqSkill");
822 Element reqSkill = source.GetReqSkill();
823 int value = EClass.pc.elements.GetOrCreateElement(reqSkill).Value;
824 Color textColor = EClass.Colors.Skin.GetTextColor((value >= reqSkill.Value) ? FontColor.Good : FontColor.Warning);
825 n.AddText(null, reqSkill.Name + " " + reqSkill.Value + " (" + value + ")", textColor).text1.SetSize(-1);
826 n.Space(8);
827 }
828
829 public virtual IRenderer GetRenderer()
830 {
831 return tileRow.renderData;
832 }
833
834 public virtual void OnSelected()
835 {
836 }
837
838 public virtual void OnChangeAltitude(int a)
839 {
840 }
841
842 public virtual void Rotate()
843 {
844 if (EInput.isShiftDown || Input.GetMouseButton(1))
845 {
846 _dir--;
847 }
848 else
849 {
850 _dir++;
851 }
853 {
855 {
856 _dir = 0;
857 }
858 if (_dir < 0)
859 {
860 _dir = tileType.MaxAltitude - 1;
861 }
862 }
863 else
864 {
865 int num = tileRow._tiles.Length;
867 {
868 num = 2;
869 }
870 if (_dir < 0)
871 {
872 _dir = num - 1;
873 }
874 if (_dir >= num)
875 {
876 _dir = 0;
877 }
878 }
879 if ((bool)BuildMenu.Instance)
880 {
882 }
883 }
884
885 public virtual void SetDir(int d)
886 {
887 _dir = d;
888 if ((bool)BuildMenu.Instance)
889 {
891 }
892 }
893
894 public virtual Recipe Duplicate()
895 {
896 return IO.DeepCopy(this);
897 }
898
899 public virtual void SetImage(Image icon)
900 {
901 renderRow.SetImage(icon, null, renderRow.GetColorInt((ingredients != null && ingredients.Count > 0 && ingredients[0].thing != null) ? ingredients[0].thing.material : DefaultMaterial), setNativeSize: true, 0, idSkin);
902 }
903
904 public bool IsCraftable()
905 {
906 foreach (Ingredient ingredient in ingredients)
907 {
908 if (ingredient.optional)
909 {
910 continue;
911 }
912 ThingStack thingStack = EClass._map.Stocked.ListThingStack(ingredient, StockSearchMode.AroundPC);
913 bool flag = false;
914 foreach (Thing item in thingStack.list)
915 {
916 if (item.Num >= ingredient.req)
917 {
918 flag = true;
919 break;
920 }
921 }
922 if (!flag)
923 {
924 return false;
925 }
926 }
927 return true;
928 }
929
930 public int GetMaxCount()
931 {
932 int num = 999;
933 for (int i = 0; i < ingredients.Count; i++)
934 {
935 Ingredient ingredient = ingredients[i];
936 Thing thing = ingredient.thing;
937 int num2 = 0;
938 if (!ingredient.optional || thing != null)
939 {
940 if (thing != null && !thing.isDestroyed)
941 {
942 num2 = thing.Num / ingredient.req;
943 }
944 if (num2 < num)
945 {
946 num = num2;
947 }
948 }
949 }
950 return num;
951 }
952
953 public void SetTextDifficulty(UIText text)
954 {
955 Element reqSkill = source.GetReqSkill();
957 string text2 = reqSkill.Name + " " + reqSkill.Value;
958 text.SetText(text2);
959 }
960
961 public int GetSortVal()
962 {
963 Element reqSkill = source.GetReqSkill();
964 return reqSkill.source.id * 10000 - reqSkill.Value;
965 }
966
967 public bool HasFirstTimeBonus()
968 {
969 if (IsStaticLV())
970 {
971 return false;
972 }
973 if (EClass.player.recipes.craftedRecipes.Contains(id))
974 {
975 return false;
976 }
977 return true;
978 }
979
981 {
982 if (HasFirstTimeBonus())
983 {
985 Element reqSkill = source.GetReqSkill();
986 int num = 1 + ((!IsStaticLV()) ? (reqSkill.Value / 20) : 0);
987 Msg.Say("firstTimeCraft", Name);
988 EClass.pc.Pick(ThingGen.Create("ticket_fortune").SetNum(num));
989 }
990 }
991
993 {
994 List<int> list = new List<int>();
995 foreach (Ingredient ingredient in ingredients)
996 {
997 int item = ((ingredient.thing != null) ? ingredient.thing.uid : 0);
998 list.Add(item);
999 }
1001 }
1002
1004 {
1005 QuestTrackCraft result = null;
1006 foreach (Quest item in EClass.game.quests.list)
1007 {
1008 if (item is QuestTrackCraft)
1009 {
1010 result = item as QuestTrackCraft;
1011 break;
1012 }
1013 }
1014 return result;
1015 }
1016
1017 public void ToggleTrack(QuestTrackCraft quest)
1018 {
1019 if (quest != null && quest.idRecipe == id)
1020 {
1021 EClass.game.quests.Remove(quest);
1022 }
1023 else
1024 {
1025 if (quest != null)
1026 {
1027 EClass.game.quests.Remove(quest);
1028 }
1029 QuestTrackCraft questTrackCraft = Quest.Create("track_craft") as QuestTrackCraft;
1030 questTrackCraft.SetRecipe(this);
1031 EClass.game.quests.Start(questTrackCraft);
1032 }
1034 {
1035 EClass.player.questTracker = true;
1036 EClass.ui.widgets.ActivateWidget("QuestTracker");
1038 }
1040 }
1041}
BlessedState
Definition: BlessedState.cs:2
BlockRenderMode
FontColor
Definition: FontColor.cs:2
HitResult
Definition: HitResult.cs:2
PlaceState
Definition: PlaceState.cs:2
StockSearchMode
new Chara owner
Definition: AIAct.cs:14
virtual bool IsRoofEditMode(Card c=null)
Definition: ActionMode.cs:311
ScreenGuide guide
BaseTileSelector tileSelector
BaseTileMap tileMap
MeshPass passFloor
Definition: BaseTileMap.cs:145
MeshPass passFloorEx
Definition: BaseTileMap.cs:163
MeshPass passFloorWater
Definition: BaseTileMap.cs:165
RenderData rendererFloorMarker
Definition: BaseTileMap.cs:201
RenderData rendererBlockMarker
Definition: BaseTileMap.cs:199
MeshPass passLiquid
Definition: BaseTileMap.cs:135
void SetRoofHeight(MeshPassParam _param, Cell _cell, int _cx, int _cz, int h=0, int altitude=0, int dirWall=-1, bool ignoreAltitudeY=false)
MeshPass passBlockEx
Definition: BaseTileMap.cs:161
MeshPass passBlock
Definition: BaseTileMap.cs:147
static BuildMenu Instance
Definition: BuildMenu.cs:77
UIRecipeInfo info1
Definition: BuildMenu.cs:27
Definition: Card.cs:11
bool isDestroyed
Definition: Card.cs:75
virtual MoveResult _Move(Point p, MoveType type=MoveType.Walk)
Definition: Card.cs:5800
virtual bool isThing
Definition: Card.cs:2081
ElementContainerCard elements
Definition: Card.cs:41
string id
Definition: Card.cs:35
bool HasElement(int ele, int req=1)
Definition: Card.cs:5897
SourceMaterial.Row DyeMat
Definition: Card.cs:1940
SourceMaterial.Row material
Definition: Card.cs:2051
SoundSource PlaySound(string id, float v=1f, bool spatial=true)
Definition: Card.cs:6129
Card ChangeMaterial(int idNew, bool ignoreFixedMaterial=false)
Definition: Card.cs:3038
Card AddCard(Card c)
Definition: Card.cs:3087
Thing SetNum(int a)
Definition: Card.cs:3492
PlaceState placeState
Definition: Card.cs:83
virtual void SetBlessedState(BlessedState s)
Definition: Card.cs:3892
Point pos
Definition: Card.cs:59
int uid
Definition: Card.cs:122
Trait trait
Definition: Card.cs:53
bool isDyed
Definition: Card.cs:458
ThingContainer things
Definition: Card.cs:38
Card GetRootCard()
Definition: Card.cs:3423
int Evalue(int ele)
Definition: Card.cs:2571
int Num
Definition: Card.cs:158
SourceCategory.Row category
Definition: Card.cs:2049
SourceMaterial.Row matObj
Definition: Cell.cs:1036
bool skipRender
Definition: Cell.cs:270
int floorDir
Definition: Cell.cs:922
int objDir
Definition: Cell.cs:910
byte bridgeHeight
Definition: Cell.cs:74
int blockDir
Definition: Cell.cs:898
Definition: Chara.cs:10
void HoldCard(Card t, int num=-1)
Definition: Chara.cs:4427
void Kick(Point p, bool ignoreSelf=false, bool checkWall=true)
Definition: Chara.cs:5712
Thing Pick(Thing t, bool msg=true, bool tryStack=true)
Definition: Chara.cs:4263
BlockColors blockColors
SkinColorProfile Skin
bool ignoreBuildRule
Definition: CoreDebug.cs:185
Definition: EClass.cs:5
static Game game
Definition: EClass.cs:8
static Scene scene
Definition: EClass.cs:30
static ColorProfile Colors
Definition: EClass.cs:38
static int curve(int a, int start, int step, int rate=75)
Definition: EClass.cs:68
static Map _map
Definition: EClass.cs:18
static SourceManager sources
Definition: EClass.cs:42
static BaseGameScreen screen
Definition: EClass.cs:32
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
static GameSetting setting
Definition: EClass.cs:34
Definition: EInput.cs:8
static bool isShiftDown
Definition: EInput.cs:261
Element GetOrCreateElement(Element ele)
int id
Definition: ELEMENT.cs:250
int Value
Definition: ELEMENT.cs:292
virtual string Name
Definition: ELEMENT.cs:304
RenderSetting render
Definition: GameSetting.cs:301
QuestManager quests
Definition: Game.cs:182
void SetDefaultStage()
Definition: GrowSystem.cs:259
void SetBridge(int x, int z, int height=0, int idMat=0, int idBridge=0, int dir=0)
Definition: Map.cs:972
void SetBlockDir(int x, int z, int dir)
Definition: Map.cs:1165
void MineObjSound(Point point)
Definition: Map.cs:1937
void SetFloor(int x, int z, int idMat=0, int idFloor=0)
Definition: Map.cs:957
void SetBlock(int x, int z, int idMat=0, int idBlock=0)
Definition: Map.cs:996
void SetRoofBlock(int x, int z, int idMat, int idBlock, int dir, int height)
Definition: Map.cs:987
PropsStocked Stocked
Definition: Map.cs:121
void SetObj(int x, int z, int id=0, int value=1, int dir=0)
Definition: Map.cs:1535
void Add(Point point, float tile=0f, float color=0f)
Definition: MeshPass.cs:122
Definition: Msg.cs:5
static string Say(string idLang, string ref1, string ref2=null, string ref3=null, string ref4=null)
Definition: Msg.cs:58
RecipeManager recipes
Definition: Player.cs:1097
Thing DropReward(Thing t, bool silent=false)
Definition: Player.cs:2542
Definition: Point.cs:9
SourceMaterial.Row matBlock
Definition: Point.cs:55
SourceMaterial.Row matFloor
Definition: Point.cs:57
SourceBlock.Row sourceBlock
Definition: Point.cs:63
ref Vector3 Position(int height)
Definition: Point.cs:548
List< Card > ListCards(bool includeMasked=false)
Definition: Point.cs:1051
RenderParam ApplyAnime(RenderParam p)
Definition: Point.cs:1325
int x
Definition: Point.cs:36
Point GetNearestPoint(bool allowBlock=false, bool allowChara=true, bool allowInstalled=true, bool ignoreCenter=false, int minRadius=0)
Definition: Point.cs:619
int z
Definition: Point.cs:39
SourceMaterial.Row matBridge
Definition: Point.cs:59
SourceObj.Row sourceObj
Definition: Point.cs:69
List< Chara > ListCharas()
Definition: Point.cs:1171
SourceFloor.Row sourceFloor
Definition: Point.cs:65
bool HasObj
Definition: Point.cs:137
Cell cell
Definition: Point.cs:51
SourceFloor.Row sourceBridge
Definition: Point.cs:67
GrowSystem growth
Definition: Point.cs:77
bool HasChara
Definition: Point.cs:238
bool HasNonWallBlock
Definition: Point.cs:194
Thing Find(int uid)
Definition: Props.cs:389
ThingStack ListThingStack(Recipe.Ingredient ing, StockSearchMode searchMode)
Definition: Props.cs:204
List< Quest > list
Definition: QuestManager.cs:11
void Remove(Quest q)
Definition: QuestManager.cs:67
Quest Start(string id, string idGlobalChara)
Definition: QuestManager.cs:41
void SetRecipe(Recipe r)
Definition: Quest.cs:7
static Quest Create(string _id, string _idPerson=null, Chara c=null)
Definition: Quest.cs:241
override void BuildIngredientList()
Definition: RecipeCard.cs:65
Dictionary< string, List< int > > lastIngredients
static void BuildList()
HashSet< string > craftedRecipes
static RecipeSource Get(string id)
static Dictionary< string, RecipeSource > dict
Dictionary< string, int > knownRecipes
Element GetReqSkill()
RenderRow row
Definition: RecipeSource.cs:5
List< Recipe.Ingredient > GetIngredients()
string idFactory
Definition: RecipeSource.cs:85
string NameFactory
Definition: RecipeSource.cs:73
string GetDetail()
string type
Definition: RecipeSource.cs:7
bool NeedFactory
Definition: RecipeSource.cs:61
Thing RefreshThing()
Definition: Recipe.cs:68
bool IsThingSpecified
Definition: Recipe.cs:54
string GetName()
Definition: Recipe.cs:105
List< string > idOther
Definition: Recipe.cs:41
bool CanSetThing(Thing t)
Definition: Recipe.cs:89
string tag
Definition: Recipe.cs:38
void SetThing(Thing t=null)
Definition: Recipe.cs:98
IngType ingType
Definition: Recipe.cs:44
string IdThing
Definition: Recipe.cs:57
bool IsValidIngredient(Thing t)
Definition: Recipe.cs:135
Definition: Recipe.cs:7
string id
Definition: Recipe.cs:178
virtual int GetRefVal()
Definition: Recipe.cs:422
SourceMaterial.Row DefaultMaterial
Definition: Recipe.cs:206
int RecipeLv
Definition: Recipe.cs:240
State
Definition: Recipe.cs:9
void SetTextDifficulty(UIText text)
Definition: Recipe.cs:953
virtual void WriteNote(UINote n)
Definition: Recipe.cs:804
void WriteReqSkill(UINote n)
Definition: Recipe.cs:819
void WriteReqFactory(UINote n, bool hasFactory=true)
Definition: Recipe.cs:810
static Recipe Create(Thing t)
Definition: Recipe.cs:343
State state
Definition: Recipe.cs:200
virtual void OnRenderMarker(Point point, bool active, HitResult result, bool main, int dir, int bridgeHeight)
Definition: Recipe.cs:705
virtual bool RequireIngredients
Definition: Recipe.cs:280
int GetMaxCount()
Definition: Recipe.cs:930
virtual string GetIdThing()
Definition: Recipe.cs:439
bool HasSameTile(Point point, int dir, int altitude, int bridgeHeight)
Definition: Recipe.cs:577
virtual IRenderer GetRenderer()
Definition: Recipe.cs:829
virtual Card Mold
Definition: Recipe.cs:254
virtual bool CanRotate
Definition: Recipe.cs:299
virtual TileRow tileRow
Definition: Recipe.cs:208
virtual void Rotate()
Definition: Recipe.cs:842
virtual void SetDir(int d)
Definition: Recipe.cs:885
virtual TileType tileType
Definition: Recipe.cs:215
RecipeSource _source
Definition: Recipe.cs:202
static void DropIngredients(string id, string idMatMain, int num=1)
Definition: Recipe.cs:365
int sync
Definition: Recipe.cs:194
virtual void OnSelected()
Definition: Recipe.cs:834
bool IsObj
Definition: Recipe.cs:244
virtual RenderRow renderRow
Definition: Recipe.cs:210
int idMat
Definition: Recipe.cs:196
RecipeSource source
Definition: Recipe.cs:204
void SaveLastIngredients()
Definition: Recipe.cs:992
int GetSortVal()
Definition: Recipe.cs:961
List< Ingredient > ingredients
Definition: Recipe.cs:181
virtual void Build(TaskBuild task)
Definition: Recipe.cs:622
virtual bool IsFloorOrBridge
Definition: Recipe.cs:226
virtual bool IsBlock
Definition: Recipe.cs:246
bool VirtualBlock
Definition: Recipe.cs:190
bool IsCraftable()
Definition: Recipe.cs:904
void BuildIngredientList(Thing t)
Definition: Recipe.cs:534
IngType
Definition: Recipe.cs:15
QuestTrackCraft GetQuestTrack()
Definition: Recipe.cs:1003
virtual SourceMaterial.Row GetMainMaterial()
Definition: Recipe.cs:484
virtual int H
Definition: Recipe.cs:269
virtual int CostMoney
Definition: Recipe.cs:296
static Dictionary< string, Recipe > recipeCache
Definition: Recipe.cs:175
static Recipe Create(RecipeSource _source, int idMat=-1, Thing ing=null)
Definition: Recipe.cs:325
int MaxAltitude
Definition: Recipe.cs:229
virtual bool IsThing
Definition: Recipe.cs:252
bool IsFloor
Definition: Recipe.cs:242
void ToggleTrack(QuestTrackCraft quest)
Definition: Recipe.cs:1017
void TryGetFirstTimeBonus()
Definition: Recipe.cs:980
string Name
Definition: Recipe.cs:212
virtual void Build(Chara chara, Card t, Point pos, int mat, int dir, int altitude, int bridgeHeight)
Definition: Recipe.cs:627
bool IsWallOrFence
Definition: Recipe.cs:248
int GetQualityBonus()
Definition: Recipe.cs:397
bool MultiSize
Definition: Recipe.cs:283
virtual void OnChangeIngredient()
Definition: Recipe.cs:549
virtual string GetDetail()
Definition: Recipe.cs:799
virtual Thing Craft(BlessedState blessed, bool sound=false, List< Thing > ings=null, TraitCrafter crafter=null, bool model=false)
Definition: Recipe.cs:553
bool UseStock
Definition: Recipe.cs:184
bool HasFirstTimeBonus()
Definition: Recipe.cs:967
int _dir
Definition: Recipe.cs:192
int GetDefaultColor()
Definition: Recipe.cs:474
bool IsStaticLV()
Definition: Recipe.cs:383
bool IsBridge
Definition: Recipe.cs:250
static Recipe GetOrCreate(string id)
Definition: Recipe.cs:310
int idSkin
Definition: Recipe.cs:198
string GetName()
Definition: Recipe.cs:777
virtual void SetImage(Image icon)
Definition: Recipe.cs:899
virtual SourceMaterial.Row GetColorMaterial()
Definition: Recipe.cs:498
virtual void BuildIngredientList()
Definition: Recipe.cs:526
BaseTileSelector tileSelector
Definition: Recipe.cs:294
BaseTileSelector.BoxType GetBoxType()
Definition: Recipe.cs:465
virtual void OnChangeAltitude(int a)
Definition: Recipe.cs:838
virtual bool ShouldShowHighlight(HitResult r)
Definition: Recipe.cs:460
virtual int W
Definition: Recipe.cs:257
bool IngAsProduct
Definition: Recipe.cs:187
virtual Recipe Duplicate()
Definition: Recipe.cs:894
void Draw(RenderParam p, int tile)
Definition: RenderData.cs:128
void DrawRepeat(RenderParam p, int count, float size, bool skipFirst=false)
Definition: RenderData.cs:214
Vector3 offset
Definition: RenderData.cs:18
MeshPass pass
Definition: RenderData.cs:16
int GetColorInt(SourceMaterial.Row mat)
Definition: RenderRow.cs:429
RenderData renderData
Definition: RenderRow.cs:71
SourceCategory.Row Category
Definition: RenderRow.cs:119
TileType tileType
Definition: RenderRow.cs:77
int[] _tiles
Definition: RenderRow.cs:12
void SetImage(Image image, Sprite sprite=null, int matCol=0, bool setNativeSize=true, int dir=0, int idSkin=0, Card card=null)
Definition: RenderRow.cs:351
virtual RenderParam GetRenderParam(SourceMaterial.Row mat, int dir, Point point=null, int bridgeHeight=-1)
Definition: RenderRow.cs:393
SourceMaterial.Row DefaultMaterial
Definition: RenderRow.cs:86
ActionMode actionMode
Definition: Scene.cs:79
bool isActive
Definition: ScreenGuide.cs:15
MeshPass passGuideBlock
Definition: ScreenGuide.cs:5
MeshPass passGuideFloor
Definition: ScreenGuide.cs:7
Color GetTextColor(FontColor fontColor)
Dictionary< string, CardRow > map
Definition: SourceCard.cs:8
string GetText(string id="name", bool returnNull=false)
Definition: SourceData.cs:553
SourceMaterial materials
SourceCard cards
SourceCategory categories
int altitude
Definition: TaskBuild.cs:17
Recipe recipe
Definition: TaskBuild.cs:8
int bridgeHeight
Definition: TaskBuild.cs:14
int dir
Definition: TaskBuild.cs:11
Point pos
Definition: TaskPoint.cs:11
Thing Find(int uid)
static Thing CreateBlock(int id, int idMat)
Definition: ThingGen.cs:101
static Thing CreateObj(int id, int idMat)
Definition: ThingGen.cs:116
static Thing CreateFloor(int id, int idMat, bool platform=false)
Definition: ThingGen.cs:108
static Thing Create(string id, int idMat=-1, int lv=-1)
Definition: ThingGen.cs:53
Definition: Thing.cs:8
SourceThing.Row source
Definition: Thing.cs:11
int id
Definition: TileRow.cs:8
virtual BaseTileSelector.BoxType BoxType
Definition: TileType.cs:273
static TileTypeBridge Bridge
Definition: TileType.cs:65
virtual bool IsFloor
Definition: TileType.cs:139
virtual int MaxAltitude
Definition: TileType.cs:208
virtual float RepeatSize
Definition: TileType.cs:241
static TileTypeSlope Slope
Definition: TileType.cs:25
virtual bool IsWallOrFence
Definition: TileType.cs:143
virtual bool AltitudeAsDir
Definition: TileType.cs:219
virtual bool IsFloorOrBridge
Definition: TileType.cs:135
virtual bool CanRotate(bool buildMode)
Definition: TileType.cs:294
virtual BlockRenderMode blockRenderMode
Definition: TileType.cs:277
virtual bool ChangeBlockDir
Definition: TileType.cs:127
static TileTypeDoor Door
Definition: TileType.cs:95
virtual bool IsBlockPass
Definition: TileType.cs:153
virtual bool IsWater
Definition: TileType.cs:163
virtual void OnCrafted(Recipe recipe, List< Thing > ings)
Definition: Trait.cs:663
UIText text1
Definition: UIItem.cs:6
Definition: UINote.cs:6
UIItem AddHeaderTopic(string text, Sprite sprite=null)
Definition: UINote.cs:89
void Clear()
Definition: UINote.cs:35
UIItem AddText(string text, FontColor color=FontColor.DontChange)
Definition: UINote.cs:113
void Space(int sizeY=0, int sizeX=1)
Definition: UINote.cs:62
void Build()
Definition: UINote.cs:49
void OnRotate()
Definition: UIText.cs:6
void SetText(string s)
Definition: UIText.cs:159
UIText SetSize(int a)
Definition: UIText.cs:227
static void RefreshButtons()
static WidgetQuestTracker Instance