2using System.Collections.Generic;
49 public Dictionary<int, string>
dictCitizen =
new Dictionary<int, string>();
80 public static List<Thing>
Suckers =
new List<Thing>();
90 base.uidBoss = value?.
uid ?? 0;
138 public virtual string IDPlayList => base.source.idPlaylist.IsEmpty((base.lv != 0) ?
"Underground" :
null);
142 public virtual string IDHat =>
null;
150 if (base.source.idFile.Length != 0)
152 return base.source.idFile[
fileVariation] + ((base.lv == 0) ?
"" : (
"_F" + base.lv));
158 public string pathTemp => GameIO.pathTemp + base.uid +
"/";
308 public virtual int MaxSpawn => map.bounds.Width * map.bounds.Height / 175 + 2;
354 return base.source.tag.Contains(
"return");
366 return base.lv <
MaxLv;
386 public virtual bool UseFog => base.lv < 0;
398 return base.source.tag.Contains(
"light");
410 public virtual FlockController.SpawnType
FlockType => FlockController.SpawnType.Default;
420 return "conquered".lang();
544 return base.source.id;
558 return " " +
"zoneLevelB".lang((_lv * -1).
ToString() ??
"");
560 return " " +
"zoneLevel".lang((_lv + 1).
ToString() ??
"");
594 EClass.game.config.reverseSnow =
false;
601 EClass.pc.global.transition.uidLastZone = 0;
609 EClass.game.activeZone =
this;
611 Debug.Log(
NameWithLevel +
"/" +
id +
"/" + base.uid +
"/" + base.isGenerated +
"/" +
IsLoaded +
"/" + File.Exists(base.pathSave +
"map"));
612 if (base.isGenerated && !
IsLoaded && !File.Exists(base.pathSave +
"map"))
614 Debug.Log(
"(Bug) File does not exist:" +
destryoed +
"/" + base.pathSave);
615 base.isGenerated =
false;
620 if (flag2 &&
map !=
null)
627 Debug.Log(
"generating random map");
650 Debug.Log(
"zone is already loaded");
664 Debug.Log(base.isGenerated +
"/" + flag3 +
"/" + flag2 +
"/" +
IDSubset);
665 if (!base.isGenerated || flag3 || flag2)
672 IO.DeleteDirectory(
pathTemp +
"Texture Replace");
678 base.isGenerated =
true;
682 zoneExportData.orgMap =
GameIO.LoadFile<
Map>(base.pathSave +
"map");
685 catch (Exception message)
689 base.isGenerated =
true;
694 Debug.Log(
"loading map: imported? " +
isImported +
" regenerate? " + flag3);
698 EClass.
ui.Say(
"System.IO.EndOfStreamException: Unexpected end of stream:" + Environment.NewLine +
"File may be corrupted. Try replacing the following file if you have a backup:" + Environment.NewLine + (
isImported ?
pathTemp : base.pathSave) +
"map");
716 if (zoneExportData.
orgMap !=
null)
720 map.charas = orgMap.
charas;
730 map.
cells[i, j].
isSeen = array[i * EClass._map.Size + j].GetBit(1);
736 Debug.Log(
"Importing New Chara:" +
item.id +
"/" +
item.Name +
"/" +
item.orgPos);
743 foreach (Thing thing in orgMap.things)
745 if (t.id == thing.id && t.pos.Equals(thing.pos))
747 if (t.trait is TraitNewZone)
750 map.things.Insert(0, thing);
751 thing.stackOrder = 0;
755 t.ChangeMaterial(thing.material);
765 foreach (Thing thing2 in orgMap.things)
767 if (thing2.trait is TraitNewZone && t.pos.Equals(thing2.pos))
770 map.things.Add(thing2);
776 if (t.id ==
"medal" || t.id ==
"856")
778 foreach (Thing thing3 in orgMap.things)
780 if (t.id == thing3.id && t.pos.Equals(thing3.pos))
809 thing4.isSubsetCard =
false;
829 if (isImported && IsTown)
831 RefreshListCitizen();
834 AddGlobalCharasOnActivate();
838 foreach (
Card item3
in map.
Cards.ToList())
848 idCurrentSubset = forceSubset ?? IDSubset;
849 if (idCurrentSubset !=
null)
857 if (MakeTownProperties)
868 thing7.isNPCProperty =
false;
872 if (instance !=
null)
877 if (isImported && !flag3 && !RevealRoom)
887 point2.cell.isSeen =
false;
896 PathManager.Instance._pathfinder.PunishChangeDirection =
false;
900 EClass._map.config.idSceneProfile =
"indoor_water";
903 if (flag && IsTown && base.lv == 0)
907 if (base.visitCount == 0)
915 map.effectManager.GetOrCreate(c.GetSharedPoint());
934 Map.isDirtySunMap =
true;
950 chara.dirtySpeed =
true;
955 if (
card.IsUnique && !
card.IsPCFaction && !
card.IsPCParty)
965 int @
int =
card.GetInt(55);
970 if (chara2.
uid == @
int)
974 chara.enemy = chara2;
976 chara.calmCheckTurn = 20 +
EClass.
rnd(30);
984 if (
card.c_uidMaster != 0 && chara.
master ==
null)
997 else if (
card.IsInstalled &&
card.trait is
TraitDoor traitDoor &&
card.pos.HasChara && !traitDoor.IsOpen())
999 traitDoor.ToggleDoor(sound:
false, refresh:
false);
1003 forceRegenerate =
false;
1015 OnVisitNewMapOrRegenerate();
1020 EClass.player.uidLastTown = 0;
1022 else if (IsTown && base.lv == 0)
1024 EClass.player.uidLastTown = base.uid;
1028 RefreshElectricity();
1058 EClass.player.stats.deepest = DangerLv;
1079 isSimulating =
true;
1081 isSimulating =
false;
1098 if (ShouldAutoRevive)
1118 Point point = GetSpawnPos(value);
1165 if (
Boss !=
null && IsNefia)
1171 int num = Mathf.Clamp(MinsSinceLastActive, 1, 10000);
1182 chara2.mana.value = 0;
1186 chara2.stamina.value = 0;
1191 chara2.resistCon =
null;
1195 Msg.ignoreAll =
true;
1197 chara2.
HealHP(Mathf.Max(1, chara2.
MaxHP) * Mathf.Min(num, 20) / 20);
1198 chara2.
mana.
Mod(Mathf.Max(1, chara2.
mana.
max) * Mathf.Min(num, 20) / 20);
1200 Msg.ignoreAll =
false;
1204 Debug.Log(
"Last Active:" + base.lastActive);
1205 if (base.lastActive == 0 || HourSinceLastActive <= 1 || IsRegion)
1209 Debug.Log(Name +
" Simulate:" + HourSinceLastActive +
" hours");
1212 int num2 = HourSinceLastActive / 24;
1218 if (!
item.IsPCParty)
1220 item.OnSleep(200, num2);
1221 if (
item.conSleep !=
null)
1223 item.conSleep.Kill();
1229 if (
item.things.Count > 20)
1236 VirtualDate.current = virtualDate;
1237 for (
int i = 0; i < HourSinceLastActive; i++)
1249 VirtualDate.current =
null;
1255 foreach (
Chara item2
in list)
1263 if (item2.
id ==
"bee")
1267 if (num2 > 0 && item2.
IsGuest())
1277 item2.
SetAI(goalWork);
1280 (goalWork as
GoalWork).FindWork(item2);
1284 item2.
SetAI(goalWork);
1287 (goalWork as
GoalWork).FindWork(item2);
1297 List<Thing> list2 =
new List<Thing>();
1305 if (num4 >= list2.Count)
1309 for (
int j = num4; j < list2.Count; j++)
1311 if (
EClass.
rnd(200) <= HourSinceLastActive)
1314 AddCard(chara, list2.RandomItem().
pos);
1316 chara.c_originalHostility = c_originalHostility;
1326 bool flag = zone ==
null || zone.lv > base.
lv;
1332 if (GetZoneAt(topZone.
x, topZone.
y) !=
null)
1344 enterState = RegionEnterState;
1350 float rate = zoneTransition?.
ratePos ?? (-1f);
1359 if (nearestPoint !=
null && nearestPoint.
IsValid)
1361 return nearestPoint;
1371 return new Point(zoneTransition.
x, zoneTransition.
z);
1379 if (traitTeleporter !=
null)
1383 if (traitTeleporter !=
null && !zoneTransition.
idTele.IsEmpty() && zoneTransition.
idTele == traitTeleporter.
id.IsEmpty(traitTeleporter.
GetParam(3)))
1397 if (randomThing2 !=
null)
1417 if (randomThing !=
null)
1437 flag = base.lv <= 0;
1463 return new Point(zoneTransition.
x, zoneTransition.
z);
1465 return GetRandomVisitPos(c);
1479 if (thing5.
trait is
TraitNewZone { zone: not null } traitNewZone && zone !=
null && traitNewZone.
zone.
uid == zone.uid)
1481 if (c !=
null && enterState != 0)
1483 c.SetDir(traitNewZone.owner.dir);
1485 return traitNewZone.GetExitPos();
1490 if (thing6.
trait is
TraitNewZone traitNewZone2 && ((flag && traitNewZone2.IsUpstairs) || (!flag && traitNewZone2.IsDownstairs)))
1492 if (c !=
null && enterState != 0)
1494 c.SetDir(traitNewZone2.owner.dir);
1496 return traitNewZone2.GetExitPos();
1499 return GetRandomVisitPos(c);
1507 point = map.
rooms.
listRoom.RandomItem().points.RandomItem();
1509 if (point ==
null &&
EClass.
rnd(4) != 0)
1526 Point spawnPosPC =
null;
1529 spawnPosPC = GetSpawnPos(
EClass.
pc);
1531 if (spawnPosPC ==
null)
1559 c.isRestrained =
false;
1563 Point pos = (c.IsPC ? spawnPosPC : (c.IsPCParty ? spawnPosPC.GetNearestPoint(allowBlock:
false, allowChara:
false, allowInstalled:
true, ignoreCenter:
true) : GetSpawnPos(c)));
1568 pos.
Set(spawnPosPC);
1573 if (!spawnPosPC.ForeachNearestPoint(delegate(
Point p)
1581 }, allowBlock:
false, EClass.pc.party.members.Count >= 12, allowInstalled:
true, ignoreCenter:
true, EClass._zone.IsRegion ? 2 : 6))
1583 pos.
Set(spawnPosPC);
1588 c.global.transition =
null;
1596 Point nearestPoint = spawnPosPC.
GetNearestPoint(allowBlock:
false, allowChara:
false, allowInstalled:
true, ignoreCenter:
true);
1598 item.pos.Set(nearestPoint);
1607 if (!IsUserZone && !IsPCFaction && map !=
null)
1609 List<Thing> list =
new List<Thing>();
1621 if (
item.IsContainer)
1639 Msg.
Say(
"pick_valuable");
1640 foreach (
Thing item2
in list)
1642 Msg.
Say(
"pick_valuable2", item2);
1647 base.isPeace =
false;
1648 OnBeforeDeactivate();
1660 EClass.game.activeZone =
null;
1664 base.isGenerated =
false;
1666 if (forceRegenerate)
1695 Debug.Log(
"Unloaded Map:" +
this);
1709 base.dateExpire = 0;
1714 thing.isNPCProperty =
false;
1720 for (
int i = 0; i < 7; i++)
1764 SetMainFaction(
null);
1783 Zone topZone = GetTopZone();
1790 if (!base.isRandomSite && !(
this is
Zone_Field) && (topZone ==
null || topZone ==
this || topZone.
FindDeepestZone() ==
this))
1802 if (zone !=
null && zone.
GetTopZone() ==
this)
1814 Debug.Log(
"Deleting Zone:" +
this);
1820 else if (map !=
null)
1822 Debug.Log(
"Saving Zone:" +
this);
1823 map.
Save(base.pathSave);
1824 if (!base.isMapSaved)
1826 base.isMapSaved =
true;
1827 IO.DeleteDirectory(base.pathSave +
"Texture Replace");
1828 IO.CopyDir(pathTemp +
"Texture Replace", base.pathSave +
"/Texture Replace");
1848 children.ForeachReverse(delegate(
Spatial z)
1856 if (parent !=
null && parent.IsRegion && instance ==
null)
1862 base.isGenerated =
false;
1871 base.isGenerated =
false;
1872 Zone topZone = GetTopZone();
1873 if (topZone !=
this)
1878 children.ForeachReverse(delegate(
Spatial c)
1898 if (parent ==
null || parent.IsRegion)
1902 return parent as
Zone;
1908 for (
int i = 0; i < 1000; i++)
1914 return AddCard(t, point);
1917 return AddCard(t, center);
1932 return AddThing(
id, p.
x, p.
z);
1937 return AddCard(t, point.
x, point.
z);
1942 return AddCard(t, 0, 0);
1955 chara.currentZone =
this;
1965 ignoreSpawnAnime =
false;
1970 chara.hasSpawned =
true;
1984 t.Chara.currentZone =
null;
1996 public T GetRandomSpot<T>() where T :
Trait
2001 public bool TryAddThingInSpot<T>(
Thing t,
bool useContainer =
true) where T :
Trait
2004 if (randomThing ==
null)
2011 List<Thing> list =
new List<Thing>();
2014 foreach (
Card item2
in item.ListCards())
2018 list.Add(item2.
Thing);
2022 if (TryAddThingInSharedContainer(t, list, add:
true, msg:
false,
null, sharedOnly:
false))
2031 public List<Thing> TryListThingsInSpot<T>(Func<Thing, bool> func =
null) where T :
TraitSpot
2033 List<T> list =
new List<T>();
2034 List<Thing> list2 =
new List<Thing>();
2039 list.Add(thing.
trait as T);
2042 foreach (T
item in list)
2044 foreach (
Point item2
in item.ListPoints(
null, onlyPassable:
false))
2052 if (thing2.
things.Count == 0)
2054 if (IsValid(thing2))
2068 bool IsValid(
Thing t)
2070 if (func !=
null && !func(t))
2087 if (containers ==
null)
2091 if (SearchDest() !=
null)
2110 foreach (
Thing container
in containers)
2112 Thing thing = container;
2120 if (windowSaveData !=
null)
2140 foreach (
int cat
in windowSaveData.
cats)
2153 else if (windowSaveData.
flag.HasFlag(flag))
2158 priority = windowSaveData.
priority;
2192 if (num == 0 || !destroyIfFail)
2219 List<T> list =
new List<T>();
2224 list.Add(thing2.
trait as T);
2227 foreach (T
item in list)
2229 foreach (
Point item2
in item.ListPoints(
null, onlyPassable:
false))
2237 if (thing3.
things.Count == 0)
2239 if (IsValid(thing3, insideContainer:
false))
2254 bool IsValid(
Thing t,
bool insideContainer)
2266 string text = IdProfile;
2272 text = ((base.lv < 0) ?
"Underground" :
"Sky");
2274 else if (region !=
null)
2280 name =
Lang.
GetList(
"zone_" + text.Split(
'/')[1]).RandomItem();
2282 for (
int i = 0; i < 3; i++)
2284 for (
int j = 0; j < 3; j++)
2289 if (text ==
"Random/R_Shore")
2291 base.isBeach =
true;
2308 bp.genSetting.seed = base.Seed;
2318 base.isGenerated =
true;
2329 if (IdBiome ==
"Sand" || IdBiome ==
"Water" || IsUnderwater)
2331 int num = 1 +
EClass.
rnd((IdBiome ==
"Water") ? 3 : 2);
2332 for (
int i = 0; i < num; i++)
2337 Thing t =
ThingGen.
Create(
"pearl_oyster",
new string[3] {
"wood_birch",
"poplar",
"coralwood" }.RandomItem(), ContentLv);
2342 for (
int j = 0; j < num; j++)
2353 for (
int k = 0; k < 30 +
EClass.
rnd(30); k++)
2376 foreach (
Point point
in r.points)
2380 map.
SetObj(point.
x, point.
z, num6);
2394 foreach (
Point point2
in r.points)
2406 foreach (
Point point3
in r.points)
2413 if (zone_Field !=
null)
2418 for (
int l = 0; l < num4; l++)
2462 for (
int i = 0; i < 3 +
EClass.
rnd(4); i++)
2475 if (r.points.Count <= 4)
2480 List<Point> points = r.points;
2482 "altarPoint".lang(randomReligion.NameDomain.lang());
2487 for (
int i = 0; i < 2 +
EClass.
rnd(2); i++)
2492 if (points[0].Installed ==
null)
2498 if (
item.x % 3 == 0 &&
item.z % 2 == 0 &&
item != points[0] && !
item.Equals(points[0].Front) &&
item.Installed ==
null)
2500 thing = ThingGen.Create(
"pillar1");
2501 EClass._zone.AddCard(thing, item).Install();
2504 item.SetFloor(3, 6);
2512 if (MakeEnemiesNeutral)
2519 chara.hostility = hostility2;
2523 if (PrespawnRate != 0f && !IsSkyLevel)
2525 for (
int i = 0; i < (int)((
float)MaxSpawn * PrespawnRate); i++)
2531 TryGenerateBigDaddy();
2532 TryGenerateEvolved();
2533 TryGenerateShrine();
2538 if (OreChance <= 0f)
2545 string group =
"ore";
2546 if (EClass.rnd(5) == 0)
2552 foreach (
Point point in r.points)
2554 if (point.sourceBlock.ContainsTag(
"ore"))
2556 map.SetObj(point.x, point.z, randomMaterial.id, b, 1, 0);
2565 if (!force && EvolvedChance <=
EClass.
rndf(1f))
2570 for (
int i = 0; i < 2 +
EClass.
rnd(2); i++)
2586 int num = DangerLv * 125 / 100;
2596 Msg.
Say(
"sign_bigdaddy");
2602 for (
int i = 0; i < 3; i++)
2610 if (randomSpace ==
null)
2642 chara.c_originalHostility = (
Hostility)0;
2659 for (
int i = 0; i < tries; i++)
2691 if (setting ==
null)
2697 pos = GetSpawnPos(setting.position, setting.tries);
2708 if (IsUnderwater &&
EClass.
rnd(15) != 0)
2717 if (s.hostility !=
"")
2721 return s.biome == biome.name || s.biome.IsEmpty();
2724 int num = ((setting.dangerLv == -1) ? DangerLv : setting.dangerLv);
2728 idEle = setting.idEle
2730 int num2 = ((setting.filterLv == -1) ? num : setting.filterLv);
2733 num2 = ((num - 1) % 50 + 5) * 150 / 100;
2734 if (num2 >= 20 &&
EClass.
rnd(100) < num2)
2740 int num3 = ((setting.fixedLv == -1) ? cardRow.
LV : setting.fixedLv);
2743 num3 = (50 + cardRow.
LV) * Mathf.Max(1, (num - 1) / 50);
2745 num3 += DangerLvBoost;
2746 if (setting.rarity ==
Rarity.Random)
2750 cardBlueprint.rarity =
Rarity.Legendary;
2751 num3 = num3 * 125 / 100;
2756 cardBlueprint.rarity = setting.rarity;
2760 num3 = num3 * 150 / 100;
2762 if (setting.isEvolved)
2764 num3 = num3 * 2 + 20;
2766 if (num3 != cardRow.
LV)
2768 cardBlueprint.lv = num3;
2772 AddCard(chara, pos);
2773 if (setting.forcedHostility.HasValue)
2775 Hostility c_originalHostility = (chara.hostility = setting.forcedHostility.Value);
2776 chara.c_originalHostility = c_originalHostility;
2782 if (setting.isEvolved)
2784 chara.c_bossType =
BossType.Evolved;
2791 dirtyElectricity =
false;
2792 bool flag = GetSoilCost() > MaxSoil;
2793 base.electricity = elements.
Value(2201) * 10 + BaseElectricity;
2807 base.electricity += 20;
2822 bool flag = GetSoilCost() > MaxSoil;
2844 sum += elements.
Value(2201) * 10 + BaseElectricity;
2859 public void SetBGM(List<int> ids,
bool refresh =
true)
2864 foreach (
int id in ids)
2872 UnityEngine.Object.DestroyImmediate(map.
plDay);
2882 public void SetBGM(
int id = -1,
bool refresh =
true)
2884 SetBGM(
new List<int> {
id }, refresh);
2889 if (map.
plDay ==
null)
2891 map.plDay = CreatePlaylist(ref map.
_plDay,
EClass.
Sound.GetPlaylist(IDPlayList));
2902 Playlist playlist = map.
plDay;
2905 if (
item.playlist !=
null)
2907 playlist =
item.playlist;
2910 if (IDPlaylistOverwrite !=
null)
2912 playlist =
EClass.
Sound.GetPlaylist(IDPlaylistOverwrite);
2917 if (room !=
null && room.
lot !=
null && room.
lot.
idBGM != 0)
2920 if (playlist.list[0].data?.id != room.
lot.
idBGM)
2937 Playlist playlist =
EClass.
Sound.plBlank.Instantiate();
2938 if (list.Count == 0 && (
bool)mold)
2940 list = mold.ToInts();
2941 playlist.shuffle = mold.shuffle;
2942 playlist.minSwitchTime = mold.minSwitchTime;
2943 playlist.nextBGMOnSwitch = mold.nextBGMOnSwitch;
2944 playlist.ignoreLoop = mold.ignoreLoop;
2945 playlist.keepBGMifSamePlaylist = mold.keepBGMifSamePlaylist;
2946 playlist.name = mold.name;
2948 foreach (
int item in list)
2950 playlist.list.Add(
new Playlist.Item
2952 data = EClass.core.refs.dictBGM[item]
2971 return GetDeepestLv(ref max);
2976 if (Mathf.Abs(base.lv) > Mathf.Abs(max))
2980 foreach (
Spatial child
in children)
2982 (child as
Zone).GetDeepestLv(ref max);
2989 if (landFeats ==
null)
2991 landFeats =
new List<int>();
2993 string[] listBase = IDBaseLandFeat.Split(
',');
2994 string[] array = listBase;
2995 foreach (
string text
in array)
2997 if (!text.IsEmpty())
3002 if (listBase.Length == 1)
3006 if (e.category !=
"landfeat" || e.chance == 0)
3011 string[] tag = e.tag;
3012 foreach (
string text2 in tag)
3014 if (text2.StartsWith(
"bf"))
3017 if (listBase[0] == text2)
3024 return flag ? true :
false;
3027 landFeats.Add(row.
id);
3030 landFeats.Add(row.
id);
3034 List<Element> list2 =
new List<Element>();
3035 foreach (
int landFeat
in landFeats)
3044 ZipFile zipFile = ZipFile.Read(path);
3045 zipFile.ExtractExistingFile = ExtractExistingFileAction.OverwriteSilently;
3046 zipFile.ExtractAll(pathTemp);
3065 IO.CreateTempDirectory();
3070 map.
Save(IO.TempPath +
"/", zoneExportData, partial);
3071 map.
ExportMetaData(IO.TempPath +
"/", Path.GetFileNameWithoutExtension(path), partial);
3072 if (partial ==
null)
3074 IO.CopyDir(base.pathSave +
"Texture Replace", IO.TempPath +
"/Texture Replace");
3076 IO.SaveFile(IO.TempPath +
"/export", zoneExportData, compress:
true);
3077 using (ZipFile zipFile =
new ZipFile())
3079 zipFile.ExtractExistingFile = ExtractExistingFileAction.OverwriteSilently;
3080 zipFile.AddDirectory(IO.TempPath);
3084 IO.DeleteTempDirectory();
3086 catch (Exception ex)
3088 EClass.
ui.Say(ex.Message +
":" + path);
3097 if (!
string.IsNullOrEmpty(text))
3110 if (array.Length != 0)
3112 Zone_User zone_User = SpatialGen.Create(
"user", EClass.world.region, register: true) as Zone_User;
3113 zone_User.path = array[0];
3114 Thing thing = ThingGen.Create(
"teleporter");
3115 thing.c_uidZone = zone_User.uid;
3116 EClass._zone.AddCard(thing, EClass.pc.pos);
3127 catch (Exception ex)
3137 string text = pathExport;
3140 Msg.
Say(
"Exported Map:" + text);
3155 return -100000 + base.uid;
3159 return -90000 + base.uid;
3179 AddCard(chara, point);
3180 Msg.
Say(
"guestArrive", chara);
3187 AddCard(chara, point);
3195 if (base.IsPlayerFaction)
3215 foreach (
Thing sucker
in Suckers)
3220 if (RespawnRate != 0f)
3230 if (num < MaxRespawn)
3232 for (
int i = 0; i < RespawnPerHour; i++)
3238 if (!date.IsRealTime &&
EClass.
rnd(24) == 0)
3250 if (base.IsPlayerFaction)
3258 if (base.IsPlayerFaction)
3297 HashSet<int> hashSet =
new HashSet<int>();
3304 foreach (
Point item in traitSpotFarm.ListPoints(
null, onlyPassable:
false))
3306 hashSet.Add(
item.index);
3310 EClass.player.isAutoFarming =
false;
3317 void Perform(HashSet<int> farmMap)
3322 if (farmMap !=
null)
3326 if (!farmMap.Contains(c.index))
3331 else if (farmMap.Contains(c.
index))
3345 if (!EClass.player.isAutoFarming && c.growth.HaltGrowth() && (c.IsFarmField || c.IsTopWater) && (!isWinter || !date.IsRealTime))
3350 if (!flag && (plantData ==
null || plantData.fert >= 0))
3356 if (date.sunMap == null)
3366 else if (c.
detail !=
null)
3368 c.Things.ForeachReverse(delegate(Thing t)
3370 if (t.IsInstalled && t.trait is TraitSeed && !t.isSale)
3372 (t.trait as TraitSeed).TrySprout(force: false, sucker: false, date);
3385 c.isWatered =
false;
3394 foreach (
Spatial child
in children)
3396 if (!(child is
Zone_Field) && _x == child.
x && _y == child.
y)
3398 return child as
Zone;
3402 foreach (
Spatial child2
in children)
3404 if (_x == child2.
x && _y == child2.
y)
3406 return child2 as
Zone;
3423 bool flag = EClass.player.IsCriminal && HasLaw && !AllowCriminal && !IsPCFaction;
3429 chara.hostility = hostility;
3444 dictCitizen.Clear();
3447 if (
item.trait.IsCitizen && !
item.IsGlobal && !
item.isSubsetCard)
3456 base.influence += a;
3459 Msg.
Say(
"gainInfluence", Name, a.ToString() ??
"");
3466 base.development += a;
3469 Msg.
Say(
"gainDevelopment", Name, a.ToString() ??
"");
3475 if (!IsPCFaction && (!(
this is
Zone_Town) || base.lv != 0))
3479 Debug.Log(
"Updating Quest:" + force);
3486 if (
item.quest.IsExpired || completedQuests.Contains(
item.quest.uid) || force)
3504 maxQuest = 4 + EClass.rnd(4);
3506 completedQuests.Clear();
3508 List<Tuple<string, int>> listTag =
new List<Tuple<string, int>>();
3512 array =
new string[9] {
"supply/8",
"deliver/7",
"food/8",
"escort/4",
"deliver/4",
"monster/0",
"war/0",
"farm/0",
"music/0" };
3514 string[] array2 = array;
3515 for (
int i = 0; i < array2.Length; i++)
3517 string[] array3 = array2[i].Split(
'/');
3518 listTag.Add(
new Tuple<string, int>(array3[0], array3[1].ToInt()));
3520 for (
int j = 0; j < map.charas.Count * 2; j++)
3538 foreach (Tuple<string, int> item2
in listTag)
3540 if (a.tags.Contains(item2.Item1))
3550 return a.chance * num2;
3562 List<Chara> list =
new List<Chara>();
3598 for (
int i = 0; i < 2 +
EClass.
rnd(4); i++)
3600 Point point = GetPos();
3608 thing.isLostProperty =
true;
3610 int num2 = (thing.c_lockLv =
EClass.
rndHalf(Mathf.Min(base.development / 10 + 10, 50)));
3627 static Point GetPos()
3629 for (
int j = 0; j < 10; j++)
3643 bool flag =
this is
Zone_Yowyn && base.lv == -1;
3650 if (EClass.player.doneBackers.Contains(a.id))
3668 if (chara.
id !=
"follower")
3673 if ((flag && chara.
race.id !=
"cat") ||
EClass.
rnd((!flag) ? (draw ? 3 : 10) : (draw ? 1 : 2)) != 0)
3679 if (
item.chara == chara.
id)
3691 if (fortuneRoll ==
null)
3696 if (refresh || fortuneRoll.
count == 0)
if(item3.idFile==idFirstFile &&item3.id==idFirstTopic)
virtual void OnSimulatePosition()
void SimulateZone(int days)
void Add(Act a, string s="")
virtual bool IsHostileAct
BaseArea.AccessType accessType
void WaitForEndOfFrame(Action action)
string GetRandomCharaId()
void Populate(Point point, bool interior=false, float mtpDensity=1f)
static void Set(CardBlueprint _bp)
GlobalCharaList globalCharas
List< Chara > ListGlobalChara(Zone z)
override void OnLeaveScreen()
virtual void OnSimulateHour(VirtualDate date)
void SetPlaceState(PlaceState newState, bool byPlayer=false)
SourceBacker.Row sourceBacker
SoundSource PlaySound(string id, float v=1f, bool spatial=true)
Card ChangeMaterial(int idNew, bool ignoreFixedMaterial=false)
virtual void HealHP(int a, HealSource origin=HealSource.None)
Thing AddThing(string id, int lv=-1)
void AddEditorTag(EditorTag tag)
void DecayNatural(int hour=1)
Window.SaveData GetWindowSaveData()
bool HasEditorTag(EditorTag tag)
bool TryStackTo(Thing to)
void ApplyBacker(int bid)
Thing Add(string id, int num=1, int lv=1)
SourceCategory.Row category
void Say(string lang, string ref1=null, string ref2=null)
static Chara CreateFromFilter(string id, int lv=-1, int levelRange=-1)
static Chara Create(string id, int lv=-1)
Hostility OriginalHostility
bool HasCondition(string alias)
override bool IsPCFaction
void TryRestock(bool onCreate)
void Revive(Point p=null, bool msg=false)
Thing MakeGene(DNA.Type? type=null)
Chara SetEnemy(Chara c=null)
void Cure(CureType type, int p=100, BlessedState state=BlessedState.Normal)
void MoveZone(string alias)
bool ignoreBackerDestoryFlag
Dictionary< int, BGMData > dictBGM
static Crawler Create(string id)
bool CrawlUntil(Map map, Func< Point > onStart, int tries, Func< Result, bool > canComplete, Action onFail=null)
int GetElapsedHour(int rawDate)
int GetRaw(int offsetHours=0)
int GetElapsedMins(int rawDate)
int GetRemainingHours(int rawDeadLine)
static int curve(int a, int start, int step, int rate=75)
static SourceManager sources
static float rndf(float a)
static FactionBranch Branch
static int rndHalf(int a)
static SoundManager Sound
static GameSetting setting
static Effect Get(Effect original)
void Play(float delay, Point from, float fixY=0f, Point to=null, Sprite sprite=null)
static Element Create(int id, int v=0)
void Initialize(EloMap _elomap)
void SetZone(int gx, int gy, Zone z, bool updateMesh=false)
TileInfo GetTileInfo(int gx, int gy)
void OnSimulateMonth(VirtualDate date)
void OnSimulateDay(VirtualDate date)
void OnSimulateHour(VirtualDate date)
string Log(string idLang, string ref1=null, string ref2=null, string ref3=null, string ref4=null)
ElementContainerZone elements
List< GodStatueData > godStatues
ReligionManager religions
ZoneTransition transition
void SetStage(int idx, bool renewHarvest=false)
virtual bool NeedSunlight
bool CanGrow(VirtualDate date)
void RefreshDevelopment()
static Guild GetCurrentGuild()
static string[] GetList(string id)
static SourceMaterial.Row GetRandomMaterial(int lv, string group=null, bool tryLevelMatTier=false)
Point GetLeftPos(float rate=-1f)
void ForeachCell(Action< Cell > action)
Point GetBottomPos(float rate=-1f)
Point GetRandomSurface(int x, int z, int radius, bool walkable=true, bool allowWater=false)
Point GetTopPos(float rate=-1f)
Point GetRandomSpace(int width, int height, int tries=100)
Point GetRightPos(float rate=-1f)
static MapSubset Load(string id)
new void ForeachCell(Action< Cell > action)
PlantData TryGetPlant(Point p)
void ExportMetaData(string _path, string id, PartialMap partial=null)
Chara FindChara(string id)
IEnumerable< Card > Cards
Point GetRandomPoint(Point center, int radius, int tries=100, bool mustBeWalkable=true, bool requireLos=true)
void Save(string path, ZoneExportData export=null, PartialMap partial=null)
void AddCardOnActivate(Card c)
void OnCardRemovedFromZone(Card t)
byte[] TryLoadFile(string path, string s, int size)
Dictionary< int, int > backerObjs
void SetFloor(int x, int z, int idMat=0, int idFloor=0)
PlantData AddPlant(Point pos, Thing seed)
void OnImport(ZoneExportData data)
List< Chara > serializedCharas
static MapMetaData GetMetaData(string pathZip)
void OnCardAddedToZone(Card t, int x, int z)
void Load(string path, bool import=false, PartialMap partial=null)
void RevealAll(bool reveal=true)
void SetObj(int x, int z, int id=0, int value=1, int dir=0)
static string SayRaw(string text)
static string Say(string idLang, string ref1, string ref2=null, string ref3=null, string ref4=null)
Cell GetCenterCell(int radius=1)
void OccyupyPOI(Point p, int radius=0)
static PathManager Instance
bool IsPathClear(Point origin, Point dest, IPathfindWalker walker, int radius)
HashSet< int > doneBackers
void SetObj(int id=0, int value=1, int dir=0)
override string ToString()
Point Set(int _x, int _z)
Point GetNearestPoint(bool allowBlock=false, bool allowChara=true, bool allowInstalled=true, bool ignoreCenter=false, int minRadius=0)
bool Equals(int _x, int _z)
Point Clamp(bool useBounds=false)
Thing FindThing(Func< Thing, bool > func)
Point GetRandomPoint(int radius, bool requireLos=true, bool allowChara=true, bool allowBlocked=false, int tries=100)
bool IsActive(int id, int days=-1)
static List< Zone > ListDeliver()
static Quest Create(string _id, string _idPerson=null, Chara c=null)
static int Range(int min, int max)
static void InitBytes(int a)
static void UseSeed(int seed, Action action)
static void SetSeed(int a=-1)
Dictionary< string, Religion > dictAll
Religion GetRandomReligion(bool onlyJoinable=true, bool includeMinor=false)
static string[] OpenFilePanel(string title, string directory, string extension, bool multiselect)
static string SaveFilePanel(string title, string directory, string defaultName, string extension)
static SceneProfile Load(string id)
void RemoveActorEx(Card c)
Dictionary< string, CardRow > map
SourceZoneAffix zoneAffixes
virtual int DangerLvBoost
static SpawnList Get(string id, Func< SourceChara.Row, bool > func)
static SpawnList Get(string id, string parent=null, CardFilter filter=null)
static SpawnSetting Default
static SpawnSetting Fish()
static SpawnSetting Evolved(int fixedLv=-1)
void ApplyLocalReplace(string path)
List< Thing > List(Func< Thing, bool > func, bool onlyAccessible=false)
void DestroyAll(Func< Thing, bool > funcExclude=null)
Thing CanStack(Thing target, int destInvX=-1, int destInvY=-1)
static Thing CreateFromCategory(string idCat, int lv=-1)
static Thing Create(string id, int idMat=-1, int lv=-1)
override string GetName(NameStyle style, int _num=-1)
virtual bool CanGiveRandomQuest
virtual bool CanAutoRevive
TraitSet GetTraitSet(Type t)
virtual bool IsFor(Zone z)
static bool CanTagSale(Card t, bool insideContainer=false)
static Thing MakeSeed(SourceObj.Row obj, PlantData plant=null)
static void LevelSeed(Thing t, SourceObj.Row obj, int num)
virtual List< Point > ListPoints(Point center=null, bool onlyPassable=true)
Point GetRandomPoint(Func< Point, bool > func=null, Chara accessChara=null)
virtual ShopType ShopType
string GetParam(int i, string def=null)
static void Reserve(string idStep, Action onBeforePlay=null)
FilterResult IsFilterPass(string text)
void GenerateMap(Zone zone)
EloMap.TileInfo[,] surrounding
List< ZonePreEnterEvent > listPreEnter
virtual void OnGenerateMap()
virtual bool ShowEnemyOnMinimap
static ZoneProfile Load(string id)
void SetBGM(int id=-1, bool refresh=true)
virtual string GetNewZoneID(int level)
void OnChildNumChange(Card c)
virtual bool CanDigUnderground
virtual int BaseElectricity
virtual string IDPlayList
Dictionary< int, string > dictCitizen
void SetBGM(List< int > ids, bool refresh=true)
override string ToString()
List< Chara > ListMinions(Chara c)
void RefreshElectricity()
ZoneExportData Import(string path)
virtual string IDBaseLandFeat
virtual string GetDungenID()
virtual bool BlockBorderExit
static string forceSubset
virtual float PrespawnRate
FortuneRollData GetOrCreateFortuneRollData(bool refresh=true)
virtual bool RegenerateOnEnter
virtual void OnAfterSimulate()
void OnSimulateDay(VirtualDate date)
Playlist CreatePlaylist(ref List< int > list, Playlist mold=null)
static bool IsImportValid(string path)
virtual string IDGenerator
int CountMinions(Chara c)
virtual bool MakeTownProperties
Thing TryGetThingFromSharedContainer(Func< Thing, bool > func)
void WriteNote(UINote n, Action< UINote > onWriteNote=null, IInspect.NoteMode mode=IInspect.NoteMode.Default, Recipe recipe=null)
virtual void OnRegenerate()
virtual bool CountDeepestLevel
virtual ZoneScaleType ScaleType
virtual string pathExport
virtual void OnBeforeDeactivate()
virtual ZoneTransition.EnterState RegionEnterState
virtual bool ShouldAutoRevive
HashSet< int > completedQuests
virtual bool DisableRooms
Chara TryGenerateEvolved(bool force=false, Point p=null)
void ImportDialog(string dir=null)
void ClaimZone(bool debug=false, Point pos=null)
Chara AddChara(string id, int x, int z)
Card AddThing(string id, int x, int z)
virtual bool ShouldScaleImportedChara(Chara c)
ElementContainerZone elements
virtual bool IsReturnLocation
Chara AddRandomVisitor(bool guest=false)
void ExportDialog(string dir=null)
virtual void OnBeforeSimulate()
int GetElectricity(bool cost=false)
virtual FlockController.SpawnType FlockType
Chara SpawnMob(Point pos=null, SpawnSetting setting=null)
virtual bool CanUnlockExit
int GetDeepestLv(ref int max)
virtual int RespawnPerHour
virtual float RespawnRate
void ApplyBackerPet(bool draw)
bool CanEnterBuildModeAnywhere
Card AddCardSplinkle(Card t, Point center, int radius=4)
override string NameSuffix
virtual string TextWidgetDate
void AddGlobalCharasOnActivate()
void OnSimulateMonth(VirtualDate date)
virtual float ChanceSpawnNeutral
virtual string IDSceneTemplate
virtual bool CanBeDeliverDestination
void ClearZones(Zone current=null)
bool TryAddThingInSharedContainer(Thing t, List< Thing > containers=null, bool add=true, bool msg=false, Chara chara=null, bool sharedOnly=true)
virtual void OnDeactivate()
virtual ActionMode DefaultActionMode
virtual void OnActivate()
Card AddCard(Card t, int x, int z)
void OnSimulateHour(VirtualDate date)
override void _OnBeforeSave()
override void OnAfterCreate()
static List< Thing > Suckers
Card AddThing(string id, Point p)
virtual string IDAmbience
virtual string IDPlaylistOverwrite
Point GetSpawnPos(SpawnPosition type, int tries=100)
bool TryAddThing(Thing target, Point p, bool destroyIfFail=false)
void GrowPlants(VirtualDate date)
Chara FindChara(string id)
virtual bool ShouldMakeExit
virtual bool AllowCriminal
virtual bool AlwaysLowblock
virtual bool AllowNewZone
virtual bool RestrictBuild
virtual void OnGenerateRooms(BaseMapGen gen)
Point GetRandomVisitPos(Chara c)
virtual void OnGenerateMap()
List< Element > ListLandFeats()
static bool forceRegenerate
virtual bool MakeEnemiesNeutral
virtual bool IsUnderwater
virtual void OnCreateBP()
void Export(string path, PartialMap partial=null, bool usermap=false)
virtual bool ShouldRegenerate
virtual float BigDaddyChance
void TryGenerateBigDaddy()
virtual float EvolvedChance
static bool ignoreSpawnAnime
virtual void OnAdvanceHour()
FortuneRollData fortuneRoll
void ModDevelopment(int a)
virtual bool WillAutoSave
virtual bool IsExplorable
void UpdateQuests(bool force=false)
virtual bool KeepAllyDistance
virtual bool HiddenInRegionMap
bool IsCrime(Chara c, Act act)
void RefreshListCitizen()
Zone GetZoneAt(int _x, int _y)
Card AddCard(Card t, Point point)
string TextLevel(int _lv)
virtual ZoneFeatureType FeatureType
virtual float ShrineChance
Point GetSpawnPos(Chara c, ZoneTransition.EnterState destState=ZoneTransition.EnterState.Auto)
virtual void OnVisitNewMapOrRegenerate()