Elin Decompiled Documentation EA 23.181 Nightly
Loading...
Searching...
No Matches
TaskHarvest.cs
Go to the documentation of this file.
1using UnityEngine;
2
4{
5 public bool wasReapSeed;
6
7 public bool wasCrime;
8
9 public bool harvestingCrop;
10
12
13 public bool IsObj => mode == HarvestType.Obj;
14
15 public bool IsReapSeed
16 {
17 get
18 {
19 if (IsObj && CanReapSeed && owner.Tool != null)
20 {
22 {
23 return owner.Tool.category.IsChildOf("scythe");
24 }
25 return true;
26 }
27 return false;
28 }
29 }
30
31 public override HarvestType harvestType => mode;
32
33 public override int RightHand => 1005;
34
35 public override int destDist => 1;
36
37 public override bool IsGrowth => pos.growth != null;
38
39 public override bool IsHostileAct
40 {
41 get
42 {
43 if (!wasCrime)
44 {
45 if (mode == HarvestType.Disassemble)
46 {
47 Thing thing = target;
48 if (thing != null && thing.isNPCProperty)
49 {
50 goto IL_007b;
51 }
52 }
53 if (mode == HarvestType.Obj)
54 {
55 if (!pos.sourceObj.ContainsTag("crime"))
56 {
57 if (pos.growth != null && pos.growth.IsCrimeToHarvest)
58 {
59 return !(EClass._zone is Zone_Harvest);
60 }
61 return false;
62 }
63 return true;
64 }
65 return false;
66 }
67 goto IL_007b;
68 IL_007b:
69 return true;
70 }
71 }
72
73 public override bool CanManualCancel()
74 {
75 return true;
76 }
77
78 public override string GetBaseText(string str)
79 {
80 if (IsReapSeed)
81 {
82 return "TaskHarvestSeed".lang();
83 }
84 if (mode == HarvestType.Disassemble)
85 {
86 string text = (HaveHarvestThing() ? "TaskDisassemble" : "TaskDisassemble_destroy").lang();
87 string idRecipe = (IsObj ? pos.sourceObj.RecipeID : ((target != null) ? target.source.RecipeID : ""));
89 {
90 text = text + " " + "TaskDisassemble_newrecipe".lang();
91 }
92 return text;
93 }
94 if (!base.IsHarvest)
95 {
96 return base.GetBaseText(str);
97 }
98 return "actHarvest".lang();
99 }
100
101 public override string GetTextSmall(Card c)
102 {
103 if (IsObj)
104 {
105 return base.GetTextSmall(c);
106 }
107 if (target == null)
108 {
109 return "";
110 }
111 return target.Name;
112 }
113
114 public static TaskHarvest TryGetAct(Chara c, Point p)
115 {
116 Thing t = c.Tool;
117 bool hasTool = t != null && (t.HasElement(225) || t.HasElement(220));
118 bool hasDiggingTool = t != null && t.HasElement(230);
119 if (t != null)
120 {
121 if (t.trait is TraitToolBrush)
122 {
123 return null;
124 }
125 if (t.trait is TraitToolShears)
126 {
127 return null;
128 }
129 if (t.trait is TraitToolWaterCan)
130 {
131 return null;
132 }
133 if (t.trait is TraitToolMusic)
134 {
135 return null;
136 }
137 if (t.trait is TraitToolSickle && !p.cell.CanReapSeed())
138 {
139 return null;
140 }
141 }
142 if (p.HasObj && IsValidTarget(p.sourceObj.reqHarvest))
143 {
144 return new TaskHarvest
145 {
146 pos = p.Copy()
147 };
148 }
149 if (p.HasThing)
150 {
151 for (int num = p.Things.Count - 1; num >= 0; num--)
152 {
153 t = p.Things[num];
154 if (t.trait.ReqHarvest != null && IsValidTarget(t.trait.ReqHarvest.Split(',')))
155 {
156 return new TaskHarvest
157 {
158 pos = p.Copy(),
159 mode = HarvestType.Thing,
160 target = t
161 };
162 }
163 }
164 for (int num2 = p.Things.Count - 1; num2 >= 0; num2--)
165 {
166 t = p.Things[num2];
168 {
169 return new TaskHarvest
170 {
171 pos = p.Copy(),
172 mode = HarvestType.Disassemble,
173 target = t
174 };
175 }
176 }
177 }
178 return null;
179 bool IsValidTarget(string[] raw)
180 {
181 if (raw[0] == "digging")
182 {
183 return hasDiggingTool;
184 }
185 bool num3 = p.cell.CanHarvest();
186 int num4 = (num3 ? 250 : EClass.sources.elements.alias[raw[0]].id);
187 bool flag = ((!num3 && num4 != 250) ? true : false);
188 if (!flag && t != null && !t.trait.CanHarvest)
189 {
190 return false;
191 }
192 return !flag || hasTool;
193 }
194 }
195
196 public override bool CanProgress()
197 {
198 if (tool != null && tool.trait is TraitToolSickle && !pos.cell.CanReapSeed())
199 {
200 return false;
201 }
202 if (IsObj)
203 {
205 if (base.CanProgress())
206 {
207 return pos.HasObj;
208 }
209 return false;
210 }
211 if (target == null || !target.ExistsOnMap)
212 {
213 return false;
214 }
215 return base.CanProgress();
216 }
217
218 public override HitResult GetHitResult()
219 {
220 if (harvestingCrop && !base.IsHarvest)
221 {
222 return HitResult.Default;
223 }
224 if (IsObj)
225 {
226 if (base.IsHarvest)
227 {
228 return HitResult.Valid;
229 }
230 if (pos.HasObj)
231 {
232 return HitResult.Valid;
233 }
235 {
236 return HitResult.Valid;
237 }
238 return HitResult.Default;
239 }
240 if (target == null || !target.ExistsOnMap)
241 {
242 return HitResult.Default;
243 }
244 return HitResult.Valid;
245 }
246
247 public override void OnCreateProgress(Progress_Custom p)
248 {
250 string i = (IsObj ? pos.cell.GetObjName() : target.Name);
251 SourceMaterial.Row mat = (IsObj ? pos.cell.matObj : target.material);
252 GrowSystem growth = pos.growth;
253 float num = (base.IsHarvest ? 0.5f : ((!IsObj) ? 1f : ((growth != null) ? growth.MtpProgress : 1f)));
254 int exp = 50;
257 p.textHint = i;
258 p.maxProgress = (int)((float)(maxProgress * 150) * num / 100f);
259 p.interval = 1;
260 p.onProgressBegin = delegate
261 {
262 if (TryGetAct(owner, pos) == null)
263 {
264 p.Cancel();
265 }
266 else if (base.IsTooHard)
267 {
268 owner.Say((mode == HarvestType.Disassemble) ? "tooHardToDisassemble" : "tooHardToHarvest", owner, i);
269 p.Cancel();
270 }
271 else if (mode == HarvestType.Disassemble)
272 {
273 owner.Say("disassemble_start", owner, owner.Tool, i);
274 }
275 else if (owner.Tool == null)
276 {
277 owner.Say("harvestHand_start", owner, i);
278 }
279 else
280 {
281 owner.Say("harvest_start", owner, owner.Tool, i);
282 }
283 };
284 p.onProgress = delegate(Progress_Custom _p)
285 {
288 if (_p.progress % 2 == 0)
289 {
290 if (IsObj)
291 {
292 if (base.IsHarvest && growth != null)
293 {
295 if (growth.AnimeProgress != 0)
296 {
297 pos.Animate(growth.AnimeProgress);
298 }
299 return;
300 }
301 pos.Animate(AnimeID.HitObj);
302 }
303 else
304 {
305 target.PlayAnime(AnimeID.HitObj);
306 }
308 mat.PlayHitEffect(pos);
309 mat.AddBlood(pos);
310 effectFrame += maxProgress / 4 + 1;
311 if (EClass._zone.IsCrime(owner, this))
312 {
314 }
315 }
316 };
317 p.onProgressComplete = delegate
318 {
319 string idRecipe = (IsObj ? pos.sourceObj.RecipeID : ((target != null) ? target.source.RecipeID : ""));
321 int num2 = ((EClass.rnd(3) != 0) ? 1 : 0);
322 if (IsObj)
323 {
324 SourceObj.Row sourceObj = pos.sourceObj;
325 bool flag = false;
326 if (difficulty >= 0 && EClass.rnd(6) == 0)
327 {
328 flag = true;
329 }
330 if (difficulty >= 2 && EClass.rnd(3) == 0)
331 {
332 flag = true;
333 }
334 if (flag && growth != null)
335 {
336 growth.OnHitFail(owner);
337 }
338 if (EClass._zone is Zone_Harvest && !base.IsHarvest && pos.IsFarmField)
339 {
341 pos.SetObj();
342 }
343 else
344 {
345 if (base.IsHarvest && !IsReapSeed)
346 {
347 if (pos.growth.CanHarvest())
348 {
349 harvestingCrop = true;
350 }
352 }
353 else if (growth != null && !IsReapSeed)
354 {
356 }
357 else
358 {
359 EClass._map.MineObj(pos, this);
360 }
361 if (sourceObj.alias == "mound")
362 {
363 if (EClass.rnd(7) == 0)
364 {
365 EClass._zone.AddThing("plat", pos);
366 }
367 else if (EClass.rnd(3) == 0)
368 {
370 }
371 else
372 {
373 EClass._zone.AddThing("bone", pos);
374 }
375 }
376 }
377 }
378 else
379 {
380 exp = target.Num * 5;
381 num2 = target.Num / 3 + EClass.rnd(target.Num / 3 + 2);
383 {
384 HarvestThing();
385 }
386 }
387 if (EClass._zone.IsCrime(owner, this) && EClass.rnd(3) != 0)
388 {
390 }
391 if (backerObj != null)
392 {
393 if (backerObj != null && !backerObj.loot.IsEmpty() && !EClass.player.doneBackers.Contains(backerObj.id))
394 {
395 if (EClass.sources.cards.map.ContainsKey(backerObj.loot))
396 {
397 Thing thing = ThingGen.Create(backerObj.loot);
398 switch (backerObj.id)
399 {
400 case 490:
401 case 867:
402 case 5160:
403 thing.c_charges = 0;
404 thing.c_priceFix = -100;
405 break;
406 case 2531:
407 thing.MakeFoodFrom("cloud_electric");
408 break;
409 case 1027:
410 thing.ChangeMaterial(25);
411 thing.SetBlessedState(BlessedState.Doomed);
412 thing.ChangeRarity(Rarity.Legendary);
413 break;
414 case 4565:
415 EClass._zone.AddThing("rod", pos);
416 EClass._zone.AddThing("money", pos).SetNum(121);
417 break;
418 case 5367:
419 thing.Dye("obsidian");
420 break;
421 case 471:
422 case 1828:
423 case 5765:
424 thing.SetBlessedState(BlessedState.Cursed);
425 break;
426 case 5529:
427 thing.ChangeMaterial(25);
428 break;
429 case 1854:
430 thing.decay = 10000;
431 break;
432 case 4788:
433 thing.SetEncLv(1);
434 break;
435 case 4615:
436 thing.ChangeMaterial("meat");
437 break;
438 }
439 EClass._zone.AddCard(thing, pos);
440 }
441 else
442 {
443 Debug.LogError("exception: Backer Loot not valid:" + backerObj.id + "/" + backerObj.loot);
444 }
445 Debug.Log(backerObj.id + "/" + backerObj.Name + "/" + backerObj.loot);
446 }
447 EClass.player.doneBackers.Add(backerObj.id);
448 if (!backerObj.Text.IsEmpty() && EClass.core.config.backer.Show(backerObj))
449 {
450 bool num3 = backerObj.type == 1;
451 Msg.Say(num3 ? "backerRemain_read" : "backerTree_read");
452 Msg.Say(num3 ? "backerRemain" : "backerTree", backerObj.Text);
453 }
454 }
455 if (owner.IsPC)
456 {
458 }
460 if (wasReapSeed)
461 {
462 owner.ModExp(286, 20);
463 }
464 owner.stamina.Mod(-num2);
465 if (owner != null && owner.IsPC)
466 {
468 }
469 };
470 }
471
472 public string GetIdDismantled()
473 {
474 if (target.HasElement(707))
475 {
476 return "fish_slice";
477 }
478 string[] array = target.source.components[0].Split('|');
479 for (int i = 0; i < array.Length; i++)
480 {
481 array[i] = array[i].Split('/')[0];
482 }
483 string result = array[0];
484 if (array.Length > 1)
485 {
486 string category = target.material.category;
487 bool flag = category == "rock" || category == "ore" || category == "gem";
488 if (array[0] == "ingot" && array[1] == "log" && !flag)
489 {
490 result = array[1];
491 }
492 }
494 {
495 result = target.material.thing;
496 }
497 return result;
498 }
499
500 public bool ShouldGenerateDismantled(string dest)
501 {
503 {
504 return false;
505 }
506 if (target.trait is TraitGrave)
507 {
508 return false;
509 }
511 {
512 return false;
513 }
514 if (dest.Contains("$") || dest.Contains("#") || dest.Contains("@") || dest.Contains("-"))
515 {
516 return false;
517 }
518 if (dest == target.id || !EClass.sources.cards.map.ContainsKey(dest))
519 {
520 return false;
521 }
522 if (target.source.components.IsEmpty())
523 {
524 return false;
525 }
526 return true;
527 }
528
529 public bool HaveHarvestThing()
530 {
531 string idDismantled = GetIdDismantled();
532 return ShouldGenerateDismantled(idDismantled);
533 }
534
535 public void HarvestThing()
536 {
537 string text = GetIdDismantled();
538 float num = target.Num;
539 float num2 = 1.0999999f;
540 if (target.trait.CraftNum > 1)
541 {
542 num2 = (float)target.trait.CraftNum * 1.35f;
543 }
544 switch (text)
545 {
546 case "log":
547 case "rock":
548 num2 = 2.1999998f;
549 break;
550 case "fish_slice":
551 num2 = 4.4f;
552 break;
553 }
554 string text2 = target.id;
555 if (text2 == "glass" || text2 == "brick")
556 {
557 num2 = 2.1999998f;
558 }
559 float num3 = num % num2;
560 num /= num2;
561 Debug.Log("num:" + num + " div:" + num3 + " chance:" + num2 + " check:" + (num2 - num3 + 1f));
562 if (num3 > 0f && EClass.rndf(num2 - num3 + 1f) < 1f)
563 {
564 num += 1f;
565 }
566 if (target.sockets != null)
567 {
569 }
570 int decay = target.decay;
571 int lV = target.LV;
572 target.Die(null, EClass.pc);
573 if ((int)num <= 0 || !ShouldGenerateDismantled(text))
574 {
575 return;
576 }
577 if (target.isCopy || target.HasElement(764))
578 {
579 text = "ash3";
580 }
582 {
583 fixedQuality = true
584 });
585 Thing thing = ThingGen.Create(text, 1, Mathf.Max(1, lV * 2 / 3));
586 if (thing == null)
587 {
588 return;
589 }
590 if (EClass._zone.IsUserZone && target.isNPCProperty && (thing.trait is TraitPotionLove || thing.HasTag(CTAG.rareResource)))
591 {
592 Msg.Say("spellbookCrumble", thing);
593 thing.Destroy();
594 return;
595 }
596 thing.SetNum((int)num);
598 thing.decay = decay;
599 if (thing.IsDecayed && thing.IsFood)
600 {
601 thing.elements.SetBase(73, -10);
602 }
604 }
605}
AnimeID
Definition: AnimeID.cs:2
BlessedState
Definition: BlessedState.cs:2
CTAG
Definition: CTAG.cs:2
HitResult
Definition: HitResult.cs:2
Rarity
Definition: Rarity.cs:2
virtual Status Cancel()
Definition: AIAct.cs:291
new Chara owner
Definition: AIAct.cs:14
int progress
Definition: AIProgress.cs:5
virtual bool CanReapSeed
void SetTarget(Chara c, Thing _tool=null)
static BuildMenu Instance
Definition: BuildMenu.cs:77
static void Set(CardBlueprint _bp)
virtual void NextFrame()
Definition: Card.cs:11
bool IsDecayed
Definition: Card.cs:2249
bool isMasked
Definition: Card.cs:576
ElementContainerCard elements
Definition: Card.cs:39
string id
Definition: Card.cs:33
bool isNPCProperty
Definition: Card.cs:540
virtual void Die(Element e=null, Card origin=null, AttackSource attackSource=AttackSource.None, Chara originalTarget=null)
Definition: Card.cs:4782
bool HasElement(int ele, int req=1)
Definition: Card.cs:5637
SourceMaterial.Row material
Definition: Card.cs:2013
SoundSource PlaySound(string id, float v=1f, bool spatial=true)
Definition: Card.cs:5851
Card ChangeMaterial(int idNew, bool ignoreFixedMaterial=false)
Definition: Card.cs:2994
bool isCopy
Definition: Card.cs:864
Thing Tool
Definition: Card.cs:2372
bool IsEquipmentOrRangedOrAmmo
Definition: Card.cs:2192
void CalculateFOV()
Definition: Card.cs:6175
string Name
Definition: Card.cs:2099
bool ExistsOnMap
Definition: Card.cs:2047
void EjectSockets()
Definition: Card.cs:3474
Thing SetNum(int a)
Definition: Card.cs:3393
int decay
Definition: Card.cs:204
bool IsFood
Definition: Card.cs:2137
virtual void SetBlessedState(BlessedState s)
Definition: Card.cs:3787
bool HasTag(CTAG tag)
Definition: Card.cs:2557
Point pos
Definition: Card.cs:57
void Dye(string idMat)
Definition: Card.cs:5707
Trait trait
Definition: Card.cs:51
void SetEncLv(int a)
Definition: Card.cs:3756
Card MakeFoodFrom(string _id)
Definition: Card.cs:5266
void Destroy()
Definition: Card.cs:4849
bool isHidden
Definition: Card.cs:516
void ModExp(string alias, int a)
Definition: Card.cs:2610
int Num
Definition: Card.cs:156
void PlayAnime(AnimeID id, bool force=false)
Definition: Card.cs:5870
SourceCategory.Row category
Definition: Card.cs:2011
virtual void ChangeRarity(Rarity q)
Definition: Card.cs:3812
List< int > sockets
Definition: Card.cs:45
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:6498
bool CanHarvest()
Definition: Cell.cs:1664
string GetObjName()
Definition: Cell.cs:1604
bool CanReapSeed()
Definition: Cell.cs:1669
Definition: Chara.cs:10
override bool IsPC
Definition: Chara.cs:610
Stats stamina
Definition: Chara.cs:1128
override void LookAt(Card c)
Definition: Chara.cs:3454
BackerContentConfig backer
Definition: CoreConfig.cs:606
bool enable
Definition: CoreDebug.cs:285
bool godBuild
Definition: CoreDebug.cs:303
CoreConfig config
Definition: Core.cs:70
Definition: EClass.cs:5
static Game game
Definition: EClass.cs:8
static int rnd(int a)
Definition: EClass.cs:58
static Core core
Definition: EClass.cs:6
static Zone _zone
Definition: EClass.cs:20
static Map _map
Definition: EClass.cs:18
static SourceManager sources
Definition: EClass.cs:42
static float rndf(float a)
Definition: EClass.cs:87
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)
Element SetBase(string alias, int v, int potential=0)
bool disableUsermapBenefit
GamePrincipal principal
Definition: Game.cs:221
bool CanHarvest()
Definition: GrowSystem.cs:501
virtual AnimeID AnimeProgress
Definition: GrowSystem.cs:99
virtual void OnHitFail(Chara c)
Definition: GrowSystem.cs:519
virtual bool IsCrimeToHarvest
Definition: GrowSystem.cs:89
void OnProgressComplete(Chara c)
Definition: GrowSystem.cs:523
virtual string GetSoundProgress()
Definition: GrowSystem.cs:125
void Harvest(Chara c)
Definition: GrowSystem.cs:618
void DestroyObj(Point point)
Definition: Map.cs:1820
void TrySmoothPick(Cell cell, Thing t, Chara c)
Definition: Map.cs:1799
void MineObj(Point point, Task task=null, Chara c=null)
Definition: Map.cs:1835
SourceBacker.Row GetBackerObj(Point p)
Definition: Map.cs:1587
Definition: Msg.cs:5
static string Say(string idLang, string ref1, string ref2=null, string ref3=null, string ref4=null)
Definition: Msg.cs:58
RecipeManager recipes
Definition: Player.cs:1017
void ModKarma(int a)
Definition: Player.cs:2408
HashSet< int > doneBackers
Definition: Player.cs:993
Definition: Point.cs:9
bool HasDecal
Definition: Point.cs:139
void SetObj(int id=0, int value=1, int dir=0)
Definition: Point.cs:908
Point Copy()
Definition: Point.cs:479
bool IsBlocked
Definition: Point.cs:351
List< Thing > Things
Definition: Point.cs:326
bool IsFarmField
Definition: Point.cs:127
SoundSource PlaySound(string id, bool synced=true, float v=1f, bool spatial=true)
Definition: Point.cs:1233
bool HasThing
Definition: Point.cs:239
SourceObj.Row sourceObj
Definition: Point.cs:69
bool TryWitnessCrime(Chara criminal, Chara target=null, int radius=4, Func< Chara, bool > funcWitness=null)
Definition: Point.cs:857
bool HasObj
Definition: Point.cs:137
Cell cell
Definition: Point.cs:51
void Animate(AnimeID id, bool animeBlock=false)
Definition: Point.cs:1282
GrowSystem growth
Definition: Point.cs:77
void ComeUpWithRecipe(string idRecipe, int chanceForRandomRecipe=0)
bool CanCeomUpWithRecipe(string idRecipe)
Dictionary< string, CardRow > map
Definition: SourceCard.cs:8
SourceCard cards
SourceElement elements
string GetSoundImpact(RenderRow c=null)
void AddBlood(Point p, int a=1)
void PlayHitEffect(Point p, int emit=2)
virtual void Mod(int a)
Definition: Stats.cs:135
override bool CanProgress()
Definition: TaskHarvest.cs:196
bool HaveHarvestThing()
Definition: TaskHarvest.cs:529
override string GetTextSmall(Card c)
Definition: TaskHarvest.cs:101
string GetIdDismantled()
Definition: TaskHarvest.cs:472
bool wasReapSeed
Definition: TaskHarvest.cs:5
HarvestType mode
Definition: TaskHarvest.cs:11
bool IsReapSeed
Definition: TaskHarvest.cs:16
override bool IsHostileAct
Definition: TaskHarvest.cs:40
bool harvestingCrop
Definition: TaskHarvest.cs:9
void HarvestThing()
Definition: TaskHarvest.cs:535
bool wasCrime
Definition: TaskHarvest.cs:7
override int destDist
Definition: TaskHarvest.cs:35
static TaskHarvest TryGetAct(Chara c, Point p)
Definition: TaskHarvest.cs:114
override bool IsGrowth
Definition: TaskHarvest.cs:37
override HitResult GetHitResult()
Definition: TaskHarvest.cs:218
override HarvestType harvestType
Definition: TaskHarvest.cs:31
override int RightHand
Definition: TaskHarvest.cs:33
bool ShouldGenerateDismantled(string dest)
Definition: TaskHarvest.cs:500
override string GetBaseText(string str)
Definition: TaskHarvest.cs:78
override void OnCreateProgress(Progress_Custom p)
Definition: TaskHarvest.cs:247
override bool CanManualCancel()
Definition: TaskHarvest.cs:73
Point pos
Definition: TaskPoint.cs:11
static Thing CreateFromCategory(string idCat, int lv=-1)
Definition: ThingGen.cs:75
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
string alias
Definition: TileRow.cs:12
virtual bool CanHarvest
Definition: Trait.cs:91
virtual bool CanBeDisassembled
Definition: Trait.cs:303
virtual string ReqHarvest
Definition: Trait.cs:300
virtual int CraftNum
Definition: Trait.cs:132
Card AddThing(string id, int x, int z)
Definition: Zone.cs:1915
virtual bool IsUserZone
Definition: Zone.cs:266
bool IsCrime(Chara c, Act act)
Definition: Zone.cs:3382
Card AddCard(Card t, Point point)
Definition: Zone.cs:1925