Elin Decompiled Documentation EA 23.182 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 target = chara.things.FindStealable();
62 if (target == null && chara.GetInt(30) < EClass.world.date.GetRaw())
63 {
64 if (EClass.rnd(2) == 0)
65 {
66 target = chara.AddThing(ThingGen.Create("money").SetNum(1 + EClass.rnd(chara.LV * 10)));
67 if (EClass.rnd(3) == 0)
68 {
69 chara.SetInt(30, EClass.world.date.GetRaw() + 1440);
70 }
71 }
72 else
73 {
74 target = chara.AddThing(ThingGen.CreateFromFilter("steal", chara.LV));
75 chara.SetInt(30, EClass.world.date.GetRaw() + 1440);
76 }
77 }
78 if (target == null)
79 {
80 owner.Say("steal_chara_nothing", owner, chara);
81 yield return Cancel();
82 }
83 owner.Say("steal_chara", owner, chara);
84 }
85 else
86 {
87 if (target.things.Count > 0)
88 {
90 if (thing != null)
91 {
92 target = thing;
93 }
94 }
95 owner.Say("steal_thing", owner, target);
96 }
97 ICardParent targetParent = target.parent;
98 Card card = chara;
99 if (card == null)
100 {
101 card = target;
102 }
103 Card root = card.GetRootCard();
105 {
106 canProgress = () => target.parent == targetParent && (chara == null || chara.ExistsOnMap),
107 onProgressBegin = delegate
108 {
109 },
110 onProgress = delegate(Progress_Custom p)
111 {
112 owner.LookAt(root);
113 owner.PlaySound("steal");
114 root.renderer.PlayAnime(AnimeID.Shiver);
115 if (!EClass.debug.godMode)
116 {
117 if (chara != null && owner.Dist(chara) > 1)
118 {
120 if (owner == null)
121 {
122 p.Cancel();
123 return;
124 }
125 if (chara != null && owner.Dist(chara) > 1)
126 {
127 EClass.pc.Say("targetTooFar");
128 p.Cancel();
129 return;
130 }
131 }
132 if (target.ChildrenAndSelfWeight > owner.Evalue(281) * 200 + owner.STR * 100 + 1000)
133 {
134 EClass.pc.Say("tooHeavy", target);
135 p.Cancel();
136 }
137 else
138 {
139 int count = owner.pos.ListWitnesses(owner, 4, WitnessType.crime, chara).Count;
140 if (owner.pos.TryWitnessCrime(owner, chara, 4, delegate(Chara c)
141 {
142 int num = ((!c.CanSee(owner)) ? 30 : 0);
143 int num2 = c.PER * 250 / 100;
145 {
146 num2 *= 2;
147 if (target.rarity >= Rarity.Legendary)
148 {
149 num2 *= 2;
150 }
151 if (target.rarity >= Rarity.Artifact)
152 {
153 num2 *= 2;
154 }
155 }
156 if (c.IsUnique)
157 {
158 num2 *= 2;
159 }
160 return EClass.rnd(num2) > owner.Evalue(281) + owner.DEX + num;
161 }))
162 {
163 p.Cancel();
164 }
165 else
166 {
167 owner.elements.ModExp(281, Mathf.Min(count * 5 + 5, 25));
168 }
169 }
170 }
171 },
172 onProgressComplete = delegate
173 {
175 {
177 }
178 owner.Say("steal_end", owner, target);
179 if (chara != null && (chara.IsPCFaction || chara.OriginalHostility >= Hostility.Friend))
180 {
182 }
183 else if (chara == null || chara.hostility > Hostility.Enemy)
184 {
186 }
187 target.isNPCProperty = false;
188 if (!target.category.IsChildOf("currency"))
189 {
190 target.isStolen = true;
191 }
193 owner.elements.ModExp(281, 50f);
194 if (EClass.rnd(2) == 0)
195 {
196 EClass.pc.stamina.Mod(-1);
197 }
198 }
199 }.SetDuration(20, 4);
200 yield return Do(seq);
201 }
202}
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:2043
virtual Chara Chara
Definition: Card.cs:2032
void SetPlaceState(PlaceState newState, bool byPlayer=false)
Definition: Card.cs:3639
ElementContainerCard elements
Definition: Card.cs:39
bool isNPCProperty
Definition: Card.cs:540
bool IsUnique
Definition: Card.cs:2053
bool IsThrownWeapon
Definition: Card.cs:2207
SoundSource PlaySound(string id, float v=1f, bool spatial=true)
Definition: Card.cs:5852
int c_lockLv
Definition: Card.cs:938
Thing AddThing(string id, int lv=-1)
Definition: Card.cs:3057
Rarity rarity
Definition: Card.cs:300
bool IsRangedWeapon
Definition: Card.cs:2205
ICardParent parent
Definition: Card.cs:53
bool ExistsOnMap
Definition: Card.cs:2047
Thing SetNum(int a)
Definition: Card.cs:3393
int STR
Definition: Card.cs:2295
Point pos
Definition: Card.cs:57
Trait trait
Definition: Card.cs:51
ThingContainer things
Definition: Card.cs:36
bool IsInstalled
Definition: Card.cs:2343
virtual Thing Thing
Definition: Card.cs:2020
int Evalue(int ele)
Definition: Card.cs:2533
int Dist(Card c)
Definition: Card.cs:7315
virtual bool IsPCFaction
Definition: Card.cs:2231
int ChildrenAndSelfWeight
Definition: Card.cs:2003
SourceCategory.Row category
Definition: Card.cs:2011
CardRenderer renderer
Definition: Card.cs:59
int LV
Definition: Card.cs:372
void Say(string lang, string ref1=null, string ref2=null)
Definition: Card.cs:6499
Definition: Chara.cs:10
Hostility OriginalHostility
Definition: Chara.cs:469
override bool IsPCFaction
Definition: Chara.cs:669
bool CanSee(Card c)
Definition: Chara.cs:1200
Stats stamina
Definition: Chara.cs:1128
MoveResult TryMoveTowards(Point p)
Definition: Chara.cs:2543
Hostility hostility
Definition: Chara.cs:289
override void LookAt(Card c)
Definition: Chara.cs:3454
Thing Pick(Thing t, bool msg=true, bool tryStack=true)
Definition: Chara.cs:4168
bool godMode
Definition: CoreDebug.cs:172
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:2408
List< Chara > ListWitnesses(Chara criminal, int radius=4, WitnessType type=WitnessType.crime, Chara target=null)
Definition: Point.cs:814
bool TryWitnessCrime(Chara criminal, Chara target=null, int radius=4, Func< Chara, bool > funcWitness=null)
Definition: Point.cs:857
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:279
GameDate date
Definition: World.cs:6
virtual bool IsUserZone
Definition: Zone.cs:266