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();
537 return base.source.id;
551 return " " +
"zoneLevelB".lang((_lv * -1).
ToString() ??
"");
553 return " " +
"zoneLevel".lang((_lv + 1).
ToString() ??
"");
587 EClass.game.config.reverseSnow =
false;
594 EClass.pc.global.transition.uidLastZone = 0;
602 EClass.game.activeZone =
this;
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"))
607 Debug.Log(
"(Bug) File does not exist:" +
destryoed +
"/" + base.pathSave);
608 base.isGenerated =
false;
613 if (flag2 &&
map !=
null)
620 Debug.Log(
"generating random map");
643 Debug.Log(
"zone is already loaded");
657 Debug.Log(base.isGenerated +
"/" + flag3 +
"/" + flag2 +
"/" +
IDSubset);
658 if (!base.isGenerated || flag3 || flag2)
665 IO.DeleteDirectory(
pathTemp +
"Texture Replace");
671 base.isGenerated =
true;
675 zoneExportData.orgMap =
GameIO.LoadFile<
Map>(base.pathSave +
"map");
678 catch (Exception message)
682 base.isGenerated =
true;
687 Debug.Log(
"loading map: imported? " +
isImported +
" regenerate? " + flag3);
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");
709 if (zoneExportData.
orgMap !=
null)
713 map.charas = orgMap.
charas;
723 map.
cells[i, j].
isSeen = array[i * EClass._map.Size + j].GetBit(1);
729 Debug.Log(
"Importing New Chara:" +
item.id +
"/" +
item.Name +
"/" +
item.orgPos);
736 foreach (Thing thing in orgMap.things)
738 if (t.id == thing.id && t.pos.Equals(thing.pos))
740 if (t.trait is TraitNewZone)
743 map.things.Insert(0, thing);
744 thing.stackOrder = 0;
748 t.ChangeMaterial(thing.material);
758 foreach (Thing thing2 in orgMap.things)
760 if (thing2.trait is TraitNewZone && t.pos.Equals(thing2.pos))
763 map.things.Add(thing2);
769 if (t.id ==
"medal" || t.id ==
"856")
771 foreach (Thing thing3 in orgMap.things)
773 if (t.id == thing3.id && t.pos.Equals(thing3.pos))
802 thing4.isSubsetCard =
false;
822 if (isImported && IsTown)
824 RefreshListCitizen();
827 AddGlobalCharasOnActivate();
831 foreach (
Card item3
in map.
Cards.ToList())
841 idCurrentSubset = forceSubset ?? IDSubset;
842 if (idCurrentSubset !=
null)
850 if (MakeTownProperties)
861 thing7.isNPCProperty =
false;
865 if (instance !=
null)
870 if (isImported && !flag3 && !RevealRoom)
880 point2.cell.isSeen =
false;
889 PathManager.Instance._pathfinder.PunishChangeDirection =
false;
891 if (flag && IsTown && base.lv == 0)
895 if (base.visitCount == 0)
903 map.effectManager.GetOrCreate(c.GetSharedPoint());
922 Map.isDirtySunMap =
true;
938 chara.dirtySpeed =
true;
943 if (
card.IsUnique && !
card.IsPCFaction && !
card.IsPCParty)
953 int @
int =
card.GetInt(55);
958 if (chara2.
uid == @
int)
962 chara.enemy = chara2;
964 chara.calmCheckTurn = 20 +
EClass.
rnd(30);
972 if (
card.c_uidMaster != 0 && chara.
master ==
null)
985 else if (
card.IsInstalled &&
card.trait is
TraitDoor traitDoor &&
card.pos.HasChara && !traitDoor.IsOpen())
987 traitDoor.ToggleDoor(sound:
false, refresh:
false);
991 forceRegenerate =
false;
1003 OnVisitNewMapOrRegenerate();
1008 EClass.player.uidLastTown = 0;
1010 else if (IsTown && base.lv == 0)
1012 EClass.player.uidLastTown = base.uid;
1016 RefreshElectricity();
1046 EClass.player.stats.deepest = DangerLv;
1067 isSimulating =
true;
1069 isSimulating =
false;
1086 if (ShouldAutoRevive)
1106 Point point = GetSpawnPos(value);
1153 if (
Boss !=
null && IsNefia)
1159 int num = Mathf.Clamp(MinsSinceLastActive, 1, 10000);
1170 chara2.mana.value = 0;
1174 chara2.stamina.value = 0;
1179 chara2.resistCon =
null;
1183 Msg.ignoreAll =
true;
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);
1188 Msg.ignoreAll =
false;
1192 Debug.Log(
"Last Active:" + base.lastActive);
1193 if (base.lastActive == 0 || HourSinceLastActive <= 1 || IsRegion)
1197 Debug.Log(Name +
" Simulate:" + HourSinceLastActive +
" hours");
1200 int num2 = HourSinceLastActive / 24;
1206 if (!
item.IsPCParty)
1208 item.OnSleep(200, num2);
1209 if (
item.conSleep !=
null)
1211 item.conSleep.Kill();
1217 if (
item.things.Count > 20)
1224 VirtualDate.current = virtualDate;
1225 for (
int i = 0; i < HourSinceLastActive; i++)
1237 VirtualDate.current =
null;
1243 foreach (
Chara item2
in list)
1251 if (item2.
id ==
"bee")
1255 if (num2 > 0 && item2.
IsGuest())
1265 item2.
SetAI(goalWork);
1268 (goalWork as
GoalWork).FindWork(item2);
1272 item2.
SetAI(goalWork);
1275 (goalWork as
GoalWork).FindWork(item2);
1285 List<Thing> list2 =
new List<Thing>();
1293 if (num4 >= list2.Count)
1297 for (
int j = num4; j < list2.Count; j++)
1299 if (
EClass.
rnd(200) <= HourSinceLastActive)
1302 AddCard(chara, list2.RandomItem().
pos);
1304 chara.c_originalHostility = c_originalHostility;
1314 bool flag = zone ==
null || zone.lv > base.
lv;
1320 if (GetZoneAt(topZone.
x, topZone.
y) !=
null)
1332 enterState = RegionEnterState;
1338 float rate = zoneTransition?.
ratePos ?? (-1f);
1347 if (nearestPoint !=
null && nearestPoint.
IsValid)
1349 return nearestPoint;
1359 return new Point(zoneTransition.
x, zoneTransition.
z);
1367 if (traitTeleporter !=
null)
1371 if (traitTeleporter !=
null && !zoneTransition.
idTele.IsEmpty() && zoneTransition.
idTele == traitTeleporter.
id.IsEmpty(traitTeleporter.
GetParam(3)))
1385 if (randomThing2 !=
null)
1405 if (randomThing !=
null)
1425 flag = base.lv <= 0;
1451 return new Point(zoneTransition.
x, zoneTransition.
z);
1453 return GetRandomVisitPos(c);
1467 if (thing5.
trait is
TraitNewZone { zone: not null } traitNewZone && zone !=
null && traitNewZone.
zone.
uid == zone.uid)
1469 if (c !=
null && enterState != 0)
1471 c.SetDir(traitNewZone.owner.dir);
1473 return traitNewZone.GetExitPos();
1478 if (thing6.
trait is
TraitNewZone traitNewZone2 && ((flag && traitNewZone2.IsUpstairs) || (!flag && traitNewZone2.IsDownstairs)))
1480 if (c !=
null && enterState != 0)
1482 c.SetDir(traitNewZone2.owner.dir);
1484 return traitNewZone2.GetExitPos();
1487 return GetRandomVisitPos(c);
1495 point = map.
rooms.
listRoom.RandomItem().points.RandomItem();
1497 if (point ==
null &&
EClass.
rnd(4) != 0)
1514 Point spawnPosPC =
null;
1517 spawnPosPC = GetSpawnPos(
EClass.
pc);
1519 if (spawnPosPC ==
null)
1547 c.isRestrained =
false;
1551 Point pos = (c.IsPC ? spawnPosPC : (c.IsPCParty ? spawnPosPC.GetNearestPoint(allowBlock:
false, allowChara:
false, allowInstalled:
true, ignoreCenter:
true) : GetSpawnPos(c)));
1556 pos.
Set(spawnPosPC);
1561 if (!spawnPosPC.ForeachNearestPoint(delegate(
Point p)
1569 }, allowBlock:
false, EClass.pc.party.members.Count >= 12, allowInstalled:
true, ignoreCenter:
true, EClass._zone.IsRegion ? 2 : 6))
1571 pos.
Set(spawnPosPC);
1576 c.global.transition =
null;
1584 Point nearestPoint = spawnPosPC.
GetNearestPoint(allowBlock:
false, allowChara:
false, allowInstalled:
true, ignoreCenter:
true);
1586 item.pos.Set(nearestPoint);
1595 if (!IsUserZone && !IsPCFaction && map !=
null)
1597 List<Thing> list =
new List<Thing>();
1609 if (
item.IsContainer)
1627 Msg.
Say(
"pick_valuable");
1628 foreach (
Thing item2
in list)
1630 Msg.
Say(
"pick_valuable2", item2);
1635 base.isPeace =
false;
1636 OnBeforeDeactivate();
1648 EClass.game.activeZone =
null;
1652 base.isGenerated =
false;
1654 if (forceRegenerate)
1683 Debug.Log(
"Unloaded Map:" +
this);
1697 base.dateExpire = 0;
1702 thing.isNPCProperty =
false;
1708 for (
int i = 0; i < 7; i++)
1749 SetMainFaction(
null);
1768 Zone topZone = GetTopZone();
1775 if (!base.isRandomSite && !(
this is
Zone_Field) && (topZone ==
null || topZone ==
this || topZone.
FindDeepestZone() ==
this))
1787 if (zone !=
null && zone.
GetTopZone() ==
this)
1799 Debug.Log(
"Deleting Zone:" +
this);
1805 else if (map !=
null)
1807 Debug.Log(
"Saving Zone:" +
this);
1808 map.
Save(base.pathSave);
1809 if (!base.isMapSaved)
1811 base.isMapSaved =
true;
1812 IO.DeleteDirectory(base.pathSave +
"Texture Replace");
1813 IO.CopyDir(pathTemp +
"Texture Replace", base.pathSave +
"/Texture Replace");
1833 children.ForeachReverse(delegate(
Spatial z)
1841 if (parent !=
null && parent.IsRegion && instance ==
null)
1847 base.isGenerated =
false;
1856 base.isGenerated =
false;
1857 Zone topZone = GetTopZone();
1858 if (topZone !=
this)
1863 children.ForeachReverse(delegate(
Spatial c)
1883 if (parent ==
null || parent.IsRegion)
1887 return parent as
Zone;
1893 for (
int i = 0; i < 1000; i++)
1899 return AddCard(t, point);
1902 return AddCard(t, center);
1917 return AddThing(
id, p.
x, p.
z);
1922 return AddCard(t, point.
x, point.
z);
1927 return AddCard(t, 0, 0);
1940 chara.currentZone =
this;
1950 ignoreSpawnAnime =
false;
1955 chara.hasSpawned =
true;
1969 t.Chara.currentZone =
null;
1981 public T GetRandomSpot<T>() where T :
Trait
1986 public bool TryAddThingInSpot<T>(
Thing t,
bool useContainer =
true) where T :
Trait
1989 if (randomThing ==
null)
1996 List<Thing> list =
new List<Thing>();
1999 foreach (
Card item2
in item.ListCards())
2003 list.Add(item2.
Thing);
2007 if (TryAddThingInSharedContainer(t, list, add:
true, msg:
false,
null, sharedOnly:
false))
2016 public List<Thing> TryListThingsInSpot<T>(Func<Thing, bool> func =
null) where T :
TraitSpot
2018 List<T> list =
new List<T>();
2019 List<Thing> list2 =
new List<Thing>();
2024 list.Add(thing.
trait as T);
2027 foreach (T
item in list)
2029 foreach (
Point item2
in item.ListPoints(
null, onlyPassable:
false))
2037 if (thing2.
things.Count == 0)
2039 if (IsValid(thing2))
2053 bool IsValid(
Thing t)
2055 if (func !=
null && !func(t))
2072 if (containers ==
null)
2076 if (SearchDest() !=
null)
2095 foreach (
Thing container
in containers)
2097 Thing thing = container;
2105 if (windowSaveData !=
null)
2125 foreach (
int cat
in windowSaveData.
cats)
2138 else if (windowSaveData.
flag.HasFlag(flag))
2143 priority = windowSaveData.
priority;
2177 if (num == 0 || !destroyIfFail)
2204 List<T> list =
new List<T>();
2209 list.Add(thing2.
trait as T);
2212 foreach (T
item in list)
2214 foreach (
Point item2
in item.ListPoints(
null, onlyPassable:
false))
2222 if (thing3.
things.Count == 0)
2224 if (IsValid(thing3, insideContainer:
false))
2239 bool IsValid(
Thing t,
bool insideContainer)
2251 string text = IdProfile;
2257 text = ((base.lv < 0) ?
"Underground" :
"Sky");
2259 else if (region !=
null)
2265 name =
Lang.
GetList(
"zone_" + text.Split(
'/')[1]).RandomItem();
2267 for (
int i = 0; i < 3; i++)
2269 for (
int j = 0; j < 3; j++)
2274 if (text ==
"Random/R_Shore")
2276 base.isBeach =
true;
2293 bp.genSetting.seed = base.Seed;
2303 base.isGenerated =
true;
2314 if (IdBiome ==
"Sand" || IdBiome ==
"Water" || IsUnderwater)
2316 int num = 1 +
EClass.
rnd((IdBiome ==
"Water") ? 3 : 2);
2317 for (
int i = 0; i < num; i++)
2322 Thing t =
ThingGen.
Create(
"pearl_oyster",
new string[3] {
"wood_birch",
"poplar",
"coralwood" }.RandomItem(), ContentLv);
2327 for (
int j = 0; j < num; j++)
2338 for (
int k = 0; k < 30 +
EClass.
rnd(30); k++)
2361 foreach (
Point point
in r.points)
2365 map.
SetObj(point.
x, point.
z, num6);
2379 foreach (
Point point2
in r.points)
2391 foreach (
Point point3
in r.points)
2398 if (zone_Field !=
null)
2403 for (
int l = 0; l < num4; l++)
2447 for (
int i = 0; i < 3 +
EClass.
rnd(4); i++)
2460 if (r.points.Count <= 4)
2465 List<Point> points = r.points;
2467 "altarPoint".lang(randomReligion.NameDomain.lang());
2472 for (
int i = 0; i < 2 +
EClass.
rnd(2); i++)
2477 if (points[0].Installed ==
null)
2483 if (
item.x % 3 == 0 &&
item.z % 2 == 0 &&
item != points[0] && !
item.Equals(points[0].Front) &&
item.Installed ==
null)
2485 thing = ThingGen.Create(
"pillar1");
2486 EClass._zone.AddCard(thing, item).Install();
2489 item.SetFloor(3, 6);
2497 if (MakeEnemiesNeutral)
2504 chara.hostility = hostility2;
2508 if (PrespawnRate != 0f && !IsSkyLevel)
2510 for (
int i = 0; i < (int)((
float)MaxSpawn * PrespawnRate); i++)
2516 TryGenerateBigDaddy();
2517 TryGenerateEvolved();
2518 TryGenerateShrine();
2523 if (OreChance <= 0f)
2530 string group =
"ore";
2531 if (EClass.rnd(5) == 0)
2537 foreach (
Point point in r.points)
2539 if (point.sourceBlock.ContainsTag(
"ore"))
2541 map.SetObj(point.x, point.z, randomMaterial.id, b, 1, 0);
2550 if (!force && EvolvedChance <=
EClass.
rndf(1f))
2555 for (
int i = 0; i < 2 +
EClass.
rnd(2); i++)
2571 int num = DangerLv * 125 / 100;
2581 Msg.
Say(
"sign_bigdaddy");
2587 for (
int i = 0; i < 3; i++)
2595 if (randomSpace ==
null)
2627 chara.c_originalHostility = (
Hostility)0;
2644 for (
int i = 0; i < tries; i++)
2657 if (setting ==
null)
2663 pos = GetSpawnPos(setting.position, setting.tries);
2674 if (IsUnderwater &&
EClass.
rnd(15) != 0)
2683 if (s.hostility !=
"")
2687 return s.biome == biome.name || s.biome.IsEmpty();
2690 int dangerLv = DangerLv;
2694 idEle = setting.idEle
2696 int num = ((setting.filterLv == -1) ? dangerLv : setting.filterLv);
2697 if (ScaleMonsterLevel)
2699 num = ((dangerLv - 1) % 50 + 5) * 150 / 100;
2702 int num2 = ((setting.fixedLv == -1) ? cardRow.
LV : setting.fixedLv);
2703 if (ScaleMonsterLevel)
2705 num2 = (50 + cardRow.
LV) * Mathf.Max(1, (dangerLv - 1) / 50);
2707 if (setting.rarity ==
Rarity.Random)
2711 cardBlueprint.rarity =
Rarity.Legendary;
2712 num2 = num2 * 125 / 100;
2717 cardBlueprint.rarity = setting.rarity;
2721 num2 = num2 * 150 / 100;
2723 if (setting.isEvolved)
2725 num2 = num2 * 2 + 20;
2727 if (num2 != cardRow.
LV)
2729 cardBlueprint.lv = num2;
2733 AddCard(chara, pos);
2734 if (setting.forcedHostility.HasValue)
2736 Hostility c_originalHostility = (chara.hostility = setting.forcedHostility.Value);
2737 chara.c_originalHostility = c_originalHostility;
2743 if (setting.isEvolved)
2745 chara.c_bossType =
BossType.Evolved;
2752 dirtyElectricity =
false;
2753 bool flag = GetSoilCost() > MaxSoil;
2754 base.electricity = elements.
Value(2201) * 10 + BaseElectricity;
2768 base.electricity += 20;
2783 bool flag = GetSoilCost() > MaxSoil;
2805 sum += elements.
Value(2201) * 10 + BaseElectricity;
2820 public void SetBGM(List<int> ids,
bool refresh =
true)
2825 foreach (
int id in ids)
2833 UnityEngine.Object.DestroyImmediate(map.
plDay);
2843 public void SetBGM(
int id = -1,
bool refresh =
true)
2845 SetBGM(
new List<int> {
id }, refresh);
2850 if (map.
plDay ==
null)
2852 map.plDay = CreatePlaylist(ref map.
_plDay,
EClass.
Sound.GetPlaylist(IDPlayList));
2863 Playlist playlist = map.
plDay;
2866 if (
item.playlist !=
null)
2868 playlist =
item.playlist;
2871 if (IDPlaylistOverwrite !=
null)
2873 playlist =
EClass.
Sound.GetPlaylist(IDPlaylistOverwrite);
2878 if (room !=
null && room.
lot !=
null && room.
lot.
idBGM != 0)
2881 if (playlist.list[0].data?.id != room.
lot.
idBGM)
2898 Playlist playlist =
EClass.
Sound.plBlank.Instantiate();
2899 if (list.Count == 0 && (
bool)mold)
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;
2909 foreach (
int item in list)
2911 playlist.list.Add(
new Playlist.Item
2913 data = EClass.core.refs.dictBGM[item]
2932 return GetDeepestLv(ref max);
2937 if (Mathf.Abs(base.lv) > Mathf.Abs(max))
2941 foreach (
Spatial child
in children)
2943 (child as
Zone).GetDeepestLv(ref max);
2950 if (landFeats ==
null)
2952 landFeats =
new List<int>();
2954 string[] listBase = IDBaseLandFeat.Split(
',');
2955 string[] array = listBase;
2956 foreach (
string text
in array)
2958 if (!text.IsEmpty())
2963 if (listBase.Length == 1)
2967 if (e.category !=
"landfeat" || e.chance == 0)
2972 string[] tag = e.tag;
2973 foreach (
string text2 in tag)
2975 if (text2.StartsWith(
"bf"))
2978 if (listBase[0] == text2)
2985 return flag ? true :
false;
2988 landFeats.Add(row.
id);
2991 landFeats.Add(row.
id);
2995 List<Element> list2 =
new List<Element>();
2996 foreach (
int landFeat
in landFeats)
3005 ZipFile zipFile = ZipFile.Read(path);
3006 zipFile.ExtractExistingFile = ExtractExistingFileAction.OverwriteSilently;
3007 zipFile.ExtractAll(pathTemp);
3026 IO.CreateTempDirectory();
3031 map.
Save(IO.TempPath +
"/", zoneExportData, partial);
3032 map.
ExportMetaData(IO.TempPath +
"/", Path.GetFileNameWithoutExtension(path), partial);
3033 if (partial ==
null)
3035 IO.CopyDir(base.pathSave +
"Texture Replace", IO.TempPath +
"/Texture Replace");
3037 IO.SaveFile(IO.TempPath +
"/export", zoneExportData, compress:
true);
3038 using (ZipFile zipFile =
new ZipFile())
3040 zipFile.ExtractExistingFile = ExtractExistingFileAction.OverwriteSilently;
3041 zipFile.AddDirectory(IO.TempPath);
3045 IO.DeleteTempDirectory();
3047 catch (Exception ex)
3049 EClass.
ui.Say(ex.Message +
":" + path);
3058 if (!
string.IsNullOrEmpty(text))
3071 if (array.Length != 0)
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);
3088 catch (Exception ex)
3098 string text = pathExport;
3101 Msg.
Say(
"Exported Map:" + text);
3116 return -100000 + base.uid;
3120 return -90000 + base.uid;
3140 AddCard(chara, point);
3141 Msg.
Say(
"guestArrive", chara);
3148 AddCard(chara, point);
3156 if (base.IsPlayerFaction)
3176 foreach (
Thing sucker
in Suckers)
3181 if (RespawnRate != 0f)
3191 if (num < MaxRespawn)
3193 for (
int i = 0; i < RespawnPerHour; i++)
3199 if (!date.IsRealTime &&
EClass.
rnd(24) == 0)
3211 if (base.IsPlayerFaction)
3219 if (base.IsPlayerFaction)
3258 HashSet<int> hashSet =
new HashSet<int>();
3265 foreach (
Point item in traitSpotFarm.ListPoints(
null, onlyPassable:
false))
3267 hashSet.Add(
item.index);
3271 EClass.player.isAutoFarming =
false;
3278 void Perform(HashSet<int> farmMap)
3283 if (farmMap !=
null)
3287 if (!farmMap.Contains(c.index))
3292 else if (farmMap.Contains(c.
index))
3306 if (!EClass.player.isAutoFarming && c.growth.HaltGrowth() && (c.IsFarmField || c.IsTopWater) && (!isWinter || !date.IsRealTime))
3311 if (!flag && (plantData ==
null || plantData.fert >= 0))
3317 if (date.sunMap == null)
3327 else if (c.
detail !=
null)
3329 c.Things.ForeachReverse(delegate(Thing t)
3331 if (t.IsInstalled && t.trait is TraitSeed && !t.isSale)
3333 (t.trait as TraitSeed).TrySprout(force: false, sucker: false, date);
3346 c.isWatered =
false;
3355 foreach (
Spatial child
in children)
3357 if (!(child is
Zone_Field) && _x == child.
x && _y == child.
y)
3359 return child as
Zone;
3363 foreach (
Spatial child2
in children)
3365 if (_x == child2.
x && _y == child2.
y)
3367 return child2 as
Zone;
3384 bool flag = EClass.player.IsCriminal && HasLaw && !AllowCriminal && !IsPCFaction;
3390 chara.hostility = hostility;
3405 dictCitizen.Clear();
3408 if (
item.trait.IsCitizen && !
item.IsGlobal && !
item.isSubsetCard)
3417 base.influence += a;
3420 Msg.
Say(
"gainInfluence", Name, a.ToString() ??
"");
3427 base.development += a;
3430 Msg.
Say(
"gainDevelopment", Name, a.ToString() ??
"");
3436 if (!IsPCFaction && (!(
this is
Zone_Town) || base.lv != 0))
3440 Debug.Log(
"Updating Quest:" + force);
3447 if (
item.quest.IsExpired || completedQuests.Contains(
item.quest.uid) || force)
3465 maxQuest = 4 + EClass.rnd(4);
3467 completedQuests.Clear();
3469 List<Tuple<string, int>> listTag =
new List<Tuple<string, int>>();
3473 array =
new string[9] {
"supply/8",
"deliver/7",
"food/8",
"escort/4",
"deliver/4",
"monster/0",
"war/0",
"farm/0",
"music/0" };
3475 string[] array2 = array;
3476 for (
int i = 0; i < array2.Length; i++)
3478 string[] array3 = array2[i].Split(
'/');
3479 listTag.Add(
new Tuple<string, int>(array3[0], array3[1].ToInt()));
3481 for (
int j = 0; j < map.charas.Count * 2; j++)
3499 foreach (Tuple<string, int> item2
in listTag)
3501 if (a.tags.Contains(item2.Item1))
3511 return a.chance * num2;
3523 List<Chara> list =
new List<Chara>();
3559 for (
int i = 0; i < 2 +
EClass.
rnd(4); i++)
3561 Point point = GetPos();
3569 thing.isLostProperty =
true;
3571 int num2 = (thing.c_lockLv =
EClass.
rndHalf(Mathf.Min(base.development / 10 + 10, 50)));
3588 static Point GetPos()
3590 for (
int j = 0; j < 10; j++)
3604 bool flag =
this is
Zone_Yowyn && base.lv == -1;
3611 if (EClass.player.doneBackers.Contains(a.id))
3629 if (chara.
id !=
"follower")
3634 if ((flag && chara.
race.id !=
"cat") ||
EClass.
rnd((!flag) ? (draw ? 3 : 10) : (draw ? 1 : 2)) != 0)
3640 if (
item.chara == chara.
id)
3652 if (fortuneRoll ==
null)
3657 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
void WaitForEndOfFrame(Action action)
string GetRandomCharaId()
void Populate(Point point, bool interior=false)
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)
bool Equals(int _x, int _z)
Point Clamp(bool useBounds=false)
Thing FindThing(Func< Thing, bool > func)
Point GetNearestPoint(bool allowBlock=false, bool allowChara=true, bool allowInstalled=true, bool ignoreCenter=false)
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)
void RemoveActorEx(Card c)
Dictionary< string, CardRow > map
SourceZoneAffix zoneAffixes
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
Card AddChara(string id, int x, int z)
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 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)
Card AddThing(string id, int x, int z)
void ClaimZone(bool debug=false)
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()
virtual bool ScaleMonsterLevel
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()