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