Elin Decompiled Documentation EA 23.287 Stable Patch 3
Loading...
Searching...
No Matches
AI_Eat.cs
Go to the documentation of this file.
1using System.Collections.Generic;
2using UnityEngine;
3
4public class AI_Eat : AIAct
5{
6 public Card target;
7
8 public bool cook = true;
9
10 public override bool LocalAct => false;
11
12 public override bool IsHostileAct
13 {
14 get
15 {
16 if (target != null && target.isNPCProperty)
17 {
18 return !EClass._zone.HasField(10001);
19 }
20 return false;
21 }
22 }
23
24 public bool IsValidTarget(Card c)
25 {
26 if (c != null)
27 {
28 if (!c.trait.CanEat(owner))
29 {
30 if (c.trait is TraitGene && owner.IsPC)
31 {
32 return owner.HasElement(1274);
33 }
34 return false;
35 }
36 return true;
37 }
38 return false;
39 }
40
41 public override bool CanManualCancel()
42 {
43 return true;
44 }
45
46 public override void OnStart()
47 {
48 }
49
50 public override IEnumerable<Status> Run()
51 {
52 if (target != null && (target.GetRootCard() == owner || target.parent == null))
53 {
55 }
56 else if (target != null)
57 {
58 yield return DoGrab(target, 1);
59 }
60 else
61 {
63 {
64 yield return DoGrab<TraitFood>();
66 {
67 yield return Cancel();
68 }
69 }
70 if (cook)
71 {
72 yield return Do(new AI_Cook(), base.KeepRunning);
74 {
75 yield return Cancel();
76 }
77 yield return DoGotoSpot<TraitHearth>(base.KeepRunning);
78 }
79 }
81 if (target == null)
82 {
83 yield return Cancel();
84 }
86 {
87 yield return DoGotoSpot<TraitSpotDining>(base.KeepRunning);
88 }
89 int num = ((target.SelfWeight < 100) ? 1 : (2 + (int)Mathf.Sqrt(target.SelfWeight * 2 / 3)));
90 int turn = 0;
91 bool isFeastFood = EClass._zone.HasField(10001) && target.GetBool(128);
92 num = num * 100 / (100 + owner.Evalue(1663) * 100);
93 if (num < 1)
94 {
95 num = 1;
96 }
98 {
99 cancelWhenMoved = false,
100 canProgress = () => IsValidTarget(target) && owner.held == target,
101 onProgressBegin = delegate
102 {
103 owner.Say("eat_start", owner, target.GetName(NameStyle.Full, 1));
104 owner.PlaySound("eat");
105 },
106 onProgress = delegate(Progress_Custom p)
107 {
109 if (turn == 1 && owner.IsPC && owner.hunger.GetPhase() == 0 && !EClass.debug.godFood && !isFeastFood)
110 {
111 owner.Say("eat_full");
112 p.Cancel();
113 }
114 if (turn == 1)
115 {
116 foreach (Element value in target.elements.dict.Values)
117 {
118 if (!value.source.foodEffect.IsEmpty())
119 {
120 string[] foodEffect = value.source.foodEffect;
121 if (foodEffect[0] == "poison" || foodEffect[0] == "love")
122 {
123 owner.Talk("eatWeird");
124 break;
125 }
126 }
127 }
128 CardRow refCard = target.refCard;
129 if (refCard != null && refCard.id == "mammoth")
130 {
131 EClass.player.forceTalk = true;
132 owner.Talk("eatammoth");
133 }
134 }
135 turn++;
136 },
137 onProgressComplete = delegate
138 {
139 if (owner.IsPC && owner.hunger.GetPhase() == 0 && !EClass.debug.godFood && !isFeastFood)
140 {
141 owner.Say("eat_full");
142 }
143 else
144 {
145 owner.Say("eat_end", owner, target.GetName(NameStyle.Full, 1));
146 owner.ShowEmo(Emo.happy);
148 }
149 }
150 }.SetDuration(num, 5);
151 yield return Do(seq);
152 }
153}
AnimeID
Definition: AnimeID.cs:2
Emo
Definition: Emo.cs:2
FactionMemberType
NameStyle
Definition: NameStyle.cs:2
Definition: AIAct.cs:6
Status DoGrab(Card card, int num=-1, bool pickHeld=false, Func< Status > _onChildFail=null)
Definition: AIAct.cs:506
Status Do(AIAct _seq, Func< Status > _onChildFail=null)
Definition: AIAct.cs:430
virtual Status Cancel()
Definition: AIAct.cs:305
new Chara owner
Definition: AIAct.cs:14
Status KeepRunning()
Definition: AIAct.cs:335
Definition: AI_Eat.cs:5
override bool IsHostileAct
Definition: AI_Eat.cs:13
override bool CanManualCancel()
Definition: AI_Eat.cs:41
bool cook
Definition: AI_Eat.cs:8
bool IsValidTarget(Card c)
Definition: AI_Eat.cs:24
override bool LocalAct
Definition: AI_Eat.cs:10
Card target
Definition: AI_Eat.cs:6
override IEnumerable< Status > Run()
Definition: AI_Eat.cs:50
override void OnStart()
Definition: AI_Eat.cs:46
bool GetBool(int id)
Definition: BaseCard.cs:15
string id
Definition: CardRow.cs:7
Definition: Card.cs:11
virtual string GetName(NameStyle style, int num=-1)
Definition: Card.cs:2655
ElementContainerCard elements
Definition: Card.cs:42
CardRow refCard
Definition: Card.cs:2005
bool isNPCProperty
Definition: Card.cs:555
SoundSource PlaySound(string id, float v=1f, bool spatial=true)
Definition: Card.cs:6375
virtual int SelfWeight
Definition: Card.cs:2083
void Talk(string idTopic, string ref1=null, string ref2=null, bool forceSync=false)
Definition: Card.cs:6935
ICardParent parent
Definition: Card.cs:56
void ShowEmo(Emo _emo=Emo.none, float duration=0f, bool skipSame=true)
Definition: Card.cs:6343
Trait trait
Definition: Card.cs:54
bool noMove
Definition: Card.cs:771
virtual Thing Thing
Definition: Card.cs:2096
Card GetRootCard()
Definition: Card.cs:3508
int Evalue(int ele)
Definition: Card.cs:2611
void PlayAnime(AnimeID id, bool force=false)
Definition: Card.cs:6394
bool HasElement(int ele, bool includeNagative=false)
Definition: Card.cs:6122
void Say(string lang, string ref1=null, string ref2=null)
Definition: Card.cs:7052
Card held
Definition: Chara.cs:70
override bool IsPC
Definition: Chara.cs:626
override bool IsPCParty
Definition: Chara.cs:629
void HoldCard(Card t, int num=-1)
Definition: Chara.cs:4545
Stats hunger
Definition: Chara.cs:1168
FactionMemberType memberType
Definition: Chara.cs:46
bool godFood
Definition: CoreDebug.cs:183
Definition: EClass.cs:6
static Zone _zone
Definition: EClass.cs:21
static int rnd(long a)
Definition: EClass.cs:59
static CoreDebug debug
Definition: EClass.cs:49
Dictionary< int, Element > dict
SourceElement.Row source
Definition: ELEMENT.cs:278
static void Proc(Chara c, Thing food, bool consume=true)
Definition: FoodEffect.cs:12
override int GetPhase()
Definition: Stats.cs:117
virtual bool CanEat(Chara c)
Definition: Trait.cs:1004
bool HasField(int idEle)
Definition: Zone.cs:2943
bool IsPCFaction
Definition: Zone.cs:475