Elin Decompiled Documentation EA 23.130 Nightly
Loading...
Searching...
No Matches
AI_Fish.cs
Go to the documentation of this file.
1using System.Collections.Generic;
2using UnityEngine;
3
4public class AI_Fish : AIAct
5{
6 public class ProgressFish : AIProgress
7 {
8 public int hit = -1;
9
11
12 public override bool ShowProgress => false;
13
14 public override int MaxProgress => 100;
15
16 public override int LeftHand => -1;
17
18 public override int RightHand => 1107;
19
20 public override void OnStart()
21 {
22 if (!shouldCancel)
23 {
24 owner.PlaySound("fish_cast");
25 if (owner.Tool != null)
26 {
27 owner.Say("fish_start", owner, owner.Tool);
28 }
29 else
30 {
31 owner.Say("fish_start2", owner);
32 }
33 }
34 }
35
36 public override void OnProgress()
37 {
38 if (owner.IsPC && (owner.Tool == null || !owner.Tool.HasElement(245)))
39 {
40 Cancel();
41 }
42 else if (hit >= 0)
43 {
45 owner.PlaySound("fish_fight");
46 Ripple();
47 int a = Mathf.Clamp(10 - EClass.rnd(owner.Evalue(245) + 1) / 10, 5, 10);
48 if (hit > EClass.rnd(a))
49 {
50 hit = 100;
52 }
53 hit++;
54 }
55 else
56 {
57 if (EClass.rnd(Mathf.Clamp(10 - EClass.rnd(owner.Evalue(245) + 1) / 5, 2, 10)) == 0 && progress >= 10)
58 {
59 hit = 0;
60 }
61 if (progress == 2 || (progress >= 8 && progress % 6 == 0 && EClass.rnd(3) == 0))
62 {
64 Ripple();
65 }
66 }
67 }
68
69 public void Ripple()
70 {
71 if (posWater != null)
72 {
73 Effect.Get("ripple").Play(posWater, -0.04f);
74 posWater.PlaySound("fish_splash");
75 }
76 }
77
78 public override void OnProgressComplete()
79 {
80 TraitToolFishing traitToolFishing = owner.FindTool<TraitToolFishing>();
82 if (hit < 100)
83 {
84 Fail();
85 return;
86 }
88 {
90 {
91 Msg.Say("noBait");
92 return;
93 }
95 }
96 Thing thing = Makefish(owner);
97 if (thing == null)
98 {
99 Fail();
100 return;
101 }
102 int num = thing.Num;
103 if (!owner.IsPC)
104 {
105 num += 5;
106 }
107 EClass._zone.AddCard(thing, owner.pos);
108 thing.renderer.PlayAnime(AnimeID.Jump);
109 owner.Say("fish_get", owner, thing);
110 owner.PlaySound("fish_get");
111 owner.elements.ModExp(245, thing.tier * 200 + 80 + EClass.curve(thing.Num, 5, 75) * 20);
112 if (thing.id == "medal")
113 {
114 thing.isHidden = false;
115 }
116 if (owner.IsPC)
117 {
119 {
121 {
122 EClass.pc.Say("tooHeavy", thing);
123 shouldCancel = true;
124 }
125 else
126 {
127 owner.Pick(thing);
128 }
129 }
130 }
131 else
132 {
133 foreach (Thing item in owner.things.List((Thing t) => t.source._origin == "fish"))
134 {
135 item.Destroy();
136 }
137 if (owner.things.IsFull())
138 {
139 thing.Destroy();
140 }
141 }
142 if (traitToolFishing != null)
143 {
144 num = num * 100 / (50 + traitToolFishing.owner.material.hardness * 2);
145 }
146 if (EClass.rnd(2) == 0 || num > 1)
147 {
148 owner.stamina.Mod(Mathf.Min(-1, -num));
149 }
150 }
151
152 public void Fail()
153 {
154 if (owner.IsPC)
155 {
156 owner.Say("fish_miss", owner);
157 }
158 owner.stamina.Mod(-1);
159 }
160 }
161
162 public Point pos;
163
164 public static bool shouldCancel;
165
166 public override int MaxRestart => 9999;
167
169
170 public override bool CanManualCancel()
171 {
172 return true;
173 }
174
175 public override bool CanPerform()
176 {
178 }
179
180 public override AIProgress CreateProgress()
181 {
182 return new ProgressFish
183 {
184 posWater = pos
185 };
186 }
187
188 public override IEnumerable<Status> Run()
189 {
190 if (!owner.IsPC)
191 {
193 }
194 if (pos != null)
195 {
197 {
198 yield return Cancel();
199 }
200 yield return DoGoto(pos, 1);
202 if (owner.IsPC)
203 {
205 if (EClass.player.eqBait == null)
206 {
207 Msg.Say("noBait");
208 yield return Cancel();
209 }
210 }
212 {
213 yield return Cancel();
214 }
216 if (shouldCancel)
217 {
218 shouldCancel = false;
219 yield return Cancel();
220 }
221 if (status == Status.Running)
222 {
223 yield return Status.Running;
224 }
225 if (owner == EClass.pc)
226 {
227 yield return Restart();
228 }
229 yield return DoWait(2);
230 if (owner != null)
231 {
232 if (!owner.IsPC)
233 {
235 }
237 {
239 }
240 }
241 yield return Success();
242 }
243 if (owner.fov == null)
244 {
245 yield return Cancel();
246 }
247 List<Point> list = owner.fov.ListPoints();
248 foreach (Point p in list)
249 {
251 {
252 continue;
253 }
254 for (int _x = p.x - 1; _x <= p.x + 1; _x++)
255 {
256 for (int _z = p.z - 1; _z <= p.z + 1; _z++)
257 {
258 Point.shared.Set(_x, _z);
260 {
261 Point dest = Point.shared.Copy();
262 yield return DoGoto(dest);
263 owner.LookAt(dest);
264 yield return DoProgress();
265 yield return Status.Success;
266 }
267 }
268 }
269 }
270 }
271
272 public static Point GetFishingPoint(Point p)
273 {
274 Point point = new Point();
276 {
277 return Point.Invalid;
278 }
279 for (int i = p.x - 1; i <= p.x + 1; i++)
280 {
281 for (int j = p.z - 1; j <= p.z + 1; j++)
282 {
283 point.Set(i, j);
284 if (point.IsValid && point.cell.IsTopWaterAndNoSnow)
285 {
286 return point;
287 }
288 }
289 }
290 return Point.Invalid;
291 }
292
293 public static Thing Makefish(Chara c)
294 {
295 bool hqFever = c.IsPC && c.Evalue(1659) > 0 && EClass.player.fished < 5;
296 int num = c.Evalue(245);
297 if (!hqFever && EClass.rnd(3 + num) == 0)
298 {
299 return null;
300 }
301 if (hqFever)
302 {
303 c.PlayEffect("revive");
304 c.Say("fishingFever");
305 }
306 int[] array = new int[18]
307 {
308 233, 235, 236, 236, 236, 1170, 1143, 1144, 727, 728,
309 237, 869, 1178, 1179, 1180, 1243, 1244, 1245
310 };
311 Thing thing = null;
312 int num2 = 1;
313 string text = "";
314 if (c.IsPC || EClass.rnd(20) == 0)
315 {
316 if (EClass.rnd(30) == 0)
317 {
318 text = "book_ancient";
319 }
320 if (EClass.rnd(35) == 0)
321 {
322 text = "plat";
323 if (EClass.rnd(2) == 0)
324 {
325 text = "scratchcard";
326 }
327 if (EClass.rnd(3) == 0)
328 {
329 text = "casino_coin";
330 }
331 if (EClass.rnd(3) == 0)
332 {
333 text = "gacha_coin";
334 }
335 if (EClass.rnd(50) == 0)
336 {
337 text = new string[7] { "659", "758", "759", "806", "828", "1190", "1191" }.RandomItem();
338 }
339 }
340 if (EClass.rnd(40) == 0 && EClass.rnd(40) < num / 3 + 10)
341 {
342 text = "medal";
343 }
344 }
345 if (!hqFever && text != "")
346 {
347 thing = ThingGen.Create(text, -1, EClass._zone.ContentLv);
348 }
349 else if (!hqFever && EClass.rnd(5 + num / 3) == 0)
350 {
351 thing = ThingGen.Create(array.RandomItem().ToString() ?? "");
352 }
353 else
354 {
355 SetFeverSeed();
356 int lv = EClass.rnd(num * 2) + 1;
357 int num3 = 0;
358 if (EClass.rnd(EClass.debug.enable ? 1 : (c.IsPC ? 5 : (c.IsPCFaction ? 250 : 2500))) == 0)
359 {
360 num3 = Mathf.Min(EClass.rnd(EClass.rnd(EClass.rnd(EClass.curve(num, 100, 50, 70) + 50))) / 50, 3);
361 }
362 if (hqFever && ((EClass.pc.Evalue(1659) >= 2 && EClass.player.fished == 0) || EClass.rnd(5) == 0))
363 {
364 num3++;
365 }
366 if (num3 > 3)
367 {
368 num3 = 3;
369 }
370 SetFeverSeed();
371 thing = ThingGen.Create("fish", -1, lv);
372 SetFeverSeed();
373 int num4 = Mathf.Max(1, num / (thing.source.LV * 2 + 10));
374 int num5 = 5;
375 if (EClass.Branch != null)
376 {
377 num5 += EClass.Branch.Evalue(3604) * 20 + EClass.Branch.Evalue(3605) * 20 + EClass.Branch.Evalue(3706) * 25;
378 }
379 if (EClass._zone is Zone_Kapul)
380 {
381 num5 = 35;
382 }
383 bool num6 = num5 >= EClass.rnd(100);
384 if (num6)
385 {
386 c.Say("bigCatch", c);
387 }
388 num2 = (num6 ? num4 : EClass.rnd(num4)) / (num3 + 1) + 1;
389 if (num3 != 0)
390 {
391 thing.SetTier(num3);
392 }
393 Rand.SetSeed();
394 }
395 if (thing != null)
396 {
398 {
399 num2 = 1;
400 }
401 if (num2 > 1)
402 {
403 thing.SetNum(num2);
404 }
405 thing.SetBlessedState(BlessedState.Normal);
406 }
407 if (c.IsPC)
408 {
410 }
411 return thing;
412 void SetFeverSeed()
413 {
414 if (hqFever)
415 {
417 }
418 }
419 }
420}
AnimeID
Definition: AnimeID.cs:2
BlessedState
Definition: BlessedState.cs:2
ClearInventoryType
Definition: AIAct.cs:6
virtual Status Cancel()
Definition: AIAct.cs:291
Status status
Definition: AIAct.cs:16
new Chara owner
Definition: AIAct.cs:14
Status
Definition: AIAct.cs:8
Status DoWait(int count=1)
Definition: AIAct.cs:532
Status DoProgress()
Definition: AIAct.cs:517
Status DoGoto(Point pos, int dist=0, bool ignoreConnection=false, Func< Status > _onChildFail=null)
Definition: AIAct.cs:432
Status Restart()
Definition: AIAct.cs:237
int progress
Definition: AIProgress.cs:5
override int MaxProgress
Definition: AI_Fish.cs:14
override bool ShowProgress
Definition: AI_Fish.cs:12
override void OnProgressComplete()
Definition: AI_Fish.cs:78
override int RightHand
Definition: AI_Fish.cs:18
override void OnProgress()
Definition: AI_Fish.cs:36
override int LeftHand
Definition: AI_Fish.cs:16
override void OnStart()
Definition: AI_Fish.cs:20
override int MaxRestart
Definition: AI_Fish.cs:166
override bool CanPerform()
Definition: AI_Fish.cs:175
static Point GetFishingPoint(Point p)
Definition: AI_Fish.cs:272
override AIProgress CreateProgress()
Definition: AI_Fish.cs:180
override bool CanManualCancel()
Definition: AI_Fish.cs:170
static bool shouldCancel
Definition: AI_Fish.cs:164
static Thing Makefish(Chara c)
Definition: AI_Fish.cs:293
override IEnumerable< Status > Run()
Definition: AI_Fish.cs:188
Point pos
Definition: AI_Fish.cs:162
Definition: ACT.cs:62
static Point TP
Definition: ACT.cs:81
void PlayAnime(AnimeID id, bool force)
void SetTier(int a, bool setTraits=true)
Definition: Card.cs:3616
bool isDestroyed
Definition: Card.cs:71
bool IsPCFactionOrMinion
Definition: Card.cs:2172
int tier
Definition: Card.cs:394
ElementContainerCard elements
Definition: Card.cs:37
string id
Definition: Card.cs:31
int ChildrenWeight
Definition: Card.cs:1913
bool HasElement(int ele, int req=1)
Definition: Card.cs:5395
SoundSource PlaySound(string id, float v=1f, bool spatial=true)
Definition: Card.cs:5585
Thing Tool
Definition: Card.cs:2310
Fov fov
Definition: Card.cs:53
Thing SetNum(int a)
Definition: Card.cs:3286
virtual void SetBlessedState(BlessedState s)
Definition: Card.cs:3642
Point pos
Definition: Card.cs:55
Effect PlayEffect(string id, bool useRenderPos=true, float range=0f, Vector3 fix=default(Vector3))
Definition: Card.cs:5619
void Destroy()
Definition: Card.cs:4680
ThingContainer things
Definition: Card.cs:34
int Evalue(int ele)
Definition: Card.cs:2471
int Dist(Card c)
Definition: Card.cs:7025
int ChildrenAndSelfWeight
Definition: Card.cs:1941
int Num
Definition: Card.cs:154
void ModNum(int a, bool notify=true)
Definition: Card.cs:3306
CardRenderer renderer
Definition: Card.cs:57
void Say(string lang, string ref1=null, string ref2=null)
Definition: Card.cs:6232
bool IsTopWaterAndNoSnow
Definition: Cell.cs:712
Definition: Chara.cs:10
void TryPickGroundItem()
Definition: Chara.cs:4058
override bool IsPC
Definition: Chara.cs:602
override bool IsPCParty
Definition: Chara.cs:605
override int WeightLimit
Definition: Chara.cs:700
override bool IsPCFaction
Definition: Chara.cs:661
void ClearInventory(ClearInventoryType type)
Definition: Chara.cs:7866
Stats stamina
Definition: Chara.cs:960
override void LookAt(Card c)
Definition: Chara.cs:3238
Thing Pick(Thing t, bool msg=true, bool tryStack=true)
Definition: Chara.cs:3940
bool enable
Definition: CoreDebug.cs:285
Definition: EClass.cs:5
static Game game
Definition: EClass.cs:8
static int curve(int a, int start, int step, int rate=75)
Definition: EClass.cs:63
static int rnd(int a)
Definition: EClass.cs:58
static Zone _zone
Definition: EClass.cs:20
static FactionBranch Branch
Definition: EClass.cs:22
static Player player
Definition: EClass.cs:12
static Chara pc
Definition: EClass.cs:14
static CoreDebug debug
Definition: EClass.cs:48
Definition: Effect.cs:7
static Effect Get(Effect original)
Definition: Effect.cs:85
void Play(float delay, Point from, float fixY=0f, Point to=null, Sprite sprite=null)
Definition: Effect.cs:100
void ModExp(int ele, int a, bool chain=false)
int Evalue(int ele)
List< Point > ListPoints()
Definition: Fov.cs:114
ConfigPreference preference
Definition: Game.cs:96
Config config
Definition: Game.cs:215
Definition: Msg.cs:5
static string Say(string idLang, string ref1, string ref2=null, string ref3=null, string ref4=null)
Definition: Msg.cs:58
int days
Definition: Player.cs:68
Stats stats
Definition: Player.cs:832
int fished
Definition: Player.cs:784
void TryEquipBait()
Definition: Player.cs:2076
Thing eqBait
Definition: Player.cs:922
Definition: Point.cs:9
static Point shared
Definition: Point.cs:20
static Point Invalid
Definition: Point.cs:28
Point Copy()
Definition: Point.cs:479
Point Set(int _x, int _z)
Definition: Point.cs:491
int x
Definition: Point.cs:36
int z
Definition: Point.cs:39
SoundSource PlaySound(string id, bool synced=true, float v=1f, bool spatial=true)
Definition: Point.cs:1229
bool IsValid
Definition: Point.cs:88
Cell cell
Definition: Point.cs:51
Definition: Rand.cs:4
static void SetSeed(int a=-1)
Definition: Rand.cs:37
override int GetPhase()
Definition: StatsBurden.cs:17
virtual void Mod(int a)
Definition: Stats.cs:135
static TargetTypeGround Ground
Definition: TargetType.cs:15
List< Thing > List(Func< Thing, bool > func, bool onlyAccessible=false)
bool IsFull(int y=0)
static Thing Create(string id, int idMat=-1, int lv=-1)
Definition: ThingGen.cs:53
Definition: Thing.cs:8
SourceThing.Row source
Definition: Thing.cs:11
override int ContentLv
Definition: Zone.cs:95
virtual bool IsUserZone
Definition: Zone.cs:264
Card AddCard(Card t, Point point)
Definition: Zone.cs:1893