Elin Decompiled Documentation EA 23.219 Nightly Patch 2
Loading...
Searching...
No Matches
Zone.cs
Go to the documentation of this file.
1using System;
2using System.Collections.Generic;
3using System.IO;
4using System.Linq;
5using Dungen;
6using Ionic.Zip;
7using Newtonsoft.Json;
8using SFB;
9using UnityEngine;
10
12{
13 public class PortalReturnData
14 {
15 [JsonProperty]
16 public int uidZone;
17
18 [JsonProperty]
19 public int x;
20
21 [JsonProperty]
22 public int z;
23 }
24
25 public static bool forceRegenerate;
26
27 public static string forceSubset;
28
29 public static CardRow sourceHat;
30
31 public static int okaerinko = 0;
32
33 [JsonProperty]
35
36 [JsonProperty]
37 public HashSet<int> completedQuests = new HashSet<int>();
38
39 [JsonProperty]
41
42 [JsonProperty]
44
45 [JsonProperty]
47
48 [JsonProperty]
49 public Dictionary<int, string> dictCitizen = new Dictionary<int, string>();
50
51 [JsonProperty]
53
54 [JsonProperty]
55 public List<int> landFeats;
56
57 [JsonProperty]
59
60 public Map map;
61
63
65
66 public int fileVariation;
67
68 public bool dirtyElectricity;
69
70 public bool isStarted;
71
72 public bool isSimulating;
73
74 public int tempDist;
75
77
78 public static bool ignoreSpawnAnime;
79
80 public static List<Thing> Suckers = new List<Thing>();
81
82 public Chara Boss
83 {
84 get
85 {
86 return EClass._map.FindChara(base.uidBoss);
87 }
88 set
89 {
90 base.uidBoss = value?.uid ?? 0;
91 }
92 }
93
94 public override int ContentLv
95 {
96 get
97 {
98 if (branch == null)
99 {
100 return DangerLv;
101 }
102 return branch.ContentLV;
103 }
104 }
105
106 public override int DangerLv
107 {
108 get
109 {
110 if (GetTopZone() != this)
111 {
112 return GetTopZone().DangerLv + Mathf.Abs(base.lv) - 1;
113 }
114 return (int)Mathf.Max(1f, (branch != null) ? ((float)branch.DangerLV) : ((float)base._dangerLv + MathF.Abs(base.lv) + (float)DangerLvFix));
115 }
116 }
117
118 public virtual bool DisableRooms => false;
119
120 public int HourSinceLastActive => EClass.world.date.GetElapsedHour(base.lastActive);
121
122 public int MinsSinceLastActive => EClass.world.date.GetElapsedMins(base.lastActive);
123
124 public virtual string pathExport => CorePath.ZoneSave + idExport.IsEmpty("_new") + ".z";
125
127
128 public virtual string IdBiome => map.config.idBiome.IsEmpty(base.source.idBiome);
129
130 public virtual string IDGenerator => null;
131
132 public virtual string TextWidgetDate => "";
133
134 public MapGenerator Generator => ResourceCache.Load<MapGenerator>("DunGenProfile/Generator_" + GetDungenID());
135
136 public virtual string IdProfile => idProfile.IsEmpty(base.source.idProfile);
137
138 public virtual string IDPlayList => base.source.idPlaylist.IsEmpty((base.lv != 0) ? "Underground" : null);
139
140 public virtual string IDPlaylistOverwrite => null;
141
142 public virtual string IDHat => null;
143
144 public virtual string IDBaseLandFeat => base.Tile.source.trait[0];
145
146 public virtual string idExport
147 {
148 get
149 {
150 if (base.source.idFile.Length != 0)
151 {
152 return base.source.idFile[fileVariation] + ((base.lv == 0) ? "" : ("_F" + base.lv));
153 }
154 return "";
155 }
156 }
157
158 public string pathTemp => GameIO.pathTemp + base.uid + "/";
159
160 public Region Region => (this as Region) ?? (parent as Region);
161
163
165
166 public virtual bool BlockBorderExit => base.lv != 0;
167
169
171
172 public virtual ZoneFeatureType FeatureType => ZoneFeatureType.Default;
173
174 public virtual string IDAmbience
175 {
176 get
177 {
178 if (!IsRegion && !map.IsIndoor)
179 {
180 if (!IsTown)
181 {
182 return "forest";
183 }
184 return "town";
185 }
186 return null;
187 }
188 }
189
190 public virtual string IDSceneTemplate
191 {
192 get
193 {
194 if (!EClass._map.IsIndoor)
195 {
196 if (!IsSnowZone)
197 {
198 return "Default";
199 }
200 return "Snow";
201 }
202 return "Indoor";
203 }
204 }
205
206 public virtual bool IsFestival => false;
207
208 public virtual string IDSubset
209 {
210 get
211 {
212 if (!IsFestival)
213 {
214 return null;
215 }
216 return "festival";
217 }
218 }
219
220 public virtual bool IsTown => false;
221
222 public virtual bool CanBeDeliverDestination => IsTown;
223
224 public virtual bool CountDeepestLevel => false;
225
226 public virtual bool HasLaw => false;
227
228 public virtual bool MakeEnemiesNeutral
229 {
230 get
231 {
232 if (!IsTown)
233 {
234 return HasLaw;
235 }
236 return true;
237 }
238 }
239
240 public virtual bool MakeTownProperties => HasLaw;
241
242 public virtual bool AllowCriminal => !HasLaw;
243
244 public virtual bool AllowInvest
245 {
246 get
247 {
248 if (!IsTown && !IsPCFaction)
249 {
250 return Guild.GetCurrentGuild() != null;
251 }
252 return true;
253 }
254 }
255
256 public virtual bool AllowNewZone => true;
257
258 public virtual bool WillAutoSave => true;
259
260 public virtual bool RegenerateOnEnter => false;
261
262 public virtual bool IsSkyLevel => base.lv > 0;
263
264 public virtual bool IsUnderwater => false;
265
266 public virtual bool IsUserZone => false;
267
268 public virtual bool CanDigUnderground => false;
269
270 public virtual bool LockExit => true;
271
272 public virtual bool CanUnlockExit => !LockExit;
273
274 public virtual int MaxLv => 99999999;
275
276 public virtual int MinLv => -99999999;
277
278 public virtual bool AddPrefix => false;
279
280 public virtual bool IsNefia => false;
281
282 public virtual bool PetFollow => true;
283
284 public virtual bool RestrictBuild
285 {
286 get
287 {
288 if (this is Zone_Civilized)
289 {
290 return !IsPCFaction;
291 }
292 return false;
293 }
294 }
295
296 public virtual bool KeepAllyDistance
297 {
298 get
299 {
300 if (!HasLaw)
301 {
302 return IsPCFaction;
303 }
304 return true;
305 }
306 }
307
308 public virtual int MaxSpawn => map.bounds.Width * map.bounds.Height / 175 + 2;
309
310 public int MaxRespawn => (int)((float)MaxSpawn * RespawnRate) + 1;
311
312 public virtual float RuinChance => 0.1f;
313
314 public virtual float OreChance => 1f;
315
316 public virtual float BigDaddyChance => 0f;
317
318 public virtual float EvolvedChance => 0f;
319
320 public virtual float ShrineChance => 0f;
321
322 public virtual float PrespawnRate => 0f;
323
324 public virtual float RespawnRate => PrespawnRate * 0.5f;
325
327 {
328 get
329 {
330 if (instance != null)
331 {
333 }
334 return false;
335 }
336 }
337
338 public virtual int RespawnPerHour => MaxSpawn / 5 + 1;
339
340 public virtual float ChanceSpawnNeutral => 0.05f;
341
342 public virtual bool GrowPlant => base.mainFaction == EClass.pc.faction;
343
344 public virtual bool GrowWeed => GrowPlant;
345
346 public virtual bool IsExplorable => !base.isRandomSite;
347
348 public virtual bool IsReturnLocation
349 {
350 get
351 {
352 if (EClass.pc.homeZone != this)
353 {
354 return base.source.tag.Contains("return");
355 }
356 return true;
357 }
358 }
359
360 public virtual bool ShouldMakeExit
361 {
362 get
363 {
364 if (base.lv > MinLv)
365 {
366 return base.lv < MaxLv;
367 }
368 return false;
369 }
370 }
371
372 public virtual bool ShouldRegenerate => false;
373
374 public virtual bool ShouldAutoRevive
375 {
376 get
377 {
378 if (!ShouldRegenerate)
379 {
380 return IsPCFaction;
381 }
382 return true;
383 }
384 }
385
386 public virtual bool UseFog => base.lv < 0;
387
388 public virtual bool RevealRoom => false;
389
390 public virtual bool AlwaysLowblock => map.IsIndoor;
391
392 public virtual bool UseLight
393 {
394 get
395 {
396 if (base.mainFaction != EClass.pc.faction)
397 {
398 return base.source.tag.Contains("light");
399 }
400 return true;
401 }
402 }
403
404 public virtual int StartLV => 0;
405
406 public virtual ZoneScaleType ScaleType => ZoneScaleType.None;
407
408 public virtual bool HiddenInRegionMap => false;
409
410 public virtual FlockController.SpawnType FlockType => FlockController.SpawnType.Default;
411
412 public override string NameSuffix
413 {
414 get
415 {
416 if (!IsNefia || !GetTopZone().isConquered)
417 {
418 return "";
419 }
420 return "conquered".lang();
421 }
422 }
423
424 public string NameWithLevel => Name + TextLevel(base.lv);
425
426 public string TextDangerLv => "dangerLv".lang(DangerLv + ((DangerLvBoost == 0) ? "" : ("<size=15> +" + DangerLvBoost + "</size>")));
427
428 public string TextDeepestLv
429 {
430 get
431 {
432 if (GetDeepestLv() != 0)
433 {
434 return "zoneLevelMax".lang(TextLevel(GetDeepestLv()));
435 }
436 return "";
437 }
438 }
439
441 {
442 get
443 {
445 {
446 return base.mainFaction == EClass.pc.faction;
447 }
448 return true;
449 }
450 }
451
453 {
454 get
455 {
457 {
458 if (base.mainFaction == EClass.pc.faction)
459 {
460 return EClass.Branch.elements.Has(4003);
461 }
462 return false;
463 }
464 return true;
465 }
466 }
467
468 public bool IsPCFaction => base.mainFaction == EClass.pc.faction;
469
471 {
472 get
473 {
474 if (base.mainFaction != EClass.pc.faction)
475 {
476 return EClass._zone is Zone_Tent;
477 }
478 return true;
479 }
480 }
481
482 public bool IsStartZone => this == EClass.game.StartZone;
483
484 public bool IsInstance => instance != null;
485
486 public bool IsLoaded => map != null;
487
488 public virtual int BaseElectricity => 0;
489
490 public bool IsActiveZone => EClass.game.activeZone == this;
491
492 public bool CanInspect
493 {
494 get
495 {
496 if (!IsInstance)
497 {
498 return !HiddenInRegionMap;
499 }
500 return false;
501 }
502 }
503
504 public string InspectName => Name + ((IsTown || IsPCFaction || this is Zone_Civilized) ? "" : TextDangerLv);
505
506 public Point InspectPoint => null;
507
508 public Vector3 InspectPosition => default(Vector3);
509
510 public virtual int MaxSoil
511 {
512 get
513 {
514 if (branch == null)
515 {
516 return 99999;
517 }
518 return branch.MaxSoil;
519 }
520 }
521
522 public int Evalue(int ele)
523 {
524 return elements.Value(ele);
525 }
526
527 public int Evalue(string alias)
528 {
529 return elements.Value(EClass.sources.elements.alias[alias].id);
530 }
531
532 public virtual string GetDungenID()
533 {
534 return null;
535 }
536
537 public virtual bool ShouldScaleImportedChara(Chara c)
538 {
539 return false;
540 }
541
542 public virtual string GetNewZoneID(int level)
543 {
544 return base.source.id;
545 }
546
547 public override string ToString()
548 {
549 return Name + "(" + base.uid + ")(" + _regionPos?.ToString() + ") instance?" + IsInstance + "/" + EClass.world.date.GetRemainingHours(base.dateExpire) + "h";
550 }
551
552 public string TextLevel(int _lv)
553 {
554 if (_lv != 0)
555 {
556 if (base.lv <= 0)
557 {
558 return " " + "zoneLevelB".lang((_lv * -1).ToString() ?? "");
559 }
560 return " " + "zoneLevel".lang((_lv + 1).ToString() ?? "");
561 }
562 return "";
563 }
564
565 public override void OnCreate()
566 {
567 events.zone = this;
568 base.lv = StartLV;
569 }
570
571 public override void OnAfterCreate()
572 {
573 if (AddPrefix)
574 {
575 if (GetTopZone() == this)
576 {
577 base.idPrefix = EClass.sources.zoneAffixes.rows.RandomItem().id;
578 }
579 else
580 {
581 base.idPrefix = GetTopZone().idPrefix;
582 }
583 }
584 }
585
586 public void Activate()
587 {
588 if (IsRegion)
589 {
591 }
592 isStarted = (isSimulating = false);
593 base.isKnown = true;
594 EClass.game.config.reverseSnow = false;
596 {
597 Msg.Say("regenerateZone", Name);
598 ClearZones();
599 if (EClass.pc.global.transition != null)
600 {
601 EClass.pc.global.transition.uidLastZone = 0;
602 }
603 }
605 if (EClass.game.activeZone != null)
606 {
608 }
609 EClass.game.activeZone = this;
610 ZoneExportData zoneExportData = null;
611 Debug.Log(NameWithLevel + "/" + id + "/" + base.uid + "/" + base.isGenerated + "/" + IsLoaded + "/" + File.Exists(base.pathSave + "map"));
612 if (base.isGenerated && !IsLoaded && !File.Exists(base.pathSave + "map"))
613 {
614 Debug.Log("(Bug) File does not exist:" + destryoed + "/" + base.pathSave);
615 base.isGenerated = false;
616 }
617 bool flag = false;
618 Debug.Log(idCurrentSubset + "/" + IDSubset);
619 bool flag2 = idCurrentSubset != IDSubset || forceSubset != null;
620 if (flag2 && map != null)
621 {
622 UnloadMap();
623 }
624 Debug.Log(idExport + "/" + File.Exists(pathExport) + "/" + pathExport);
625 if (!base.isGenerated && (idExport.IsEmpty() || !File.Exists(pathExport)))
626 {
627 Debug.Log("generating random map");
628 flag = true;
629 base.dateExpire = EClass.world.date.GetRaw() + 1440 * ExpireDays;
630 Generate();
632 if (instance != null)
633 {
635 }
636 if (!UseFog)
637 {
638 map.ForeachCell(delegate(Cell c)
639 {
640 c.isSeen = true;
641 });
642 }
643 if (!(bp is GameBlueprint))
644 {
646 }
647 }
648 else if (IsLoaded)
649 {
650 Debug.Log("zone is already loaded");
651 map.SetZone(this);
652 EClass.core.textures.ApplyLocalReplace(base.isMapSaved ? base.pathSave : pathTemp);
654 }
655 else
656 {
657 subset = null;
658 bool flag3 = (base.isGenerated && flag2) || (base.isGenerated && !IsInstance && !IsPCFaction && ShouldRegenerate && EClass.world.date.IsExpired(base.dateRegenerate)) || forceRegenerate;
659 if (pathExport.IsEmpty() || !File.Exists(pathExport) || EClass.game.isLoading || EClass.player.simulatingZone)
660 {
661 flag3 = false;
662 flag2 = false;
663 }
664 Debug.Log(base.isGenerated + "/" + flag3 + "/" + flag2 + "/" + IDSubset);
665 if (!base.isGenerated || flag3 || flag2)
666 {
667 Debug.Log("importing map:" + pathExport);
668 flag = true;
669 base.dateRegenerate = EClass.world.date.GetRaw() + 1440 * EClass.setting.balance.dateRegenerateZone;
670 if (!flag3)
671 {
672 IO.DeleteDirectory(pathTemp + "Texture Replace");
673 Debug.Log(pathTemp);
674 }
675 try
676 {
677 zoneExportData = Import(pathExport);
678 base.isGenerated = true;
679 isImported = true;
680 if (flag3)
681 {
682 zoneExportData.orgMap = GameIO.LoadFile<Map>(base.pathSave + "map");
683 }
684 }
685 catch (Exception message)
686 {
687 Debug.Log(message);
688 zoneExportData = Import(CorePath.ZoneSave + "fail.z");
689 base.isGenerated = true;
690 isImported = true;
691 }
692 }
694 Debug.Log("loading map: imported? " + isImported + " regenerate? " + flag3);
695 map = GameIO.LoadFile<Map>((isImported ? pathTemp : base.pathSave) + "map");
696 if (map == null)
697 {
698 EClass.ui.Say("System.IO.EndOfStreamException: Unexpected end of stream:" + Environment.NewLine + "File may be corrupted. Try replacing the following file if you have a backup:" + Environment.NewLine + (isImported ? pathTemp : base.pathSave) + "map");
699 return;
700 }
701 map.SetZone(this);
702 map.Load(isImported ? pathTemp : base.pathSave, isImported);
704 EClass.core.textures.ApplyLocalReplace(base.isMapSaved ? base.pathSave : pathTemp);
705 if (isImported)
706 {
707 map.deadCharas.Clear();
708 map.OnImport(zoneExportData);
709 if (UseFog && !flag3)
710 {
711 map.ForeachCell(delegate(Cell c)
712 {
713 c.isSeen = false;
714 });
715 }
716 if (zoneExportData.orgMap != null)
717 {
718 Map orgMap = zoneExportData.orgMap;
719 List<Chara> serializedCharas = map.serializedCharas;
720 map.charas = orgMap.charas;
721 map.serializedCharas = orgMap.serializedCharas;
722 map.deadCharas = orgMap.deadCharas;
723 byte[] array = orgMap.TryLoadFile(base.pathSave, "flags", EClass._map.Size * EClass._map.Size);
724 if (array != null && array.Length == EClass._map.Size * EClass._map.Size)
725 {
726 for (int i = 0; i < EClass._map.Size; i++)
727 {
728 for (int j = 0; j < EClass._map.Size; j++)
729 {
730 map.cells[i, j].isSeen = array[i * EClass._map.Size + j].GetBit(1);
731 }
732 }
733 }
734 foreach (Chara item in serializedCharas)
735 {
736 Debug.Log("Importing New Chara:" + item.id + "/" + item.Name + "/" + item.orgPos);
738 }
739 map.things.ForeachReverse(delegate(Thing t)
740 {
741 if (t.trait is TraitNewZone || t.trait is TraitPowerStatue)
742 {
743 foreach (Thing thing in orgMap.things)
744 {
745 if (t.id == thing.id && t.pos.Equals(thing.pos))
746 {
747 if (t.trait is TraitNewZone)
748 {
749 RemoveCard(t);
750 map.things.Insert(0, thing);
751 thing.stackOrder = 0;
752 }
753 else
754 {
755 t.ChangeMaterial(thing.material);
756 t.isOn = thing.isOn;
757 }
758 break;
759 }
760 }
761 return;
762 }
763 if (t.trait is TraitStairsLocked)
764 {
765 foreach (Thing thing2 in orgMap.things)
766 {
767 if (thing2.trait is TraitNewZone && t.pos.Equals(thing2.pos))
768 {
769 RemoveCard(t);
770 map.things.Add(thing2);
771 break;
772 }
773 }
774 return;
775 }
776 if (t.id == "medal" || t.id == "856")
777 {
778 foreach (Thing thing3 in orgMap.things)
779 {
780 if (t.id == thing3.id && t.pos.Equals(thing3.pos))
781 {
782 return;
783 }
784 }
785 RemoveCard(t);
786 }
787 });
788 foreach (KeyValuePair<int, int> item2 in EClass._map.backerObjs.ToList())
789 {
790 EClass._map.GetCell(item2.Key);
791 SourceBacker.Row row = EClass.sources.backers.map[item2.Value];
793 {
794 map.backerObjs.Remove(item2.Key);
795 }
796 }
797 foreach (Chara serializedChara in map.serializedCharas)
798 {
799 if (serializedChara.orgPos != null && serializedChara.orgPos.IsValid)
800 {
801 serializedChara.pos.Set(serializedChara.orgPos);
802 }
803 }
804 foreach (Thing thing4 in orgMap.things)
805 {
806 if (thing4.trait is TraitTent && !thing4.isNPCProperty)
807 {
808 thing4.AddEditorTag(EditorTag.NoNpcProperty);
809 thing4.isSubsetCard = false;
810 map.things.Add(thing4);
811 Debug.Log(thing4);
812 }
813 }
814 }
815 }
816 foreach (Thing thing5 in map.things)
817 {
818 map.AddCardOnActivate(thing5);
819 }
820 foreach (Chara c3 in map.serializedCharas)
821 {
822 if (c3.c_uidMaster == 0 || EClass.player.listSummon.Find((Chara c2) => c2.uid == c3.uid) == null)
823 {
824 map.charas.Add(c3);
825 map.AddCardOnActivate(c3);
826 }
827 }
828 map.serializedCharas.Clear();
829 if (isImported && IsTown)
830 {
831 RefreshListCitizen();
832 }
833 map.RefreshAllTiles();
834 AddGlobalCharasOnActivate();
835 map.OnLoad();
836 if (flag3)
837 {
838 foreach (Card item3 in map.Cards.ToList())
839 {
840 if (item3.isSubsetCard)
841 {
842 item3.Destroy();
843 }
844 }
845 }
846 if (isImported)
847 {
848 idCurrentSubset = forceSubset ?? IDSubset;
849 if (idCurrentSubset != null)
850 {
851 subset = MapSubset.Load(idCurrentSubset);
852 subset.Apply();
853 }
854 }
855 if (isImported)
856 {
857 if (MakeTownProperties)
858 {
859 foreach (Thing thing6 in map.things)
860 {
861 thing6.isNPCProperty = !thing6.isHidden && !thing6.HasEditorTag(EditorTag.NoNpcProperty);
862 }
863 }
864 else
865 {
866 foreach (Thing thing7 in map.things)
867 {
868 thing7.isNPCProperty = false;
869 }
870 }
871 OnGenerateMap();
872 if (instance != null)
873 {
874 instance.OnGenerateMap();
875 }
876 }
877 if (isImported && !flag3 && !RevealRoom)
878 {
879 foreach (Room item4 in map.rooms.listRoom)
880 {
881 if (!item4.HasRoof || item4.data.atrium)
882 {
883 continue;
884 }
885 foreach (Point point2 in item4.points)
886 {
887 point2.cell.isSeen = false;
888 }
889 }
890 }
891 if (flag3)
892 {
893 OnRegenerate();
894 }
895 }
896 PathManager.Instance._pathfinder.PunishChangeDirection = false;
897 isImported = false;
898 if (this is Zone_Tent && IsUnderwater)
899 {
900 EClass._map.config.idSceneProfile = "indoor_water";
901 EClass.scene.profile = SceneProfile.Load(EClass._map.config.idSceneProfile);
902 }
903 if (flag && IsTown && base.lv == 0)
904 {
905 SpawnLostItems();
906 }
907 if (base.visitCount == 0)
908 {
909 base.dateRevive = EClass.world.date.GetRaw() + 1440 * EClass.setting.balance.dateRevive;
910 }
911 map.ForeachCell(delegate(Cell c)
912 {
913 if (c.HasFire)
914 {
915 map.effectManager.GetOrCreate(c.GetSharedPoint());
916 }
917 if (IsRegion)
918 {
919 c.decal = 0;
920 }
921 });
923 {
924 RainWater();
925 }
927 {
928 map.ForeachCell(delegate(Cell c)
929 {
930 c.isSeen = true;
931 });
932 }
933 isStarted = true;
934 Map.isDirtySunMap = true;
935 map.RefreshAllTiles();
936 if (events.listPreEnter.Count > 0)
937 {
938 foreach (ZonePreEnterEvent item5 in events.listPreEnter)
939 {
940 item5.Execute();
941 }
942 events.listPreEnter.Clear();
943 }
944 foreach (Card card in map.Cards)
945 {
946 card.CalculateFOV();
947 if (card.isChara)
948 {
949 Chara chara = card.Chara;
950 chara.dirtySpeed = true;
951 if (!card.isDyed && card.HasTag(CTAG.random_color))
952 {
953 card.DyeRandom();
954 }
955 if (card.IsUnique && !card.IsPCFaction && !card.IsPCParty)
956 {
957 Point point = chara.orgPos ?? card.pos;
958 card.c_uniqueData = new UniqueData
959 {
960 x = point.x,
961 y = point.z,
962 uidZone = base.uid
963 };
964 }
965 int @int = card.GetInt(55);
966 if (@int != 0)
967 {
968 foreach (Chara chara2 in map.charas)
969 {
970 if (chara2.uid == @int)
971 {
972 if (chara.IsHostile(chara2))
973 {
974 chara.enemy = chara2;
975 chara.SetAI(new GoalCombat());
976 chara.calmCheckTurn = 20 + EClass.rnd(30);
977 }
978 break;
979 }
980 }
981 card.SetInt(55);
982 }
983 chara.SyncRide();
984 if (card.c_uidMaster != 0 && chara.master == null)
985 {
986 chara.FindMaster();
987 }
988 if (!EClass.game.isLoading)
989 {
990 chara.enemy = null;
991 if (chara.IsInCombat)
992 {
993 chara.SetNoGoal();
994 }
995 }
996 }
997 else if (card.IsInstalled && card.trait is TraitDoor traitDoor && card.pos.HasChara && !traitDoor.IsOpen())
998 {
999 traitDoor.ToggleDoor(sound: false, refresh: false);
1000 }
1001 }
1002 RefreshHat();
1003 forceRegenerate = false;
1004 forceSubset = null;
1005 EClass.ui.OnActivateZone();
1007 EClass.Sound.LoadAmbience(IDAmbience);
1008 if (EClass.Branch != null)
1009 {
1011 }
1012 OnVisit();
1013 if (flag)
1014 {
1015 OnVisitNewMapOrRegenerate();
1016 }
1018 if (IsPCFaction)
1019 {
1020 EClass.player.uidLastTown = 0;
1021 }
1022 else if (IsTown && base.lv == 0)
1023 {
1024 EClass.player.uidLastTown = base.uid;
1025 }
1026 RefreshBGM();
1027 Rand.InitBytes(map.seed + 1);
1028 RefreshElectricity();
1029 okaerinko = 0;
1030 if (EClass.debug.enable)
1031 {
1032 ModInfluence(2000);
1033 }
1034 if (this is Zone_TinkerCamp)
1035 {
1036 Tutorial.Reserve("tinker");
1037 }
1038 else if (this is Zone_Town && !(this is Zone_SubTown))
1039 {
1040 Tutorial.Reserve("town");
1041 }
1042 }
1043
1044 public void RefreshHat()
1045 {
1046 if (idHat != null && EClass.world.date.IsExpired(base.dateHat))
1047 {
1048 idHat = null;
1049 base.dateHat = 0;
1050 }
1051 sourceHat = ((idHat != null) ? EClass.sources.cards.map[idHat] : ((IDHat != null) ? EClass.sources.cards.map[IDHat] : null));
1052 }
1053
1054 public void OnVisit()
1055 {
1056 if (EClass.world.date.IsExpired(base.dateRevive))
1057 {
1058 ResetHostility();
1059 Revive();
1060 foreach (Chara chara in EClass._map.charas)
1061 {
1062 chara.TryRestock(onCreate: false);
1063 if (!chara.IsPCFaction)
1064 {
1065 chara.c_fur = 0;
1066 }
1067 }
1068 }
1069 RefreshCriminal();
1071 events.OnVisit();
1072 OnActivate();
1073 UpdateQuests();
1074 OnBeforeSimulate();
1075 isSimulating = true;
1076 Simulate();
1077 isSimulating = false;
1078 OnAfterSimulate();
1079 if (EClass.Branch != null)
1080 {
1082 }
1083 base.lastActive = EClass.world.date.GetRaw();
1084 if (!EClass.game.isLoading)
1085 {
1086 base.visitCount++;
1087 }
1088 base.version = EClass.core.version.GetInt();
1089 }
1090
1091 public void Revive()
1092 {
1093 base.dateRevive = EClass.world.date.GetRaw() + 1440 * EClass.setting.balance.dateRevive;
1094 if (ShouldAutoRevive)
1095 {
1096 foreach (Chara deadChara in map.deadCharas)
1097 {
1098 if (deadChara.trait.CanAutoRevive && deadChara.CanRevive())
1099 {
1100 deadChara.Revive();
1102 {
1103 deadChara.RemoveBacker();
1104 }
1105 EClass._zone.AddCard(deadChara, (deadChara.orgPos != null && deadChara.orgPos.IsInBounds) ? deadChara.orgPos : deadChara.pos);
1106 }
1107 }
1108 }
1109 foreach (Chara value in EClass.game.cards.globalCharas.Values)
1110 {
1111 if (value.isDead && value.CanRevive() && value.homeZone == this)
1112 {
1113 value.Revive();
1114 Point point = GetSpawnPos(value);
1115 if (value.orgPos != null && value.orgPos.IsInBounds)
1116 {
1117 point = value.orgPos.GetNearestPoint() ?? point;
1118 }
1119 EClass._zone.AddCard(value, point);
1120 }
1121 }
1122 map.deadCharas.Clear();
1123 }
1124
1125 public virtual void OnRegenerate()
1126 {
1127 }
1128
1129 public virtual void OnActivate()
1130 {
1131 }
1132
1133 public virtual void OnBeforeDeactivate()
1134 {
1135 }
1136
1137 public virtual void OnDeactivate()
1138 {
1139 }
1140
1141 public virtual void OnBeforeSimulate()
1142 {
1143 }
1144
1145 public virtual void OnVisitNewMapOrRegenerate()
1146 {
1147 }
1148
1149 public virtual void OnAfterSimulate()
1150 {
1151 }
1152
1153 public virtual void OnAdvanceHour()
1154 {
1155 }
1156
1157 public void Simulate()
1158 {
1159 if (!EClass.game.isLoading && base.visitCount > 0)
1160 {
1161 if (Boss != null && IsNefia)
1162 {
1163 Msg.Say("bossLeave", Boss.Name.ToTitleCase(), EClass._zone.Name);
1166 }
1167 int num = Mathf.Clamp(MinsSinceLastActive, 1, 10000);
1168 foreach (Chara chara2 in EClass._map.charas)
1169 {
1170 if (chara2.hp < 0)
1171 {
1172 chara2.hp = 0;
1173 }
1174 if (!chara2.IsPCParty)
1175 {
1176 if (chara2.mana.value < 0)
1177 {
1178 chara2.mana.value = 0;
1179 }
1180 if (chara2.stamina.value < 0)
1181 {
1182 chara2.stamina.value = 0;
1183 }
1184 }
1185 if (num > 60)
1186 {
1187 chara2.resistCon = null;
1188 }
1189 if (chara2.rarity >= Rarity.Legendary && !chara2.IsPCFaction && num > 0)
1190 {
1191 Msg.ignoreAll = true;
1192 chara2.Cure(CureType.Boss, 20 + num * 10);
1193 chara2.HealHP(Mathf.Max(1, chara2.MaxHP) * Mathf.Min(num, 20) / 20);
1194 chara2.mana.Mod(Mathf.Max(1, chara2.mana.max) * Mathf.Min(num, 20) / 20);
1195 chara2.stamina.Mod(Mathf.Max(1, chara2.stamina.max) * Mathf.Min(num, 20) / 20);
1196 Msg.ignoreAll = false;
1197 }
1198 }
1199 }
1200 Debug.Log("Last Active:" + base.lastActive);
1201 if (base.lastActive == 0 || HourSinceLastActive <= 1 || IsRegion)
1202 {
1203 return;
1204 }
1205 Debug.Log(Name + " Simulate:" + HourSinceLastActive + " hours");
1206 VirtualDate virtualDate = new VirtualDate(HourSinceLastActive);
1207 List<Chara> list = EClass._map.charas.ToList();
1208 int num2 = HourSinceLastActive / 24;
1209 int num3 = 0;
1210 if (num2 > 0)
1211 {
1212 foreach (Chara item in list)
1213 {
1214 if (!item.IsPCParty)
1215 {
1216 item.OnSleep(200, num2);
1217 if (item.conSleep != null)
1218 {
1219 item.conSleep.Kill();
1220 }
1221 if (EClass.rnd(EClass.world.date.IsNight ? 20 : 200) == 0 && !item.IsPCFaction)
1222 {
1223 item.AddCondition<ConSleep>(1000 + EClass.rnd(1000), force: true);
1224 }
1225 if (item.things.Count > 20)
1226 {
1227 item.ClearInventory(ClearInventoryType.Purge);
1228 }
1229 }
1230 }
1231 }
1232 VirtualDate.current = virtualDate;
1233 for (int i = 0; i < HourSinceLastActive; i++)
1234 {
1235 virtualDate.SimulateHour();
1236 if (!virtualDate.IsWinter)
1237 {
1238 num3++;
1239 }
1240 }
1241 EClass._map.things.ForeachReverse(delegate(Thing t)
1242 {
1243 t.DecayNatural(HourSinceLastActive);
1244 });
1245 VirtualDate.current = null;
1246 if (!IsPCFaction)
1247 {
1248 return;
1249 }
1250 int num4 = 0;
1251 foreach (Chara item2 in list)
1252 {
1253 if (item2.IsPCParty)
1254 {
1255 continue;
1256 }
1257 if (!item2.IsHomeMember())
1258 {
1259 if (item2.id == "bee")
1260 {
1261 num4++;
1262 }
1263 if (num2 > 0 && item2.IsGuest())
1264 {
1265 item2.ChooseNewGoal();
1266 item2.ai.SimulateZone(num2);
1267 }
1268 continue;
1269 }
1270 if (num2 > 0)
1271 {
1272 Goal goalWork = item2.GetGoalWork();
1273 item2.SetAI(goalWork);
1274 if (goalWork is GoalWork)
1275 {
1276 (goalWork as GoalWork).FindWork(item2);
1277 }
1278 item2.ai.SimulateZone(num2);
1279 goalWork = item2.GetGoalHobby();
1280 item2.SetAI(goalWork);
1281 if (goalWork is GoalWork)
1282 {
1283 (goalWork as GoalWork).FindWork(item2);
1284 }
1285 item2.ai.SimulateZone(num2);
1286 }
1287 item2.ChooseNewGoal();
1288 if (item2.conSuspend == null)
1289 {
1290 item2.ai.OnSimulatePosition();
1291 }
1292 }
1293 List<Thing> list2 = new List<Thing>();
1294 foreach (Thing thing in map.things)
1295 {
1296 if (thing.IsInstalled && thing.trait is TraitBeekeep)
1297 {
1298 list2.Add(thing);
1299 }
1300 }
1301 if (num4 >= list2.Count)
1302 {
1303 return;
1304 }
1305 for (int j = num4; j < list2.Count; j++)
1306 {
1307 if (EClass.rnd(200) <= HourSinceLastActive)
1308 {
1309 Chara chara = CharaGen.Create("bee");
1310 AddCard(chara, list2.RandomItem().pos);
1311 Hostility c_originalHostility = (chara.hostility = Hostility.Neutral);
1312 chara.c_originalHostility = c_originalHostility;
1313 }
1314 }
1315 }
1316
1318 {
1319 ZoneTransition zoneTransition = c.global?.transition;
1320 Zone zone = zoneTransition?.lastZone;
1321 ZoneTransition.EnterState enterState = zoneTransition?.state ?? destState;
1322 bool flag = zone == null || zone.lv > base.lv;
1323 if (IsRegion)
1324 {
1325 if (zone != null && !EClass.player.simulatingZone)
1326 {
1327 Zone topZone = zone.GetTopZone();
1328 if (GetZoneAt(topZone.x, topZone.y) != null)
1329 {
1330 return new Point(topZone.mapX, topZone.mapY);
1331 }
1332 }
1333 }
1334 else if (c.IsPC && EClass.player.lastZonePos != null && zone != null && zone.IsRegion && (enterState == ZoneTransition.EnterState.Left || enterState == ZoneTransition.EnterState.Right || enterState == ZoneTransition.EnterState.Top || enterState == ZoneTransition.EnterState.Bottom))
1335 {
1336 return EClass.player.lastZonePos;
1337 }
1338 if (enterState == ZoneTransition.EnterState.Region)
1339 {
1340 enterState = RegionEnterState;
1341 }
1342 if (this is Zone_Kapul && enterState == ZoneTransition.EnterState.Left)
1343 {
1344 enterState = ZoneTransition.EnterState.Right;
1345 }
1346 float rate = zoneTransition?.ratePos ?? (-1f);
1347 if (IsPCFaction)
1348 {
1349 if ((uint)(enterState - 3) <= 4u || enterState == ZoneTransition.EnterState.Return)
1350 {
1352 if (spot != null)
1353 {
1354 Point nearestPoint = (spot.trait as TraitSpotGuidePC).GetRandomPoint((Point p) => !p.IsBlocked && !p.Equals(spot.pos)).GetNearestPoint();
1355 if (nearestPoint != null && nearestPoint.IsValid)
1356 {
1357 return nearestPoint;
1358 }
1359 }
1360 }
1361 }
1362 while (true)
1363 {
1364 switch (enterState)
1365 {
1366 case ZoneTransition.EnterState.UndergroundOrSky:
1367 return new Point(zoneTransition.x, zoneTransition.z);
1368 case ZoneTransition.EnterState.Teleport:
1369 {
1370 foreach (Thing thing2 in map.things)
1371 {
1372 if (thing2.IsInstalled)
1373 {
1374 TraitTeleporter traitTeleporter = thing2.trait as TraitTeleporter;
1375 if (traitTeleporter != null)
1376 {
1377 Debug.Log(zoneTransition.idTele + "/" + traitTeleporter.id.IsEmpty(traitTeleporter.GetParam(3)) + "/" + traitTeleporter.GetParam(3));
1378 }
1379 if (traitTeleporter != null && !zoneTransition.idTele.IsEmpty() && zoneTransition.idTele == traitTeleporter.id.IsEmpty(traitTeleporter.GetParam(3)))
1380 {
1381 return thing2.pos.GetNearestPoint();
1382 }
1383 }
1384 }
1385 foreach (Thing thing3 in map.things)
1386 {
1387 if (thing3.IsInstalled && thing3.trait is TraitTeleporter traitTeleporter2 && traitTeleporter2.IsFor(zoneTransition.lastZone))
1388 {
1389 return thing3.pos.GetNearestPoint();
1390 }
1391 }
1392 Thing randomThing2 = EClass._map.props.installed.traits.GetRandomThing<TraitTeleporter>();
1393 if (randomThing2 != null)
1394 {
1395 return randomThing2.pos.GetNearestPoint();
1396 }
1397 goto case ZoneTransition.EnterState.Return;
1398 }
1399 case ZoneTransition.EnterState.Return:
1400 case ZoneTransition.EnterState.Elevator:
1401 case ZoneTransition.EnterState.Moongate:
1402 {
1403 if (enterState == ZoneTransition.EnterState.Elevator)
1404 {
1405 foreach (Thing thing4 in map.things)
1406 {
1407 if (thing4.IsInstalled && thing4.trait is TraitElevator traitElevator && traitElevator.IsFor(zoneTransition.lastZone))
1408 {
1409 return thing4.pos.GetNearestPoint();
1410 }
1411 }
1412 Thing randomThing = EClass._map.props.installed.traits.GetRandomThing<TraitElevator>();
1413 if (randomThing != null)
1414 {
1415 return randomThing.pos.GetNearestPoint();
1416 }
1417 }
1418 Thing thing = null;
1419 thing = map.props.installed.traits.GetRandomThing<TraitWaystone>();
1420 if (thing != null)
1421 {
1422 return thing.pos.GetNearestPoint();
1423 }
1424 thing = map.props.installed.traits.GetRandomThing<TraitCoreZone>();
1425 if (thing != null)
1426 {
1427 return thing.pos.GetNearestPoint();
1428 }
1429 if (base.lv == 0)
1430 {
1431 goto IL_04a1;
1432 }
1433 flag = base.lv <= 0;
1434 break;
1435 }
1436 case ZoneTransition.EnterState.Center:
1437 case ZoneTransition.EnterState.Encounter:
1438 if (map.config.embarkX != 0)
1439 {
1440 return new Point(map.config.embarkX, map.config.embarkY);
1441 }
1442 return map.GetCenterPos().GetNearestPoint(allowBlock: false, allowChara: false);
1443 case ZoneTransition.EnterState.Top:
1444 return map.bounds.GetTopPos(rate).GetNearestPoint(allowBlock: false, allowChara: false);
1445 case ZoneTransition.EnterState.Right:
1446 return map.bounds.GetRightPos(rate).GetNearestPoint(allowBlock: false, allowChara: false);
1447 case ZoneTransition.EnterState.Bottom:
1448 return map.bounds.GetBottomPos(rate).GetNearestPoint(allowBlock: false, allowChara: false);
1449 case ZoneTransition.EnterState.Left:
1450 return map.bounds.GetLeftPos(rate).GetNearestPoint(allowBlock: false, allowChara: false);
1451 case ZoneTransition.EnterState.Dead:
1452 case ZoneTransition.EnterState.Exact:
1453 case ZoneTransition.EnterState.PortalReturn:
1454 case ZoneTransition.EnterState.Fall:
1455 if (zoneTransition.x == 0 && EClass._map.bounds.x != 0)
1456 {
1457 return new Point(map.config.embarkX, map.config.embarkY);
1458 }
1459 return new Point(zoneTransition.x, zoneTransition.z);
1460 case ZoneTransition.EnterState.RandomVisit:
1461 return GetRandomVisitPos(c);
1462 case ZoneTransition.EnterState.Down:
1463 flag = true;
1464 break;
1465 case ZoneTransition.EnterState.Up:
1466 flag = false;
1467 break;
1468 }
1469 break;
1470 IL_04a1:
1471 enterState = ZoneTransition.EnterState.Center;
1472 }
1473 foreach (Thing thing5 in map.things)
1474 {
1475 if (thing5.trait is TraitNewZone { zone: not null } traitNewZone && zone != null && traitNewZone.zone.uid == zone.uid)
1476 {
1477 if (c != null && enterState != 0)
1478 {
1479 c.SetDir(traitNewZone.owner.dir);
1480 }
1481 return traitNewZone.GetExitPos();
1482 }
1483 }
1484 foreach (Thing thing6 in map.things)
1485 {
1486 if (thing6.trait is TraitNewZone traitNewZone2 && ((flag && traitNewZone2.IsUpstairs) || (!flag && traitNewZone2.IsDownstairs)))
1487 {
1488 if (c != null && enterState != 0)
1489 {
1490 c.SetDir(traitNewZone2.owner.dir);
1491 }
1492 return traitNewZone2.GetExitPos();
1493 }
1494 }
1495 return GetRandomVisitPos(c);
1496 }
1497
1499 {
1500 Point point = null;
1501 if (EClass.rnd(3) == 0 && map.rooms.listRoom.Count > 0)
1502 {
1503 point = map.rooms.listRoom.RandomItem().points.RandomItem();
1504 }
1505 if (point == null && EClass.rnd(4) != 0)
1506 {
1507 IEnumerable<Chara> ie = map.charas.Where((Chara t) => t.trait.ShopType != 0 && t.pos != null && t.pos.IsValid);
1508 if (ie.Count() > 0)
1509 {
1510 point = ie.RandomItem().pos.GetRandomPoint(3);
1511 }
1512 }
1513 if (point == null)
1514 {
1515 point = map.bounds.GetRandomSurface(centered: false, walkable: true, !IsPCFaction && !(this is Zone_Civilized)) ?? map.bounds.GetRandomPoint();
1516 }
1517 return point.GetNearestPoint(allowBlock: false, allowChara: false, allowInstalled: false) ?? EClass._map.GetCenterPos().GetNearestPoint();
1518 }
1519
1521 {
1522 Point spawnPosPC = null;
1523 if (EClass.pc.currentZone == this)
1524 {
1525 spawnPosPC = GetSpawnPos(EClass.pc);
1526 }
1527 if (spawnPosPC == null)
1528 {
1529 spawnPosPC = map.GetCenterPos();
1530 }
1531 if (spawnPosPC.IsValid && EClass.pc.global.transition != null && spawnPosPC.HasBlock)
1532 {
1533 spawnPosPC = spawnPosPC.GetNearestPoint();
1534 }
1535 spawnPosPC = spawnPosPC.Clamp(useBounds: true).GetNearestPoint();
1536 foreach (Chara c in EClass.game.cards.globalCharas.Values)
1537 {
1538 if (c.currentZone != this)
1539 {
1540 continue;
1541 }
1542 if (c.parent is Chara)
1543 {
1544 Chara chara = c.parent as Chara;
1545 c.currentZone = chara.currentZone;
1546 }
1547 else
1548 {
1549 if (c.isDead)
1550 {
1551 continue;
1552 }
1553 if (c.isRestrained && c.currentZone == EClass.pc.currentZone && (!c.pos.IsValid || c.pos.FindThing<TraitShackle>() == null))
1554 {
1555 c.isRestrained = false;
1556 }
1557 if (c.global.transition != null)
1558 {
1559 Point pos = (c.IsPC ? spawnPosPC : (c.IsPCParty ? spawnPosPC.GetNearestPoint(allowBlock: false, allowChara: false, allowInstalled: true, ignoreCenter: true) : GetSpawnPos(c)));
1560 if (c.IsPCParty && !c.IsPC)
1561 {
1562 if (c.host == EClass.pc)
1563 {
1564 pos.Set(spawnPosPC);
1565 }
1566 else if (pos.Equals(spawnPosPC) || !PathManager.Instance.IsPathClear(spawnPosPC, pos, c, 5))
1567 {
1568 c.pos.Set(spawnPosPC);
1569 if (!spawnPosPC.ForeachNearestPoint(delegate(Point p)
1570 {
1571 if (PathManager.Instance.IsPathClear(spawnPosPC, p, c, 10) && !p.Equals(spawnPosPC))
1572 {
1573 pos.Set(p);
1574 return true;
1575 }
1576 return false;
1577 }, allowBlock: false, EClass.pc.party.members.Count >= 12, allowInstalled: true, ignoreCenter: true, EClass._zone.IsRegion ? 2 : 6))
1578 {
1579 pos.Set(spawnPosPC);
1580 }
1581 }
1582 }
1583 c.pos.Set(pos);
1584 c.global.transition = null;
1585 }
1586 map.charas.Add(c);
1587 map.AddCardOnActivate(c);
1588 }
1589 }
1590 foreach (Chara item in EClass.player.listSummon)
1591 {
1592 Point nearestPoint = spawnPosPC.GetNearestPoint(allowBlock: false, allowChara: false, allowInstalled: true, ignoreCenter: true);
1593 item.enemy = null;
1594 item.pos.Set(nearestPoint);
1595 map.charas.Add(item);
1597 }
1598 EClass.player.listSummon.Clear();
1599 }
1600
1601 public void Deactivate()
1602 {
1603 if (!IsUserZone && !IsPCFaction && map != null)
1604 {
1605 List<Thing> list = new List<Thing>();
1606 foreach (Thing thing in map.things)
1607 {
1608 if (thing.rarity >= Rarity.Artifact && thing.HasTag(CTAG.godArtifact))
1609 {
1610 list.Add(thing);
1611 }
1612 }
1613 if (this is Zone_Tent)
1614 {
1615 foreach (Thing item in map.props.stocked.Things.Concat(map.props.roaming.Things))
1616 {
1617 if (item.IsContainer)
1618 {
1619 foreach (Thing thing2 in item.things)
1620 {
1621 if (thing2.trait is TraitTent)
1622 {
1623 list.Add(thing2);
1624 }
1625 }
1626 }
1627 if (item.trait is TraitTent)
1628 {
1629 list.Add(item);
1630 }
1631 }
1632 }
1633 if (list.Count > 0)
1634 {
1635 Msg.Say("pick_valuable");
1636 foreach (Thing item2 in list)
1637 {
1638 Msg.Say("pick_valuable2", item2);
1639 EClass.pc.AddCard(item2);
1640 }
1641 }
1642 }
1643 base.isPeace = false;
1644 OnBeforeDeactivate();
1645 if (IsPCFaction)
1646 {
1647 foreach (Chara member in branch.members)
1648 {
1649 member.ValidateWorks();
1650 }
1651 }
1652 EClass.game.lastActiveZone = EClass.game.activeZone;
1653 base.lastActive = EClass.world.date.GetRaw();
1654 map.OnDeactivate();
1655 EClass.scene.Clear();
1656 EClass.game.activeZone = null;
1657 if (IsInstance)
1658 {
1659 UnloadMap();
1660 base.isGenerated = false;
1661 }
1662 if (forceRegenerate)
1663 {
1664 UnloadMap();
1665 }
1666 OnDeactivate();
1667 }
1668
1669 public void OnKillGame()
1670 {
1671 foreach (Thing thing in map.things)
1672 {
1673 if (thing.renderer.hasActor)
1674 {
1675 thing.renderer.KillActor();
1676 }
1677 }
1678 }
1679
1680 public void UnloadMap()
1681 {
1682 map = null;
1683 if (bp != null)
1684 {
1685 bp.map = null;
1686 }
1687 if (branch != null)
1688 {
1689 branch.OnUnloadMap();
1690 }
1691 Debug.Log("Unloaded Map:" + this);
1692 }
1693
1694 public void ClaimZone(bool debug = false, Point pos = null)
1695 {
1697 SetMainFaction(EClass.pc.faction);
1698 branch = new FactionBranch();
1699 branch.OnCreate(this);
1700 if (base.icon == 0)
1701 {
1702 base.icon = 332;
1703 }
1704 instance = null;
1705 base.dateExpire = 0;
1706 SetInt(2, EClass.world.date.GetRaw());
1707 Register();
1708 foreach (Thing thing in map.things)
1709 {
1710 thing.isNPCProperty = false;
1711 }
1714 if (debug)
1715 {
1716 for (int i = 0; i < 7; i++)
1717 {
1718 Chara chara = CharaGen.CreateFromFilter("c_neutral");
1719 EClass._zone.AddCard(chara, EClass._map.bounds.GetRandomPoint().GetNearestPoint(allowBlock: false, allowChara: false, allowInstalled: false));
1720 branch.AddMemeber(chara);
1721 }
1722 }
1723 else
1724 {
1725 Msg.Say("claimedZone");
1726 EClass.Branch.Log("claimedZone");
1727 EClass.Sound.Play("jingle_embark");
1728 EClass.pc.PlaySound("build");
1729 if (pos == null)
1730 {
1731 pos = EClass.pc.pos.GetNearestPoint(allowBlock: false, allowChara: true, allowInstalled: false);
1732 }
1733 Effect.Get("aura_heaven").Play(pos);
1734 EClass._zone.AddCard(ThingGen.Create("core_zone"), pos).SetPlaceState(PlaceState.installed);
1735 }
1736 base.idPrefix = 0;
1738 {
1739 EClass.player.spawnZone = EClass._zone;
1740 }
1742 {
1743 EClass._zone.SetBGM(new List<int> { 41, 90, 44, 43 });
1745 }
1746 }
1747
1748 public void AbandonZone()
1749 {
1750 FactionBranch destBranch = ((EClass.pc.homeBranch == branch) ? EClass.game.StartZone.branch : EClass.pc.homeBranch);
1751 branch.members.ForeachReverse(delegate(Chara m)
1752 {
1753 destBranch.AddMemeber(m);
1754 if (!m.IsPCParty)
1755 {
1756 m.MoveZone(destBranch.owner);
1757 }
1758 });
1760 SetMainFaction(null);
1761 base.dateExpire = EClass.world.date.GetRaw() + 10080;
1762 }
1763
1764 public bool CanDestroy()
1765 {
1766 if (IsActiveZone || IsPCFaction || EClass.player.simulatingZone)
1767 {
1768 return false;
1769 }
1770 if (IsInstance)
1771 {
1772 return true;
1773 }
1774 bool flag = false;
1775 switch (id)
1776 {
1777 case "cave_dragon":
1778 if (!(this is Zone_DungeonDragon))
1779 {
1780 flag = true;
1781 }
1782 break;
1783 case "cave_yeek":
1784 if (!(this is Zone_DungeonYeek))
1785 {
1786 flag = true;
1787 }
1788 break;
1789 case "cave_mino":
1790 if (!(this is Zone_DungeonMino))
1791 {
1792 flag = true;
1793 }
1794 break;
1795 }
1796 Zone topZone = GetTopZone();
1797 if (!flag)
1798 {
1799 if (base.dateExpire == 0 || !EClass.world.date.IsExpired(base.dateExpire))
1800 {
1801 return false;
1802 }
1803 if (!base.isRandomSite && !(this is Zone_Field) && (topZone == null || topZone == this || topZone.FindDeepestZone() == this))
1804 {
1805 return false;
1806 }
1807 }
1808 if (EClass.pc.currentZone == null || EClass.pc.currentZone is Zone_Tent || topZone == EClass.pc.currentZone.GetTopZone() || (EClass.player.nextZone != null && topZone == EClass.player.nextZone.GetTopZone()))
1809 {
1810 return false;
1811 }
1813 {
1815 if (zone != null && zone.GetTopZone() == this)
1816 {
1817 return false;
1818 }
1819 }
1820 return true;
1821 }
1822
1823 public override void _OnBeforeSave()
1824 {
1825 if (CanDestroy())
1826 {
1827 Debug.Log("Deleting Zone:" + this);
1828 if (!destryoed)
1829 {
1830 Destroy();
1831 }
1832 }
1833 else if (map != null)
1834 {
1835 Debug.Log("Saving Zone:" + this);
1836 map.Save(base.pathSave);
1837 if (!base.isMapSaved)
1838 {
1839 base.isMapSaved = true;
1840 IO.DeleteDirectory(base.pathSave + "Texture Replace");
1841 IO.CopyDir(pathTemp + "Texture Replace", base.pathSave + "/Texture Replace");
1842 }
1843 if (!IsActiveZone)
1844 {
1845 UnloadMap();
1846 }
1847 }
1848 }
1849
1850 public override void OnLoad()
1851 {
1852 if (branch != null)
1853 {
1854 branch.SetOwner(this);
1855 }
1856 events.OnLoad(this);
1857 }
1858
1859 public override void Destroy()
1860 {
1861 children.ForeachReverse(delegate(Spatial z)
1862 {
1863 z.Destroy();
1864 });
1865 if (map != null)
1866 {
1867 UnloadMap();
1868 }
1869 if (parent != null && parent.IsRegion && instance == null)
1870 {
1871 EClass.scene.elomap.SetZone(base.x, base.y, null, updateMesh: true);
1872 }
1873 EClass.game.spatials.Remove(this);
1874 destryoed = true;
1875 base.isGenerated = false;
1876 }
1877
1878 public void ClearZones(Zone current = null)
1879 {
1880 if (map != null)
1881 {
1882 UnloadMap();
1883 }
1884 base.isGenerated = false;
1885 Zone topZone = GetTopZone();
1886 if (topZone != this)
1887 {
1888 topZone.ClearZones(this);
1889 return;
1890 }
1891 children.ForeachReverse(delegate(Spatial c)
1892 {
1893 if (c != current)
1894 {
1895 c.Destroy();
1896 }
1897 });
1898 }
1899
1900 public void OnChildNumChange(Card c)
1901 {
1902 }
1903
1905 {
1906 return this;
1907 }
1908
1910 {
1911 if (parent == null || parent.IsRegion)
1912 {
1913 return this;
1914 }
1915 return parent as Zone;
1916 }
1917
1918 public Card AddCardSplinkle(Card t, Point center, int radius = 4)
1919 {
1920 Point point = new Point(center);
1921 for (int i = 0; i < 1000; i++)
1922 {
1923 point.x = center.x + EClass.rnd(radius) - EClass.rnd(radius);
1924 point.z = center.z + EClass.rnd(radius) - EClass.rnd(radius);
1925 if (point.IsValid && !point.IsBlocked && !point.HasChara)
1926 {
1927 return AddCard(t, point);
1928 }
1929 }
1930 return AddCard(t, center);
1931 }
1932
1933 public Chara AddChara(string id, int x, int z)
1934 {
1935 return AddCard(CharaGen.Create(id), x, z) as Chara;
1936 }
1937
1938 public Card AddThing(string id, int x, int z)
1939 {
1940 return AddCard(ThingGen.Create(id), x, z);
1941 }
1942
1943 public Card AddThing(string id, Point p)
1944 {
1945 return AddThing(id, p.x, p.z);
1946 }
1947
1948 public Card AddCard(Card t, Point point)
1949 {
1950 return AddCard(t, point.x, point.z);
1951 }
1952
1954 {
1955 return AddCard(t, 0, 0);
1956 }
1957
1958 public Card AddCard(Card t, int x, int z)
1959 {
1960 if (t.parent != null)
1961 {
1962 t.parent.RemoveCard(t);
1963 }
1964 t.parent = this;
1965 Chara chara = t.Chara;
1966 if (chara != null)
1967 {
1968 chara.currentZone = this;
1969 chara.SetAI(new NoGoal());
1970 }
1971 if (IsActiveZone)
1972 {
1973 map.OnCardAddedToZone(t, x, z);
1974 if (isStarted && t.isThing && t.placeState == PlaceState.roaming && !ignoreSpawnAnime)
1975 {
1976 t.PlayAnimeLoot();
1977 }
1978 ignoreSpawnAnime = false;
1979 }
1980 if (chara != null && EClass.player != null && !chara.hasSpawned)
1981 {
1982 EClass.player.codex.AddSpawn(chara.id);
1983 chara.hasSpawned = true;
1984 }
1985 return t;
1986 }
1987
1988 public void RemoveCard(Card t)
1989 {
1990 if (IsActiveZone)
1991 {
1992 map.OnCardRemovedFromZone(t);
1993 }
1994 t.parent = null;
1995 if (t.isChara)
1996 {
1997 t.Chara.currentZone = null;
1998 }
1999 if (t.isThing && !t.trait.IDActorEx.IsEmpty())
2000 {
2002 }
2003 if (t.renderer.hasActor)
2004 {
2006 }
2007 }
2008
2009 public T GetRandomSpot<T>() where T : Trait
2010 {
2011 return EClass._map.props.installed.traits.GetRandomThing<T>() as T;
2012 }
2013
2014 public bool TryAddThingInSpot<T>(Thing t, bool useContainer = true) where T : Trait
2015 {
2016 Thing randomThing = EClass._map.props.installed.traits.GetRandomThing<T>();
2017 if (randomThing == null)
2018 {
2019 AddCard(t, EClass._map.bounds.GetRandomSurface());
2020 return false;
2021 }
2022 if (useContainer && (!t.IsContainer || t.things.Count == 0))
2023 {
2024 List<Thing> list = new List<Thing>();
2025 foreach (Point item in randomThing.trait.ListPoints(null, onlyPassable: false))
2026 {
2027 foreach (Card item2 in item.ListCards())
2028 {
2029 if (item2.IsContainer && !(item2.trait is TraitDeliveryChest))
2030 {
2031 list.Add(item2.Thing);
2032 }
2033 }
2034 }
2035 if (TryAddThingInSharedContainer(t, list, add: true, msg: false, null, sharedOnly: false))
2036 {
2037 return true;
2038 }
2039 }
2040 AddCard(t, randomThing.trait.GetRandomPoint());
2041 return true;
2042 }
2043
2044 public List<Thing> TryListThingsInSpot<T>(Func<Thing, bool> func = null) where T : TraitSpot
2045 {
2046 List<T> list = new List<T>();
2047 List<Thing> list2 = new List<Thing>();
2048 foreach (Thing thing in EClass._map.things)
2049 {
2050 if (thing.IsInstalled && thing.trait is T)
2051 {
2052 list.Add(thing.trait as T);
2053 }
2054 }
2055 foreach (T item in list)
2056 {
2057 foreach (Point item2 in item.ListPoints(null, onlyPassable: false))
2058 {
2059 foreach (Thing thing2 in item2.Things)
2060 {
2061 if (!thing2.IsInstalled)
2062 {
2063 continue;
2064 }
2065 if (thing2.things.Count == 0)
2066 {
2067 if (IsValid(thing2))
2068 {
2069 list2.Add(thing2);
2070 }
2071 continue;
2072 }
2073 foreach (Thing item3 in thing2.things.List((Thing _t) => IsValid(_t)))
2074 {
2075 list2.Add(item3);
2076 }
2077 }
2078 }
2079 }
2080 return list2;
2081 bool IsValid(Thing t)
2082 {
2083 if (func != null && !func(t))
2084 {
2085 return false;
2086 }
2087 return true;
2088 }
2089 }
2090
2091 public bool TryAddThingInSharedContainer(Thing t, List<Thing> containers = null, bool add = true, bool msg = false, Chara chara = null, bool sharedOnly = true)
2092 {
2093 Thing dest = null;
2094 int priority = -1;
2095 ContainerFlag flag = t.category.GetRoot().id.ToEnum<ContainerFlag>();
2096 if (flag == ContainerFlag.none)
2097 {
2098 flag = ContainerFlag.other;
2099 }
2100 if (containers == null)
2101 {
2102 containers = EClass._map.props.installed.containers;
2103 }
2104 if (SearchDest() != null)
2105 {
2106 return true;
2107 }
2108 if (dest == null)
2109 {
2110 return false;
2111 }
2112 if (add)
2113 {
2114 if (msg)
2115 {
2116 chara.Say("putSharedItem", chara, t, dest.GetName(NameStyle.Full));
2117 }
2118 dest.AddThing(t);
2119 }
2120 return true;
2121 Thing SearchDest()
2122 {
2123 foreach (Thing container in containers)
2124 {
2125 Thing thing = container;
2126 if (thing.trait is TraitShippingChest)
2127 {
2129 }
2130 if ((!sharedOnly || thing.IsSharedContainer) && thing.c_lockLv <= 0 && (thing.things.Count < thing.things.MaxCapacity || thing.things.CanStack(t) != t))
2131 {
2132 Window.SaveData windowSaveData = thing.GetWindowSaveData();
2133 if (windowSaveData != null)
2134 {
2135 if (windowSaveData.priority <= priority || (windowSaveData.noRotten && t.IsDecayed) || (windowSaveData.onlyRottable && t.trait.Decay == 0))
2136 {
2137 continue;
2138 }
2140 if (windowSaveData.userFilter)
2141 {
2142 filterResult = windowSaveData.IsFilterPass(t.GetName(NameStyle.Full, 1));
2143 if (filterResult == Window.SaveData.FilterResult.Block)
2144 {
2145 continue;
2146 }
2147 }
2148 if (filterResult != Window.SaveData.FilterResult.PassWithoutFurtherTest)
2149 {
2150 if (windowSaveData.advDistribution)
2151 {
2152 bool flag2 = false;
2153 foreach (int cat in windowSaveData.cats)
2154 {
2155 if (t.category.uid == cat)
2156 {
2157 flag2 = true;
2158 break;
2159 }
2160 }
2161 if (!flag2)
2162 {
2163 continue;
2164 }
2165 }
2166 else if (windowSaveData.flag.HasFlag(flag))
2167 {
2168 continue;
2169 }
2170 }
2171 priority = windowSaveData.priority;
2172 }
2173 else
2174 {
2175 if (priority != -1)
2176 {
2177 continue;
2178 }
2179 priority = 0;
2180 }
2181 dest = thing;
2182 }
2183 }
2184 return null;
2185 }
2186 }
2187
2188 public bool TryAddThing(Thing target, Point p, bool destroyIfFail = false)
2189 {
2190 int num = 0;
2191 if (p.cell.detail != null)
2192 {
2193 foreach (Thing thing in p.cell.detail.things)
2194 {
2195 if (thing.placeState == PlaceState.roaming)
2196 {
2197 if (target.TryStackTo(thing))
2198 {
2199 return true;
2200 }
2201 num++;
2202 }
2203 }
2204 }
2205 if (num == 0 || !destroyIfFail)
2206 {
2207 EClass._zone.AddCard(target, p);
2208 return true;
2209 }
2210 target.Destroy();
2211 return false;
2212 }
2213
2214 public Thing TryGetThingFromSharedContainer(Func<Thing, bool> func)
2215 {
2216 foreach (Thing container in EClass._map.props.installed.containers)
2217 {
2218 if (container.IsSharedContainer)
2219 {
2220 Thing thing = container.things.Find(func);
2221 if (thing != null)
2222 {
2223 return thing;
2224 }
2225 }
2226 }
2227 return null;
2228 }
2229
2230 public Thing TryGetRestock<T>(string idCat) where T : TraitSpot
2231 {
2232 List<T> list = new List<T>();
2233 foreach (Thing thing2 in EClass._map.things)
2234 {
2235 if (thing2.IsInstalled && thing2.trait is T)
2236 {
2237 list.Add(thing2.trait as T);
2238 }
2239 }
2240 foreach (T item in list)
2241 {
2242 foreach (Point item2 in item.ListPoints(null, onlyPassable: false))
2243 {
2244 foreach (Thing thing3 in item2.Things)
2245 {
2246 if (!thing3.IsInstalled || thing3.isSale)
2247 {
2248 continue;
2249 }
2250 if (thing3.things.Count == 0)
2251 {
2252 if (IsValid(thing3, insideContainer: false))
2253 {
2254 return thing3;
2255 }
2256 continue;
2257 }
2258 Thing thing = thing3.things.Find((Thing _t) => IsValid(_t, insideContainer: true));
2259 if (thing != null)
2260 {
2261 return thing;
2262 }
2263 }
2264 }
2265 }
2266 return null;
2267 bool IsValid(Thing t, bool insideContainer)
2268 {
2269 if (t.category.id != idCat || !TraitSalesTag.CanTagSale(t, insideContainer))
2270 {
2271 return false;
2272 }
2273 return true;
2274 }
2275 }
2276
2278 {
2279 string text = IdProfile;
2280 if (text.IsEmpty())
2281 {
2282 Region region = parent as Region;
2283 if (base.lv != 0)
2284 {
2285 text = ((base.lv < 0) ? "Underground" : "Sky");
2286 }
2287 else if (region != null)
2288 {
2290 text = EClass.scene.elomapActor.elomap.GetTileInfo(base.x, base.y).idZoneProfile;
2291 if (bp != null)
2292 {
2293 name = Lang.GetList("zone_" + text.Split('/')[1]).RandomItem();
2294 bp.surrounding = new EloMap.TileInfo[3, 3];
2295 for (int i = 0; i < 3; i++)
2296 {
2297 for (int j = 0; j < 3; j++)
2298 {
2299 bp.surrounding[j, i] = EClass.scene.elomapActor.elomap.GetTileInfo(base.x - 1 + j, base.y - 1 + i);
2300 }
2301 }
2302 if (text == "Random/R_Shore")
2303 {
2304 base.isBeach = true;
2305 }
2306 }
2307 }
2308 else
2309 {
2310 text = "Random";
2311 }
2312 idProfile = text;
2313 }
2314 return ZoneProfile.Load(text);
2315 }
2316
2317 public void CreateBP()
2318 {
2319 bp = new ZoneBlueprint();
2320 bp.Create();
2321 bp.genSetting.seed = base.Seed;
2322 OnCreateBP();
2323 }
2324
2325 public virtual void OnCreateBP()
2326 {
2327 }
2328
2329 public void Generate()
2330 {
2331 base.isGenerated = true;
2332 if (bp == null)
2333 {
2334 CreateBP();
2335 }
2336 if (bp.map == null)
2337 {
2338 bp.GenerateMap(this);
2339 }
2340 map.SetZone(this);
2341 Zone_Field zone_Field = this as Zone_Field;
2342 if (IdBiome == "Sand" || IdBiome == "Water" || IsUnderwater)
2343 {
2344 int num = 1 + EClass.rnd((IdBiome == "Water") ? 3 : 2);
2345 for (int i = 0; i < num; i++)
2346 {
2347 Point randomSurface = EClass._map.bounds.GetRandomSurface(centered: false, walkable: true, allowWater: true);
2348 if (!randomSurface.HasObj && !randomSurface.HasThing)
2349 {
2350 Thing t = ThingGen.Create("pearl_oyster", new string[3] { "wood_birch", "poplar", "coralwood" }.RandomItem(), ContentLv);
2351 EClass._zone.AddCard(t, randomSurface).Install();
2352 }
2353 }
2354 num = 4 + EClass.rnd(5);
2355 for (int j = 0; j < num; j++)
2356 {
2357 Point randomSurface2 = EClass._map.bounds.GetRandomSurface(centered: false, walkable: true, allowWater: true);
2358 if (!randomSurface2.HasObj && !randomSurface2.HasThing && (IsUnderwater || randomSurface2.cell.IsTopWaterAndNoSnow || EClass.rnd(6) == 0))
2359 {
2360 EClass._zone.AddCard(ThingGen.Create("70", -1, ContentLv), randomSurface2);
2361 }
2362 }
2363 }
2364 if (IsUnderwater)
2365 {
2366 for (int k = 0; k < 30 + EClass.rnd(30); k++)
2367 {
2368 SpawnMob(null, SpawnSetting.Fish());
2369 }
2370 Crawler crawler = Crawler.Create("pasture");
2371 int num2 = (EClass.debug.enable ? 3 : EClass.rnd(EClass.rnd(EClass.rnd(EClass.rnd(5) + 1) + 1) + 1));
2372 bool flag = this is Zone_Field;
2373 Thing seed = null;
2374 if (IsNefia)
2375 {
2376 int num3 = Mathf.Min(EClass._zone.DangerLv, EClass.pc.Evalue(286) * 2 / 3);
2377 if (num3 > 0)
2378 {
2380 Rand.SetSeed(EClass._zone.uid * 10 + num3);
2381 TraitSeed.LevelSeed(seed, (seed.trait as TraitSeed).row, num3);
2382 Rand.SetSeed();
2383 seed.elements.SetBase(2, EClass.curve(seed.encLV, 50, 10, 80));
2384 }
2385 }
2386 crawler.CrawlUntil(EClass._map, () => EClass._map.GetRandomPoint(), num2 + (flag ? 4 : 0), delegate(Crawler.Result r)
2387 {
2388 int num6 = 137;
2389 foreach (Point point in r.points)
2390 {
2391 if (!point.cell.isModified && !point.HasThing && !point.HasBlock && !point.HasObj)
2392 {
2393 map.SetObj(point.x, point.z, num6);
2394 int idx = 3 + ((EClass.rnd(3) == 0) ? 1 : 0) + ((EClass.rnd(3) == 0) ? (-1) : 0) + ((EClass.rnd(3) == 0) ? (-1) : 0);
2395 point.growth.SetStage(idx);
2396 if (seed != null)
2397 {
2398 EClass._map.AddPlant(point, seed);
2399 }
2400 }
2401 }
2402 return false;
2403 });
2404 crawler.CrawlUntil(tries: EClass.rnd(EClass.rnd(5) + 1) + 1 + (flag ? 20 : 0), map: EClass._map, onStart: () => EClass._map.GetRandomPoint(), canComplete: delegate(Crawler.Result r)
2405 {
2406 int num5 = 136;
2407 foreach (Point point2 in r.points)
2408 {
2409 if (!point2.cell.isModified && !point2.HasThing && !point2.HasBlock && !point2.HasObj)
2410 {
2411 map.SetObj(point2.x, point2.z, num5, 1, EClass.rnd(4));
2412 }
2413 }
2414 return false;
2415 });
2416 crawler.CrawlUntil(tries: EClass.rnd(EClass.rnd(10) + 1) + 3 + (flag ? 40 : 0), map: EClass._map, onStart: () => EClass._map.GetRandomPoint(), canComplete: delegate(Crawler.Result r)
2417 {
2418 int idFloor = 121;
2419 foreach (Point point3 in r.points)
2420 {
2421 map.SetFloor(point3.x, point3.z, 97, idFloor, Mathf.Clamp(4 - r.startPos.Distance(point3) + EClass.rnd(3) - EClass.rnd(3), 0, 3));
2422 }
2423 return false;
2424 });
2425 }
2426 if (zone_Field != null)
2427 {
2428 if (EClass.rnd(3) == 0)
2429 {
2430 int num4 = EClass.rnd(2);
2431 for (int l = 0; l < num4; l++)
2432 {
2433 Point randomSurface3 = EClass._map.bounds.GetRandomSurface();
2434 if (!randomSurface3.HasObj && !randomSurface3.HasThing)
2435 {
2436 Card t2 = ThingGen.Create("chest3").ChangeMaterial(biome.style.matDoor);
2437 EClass._zone.AddCard(t2, randomSurface3).Install();
2438 }
2439 }
2440 }
2441 if (EClass.rnd(8) == 0)
2442 {
2443 SpawnAltar();
2444 }
2445 TrySpawnFollower();
2446 }
2447 map.plDay = CreatePlaylist(ref map._plDay, EClass.Sound.GetPlaylist(IDPlayList) ?? EClass.Sound.GetPlaylist("Day"));
2448 }
2449
2450 public void TrySpawnFollower()
2451 {
2452 bool flag = EClass.pc.HasCondition<ConDrawBacker>();
2453 if (!EClass.debug.enable && EClass.rnd(flag ? 3 : 20) != 0)
2454 {
2455 return;
2456 }
2457 Point randomSurface = EClass._map.bounds.GetRandomSurface();
2458 if (!randomSurface.IsValid)
2459 {
2460 return;
2461 }
2462 Chara c = CharaGen.Create("follower");
2463 EClass._zone.AddCard(c, randomSurface);
2464 (EClass._zone.AddThing("gallows", randomSurface).Install().trait as TraitShackle).Restrain(c);
2465 c.c_rescueState = RescueState.WaitingForRescue;
2466 if (EClass.rnd(flag ? 1 : 2) == 0 || EClass.debug.enable)
2467 {
2469 if (row != null)
2470 {
2471 c.ApplyBacker(row.id);
2472 }
2473 }
2474 Religion faith = EClass.game.religions.dictAll.Values.Where((Religion a) => a != c.faith).RandomItem();
2475 for (int i = 0; i < 3 + EClass.rnd(4); i++)
2476 {
2477 Chara chara = CharaGen.Create("fanatic");
2478 chara.SetFaith(faith);
2479 Point point = randomSurface.GetRandomPoint(4) ?? randomSurface.GetNearestPoint();
2480 EClass._zone.AddCard(chara, point);
2481 }
2482 }
2483
2484 public void SpawnAltar()
2485 {
2487 {
2488 if (r.points.Count <= 4)
2489 {
2490 return false;
2491 }
2492 map.poiMap.OccyupyPOI(r.points[0]);
2493 List<Point> points = r.points;
2494 Religion randomReligion = EClass.game.religions.GetRandomReligion();
2495 "altarPoint".lang(randomReligion.NameDomain.lang());
2496 Thing thing = ThingGen.Create("altar");
2497 (thing.trait as TraitAltar).SetDeity(randomReligion.id);
2498 Chara t = CharaGen.Create("twintail");
2499 EClass._zone.AddCard(t, points.RandomItem());
2500 for (int i = 0; i < 2 + EClass.rnd(2); i++)
2501 {
2502 Chara t2 = CharaGen.Create("twintail");
2503 EClass._zone.AddCard(t2, points.RandomItem());
2504 }
2505 if (points[0].Installed == null)
2506 {
2507 EClass._zone.AddCard(thing, points[0]).Install();
2508 }
2509 foreach (Point item in points)
2510 {
2511 if (item.x % 3 == 0 && item.z % 2 == 0 && item != points[0] && !item.Equals(points[0].Front) && item.Installed == null)
2512 {
2513 thing = ThingGen.Create("pillar1");
2514 EClass._zone.AddCard(thing, item).Install();
2515 }
2516 item.SetObj();
2517 item.SetFloor(3, 6);
2518 }
2519 return true;
2520 });
2521 }
2522
2523 public virtual void OnGenerateMap()
2524 {
2525 if (MakeEnemiesNeutral)
2526 {
2527 foreach (Chara chara in EClass._map.charas)
2528 {
2529 if (!chara.IsGlobal && chara.hostility < Hostility.Neutral && chara.OriginalHostility < Hostility.Friend)
2530 {
2531 Hostility hostility2 = (chara.c_originalHostility = Hostility.Neutral);
2532 chara.hostility = hostility2;
2533 }
2534 }
2535 }
2536 if (PrespawnRate != 0f && !IsSkyLevel)
2537 {
2538 for (int i = 0; i < (int)((float)MaxSpawn * PrespawnRate); i++)
2539 {
2540 SpawnMob();
2541 }
2542 }
2543 TryGenerateOre();
2544 TryGenerateBigDaddy();
2545 TryGenerateEvolved();
2546 TryGenerateShrine();
2547 }
2548
2549 public void TryGenerateOre()
2550 {
2551 if (OreChance <= 0f)
2552 {
2553 return;
2554 }
2555 Crawler.Create("ore").CrawlUntil(tries: EClass.rnd((int)((float)(map.bounds.Width * map.bounds.Height / 200 + 1) * OreChance + 2f)), map: EClass._map, onStart: () => EClass._map.bounds.GetRandomPoint(), canComplete: delegate(Crawler.Result r)
2556 {
2557 byte b = 18;
2558 string group = "ore";
2559 if (EClass.rnd(5) == 0)
2560 {
2561 b++;
2562 group = "gem";
2563 }
2564 SourceMaterial.Row randomMaterial = MATERIAL.GetRandomMaterial(DangerLv, group);
2565 foreach (Point point in r.points)
2566 {
2567 if (point.sourceBlock.ContainsTag("ore"))
2568 {
2569 map.SetObj(point.x, point.z, randomMaterial.id, b, 1, 0);
2570 }
2571 }
2572 return false;
2573 });
2574 }
2575
2576 public Chara TryGenerateEvolved(bool force = false, Point p = null)
2577 {
2578 float num = EvolvedChance * (EClass.pc.HasElement(1270) ? 1.1f : 1f);
2579 if (!force && num <= EClass.rndf(1f))
2580 {
2581 return null;
2582 }
2583 Chara chara = SpawnMob(p, SpawnSetting.Evolved());
2584 for (int i = 0; i < 2 + EClass.rnd(2); i++)
2585 {
2586 chara.ability.AddRandom();
2587 }
2588 chara.AddThing(chara.MakeGene(DNA.Type.Default));
2589 if (EClass.rnd(2) == 0)
2590 {
2591 chara.AddThing(chara.MakeGene(DNA.Type.Superior));
2592 }
2593 return chara;
2594 }
2595
2597 {
2598 if (!(BigDaddyChance * (EClass.pc.HasElement(1270) ? 1.1f : 1f) <= EClass.rndf(1f)))
2599 {
2600 int num = DangerLv * 125 / 100;
2601 if (num >= 30)
2602 {
2604 {
2605 lv = num
2606 });
2607 }
2608 Chara chara = CharaGen.Create("big_daddy");
2609 if (EClass.pc.HasElement(1270))
2610 {
2611 chara.SetHostility(Hostility.Friend);
2612 }
2613 else if (EClass.pc.HasElement(1271))
2614 {
2615 chara.SetHostility(Hostility.Enemy);
2616 }
2617 EClass._zone.AddCard(chara, GetSpawnPos(SpawnPosition.Random, 10000));
2618 Msg.Say("sign_bigdaddy");
2619 }
2620 }
2621
2622 public void TryGenerateShrine()
2623 {
2624 float num = ShrineChance * (EClass.pc.HasElement(1270) ? 1.1f : 1f);
2625 for (int i = 0; i < 3; i++)
2626 {
2627 Rand.SetSeed(base.uid + i);
2628 if (num <= EClass.rndf(1f))
2629 {
2630 continue;
2631 }
2632 Point randomSpace = EClass._map.GetRandomSpace(3, 3);
2633 if (randomSpace == null)
2634 {
2635 continue;
2636 }
2637 randomSpace.x++;
2638 randomSpace.z++;
2639 if (randomSpace.HasThing || randomSpace.HasChara)
2640 {
2641 continue;
2642 }
2643 randomSpace.SetObj();
2646 if (EClass.rnd(EClass.debug.test ? 2 : 15) == 0)
2647 {
2648 EClass._zone.AddCard(ThingGen.Create("pedestal_power"), randomSpace).Install();
2649 EClass._zone.AddCard(ThingGen.Create(EClass.gamedata.godStatues.RandomItemWeighted((GodStatueData a) => a.chance).idThing, -1, DangerLv), randomSpace).Install();
2650 }
2651 else
2652 {
2653 EClass._zone.AddCard(ThingGen.Create("statue_power", -1, DangerLv), randomSpace).Install().SetRandomDir();
2654 }
2655 }
2656 Rand.SetSeed();
2657 }
2658
2659 public void ResetHostility()
2660 {
2661 foreach (Chara chara in EClass._map.charas)
2662 {
2663 if (!chara.source.hostility.IsEmpty() && chara.source.hostility.ToEnum<Hostility>() >= Hostility.Friend && !chara.IsPCFactionOrMinion)
2664 {
2665 chara.c_originalHostility = (Hostility)0;
2666 }
2667 chara.hostility = chara.OriginalHostility;
2668 if (chara.enemy != null && (chara.enemy.IsPCFaction || chara.IsPCFaction))
2669 {
2670 chara.SetEnemy();
2671 }
2672 }
2673 }
2674
2675 public virtual void OnGenerateRooms(BaseMapGen gen)
2676 {
2677 }
2678
2679 public Point GetSpawnPos(SpawnPosition type, int tries = 100)
2680 {
2681 Point point = new Point();
2682 for (int i = 0; i < tries; i++)
2683 {
2684 point = EClass._map.bounds.GetRandomSurface(centered: false, walkable: true, allowWater: true);
2685 if (!point.IsValid || point.cell.hasDoor || point.IsSync)
2686 {
2687 continue;
2688 }
2689 switch (type)
2690 {
2691 case SpawnPosition.Guest:
2692 {
2693 Room room = point.cell.room;
2694 if (room != null && room.data.accessType != 0)
2695 {
2696 continue;
2697 }
2698 break;
2699 }
2700 case SpawnPosition.Outside:
2701 if (point.cell.HasRoof || point.cell.light > 0)
2702 {
2703 continue;
2704 }
2705 break;
2706 }
2707 return point;
2708 }
2709 return null;
2710 }
2711
2712 public Chara SpawnMob(Point pos = null, SpawnSetting setting = null)
2713 {
2714 if (setting == null)
2715 {
2716 setting = SpawnSetting.Default;
2717 }
2718 if (pos == null)
2719 {
2720 pos = GetSpawnPos(setting.position, setting.tries);
2721 if (pos == null)
2722 {
2723 pos = GetSpawnPos(SpawnPosition.Random, setting.tries);
2724 if (pos == null)
2725 {
2726 return null;
2727 }
2728 }
2729 }
2730 BiomeProfile biome = pos.cell.biome;
2731 if (IsUnderwater && EClass.rnd(15) != 0)
2732 {
2733 biome = ((EClass.rnd(4) != 0) ? EClass.core.refs.biomes.Water : EClass.core.refs.biomes.Sand);
2734 }
2735 SpawnList spawnList = null;
2736 Debug.Log(setting.idSpawnList + "/" + biome.name + "/" + biome.id);
2737 spawnList = ((setting.idSpawnList != null) ? SpawnList.Get(setting.idSpawnList) : ((EClass._zone is Zone_DungeonYeek && EClass.rnd(5) != 0) ? SpawnListChara.Get("dungeon_yeek", (SourceChara.Row r) => r.race == "yeek" && r.quality == 0) : ((EClass._zone is Zone_DungeonDragon && EClass.rnd(5) != 0) ? SpawnListChara.Get("dungeon_dragon", (SourceChara.Row r) => (r.race == "dragon" || r.race == "drake" || r.race == "wyvern" || r.race == "lizardman" || r.race == "dinosaur") && r.quality == 0) : ((EClass._zone is Zone_DungeonMino && EClass.rnd(5) != 0) ? SpawnListChara.Get("dungeon_mino", (SourceChara.Row r) => r.race == "minotaur" && r.quality == 0) : ((setting.hostility == SpawnHostility.Neutral || (setting.hostility != SpawnHostility.Enemy && Rand.Range(0f, 1f) < ChanceSpawnNeutral)) ? SpawnList.Get("c_neutral") : ((biome.spawn.chara.Count <= 0) ? SpawnList.Get(biome.name, "chara", new CharaFilter
2738 {
2739 ShouldPass = delegate(SourceChara.Row s)
2740 {
2741 if (s.hostility != "")
2742 {
2743 return false;
2744 }
2745 return s.biome == biome.name || s.biome.IsEmpty();
2746 }
2747 }) : SpawnList.Get(biome.spawn.GetRandomCharaId())))))));
2748 int num = ((setting.dangerLv == -1) ? DangerLv : setting.dangerLv);
2749 CardBlueprint cardBlueprint = new CardBlueprint
2750 {
2751 rarity = Rarity.Normal,
2752 idEle = setting.idEle
2753 };
2754 int num2 = ((setting.filterLv == -1) ? num : setting.filterLv);
2755 if (ScaleType == ZoneScaleType.Void)
2756 {
2757 num2 = ((num - 1) % 50 + 5) * 150 / 100;
2758 if (num2 >= 20 && EClass.rnd(100) < num2)
2759 {
2760 num2 = num;
2761 }
2762 }
2763 CardRow cardRow = (setting.id.IsEmpty() ? spawnList.Select(num2, setting.levelRange) : EClass.sources.cards.map[setting.id]);
2764 if (EClass.world.date.month == 12 && setting.rarity == Rarity.Random && EClass._zone.IsNefia && EClass._zone.isRandomSite && EClass.world.date.day >= 24 && EClass.world.date.day <= 26 && EClass.rnd(50 * (1 + EClass.player.flags.santa) * (1 + EClass.player.flags.santa)) == 0)
2765 {
2766 cardRow = EClass.sources.cards.map["santa"];
2768 }
2769 int num3 = ((setting.fixedLv == -1) ? cardRow.LV : setting.fixedLv);
2770 if (ScaleType == ZoneScaleType.Void)
2771 {
2772 num3 = (50 + cardRow.LV) * Mathf.Max(1, (num - 1) / 50);
2773 }
2774 num3 += DangerLvBoost;
2775 if (setting.rarity == Rarity.Random && cardRow.quality == 0)
2776 {
2777 if (EClass.rnd(EClass.pc.HasElement(1271) ? 80 : 100) == 0)
2778 {
2779 cardBlueprint.rarity = Rarity.Legendary;
2780 num3 = num3 * 125 / 100;
2781 }
2782 }
2783 else
2784 {
2785 cardBlueprint.rarity = setting.rarity;
2786 }
2787 if (setting.isBoss)
2788 {
2789 num3 = num3 * 150 / 100;
2790 }
2791 if (setting.isEvolved)
2792 {
2793 num3 = num3 * 2 + 20;
2794 }
2795 if (num3 != cardRow.LV)
2796 {
2797 cardBlueprint.lv = num3;
2798 }
2799 CardBlueprint.Set(cardBlueprint);
2800 Chara chara = CharaGen.Create(cardRow.id, num2);
2801 AddCard(chara, pos);
2802 if (setting.forcedHostility.HasValue)
2803 {
2804 Hostility c_originalHostility = (chara.hostility = setting.forcedHostility.Value);
2805 chara.c_originalHostility = c_originalHostility;
2806 }
2807 else
2808 {
2809 switch (chara.id)
2810 {
2811 case "santa":
2812 case "silverwolf":
2813 case "twintail":
2814 case "test17":
2815 if (EClass.pc.HasElement(1270))
2816 {
2817 chara.SetHostility(Hostility.Friend);
2818 }
2819 else if (EClass.pc.HasElement(1271))
2820 {
2821 chara.SetHostility(Hostility.Enemy);
2822 }
2823 break;
2824 }
2825 }
2826 if (setting.isBoss)
2827 {
2828 chara.c_bossType = BossType.Boss;
2829 }
2830 if (setting.isEvolved)
2831 {
2832 chara.c_bossType = BossType.Evolved;
2833 }
2834 return chara;
2835 }
2836
2838 {
2839 dirtyElectricity = false;
2840 bool flag = GetSoilCost() > MaxSoil;
2841 base.electricity = elements.Value(2201) * 10 + BaseElectricity;
2842 foreach (Thing thing in EClass._map.things)
2843 {
2844 if (thing.IsInstalled && thing.trait.Electricity != 0 && (thing.isOn || thing.trait.Electricity > 0))
2845 {
2846 base.electricity += thing.trait.Electricity;
2847 }
2848 }
2849 if (!flag)
2850 {
2851 EClass._map.bounds.ForeachCell(delegate(Cell c)
2852 {
2853 if (c.sourceObj.id == 118 && c.growth.IsMature)
2854 {
2855 base.electricity += 20;
2856 }
2857 });
2858 }
2859 foreach (Thing thing2 in EClass._map.things)
2860 {
2861 if (thing2.IsInstalled)
2862 {
2863 thing2.trait.TryToggle();
2864 }
2865 }
2866 }
2867
2868 public int GetElectricity(bool cost = false)
2869 {
2870 bool flag = GetSoilCost() > MaxSoil;
2871 int sum = 0;
2872 foreach (Thing thing in EClass._map.things)
2873 {
2874 if (!thing.IsInstalled || thing.trait.Electricity == 0)
2875 {
2876 continue;
2877 }
2878 if (cost)
2879 {
2880 if (thing.trait.Electricity < 0)
2881 {
2882 sum += -thing.trait.Electricity;
2883 }
2884 }
2885 else if (thing.trait.Electricity > 0)
2886 {
2887 sum += thing.trait.Electricity;
2888 }
2889 }
2890 if (!cost)
2891 {
2892 sum += elements.Value(2201) * 10 + BaseElectricity;
2893 if (!flag)
2894 {
2895 EClass._map.bounds.ForeachCell(delegate(Cell c)
2896 {
2897 if (c.sourceObj.id == 118 && c.growth.IsMature)
2898 {
2899 sum += 20;
2900 }
2901 });
2902 }
2903 }
2904 return sum;
2905 }
2906
2907 public void SetBGM(List<int> ids, bool refresh = true)
2908 {
2909 map._plDay.Clear();
2910 if (ids.Count > 0)
2911 {
2912 foreach (int id in ids)
2913 {
2914 if (id != -1)
2915 {
2916 map._plDay.Add(id);
2917 }
2918 }
2919 }
2920 UnityEngine.Object.DestroyImmediate(map.plDay);
2921 map.plDay = null;
2922 RefreshPlaylist();
2923 if (refresh)
2924 {
2925 EClass.Sound.StopBGM();
2926 RefreshBGM();
2927 }
2928 }
2929
2930 public void SetBGM(int id = -1, bool refresh = true)
2931 {
2932 SetBGM(new List<int> { id }, refresh);
2933 }
2934
2935 public void RefreshPlaylist()
2936 {
2937 if (map.plDay == null)
2938 {
2939 map.plDay = CreatePlaylist(ref map._plDay, EClass.Sound.GetPlaylist(IDPlayList));
2940 }
2941 }
2942
2943 public void ResetPlaylist()
2944 {
2945 map._plDay.Clear();
2946 UnityEngine.Object.DestroyImmediate(map.plDay);
2947 map.plDay = null;
2948 RefreshPlaylist();
2949 }
2950
2951 public void RefreshBGM()
2952 {
2954 {
2955 return;
2956 }
2957 RefreshPlaylist();
2958 Playlist playlist = map.plDay;
2959 foreach (ZoneEvent item in events.list)
2960 {
2961 if (item.playlist != null)
2962 {
2963 playlist = item.playlist;
2964 }
2965 }
2966 if (IDPlaylistOverwrite != null)
2967 {
2968 playlist = EClass.Sound.GetPlaylist(IDPlaylistOverwrite);
2969 }
2971 {
2972 Room room = EClass.pc.pos.cell.room;
2973 if (room != null && room.lot != null && room.lot.idBGM != 0)
2974 {
2975 playlist = EClass.Sound.plLot;
2976 if (playlist.list[0].data?.id != room.lot.idBGM)
2977 {
2978 playlist.list[0].data = EClass.core.refs.dictBGM.TryGetValue(room.lot.idBGM);
2979 playlist.Reset();
2980 if (!LayerDrama.keepBGM)
2981 {
2982 EClass.Sound.StopBGM(1f);
2983 }
2984 }
2985 }
2986 }
2988 EClass.Sound.SwitchPlaylist(playlist, !LayerDrama.keepBGM);
2989 }
2990
2991 public Playlist CreatePlaylist(ref List<int> list, Playlist mold = null)
2992 {
2993 Playlist playlist = EClass.Sound.plBlank.Instantiate();
2994 if (list.Count == 0 && (bool)mold)
2995 {
2996 list = mold.ToInts();
2997 playlist.shuffle = mold.shuffle;
2998 playlist.minSwitchTime = mold.minSwitchTime;
2999 playlist.nextBGMOnSwitch = mold.nextBGMOnSwitch;
3000 playlist.ignoreLoop = mold.ignoreLoop;
3001 playlist.keepBGMifSamePlaylist = mold.keepBGMifSamePlaylist;
3002 playlist.name = mold.name;
3003 }
3004 foreach (int item in list)
3005 {
3006 playlist.list.Add(new Playlist.Item
3007 {
3008 data = EClass.core.refs.dictBGM.TryGetValue(item, 1)
3009 });
3010 }
3011 return playlist;
3012 }
3013
3014 public Chara FindChara(string id)
3015 {
3016 return map.charas.Find((Chara c) => c.id == id);
3017 }
3018
3019 public Chara FindChara(int uid)
3020 {
3021 return map.charas.Find((Chara c) => c.uid == uid);
3022 }
3023
3024 public int GetDeepestLv()
3025 {
3026 int max = base.lv;
3027 return GetDeepestLv(ref max);
3028 }
3029
3030 public int GetDeepestLv(ref int max)
3031 {
3032 if (Mathf.Abs(base.lv) > Mathf.Abs(max))
3033 {
3034 max = base.lv;
3035 }
3036 foreach (Spatial child in children)
3037 {
3038 (child as Zone).GetDeepestLv(ref max);
3039 }
3040 return max;
3041 }
3042
3043 public List<Element> ListLandFeats()
3044 {
3045 if (landFeats == null)
3046 {
3047 landFeats = new List<int>();
3049 string[] listBase = IDBaseLandFeat.Split(',');
3050 string[] array = listBase;
3051 foreach (string text in array)
3052 {
3053 if (!text.IsEmpty())
3054 {
3055 landFeats.Add(EClass.sources.elements.alias[text].id);
3056 }
3057 }
3058 if (listBase.Length == 1)
3059 {
3060 List<SourceElement.Row> list = EClass.sources.elements.rows.Where(delegate(SourceElement.Row e)
3061 {
3062 if (e.category != "landfeat" || e.chance == 0)
3063 {
3064 return false;
3065 }
3066 bool flag = true;
3067 string[] tag = e.tag;
3068 foreach (string text2 in tag)
3069 {
3070 if (text2.StartsWith("bf"))
3071 {
3072 flag = false;
3073 if (listBase[0] == text2)
3074 {
3075 flag = true;
3076 break;
3077 }
3078 }
3079 }
3080 return flag ? true : false;
3081 }).ToList();
3082 SourceElement.Row row = list.RandomItemWeighted((SourceElement.Row e) => e.chance);
3083 landFeats.Add(row.id);
3084 list.Remove(row);
3085 row = list.RandomItemWeighted((SourceElement.Row e) => e.chance);
3086 landFeats.Add(row.id);
3087 }
3088 Rand.SetSeed();
3089 }
3090 List<Element> list2 = new List<Element>();
3091 foreach (int landFeat in landFeats)
3092 {
3093 list2.Add(Element.Create(landFeat, 1));
3094 }
3095 return list2;
3096 }
3097
3098 public ZoneExportData Import(string path)
3099 {
3100 ZipFile zipFile = ZipFile.Read(path);
3101 zipFile.ExtractExistingFile = ExtractExistingFileAction.OverwriteSilently;
3102 zipFile.ExtractAll(pathTemp);
3103 zipFile.Dispose();
3104 return IO.LoadFile<ZoneExportData>(pathTemp + "export") ?? new ZoneExportData();
3105 }
3106
3107 public void Export(string path, PartialMap partial = null, bool usermap = false)
3108 {
3109 if (subset != null)
3110 {
3111 SE.Beep();
3112 return;
3113 }
3114 try
3115 {
3116 ZoneExportData zoneExportData = new ZoneExportData
3117 {
3118 name = name,
3119 usermap = usermap
3120 };
3121 IO.CreateTempDirectory();
3122 if (!map.config.retainDecal)
3123 {
3124 map.ClearRainAndDecal();
3125 }
3126 map.Save(IO.TempPath + "/", zoneExportData, partial);
3127 map.ExportMetaData(IO.TempPath + "/", Path.GetFileNameWithoutExtension(path), partial);
3128 if (partial == null)
3129 {
3130 IO.CopyDir(base.pathSave + "Texture Replace", IO.TempPath + "/Texture Replace");
3131 }
3132 IO.SaveFile(IO.TempPath + "/export", zoneExportData, compress: true);
3133 using (ZipFile zipFile = new ZipFile())
3134 {
3135 zipFile.ExtractExistingFile = ExtractExistingFileAction.OverwriteSilently;
3136 zipFile.AddDirectory(IO.TempPath);
3137 zipFile.Save(path);
3138 zipFile.Dispose();
3139 }
3140 IO.DeleteTempDirectory();
3141 }
3142 catch (Exception ex)
3143 {
3144 EClass.ui.Say(ex.Message + ":" + path);
3145 }
3146 }
3147
3148 public void ExportDialog(string dir = null)
3149 {
3151 {
3152 string text = StandaloneFileBrowser.SaveFilePanel("Export Zone", dir ?? CorePath.ZoneSave, "new zone", "z");
3153 if (!string.IsNullOrEmpty(text))
3154 {
3155 Export(text);
3156 Msg.SayRaw("Exported Zone");
3157 }
3158 });
3159 }
3160
3161 public void ImportDialog(string dir = null)
3162 {
3164 {
3165 string[] array = StandaloneFileBrowser.OpenFilePanel("Import Zone", dir ?? CorePath.ZoneSave, "z", multiselect: false);
3166 if (array.Length != 0)
3167 {
3168 Zone_User zone_User = SpatialGen.Create("user", EClass.world.region, register: true) as Zone_User;
3169 zone_User.path = array[0];
3170 Thing thing = ThingGen.Create("teleporter");
3171 thing.c_uidZone = zone_User.uid;
3172 EClass._zone.AddCard(thing, EClass.pc.pos);
3173 }
3174 });
3175 }
3176
3177 public static bool IsImportValid(string path)
3178 {
3179 try
3180 {
3181 return Map.GetMetaData(path)?.IsValidVersion() ?? false;
3182 }
3183 catch (Exception ex)
3184 {
3185 EClass.ui.Say(ex.Message);
3186 return false;
3187 }
3188 }
3189
3190 public void Export()
3191 {
3193 string text = pathExport;
3194 IO.Copy(text, CorePath.ZoneSave + "Backup/");
3195 Export(text);
3196 Msg.Say("Exported Map:" + text);
3197 }
3198
3199 public void WriteNote(UINote n, Action<UINote> onWriteNote = null, IInspect.NoteMode mode = IInspect.NoteMode.Default, Recipe recipe = null)
3200 {
3201 }
3202
3203 public void OnInspect()
3204 {
3205 }
3206
3207 public int GetSortVal()
3208 {
3209 if (IsPCFaction)
3210 {
3211 return -10000000 + base.uid;
3212 }
3213 if (this is Zone_SubTown)
3214 {
3215 return -8000000 + base.uid;
3216 }
3217 if (this is Zone_Town)
3218 {
3219 return -9000000 + base.uid;
3220 }
3221 if (this is Zone_Civilized)
3222 {
3223 return -7000000 + base.uid;
3224 }
3225 if (this is Zone_RandomDungeon)
3226 {
3227 return 1000000 + base.uid;
3228 }
3229 return base.uid;
3230 }
3231
3232 public Chara AddRandomVisitor(bool guest = false)
3233 {
3234 Trait random = map.Installed.traits.GetTraitSet<TraitSpotExit>().GetRandom();
3235 if (random == null)
3236 {
3237 return null;
3238 }
3239 Point point = random.GetPoint();
3240 Chara chara = null;
3241 if (guest)
3242 {
3243 Zone z = EClass.world.FindZone("wilds");
3244 chara = EClass.game.cards.ListGlobalChara(z).RandomItem();
3245 if (chara != null)
3246 {
3247 AddCard(chara, point);
3248 Msg.Say("guestArrive", chara);
3249 chara.visitorState = VisitorState.Arrived;
3250 }
3251 }
3252 else
3253 {
3254 chara = CharaGen.CreateFromFilter("c_wilds");
3255 AddCard(chara, point);
3256 chara.goalListType = GoalListType.Enemy;
3257 }
3258 return chara;
3259 }
3260
3261 public void OnSimulateHour(VirtualDate date)
3262 {
3263 if (base.IsPlayerFaction)
3264 {
3265 branch.OnSimulateHour(date);
3266 }
3267 events.OnSimulateHour();
3268 if (date.IsRealTime)
3269 {
3270 foreach (Thing thing in EClass._map.things)
3271 {
3272 if (thing.IsInstalled)
3273 {
3274 thing.trait.TryToggle();
3275 }
3276 }
3278 }
3279 EClass._map.things.ForeachReverse(delegate(Thing t)
3280 {
3281 t.OnSimulateHour(date);
3282 });
3283 foreach (Thing sucker in Suckers)
3284 {
3285 sucker.Destroy();
3286 }
3287 Suckers.Clear();
3288 if (RespawnRate != 0f)
3289 {
3290 int num = 0;
3291 foreach (Chara chara in map.charas)
3292 {
3293 if (!chara.IsGlobal)
3294 {
3295 num++;
3296 }
3297 }
3298 if (num < MaxRespawn)
3299 {
3300 for (int i = 0; i < RespawnPerHour; i++)
3301 {
3302 SpawnMob();
3303 }
3304 }
3305 }
3306 if (!date.IsRealTime && EClass.rnd(24) == 0)
3307 {
3308 RainWater();
3309 }
3310 if (date.hour == 6)
3311 {
3312 GrowPlants(date);
3313 }
3314 }
3315
3316 public void OnSimulateDay(VirtualDate date)
3317 {
3318 if (base.IsPlayerFaction)
3319 {
3320 branch.OnSimulateDay(date);
3321 }
3322 }
3323
3325 {
3326 if (base.IsPlayerFaction)
3327 {
3328 branch.OnSimulateMonth(date);
3329 }
3330 if (date.IsRealTime)
3331 {
3333 }
3334 }
3335
3336 public void RainWater()
3337 {
3338 if (EClass._map.IsIndoor || !IsPCFaction)
3339 {
3340 return;
3341 }
3342 EClass._map.bounds.ForeachCell(delegate(Cell c)
3343 {
3344 if (c.IsFarmField && !c.HasRoof)
3345 {
3346 c.isWatered = true;
3347 }
3348 });
3349 }
3350
3351 public void GrowPlants(VirtualDate date)
3352 {
3353 bool num = (EClass.player.isAutoFarming = IsPCFaction && EClass.Branch.policies.IsActive(2707));
3354 int weedChance = 1;
3355 if (IsPCFaction && EClass.Branch.policies.IsActive(2703))
3356 {
3357 weedChance += (EClass.debug.enable ? 100000 : 20) + EClass.Branch.Evalue(2703) * 10;
3358 }
3359 if (date.sunMap == null)
3360 {
3361 date.BuildSunMap();
3362 }
3363 if (num)
3364 {
3365 HashSet<int> hashSet = new HashSet<int>();
3366 foreach (Thing thing in EClass._map.things)
3367 {
3368 if (!thing.IsInstalled || !(thing.trait is TraitSpotFarm traitSpotFarm))
3369 {
3370 continue;
3371 }
3372 foreach (Point item in traitSpotFarm.ListPoints(null, onlyPassable: false))
3373 {
3374 hashSet.Add(item.index);
3375 }
3376 }
3377 Perform(hashSet);
3378 EClass.player.isAutoFarming = false;
3379 Perform(hashSet);
3380 }
3381 else
3382 {
3383 Perform(null);
3384 }
3385 void Perform(HashSet<int> farmMap)
3386 {
3387 bool isWinter = date.IsWinter;
3388 EClass._map.bounds.ForeachCell(delegate(Cell c)
3389 {
3390 if (farmMap != null)
3391 {
3393 {
3394 if (!farmMap.Contains(c.index))
3395 {
3396 return;
3397 }
3398 }
3399 else if (farmMap.Contains(c.index))
3400 {
3401 return;
3402 }
3403 }
3404 if (c.decal != 0 && EClass.rnd(3) == 0)
3405 {
3406 c.decal = 0;
3407 }
3408 if (GrowPlant)
3409 {
3410 if (c.growth != null)
3411 {
3412 bool flag = false;
3413 if (!EClass.player.isAutoFarming && c.growth.HaltGrowth() && (c.IsFarmField || c.IsTopWater) && (!isWinter || !date.IsRealTime))
3414 {
3415 flag = true;
3416 }
3417 PlantData plantData = map.TryGetPlant(c);
3418 if (!flag && (plantData == null || plantData.fert >= 0))
3419 {
3420 c.TryGrow(date);
3421 }
3422 if (isWinter && plantData != null && c.growth != null && c.growth.NeedSunlight && plantData.fert >= 0 && (EClass.rnd(4) == 0 || c.growth.stage.idx == 0))
3423 {
3424 if (date.sunMap == null)
3425 {
3426 date.BuildSunMap();
3427 }
3428 if (!date.sunMap.Contains(c.index) && !c.growth.CanGrow(date))
3429 {
3430 c.growth.Perish();
3431 }
3432 }
3433 }
3434 else if (c.detail != null)
3435 {
3436 c.Things.ForeachReverse(delegate(Thing t)
3437 {
3438 if (t.IsInstalled && t.trait is TraitSeed && !t.isSale)
3439 {
3440 (t.trait as TraitSeed).TrySprout(force: false, sucker: false, date);
3441 }
3442 });
3443 }
3444 else if (EClass.rnd(20) == 0 && GrowWeed && c.CanGrowWeed && EClass.rnd(weedChance) == 0)
3445 {
3446 biome.Populate(c.GetPoint());
3447 if (c.growth != null)
3448 {
3449 c.growth.SetStage(0);
3450 }
3451 }
3452 }
3453 c.isWatered = false;
3454 });
3455 }
3456 }
3457
3458 public Zone GetZoneAt(int _x, int _y)
3459 {
3460 if (IsRegion)
3461 {
3462 foreach (Spatial child in children)
3463 {
3464 if (!(child is Zone_Field) && _x == child.x && _y == child.y)
3465 {
3466 return child as Zone;
3467 }
3468 }
3469 }
3470 foreach (Spatial child2 in children)
3471 {
3472 if (_x == child2.x && _y == child2.y)
3473 {
3474 return child2 as Zone;
3475 }
3476 }
3477 return null;
3478 }
3479
3480 public bool IsCrime(Chara c, Act act)
3481 {
3482 if (act.IsHostileAct && HasLaw && !IsPCFaction && c.IsPC)
3483 {
3484 return true;
3485 }
3486 return false;
3487 }
3488
3489 public void RefreshCriminal()
3490 {
3491 bool flag = EClass.player.IsCriminal && HasLaw && !AllowCriminal && !IsPCFaction;
3492 Hostility hostility = (flag ? Hostility.Neutral : Hostility.Friend);
3493 foreach (Chara chara in EClass._map.charas)
3494 {
3495 if (chara.trait is TraitGuard)
3496 {
3497 chara.hostility = hostility;
3498 if (!flag && chara.enemy != null && chara.enemy.IsPCParty)
3499 {
3500 chara.SetEnemy();
3501 }
3502 }
3503 }
3504 }
3505
3507 {
3508 if (base.lv != 0)
3509 {
3510 return;
3511 }
3512 dictCitizen.Clear();
3513 foreach (Chara item in map.charas.Concat(map.deadCharas))
3514 {
3515 if (item.trait.IsCitizen && !item.IsGlobal && !item.isSubsetCard)
3516 {
3517 dictCitizen[item.uid] = item.Name;
3518 }
3519 }
3520 }
3521
3522 public void ModInfluence(int a)
3523 {
3524 base.influence += a;
3525 if (a > 0)
3526 {
3527 Msg.Say("gainInfluence", Name, a.ToString() ?? "");
3528 }
3529 Tutorial.Reserve("influence");
3530 }
3531
3532 public void ModDevelopment(int a)
3533 {
3534 base.development += a;
3535 if (a > 0)
3536 {
3537 Msg.Say("gainDevelopment", Name, a.ToString() ?? "");
3538 }
3539 }
3540
3541 public void UpdateQuests(bool force = false)
3542 {
3543 if (!IsPCFaction && (!(this is Zone_Town) || base.lv != 0))
3544 {
3545 return;
3546 }
3547 Debug.Log("Updating Quest:" + force);
3548 List<SourceQuest.Row> list = EClass.sources.quests.rows.Where((SourceQuest.Row a) => a.group == "random").ToList();
3549 int num = 0;
3550 foreach (Chara item in map.charas.Concat(map.deadCharas))
3551 {
3552 if (item.quest != null && !EClass.game.quests.list.Contains(item.quest))
3553 {
3554 if (item.quest.IsExpired || completedQuests.Contains(item.quest.uid) || force)
3555 {
3556 item.quest = null;
3557 }
3558 else
3559 {
3560 num++;
3561 }
3562 }
3563 }
3564 if (EClass._zone.dateQuest > EClass.world.date.GetRaw() && !force)
3565 {
3566 return;
3567 }
3568 EClass._zone.dateQuest = EClass.world.date.GetRaw() + 1440;
3569 int maxQuest = 3;
3570 Rand.UseSeed(base.uid + EClass.player.stats.days / 7 % 100, delegate
3571 {
3572 maxQuest = 4 + EClass.rnd(4);
3573 });
3574 completedQuests.Clear();
3575 List<Zone> list2 = Quest.ListDeliver();
3576 List<Tuple<string, int>> listTag = new List<Tuple<string, int>>();
3577 string[] array = EClass._zone.source.questTag;
3579 {
3580 array = new string[9] { "supply/8", "deliver/7", "food/8", "escort/4", "deliver/4", "monster/0", "war/0", "farm/0", "music/0" };
3581 }
3582 string[] array2 = array;
3583 for (int i = 0; i < array2.Length; i++)
3584 {
3585 string[] array3 = array2[i].Split('/');
3586 listTag.Add(new Tuple<string, int>(array3[0], array3[1].ToInt()));
3587 }
3588 for (int j = 0; j < map.charas.Count * 2; j++)
3589 {
3590 if (num > maxQuest)
3591 {
3592 break;
3593 }
3594 if (num > 15)
3595 {
3596 break;
3597 }
3598 Chara chara = map.charas.RandomItem();
3599 if (!chara.trait.CanGiveRandomQuest || chara.isSubsetCard || chara.homeZone != EClass._zone || chara.IsGuest() || chara.memberType == FactionMemberType.Livestock || (chara.quest != null && !force))
3600 {
3601 continue;
3602 }
3603 SourceQuest.Row row = list.RandomItemWeighted(delegate(SourceQuest.Row a)
3604 {
3605 int num2 = 1;
3606 foreach (Tuple<string, int> item2 in listTag)
3607 {
3608 if (a.tags.Contains(item2.Item1))
3609 {
3610 num2 = item2.Item2;
3611 break;
3612 }
3613 }
3614 if (!EClass._zone.IsPCFaction && a.tags.Contains("bulk"))
3615 {
3616 num2 = 0;
3617 }
3618 return a.chance * num2;
3619 });
3620 if ((!row.tags.Contains("needDestZone") || list2.Count >= 2) && (row.minFame <= 0 || row.minFame < EClass.player.fame || EClass.debug.enable))
3621 {
3622 Quest.Create(row.id, null, chara);
3623 num++;
3624 }
3625 }
3626 }
3627
3628 public List<Chara> ListMinions(Chara c)
3629 {
3630 List<Chara> list = new List<Chara>();
3631 foreach (Chara chara in EClass._map.charas)
3632 {
3633 if (chara.c_uidMaster == c.uid && chara.c_minionType == MinionType.Default)
3634 {
3635 list.Add(chara);
3636 }
3637 }
3638 return list;
3639 }
3640
3641 public int CountMinions(Chara c)
3642 {
3643 int num = 0;
3644 foreach (Chara chara in EClass._map.charas)
3645 {
3646 if (chara.c_uidMaster == c.uid && chara.c_minionType == MinionType.Default)
3647 {
3648 num++;
3649 }
3650 }
3651 return num;
3652 }
3653
3654 public int GetSoilCost()
3655 {
3656 int i = 0;
3657 EClass._map.bounds.ForeachCell(delegate(Cell c)
3658 {
3659 i += c.sourceObj.costSoil;
3660 });
3661 return i / 10;
3662 }
3663
3664 public void SpawnLostItems()
3665 {
3666 for (int i = 0; i < 2 + EClass.rnd(4); i++)
3667 {
3668 Point point = GetPos();
3669 if (point == null)
3670 {
3671 continue;
3672 }
3673 if (EClass.rnd(30) == 0)
3674 {
3675 Thing thing = ThingGen.Create("purse");
3676 thing.isLostProperty = true;
3677 thing.things.DestroyAll();
3678 int num2 = (thing.c_lockLv = EClass.rndHalf(Mathf.Min(base.development / 10 + 10, 50)));
3679 thing.Add("money", EClass.rndHalf(num2 * 60 + 1000));
3680 if (EClass.rnd(2) == 0)
3681 {
3682 thing.Add("plat", EClass.rnd(4));
3683 }
3684 else
3685 {
3686 thing.Add("medal", EClass.rnd(2));
3687 }
3688 EClass._zone.AddCard(thing, point);
3689 }
3690 else
3691 {
3693 }
3694 }
3695 static Point GetPos()
3696 {
3697 for (int j = 0; j < 10; j++)
3698 {
3699 Point randomPoint = EClass._zone.bounds.GetRandomPoint();
3700 if (!randomPoint.IsBlocked && !randomPoint.HasThing && !randomPoint.HasObj && !randomPoint.HasBlock)
3701 {
3702 return randomPoint;
3703 }
3704 }
3705 return null;
3706 }
3707 }
3708
3709 public void ApplyBackerPet(bool draw)
3710 {
3711 bool flag = this is Zone_Yowyn && base.lv == -1;
3712 IList<SourceBacker.Row> list = EClass.sources.backers.listPet.Copy();
3713 list.Shuffle();
3715 {
3716 list.ForeachReverse(delegate(SourceBacker.Row a)
3717 {
3718 if (EClass.player.doneBackers.Contains(a.id))
3719 {
3720 list.Remove(a);
3721 }
3722 });
3723 }
3724 foreach (Chara chara in EClass._map.charas)
3725 {
3726 if (chara.IsGlobal || chara.IsMinion)
3727 {
3728 continue;
3729 }
3730 if (chara.isBackerContent)
3731 {
3732 if (chara.sourceBacker.isStatic != 0)
3733 {
3734 continue;
3735 }
3736 if (chara.id != "follower")
3737 {
3738 chara.RemoveBacker();
3739 }
3740 }
3741 if ((flag && chara.race.id != "cat") || (!EClass.debug.enable && EClass.rnd((!flag) ? (draw ? 3 : 10) : (draw ? 1 : 2)) != 0))
3742 {
3743 continue;
3744 }
3745 foreach (SourceBacker.Row item in list)
3746 {
3747 if (item.chara == chara.id)
3748 {
3749 chara.ApplyBacker(item.id);
3750 list.Remove(item);
3751 break;
3752 }
3753 }
3754 }
3755 }
3756
3758 {
3759 if (fortuneRoll == null)
3760 {
3761 fortuneRoll = new FortuneRollData();
3762 fortuneRoll.seed = EClass._zone.uid * 100 + EClass.game.seed;
3763 }
3764 if (refresh || fortuneRoll.count == 0)
3765 {
3766 fortuneRoll.Refresh();
3767 }
3768 return fortuneRoll;
3769 }
3770}
BossType
Definition: BossType.cs:2
CTAG
Definition: CTAG.cs:2
@ seed
ClearInventoryType
ContainerFlag
Definition: ContainerFlag.cs:5
CureType
Definition: CureType.cs:2
EditorTag
Definition: EditorTag.cs:2
GoalListType
Definition: GoalListType.cs:2
Hostility
Definition: Hostility.cs:2
MinionType
Definition: MinionType.cs:2
NameStyle
Definition: NameStyle.cs:2
PlaceState
Definition: PlaceState.cs:2
Rarity
Definition: Rarity.cs:2
RescueState
Definition: RescueState.cs:2
SpawnHostility
SpawnPosition
Definition: SpawnPosition.cs:2
if(item3.idFile==idFirstFile &&item3.id==idFirstTopic)
Definition: UIBook.cs:627
VisitorState
Definition: VisitorState.cs:2
ZoneFeatureType
ZoneScaleType
Definition: ZoneScaleType.cs:2
virtual void OnSimulatePosition()
Definition: AIAct.cs:590
void SimulateZone(int days)
Definition: AIAct.cs:578
void Add(Act a, string s="")
Definition: ActPlan.cs:11
Definition: ACT.cs:62
virtual bool IsHostileAct
Definition: ACT.cs:129
static AM_Adv Adv
Definition: ActionMode.cs:15
BaseArea.AccessType accessType
Definition: AreaData.cs:42
bool atrium
Definition: AreaData.cs:66
static int indexFollower
AreaData data
Definition: BaseArea.cs:29
PointList points
Definition: BaseArea.cs:26
void WaitForEndOfFrame(Action action)
Definition: BaseCore.cs:61
Version version
Definition: BaseCore.cs:17
string GetRandomCharaId()
void Populate(Point point, bool interior=false, float mtpDensity=1f)
static void Set(CardBlueprint _bp=null)
Thing container_shipping
Definition: CardManager.cs:52
GlobalCharaList globalCharas
Definition: CardManager.cs:46
List< Chara > ListGlobalChara(Zone z)
Definition: CardManager.cs:103
override void OnLeaveScreen()
void KillActor()
int quality
Definition: CardRow.cs:19
string id
Definition: CardRow.cs:7
Definition: Card.cs:11
MinionType c_minionType
Definition: Card.cs:988
bool IsPCFactionOrMinion
Definition: Card.cs:2260
bool IsDecayed
Definition: Card.cs:2275
virtual bool isThing
Definition: Card.cs:2069
virtual Chara Chara
Definition: Card.cs:2058
virtual void OnSimulateHour(VirtualDate date)
Definition: Card.cs:6427
void SetPlaceState(PlaceState newState, bool byPlayer=false)
Definition: Card.cs:3677
string id
Definition: Card.cs:35
bool isNPCProperty
Definition: Card.cs:554
SourceBacker.Row sourceBacker
Definition: Card.cs:928
bool isSubsetCard
Definition: Card.cs:746
bool HasElement(int ele, int req=1)
Definition: Card.cs:5787
bool isRestrained
Definition: Card.cs:566
SoundSource PlaySound(string id, float v=1f, bool spatial=true)
Definition: Card.cs:6001
Card ChangeMaterial(int idNew, bool ignoreFixedMaterial=false)
Definition: Card.cs:3022
int c_lockLv
Definition: Card.cs:964
virtual void HealHP(int a, HealSource origin=HealSource.None)
Definition: Card.cs:3933
Card AddCard(Card c)
Definition: Card.cs:3071
bool isSale
Definition: Card.cs:866
int c_uidMaster
Definition: Card.cs:1449
Thing AddThing(string id, int lv=-1)
Definition: Card.cs:3085
int hp
Definition: Card.cs:242
Rarity rarity
Definition: Card.cs:314
ICardParent parent
Definition: Card.cs:55
bool hasSpawned
Definition: Card.cs:902
void AddEditorTag(EditorTag tag)
Definition: Card.cs:2593
PlaceState placeState
Definition: Card.cs:83
bool HasTag(CTAG tag)
Definition: Card.cs:2583
Point pos
Definition: Card.cs:59
void DecayNatural(int hour=1)
Definition: Card.cs:6436
int uid
Definition: Card.cs:122
Trait trait
Definition: Card.cs:53
Window.SaveData GetWindowSaveData()
Definition: Card.cs:2504
void RemoveBacker()
Definition: Card.cs:6865
int c_idBacker
Definition: Card.cs:1437
void PlayAnimeLoot()
Definition: Card.cs:6030
void Destroy()
Definition: Card.cs:4981
bool HasEditorTag(EditorTag tag)
Definition: Card.cs:2588
ThingContainer things
Definition: Card.cs:38
bool IsInstalled
Definition: Card.cs:2369
virtual bool isChara
Definition: Card.cs:2071
virtual Thing Thing
Definition: Card.cs:2046
int Evalue(int ele)
Definition: Card.cs:2559
bool isOn
Definition: Card.cs:542
bool TryStackTo(Thing to)
Definition: Card.cs:3327
Card Install()
Definition: Card.cs:3671
void ApplyBacker(int bid)
Definition: Card.cs:6829
void SetRandomDir()
Definition: Card.cs:6063
Thing Add(string id, int num=1, int lv=1)
Definition: Card.cs:3062
SourceCategory.Row category
Definition: Card.cs:2037
bool IsContainer
Definition: Card.cs:2077
CardRenderer renderer
Definition: Card.cs:61
bool isBackerContent
Definition: Card.cs:925
void Say(string lang, string ref1=null, string ref2=null)
Definition: Card.cs:6653
List< Thing > things
Definition: CellDetail.cs:11
Definition: Cell.cs:7
Room room
Definition: Cell.cs:102
byte decal
Definition: Cell.cs:44
bool IsTopWaterAndNoSnow
Definition: Cell.cs:712
bool IsFarmField
Definition: Cell.cs:730
bool isModified
Definition: Cell.cs:438
byte light
Definition: Cell.cs:60
GrowSystem growth
Definition: Cell.cs:225
CellDetail detail
Definition: Cell.cs:92
bool HasRoof
Definition: Cell.cs:648
bool isSeen
Definition: Cell.cs:282
SourceObj.Row sourceObj
Definition: Cell.cs:1072
bool HasFire
Definition: Cell.cs:676
Point GetPoint()
Definition: Cell.cs:1101
bool CanGrowWeed
Definition: Cell.cs:742
int index
Definition: Cell.cs:114
bool hasDoor
Definition: Cell.cs:258
void AddRandom()
static Chara CreateFromFilter(string id, int lv=-1, int levelRange=-1)
Definition: CharaGen.cs:22
static Chara Create(string id, int lv=-1)
Definition: CharaGen.cs:17
Definition: Chara.cs:10
new TraitChara trait
Definition: Chara.cs:501
Hostility OriginalHostility
Definition: Chara.cs:469
AIAct ai
Definition: Chara.cs:200
void ValidateWorks()
Definition: Chara.cs:8959
ConSuspend conSuspend
Definition: Chara.cs:104
bool CanRevive()
Definition: Chara.cs:5010
Faction faction
Definition: Chara.cs:425
override bool IsPC
Definition: Chara.cs:610
Chara host
Definition: Chara.cs:33
AIAct SetNoGoal()
Definition: Chara.cs:8613
override bool IsGlobal
Definition: Chara.cs:608
override bool IsPCParty
Definition: Chara.cs:613
bool IsInCombat
Definition: Chara.cs:862
bool HasCondition(string alias)
Definition: Chara.cs:9145
AIAct SetAI(AIAct g)
Definition: Chara.cs:8618
override bool IsMinion
Definition: Chara.cs:625
Point orgPos
Definition: Chara.cs:21
override bool IsPCFaction
Definition: Chara.cs:669
Goal GetGoalWork()
Definition: Chara.cs:8553
override int MaxHP
Definition: Chara.cs:706
Zone currentZone
Definition: Chara.cs:253
Goal GetGoalHobby()
Definition: Chara.cs:8566
SourceChara.Row source
Definition: Chara.cs:156
Stats mana
Definition: Chara.cs:1148
Stats stamina
Definition: Chara.cs:1140
void TryRestock(bool onCreate)
Definition: Chara.cs:4606
GlobalData global
Definition: Chara.cs:76
bool IsHomeMember()
Definition: Chara.cs:6447
Chara master
Definition: Chara.cs:88
void Revive(Point p=null, bool msg=false)
Definition: Chara.cs:5036
Zone homeZone
Definition: Chara.cs:265
bool IsGuest()
Definition: Chara.cs:6472
Thing MakeGene(DNA.Type? type=null)
Definition: Chara.cs:7943
Religion faith
Definition: Chara.cs:437
Chara enemy
Definition: Chara.cs:86
CharaAbility ability
Definition: Chara.cs:422
bool IsInActiveZone
Definition: Chara.cs:836
Chara FindMaster()
Definition: Chara.cs:2359
Chara SetEnemy(Chara c=null)
Definition: Chara.cs:6163
void SyncRide()
Definition: Chara.cs:3853
FactionBranch homeBranch
Definition: Chara.cs:1064
void ChooseNewGoal()
Definition: Chara.cs:8489
Hostility hostility
Definition: Chara.cs:289
bool IsHostile()
Definition: Chara.cs:6389
bool isDead
Definition: Chara.cs:387
void SetFaith(string id)
Definition: Chara.cs:1697
void Cure(CureType type, int p=100, BlessedState state=BlessedState.Normal)
Definition: Chara.cs:9224
Chara SetHostility(Hostility h)
Definition: Chara.cs:1428
void MoveZone(string alias)
Definition: Chara.cs:3292
SourceRace.Row race
Definition: Chara.cs:462
void AddSpawn(string id)
Definition: CodexManager.cs:65
bool ignoreBackerDestoryFlag
Definition: CoreConfig.cs:558
void SetBGMInterval()
Definition: CoreConfig.cs:1002
bool test
Definition: CoreDebug.cs:170
bool revealMap
Definition: CoreDebug.cs:154
bool enable
Definition: CoreDebug.cs:286
bool godBuild
Definition: CoreDebug.cs:304
bool ignoreBuildRule
Definition: CoreDebug.cs:185
static string ZoneSave
Definition: CorePath.cs:196
UD_Biome dict
Definition: CoreRef.cs:146
BiomeProfile Water
Definition: CoreRef.cs:152
BiomeProfile Sand
Definition: CoreRef.cs:150
Crawler start
Definition: CoreRef.cs:214
Dictionary< int, BGMData > dictBGM
Definition: CoreRef.cs:385
Biomes biomes
Definition: CoreRef.cs:341
Crawlers crawlers
Definition: CoreRef.cs:343
CoreRef refs
Definition: Core.cs:51
TextureManager textures
Definition: Core.cs:45
CoreConfig config
Definition: Core.cs:70
static Crawler Create(string id)
Definition: Crawler.cs:193
bool CrawlUntil(Map map, Func< Point > onStart, int tries, Func< Result, bool > canComplete, Action onFail=null)
Definition: Crawler.cs:59
Definition: DNA.cs:8
Type
Definition: DNA.cs:10
int GetElapsedHour(int rawDate)
Definition: Date.cs:352
int GetRaw(int offsetHours=0)
Definition: Date.cs:322
int month
Definition: Date.cs:50
int day
Definition: Date.cs:62
bool IsExpired(int time)
Definition: Date.cs:332
bool IsNight
Definition: Date.cs:112
bool IsWinter
Definition: Date.cs:186
int GetElapsedMins(int rawDate)
Definition: Date.cs:347
int GetRemainingHours(int rawDeadLine)
Definition: Date.cs:337
Definition: EClass.cs:5
static Game game
Definition: EClass.cs:8
static Scene scene
Definition: EClass.cs:30
static int curve(int a, int start, int step, int rate=75)
Definition: EClass.cs:68
static GameData gamedata
Definition: EClass.cs:36
static Core core
Definition: EClass.cs:6
static Zone _zone
Definition: EClass.cs:20
static World world
Definition: EClass.cs:40
static Map _map
Definition: EClass.cs:18
static int rnd(long a)
Definition: EClass.cs:58
static SourceManager sources
Definition: EClass.cs:42
static float rndf(float a)
Definition: EClass.cs:92
static FactionBranch Branch
Definition: EClass.cs:22
static int rndHalf(int 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
static SoundManager Sound
Definition: EClass.cs:46
static UI ui
Definition: EClass.cs:16
static GameSetting setting
Definition: EClass.cs:34
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
bool Has(int ele)
int Value(int ele)
static Element Create(int id, int v=0)
Definition: ELEMENT.cs:1100
void Initialize(EloMap _elomap)
Definition: EloMapActor.cs:28
EloMap elomap
Definition: EloMapActor.cs:7
string idZoneProfile
Definition: EloMap.cs:68
Definition: EloMap.cs:8
void SetZone(int gx, int gy, Zone z, bool updateMesh=false)
Definition: EloMap.cs:234
TileInfo GetTileInfo(int gx, int gy)
Definition: EloMap.cs:286
void OnAfterSimulate()
void OnSimulateMonth(VirtualDate date)
void OnActivateZone()
int Evalue(int ele)
void OnCreate(Zone zone)
void OnUnclaimZone()
void OnSimulateDay(VirtualDate date)
List< Chara > members
void SetOwner(Zone zone)
void OnSimulateHour(VirtualDate date)
PolicyManager policies
void OnUnloadMap()
string Log(string idLang, string ref1=null, string ref2=null, string ref3=null, string ref4=null)
ElementContainerZone elements
void AddMemeber(Chara c)
List< GodStatueData > godStatues
Definition: GameData.cs:9
Definition: GameIO.cs:10
BalanceSetting balance
Definition: GameSetting.cs:309
bool isLoading
Definition: Game.cs:238
ReligionManager religions
Definition: Game.cs:158
int countLoadedMaps
Definition: Game.cs:232
SpatialManager spatials
Definition: Game.cs:152
CardManager cards
Definition: Game.cs:155
Zone activeZone
Definition: Game.cs:248
QuestManager quests
Definition: Game.cs:179
int seed
Definition: Game.cs:197
Zone StartZone
Definition: Game.cs:274
ZoneTransition transition
Definition: GlobalData.cs:6
Definition: Goal.cs:4
void SetStage(int idx, bool renewHarvest=false)
Definition: GrowSystem.cs:432
virtual bool IsMature
Definition: GrowSystem.cs:103
Stage stage
Definition: GrowSystem.cs:101
virtual bool NeedSunlight
Definition: GrowSystem.cs:93
bool CanGrow(VirtualDate date)
Definition: GrowSystem.cs:268
Definition: Guild.cs:2
void RefreshDevelopment()
Definition: Guild.cs:95
static Guild GetCurrentGuild()
Definition: Guild.cs:74
Definition: Lang.cs:6
static string[] GetList(string id)
Definition: Lang.cs:114
static bool keepBGM
Definition: LayerDrama.cs:10
int idBGM
Definition: Lot.cs:16
static SourceMaterial.Row GetRandomMaterial(int lv, string group=null, bool tryLevelMatTier=false)
Definition: MATERIAL.cs:52
Point GetLeftPos(float rate=-1f)
Definition: MapBounds.cs:92
int Size
Definition: MapBounds.cs:20
void ForeachCell(Action< Cell > action)
Definition: MapBounds.cs:279
Point GetBottomPos(float rate=-1f)
Definition: MapBounds.cs:87
Point GetRandomSurface(int x, int z, int radius, bool walkable=true, bool allowWater=false)
Definition: MapBounds.cs:182
int Width
Definition: MapBounds.cs:26
int x
Definition: MapBounds.cs:8
Point GetTopPos(float rate=-1f)
Definition: MapBounds.cs:77
Point GetRandomSpace(int width, int height, int tries=100)
Definition: MapBounds.cs:246
Point GetCenterPos()
Definition: MapBounds.cs:52
int Height
Definition: MapBounds.cs:28
Point GetRightPos(float rate=-1f)
Definition: MapBounds.cs:82
Point GetRandomPoint()
Definition: MapBounds.cs:97
string idSceneProfile
Definition: MapConfig.cs:8
bool retainDecal
Definition: MapConfig.cs:44
string idBiome
Definition: MapConfig.cs:26
int embarkY
Definition: MapConfig.cs:86
int embarkX
Definition: MapConfig.cs:83
bool IsValidVersion()
Definition: MapMetaData.cs:31
void Apply()
Definition: MapSubset.cs:60
static MapSubset Load(string id)
Definition: MapSubset.cs:33
Definition: Map.cs:13
bool IsIndoor
Definition: Map.cs:131
new void ForeachCell(Action< Cell > action)
Definition: Map.cs:2346
void ResetEditorPos()
Definition: Map.cs:357
Cell GetCell(int index)
Definition: Map.cs:887
PlantData TryGetPlant(Point p)
Definition: Map.cs:1942
void ExportMetaData(string _path, string id, PartialMap partial=null)
Definition: Map.cs:720
Chara FindChara(string id)
Definition: Map.cs:2568
IEnumerable< Card > Cards
Definition: Map.cs:135
Point GetRandomPoint(Point center, int radius, int tries=100, bool mustBeWalkable=true, bool requireLos=true)
Definition: Map.cs:2215
void Save(string path, ZoneExportData export=null, PartialMap partial=null)
Definition: Map.cs:376
PropsInstalled Installed
Definition: Map.cs:123
void AddCardOnActivate(Card c)
Definition: Map.cs:783
void OnDeactivate()
Definition: Map.cs:205
void OnCardRemovedFromZone(Card t)
Definition: Map.cs:825
void SetZone(Zone _zone)
Definition: Map.cs:181
List< Thing > things
Definition: Map.cs:49
byte[] TryLoadFile(string path, string s, int size)
Definition: Map.cs:535
Dictionary< int, int > backerObjs
Definition: Map.cs:67
List< int > _plDay
Definition: Map.cs:55
Playlist plDay
Definition: Map.cs:77
List< Chara > deadCharas
Definition: Map.cs:46
PropsManager props
Definition: Map.cs:91
void SetFloor(int x, int z, int idMat=0, int idFloor=0)
Definition: Map.cs:957
int seed
Definition: Map.cs:19
PlantData AddPlant(Point pos, Thing seed)
Definition: Map.cs:1952
RoomManager rooms
Definition: Map.cs:31
void SetReference()
Definition: Map.cs:195
POIMap poiMap
Definition: Map.cs:97
void ClearRainAndDecal()
Definition: Map.cs:1526
void OnLoad()
Definition: Map.cs:708
void OnImport(ZoneExportData data)
Definition: Map.cs:714
List< Chara > serializedCharas
Definition: Map.cs:43
Cell[,] cells
Definition: Map.cs:85
static MapMetaData GetMetaData(string pathZip)
Definition: Map.cs:738
void OnCardAddedToZone(Card t, int x, int z)
Definition: Map.cs:806
MapConfig config
Definition: Map.cs:37
void Load(string path, bool import=false, PartialMap partial=null)
Definition: Map.cs:546
List< Chara > charas
Definition: Map.cs:81
void RevealAll(bool reveal=true)
Definition: Map.cs:905
void RefreshAllTiles()
Definition: Map.cs:2108
void SetObj(int x, int z, int id=0, int value=1, int dir=0)
Definition: Map.cs:1535
MapBounds bounds
Definition: Map.cs:52
Definition: Msg.cs:5
static string SayRaw(string text)
Definition: Msg.cs:113
static string Say(string idLang, string ref1, string ref2=null, string ref3=null, string ref4=null)
Definition: Msg.cs:58
Definition: NoGoal.cs:4
Point GetCenter()
Definition: POIMap.cs:13
Cell GetCenterCell(int radius=1)
Definition: POIMap.cs:65
void OccyupyPOI(Point p, int radius=0)
Definition: POIMap.cs:99
static PathManager Instance
Definition: PathManager.cs:16
bool IsPathClear(Point origin, Point dest, IPathfindWalker walker, int radius)
Definition: PathManager.cs:47
int santa
Definition: Player.cs:572
int days
Definition: Player.cs:75
Flags flags
Definition: Player.cs:1091
CodexManager codex
Definition: Player.cs:1112
Stats stats
Definition: Player.cs:1013
bool isAutoFarming
Definition: Player.cs:1178
HashSet< int > doneBackers
Definition: Player.cs:1070
Zone nextZone
Definition: Player.cs:1222
Point lastZonePos
Definition: Player.cs:1100
int seedShrine
Definition: Player.cs:938
List< Chara > listSummon
Definition: Player.cs:1218
int fame
Definition: Player.cs:878
bool simulatingZone
Definition: Player.cs:1176
Definition: Point.cs:9
void SetObj(int id=0, int value=1, int dir=0)
Definition: Point.cs:912
override string ToString()
Definition: Point.cs:512
Point Set(int _x, int _z)
Definition: Point.cs:491
bool IsBlocked
Definition: Point.cs:351
List< Thing > Things
Definition: Point.cs:326
int x
Definition: Point.cs:36
Point GetNearestPoint(bool allowBlock=false, bool allowChara=true, bool allowInstalled=true, bool ignoreCenter=false, int minRadius=0)
Definition: Point.cs:607
int z
Definition: Point.cs:39
bool IsSync
Definition: Point.cs:332
bool HasThing
Definition: Point.cs:239
bool Equals(int _x, int _z)
Definition: Point.cs:944
bool IsValid
Definition: Point.cs:88
bool HasObj
Definition: Point.cs:137
Point Clamp(bool useBounds=false)
Definition: Point.cs:992
bool HasBlock
Definition: Point.cs:141
bool IsInBounds
Definition: Point.cs:104
Cell cell
Definition: Point.cs:51
Thing FindThing(Func< Thing, bool > func)
Definition: Point.cs:1124
GrowSystem growth
Definition: Point.cs:77
bool HasChara
Definition: Point.cs:226
Point GetRandomPoint(int radius, bool requireLos=true, bool allowChara=true, bool allowBlocked=false, int tries=100)
Definition: Point.cs:757
bool IsActive(int id, int days=-1)
PropsInstalled installed
Definition: PropsManager.cs:8
PropsRoaming roaming
Definition: PropsManager.cs:10
PropsStocked stocked
Definition: PropsManager.cs:6
TraitManager traits
Definition: Props.cs:18
List< Thing > Things
Definition: Props.cs:37
Thing Find(int uid)
Definition: Props.cs:389
List< Thing > containers
Definition: Props.cs:22
List< Quest > list
Definition: QuestManager.cs:11
Definition: Quest.cs:7
static List< Zone > ListDeliver()
Definition: Quest.cs:259
static Quest Create(string _id, string _idPerson=null, Chara c=null)
Definition: Quest.cs:241
Definition: Rand.cs:4
static int Range(int min, int max)
Definition: Rand.cs:42
static void InitBytes(int a)
Definition: Rand.cs:11
static void UseSeed(int seed, Action action)
Definition: Rand.cs:22
static void SetSeed(int a=-1)
Definition: Rand.cs:37
Definition: Recipe.cs:7
Definition: Region.cs:7
EloMap elomap
Definition: Region.cs:8
Dictionary< string, Religion > dictAll
Religion GetRandomReligion(bool onlyJoinable=true, bool includeMinor=false)
int LV
Definition: RenderRow.cs:22
List< Room > listRoom
Definition: RoomManager.cs:13
void AssignCharas()
Definition: RoomManager.cs:39
Definition: Room.cs:4
bool HasRoof
Definition: Room.cs:29
Lot lot
Definition: Room.cs:21
static string[] OpenFilePanel(string title, string directory, string extension, bool multiselect)
static string SaveFilePanel(string title, string directory, string defaultName, string extension)
static SceneProfile Load(string id)
Definition: SceneProfile.cs:18
void RebuildActorEx()
Definition: Scene.cs:986
EloMapActor elomapActor
Definition: Scene.cs:101
void Clear()
Definition: Scene.cs:353
void RemoveActorEx(Card c)
Definition: Scene.cs:1027
EloMap elomap
Definition: Scene.cs:149
List< Row > listFollower
Definition: SourceBacker.cs:82
List< Row > listPet
Definition: SourceBacker.cs:76
Dictionary< string, CardRow > map
Definition: SourceCard.cs:8
SourceCard cards
SourceObj objs
SourceZoneAffix zoneAffixes
SourceBacker backers
SourceElement elements
SourceQuest quests
string[] tags
Definition: SourceQuest.cs:22
void Remove(Spatial s)
Zone Find(string id)
int mapX
Definition: Spatial.cs:448
int lv
Definition: Spatial.cs:142
bool isRandomSite
Definition: Spatial.cs:334
virtual bool IsSnowZone
Definition: Spatial.cs:530
int uid
Definition: Spatial.cs:70
Spatial parent
Definition: Spatial.cs:10
string idCurrentSubset
Definition: Spatial.cs:28
virtual int DangerLvFix
Definition: Spatial.cs:475
virtual bool IsRegion
Definition: Spatial.cs:503
virtual string Name
Definition: Spatial.cs:497
virtual int DangerLvBoost
Definition: Spatial.cs:477
int dateQuest
Definition: Spatial.cs:286
virtual void Destroy()
Definition: Spatial.cs:678
Point _regionPos
Definition: Spatial.cs:55
SourceZone.Row source
Definition: Spatial.cs:441
bool destryoed
Definition: Spatial.cs:45
int idPrefix
Definition: Spatial.cs:130
bool isImported
Definition: Spatial.cs:47
bool isConquered
Definition: Spatial.cs:382
string idProfile
Definition: Spatial.cs:25
int y
Definition: Spatial.cs:106
Zone FindDeepestZone()
Definition: Spatial.cs:703
int mapY
Definition: Spatial.cs:460
int x
Definition: Spatial.cs:94
Zone FindZone(int lv)
Definition: Spatial.cs:716
static SpawnList Get(string id, Func< SourceChara.Row, bool > func)
static SpawnList Get(string id, string parent=null, CardFilter filter=null)
Definition: SpawnList.cs:18
static SpawnSetting Default
Definition: SpawnSetting.cs:31
static SpawnSetting Fish()
static SpawnSetting Evolved(int fixedLv=-1)
Definition: SpawnSetting.cs:35
virtual void Mod(int a)
Definition: Stats.cs:135
virtual int value
Definition: Stats.cs:56
virtual int max
Definition: Stats.cs:68
void ApplyLocalReplace(string path)
List< Thing > List(Func< Thing, bool > func, bool onlyAccessible=false)
void DestroyAll(Func< Thing, bool > funcExclude=null)
Thing Find(int uid)
Thing CanStack(Thing target, int destInvX=-1, int destInvY=-1)
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
override string GetName(NameStyle style, int _num=-1)
Definition: Thing.cs:527
bool IsSharedContainer
Definition: Thing.cs:112
virtual bool CanGiveRandomQuest
Definition: TraitChara.cs:116
virtual bool CanAutoRevive
Definition: TraitChara.cs:20
TraitSet GetTraitSet(Type t)
Definition: TraitManager.cs:94
virtual bool IsFor(Zone z)
static bool CanTagSale(Card t, bool insideContainer=false)
Definition: TraitSalesTag.cs:9
static Thing MakeSeed(SourceObj.Row obj, PlantData plant=null)
Definition: TraitSeed.cs:88
static void LevelSeed(Thing t, SourceObj.Row obj, int num)
Definition: TraitSeed.cs:140
Definition: Trait.cs:7
virtual string IDActorEx
Definition: Trait.cs:174
virtual List< Point > ListPoints(Point center=null, bool onlyPassable=true)
Definition: Trait.cs:754
virtual void TryToggle()
Definition: Trait.cs:1131
Point GetRandomPoint(Func< Point, bool > func=null, Chara accessChara=null)
Definition: Trait.cs:736
virtual ShopType ShopType
Definition: Trait.cs:518
string GetParam(int i, string def=null)
Definition: Trait.cs:562
Point GetPoint()
Definition: Trait.cs:731
virtual int Electricity
Definition: Trait.cs:102
virtual int Decay
Definition: Trait.cs:120
static void Reserve(string idStep, Action onBeforePlay=null)
Definition: Tutorial.cs:55
Definition: UINote.cs:6
bool IsRealTime
Definition: VirtualDate.cs:7
void SimulateHour()
Definition: VirtualDate.cs:66
void BuildSunMap()
Definition: VirtualDate.cs:54
HashSet< int > sunMap
Definition: VirtualDate.cs:9
bool IsRaining
Definition: Weather.cs:117
FilterResult IsFilterPass(string text)
Definition: Window.cs:498
ContainerFlag flag
Definition: Window.cs:267
HashSet< int > cats
Definition: Window.cs:119
bool userFilter
Definition: Window.cs:132
bool noRotten
Definition: Window.cs:439
bool onlyRottable
Definition: Window.cs:451
bool advDistribution
Definition: Window.cs:427
Definition: Window.cs:13
GameDate date
Definition: World.cs:6
Weather weather
Definition: World.cs:12
void GenerateMap(Zone zone)
EloMap.TileInfo[,] surrounding
List< ZoneEvent > list
List< ZonePreEnterEvent > listPreEnter
void OnLoad(Zone _zone)
virtual void OnGenerateMap()
Definition: ZoneInstance.cs:32
virtual bool ShowEnemyOnMinimap
Definition: ZoneInstance.cs:30
virtual void Execute()
static ZoneProfile Load(string id)
Definition: ZoneProfile.cs:73
EnterState state
Definition: Zone.cs:12
void SetBGM(int id=-1, bool refresh=true)
Definition: Zone.cs:2930
virtual string GetNewZoneID(int level)
Definition: Zone.cs:542
string TextDangerLv
Definition: Zone.cs:426
Vector3 InspectPosition
Definition: Zone.cs:508
void OnChildNumChange(Card c)
Definition: Zone.cs:1900
int GetSortVal()
Definition: Zone.cs:3207
virtual bool CanDigUnderground
Definition: Zone.cs:268
bool isSimulating
Definition: Zone.cs:72
virtual int BaseElectricity
Definition: Zone.cs:488
virtual string IDPlayList
Definition: Zone.cs:138
Dictionary< int, string > dictCitizen
Definition: Zone.cs:49
void SetBGM(List< int > ids, bool refresh=true)
Definition: Zone.cs:2907
override string ToString()
Definition: Zone.cs:547
List< Chara > ListMinions(Chara c)
Definition: Zone.cs:3628
void RefreshElectricity()
Definition: Zone.cs:2837
ZoneExportData Import(string path)
Definition: Zone.cs:3098
override int ContentLv
Definition: Zone.cs:95
virtual string IDBaseLandFeat
Definition: Zone.cs:144
virtual bool LockExit
Definition: Zone.cs:270
void Generate()
Definition: Zone.cs:2329
virtual string GetDungenID()
Definition: Zone.cs:532
void Revive()
Definition: Zone.cs:1091
virtual bool BlockBorderExit
Definition: Zone.cs:166
ZoneEventManager events
Definition: Zone.cs:40
void Simulate()
Definition: Zone.cs:1157
BiomeProfile _biome
Definition: Zone.cs:76
ZoneProfile GetProfile()
Definition: Zone.cs:2277
static string forceSubset
Definition: Zone.cs:27
virtual float PrespawnRate
Definition: Zone.cs:322
virtual int MaxSpawn
Definition: Zone.cs:308
FortuneRollData GetOrCreateFortuneRollData(bool refresh=true)
Definition: Zone.cs:3757
void SpawnAltar()
Definition: Zone.cs:2484
virtual bool UseLight
Definition: Zone.cs:393
virtual bool RegenerateOnEnter
Definition: Zone.cs:260
int MinsSinceLastActive
Definition: Zone.cs:122
virtual void OnAfterSimulate()
Definition: Zone.cs:1149
static int okaerinko
Definition: Zone.cs:31
override void OnLoad()
Definition: Zone.cs:1850
virtual string idExport
Definition: Zone.cs:147
void OnSimulateDay(VirtualDate date)
Definition: Zone.cs:3316
virtual int StartLV
Definition: Zone.cs:404
virtual float OreChance
Definition: Zone.cs:314
Playlist CreatePlaylist(ref List< int > list, Playlist mold=null)
Definition: Zone.cs:2991
static bool IsImportValid(string path)
Definition: Zone.cs:3177
virtual bool IsNefia
Definition: Zone.cs:280
virtual string IDGenerator
Definition: Zone.cs:130
int CountMinions(Chara c)
Definition: Zone.cs:3641
bool CanDestroy()
Definition: Zone.cs:1764
virtual bool MakeTownProperties
Definition: Zone.cs:240
Thing TryGetThingFromSharedContainer(Func< Thing, bool > func)
Definition: Zone.cs:2214
void Activate()
Definition: Zone.cs:586
void WriteNote(UINote n, Action< UINote > onWriteNote=null, IInspect.NoteMode mode=IInspect.NoteMode.Default, Recipe recipe=null)
Definition: Zone.cs:3199
virtual void OnRegenerate()
Definition: Zone.cs:1125
bool isStarted
Definition: Zone.cs:70
virtual bool CountDeepestLevel
Definition: Zone.cs:224
virtual ZoneScaleType ScaleType
Definition: Zone.cs:406
void OnKillGame()
Definition: Zone.cs:1669
virtual string pathExport
Definition: Zone.cs:124
void RefreshCriminal()
Definition: Zone.cs:3489
virtual void OnBeforeDeactivate()
Definition: Zone.cs:1133
MapSubset subset
Definition: Zone.cs:62
int tempDist
Definition: Zone.cs:74
virtual ZoneTransition.EnterState RegionEnterState
Definition: Zone.cs:170
virtual bool ShouldAutoRevive
Definition: Zone.cs:375
Zone GetTopZone()
Definition: Zone.cs:1909
BiomeProfile biome
Definition: Zone.cs:126
HashSet< int > completedQuests
Definition: Zone.cs:37
virtual bool IsSkyLevel
Definition: Zone.cs:262
bool IsPCFactionOrTent
Definition: Zone.cs:471
virtual bool DisableRooms
Definition: Zone.cs:118
Chara TryGenerateEvolved(bool force=false, Point p=null)
Definition: Zone.cs:2576
FactionBranch branch
Definition: Zone.cs:34
void ImportDialog(string dir=null)
Definition: Zone.cs:3161
virtual string IDSubset
Definition: Zone.cs:209
void ClaimZone(bool debug=false, Point pos=null)
Definition: Zone.cs:1694
Chara AddChara(string id, int x, int z)
Definition: Zone.cs:1933
Card AddThing(string id, int x, int z)
Definition: Zone.cs:1938
ZoneBlueprint bp
Definition: Zone.cs:64
int GetDeepestLv()
Definition: Zone.cs:3024
override void OnCreate()
Definition: Zone.cs:565
void RefreshBGM()
Definition: Zone.cs:2951
void Deactivate()
Definition: Zone.cs:1601
virtual bool ShouldScaleImportedChara(Chara c)
Definition: Zone.cs:537
ElementContainerZone elements
Definition: Zone.cs:43
virtual bool IsReturnLocation
Definition: Zone.cs:349
void RefreshPlaylist()
Definition: Zone.cs:2935
void AbandonZone()
Definition: Zone.cs:1748
Chara AddRandomVisitor(bool guest=false)
Definition: Zone.cs:3232
void ExportDialog(string dir=null)
Definition: Zone.cs:3148
virtual void OnBeforeSimulate()
Definition: Zone.cs:1141
int GetElectricity(bool cost=false)
Definition: Zone.cs:2868
virtual FlockController.SpawnType FlockType
Definition: Zone.cs:410
virtual bool GrowWeed
Definition: Zone.cs:344
void SpawnLostItems()
Definition: Zone.cs:3664
virtual bool HasLaw
Definition: Zone.cs:226
Chara SpawnMob(Point pos=null, SpawnSetting setting=null)
Definition: Zone.cs:2712
virtual bool CanUnlockExit
Definition: Zone.cs:272
int GetDeepestLv(ref int max)
Definition: Zone.cs:3030
virtual int RespawnPerHour
Definition: Zone.cs:338
Chara FindChara(int uid)
Definition: Zone.cs:3019
int Evalue(string alias)
Definition: Zone.cs:527
virtual int MaxSoil
Definition: Zone.cs:511
bool IsStartZone
Definition: Zone.cs:482
virtual float RespawnRate
Definition: Zone.cs:324
virtual bool IsUserZone
Definition: Zone.cs:266
void ApplyBackerPet(bool draw)
Definition: Zone.cs:3709
bool CanEnterBuildModeAnywhere
Definition: Zone.cs:453
Card AddCardSplinkle(Card t, Point center, int radius=4)
Definition: Zone.cs:1918
override string NameSuffix
Definition: Zone.cs:413
virtual string IdProfile
Definition: Zone.cs:136
void TryGenerateShrine()
Definition: Zone.cs:2622
virtual string TextWidgetDate
Definition: Zone.cs:132
void AddGlobalCharasOnActivate()
Definition: Zone.cs:1520
void OnSimulateMonth(VirtualDate date)
Definition: Zone.cs:3324
virtual float RuinChance
Definition: Zone.cs:312
virtual bool AddPrefix
Definition: Zone.cs:278
virtual float ChanceSpawnNeutral
Definition: Zone.cs:340
virtual string IDSceneTemplate
Definition: Zone.cs:191
virtual bool CanBeDeliverDestination
Definition: Zone.cs:222
MapBounds bounds
Definition: Zone.cs:46
bool IsInstance
Definition: Zone.cs:484
void ClearZones(Zone current=null)
Definition: Zone.cs:1878
Chara Boss
Definition: Zone.cs:83
bool TryAddThingInSharedContainer(Thing t, List< Thing > containers=null, bool add=true, bool msg=false, Chara chara=null, bool sharedOnly=true)
Definition: Zone.cs:2091
virtual bool IsFestival
Definition: Zone.cs:206
virtual void OnDeactivate()
Definition: Zone.cs:1137
void OnVisit()
Definition: Zone.cs:1054
virtual ActionMode DefaultActionMode
Definition: Zone.cs:164
virtual bool AllowInvest
Definition: Zone.cs:245
string InspectName
Definition: Zone.cs:504
virtual string IDHat
Definition: Zone.cs:142
virtual bool IsTown
Definition: Zone.cs:220
void OnInspect()
Definition: Zone.cs:3203
void TryGenerateOre()
Definition: Zone.cs:2549
virtual void OnActivate()
Definition: Zone.cs:1129
Card AddCard(Card t, int x, int z)
Definition: Zone.cs:1958
void OnSimulateHour(VirtualDate date)
Definition: Zone.cs:3261
override void _OnBeforeSave()
Definition: Zone.cs:1823
void RainWater()
Definition: Zone.cs:3336
Point InspectPoint
Definition: Zone.cs:506
override void OnAfterCreate()
Definition: Zone.cs:571
static List< Thing > Suckers
Definition: Zone.cs:80
Card AddThing(string id, Point p)
Definition: Zone.cs:1943
virtual int MaxLv
Definition: Zone.cs:274
override void Destroy()
Definition: Zone.cs:1859
virtual bool UseFog
Definition: Zone.cs:386
virtual bool GrowPlant
Definition: Zone.cs:342
virtual string IDAmbience
Definition: Zone.cs:175
virtual string IDPlaylistOverwrite
Definition: Zone.cs:140
virtual string IdBiome
Definition: Zone.cs:128
bool dirtyElectricity
Definition: Zone.cs:68
void RemoveCard(Card t)
Definition: Zone.cs:1988
Point GetSpawnPos(SpawnPosition type, int tries=100)
Definition: Zone.cs:2679
bool TryAddThing(Thing target, Point p, bool destroyIfFail=false)
Definition: Zone.cs:2188
void GrowPlants(VirtualDate date)
Definition: Zone.cs:3351
Chara FindChara(string id)
Definition: Zone.cs:3014
virtual bool ShouldMakeExit
Definition: Zone.cs:361
void RefreshHat()
Definition: Zone.cs:1044
virtual bool AllowCriminal
Definition: Zone.cs:242
virtual bool AlwaysLowblock
Definition: Zone.cs:390
static CardRow sourceHat
Definition: Zone.cs:29
MapGenerator Generator
Definition: Zone.cs:134
virtual bool AllowNewZone
Definition: Zone.cs:256
bool ShowEnemyOnMinimap
Definition: Zone.cs:327
bool IsActiveZone
Definition: Zone.cs:490
void ModInfluence(int a)
Definition: Zone.cs:3522
int HourSinceLastActive
Definition: Zone.cs:120
virtual bool RestrictBuild
Definition: Zone.cs:285
virtual void OnGenerateRooms(BaseMapGen gen)
Definition: Zone.cs:2675
Point GetRandomVisitPos(Chara c)
Definition: Zone.cs:1498
void Export()
Definition: Zone.cs:3190
void UnloadMap()
Definition: Zone.cs:1680
virtual void OnGenerateMap()
Definition: Zone.cs:2523
List< Element > ListLandFeats()
Definition: Zone.cs:3043
int fileVariation
Definition: Zone.cs:66
virtual bool PetFollow
Definition: Zone.cs:282
override int DangerLv
Definition: Zone.cs:107
static bool forceRegenerate
Definition: Zone.cs:25
Zone ParentZone
Definition: Zone.cs:162
virtual int MinLv
Definition: Zone.cs:276
bool IsPCFaction
Definition: Zone.cs:468
void ResetHostility()
Definition: Zone.cs:2659
virtual bool MakeEnemiesNeutral
Definition: Zone.cs:229
virtual bool IsUnderwater
Definition: Zone.cs:264
virtual void OnCreateBP()
Definition: Zone.cs:2325
void Export(string path, PartialMap partial=null, bool usermap=false)
Definition: Zone.cs:3107
void TrySpawnFollower()
Definition: Zone.cs:2450
virtual bool ShouldRegenerate
Definition: Zone.cs:372
virtual float BigDaddyChance
Definition: Zone.cs:316
string NameWithLevel
Definition: Zone.cs:424
void TryGenerateBigDaddy()
Definition: Zone.cs:2596
virtual float EvolvedChance
Definition: Zone.cs:318
static bool ignoreSpawnAnime
Definition: Zone.cs:78
string TextDeepestLv
Definition: Zone.cs:429
ICardParent GetRoot()
Definition: Zone.cs:1904
int GetSoilCost()
Definition: Zone.cs:3654
void CreateBP()
Definition: Zone.cs:2317
string pathTemp
Definition: Zone.cs:158
virtual void OnAdvanceHour()
Definition: Zone.cs:1153
FortuneRollData fortuneRoll
Definition: Zone.cs:58
ZoneInstance instance
Definition: Zone.cs:52
void ModDevelopment(int a)
Definition: Zone.cs:3532
virtual bool WillAutoSave
Definition: Zone.cs:258
virtual bool IsExplorable
Definition: Zone.cs:346
virtual bool RevealRoom
Definition: Zone.cs:388
void UpdateQuests(bool force=false)
Definition: Zone.cs:3541
Region Region
Definition: Zone.cs:160
virtual bool KeepAllyDistance
Definition: Zone.cs:297
virtual bool HiddenInRegionMap
Definition: Zone.cs:408
bool IsLoaded
Definition: Zone.cs:486
bool IsCrime(Chara c, Act act)
Definition: Zone.cs:3480
bool CanEnterBuildMode
Definition: Zone.cs:441
void RefreshListCitizen()
Definition: Zone.cs:3506
Card AddCard(Card t)
Definition: Zone.cs:1953
Zone GetZoneAt(int _x, int _y)
Definition: Zone.cs:3458
void ResetPlaylist()
Definition: Zone.cs:2943
List< int > landFeats
Definition: Zone.cs:55
Card AddCard(Card t, Point point)
Definition: Zone.cs:1948
string TextLevel(int _lv)
Definition: Zone.cs:552
int Evalue(int ele)
Definition: Zone.cs:522
virtual ZoneFeatureType FeatureType
Definition: Zone.cs:172
virtual float ShrineChance
Definition: Zone.cs:320
Map map
Definition: Zone.cs:60
Point GetSpawnPos(Chara c, ZoneTransition.EnterState destState=ZoneTransition.EnterState.Auto)
Definition: Zone.cs:1317
int MaxRespawn
Definition: Zone.cs:310
virtual int ExpireDays
Definition: Zone.cs:168
virtual void OnVisitNewMapOrRegenerate()
Definition: Zone.cs:1145
bool CanInspect
Definition: Zone.cs:493
void RemoveCard(Card c)
NoteMode
Definition: IInspect.cs:7
int GetInt()
Definition: Version.cs:21