Elin Modding Docs Doc
Loading...
Searching...
No Matches
TaskHarvest.cs
1using System;
2using System.Runtime.CompilerServices;
3using UnityEngine;
4
5// Token: 0x02000258 RID: 600
7{
8 // Token: 0x1700047F RID: 1151
9 // (get) Token: 0x060010C9 RID: 4297 RVA: 0x00074B32 File Offset: 0x00072D32
10 public bool IsObj
11 {
12 get
13 {
14 return this.mode == BaseTaskHarvest.HarvestType.Obj;
15 }
16 }
17
18 // Token: 0x17000480 RID: 1152
19 // (get) Token: 0x060010CA RID: 4298 RVA: 0x00074B40 File Offset: 0x00072D40
20 public bool IsReapSeed
21 {
22 get
23 {
24 return this.IsObj && this.CanReapSeed && this.owner.Tool != null && (this.owner.Tool.trait is TraitToolSickle || this.owner.Tool.category.IsChildOf("scythe"));
25 }
26 }
27
28 // Token: 0x17000481 RID: 1153
29 // (get) Token: 0x060010CB RID: 4299 RVA: 0x00074B9F File Offset: 0x00072D9F
30 public override BaseTaskHarvest.HarvestType harvestType
31 {
32 get
33 {
34 return this.mode;
35 }
36 }
37
38 // Token: 0x17000482 RID: 1154
39 // (get) Token: 0x060010CC RID: 4300 RVA: 0x00074BA7 File Offset: 0x00072DA7
40 public override int RightHand
41 {
42 get
43 {
44 return 1005;
45 }
46 }
47
48 // Token: 0x17000483 RID: 1155
49 // (get) Token: 0x060010CD RID: 4301 RVA: 0x00074BAE File Offset: 0x00072DAE
50 public override int destDist
51 {
52 get
53 {
54 return 1;
55 }
56 }
57
58 // Token: 0x17000484 RID: 1156
59 // (get) Token: 0x060010CE RID: 4302 RVA: 0x00074BB1 File Offset: 0x00072DB1
60 public override bool IsGrowth
61 {
62 get
63 {
64 return this.pos.growth != null;
65 }
66 }
67
68 // Token: 0x17000485 RID: 1157
69 // (get) Token: 0x060010CF RID: 4303 RVA: 0x00074BC4 File Offset: 0x00072DC4
70 public override bool IsHostileAct
71 {
72 get
73 {
74 if (!this.wasCrime)
75 {
76 if (this.mode == BaseTaskHarvest.HarvestType.Disassemble)
77 {
78 Thing target = this.target;
79 if (target != null && target.isNPCProperty)
80 {
81 return true;
82 }
83 }
84 return this.mode == BaseTaskHarvest.HarvestType.Obj && (this.pos.sourceObj.ContainsTag("crime") || (this.pos.growth != null && this.pos.growth.IsCrimeToHarvest && !(EClass._zone is Zone_Harvest)));
85 }
86 return true;
87 }
88 }
89
90 // Token: 0x060010D0 RID: 4304 RVA: 0x00074C4D File Offset: 0x00072E4D
91 public override bool CanManualCancel()
92 {
93 return true;
94 }
95
96 // Token: 0x060010D1 RID: 4305 RVA: 0x00074C50 File Offset: 0x00072E50
97 public override string GetBaseText(string str)
98 {
99 if (this.IsReapSeed)
100 {
101 return "TaskHarvestSeed".lang();
102 }
103 if (this.mode == BaseTaskHarvest.HarvestType.Disassemble)
104 {
105 return (this.HaveHarvestThing() ? "TaskDisassemble" : "TaskDisassemble_destroy").lang();
106 }
107 if (!base.IsHarvest)
108 {
109 return base.GetBaseText(str);
110 }
111 return "actHarvest".lang();
112 }
113
114 // Token: 0x060010D2 RID: 4306 RVA: 0x00074CAD File Offset: 0x00072EAD
115 public override string GetTextSmall(Card c)
116 {
117 if (this.IsObj)
118 {
119 return base.GetTextSmall(c);
120 }
121 if (this.target == null)
122 {
123 return "";
124 }
125 return this.target.Name;
126 }
127
128 // Token: 0x060010D3 RID: 4307 RVA: 0x00074CD8 File Offset: 0x00072ED8
129 public static TaskHarvest TryGetAct(Chara c, Point p)
130 {
131 TaskHarvest.<>c__DisplayClass20_0 CS$<>8__locals1;
132 CS$<>8__locals1.p = p;
133 CS$<>8__locals1.t = c.Tool;
134 CS$<>8__locals1.hasTool = (CS$<>8__locals1.t != null && (CS$<>8__locals1.t.HasElement(225, 1) || CS$<>8__locals1.t.HasElement(220, 1)));
135 CS$<>8__locals1.hasDiggingTool = (CS$<>8__locals1.t != null && CS$<>8__locals1.t.HasElement(230, 1));
136 if (CS$<>8__locals1.t != null)
137 {
138 if (CS$<>8__locals1.t.trait is TraitToolWaterCan)
139 {
140 return null;
141 }
142 if (CS$<>8__locals1.t.trait is TraitToolMusic)
143 {
144 return null;
145 }
146 if (CS$<>8__locals1.t.trait is TraitToolSickle && !CS$<>8__locals1.p.cell.CanReapSeed())
147 {
148 return null;
149 }
150 }
151 if (CS$<>8__locals1.p.HasObj && TaskHarvest.<TryGetAct>g__IsValidTarget|20_0(CS$<>8__locals1.p.sourceObj.reqHarvest, ref CS$<>8__locals1))
152 {
153 return new TaskHarvest
154 {
155 pos = CS$<>8__locals1.p.Copy()
156 };
157 }
158 if (CS$<>8__locals1.p.HasThing)
159 {
160 for (int i = CS$<>8__locals1.p.Things.Count - 1; i >= 0; i--)
161 {
162 CS$<>8__locals1.t = CS$<>8__locals1.p.Things[i];
163 if (CS$<>8__locals1.t.trait.ReqHarvest != null && TaskHarvest.<TryGetAct>g__IsValidTarget|20_0(CS$<>8__locals1.t.trait.ReqHarvest.Split(',', StringSplitOptions.None), ref CS$<>8__locals1))
164 {
165 return new TaskHarvest
166 {
167 pos = CS$<>8__locals1.p.Copy(),
168 mode = BaseTaskHarvest.HarvestType.Thing,
169 target = CS$<>8__locals1.t
170 };
171 }
172 }
173 for (int j = CS$<>8__locals1.p.Things.Count - 1; j >= 0; j--)
174 {
175 CS$<>8__locals1.t = CS$<>8__locals1.p.Things[j];
176 if (!CS$<>8__locals1.t.isHidden && !CS$<>8__locals1.t.isMasked && CS$<>8__locals1.t.trait.CanBeDisassembled)
177 {
178 Thing tool = c.Tool;
179 if (((tool != null) ? tool.trait : null) is TraitToolHammer)
180 {
181 return new TaskHarvest
182 {
183 pos = CS$<>8__locals1.p.Copy(),
184 mode = BaseTaskHarvest.HarvestType.Disassemble,
185 target = CS$<>8__locals1.t
186 };
187 }
188 }
189 }
190 }
191 return null;
192 }
193
194 // Token: 0x060010D4 RID: 4308 RVA: 0x00074F38 File Offset: 0x00073138
195 public override bool CanProgress()
196 {
197 if (this.IsObj)
198 {
199 base.SetTarget(this.owner ?? EClass.pc, null);
200 return base.CanProgress() && this.pos.HasObj;
201 }
202 return this.target != null && this.target.ExistsOnMap && base.CanProgress();
203 }
204
205 // Token: 0x060010D5 RID: 4309 RVA: 0x00074F98 File Offset: 0x00073198
206 public override HitResult GetHitResult()
207 {
208 if (this.IsObj)
209 {
210 if (base.IsHarvest)
211 {
212 return HitResult.Valid;
213 }
214 if (this.pos.HasObj)
215 {
216 return HitResult.Valid;
217 }
218 if (this.pos.HasDecal && EClass.debug.godBuild && BuildMenu.Instance)
219 {
220 return HitResult.Valid;
221 }
222 return HitResult.Default;
223 }
224 else
225 {
226 if (this.target == null || !this.target.ExistsOnMap)
227 {
228 return HitResult.Default;
229 }
230 return HitResult.Valid;
231 }
232 }
233
234 // Token: 0x060010D6 RID: 4310 RVA: 0x00075008 File Offset: 0x00073208
235 public override void OnCreateProgress(Progress_Custom p)
236 {
237 base.SetTarget(this.owner, null);
238 string n = this.IsObj ? this.pos.cell.GetObjName() : this.target.Name;
239 SourceMaterial.Row mat = this.IsObj ? this.pos.cell.matObj : this.target.material;
240 GrowSystem growth = this.pos.growth;
241 float num = base.IsHarvest ? 0.5f : ((!this.IsObj) ? 1f : ((growth != null) ? growth.MtpProgress : 1f));
242 int exp = 50;
243 this.wasReapSeed = this.IsReapSeed;
244 this.wasCrime = this.IsHostileAct;
245 p.textHint = n;
246 p.maxProgress = (int)((float)(this.maxProgress * 150) * num / 100f);
247 p.interval = 1;
248 p.onProgressBegin = delegate()
249 {
250 if (this.IsTooHard)
251 {
252 this.owner.Say((this.mode == BaseTaskHarvest.HarvestType.Disassemble) ? "tooHardToDisassemble" : "tooHardToHarvest", this.owner, n, null);
253 p.Cancel();
254 return;
255 }
256 if (this.mode == BaseTaskHarvest.HarvestType.Disassemble)
257 {
258 this.owner.Say("disassemble_start", this.owner, this.owner.Tool, n, null);
259 return;
260 }
261 if (this.owner.Tool == null)
262 {
263 this.owner.Say("harvestHand_start", this.owner, n, null);
264 return;
265 }
266 this.owner.Say("harvest_start", this.owner, this.owner.Tool, n, null);
267 };
268 p.onProgress = delegate(Progress_Custom _p)
269 {
270 this.owner.LookAt(this.pos);
271 this.owner.renderer.NextFrame();
272 if (_p.progress % 2 == 0)
273 {
274 if (this.IsObj)
275 {
276 if (this.IsHarvest && growth != null)
277 {
278 this.owner.PlaySound(growth.GetSoundProgress(), 1f, true);
279 if (growth.AnimeProgress != AnimeID.None)
280 {
281 this.pos.Animate(growth.AnimeProgress, false);
282 }
283 return;
284 }
285 this.pos.Animate(AnimeID.HitObj, false);
286 }
287 else
288 {
289 this.target.PlayAnime(AnimeID.HitObj, false);
290 }
291 this.pos.PlaySound(mat.GetSoundImpact(null), true, 1f, true);
292 mat.PlayHitEffect(this.pos);
293 mat.AddBlood(this.pos, 1);
294 this.effectFrame += this.maxProgress / 4 + 1;
295 if (EClass._zone.IsCrime(this.owner, this))
296 {
297 this.owner.pos.TryWitnessCrime(this.owner, null, 4, null);
298 }
299 }
300 };
301 p.onProgressComplete = delegate()
302 {
303 string idRecipe = this.IsObj ? this.pos.sourceObj.RecipeID : ((this.target != null) ? this.target.source.RecipeID : "");
304 SourceBacker.Row backerObj = EClass._map.GetBackerObj(this.pos);
305 int num2 = (EClass.rnd(3) == 0) ? 0 : 1;
306 if (this.IsObj)
307 {
308 SourceObj.Row sourceObj = this.pos.sourceObj;
309 bool flag = false;
310 if (this.difficulty >= 0 && EClass.rnd(6) == 0)
311 {
312 flag = true;
313 }
314 if (this.difficulty >= 2 && EClass.rnd(3) == 0)
315 {
316 flag = true;
317 }
318 if (flag && growth != null)
319 {
320 growth.OnHitFail(this.owner);
321 }
322 if (EClass._zone is Zone_Harvest && !this.IsHarvest && this.pos.IsFarmField)
323 {
324 EClass._map.DestroyObj(this.pos);
325 this.pos.SetObj(0, 1, 0);
326 }
327 else
328 {
329 if (this.IsHarvest && !this.IsReapSeed)
330 {
331 this.pos.growth.Harvest(this.owner);
332 }
333 else if (growth != null && !this.IsReapSeed)
334 {
335 growth.OnProgressComplete(this.owner);
336 }
337 else
338 {
339 EClass._map.MineObj(this.pos, this, null);
340 }
341 if (sourceObj.alias == "mound")
342 {
343 if (EClass.rnd(7) == 0)
344 {
345 EClass._zone.AddThing("plat", this.pos);
346 }
347 else if (EClass.rnd(3) == 0)
348 {
349 EClass._zone.AddCard(ThingGen.CreateFromCategory("junk", -1), this.pos);
350 }
351 else
352 {
353 EClass._zone.AddThing("bone", this.pos);
354 }
355 }
356 }
357 }
358 else
359 {
360 exp = this.target.Num * 5;
361 num2 = this.target.Num / 3 + EClass.rnd(this.target.Num / 3 + 2);
362 this.HarvestThing();
363 }
364 if (EClass._zone.IsCrime(this.owner, this) && EClass.rnd(3) != 0)
365 {
366 EClass.player.ModKarma(-1);
367 }
368 if (backerObj != null)
369 {
370 if (backerObj != null && !backerObj.loot.IsEmpty() && !EClass.player.doneBackers.Contains(backerObj.id))
371 {
372 if (EClass.sources.cards.map.ContainsKey(backerObj.loot))
373 {
374 Thing thing = ThingGen.Create(backerObj.loot, -1, -1);
375 int id = backerObj.id;
376 if (id <= 2531)
377 {
378 if (id <= 867)
379 {
380 if (id == 471)
381 {
382 goto IL_4BC;
383 }
384 if (id != 490 && id != 867)
385 {
386 goto IL_4F7;
387 }
388 }
389 else if (id <= 1828)
390 {
391 if (id == 1027)
392 {
393 thing.ChangeMaterial(25);
394 thing.SetBlessedState(BlessedState.Doomed);
395 thing.ChangeRarity(Rarity.Legendary);
396 goto IL_4F7;
397 }
398 if (id != 1828)
399 {
400 goto IL_4F7;
401 }
402 goto IL_4BC;
403 }
404 else
405 {
406 if (id == 1854)
407 {
408 thing.decay = 10000;
409 goto IL_4F7;
410 }
411 if (id != 2531)
412 {
413 goto IL_4F7;
414 }
415 thing.MakeFoodFrom("putty");
416 goto IL_4F7;
417 }
418 }
419 else if (id <= 4788)
420 {
421 if (id == 4565)
422 {
423 EClass._zone.AddThing("rod", this.pos);
424 EClass._zone.AddThing("money", this.pos).SetNum(121);
425 goto IL_4F7;
426 }
427 if (id == 4615)
428 {
429 thing.ChangeMaterial("meat");
430 goto IL_4F7;
431 }
432 if (id != 4788)
433 {
434 goto IL_4F7;
435 }
436 thing.SetEncLv(1);
437 goto IL_4F7;
438 }
439 else if (id <= 5367)
440 {
441 if (id != 5160)
442 {
443 if (id != 5367)
444 {
445 goto IL_4F7;
446 }
447 thing.Dye("obsidian");
448 goto IL_4F7;
449 }
450 }
451 else
452 {
453 if (id == 5529)
454 {
455 thing.ChangeMaterial(25);
456 goto IL_4F7;
457 }
458 if (id != 5765)
459 {
460 goto IL_4F7;
461 }
462 goto IL_4BC;
463 }
464 thing.c_charges = 0;
465 thing.c_priceFix = -100;
466 goto IL_4F7;
467 IL_4BC:
468 thing.SetBlessedState(BlessedState.Cursed);
469 IL_4F7:
470 EClass._zone.AddCard(thing, this.pos);
471 }
472 else
473 {
474 Debug.LogError("exception: Backer Loot not valid:" + backerObj.id.ToString() + "/" + backerObj.loot);
475 }
476 Debug.Log(string.Concat(new string[]
477 {
478 backerObj.id.ToString(),
479 "/",
480 backerObj.Name,
481 "/",
482 backerObj.loot
483 }));
484 }
485 EClass.player.doneBackers.Add(backerObj.id);
486 if (!backerObj.Text.IsEmpty() && EClass.core.config.backer.Show(backerObj))
487 {
488 bool flag2 = backerObj.type == 1;
489 Msg.Say(flag2 ? "backerRemain_read" : "backerTree_read");
490 Msg.Say(flag2 ? "backerRemain" : "backerTree", backerObj.Text, null, null, null);
491 }
492 }
493 if (this.owner.IsPC)
494 {
495 EClass.pc.CalculateFOV();
496 }
497 this.owner.elements.ModExp(this.idEle, exp, false);
498 if (this.wasReapSeed)
499 {
500 this.owner.ModExp(286, 20);
501 }
502 this.owner.stamina.Mod(-num2);
503 if (this.owner == null)
504 {
505 return;
506 }
507 if (this.owner.IsPC)
508 {
509 EClass.player.recipes.ComeUpWithRecipe(idRecipe, 30);
510 }
511 };
512 }
513
514 // Token: 0x060010D7 RID: 4311 RVA: 0x0007517C File Offset: 0x0007337C
515 public bool HaveHarvestThing()
516 {
517 string text = this.target.source.components[0].Split('|', StringSplitOptions.None)[0].Split('/', StringSplitOptions.None)[0];
518 if (this.target.IsEquipmentOrRanged || this.target.IsAmmo)
519 {
520 text = this.target.material.thing;
521 }
522 return !(this.target.trait is TraitGrave) && !text.Contains("$") && !text.Contains("#") && !text.Contains("@") && !text.Contains("-") && !(text == this.target.id) && EClass.sources.cards.map.ContainsKey(text) && !this.target.source.components.IsEmpty();
523 }
524
525 // Token: 0x060010D8 RID: 4312 RVA: 0x0007526C File Offset: 0x0007346C
526 public void HarvestThing()
527 {
528 string text = this.target.source.components[0].Split('|', StringSplitOptions.None)[0].Split('/', StringSplitOptions.None)[0];
529 if (this.target.IsEquipmentOrRanged || this.target.IsAmmo)
530 {
531 text = this.target.material.thing;
532 }
533 float num = (float)this.target.Num;
534 float num2 = 1.1f;
535 if (text == "log" || text == "rock")
536 {
537 num2 = 2.2f;
538 }
539 if (this.target.trait is TraitAmmo)
540 {
541 num2 = 50f;
542 }
543 float num3 = num % num2;
544 num /= num2;
545 if (num3 > 0f && EClass.rndf(num2 - num3 + 1f) < 1f)
546 {
547 num += 1f;
548 }
549 if (this.target.sockets != null)
550 {
551 this.target.EjectSockets();
552 }
553 int decay = this.target.decay;
554 int lv = this.target.LV;
555 this.target.Die(null, null, AttackSource.None);
556 if (this.target.trait is TraitGrave)
557 {
558 return;
559 }
560 if (text.Contains("$") || text.Contains("#") || text.Contains("@") || text.Contains("-"))
561 {
562 return;
563 }
564 if (text == this.target.id || !EClass.sources.cards.map.ContainsKey(text))
565 {
566 return;
567 }
568 if ((int)num <= 0 || this.target.source.components.IsEmpty())
569 {
570 return;
571 }
572 if (this.target.isCopy)
573 {
574 text = "ash3";
575 }
577 {
578 fixedQuality = true
579 });
580 Thing thing = ThingGen.Create(text, 1, Mathf.Max(1, lv * 2 / 3));
581 if (thing != null)
582 {
583 thing.SetNum((int)num);
584 thing.ChangeMaterial(this.target.material);
585 thing.decay = decay;
586 if (thing.IsDecayed && thing.IsFood)
587 {
588 thing.elements.SetBase(73, -10, 0);
589 }
590 EClass._map.TrySmoothPick(this.pos.IsBlocked ? this.owner.pos : this.pos, thing, EClass.pc);
591 }
592 }
593
594 // Token: 0x060010DA RID: 4314 RVA: 0x000754DC File Offset: 0x000736DC
595 [CompilerGenerated]
596 internal static bool <TryGetAct>g__IsValidTarget|20_0(string[] raw, ref TaskHarvest.<>c__DisplayClass20_0 A_1)
597 {
598 if (raw[0] == "digging")
599 {
600 return A_1.hasDiggingTool;
601 }
602 bool flag = A_1.p.cell.CanHarvest();
603 int num = flag ? 250 : EClass.sources.elements.alias[raw[0]].id;
604 bool flag2 = !flag && num != 250;
605 return (flag2 || A_1.t == null || A_1.t.trait.CanHarvest) && (!flag2 | A_1.hasTool);
606 }
607
608 // Token: 0x04000DCD RID: 3533
609 public bool wasReapSeed;
610
611 // Token: 0x04000DCE RID: 3534
612 public bool wasCrime;
613
614 // Token: 0x04000DCF RID: 3535
615 public BaseTaskHarvest.HarvestType mode = BaseTaskHarvest.HarvestType.Obj;
616}
Definition Card.cs:13
Definition Chara.cs:12
Definition Msg.cs:7
Definition Point.cs:11
Definition Thing.cs:10