Elin Decompiled Documentation EA 23.102 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 return Act.TC != null;
44 }
45
46 public override bool Perform()
47 {
48 target = Act.TC;
49 return base.Perform();
50 }
51
52 public override IEnumerable<Status> Run()
53 {
54 Chara chara = target.Chara;
55 if (chara != null)
56 {
57 target = chara.things.FindStealable();
58 if (target == null && chara.GetInt(30) < EClass.world.date.GetRaw())
59 {
60 if (EClass.rnd(2) == 0)
61 {
62 target = chara.AddThing(ThingGen.Create("money").SetNum(1 + EClass.rnd(chara.LV * 10)));
63 }
64 else
65 {
66 target = chara.AddThing(ThingGen.CreateFromFilter("steal", chara.LV));
67 chara.SetInt(30, EClass.world.date.GetRaw() + 1440);
68 }
69 }
70 if (target == null)
71 {
72 owner.Say("steal_chara_nothing", owner, chara);
73 yield return Cancel();
74 }
75 owner.Say("steal_chara", owner, chara);
76 }
77 else
78 {
79 if (target.things.Count > 0)
80 {
82 if (thing != null)
83 {
84 target = thing;
85 }
86 }
87 owner.Say("steal_thing", owner, target);
88 }
89 ICardParent targetParent = target.parent;
90 Card card = chara;
91 if (card == null)
92 {
93 card = target;
94 }
95 Card root = card.GetRootCard();
97 {
98 canProgress = () => target.parent == targetParent && (chara == null || chara.ExistsOnMap),
99 onProgressBegin = delegate
100 {
101 },
102 onProgress = delegate(Progress_Custom p)
103 {
104 owner.LookAt(root);
105 owner.PlaySound("steal");
106 root.renderer.PlayAnime(AnimeID.Shiver);
107 if (!EClass.debug.godMode)
108 {
109 if (chara != null && owner.Dist(chara) > 1)
110 {
112 if (owner == null)
113 {
114 p.Cancel();
115 return;
116 }
117 if (chara != null && owner.Dist(chara) > 1)
118 {
119 EClass.pc.Say("targetTooFar");
120 p.Cancel();
121 return;
122 }
123 }
124 if (target.ChildrenAndSelfWeight > owner.Evalue(281) * 200 + owner.STR * 100 + 1000)
125 {
126 EClass.pc.Say("tooHeavy", target);
127 p.Cancel();
128 }
129 else
130 {
131 int count = owner.pos.ListWitnesses(owner, 4, WitnessType.crime, chara).Count;
132 if (owner.pos.TryWitnessCrime(owner, chara, 4, delegate(Chara c)
133 {
134 int num = ((!c.CanSee(owner)) ? 30 : 0);
135 int num2 = c.PER * 250 / 100;
137 {
138 num2 *= 2;
139 if (target.rarity >= Rarity.Legendary)
140 {
141 num2 *= 2;
142 }
143 if (target.rarity >= Rarity.Artifact)
144 {
145 num2 *= 2;
146 }
147 }
148 if (c.IsUnique)
149 {
150 num2 *= 2;
151 }
152 return EClass.rnd(num2) > owner.Evalue(281) + owner.DEX + num;
153 }))
154 {
155 p.Cancel();
156 }
157 else
158 {
159 owner.elements.ModExp(281, Mathf.Min(count * 5 + 5, 25));
160 }
161 }
162 }
163 },
164 onProgressComplete = delegate
165 {
167 {
169 }
170 owner.Say("steal_end", owner, target);
171 if (chara != null && (chara.IsPCFaction || chara.OriginalHostility >= Hostility.Friend))
172 {
174 }
175 else if (chara == null || chara.hostility > Hostility.Enemy)
176 {
178 }
179 target.isNPCProperty = false;
180 if (!target.category.IsChildOf("currency"))
181 {
182 target.isStolen = true;
183 }
185 owner.elements.ModExp(281, 50);
186 if (EClass.rnd(2) == 0)
187 {
188 EClass.pc.stamina.Mod(-1);
189 }
190 }
191 }.SetDuration(20, 4);
192 yield return Do(seq);
193 }
194}
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:46
override IEnumerable< Status > Run()
Definition: AI_Steal.cs:52
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:1957
virtual Chara Chara
Definition: Card.cs:1946
void SetPlaceState(PlaceState newState, bool byPlayer=false)
Definition: Card.cs:3454
ElementContainerCard elements
Definition: Card.cs:37
bool isNPCProperty
Definition: Card.cs:526
bool IsUnique
Definition: Card.cs:1967
bool IsThrownWeapon
Definition: Card.cs:2105
SoundSource PlaySound(string id, float v=1f, bool spatial=true)
Definition: Card.cs:5404
int c_lockLv
Definition: Card.cs:924
Thing AddThing(string id, int lv=-1)
Definition: Card.cs:2901
Rarity rarity
Definition: Card.cs:298
bool IsRangedWeapon
Definition: Card.cs:2103
ICardParent parent
Definition: Card.cs:51
bool ExistsOnMap
Definition: Card.cs:1961
Thing SetNum(int a)
Definition: Card.cs:3242
int STR
Definition: Card.cs:2193
Point pos
Definition: Card.cs:55
Trait trait
Definition: Card.cs:49
ThingContainer things
Definition: Card.cs:34
bool IsInstalled
Definition: Card.cs:2241
virtual Thing Thing
Definition: Card.cs:1934
int Evalue(int ele)
Definition: Card.cs:2431
int Dist(Card c)
Definition: Card.cs:6777
virtual bool IsPCFaction
Definition: Card.cs:2129
int ChildrenAndSelfWeight
Definition: Card.cs:1917
SourceCategory.Row category
Definition: Card.cs:1925
CardRenderer renderer
Definition: Card.cs:57
int LV
Definition: Card.cs:370
void Say(string lang, string ref1=null, string ref2=null)
Definition: Card.cs:6046
Definition: Chara.cs:10
Hostility OriginalHostility
Definition: Chara.cs:456
override bool IsPCFaction
Definition: Chara.cs:656
bool CanSee(Card c)
Definition: Chara.cs:1027
Stats stamina
Definition: Chara.cs:955
MoveResult TryMoveTowards(Point p)
Definition: Chara.cs:2320
Hostility hostility
Definition: Chara.cs:276
override void LookAt(Card c)
Definition: Chara.cs:3219
Thing Pick(Thing t, bool msg=true, bool tryStack=true)
Definition: Chara.cs:3920
bool godMode
Definition: CoreDebug.cs:172
int GetRaw(int offsetHours=0)
Definition: Date.cs:322
Definition: EClass.cs:5
static int rnd(int a)
Definition: EClass.cs:50
static Zone _zone
Definition: EClass.cs:20
static World world
Definition: EClass.cs:40
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, int a, bool chain=false)
void ModKarma(int a)
Definition: Player.cs:2289
List< Chara > ListWitnesses(Chara criminal, int radius=4, WitnessType type=WitnessType.crime, Chara target=null)
Definition: Point.cs:802
bool TryWitnessCrime(Chara criminal, Chara target=null, int radius=4, Func< Chara, bool > funcWitness=null)
Definition: Point.cs:845
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:272
GameDate date
Definition: World.cs:6
virtual bool IsUserZone
Definition: Zone.cs:264