2using System.Collections.Generic;
52 public Dictionary<int, string>
dictCitizen =
new Dictionary<int, string>();
83 public static List<Thing>
Suckers =
new List<Thing>();
93 base.uidBoss = value?.
uid ?? 0;
141 public virtual string IDPlayList => base.source.idPlaylist.IsEmpty((base.lv != 0) ?
"Underground" :
null);
145 public virtual string IDHat =>
null;
153 if (base.source.idFile.Length != 0)
155 return base.source.idFile[
fileVariation] + ((base.lv == 0) ?
"" : (
"_F" + base.lv));
161 public string pathTemp => GameIO.pathTemp + base.uid +
"/";
279 public virtual int MaxLv => 99999999;
281 public virtual int MinLv => -99999999;
313 public virtual int MaxSpawn => map.bounds.Width * map.bounds.Height / 175 + 2;
359 return base.source.tag.Contains(
"return");
371 return base.lv <
MaxLv;
391 public virtual bool UseFog => base.lv < 0;
403 return base.source.tag.Contains(
"light");
415 public virtual FlockController.SpawnType
FlockType => FlockController.SpawnType.Default;
425 return "conquered".lang();
549 return base.source.id;
563 return " " +
"zoneLevelB".lang((_lv * -1).
ToString() ??
"");
565 return " " +
"zoneLevel".lang((_lv + 1).
ToString() ??
"");
599 EClass.game.config.reverseSnow =
false;
606 EClass.pc.global.transition.uidLastZone = 0;
614 EClass.game.activeZone =
this;
616 Debug.Log(
NameWithLevel +
"/" +
id +
"/" + base.uid +
"/" + base.isGenerated +
"/" +
IsLoaded +
"/" + File.Exists(base.pathSave +
"map"));
617 if (base.isGenerated && !
IsLoaded && !File.Exists(base.pathSave +
"map"))
619 Debug.Log(
"(Bug) File does not exist:" +
destryoed +
"/" + base.pathSave);
620 base.isGenerated =
false;
625 if (flag2 &&
map !=
null)
632 Debug.Log(
"generating random map");
655 Debug.Log(
"zone is already loaded");
669 Debug.Log(base.isGenerated +
"/" + flag3 +
"/" + flag2 +
"/" +
IDSubset);
670 if (!base.isGenerated || flag3 || flag2)
677 IO.DeleteDirectory(
pathTemp +
"Texture Replace");
683 base.isGenerated =
true;
687 zoneExportData.orgMap =
GameIO.LoadFile<
Map>(base.pathSave +
"map");
690 catch (Exception message)
694 base.isGenerated =
true;
699 Debug.Log(
"loading map: imported? " +
isImported +
" regenerate? " + flag3);
703 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");
721 if (zoneExportData.
orgMap !=
null)
725 map.charas = orgMap.
charas;
735 map.
cells[i, j].
isSeen = array[i * EClass._map.Size + j].GetBit(1);
741 Debug.Log(
"Importing New Chara:" +
item.id +
"/" +
item.Name +
"/" +
item.orgPos);
748 foreach (Thing thing in orgMap.things)
750 if (t.id == thing.id && t.pos.Equals(thing.pos))
752 if (t.trait is TraitNewZone)
755 map.things.Insert(0, thing);
756 thing.stackOrder = 0;
760 t.ChangeMaterial(thing.material);
770 foreach (Thing thing2 in orgMap.things)
772 if (thing2.trait is TraitNewZone && t.pos.Equals(thing2.pos))
775 map.things.Add(thing2);
781 if (t.id ==
"medal" || t.id ==
"856")
783 foreach (Thing thing3 in orgMap.things)
785 if (t.id == thing3.id && t.pos.Equals(thing3.pos))
814 thing4.isSubsetCard =
false;
834 if (isImported && IsTown)
836 RefreshListCitizen();
839 AddGlobalCharasOnActivate();
843 foreach (
Card item3
in map.
Cards.ToList())
853 idCurrentSubset = forceSubset ?? IDSubset;
854 if (idCurrentSubset !=
null)
862 if (MakeTownProperties)
873 thing7.isNPCProperty =
false;
877 if (instance !=
null)
882 if (isImported && !flag3 && !RevealRoom)
892 point2.cell.isSeen =
false;
901 PathManager.Instance._pathfinder.PunishChangeDirection =
false;
905 EClass._map.config.idSceneProfile =
"indoor_water";
908 if (flag && IsTown && base.lv == 0)
912 if (base.visitCount == 0)
920 map.effectManager.GetOrCreate(c.GetSharedPoint());
939 Map.isDirtySunMap =
true;
955 chara.dirtySpeed =
true;
960 if (
card.IsUnique && !
card.IsPCFaction && !
card.IsPCParty)
970 int @
int =
card.GetInt(55);
975 if (chara2.
uid == @
int)
979 chara.enemy = chara2;
981 chara.calmCheckTurn = 20 +
EClass.
rnd(30);
989 if (
card.c_uidMaster != 0 && chara.
master ==
null)
1002 else if (
card.IsInstalled &&
card.trait is
TraitDoor traitDoor &&
card.pos.HasChara && !traitDoor.IsOpen())
1004 traitDoor.ToggleDoor(sound:
false, refresh:
false);
1008 forceRegenerate =
false;
1020 OnVisitNewMapOrRegenerate();
1025 EClass.player.uidLastTown = 0;
1027 else if (IsTown && base.lv == 0)
1029 EClass.player.uidLastTown = base.uid;
1033 RefreshElectricity();
1065 List<Chara> list =
new List<Chara>();
1089 isSimulating =
true;
1091 isSimulating =
false;
1103 if (fieldElements.
dict.Count() > 0)
1112 if (ShouldAutoRevive)
1132 Point point = GetSpawnPos(value);
1179 if (
Boss !=
null && IsNefia)
1185 int num = Mathf.Clamp(MinsSinceLastActive, 1, 10000);
1196 chara2.mana.value = 0;
1200 chara2.stamina.value = 0;
1205 chara2.resistCon =
null;
1209 Msg.ignoreAll =
true;
1211 chara2.
HealHP((
int)((
long)Mathf.Max(1, chara2.
MaxHP) * (
long)Mathf.Min(num, 20) / 20));
1212 chara2.
mana.
Mod(Mathf.Max(1, chara2.
mana.
max) * Mathf.Min(num, 20) / 20);
1214 Msg.ignoreAll =
false;
1218 Debug.Log(
"Last Active:" + base.lastActive);
1219 if (base.lastActive == 0 || HourSinceLastActive <= 1 || IsRegion)
1223 Debug.Log(Name +
" Simulate:" + HourSinceLastActive +
" hours");
1226 int num2 = HourSinceLastActive / 24;
1232 if (!
item.IsPCParty)
1234 item.OnSleep(200, num2);
1235 if (
item.conSleep !=
null)
1237 item.conSleep.Kill();
1243 if (
item.things.Count > 20)
1250 VirtualDate.current = virtualDate;
1251 for (
int i = 0; i < HourSinceLastActive; i++)
1263 VirtualDate.current =
null;
1269 foreach (
Chara item2
in list)
1277 if (item2.
id ==
"bee")
1281 if (num2 > 0 && item2.
IsGuest())
1291 item2.
SetAI(goalWork);
1294 (goalWork as
GoalWork).FindWork(item2);
1298 item2.
SetAI(goalWork);
1301 (goalWork as
GoalWork).FindWork(item2);
1311 List<Thing> list2 =
new List<Thing>();
1319 if (num4 >= list2.Count)
1323 for (
int j = num4; j < list2.Count; j++)
1325 if (
EClass.
rnd(200) <= HourSinceLastActive)
1328 AddCard(chara, list2.RandomItem().
pos);
1330 chara.c_originalHostility = c_originalHostility;
1340 bool flag = zone ==
null || zone.lv > base.
lv;
1346 if (GetZoneAt(topZone.
x, topZone.
y) !=
null)
1358 enterState = RegionEnterState;
1364 float rate = zoneTransition?.
ratePos ?? (-1f);
1373 if (nearestPoint !=
null && nearestPoint.
IsValid)
1375 return nearestPoint;
1385 return new Point(zoneTransition.
x, zoneTransition.
z);
1393 if (traitTeleporter !=
null)
1397 if (traitTeleporter !=
null && !zoneTransition.
idTele.IsEmpty() && zoneTransition.
idTele == traitTeleporter.
id.IsEmpty(traitTeleporter.
GetParam(3)))
1411 if (randomThing2 !=
null)
1431 if (randomThing !=
null)
1451 flag = base.lv <= 0;
1477 return new Point(zoneTransition.
x, zoneTransition.
z);
1479 return GetRandomVisitPos(c);
1493 if (thing5.
trait is
TraitNewZone { zone: not null } traitNewZone && zone !=
null && traitNewZone.
zone.
uid == zone.uid)
1495 if (c !=
null && enterState != 0)
1497 c.SetDir(traitNewZone.owner.dir);
1499 return traitNewZone.GetExitPos();
1504 if (thing6.
trait is
TraitNewZone traitNewZone2 && ((flag && traitNewZone2.IsUpstairs) || (!flag && traitNewZone2.IsDownstairs)))
1506 if (c !=
null && enterState != 0)
1508 c.SetDir(traitNewZone2.owner.dir);
1510 return traitNewZone2.GetExitPos();
1513 return GetRandomVisitPos(c);
1521 point = map.
rooms.
listRoom.RandomItem().points.RandomItem();
1523 if (point ==
null &&
EClass.
rnd(4) != 0)
1540 Point spawnPosPC =
null;
1543 spawnPosPC = GetSpawnPos(
EClass.
pc);
1545 if (spawnPosPC ==
null)
1573 c.isRestrained =
false;
1577 Point pos = (c.IsPC ? spawnPosPC : (c.IsPCParty ? spawnPosPC.GetNearestPoint(allowBlock:
false, allowChara:
false, allowInstalled:
true, ignoreCenter:
true) : GetSpawnPos(c)));
1582 pos.
Set(spawnPosPC);
1587 if (!spawnPosPC.ForeachNearestPoint(delegate(
Point p)
1595 }, allowBlock:
false, EClass.pc.party.members.Count >= 12, allowInstalled:
true, ignoreCenter:
true, EClass._zone.IsRegion ? 2 : 6))
1597 pos.
Set(spawnPosPC);
1602 c.global.transition =
null;
1610 Point nearestPoint = spawnPosPC.
GetNearestPoint(allowBlock:
false, allowChara:
false, allowInstalled:
true, ignoreCenter:
true);
1612 item.pos.Set(nearestPoint);
1621 if (!IsUserZone && !IsPCFaction && map !=
null)
1623 List<Thing> list =
new List<Thing>();
1635 if (
item.IsContainer)
1653 Msg.
Say(
"pick_valuable");
1654 foreach (
Thing item2
in list)
1656 Msg.
Say(
"pick_valuable2", item2);
1661 base.isPeace =
false;
1662 OnBeforeDeactivate();
1674 EClass.game.activeZone =
null;
1678 base.isGenerated =
false;
1680 if (forceRegenerate)
1709 Debug.Log(
"Unloaded Map:" +
this);
1723 base.dateExpire = 0;
1728 thing.isNPCProperty =
false;
1734 for (
int i = 0; i < 7; i++)
1778 SetMainFaction(
null);
1820 Zone topZone = GetTopZone();
1827 if (!base.isRandomSite && !(
this is
Zone_Field) && (topZone ==
null || topZone ==
this || topZone.
FindDeepestZone() ==
this))
1839 if (zone !=
null && zone.
GetTopZone() ==
this)
1851 Debug.Log(
"Deleting Zone:" +
this);
1857 else if (map !=
null)
1859 Debug.Log(
"Saving Zone:" +
this);
1860 map.
Save(base.pathSave);
1861 if (!base.isMapSaved)
1863 base.isMapSaved =
true;
1864 IO.DeleteDirectory(base.pathSave +
"Texture Replace");
1865 IO.CopyDir(pathTemp +
"Texture Replace", base.pathSave +
"/Texture Replace");
1885 children.ForeachReverse(delegate(
Spatial z)
1893 if (parent !=
null && parent.IsRegion && instance ==
null)
1899 base.isGenerated =
false;
1908 base.isGenerated =
false;
1909 Zone topZone = GetTopZone();
1910 if (topZone !=
this)
1915 children.ForeachReverse(delegate(
Spatial c)
1935 if (parent ==
null || parent.IsRegion)
1939 return parent as
Zone;
1945 for (
int i = 0; i < 1000; i++)
1951 return AddCard(t, point);
1954 return AddCard(t, center);
1964 return AddChara(
id, p.
x, p.
z);
1974 return AddThing(
id, p.
x, p.
z);
1979 return AddCard(t, point.
x, point.
z);
1984 return AddCard(t, 0, 0);
1997 chara.currentZone =
this;
2007 ignoreSpawnAnime =
false;
2012 chara.hasSpawned =
true;
2026 t.Chara.currentZone =
null;
2038 public T GetRandomSpot<T>() where T :
Trait
2043 public bool TryAddThingInSpot<T>(
Thing t,
bool useContainer =
true) where T :
Trait
2046 if (randomThing ==
null)
2053 List<Thing> list =
new List<Thing>();
2056 foreach (
Card item2
in item.ListCards())
2060 list.Add(item2.
Thing);
2064 if (TryAddThingInSharedContainer(t, list, add:
true, msg:
false,
null, sharedOnly:
false))
2073 public List<Thing> TryListThingsInSpot<T>(Func<Thing, bool> func =
null) where T :
TraitSpot
2075 List<T> list =
new List<T>();
2076 List<Thing> list2 =
new List<Thing>();
2081 list.Add(thing.
trait as T);
2084 foreach (T
item in list)
2086 foreach (
Point item2
in item.ListPoints(
null, onlyPassable:
false))
2094 if (thing2.
things.Count == 0)
2096 if (IsValid(thing2))
2110 bool IsValid(
Thing t)
2112 if (func !=
null && !func(t))
2129 if (containers ==
null)
2133 if (SearchDest() !=
null)
2152 foreach (
Thing container
in containers)
2154 Thing thing = container;
2162 if (windowSaveData !=
null)
2182 foreach (
int cat
in windowSaveData.
cats)
2195 else if (windowSaveData.
flag.HasFlag(flag))
2200 priority = windowSaveData.
priority;
2234 if (num == 0 || !destroyIfFail)
2261 List<T> list =
new List<T>();
2266 list.Add(thing2.
trait as T);
2269 foreach (T
item in list)
2271 foreach (
Point item2
in item.ListPoints(
null, onlyPassable:
false))
2279 if (thing3.
things.Count == 0)
2281 if (IsValid(thing3, insideContainer:
false))
2296 bool IsValid(
Thing t,
bool insideContainer)
2308 string text = IdProfile;
2314 text = ((base.lv < 0) ?
"Underground" :
"Sky");
2316 else if (region !=
null)
2322 name =
Lang.
GetList(
"zone_" + text.Split(
'/')[1]).RandomItem();
2324 for (
int i = 0; i < 3; i++)
2326 for (
int j = 0; j < 3; j++)
2331 if (text ==
"Random/R_Shore")
2333 base.isBeach =
true;
2350 bp.genSetting.seed = base.Seed;
2360 base.isGenerated =
true;
2371 if (IdBiome ==
"Sand" || IdBiome ==
"Water" || IsUnderwater)
2373 int num = 1 +
EClass.
rnd((IdBiome ==
"Water") ? 3 : 2);
2374 for (
int i = 0; i < num; i++)
2379 Thing t =
ThingGen.
Create(
"pearl_oyster",
new string[3] {
"wood_birch",
"poplar",
"coralwood" }.RandomItem(), ContentLv);
2384 for (
int j = 0; j < num; j++)
2395 for (
int k = 0; k < 30 +
EClass.
rnd(30); k++)
2418 foreach (
Point point
in r.points)
2422 map.
SetObj(point.
x, point.
z, num6);
2436 foreach (
Point point2
in r.points)
2448 foreach (
Point point3
in r.points)
2455 if (zone_Field !=
null)
2460 for (
int l = 0; l < num4; l++)
2504 for (
int i = 0; i < 3 +
EClass.
rnd(4); i++)
2517 if (r.points.Count <= 4)
2522 List<Point> points = r.points;
2524 "altarPoint".lang(randomReligion.NameDomain.lang());
2529 for (
int i = 0; i < 2 +
EClass.
rnd(2); i++)
2534 if (points[0].Installed ==
null)
2540 if (
item.x % 3 == 0 &&
item.z % 2 == 0 &&
item != points[0] && !
item.Equals(points[0].Front) &&
item.Installed ==
null)
2542 thing = ThingGen.Create(
"pillar1");
2543 EClass._zone.AddCard(thing, item).Install();
2546 item.SetFloor(3, 6);
2554 if (MakeEnemiesNeutral)
2561 chara.hostility = hostility2;
2565 if (PrespawnRate != 0f && !IsSkyLevel)
2567 for (
int i = 0; i < (int)((
float)MaxSpawn * PrespawnRate); i++)
2573 TryGenerateBigDaddy();
2574 TryGenerateEvolved();
2575 TryGenerateShrine();
2580 if (OreChance <= 0f)
2587 string group =
"ore";
2588 if (EClass.rnd(5) == 0)
2594 foreach (
Point point in r.points)
2596 if (point.sourceBlock.ContainsTag(
"ore"))
2598 map.SetObj(point.x, point.z, randomMaterial.id, b, 1, 0);
2613 for (
int i = 0; i < 2 +
EClass.
rnd(2); i++)
2629 int num = DangerLv * 125 / 100;
2647 Msg.
Say(
"sign_bigdaddy");
2654 for (
int i = 0; i < 3; i++)
2662 if (randomSpace ==
null)
2694 chara.c_originalHostility = (
Hostility)0;
2711 for (
int i = 0; i < tries; i++)
2751 if (setting ==
null)
2757 pos = GetSpawnPos(setting.position, setting.tries);
2768 if (IsUnderwater &&
EClass.
rnd(15) != 0)
2777 if (s.hostility !=
"")
2781 return s.biome == biome.name || s.biome.IsEmpty();
2784 int num = ((setting.dangerLv == -1) ? DangerLv : setting.dangerLv);
2788 idEle = setting.idEle
2790 int num2 = ((setting.filterLv == -1) ? num : setting.filterLv);
2793 num2 = ((num - 1) % 50 + 5) * 150 / 100;
2794 if (num2 >= 20 &&
EClass.
rnd(100) < num2)
2805 long num3 = ((setting.fixedLv == -1) ? cardRow.
LV : setting.fixedLv);
2806 bool flag = setting.fixedLv != -1 || DangerLvBoost > 0;
2809 num3 = (50L + (long)cardRow.
LV) * Mathf.Max(1, (num - 1) / 50);
2812 num3 += DangerLvBoost;
2813 if (setting.rarity ==
Rarity.Random && cardRow.
quality == 0)
2817 cardBlueprint.rarity =
Rarity.Legendary;
2818 num3 = num3 * 125 / 100;
2823 cardBlueprint.rarity = setting.rarity;
2827 num3 = num3 * 150 / 100;
2829 if (setting.isEvolved)
2831 num3 = num3 * 2 + 20;
2833 if (num3 != cardRow.
LV)
2835 cardBlueprint.lv = (int)Mathf.Min(num3, 100000000f);
2841 chara.isScaled =
false;
2843 AddCard(chara, pos);
2844 if (setting.forcedHostility.HasValue)
2846 Hostility c_originalHostility = (chara.hostility = setting.forcedHostility.Value);
2847 chara.c_originalHostility = c_originalHostility;
2872 if (setting.isEvolved)
2874 chara.c_bossType =
BossType.Evolved;
2881 return fieldElements.
Has(idEle);
2886 fieldElements.
SetBase(idEle, a);
2891 dirtyElectricity =
false;
2892 bool flag = GetSoilCost() > MaxSoil;
2893 base.electricity = elements.
Value(2201) * 10 + BaseElectricity;
2907 base.electricity += 20;
2922 bool flag = GetSoilCost() > MaxSoil;
2944 sum += elements.
Value(2201) * 10 + BaseElectricity;
2959 public void SetBGM(List<int> ids,
bool refresh =
true,
float fadeDuration = 0f)
2964 foreach (
int id in ids)
2972 UnityEngine.Object.DestroyImmediate(map.
plDay);
2979 if (fadeDuration > 0f)
2981 EClass.
Sound.StopBGM(fadeDuration, playLastBGM:
false, delegate
2996 public void SetBGM(
int id = -1,
bool refresh =
true,
float fadeDuration = 0f)
2998 SetBGM(
new List<int> {
id }, refresh, fadeDuration);
3003 if (map.
plDay ==
null)
3005 map.plDay = CreatePlaylist(ref map.
_plDay,
EClass.
Sound.GetPlaylist(IDPlayList));
3012 UnityEngine.Object.DestroyImmediate(map.
plDay);
3024 Playlist playlist = map.
plDay;
3027 if (
item.playlist !=
null)
3029 playlist =
item.playlist;
3032 if (IDPlaylistOverwrite !=
null)
3034 playlist =
EClass.
Sound.GetPlaylist(IDPlaylistOverwrite);
3039 if (room !=
null && room.
lot !=
null && room.
lot.
idBGM != 0)
3042 if (playlist.list[0].data?.id != room.
lot.
idBGM)
3059 Playlist playlist =
EClass.
Sound.plBlank.Instantiate();
3060 if (list.Count == 0 && (
bool)mold)
3062 list = mold.ToInts();
3063 playlist.shuffle = mold.shuffle;
3064 playlist.minSwitchTime = mold.minSwitchTime;
3065 playlist.nextBGMOnSwitch = mold.nextBGMOnSwitch;
3066 playlist.ignoreLoop = mold.ignoreLoop;
3067 playlist.keepBGMifSamePlaylist = mold.keepBGMifSamePlaylist;
3068 playlist.name = mold.name;
3070 foreach (
int item in list)
3072 playlist.list.Add(
new Playlist.Item
3074 data = EClass.core.refs.dictBGM.TryGetValue(item, 1)
3093 return GetDeepestLv(ref max);
3098 if (Mathf.Abs(base.lv) > Mathf.Abs(max))
3102 foreach (
Spatial child
in children)
3104 (child as
Zone).GetDeepestLv(ref max);
3111 if (landFeats ==
null)
3113 landFeats =
new List<int>();
3115 string[] listBase = IDBaseLandFeat.Split(
',');
3116 string[] array = listBase;
3117 foreach (
string text
in array)
3119 if (!text.IsEmpty())
3124 if (listBase.Length == 1)
3128 if (e.category !=
"landfeat" || e.chance == 0)
3133 string[] tag = e.tag;
3134 foreach (
string text2 in tag)
3136 if (text2.StartsWith(
"bf"))
3139 if (listBase[0] == text2)
3146 return flag ? true :
false;
3149 landFeats.Add(row.
id);
3152 landFeats.Add(row.
id);
3156 List<Element> list2 =
new List<Element>();
3157 foreach (
int landFeat
in landFeats)
3166 ZipFile zipFile = ZipFile.Read(path);
3167 zipFile.ExtractExistingFile = ExtractExistingFileAction.OverwriteSilently;
3168 zipFile.ExtractAll(pathTemp);
3187 IO.CreateTempDirectory();
3192 map.
Save(IO.TempPath +
"/", zoneExportData, partial);
3193 map.
ExportMetaData(IO.TempPath +
"/", Path.GetFileNameWithoutExtension(path), partial);
3194 if (partial ==
null)
3196 IO.CopyDir(base.pathSave +
"Texture Replace", IO.TempPath +
"/Texture Replace");
3198 IO.SaveFile(IO.TempPath +
"/export", zoneExportData, compress:
true);
3199 using (ZipFile zipFile =
new ZipFile())
3201 zipFile.ExtractExistingFile = ExtractExistingFileAction.OverwriteSilently;
3202 zipFile.AddDirectory(IO.TempPath);
3206 IO.DeleteTempDirectory();
3208 catch (Exception ex)
3210 EClass.
ui.Say(ex.Message +
":" + path);
3219 if (!
string.IsNullOrEmpty(text))
3232 if (array.Length != 0)
3234 Zone_User zone_User = SpatialGen.Create(
"user", EClass.world.region, register: true) as Zone_User;
3235 zone_User.path = array[0];
3236 Thing thing = ThingGen.Create(
"teleporter");
3237 thing.c_uidZone = zone_User.uid;
3238 EClass._zone.AddCard(thing, EClass.pc.pos);
3249 catch (Exception ex)
3259 string text = pathExport;
3262 Msg.
Say(
"Exported Map:" + text);
3277 return -10000000 + base.uid;
3281 return -8000000 + base.uid;
3285 return -9000000 + base.uid;
3289 return -7000000 + base.uid;
3293 return 1000000 + base.uid;
3313 AddCard(chara, point);
3314 Msg.
Say(
"guestArrive", chara);
3321 AddCard(chara, point);
3329 if (base.IsPlayerFaction)
3349 foreach (
Thing sucker
in Suckers)
3354 if (RespawnRate != 0f)
3364 if (num < MaxRespawn)
3366 for (
int i = 0; i < RespawnPerHour; i++)
3372 if (!date.IsRealTime &&
EClass.
rnd(24) == 0)
3384 if (base.IsPlayerFaction)
3392 if (base.IsPlayerFaction)
3431 HashSet<int> hashSet =
new HashSet<int>();
3438 foreach (
Point item in traitSpotFarm.ListPoints(
null, onlyPassable:
false))
3440 hashSet.Add(
item.index);
3444 EClass.player.isAutoFarming =
false;
3451 void Perform(HashSet<int> farmMap)
3456 if (farmMap !=
null)
3460 if (!farmMap.Contains(c.index))
3465 else if (farmMap.Contains(c.
index))
3479 if (!EClass.player.isAutoFarming && c.growth.HaltGrowth() && (c.IsFarmField || c.IsTopWater) && (!isWinter || !date.IsRealTime))
3484 if (!flag && (plantData ==
null || plantData.fert >= 0))
3490 if (date.sunMap == null)
3500 else if (c.
detail !=
null)
3502 c.Things.ForeachReverse(delegate(Thing t)
3504 if (t.IsInstalled && t.trait is TraitSeed && !t.isSale)
3506 (t.trait as TraitSeed).TrySprout(force: false, sucker: false, date);
3519 c.isWatered =
false;
3528 foreach (
Spatial child
in children)
3530 if (!(child is
Zone_Field) && _x == child.
x && _y == child.
y)
3532 return child as
Zone;
3536 foreach (
Spatial child2
in children)
3538 if (_x == child2.
x && _y == child2.
y)
3540 return child2 as
Zone;
3557 bool flag = EClass.player.IsCriminal && HasLaw && !AllowCriminal && !IsPCFaction;
3563 chara.hostility = hostility;
3578 dictCitizen.Clear();
3581 if (
item.trait.IsCitizen && !
item.IsGlobal && !
item.isSubsetCard)
3590 base.isAlarmSet = enable;
3616 base.influence += a;
3619 Msg.
Say(
"gainInfluence", Name, a.ToString() ??
"");
3626 base.development += a;
3629 Msg.
Say(
"gainDevelopment", Name, a.ToString() ??
"");
3635 if (!IsPCFaction && (!(
this is
Zone_Town) || base.lv != 0))
3639 Debug.Log(
"Updating Quest:" + force);
3646 if (
item.quest.IsExpired || completedQuests.Contains(
item.quest.uid) || force)
3664 maxQuest = 4 + EClass.rnd(4);
3666 completedQuests.Clear();
3668 List<Tuple<string, int>> listTag =
new List<Tuple<string, int>>();
3672 array =
new string[9] {
"supply/8",
"deliver/7",
"food/8",
"escort/4",
"deliver/4",
"monster/0",
"war/0",
"farm/0",
"music/0" };
3674 string[] array2 = array;
3675 for (
int i = 0; i < array2.Length; i++)
3677 string[] array3 = array2[i].Split(
'/');
3678 listTag.Add(
new Tuple<string, int>(array3[0], array3[1].ToInt()));
3680 for (
int j = 0; j < map.charas.Count * 2; j++)
3698 foreach (Tuple<string, int> item2
in listTag)
3700 if (a.tags.Contains(item2.Item1))
3710 return a.chance * num2;
3722 List<Chara> list =
new List<Chara>();
3758 for (
int i = 0; i < 2 +
EClass.
rnd(4); i++)
3760 Point point = GetPos();
3768 thing.isLostProperty =
true;
3770 int num2 = (thing.c_lockLv =
EClass.
rndHalf(Mathf.Min(base.development / 10 + 10, 50)));
3787 static Point GetPos()
3789 for (
int j = 0; j < 10; j++)
3803 bool flag =
this is
Zone_Yowyn && base.lv == -1;
3810 if (EClass.player.doneBackers.Contains(a.id))
3828 if (chara.
id !=
"follower")
3839 if (
item.chara == chara.
id)
3851 if (fortuneRoll ==
null)
3856 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=null)
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
bool HasElement(int ele, bool includeNagative=false)
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)
Chara SetHostility(Hostility h)
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)
Dictionary< int, Element > dict
Element SetBase(string alias, int v, int potential=0)
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 void LevelSeed(Thing t, SourceObj.Row obj, int num)
static Thing MakeSeed(string id, PlantData plant=null)
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)
virtual string GetNewZoneID(int level)
void OnChildNumChange(Card c)
virtual bool CanDigUnderground
virtual int BaseElectricity
virtual string IDPlayList
Dictionary< int, string > dictCitizen
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 bool SetAlarmOnBreakLaw
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)
ElementContainerField fieldElements
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)
void SetBGM(List< int > ids, bool refresh=true, float fadeDuration=0f)
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
Chara SpawnMob(string id, Point pos=null)
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)
void SetBGM(int id=-1, bool refresh=true, float fadeDuration=0f)
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 SetAlarm(bool enable)
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 SetFieldEffect(int idEle, int a)
void RefreshListCitizen()
Zone GetZoneAt(int _x, int _y)
Card AddCard(Card t, Point point)
string TextLevel(int _lv)
Chara AddChara(string id, Point p)
virtual ZoneFeatureType FeatureType
virtual float ShrineChance
Point GetSpawnPos(Chara c, ZoneTransition.EnterState destState=ZoneTransition.EnterState.Auto)
virtual void OnVisitNewMapOrRegenerate()