Elin Modding Docs Doc
Loading...
Searching...
No Matches
GameDate.cs
1using System;
2using System.Collections.Generic;
3using System.Runtime.CompilerServices;
4using Newtonsoft.Json;
5using UnityEngine;
6
7// Token: 0x020006F1 RID: 1777
8public class GameDate : Date
9{
10 // Token: 0x060033BC RID: 13244 RVA: 0x00119FC5 File Offset: 0x001181C5
11 public void AdvanceSec(int a)
12 {
13 base.sec += a;
14 if (base.sec >= 60)
15 {
16 this.AdvanceMin(base.sec / 60);
17 base.sec %= 60;
18 }
19 }
20
21 // Token: 0x060033BD RID: 13245 RVA: 0x0011A000 File Offset: 0x00118200
22 public void AdvanceMin(int a)
23 {
24 EClass.game.sessionMin += a;
25 EClass.player.stats.mins += a;
26 base.min += a;
27 if (base.min >= 60)
28 {
29 while (base.min >= 60)
30 {
31 base.min -= 60;
32 this.AdvanceHour();
33 }
34 EClass.screen.RefreshGrading();
35 }
36 else if (base.min % 3 == 2)
37 {
38 EClass.screen.RefreshGrading();
39 }
40 if (EClass._map.footmarks.Count > 0)
41 {
42 for (int i = EClass._map.footmarks.Count - 1; i >= 0; i--)
43 {
44 Footmark footmark = EClass._map.footmarks[i];
45 footmark.remaining--;
46 if (footmark.remaining <= 0)
47 {
48 CellDetail detail = footmark.pos.detail;
49 if (detail != null && detail.footmark == footmark)
50 {
51 detail.footmark = null;
52 footmark.pos.cell.TryDespawnDetail();
53 }
54 EClass._map.footmarks.RemoveAt(i);
55 }
56 }
57 }
58 EClass.player.countNewline++;
59 if (EClass.player.countNewline > EClass.core.config.game.newlineCount)
60 {
61 Msg.NewLine();
62 EClass.player.countNewline = 0;
63 }
64 EClass.screen.pcOrbit.OnChangeMin();
65 foreach (ZoneEvent zoneEvent in EClass._zone.events.list)
66 {
67 zoneEvent.minElapsed += a;
68 }
69 }
70
71 // Token: 0x060033BE RID: 13246 RVA: 0x0011A1D0 File Offset: 0x001183D0
72 public void AdvanceHour()
73 {
74 new VirtualDate(0)
75 {
76 IsRealTime = true
77 }.SimulateHour();
78 int hour = base.hour;
79 base.hour = hour + 1;
80 if (base.hour >= 24)
81 {
82 base.hour = 0;
83 this.AdvanceDay();
84 }
85 if (!this.shaken && EClass.rnd(24) == 0 && !EClass._zone.IsRegion)
86 {
87 Msg.Say("earthquake");
88 Shaker.ShakeCam("earthquake", 1f);
89 this.shaken = true;
90 }
91 EClass.scene.OnChangeHour();
92 EClass.world.weather.OnChangeHour();
93 EClass.player.OnAdvanceHour();
94 EClass.game.quests.OnAdvanceHour();
95 if (EClass._zone.IsRegion)
96 {
97 EClass._zone.Region.CheckRandomSites();
98 }
99 foreach (Chara chara in EClass.game.cards.globalCharas.Values)
100 {
101 if (!chara.IsPCParty && chara.currentZone != EClass.game.activeZone && chara.trait.UseGlobalGoal)
102 {
103 if (chara.global.goal == null && !chara.IsPCFaction)
104 {
105 GlobalGoalAdv globalGoalAdv = new GlobalGoalAdv();
106 globalGoalAdv.SetOwner(chara);
107 globalGoalAdv.Start();
108 }
109 if (chara.global.goal != null)
110 {
111 chara.global.goal.AdvanceHour();
112 }
113 }
114 }
115 EClass.pc.RecalculateFOV();
116 if (base.hour == 5)
117 {
118 this.ShipGoods();
119 this.ShipPackages();
120 this.ShipLetter();
121 if (EClass.rnd(30) == 0 && EClass.game.cards.listPackage.Count <= 2)
122 {
123 this.ShipRandomPackages();
124 }
125 if (base.month == 10)
126 {
127 Tutorial.Reserve("season", null);
128 }
129 if (base.month == 11)
130 {
131 Tutorial.Reserve("season2", null);
132 return;
133 }
134 Tutorial.Remove("season2");
135 }
136 }
137
138 // Token: 0x060033BF RID: 13247 RVA: 0x0011A3D8 File Offset: 0x001185D8
139 public void AdvanceDay()
140 {
141 int num = base.day;
142 base.day = num + 1;
143 base.min = 0;
144 EClass.player.stats.days++;
145 if (EClass.player.stats.days >= 90)
146 {
147 Tutorial.Reserve("death_penalty", null);
148 }
149 if (base.day > 30)
150 {
151 base.day = 1;
152 this.AdvanceMonth();
153 }
154 EClass.world.CreateDayData();
155 EClass.Sound.Play("owl");
156 if (!EClass.player.prayed && EClass.pc.Evalue(1655) > 0)
157 {
158 ActPray.TryPray(EClass.pc, true);
159 }
160 Msg.Say("endDay");
161 this.shaken = false;
162 EClass.player.OnAdvanceDay();
163 EClass.game.relations.UpdateRelations();
164 EClass.pc.faction.OnAdvanceDay();
165 foreach (Chara chara in EClass.game.cards.listAdv)
166 {
167 if (!chara.IsPCFaction && EClass.rnd(10) == 0 && (chara.isDead || chara.currentZone == null || chara.currentZone.id == "somewhere"))
168 {
169 chara.SetHomeZone(EClass.world.region.ListTowns().RandomItem<Zone>());
170 chara.Revive(null, false);
171 chara.MoveZone(chara.homeZone, ZoneTransition.EnterState.Auto);
172 }
173 }
174 if (EClass.pc.homeZone != null && EClass.pc.homeZone.mainFaction == EClass.pc.faction)
175 {
176 WidgetSticky.Add(new StickyHomeReport(), true);
177 }
178 if (EClass.player.stats.days >= 7 && EClass.game.cards.globalCharas.Find("fiama").currentZone == EClass.game.StartZone && EClass.game.quests.GetGlobal("fiama_starter_gift") == null && !EClass.game.quests.IsCompleted("fiama_starter_gift"))
179 {
180 EClass.game.quests.Add("fiama_starter_gift", "fiama");
181 }
182 if (EClass.game.quests.IsCompleted("exploration"))
183 {
184 Player.Flags flags = EClass.player.flags;
185 num = flags.daysAfterQuestExploration;
186 flags.daysAfterQuestExploration = num + 1;
187 if (EClass.player.flags.daysAfterQuestExploration >= 7 && !EClass.player.flags.magicChestSent)
188 {
189 EClass.player.flags.magicChestSent = true;
190 Thing thing = ThingGen.Create("parchment", -1, -1);
191 thing.SetStr(53, "letter_magic_chest");
192 Thing p = ThingGen.CreateParcel(null, new Thing[]
193 {
194 ThingGen.Create("container_magic", -1, -1),
195 thing
196 });
197 EClass.world.SendPackage(p);
198 }
199 }
200 }
201
202 // Token: 0x060033C0 RID: 13248 RVA: 0x0011A6D8 File Offset: 0x001188D8
203 public void AdvanceMonth()
204 {
205 int month = base.month;
206 base.month = month + 1;
207 if (base.month > 12)
208 {
209 base.month = 1;
210 this.AdvanceYear();
211 }
212 EClass.player.stats.months++;
213 EClass.player.nums.OnAdvanceMonth();
214 if (base.month % 2 == 0)
215 {
216 EClass.player.holyWell++;
217 }
218 EClass._map.RefreshAllTiles();
219 foreach (Thing thing in EClass._map.things)
220 {
221 if (thing.renderer.hasActor)
222 {
223 thing.renderer.RefreshSprite();
224 }
225 }
226 EClass.pc.faction.OnAdvanceMonth();
227 }
228
229 // Token: 0x060033C1 RID: 13249 RVA: 0x0011A7C4 File Offset: 0x001189C4
230 public void AdvanceYear()
231 {
232 int year = base.year;
233 base.year = year + 1;
234 EClass.player.wellWished = false;
235 EClass.player.nums.OnAdvanceYear();
236 EClass.world.SendPackage(ThingGen.Create("gift_newyear", -1, -1));
237 }
238
239 // Token: 0x060033C2 RID: 13250 RVA: 0x0011A814 File Offset: 0x00118A14
240 public void ShipGoods()
241 {
242 Thing container_shipping = EClass.game.cards.container_shipping;
243 if (container_shipping.things.Count == 0)
244 {
245 return;
246 }
247 int num = 0;
248 int num2 = 0;
249 int num3 = 0;
250 int num4 = 0;
251 List<Thing> list = new List<Thing>();
252 List<string> list2 = new List<string>();
253 Zone zone = EClass.game.spatials.Find(EClass.player.uidLastShippedZone);
254 if (zone == null || zone.branch == null)
255 {
256 zone = EClass.pc.homeZone;
257 }
258 ShippingResult shippingResult = new ShippingResult();
259 shippingResult.rawDate = EClass.world.date.GetRaw(0);
260 shippingResult.uidZone = zone.uid;
261 shippingResult.total = EClass.player.stats.shipMoney;
262 shippingResult.hearthLv = zone.branch.lv;
263 shippingResult.hearthExp = zone.branch.exp;
264 shippingResult.debt = EClass.player.debt;
265 foreach (Thing thing in container_shipping.things)
266 {
267 if (thing.trait.CanBeShipped)
268 {
269 int price = thing.GetPrice(CurrencyType.Money, true, PriceType.Shipping, null);
270 int num5 = price * thing.Num;
271 num3 += num5;
272 num += thing.Num;
273 num2 += EClass.rndHalf(thing.Num * Mathf.Min(15 + price, 10000) / 100 + 1);
274 list.Add(thing);
275 shippingResult.items.Add(new ShippingResult.Item
276 {
277 text = thing.Name,
278 income = num5
279 });
280 }
281 }
282 if (list.Count == 0)
283 {
284 return;
285 }
286 num2 = num2 / 2 + 1;
287 shippingResult.hearthExpGained = num2;
288 EClass.pc.homeBranch.log.Add(Msg.Say("shipped_collect"), null);
289 foreach (string text in list2)
290 {
291 EClass.pc.homeBranch.log.Add(text, null);
292 }
293 int shippingBonus = EClass.player.stats.GetShippingBonus(EClass.player.stats.shipMoney);
294 EClass.player.stats.shipNum += num;
295 EClass.player.stats.shipMoney += num3;
296 int shippingBonus2 = EClass.player.stats.GetShippingBonus(EClass.player.stats.shipMoney);
297 if (shippingBonus2 > shippingBonus)
298 {
299 num4 = shippingBonus2 - shippingBonus;
300 }
301 foreach (Thing thing2 in list)
302 {
303 thing2.Destroy();
304 }
305 Thing thing3 = null;
306 Thing thing4 = null;
307 string text2 = "";
308 if (num3 != 0)
309 {
310 thing3 = ThingGen.Create("money", -1, -1).SetNum(num3);
311 }
312 if (num4 != 0)
313 {
314 thing4 = ThingGen.Create("money2", -1, -1).SetNum(num4);
315 }
316 if (thing3 != null && thing4 != null)
317 {
318 text2 = "_and".lang(thing3.Name, thing4.Name, null, null, null);
319 SE.Pay();
320 }
321 else if (thing3 != null || thing4 != null)
322 {
323 text2 = ((thing3 != null) ? thing3 : thing4).Name;
324 }
325 EClass.pc.homeBranch.log.Add(Msg.Say((text2 == "") ? "shipped_none" : "shipped", num.ToString() ?? "", text2, null, null), FontColor.Good);
326 EClass.player.shippingResults.Add(shippingResult);
327 EClass.player.showShippingResult = EClass.core.config.game.showShippingResult;
328 for (int i = 0; i < EClass.player.shippingResults.Count - 10; i++)
329 {
330 EClass.player.shippingResults.RemoveAt(0);
331 }
332 zone.branch.statistics.ship += num3;
333 zone.branch.ModExp(num2);
334 if (thing3 != null)
335 {
336 EClass.pc.Pick(thing3, true, true);
337 }
338 if (thing4 != null)
339 {
340 EClass.pc.Pick(thing4, true, true);
341 }
342 }
343
344 // Token: 0x060033C3 RID: 13251 RVA: 0x0011AC8C File Offset: 0x00118E8C
345 public void ShipPackages()
346 {
347 Thing container_deliver = EClass.game.cards.container_deliver;
348 if (container_deliver.things.Count == 0)
349 {
350 return;
351 }
352 int num = 0;
353 while (container_deliver.things.Count > 0)
354 {
355 num++;
356 if (num > 100)
357 {
358 Debug.Log("too many tries");
359 return;
360 }
361 int uidZone = 0;
362 foreach (Thing thing in container_deliver.things)
363 {
364 int @int = thing.GetInt(102, null);
365 if (@int != 0)
366 {
367 uidZone = @int;
368 thing.SetInt(102, 0);
369 break;
370 }
371 }
372 int num2 = 20;
373 Thing thing2 = ThingGen.CreateCardboardBox(uidZone);
374 for (int i = container_deliver.things.Count - 1; i >= 0; i--)
375 {
376 Thing c = container_deliver.things[i];
377 thing2.AddCard(c);
378 num2 += 5;
379 if (thing2.things.IsFull(0))
380 {
381 break;
382 }
383 }
384 EClass.world.SendPackage(thing2);
385 Thing bill = ThingGen.CreateBill(num2, false);
386 EClass.pc.faction.TryPayBill(bill);
387 }
388 }
389
390 // Token: 0x060033C4 RID: 13252 RVA: 0x0011ADC8 File Offset: 0x00118FC8
391 public void ShipLetter()
392 {
393 int num = -1;
394 int lutz = EClass.player.flags.lutz;
395 if (EClass.player.stats.days >= 2 && lutz <= 0)
396 {
397 num = 1;
398 }
399 else if (EClass.player.stats.days >= 5 && lutz <= 1)
400 {
401 num = 2;
402 }
403 else if (EClass.player.stats.days >= 8 && lutz <= 2)
404 {
405 num = 3;
406 }
407 else if (EClass.player.stats.days >= 11 && lutz <= 3)
408 {
409 num = 4;
410 }
411 else if (EClass.player.stats.days >= 15 && lutz <= 4)
412 {
413 num = 5;
414 }
415 else if (EClass.player.stats.days >= 17 && lutz <= 5)
416 {
417 num = 6;
418 }
419 else if (EClass.player.stats.days >= 30 && lutz <= 6)
420 {
421 num = 7;
422 }
423 else if (EClass.player.stats.days >= 50 && lutz <= 7)
424 {
425 num = 8;
426 }
427 if (num != -1)
428 {
429 EClass.player.flags.lutz = num;
430 Thing thing = ThingGen.Create("letter", -1, -1);
431 thing.SetStr(53, "lutz_" + num.ToString());
432 EClass.world.SendPackage(thing);
433 }
434 }
435
436 // Token: 0x060033C5 RID: 13253 RVA: 0x0011AF08 File Offset: 0x00119108
437 public void ShipRandomPackages()
438 {
439 GameDate.<>c__DisplayClass11_0 CS$<>8__locals1;
440 CS$<>8__locals1.box = ThingGen.CreateCardboardBox(-1);
441 TraitContainer traitContainer = CS$<>8__locals1.box.trait as TraitContainer;
442 bool flag = EClass.pc.homeBranch.policies.IsActive(2708, -1);
443 if (EClass.rnd(EClass.debug.enable ? 1 : 100) == 0 && !EClass.player.flags.statueShipped)
444 {
445 EClass.player.flags.statueShipped = true;
446 GameDate.<ShipRandomPackages>g__Add|11_0("statue_weird", 1, ref CS$<>8__locals1);
447 flag = false;
448 }
449 else if (EClass.rnd(10) == 0)
450 {
451 GameDate.<ShipRandomPackages>g__Add|11_0("234", 1, ref CS$<>8__locals1);
452 }
453 else if (EClass.rnd(5) == 0)
454 {
455 GameDate.<ShipRandomPackages>g__AddThing|11_1(ThingGen.CreateFromCategory("junk", -1), 1, ref CS$<>8__locals1);
456 }
457 else if (EClass.rnd(10) == 0)
458 {
459 GameDate.<ShipRandomPackages>g__AddThing|11_1(ThingGen.CreateFromTag("garbage", -1), 1, ref CS$<>8__locals1);
460 }
461 else if (EClass.rnd(8) == 0)
462 {
463 CardRow cardRow = SpawnList.Get("chara", null, null).Select(EClass.pc.LV + 10, -1);
464 traitContainer.PutChara(cardRow.id);
465 flag = false;
466 }
467 else if (EClass.rnd(8) == 0)
468 {
469 GameDate.<ShipRandomPackages>g__Add|11_0("plat", 1 + EClass.rnd(4), ref CS$<>8__locals1);
470 flag = false;
471 }
472 else if (EClass.rnd(8) == 0)
473 {
474 GameDate.<ShipRandomPackages>g__Add|11_0("money2", 1 + EClass.rnd(4), ref CS$<>8__locals1);
475 flag = false;
476 }
477 else
478 {
479 string id = "trash2";
480 if (EClass.rnd(3) == 0)
481 {
482 id = "trash1";
483 }
484 if (EClass.rnd(3) == 0)
485 {
486 id = ((EClass.rnd(3) == 0) ? "529" : "1170");
487 }
488 if (EClass.rnd(5) == 0)
489 {
490 id = "_poop";
491 }
492 if (EClass.rnd(100) == 0)
493 {
494 id = "goodness";
495 flag = false;
496 }
497 GameDate.<ShipRandomPackages>g__Add|11_0(id, 1, ref CS$<>8__locals1);
498 }
499 if (!flag)
500 {
501 EClass.world.SendPackage(CS$<>8__locals1.box);
502 }
503 }
504
505 // Token: 0x060033C7 RID: 13255 RVA: 0x0011B0EC File Offset: 0x001192EC
506 [CompilerGenerated]
507 internal static void <ShipRandomPackages>g__Add|11_0(string id, int num, ref GameDate.<>c__DisplayClass11_0 A_2)
508 {
509 GameDate.<ShipRandomPackages>g__AddThing|11_1(ThingGen.Create(id, -1, -1), num, ref A_2);
510 }
511
512 // Token: 0x060033C8 RID: 13256 RVA: 0x0011B0FD File Offset: 0x001192FD
513 [CompilerGenerated]
514 internal static void <ShipRandomPackages>g__AddThing|11_1(Thing t, int num, ref GameDate.<>c__DisplayClass11_0 A_2)
515 {
516 t.SetNum(num);
517 A_2.box.AddCard(t);
518 }
519
520 // Token: 0x04001C2F RID: 7215
521 [JsonProperty]
522 public bool shaken;
523
524 // Token: 0x04001C30 RID: 7216
525 public const int minPerRound = 5;
526}
Definition Chara.cs:12
Definition Date.cs:6
Definition Msg.cs:7
Definition Thing.cs:10
Definition Zone.cs:14