Elin Decompiled Documentation EA 23.230 Nightly
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 if (chara != null)
60 {
61 if (chara.HasElement(426))
62 {
63 chara.Say("abStealNegate", chara);
64 yield return Cancel();
65 }
66 target = chara.things.FindStealable();
67 if (target == null && chara.GetInt(30) < EClass.world.date.GetRaw())
68 {
69 if (EClass.rnd(2) == 0)
70 {
71 target = chara.AddThing(ThingGen.Create("money").SetNum(1 + EClass.rnd(chara.LV * 10)));
72 if (EClass.rnd(3) == 0)
73 {
74 chara.SetInt(30, EClass.world.date.GetRaw() + 1440);
75 }
76 }
77 else
78 {
79 target = chara.AddThing(ThingGen.CreateFromFilter("steal", chara.LV));
80 chara.SetInt(30, EClass.world.date.GetRaw() + 1440);
81 }
82 }
83 if (target == null)
84 {
85 owner.Say("steal_chara_nothing", owner, chara);
86 yield return Cancel();
87 }
88 owner.Say("steal_chara", owner, chara);
89 }
90 else
91 {
92 if (target.things.Count > 0)
93 {
95 if (thing != null)
96 {
97 target = thing;
98 }
99 }
100 owner.Say("steal_thing", owner, target);
101 }
102 ICardParent targetParent = target.parent;
103 Card card = chara;
104 if (card == null)
105 {
106 card = target;
107 }
108 Card root = card.GetRootCard();
110 {
111 canProgress = () => target.parent == targetParent && (chara == null || chara.ExistsOnMap),
112 onProgressBegin = delegate
113 {
114 },
115 onProgress = delegate(Progress_Custom p)
116 {
117 owner.LookAt(root);
118 owner.PlaySound("steal");
119 root.renderer.PlayAnime(AnimeID.Shiver);
120 if (!EClass.debug.godMode)
121 {
122 if (chara != null && owner.Dist(chara) > 1)
123 {
125 if (owner == null)
126 {
127 p.Cancel();
128 return;
129 }
130 if (chara != null && owner.Dist(chara) > 1)
131 {
132 EClass.pc.Say("targetTooFar");
133 p.Cancel();
134 return;
135 }
136 }
137 if (target.ChildrenAndSelfWeight > owner.Evalue(281) * 200 + owner.STR * 100 + 1000)
138 {
139 EClass.pc.Say("tooHeavy", target);
140 p.Cancel();
141 }
142 else
143 {
144 int count = owner.pos.ListWitnesses(owner, 4, WitnessType.crime, chara).Count;
145 if (owner.pos.TryWitnessCrime(owner, chara, 4, delegate(Chara c)
146 {
147 int num = ((!c.CanSee(owner)) ? 30 : 0);
148 int num2 = c.PER * 250 / 100;
150 {
151 num2 *= 2;
152 if (target.rarity >= Rarity.Legendary)
153 {
154 num2 *= 2;
155 }
156 if (target.rarity >= Rarity.Artifact)
157 {
158 num2 *= 2;
159 }
160 }
161 if (c.IsUnique)
162 {
163 num2 *= 2;
164 }
165 return EClass.rnd(num2) > owner.Evalue(281) + owner.DEX + num;
166 }))
167 {
168 p.Cancel();
169 }
170 else
171 {
172 owner.elements.ModExp(281, Mathf.Min(count * 5 + 5, 25));
173 }
174 }
175 }
176 },
177 onProgressComplete = delegate
178 {
180 {
182 }
183 owner.Say("steal_end", owner, target);
184 if (chara != null && (chara.IsPCFaction || chara.OriginalHostility >= Hostility.Friend))
185 {
187 }
188 else if (chara == null || chara.hostility > Hostility.Enemy)
189 {
191 }
192 target.isNPCProperty = false;
193 if (!target.category.IsChildOf("currency"))
194 {
195 target.isStolen = true;
196 }
198 owner.elements.ModExp(281, 50f);
199 if (EClass.rnd(2) == 0)
200 {
201 EClass.pc.stamina.Mod(-1);
202 }
203 }
204 }.SetDuration(20, 4);
205 yield return Do(seq);
206 }
207}
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:3677
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:5822
bool IsThrownWeapon
Definition: Card.cs:2233
SoundSource PlaySound(string id, float v=1f, bool spatial=true)
Definition: Card.cs:6054
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:3425
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:7555
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:6706
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:2593
Hostility hostility
Definition: Chara.cs:289
override void LookAt(Card c)
Definition: Chara.cs:3504
Thing Pick(Thing t, bool msg=true, bool tryStack=true)
Definition: Chara.cs:4234
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:2496
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