Elin Decompiled Documentation EA 23.153 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 }
68 else
69 {
70 target = chara.AddThing(ThingGen.CreateFromFilter("steal", chara.LV));
71 chara.SetInt(30, EClass.world.date.GetRaw() + 1440);
72 }
73 }
74 if (target == null)
75 {
76 owner.Say("steal_chara_nothing", owner, chara);
77 yield return Cancel();
78 }
79 owner.Say("steal_chara", owner, chara);
80 }
81 else
82 {
83 if (target.things.Count > 0)
84 {
86 if (thing != null)
87 {
88 target = thing;
89 }
90 }
91 owner.Say("steal_thing", owner, target);
92 }
93 ICardParent targetParent = target.parent;
94 Card card = chara;
95 if (card == null)
96 {
97 card = target;
98 }
99 Card root = card.GetRootCard();
101 {
102 canProgress = () => target.parent == targetParent && (chara == null || chara.ExistsOnMap),
103 onProgressBegin = delegate
104 {
105 },
106 onProgress = delegate(Progress_Custom p)
107 {
108 owner.LookAt(root);
109 owner.PlaySound("steal");
110 root.renderer.PlayAnime(AnimeID.Shiver);
111 if (!EClass.debug.godMode)
112 {
113 if (chara != null && owner.Dist(chara) > 1)
114 {
116 if (owner == null)
117 {
118 p.Cancel();
119 return;
120 }
121 if (chara != null && owner.Dist(chara) > 1)
122 {
123 EClass.pc.Say("targetTooFar");
124 p.Cancel();
125 return;
126 }
127 }
128 if (target.ChildrenAndSelfWeight > owner.Evalue(281) * 200 + owner.STR * 100 + 1000)
129 {
130 EClass.pc.Say("tooHeavy", target);
131 p.Cancel();
132 }
133 else
134 {
135 int count = owner.pos.ListWitnesses(owner, 4, WitnessType.crime, chara).Count;
136 if (owner.pos.TryWitnessCrime(owner, chara, 4, delegate(Chara c)
137 {
138 int num = ((!c.CanSee(owner)) ? 30 : 0);
139 int num2 = c.PER * 250 / 100;
141 {
142 num2 *= 2;
143 if (target.rarity >= Rarity.Legendary)
144 {
145 num2 *= 2;
146 }
147 if (target.rarity >= Rarity.Artifact)
148 {
149 num2 *= 2;
150 }
151 }
152 if (c.IsUnique)
153 {
154 num2 *= 2;
155 }
156 return EClass.rnd(num2) > owner.Evalue(281) + owner.DEX + num;
157 }))
158 {
159 p.Cancel();
160 }
161 else
162 {
163 owner.elements.ModExp(281, Mathf.Min(count * 5 + 5, 25));
164 }
165 }
166 }
167 },
168 onProgressComplete = delegate
169 {
171 {
173 }
174 owner.Say("steal_end", owner, target);
175 if (chara != null && (chara.IsPCFaction || chara.OriginalHostility >= Hostility.Friend))
176 {
178 }
179 else if (chara == null || chara.hostility > Hostility.Enemy)
180 {
182 }
183 target.isNPCProperty = false;
184 if (!target.category.IsChildOf("currency"))
185 {
186 target.isStolen = true;
187 }
189 owner.elements.ModExp(281, 50);
190 if (EClass.rnd(2) == 0)
191 {
192 EClass.pc.stamina.Mod(-1);
193 }
194 }
195 }.SetDuration(20, 4);
196 yield return Do(seq);
197 }
198}
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:2017
virtual Chara Chara
Definition: Card.cs:2006
void SetPlaceState(PlaceState newState, bool byPlayer=false)
Definition: Card.cs:3596
ElementContainerCard elements
Definition: Card.cs:37
bool isNPCProperty
Definition: Card.cs:538
bool IsUnique
Definition: Card.cs:2027
bool IsThrownWeapon
Definition: Card.cs:2181
SoundSource PlaySound(string id, float v=1f, bool spatial=true)
Definition: Card.cs:5776
int c_lockLv
Definition: Card.cs:936
Thing AddThing(string id, int lv=-1)
Definition: Card.cs:3020
Rarity rarity
Definition: Card.cs:298
bool IsRangedWeapon
Definition: Card.cs:2179
ICardParent parent
Definition: Card.cs:51
bool ExistsOnMap
Definition: Card.cs:2021
Thing SetNum(int a)
Definition: Card.cs:3356
int STR
Definition: Card.cs:2269
Point pos
Definition: Card.cs:55
Trait trait
Definition: Card.cs:49
ThingContainer things
Definition: Card.cs:34
bool IsInstalled
Definition: Card.cs:2317
virtual Thing Thing
Definition: Card.cs:1994
int Evalue(int ele)
Definition: Card.cs:2507
int Dist(Card c)
Definition: Card.cs:7235
virtual bool IsPCFaction
Definition: Card.cs:2205
int ChildrenAndSelfWeight
Definition: Card.cs:1977
SourceCategory.Row category
Definition: Card.cs:1985
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:6423
Definition: Chara.cs:10
Hostility OriginalHostility
Definition: Chara.cs:467
override bool IsPCFaction
Definition: Chara.cs:667
bool CanSee(Card c)
Definition: Chara.cs:1070
Stats stamina
Definition: Chara.cs:998
MoveResult TryMoveTowards(Point p)
Definition: Chara.cs:2392
Hostility hostility
Definition: Chara.cs:287
override void LookAt(Card c)
Definition: Chara.cs:3303
Thing Pick(Thing t, bool msg=true, bool tryStack=true)
Definition: Chara.cs:4017
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:58
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:2311
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:276
GameDate date
Definition: World.cs:6
virtual bool IsUserZone
Definition: Zone.cs:266