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");
669 base.isGenerated =
true;
673 zoneExportData.orgMap =
GameIO.LoadFile<
Map>(base.pathSave +
"map");
677 Debug.Log(
"loading map: imported? " +
isImported +
" regenerate? " + flag3);
681 EClass.
ui.Say(
"System.IO.EndOfStreamException: Unexpected end of stream:" + Environment.NewLine +
"File may be corrupted. Try replacing the following file if you have a backup:" + Environment.NewLine + (
isImported ?
pathTemp : base.pathSave) +
"map");
699 if (zoneExportData.
orgMap !=
null)
703 map.charas = orgMap.
charas;
713 map.
cells[i, j].
isSeen = array[i * EClass._map.Size + j].GetBit(1);
719 Debug.Log(
"Importing New Chara:" +
item.id +
"/" +
item.Name +
"/" +
item.orgPos);
726 foreach (Thing thing in orgMap.things)
728 if (t.id == thing.id && t.pos.Equals(thing.pos))
730 if (t.trait is TraitNewZone)
733 map.things.Insert(0, thing);
734 thing.stackOrder = 0;
738 t.ChangeMaterial(thing.material);
748 foreach (Thing thing2 in orgMap.things)
750 if (thing2.trait is TraitNewZone && t.pos.Equals(thing2.pos))
753 map.things.Add(thing2);
759 if (t.id ==
"medal" || t.id ==
"856")
761 foreach (Thing thing3 in orgMap.things)
763 if (t.id == thing3.id && t.pos.Equals(thing3.pos))
792 thing4.isSubsetCard =
false;
812 if (isImported && IsTown)
814 RefreshListCitizen();
817 AddGlobalCharasOnActivate();
821 foreach (
Card item3
in map.
Cards.ToList())
831 idCurrentSubset = forceSubset ?? IDSubset;
832 if (idCurrentSubset !=
null)
840 if (MakeTownProperties)
851 thing7.isNPCProperty =
false;
855 if (instance !=
null)
860 if (isImported && !flag3 && !RevealRoom)
870 point2.cell.isSeen =
false;
879 PathManager.Instance._pathfinder.PunishChangeDirection =
false;
881 if (flag && IsTown && base.lv == 0)
885 if (base.visitCount == 0)
893 map.effectManager.GetOrCreate(c.GetSharedPoint());
912 Map.isDirtySunMap =
true;
928 chara.dirtySpeed =
true;
933 if (
card.IsUnique && !
card.IsPCFaction && !
card.IsPCParty)
943 int @
int =
card.GetInt(55);
948 if (chara2.
uid == @
int)
952 chara.enemy = chara2;
954 chara.calmCheckTurn = 20 +
EClass.
rnd(30);
962 if (
card.c_uidMaster != 0 && chara.
master ==
null)
975 else if (
card.IsInstalled &&
card.trait is
TraitDoor traitDoor &&
card.pos.HasChara && !traitDoor.IsOpen())
977 traitDoor.ToggleDoor(sound:
false, refresh:
false);
981 forceRegenerate =
false;
993 OnVisitNewMapOrRegenerate();
998 EClass.player.uidLastTown = 0;
1000 else if (IsTown && base.lv == 0)
1002 EClass.player.uidLastTown = base.uid;
1006 RefreshElectricity();
1036 EClass.player.stats.deepest = DangerLv;
1057 isSimulating =
true;
1059 isSimulating =
false;
1076 if (ShouldAutoRevive)
1096 Point point = GetSpawnPos(value);
1143 if (
Boss !=
null && IsNefia)
1149 int num = Mathf.Clamp(MinsSinceLastActive, 1, 10000);
1160 chara2.mana.value = 0;
1164 chara2.stamina.value = 0;
1169 chara2.resistCon =
null;
1173 Msg.ignoreAll =
true;
1175 chara2.
HealHP(Mathf.Max(1, chara2.
MaxHP) * Mathf.Min(num, 20) / 20);
1176 chara2.
mana.
Mod(Mathf.Max(1, chara2.
mana.
max) * Mathf.Min(num, 20) / 20);
1178 Msg.ignoreAll =
false;
1182 Debug.Log(
"Last Active:" + base.lastActive);
1183 if (base.lastActive == 0 || HourSinceLastActive <= 1 || IsRegion)
1187 Debug.Log(Name +
" Simulate:" + HourSinceLastActive +
" hours");
1190 int num2 = HourSinceLastActive / 24;
1196 if (!
item.IsPCParty)
1198 item.OnSleep(200, num2);
1199 if (
item.conSleep !=
null)
1201 item.conSleep.Kill();
1207 if (
item.things.Count > 20)
1214 VirtualDate.current = virtualDate;
1215 for (
int i = 0; i < HourSinceLastActive; i++)
1227 VirtualDate.current =
null;
1233 foreach (
Chara item2
in list)
1241 if (item2.
id ==
"bee")
1245 if (num2 > 0 && item2.
IsGuest())
1255 item2.
SetAI(goalWork);
1258 (goalWork as
GoalWork).FindWork(item2);
1262 item2.
SetAI(goalWork);
1265 (goalWork as
GoalWork).FindWork(item2);
1275 List<Thing> list2 =
new List<Thing>();
1283 if (num4 >= list2.Count)
1287 for (
int j = num4; j < list2.Count; j++)
1289 if (
EClass.
rnd(200) <= HourSinceLastActive)
1292 AddCard(chara, list2.RandomItem().
pos);
1294 chara.c_originalHostility = c_originalHostility;
1304 bool flag = zone ==
null || zone.lv > base.
lv;
1310 if (GetZoneAt(topZone.
x, topZone.
y) !=
null)
1322 enterState = RegionEnterState;
1328 float rate = zoneTransition?.
ratePos ?? (-1f);
1337 if (nearestPoint !=
null && nearestPoint.
IsValid)
1339 return nearestPoint;
1349 return new Point(zoneTransition.
x, zoneTransition.
z);
1357 if (traitTeleporter !=
null)
1361 if (traitTeleporter !=
null && !zoneTransition.
idTele.IsEmpty() && zoneTransition.
idTele == traitTeleporter.
id.IsEmpty(traitTeleporter.
GetParam(3)))
1375 if (randomThing2 !=
null)
1395 if (randomThing !=
null)
1415 flag = base.lv <= 0;
1441 return new Point(zoneTransition.
x, zoneTransition.
z);
1443 return GetRandomVisitPos(c);
1457 if (thing5.
trait is
TraitNewZone { zone: not null } traitNewZone && zone !=
null && traitNewZone.
zone.
uid == zone.uid)
1459 if (c !=
null && enterState != 0)
1461 c.SetDir(traitNewZone.owner.dir);
1463 return traitNewZone.GetExitPos();
1468 if (thing6.
trait is
TraitNewZone traitNewZone2 && ((flag && traitNewZone2.IsUpstairs) || (!flag && traitNewZone2.IsDownstairs)))
1470 if (c !=
null && enterState != 0)
1472 c.SetDir(traitNewZone2.owner.dir);
1474 return traitNewZone2.GetExitPos();
1477 return GetRandomVisitPos(c);
1485 point = map.
rooms.
listRoom.RandomItem().points.RandomItem();
1487 if (point ==
null &&
EClass.
rnd(4) != 0)
1504 Point spawnPosPC =
null;
1507 spawnPosPC = GetSpawnPos(
EClass.
pc);
1509 if (spawnPosPC ==
null)
1537 c.isRestrained =
false;
1541 Point pos = (c.IsPC ? spawnPosPC : (c.IsPCParty ? spawnPosPC.GetNearestPoint(allowBlock:
false, allowChara:
false, allowInstalled:
true, ignoreCenter:
true) : GetSpawnPos(c)));
1546 pos.
Set(spawnPosPC);
1551 if (!spawnPosPC.ForeachNearestPoint(delegate(
Point p)
1559 }, allowBlock:
false, EClass.pc.party.members.Count >= 12, allowInstalled:
true, ignoreCenter:
true, EClass._zone.IsRegion ? 2 : 6))
1561 pos.
Set(spawnPosPC);
1566 c.global.transition =
null;
1574 Point nearestPoint = spawnPosPC.
GetNearestPoint(allowBlock:
false, allowChara:
false, allowInstalled:
true, ignoreCenter:
true);
1576 item.pos.Set(nearestPoint);
1585 if (!IsUserZone && !IsPCFaction && map !=
null)
1587 List<Thing> list =
new List<Thing>();
1599 if (
item.IsContainer)
1617 Msg.
Say(
"pick_valuable");
1618 foreach (
Thing item2
in list)
1620 Msg.
Say(
"pick_valuable2", item2);
1625 base.isPeace =
false;
1626 OnBeforeDeactivate();
1638 EClass.game.activeZone =
null;
1642 base.isGenerated =
false;
1644 if (forceRegenerate)
1673 Debug.Log(
"Unloaded Map:" +
this);
1687 base.dateExpire = 0;
1692 thing.isNPCProperty =
false;
1698 for (
int i = 0; i < 7; i++)
1739 SetMainFaction(
null);
1758 Zone topZone = GetTopZone();
1765 if (!base.isRandomSite && !(
this is
Zone_Field) && (topZone ==
null || topZone ==
this || topZone.
FindDeepestZone() ==
this))
1777 if (zone !=
null && zone.
GetTopZone() ==
this)
1789 Debug.Log(
"Deleting Zone:" +
this);
1795 else if (map !=
null)
1797 Debug.Log(
"Saving Zone:" +
this);
1798 map.
Save(base.pathSave);
1799 if (!base.isMapSaved)
1801 base.isMapSaved =
true;
1802 IO.DeleteDirectory(base.pathSave +
"Texture Replace");
1803 IO.CopyDir(pathTemp +
"Texture Replace", base.pathSave +
"/Texture Replace");
1823 children.ForeachReverse(delegate(
Spatial z)
1831 if (parent !=
null && parent.IsRegion && instance ==
null)
1837 base.isGenerated =
false;
1846 base.isGenerated =
false;
1847 Zone topZone = GetTopZone();
1848 if (topZone !=
this)
1853 children.ForeachReverse(delegate(
Spatial c)
1873 if (parent ==
null || parent.IsRegion)
1877 return parent as
Zone;
1883 for (
int i = 0; i < 1000; i++)
1889 return AddCard(t, point);
1892 return AddCard(t, center);
1907 return AddThing(
id, p.
x, p.
z);
1912 return AddCard(t, point.
x, point.
z);
1917 return AddCard(t, 0, 0);
1930 chara.currentZone =
this;
1940 ignoreSpawnAnime =
false;
1945 chara.hasSpawned =
true;
1959 t.Chara.currentZone =
null;
1971 public T GetRandomSpot<T>() where T :
Trait
1976 public bool TryAddThingInSpot<T>(
Thing t,
bool useContainer =
true) where T :
Trait
1979 if (randomThing ==
null)
1986 List<Thing> list =
new List<Thing>();
1989 foreach (
Card item2
in item.ListCards())
1993 list.Add(item2.
Thing);
1997 if (TryAddThingInSharedContainer(t, list, add:
true, msg:
false,
null, sharedOnly:
false))
2006 public List<Thing> TryListThingsInSpot<T>(Func<Thing, bool> func =
null) where T :
TraitSpot
2008 List<T> list =
new List<T>();
2009 List<Thing> list2 =
new List<Thing>();
2014 list.Add(thing.
trait as T);
2017 foreach (T
item in list)
2019 foreach (
Point item2
in item.ListPoints(
null, onlyPassable:
false))
2027 if (thing2.
things.Count == 0)
2029 if (IsValid(thing2))
2043 bool IsValid(
Thing t)
2045 if (func !=
null && !func(t))
2062 if (containers ==
null)
2066 if (SearchDest() !=
null)
2085 foreach (
Thing container
in containers)
2087 Thing thing = container;
2095 if (windowSaveData !=
null)
2115 foreach (
int cat
in windowSaveData.
cats)
2128 else if (windowSaveData.
flag.HasFlag(flag))
2133 priority = windowSaveData.
priority;
2167 if (num == 0 || !destroyIfFail)
2194 List<T> list =
new List<T>();
2199 list.Add(thing2.
trait as T);
2202 foreach (T
item in list)
2204 foreach (
Point item2
in item.ListPoints(
null, onlyPassable:
false))
2212 if (thing3.
things.Count == 0)
2214 if (IsValid(thing3, insideContainer:
false))
2229 bool IsValid(
Thing t,
bool insideContainer)
2241 string text = IdProfile;
2247 text = ((base.lv < 0) ?
"Underground" :
"Sky");
2249 else if (region !=
null)
2255 name =
Lang.
GetList(
"zone_" + text.Split(
'/')[1]).RandomItem();
2257 for (
int i = 0; i < 3; i++)
2259 for (
int j = 0; j < 3; j++)
2264 if (text ==
"Random/R_Shore")
2266 base.isBeach =
true;
2283 bp.genSetting.seed = base.Seed;
2293 base.isGenerated =
true;
2304 if (IdBiome ==
"Sand" || IdBiome ==
"Water" || IsUnderwater)
2306 int num = 1 +
EClass.
rnd((IdBiome ==
"Water") ? 3 : 2);
2307 for (
int i = 0; i < num; i++)
2312 Thing t =
ThingGen.
Create(
"pearl_oyster",
new string[3] {
"wood_birch",
"poplar",
"coralwood" }.RandomItem(), ContentLv);
2317 for (
int j = 0; j < num; j++)
2328 for (
int k = 0; k < 30 +
EClass.
rnd(30); k++)
2351 foreach (
Point point
in r.points)
2355 map.
SetObj(point.
x, point.
z, num6);
2369 foreach (
Point point2
in r.points)
2381 foreach (
Point point3
in r.points)
2388 if (zone_Field !=
null)
2393 for (
int l = 0; l < num4; l++)
2437 for (
int i = 0; i < 3 +
EClass.
rnd(4); i++)
2450 if (r.points.Count <= 4)
2455 List<Point> points = r.points;
2457 "altarPoint".lang(randomReligion.NameDomain.lang());
2462 for (
int i = 0; i < 2 +
EClass.
rnd(2); i++)
2467 if (points[0].Installed ==
null)
2473 if (
item.x % 3 == 0 &&
item.z % 2 == 0 &&
item != points[0] && !
item.Equals(points[0].Front) &&
item.Installed ==
null)
2475 thing = ThingGen.Create(
"pillar1");
2476 EClass._zone.AddCard(thing, item).Install();
2479 item.SetFloor(3, 6);
2487 if (MakeEnemiesNeutral)
2494 chara.hostility = hostility2;
2498 if (PrespawnRate != 0f && !IsSkyLevel)
2500 for (
int i = 0; i < (int)((
float)MaxSpawn * PrespawnRate); i++)
2506 TryGenerateBigDaddy();
2507 TryGenerateEvolved();
2508 TryGenerateShrine();
2513 if (OreChance <= 0f)
2520 string group =
"ore";
2521 if (EClass.rnd(5) == 0)
2527 foreach (
Point point in r.points)
2529 if (point.sourceBlock.ContainsTag(
"ore"))
2531 map.SetObj(point.x, point.z, randomMaterial.id, b, 1, 0);
2540 if (!force && EvolvedChance <=
EClass.
rndf(1f))
2545 for (
int i = 0; i < 2 +
EClass.
rnd(2); i++)
2561 int num = DangerLv * 125 / 100;
2571 Msg.
Say(
"sign_bigdaddy");
2577 for (
int i = 0; i < 3; i++)
2585 if (randomSpace ==
null)
2617 chara.c_originalHostility = (
Hostility)0;
2634 for (
int i = 0; i < tries; i++)
2647 if (setting ==
null)
2653 pos = GetSpawnPos(setting.position, setting.tries);
2664 if (IsUnderwater &&
EClass.
rnd(15) != 0)
2673 if (s.hostility !=
"")
2677 return s.biome == biome.name || s.biome.IsEmpty();
2680 int dangerLv = DangerLv;
2684 idEle = setting.idEle
2686 int num = ((setting.filterLv == -1) ? dangerLv : setting.filterLv);
2687 if (ScaleMonsterLevel)
2689 num = ((dangerLv - 1) % 50 + 5) * 150 / 100;
2692 int num2 = ((setting.fixedLv == -1) ? cardRow.
LV : setting.fixedLv);
2693 if (ScaleMonsterLevel)
2695 num2 = (50 + cardRow.
LV) * Mathf.Max(1, (dangerLv - 1) / 50);
2697 if (setting.rarity ==
Rarity.Random)
2701 cardBlueprint.rarity =
Rarity.Legendary;
2702 num2 = num2 * 125 / 100;
2707 cardBlueprint.rarity = setting.rarity;
2711 num2 = num2 * 150 / 100;
2713 if (setting.isEvolved)
2715 num2 = num2 * 2 + 20;
2717 if (num2 != cardRow.
LV)
2719 cardBlueprint.lv = num2;
2723 AddCard(chara, pos);
2724 if (setting.forcedHostility.HasValue)
2726 Hostility c_originalHostility = (chara.hostility = setting.forcedHostility.Value);
2727 chara.c_originalHostility = c_originalHostility;
2733 if (setting.isEvolved)
2735 chara.c_bossType =
BossType.Evolved;
2742 dirtyElectricity =
false;
2743 bool flag = GetSoilCost() > MaxSoil;
2744 base.electricity = elements.
Value(2201) * 10 + BaseElectricity;
2758 base.electricity += 20;
2773 bool flag = GetSoilCost() > MaxSoil;
2795 sum += elements.
Value(2201) * 10 + BaseElectricity;
2810 public void SetBGM(List<int> ids,
bool refresh =
true)
2815 foreach (
int id in ids)
2823 UnityEngine.Object.DestroyImmediate(map.
plDay);
2833 public void SetBGM(
int id = -1,
bool refresh =
true)
2835 SetBGM(
new List<int> {
id }, refresh);
2840 if (map.
plDay ==
null)
2842 map.plDay = CreatePlaylist(ref map.
_plDay,
EClass.
Sound.GetPlaylist(IDPlayList));
2853 Playlist playlist = map.
plDay;
2856 if (
item.playlist !=
null)
2858 playlist =
item.playlist;
2861 if (IDPlaylistOverwrite !=
null)
2863 playlist =
EClass.
Sound.GetPlaylist(IDPlaylistOverwrite);
2868 if (room !=
null && room.
lot !=
null && room.
lot.
idBGM != 0)
2871 if (playlist.list[0].data?.id != room.
lot.
idBGM)
2888 Playlist playlist =
EClass.
Sound.plBlank.Instantiate();
2889 if (list.Count == 0 && (
bool)mold)
2891 list = mold.ToInts();
2892 playlist.shuffle = mold.shuffle;
2893 playlist.minSwitchTime = mold.minSwitchTime;
2894 playlist.nextBGMOnSwitch = mold.nextBGMOnSwitch;
2895 playlist.ignoreLoop = mold.ignoreLoop;
2896 playlist.keepBGMifSamePlaylist = mold.keepBGMifSamePlaylist;
2897 playlist.name = mold.name;
2899 foreach (
int item in list)
2901 playlist.list.Add(
new Playlist.Item
2903 data = EClass.core.refs.dictBGM[item]
2922 return GetDeepestLv(ref max);
2927 if (Mathf.Abs(base.lv) > Mathf.Abs(max))
2931 foreach (
Spatial child
in children)
2933 (child as
Zone).GetDeepestLv(ref max);
2940 if (landFeats ==
null)
2942 landFeats =
new List<int>();
2944 string[] listBase = IDBaseLandFeat.Split(
',');
2945 string[] array = listBase;
2946 foreach (
string text
in array)
2948 if (!text.IsEmpty())
2953 if (listBase.Length == 1)
2957 if (e.category !=
"landfeat" || e.chance == 0)
2962 string[] tag = e.tag;
2963 foreach (
string text2 in tag)
2965 if (text2.StartsWith(
"bf"))
2968 if (listBase[0] == text2)
2975 return flag ? true :
false;
2978 landFeats.Add(row.
id);
2981 landFeats.Add(row.
id);
2985 List<Element> list2 =
new List<Element>();
2986 foreach (
int landFeat
in landFeats)
2995 ZipFile zipFile = ZipFile.Read(path);
2996 zipFile.ExtractExistingFile = ExtractExistingFileAction.OverwriteSilently;
2997 zipFile.ExtractAll(pathTemp);
3016 IO.CreateTempDirectory();
3021 map.
Save(IO.TempPath +
"/", zoneExportData, partial);
3022 map.
ExportMetaData(IO.TempPath +
"/", Path.GetFileNameWithoutExtension(path), partial);
3023 if (partial ==
null)
3025 IO.CopyDir(base.pathSave +
"Texture Replace", IO.TempPath +
"/Texture Replace");
3027 IO.SaveFile(IO.TempPath +
"/export", zoneExportData, compress:
true);
3028 using (ZipFile zipFile =
new ZipFile())
3030 zipFile.ExtractExistingFile = ExtractExistingFileAction.OverwriteSilently;
3031 zipFile.AddDirectory(IO.TempPath);
3035 IO.DeleteTempDirectory();
3037 catch (Exception ex)
3039 EClass.
ui.Say(ex.Message +
":" + path);
3048 if (!
string.IsNullOrEmpty(text))
3061 if (array.Length != 0)
3063 Zone_User zone_User = SpatialGen.Create(
"user", EClass.world.region, register: true) as Zone_User;
3064 zone_User.path = array[0];
3065 Thing thing = ThingGen.Create(
"teleporter");
3066 thing.c_uidZone = zone_User.uid;
3067 EClass._zone.AddCard(thing, EClass.pc.pos);
3078 catch (Exception ex)
3088 string text = pathExport;
3091 Msg.
Say(
"Exported Map:" + text);
3106 return -100000 + base.uid;
3110 return -90000 + base.uid;
3130 AddCard(chara, point);
3131 Msg.
Say(
"guestArrive", chara);
3138 AddCard(chara, point);
3146 if (base.IsPlayerFaction)
3166 foreach (
Thing sucker
in Suckers)
3171 if (RespawnRate != 0f)
3181 if (num < MaxRespawn)
3183 for (
int i = 0; i < RespawnPerHour; i++)
3189 if (!date.IsRealTime &&
EClass.
rnd(24) == 0)
3201 if (base.IsPlayerFaction)
3209 if (base.IsPlayerFaction)
3248 HashSet<int> hashSet =
new HashSet<int>();
3255 foreach (
Point item in traitSpotFarm.ListPoints(
null, onlyPassable:
false))
3257 hashSet.Add(
item.index);
3261 EClass.player.isAutoFarming =
false;
3268 void Perform(HashSet<int> farmMap)
3273 if (farmMap !=
null)
3277 if (!farmMap.Contains(c.index))
3282 else if (farmMap.Contains(c.
index))
3296 if (!EClass.player.isAutoFarming && c.growth.HaltGrowth() && (c.IsFarmField || c.IsTopWater) && (!isWinter || !date.IsRealTime))
3301 if (!flag && (plantData ==
null || plantData.fert >= 0))
3307 if (date.sunMap == null)
3317 else if (c.
detail !=
null)
3319 c.Things.ForeachReverse(delegate(Thing t)
3321 if (t.IsInstalled && t.trait is TraitSeed && !t.isSale)
3323 (t.trait as TraitSeed).TrySprout(force: false, sucker: false, date);
3336 c.isWatered =
false;
3345 foreach (
Spatial child
in children)
3347 if (!(child is
Zone_Field) && _x == child.
x && _y == child.
y)
3349 return child as
Zone;
3353 foreach (
Spatial child2
in children)
3355 if (_x == child2.
x && _y == child2.
y)
3357 return child2 as
Zone;
3374 bool flag = EClass.player.IsCriminal && HasLaw && !AllowCriminal && !IsPCFaction;
3380 chara.hostility = hostility;
3395 dictCitizen.Clear();
3398 if (
item.trait.IsCitizen && !
item.IsGlobal && !
item.isSubsetCard)
3407 base.influence += a;
3410 Msg.
Say(
"gainInfluence", Name, a.ToString() ??
"");
3417 base.development += a;
3420 Msg.
Say(
"gainDevelopment", Name, a.ToString() ??
"");
3426 if (!IsPCFaction && (!(
this is
Zone_Town) || base.lv != 0))
3430 Debug.Log(
"Updating Quest:" + force);
3437 if (
item.quest.IsExpired || completedQuests.Contains(
item.quest.uid) || force)
3455 maxQuest = 4 + EClass.rnd(4);
3457 completedQuests.Clear();
3459 List<Tuple<string, int>> listTag =
new List<Tuple<string, int>>();
3463 array =
new string[9] {
"supply/8",
"deliver/7",
"food/8",
"escort/4",
"deliver/4",
"monster/0",
"war/0",
"farm/0",
"music/0" };
3465 string[] array2 = array;
3466 for (
int i = 0; i < array2.Length; i++)
3468 string[] array3 = array2[i].Split(
'/');
3469 listTag.Add(
new Tuple<string, int>(array3[0], array3[1].ToInt()));
3471 for (
int j = 0; j < map.charas.Count * 2; j++)
3489 foreach (Tuple<string, int> item2
in listTag)
3491 if (a.tags.Contains(item2.Item1))
3501 return a.chance * num2;
3513 List<Chara> list =
new List<Chara>();
3549 for (
int i = 0; i < 2 +
EClass.
rnd(4); i++)
3551 Point point = GetPos();
3559 thing.isLostProperty =
true;
3561 int num2 = (thing.c_lockLv =
EClass.
rndHalf(Mathf.Min(base.development / 10 + 10, 50)));
3578 static Point GetPos()
3580 for (
int j = 0; j < 10; j++)
3594 bool flag =
this is
Zone_Yowyn && base.lv == -1;
3601 if (EClass.player.doneBackers.Contains(a.id))
3619 if (chara.
id !=
"follower")
3624 if ((flag && chara.
race.id !=
"cat") ||
EClass.
rnd((!flag) ? (draw ? 3 : 10) : (draw ? 1 : 2)) != 0)
3630 if (
item.chara == chara.
id)
3642 if (fortuneRoll ==
null)
3647 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()