Elin Decompiled Documentation EA 23.233 Nightly Patch 1
Loading...
Searching...
No Matches
AI_Steal.cs
Go to the documentation of this file.
1using System.Collections.Generic;
2using UnityEngine;
3
4public class AI_Steal : AI_TargetCard
5{
7
8 public override int MaxRadius => 2;
9
10 public override bool IsHostileAct => true;
11
12 public override bool IsValidTC(Card c)
13 {
15 {
16 return false;
17 }
19 {
20 return false;
21 }
22 if (!c.isNPCProperty && c.isThing)
23 {
24 return false;
25 }
26 if (!c.trait.CanBeStolen)
27 {
28 return false;
29 }
30 if (c.c_lockLv > 0)
31 {
32 return false;
33 }
34 if (!c.isThing)
35 {
36 return !c.IsPCFaction;
37 }
38 return true;
39 }
40
41 public override bool CanPerform()
42 {
43 if (Act.TC != null)
44 {
45 return Act.TC.trait.CanBeStolen;
46 }
47 return false;
48 }
49
50 public override bool Perform()
51 {
52 target = Act.TC;
53 return base.Perform();
54 }
55
56 public override IEnumerable<Status> Run()
57 {
58 Chara chara = target.Chara;
59 bool negate = chara != null && chara.HasElement(426);
60 if (chara != null)
61 {
62 if (negate && owner.Evalue(1662) == 0)
63 {
64 owner.Say("abStealNegate", chara);
65 yield return Cancel();
66 }
67 target = chara.things.FindStealable();
68 if (target == null && chara.GetInt(30) < EClass.world.date.GetRaw())
69 {
70 if (EClass.rnd(2) == 0)
71 {
72 target = chara.AddThing(ThingGen.Create("money").SetNum(1 + EClass.rnd(chara.LV * 10)));
73 if (EClass.rnd(3) == 0)
74 {
75 chara.SetInt(30, EClass.world.date.GetRaw() + 1440);
76 }
77 }
78 else
79 {
80 target = chara.AddThing(ThingGen.CreateFromFilter("steal", chara.LV));
81 chara.SetInt(30, EClass.world.date.GetRaw() + 1440);
82 }
83 }
84 if (target == null)
85 {
86 owner.Say("steal_chara_nothing", owner, chara);
87 yield return Cancel();
88 }
89 owner.Say("steal_chara", owner, chara);
90 }
91 else
92 {
93 if (target.things.Count > 0)
94 {
96 if (thing != null)
97 {
98 target = thing;
99 }
100 }
101 owner.Say("steal_thing", owner, target);
102 }
103 ICardParent targetParent = target.parent;
104 Card card = chara;
105 if (card == null)
106 {
107 card = target;
108 }
109 Card root = card.GetRootCard();
111 {
112 canProgress = () => target.parent == targetParent && (chara == null || chara.ExistsOnMap),
113 onProgressBegin = delegate
114 {
115 },
116 onProgress = delegate(Progress_Custom p)
117 {
118 owner.LookAt(root);
119 owner.PlaySound("steal");
120 root.renderer.PlayAnime(AnimeID.Shiver);
121 if (!EClass.debug.godMode)
122 {
123 if (chara != null && owner.Dist(chara) > 1)
124 {
126 if (owner == null)
127 {
128 p.Cancel();
129 return;
130 }
131 if (chara != null && owner.Dist(chara) > 1)
132 {
133 EClass.pc.Say("targetTooFar");
134 p.Cancel();
135 return;
136 }
137 }
138 if (target.ChildrenAndSelfWeight > owner.Evalue(281) * 200 + owner.STR * 100 + 1000)
139 {
140 EClass.pc.Say("tooHeavy", target);
141 p.Cancel();
142 }
143 else
144 {
145 int count = owner.pos.ListWitnesses(owner, 4, WitnessType.crime, chara).Count;
146 if (owner.pos.TryWitnessCrime(owner, chara, 4, delegate(Chara c)
147 {
148 int num = ((!c.CanSee(owner)) ? 30 : 0);
149 int num2 = c.PER * 250 / 100;
151 {
152 num2 *= 2;
153 if (target.rarity >= Rarity.Legendary)
154 {
155 num2 *= 2;
156 }
157 if (target.rarity >= Rarity.Artifact)
158 {
159 num2 *= 2;
160 }
161 }
162 if (c.IsUnique)
163 {
164 num2 *= 2;
165 }
166 if (negate)
167 {
168 num2 *= 2;
169 }
170 return EClass.rnd(num2) > owner.Evalue(281) + owner.DEX + num;
171 }))
172 {
173 p.Cancel();
174 }
175 else
176 {
177 owner.elements.ModExp(281, Mathf.Min(count * 5 + 5, 25));
178 }
179 }
180 }
181 },
182 onProgressComplete = delegate
183 {
185 {
187 }
188 owner.Say("steal_end", owner, target);
189 if (chara != null && (chara.IsPCFaction || chara.OriginalHostility >= Hostility.Friend))
190 {
192 }
193 else if (chara == null || chara.hostility > Hostility.Enemy)
194 {
196 }
197 target.isNPCProperty = false;
198 if (!target.category.IsChildOf("currency"))
199 {
200 target.isStolen = true;
201 }
203 owner.elements.ModExp(281, 50f);
204 if (EClass.rnd(2) == 0)
205 {
206 EClass.pc.stamina.Mod(-1);
207 }
208 }
209 }.SetDuration(20, 4);
210 yield return Do(seq);
211 }
212}
AnimeID
Definition: AnimeID.cs:2
Hostility
Definition: Hostility.cs:2
PlaceState
Definition: PlaceState.cs:2
Rarity
Definition: Rarity.cs:2
WitnessType
Definition: WitnessType.cs:2
Status Do(AIAct _seq, Func< Status > _onChildFail=null)
Definition: AIAct.cs:416
virtual Status Cancel()
Definition: AIAct.cs:291
new Chara owner
Definition: AIAct.cs:14
override bool CanPerform()
Definition: AI_Steal.cs:41
override bool Perform()
Definition: AI_Steal.cs:50
override IEnumerable< Status > Run()
Definition: AI_Steal.cs:56
override int MaxRadius
Definition: AI_Steal.cs:8
override bool IsValidTC(Card c)
Definition: AI_Steal.cs:12
override bool IsHostileAct
Definition: AI_Steal.cs:10
Definition: ACT.cs:62
static Card TC
Definition: ACT.cs:79
int GetInt(int id, int? defaultInt=null)
Definition: BaseCard.cs:25
void SetInt(int id, int value=0)
Definition: BaseCard.cs:39
void PlayAnime(AnimeID id, bool force)
Definition: Card.cs:11
virtual bool isThing
Definition: Card.cs:2069
virtual Chara Chara
Definition: Card.cs:2058
void SetPlaceState(PlaceState newState, bool byPlayer=false)
Definition: Card.cs:3696
ElementContainerCard elements
Definition: Card.cs:41
bool isNPCProperty
Definition: Card.cs:554
bool IsUnique
Definition: Card.cs:2079
bool HasElement(int ele, int req=1)
Definition: Card.cs:5845
bool IsThrownWeapon
Definition: Card.cs:2233
SoundSource PlaySound(string id, float v=1f, bool spatial=true)
Definition: Card.cs:6077
int c_lockLv
Definition: Card.cs:964
Thing AddThing(string id, int lv=-1)
Definition: Card.cs:3085
Rarity rarity
Definition: Card.cs:314
bool IsRangedWeapon
Definition: Card.cs:2231
ICardParent parent
Definition: Card.cs:55
bool ExistsOnMap
Definition: Card.cs:2073
Thing SetNum(int a)
Definition: Card.cs:3444
int STR
Definition: Card.cs:2321
Point pos
Definition: Card.cs:59
Trait trait
Definition: Card.cs:53
ThingContainer things
Definition: Card.cs:38
bool IsInstalled
Definition: Card.cs:2369
virtual Thing Thing
Definition: Card.cs:2046
int Evalue(int ele)
Definition: Card.cs:2559
int Dist(Card c)
Definition: Card.cs:7578
virtual bool IsPCFaction
Definition: Card.cs:2257
int ChildrenAndSelfWeight
Definition: Card.cs:2029
SourceCategory.Row category
Definition: Card.cs:2037
CardRenderer renderer
Definition: Card.cs:61
int LV
Definition: Card.cs:386
void Say(string lang, string ref1=null, string ref2=null)
Definition: Card.cs:6729
Definition: Chara.cs:10
Hostility OriginalHostility
Definition: Chara.cs:469
override bool IsPCFaction
Definition: Chara.cs:669
bool CanSee(Card c)
Definition: Chara.cs:1216
Stats stamina
Definition: Chara.cs:1144
MoveResult TryMoveTowards(Point p)
Definition: Chara.cs:2602
Hostility hostility
Definition: Chara.cs:289
override void LookAt(Card c)
Definition: Chara.cs:3513
Thing Pick(Thing t, bool msg=true, bool tryStack=true)
Definition: Chara.cs:4243
bool godMode
Definition: CoreDebug.cs:173
int GetRaw(int offsetHours=0)
Definition: Date.cs:322
Definition: EClass.cs:5
static Zone _zone
Definition: EClass.cs:20
static World world
Definition: EClass.cs:40
static int rnd(long a)
Definition: EClass.cs:58
static Player player
Definition: EClass.cs:12
static Chara pc
Definition: EClass.cs:14
static CoreDebug debug
Definition: EClass.cs:48
void ModExp(int ele, float a, bool chain=false)
void ModKarma(int a)
Definition: Player.cs:2499
List< Chara > ListWitnesses(Chara criminal, int radius=4, WitnessType type=WitnessType.crime, Chara target=null)
Definition: Point.cs:818
bool TryWitnessCrime(Chara criminal, Chara target=null, int radius=4, Func< Chara, bool > funcWitness=null)
Definition: Point.cs:861
virtual void Mod(int a)
Definition: Stats.cs:135
static TargetTypeSelfAndNeighbor SelfAndNeighbor
Definition: TargetType.cs:13
Thing FindStealable()
static Thing CreateFromFilter(string id, int lv=-1)
Definition: ThingGen.cs:63
static Thing Create(string id, int idMat=-1, int lv=-1)
Definition: ThingGen.cs:53
Definition: Thing.cs:8
bool isEquipped
Definition: Thing.cs:17
virtual bool CanBeStolen
Definition: Trait.cs:281
GameDate date
Definition: World.cs:6
virtual bool IsUserZone
Definition: Zone.cs:268