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;
143 public virtual string IDPlayList => base.source.idPlaylist.IsEmpty((base.lv != 0) ?
"Underground" :
null);
147 public virtual string IDHat =>
null;
155 if (base.source.idFile.Length != 0)
157 return base.source.idFile[
fileVariation] + ((base.lv == 0) ?
"" : (
"_F" + base.lv));
163 public string pathTemp => GameIO.pathTemp + base.uid +
"/";
281 public virtual int MaxLv => 99999999;
283 public virtual int MinLv => -99999999;
315 public virtual int MaxSpawn => map.bounds.Width * map.bounds.Height / 175 + 2;
361 return base.source.tag.Contains(
"return");
373 return base.lv <
MaxLv;
393 public virtual bool UseFog => base.lv < 0;
405 return base.source.tag.Contains(
"light");
417 public virtual FlockController.SpawnType
FlockType => FlockController.SpawnType.Default;
427 return "conquered".lang();
551 return base.source.id;
565 return " " +
"zoneLevelB".lang((_lv * -1).
ToString() ??
"");
567 return " " +
"zoneLevel".lang((_lv + 1).
ToString() ??
"");
601 EClass.game.config.reverseSnow =
false;
608 EClass.pc.global.transition.uidLastZone = 0;
616 EClass.game.activeZone =
this;
618 Debug.Log(
NameWithLevel +
"/" +
id +
"/" + base.uid +
"/" + base.isGenerated +
"/" +
IsLoaded +
"/" + File.Exists(base.pathSave +
"map"));
619 if (base.isGenerated && !
IsLoaded && !File.Exists(base.pathSave +
"map"))
621 Debug.Log(
"(Bug) File does not exist:" +
destryoed +
"/" + base.pathSave);
622 base.isGenerated =
false;
627 if (flag2 &&
map !=
null)
634 Debug.Log(
"generating random map");
657 Debug.Log(
"zone is already loaded");
671 Debug.Log(base.isGenerated +
"/" + flag3 +
"/" + flag2 +
"/" +
IDSubset);
672 if (!base.isGenerated || flag3 || flag2)
679 IO.DeleteDirectory(
pathTemp +
"Texture Replace");
685 base.isGenerated =
true;
689 zoneExportData.orgMap =
GameIO.LoadFile<
Map>(base.pathSave +
"map");
692 catch (Exception message)
696 base.isGenerated =
true;
701 Debug.Log(
"loading map: imported? " +
isImported +
" regenerate? " + flag3);
705 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");
723 if (zoneExportData.
orgMap !=
null)
727 map.charas = orgMap.
charas;
737 map.
cells[i, j].
isSeen = array[i * EClass._map.Size + j].GetBit(1);
743 Debug.Log(
"Importing New Chara:" +
item.id +
"/" +
item.Name +
"/" +
item.orgPos);
750 foreach (Thing thing in orgMap.things)
752 if (t.id == thing.id && t.pos.Equals(thing.pos))
754 if (t.trait is TraitNewZone)
757 map.things.Insert(0, thing);
758 thing.stackOrder = 0;
762 t.ChangeMaterial(thing.material);
772 foreach (Thing thing2 in orgMap.things)
774 if (thing2.trait is TraitNewZone && t.pos.Equals(thing2.pos))
777 map.things.Add(thing2);
783 if (t.id ==
"medal" || t.id ==
"856")
785 foreach (Thing thing3 in orgMap.things)
787 if (t.id == thing3.id && t.pos.Equals(thing3.pos))
816 thing4.isSubsetCard =
false;
836 if (isImported && IsTown)
838 RefreshListCitizen();
841 AddGlobalCharasOnActivate();
845 foreach (
Card item3
in map.
Cards.ToList())
855 idCurrentSubset = forceSubset ?? IDSubset;
856 if (idCurrentSubset !=
null)
864 if (MakeTownProperties)
875 thing7.isNPCProperty =
false;
879 if (instance !=
null)
884 if (isImported && !flag3 && !RevealRoom)
894 point2.cell.isSeen =
false;
903 PathManager.Instance._pathfinder.PunishChangeDirection =
false;
907 EClass._map.config.idSceneProfile =
"indoor_water";
910 if (flag && IsTown && base.lv == 0)
914 if (base.visitCount == 0)
922 map.effectManager.GetOrCreate(c.GetSharedPoint());
941 Map.isDirtySunMap =
true;
957 chara.dirtySpeed =
true;
962 if (
card.IsUnique && !
card.IsPCFaction && !
card.IsPCParty)
972 int @
int =
card.GetInt(55);
977 if (chara2.
uid == @
int)
981 chara.enemy = chara2;
983 chara.calmCheckTurn = 20 +
EClass.
rnd(30);
991 if (
card.c_uidMaster != 0 && chara.
master ==
null)
1004 else if (
card.IsInstalled &&
card.trait is
TraitDoor traitDoor &&
card.pos.HasChara && !traitDoor.IsOpen())
1006 traitDoor.ToggleDoor(sound:
false, refresh:
false);
1010 forceRegenerate =
false;
1022 OnVisitNewMapOrRegenerate();
1027 EClass.player.uidLastTown = 0;
1029 else if (IsTown && base.lv == 0)
1031 EClass.player.uidLastTown = base.uid;
1035 RefreshElectricity();
1067 List<Chara> list =
new List<Chara>();
1087 RefreshDeathSentense();
1095 isSimulating =
true;
1097 isSimulating =
false;
1109 if (fieldElements.
dict.Count() > 0)
1129 if (ShouldAutoRevive)
1149 Point point = GetSpawnPos(value);
1196 if (
Boss !=
null && IsNefia)
1202 int num = Mathf.Clamp(MinsSinceLastActive, 1, 10000);
1213 chara2.mana.value = 0;
1217 chara2.stamina.value = 0;
1222 chara2.resistCon =
null;
1226 Msg.ignoreAll =
true;
1228 chara2.
HealHP((
int)((
long)Mathf.Max(1, chara2.
MaxHP) * (
long)Mathf.Min(num, 20) / 20));
1229 chara2.
mana.
Mod(Mathf.Max(1, chara2.
mana.
max) * Mathf.Min(num, 20) / 20);
1231 Msg.ignoreAll =
false;
1235 Debug.Log(
"Last Active:" + base.lastActive);
1236 if (base.lastActive == 0 || HourSinceLastActive <= 1 || IsRegion)
1240 Debug.Log(Name +
" Simulate:" + HourSinceLastActive +
" hours");
1243 int num2 = HourSinceLastActive / 24;
1249 if (!
item.IsPCParty)
1251 item.OnSleep(200, num2);
1252 if (
item.conSleep !=
null)
1254 item.conSleep.Kill();
1260 if (
item.things.Count > 20)
1267 VirtualDate.current = virtualDate;
1268 for (
int i = 0; i < HourSinceLastActive; i++)
1280 VirtualDate.current =
null;
1286 foreach (
Chara item2
in list)
1294 if (item2.
id ==
"bee")
1298 if (num2 > 0 && item2.
IsGuest())
1308 item2.
SetAI(goalWork);
1311 (goalWork as
GoalWork).FindWork(item2);
1315 item2.
SetAI(goalWork);
1318 (goalWork as
GoalWork).FindWork(item2);
1328 List<Thing> list2 =
new List<Thing>();
1336 if (num4 >= list2.Count)
1340 for (
int j = num4; j < list2.Count; j++)
1342 if (
EClass.
rnd(200) <= HourSinceLastActive)
1345 AddCard(chara, list2.RandomItem().
pos);
1347 chara.c_originalHostility = c_originalHostility;
1357 bool flag = zone ==
null || zone.lv > base.
lv;
1363 if (GetZoneAt(topZone.
x, topZone.
y) !=
null)
1375 enterState = RegionEnterState;
1381 float rate = zoneTransition?.
ratePos ?? (-1f);
1390 if (nearestPoint !=
null && nearestPoint.
IsValid)
1392 return nearestPoint;
1402 return new Point(zoneTransition.
x, zoneTransition.
z);
1410 if (traitTeleporter !=
null)
1414 if (traitTeleporter !=
null && !zoneTransition.
idTele.IsEmpty() && zoneTransition.
idTele == traitTeleporter.
id.IsEmpty(traitTeleporter.
GetParam(3)))
1428 if (randomThing2 !=
null)
1448 if (randomThing !=
null)
1468 flag = base.lv <= 0;
1494 return new Point(zoneTransition.
x, zoneTransition.
z);
1496 return GetRandomVisitPos(c);
1510 if (thing5.
trait is
TraitNewZone { zone: not null } traitNewZone && zone !=
null && traitNewZone.
zone.
uid == zone.uid)
1512 if (c !=
null && enterState != 0)
1514 c.SetDir(traitNewZone.owner.dir);
1516 return traitNewZone.GetExitPos();
1521 if (thing6.
trait is
TraitNewZone traitNewZone2 && ((flag && traitNewZone2.IsUpstairs) || (!flag && traitNewZone2.IsDownstairs)))
1523 if (c !=
null && enterState != 0)
1525 c.SetDir(traitNewZone2.owner.dir);
1527 return traitNewZone2.GetExitPos();
1530 return GetRandomVisitPos(c);
1538 point = map.
rooms.
listRoom.RandomItem().points.RandomItem();
1540 if (point ==
null &&
EClass.
rnd(4) != 0)
1557 Point spawnPosPC =
null;
1560 spawnPosPC = GetSpawnPos(
EClass.
pc);
1562 if (spawnPosPC ==
null)
1590 c.isRestrained =
false;
1594 Point pos = (c.IsPC ? spawnPosPC : (c.IsPCParty ? spawnPosPC.GetNearestPoint(allowBlock:
false, allowChara:
false, allowInstalled:
true, ignoreCenter:
true) : GetSpawnPos(c)));
1599 pos.
Set(spawnPosPC);
1604 if (!spawnPosPC.ForeachNearestPoint(delegate(
Point p)
1612 }, allowBlock:
false, EClass.pc.party.members.Count >= 12, allowInstalled:
true, ignoreCenter:
true, EClass._zone.IsRegion ? 2 : 6))
1614 pos.
Set(spawnPosPC);
1619 c.global.transition =
null;
1627 Point nearestPoint = spawnPosPC.
GetNearestPoint(allowBlock:
false, allowChara:
false, allowInstalled:
true, ignoreCenter:
true);
1629 item.pos.Set(nearestPoint);
1638 if (!IsUserZone && !IsPCFaction && map !=
null)
1640 List<Thing> list =
new List<Thing>();
1652 if (
item.IsContainer)
1670 Msg.
Say(
"pick_valuable");
1671 foreach (
Thing item2
in list)
1673 Msg.
Say(
"pick_valuable2", item2);
1678 base.isPeace =
false;
1679 OnBeforeDeactivate();
1691 EClass.game.activeZone =
null;
1695 base.isGenerated =
false;
1697 if (forceRegenerate)
1726 Debug.Log(
"Unloaded Map:" +
this);
1740 base.dateExpire = 0;
1745 thing.isNPCProperty =
false;
1751 for (
int i = 0; i < 7; i++)
1795 SetMainFaction(
null);
1837 Zone topZone = GetTopZone();
1844 if (!base.isRandomSite && !(
this is
Zone_Field) && (topZone ==
null || topZone ==
this || topZone.
FindDeepestZone() ==
this))
1856 if (zone !=
null && zone.
GetTopZone() ==
this)
1868 Debug.Log(
"Deleting Zone:" +
this);
1874 else if (map !=
null)
1876 Debug.Log(
"Saving Zone:" +
this);
1877 map.
Save(base.pathSave);
1878 if (!base.isMapSaved)
1880 base.isMapSaved =
true;
1881 IO.DeleteDirectory(base.pathSave +
"Texture Replace");
1882 IO.CopyDir(pathTemp +
"Texture Replace", base.pathSave +
"/Texture Replace");
1902 children.ForeachReverse(delegate(
Spatial z)
1910 if (parent !=
null && parent.IsRegion && instance ==
null)
1916 base.isGenerated =
false;
1925 base.isGenerated =
false;
1926 Zone topZone = GetTopZone();
1927 if (topZone !=
this)
1932 children.ForeachReverse(delegate(
Spatial c)
1952 if (parent ==
null || parent.IsRegion)
1956 return parent as
Zone;
1962 for (
int i = 0; i < 1000; i++)
1968 return AddCard(t, point);
1971 return AddCard(t, center);
1981 return AddChara(
id, p.
x, p.
z);
1991 return AddThing(
id, p.
x, p.
z);
1996 return AddCard(t, point.
x, point.
z);
2001 return AddCard(t, 0, 0);
2014 chara.currentZone =
this;
2024 ignoreSpawnAnime =
false;
2029 chara.hasSpawned =
true;
2043 t.Chara.currentZone =
null;
2055 public T GetRandomSpot<T>() where T :
Trait
2060 public bool TryAddThingInSpot<T>(
Thing t,
bool useContainer =
true) where T :
Trait
2063 if (randomThing ==
null)
2070 List<Thing> list =
new List<Thing>();
2073 foreach (
Card item2
in item.ListCards())
2077 list.Add(item2.
Thing);
2081 if (TryAddThingInSharedContainer(t, list, add:
true, msg:
false,
null, sharedOnly:
false))
2090 public List<Thing> TryListThingsInSpot<T>(Func<Thing, bool> func =
null) where T :
TraitSpot
2092 List<T> list =
new List<T>();
2093 List<Thing> list2 =
new List<Thing>();
2098 list.Add(thing.
trait as T);
2101 foreach (T
item in list)
2103 foreach (
Point item2
in item.ListPoints(
null, onlyPassable:
false))
2111 if (thing2.
things.Count == 0)
2113 if (IsValid(thing2))
2127 bool IsValid(
Thing t)
2129 if (func !=
null && !func(t))
2146 if (containers ==
null)
2150 if (SearchDest() !=
null)
2169 foreach (
Thing container
in containers)
2171 Thing thing = container;
2179 if (windowSaveData !=
null)
2199 foreach (
int cat
in windowSaveData.
cats)
2212 else if (windowSaveData.
flag.HasFlag(flag))
2217 priority = windowSaveData.
priority;
2251 if (num == 0 || !destroyIfFail)
2278 List<T> list =
new List<T>();
2283 list.Add(thing2.
trait as T);
2286 foreach (T
item in list)
2288 foreach (
Point item2
in item.ListPoints(
null, onlyPassable:
false))
2296 if (thing3.
things.Count == 0)
2298 if (IsValid(thing3, insideContainer:
false))
2313 bool IsValid(
Thing t,
bool insideContainer)
2325 string text = IdProfile;
2331 text = ((base.lv < 0) ?
"Underground" :
"Sky");
2333 else if (region !=
null)
2339 name =
Lang.
GetList(
"zone_" + text.Split(
'/')[1]).RandomItem();
2341 for (
int i = 0; i < 3; i++)
2343 for (
int j = 0; j < 3; j++)
2348 if (text ==
"Random/R_Shore")
2350 base.isBeach =
true;
2367 bp.genSetting.seed = base.Seed;
2377 base.isGenerated =
true;
2388 bool flag = IdBiome ==
"Sand" || IdBiome ==
"Water" || IsUnderwater;
2391 int num = 1 +
EClass.
rnd((IdBiome ==
"Water") ? 3 : 2);
2392 for (
int i = 0; i < num; i++)
2397 Thing t =
ThingGen.
Create(
"pearl_oyster",
new string[3] {
"wood_birch",
"poplar",
"coralwood" }.RandomItem(), ContentLv);
2402 for (
int j = 0; j < num; j++)
2413 if (!randomSurface3.
HasObj)
2421 for (
int l = 0; l < 30 +
EClass.
rnd(30); l++)
2444 foreach (
Point point
in r.points)
2448 map.
SetObj(point.
x, point.
z, num6);
2462 foreach (
Point point2
in r.points)
2474 foreach (
Point point3
in r.points)
2481 if (zone_Field !=
null)
2486 for (
int m = 0; m < num4; m++)
2538 for (
int i = 0; i < 3 +
EClass.
rnd(4); i++)
2551 if (r.points.Count <= 4)
2556 List<Point> points = r.points;
2558 "altarPoint".lang(randomReligion.NameDomain.lang());
2563 for (
int i = 0; i < 2 +
EClass.
rnd(2); i++)
2568 if (points[0].Installed ==
null)
2574 if (
item.x % 3 == 0 &&
item.z % 2 == 0 &&
item != points[0] && !
item.Equals(points[0].Front) &&
item.Installed ==
null)
2576 thing = ThingGen.Create(
"pillar1");
2577 EClass._zone.AddCard(thing, item).Install();
2580 item.SetFloor(3, 6);
2588 if (MakeEnemiesNeutral)
2595 chara.hostility = hostility2;
2599 if (PrespawnRate != 0f && !IsSkyLevel)
2601 for (
int i = 0; i < (int)((
float)MaxSpawn * PrespawnRate); i++)
2607 TryGenerateBigDaddy();
2608 TryGenerateEvolved();
2609 TryGenerateShrine();
2614 if (OreChance <= 0f)
2621 string group =
"ore";
2622 if (EClass.rnd(5) == 0)
2628 foreach (
Point point in r.points)
2630 if (point.sourceBlock.ContainsTag(
"ore"))
2632 map.SetObj(point.x, point.z, randomMaterial.id, b, 1, 0);
2647 for (
int i = 0; i < 2 +
EClass.
rnd(2); i++)
2663 int num = (int)((
long)DangerLv * 125L / 100);
2681 Msg.
Say(
"sign_bigdaddy");
2688 for (
int i = 0; i < 3; i++)
2696 if (randomSpace ==
null)
2728 chara.c_originalHostility = (
Hostility)0;
2745 for (
int i = 0; i < tries; i++)
2785 if (setting ==
null)
2791 pos = GetSpawnPos(setting.position, setting.tries);
2802 if (IsUnderwater &&
EClass.
rnd(15) != 0)
2811 if (s.hostility !=
"")
2815 return s.biome == biome.name || s.biome.IsEmpty();
2818 int num = ((setting.dangerLv == -1) ? DangerLv : setting.dangerLv);
2822 idEle = setting.idEle
2824 int num2 = ((setting.filterLv == -1) ? num : setting.filterLv);
2827 num2 = ((num - 1) % 50 + 5) * 150 / 100;
2828 if (num2 >= 20 &&
EClass.
rnd(100) < num2)
2839 long num3 = ((setting.fixedLv == -1) ? cardRow.
LV : setting.fixedLv);
2840 bool flag = setting.fixedLv != -1 || DangerLvBoost > 0;
2843 num3 = (50L + (long)cardRow.
LV) * Mathf.Max(1, (num - 1) / 50);
2846 num3 += DangerLvBoost;
2847 if (setting.rarity ==
Rarity.Random && cardRow.
quality == 0)
2851 cardBlueprint.rarity =
Rarity.Legendary;
2852 num3 = num3 * 125 / 100;
2857 cardBlueprint.rarity = setting.rarity;
2861 num3 = num3 * 150 / 100;
2863 if (setting.isEvolved)
2865 num3 = num3 * 2 + 20;
2867 if (num3 != cardRow.
LV)
2869 cardBlueprint.lv = (int)Mathf.Min(num3, 100000000f);
2875 chara.isScaled =
false;
2877 AddCard(chara, pos);
2878 if (setting.forcedHostility.HasValue)
2880 Hostility c_originalHostility = (chara.hostility = setting.forcedHostility.Value);
2881 chara.c_originalHostility = c_originalHostility;
2912 if (setting.isEvolved)
2914 chara.c_bossType =
BossType.Evolved;
2916 if (DangerLv >= 20 && !IsPCFaction && !IsTown &&
EClass.
rnd(200) == 0)
2925 return fieldElements.
Has(idEle);
2930 fieldElements.
SetBase(idEle, a);
2935 dirtyElectricity =
false;
2936 bool flag = GetSoilCost() > MaxSoil;
2937 base.electricity = elements.
Value(2201) * 10 + BaseElectricity;
2951 base.electricity += 20;
2966 bool flag = GetSoilCost() > MaxSoil;
2988 sum += elements.
Value(2201) * 10 + BaseElectricity;
3003 public void SetBGM(List<int> ids,
bool refresh =
true,
float fadeDuration = 0f)
3008 foreach (
int id in ids)
3016 UnityEngine.Object.DestroyImmediate(map.
plDay);
3023 if (fadeDuration > 0f)
3025 EClass.
Sound.StopBGM(fadeDuration, playLastBGM:
false, delegate
3040 public void SetBGM(
int id = -1,
bool refresh =
true,
float fadeDuration = 0f)
3042 SetBGM(
new List<int> {
id }, refresh, fadeDuration);
3047 if (map.
plDay ==
null)
3049 map.plDay = CreatePlaylist(ref map.
_plDay,
EClass.
Sound.GetPlaylist(IDPlayList));
3056 UnityEngine.Object.DestroyImmediate(map.
plDay);
3068 Playlist playlist = map.
plDay;
3071 if (
item.playlist !=
null)
3073 playlist =
item.playlist;
3076 if (IDPlaylistOverwrite !=
null)
3078 playlist =
EClass.
Sound.GetPlaylist(IDPlaylistOverwrite);
3083 if (room !=
null && room.
lot !=
null && room.
lot.
idBGM != 0)
3086 if (playlist.list[0].data?.id != room.
lot.
idBGM)
3103 Playlist playlist =
EClass.
Sound.plBlank.Instantiate();
3104 if (list.Count == 0 && (
bool)mold)
3106 list = mold.ToInts();
3107 playlist.shuffle = mold.shuffle;
3108 playlist.minSwitchTime = mold.minSwitchTime;
3109 playlist.nextBGMOnSwitch = mold.nextBGMOnSwitch;
3110 playlist.ignoreLoop = mold.ignoreLoop;
3111 playlist.keepBGMifSamePlaylist = mold.keepBGMifSamePlaylist;
3112 playlist.name = mold.name;
3114 foreach (
int item in list)
3116 playlist.list.Add(
new Playlist.Item
3118 data = EClass.core.refs.dictBGM.TryGetValue(item, 1)
3137 return GetDeepestLv(ref max);
3142 if (Mathf.Abs(base.lv) > Mathf.Abs(max))
3146 foreach (
Spatial child
in children)
3148 (child as
Zone).GetDeepestLv(ref max);
3155 if (landFeats ==
null)
3157 landFeats =
new List<int>();
3159 string[] listBase = IDBaseLandFeat.Split(
',');
3160 string[] array = listBase;
3161 foreach (
string text
in array)
3163 if (!text.IsEmpty())
3168 if (listBase.Length == 1)
3172 if (e.category !=
"landfeat" || e.chance == 0)
3177 string[] tag = e.tag;
3178 foreach (
string text2 in tag)
3180 if (text2.StartsWith(
"bf"))
3183 if (listBase[0] == text2)
3190 return flag ? true :
false;
3193 landFeats.Add(row.
id);
3196 landFeats.Add(row.
id);
3200 List<Element> list2 =
new List<Element>();
3201 foreach (
int landFeat
in landFeats)
3210 ZipFile zipFile = ZipFile.Read(path);
3211 zipFile.ExtractExistingFile = ExtractExistingFileAction.OverwriteSilently;
3212 zipFile.ExtractAll(pathTemp);
3231 IO.CreateTempDirectory();
3236 map.
Save(IO.TempPath +
"/", zoneExportData, partial);
3237 map.
ExportMetaData(IO.TempPath +
"/", Path.GetFileNameWithoutExtension(path), partial);
3238 if (partial ==
null)
3240 IO.CopyDir(base.pathSave +
"Texture Replace", IO.TempPath +
"/Texture Replace");
3242 IO.SaveFile(IO.TempPath +
"/export", zoneExportData, compress:
true);
3243 using (ZipFile zipFile =
new ZipFile())
3245 zipFile.ExtractExistingFile = ExtractExistingFileAction.OverwriteSilently;
3246 zipFile.AddDirectory(IO.TempPath);
3250 IO.DeleteTempDirectory();
3252 catch (Exception ex)
3254 EClass.
ui.Say(ex.Message +
":" + path);
3263 if (!
string.IsNullOrEmpty(text))
3276 if (array.Length != 0)
3278 Zone_User zone_User = SpatialGen.Create(
"user", EClass.world.region, register: true) as Zone_User;
3279 zone_User.path = array[0];
3280 Thing thing = ThingGen.Create(
"teleporter");
3281 thing.c_uidZone = zone_User.uid;
3282 EClass._zone.AddCard(thing, EClass.pc.pos);
3293 catch (Exception ex)
3303 string text = pathExport;
3306 Msg.
Say(
"Exported Map:" + text);
3321 return -10000000 + base.uid;
3325 return -8000000 + base.uid;
3329 return -9000000 + base.uid;
3333 return -7000000 + base.uid;
3337 return 1000000 + base.uid;
3357 AddCard(chara, point);
3358 Msg.
Say(
"guestArrive", chara);
3365 AddCard(chara, point);
3373 if (base.IsPlayerFaction)
3393 foreach (
Thing sucker
in Suckers)
3398 if (RespawnRate != 0f)
3408 if (num < MaxRespawn)
3410 for (
int i = 0; i < RespawnPerHour; i++)
3416 if (!date.IsRealTime &&
EClass.
rnd(24) == 0)
3428 if (base.IsPlayerFaction)
3436 if (base.IsPlayerFaction)
3475 HashSet<int> hashSet =
new HashSet<int>();
3482 foreach (
Point item in traitSpotFarm.ListPoints(
null, onlyPassable:
false))
3484 hashSet.Add(
item.index);
3488 EClass.player.isAutoFarming =
false;
3495 void Perform(HashSet<int> farmMap)
3500 if (farmMap !=
null)
3504 if (!farmMap.Contains(c.index))
3509 else if (farmMap.Contains(c.
index))
3523 if (!EClass.player.isAutoFarming && c.growth.HaltGrowth() && (c.IsFarmField || c.IsTopWater) && (!isWinter || !date.IsRealTime))
3528 if (!flag && (plantData ==
null || plantData.fert >= 0))
3534 if (date.sunMap == null)
3544 else if (c.
detail !=
null)
3546 c.Things.ForeachReverse(delegate(Thing t)
3548 if (t.IsInstalled && t.trait is TraitSeed && !t.isSale)
3550 (t.trait as TraitSeed).TrySprout(force: false, sucker: false, date);
3563 c.isWatered =
false;
3572 foreach (
Spatial child
in children)
3574 if (!(child is
Zone_Field) && _x == child.
x && _y == child.
y)
3576 return child as
Zone;
3580 foreach (
Spatial child2
in children)
3582 if (_x == child2.
x && _y == child2.
y)
3584 return child2 as
Zone;
3601 bool flag = EClass.player.IsCriminal && HasLaw && !AllowCriminal && !IsPCFaction;
3607 chara.hostility = hostility;
3622 dictCitizen.Clear();
3625 if (
item.trait.IsCitizen && !
item.IsGlobal && !
item.isSubsetCard)
3634 base.isAlarmSet = enable;
3660 base.influence += a;
3663 Msg.
Say(
"gainInfluence", Name, a.ToString() ??
"");
3670 base.development += a;
3673 Msg.
Say(
"gainDevelopment", Name, a.ToString() ??
"");
3679 if (!IsPCFaction && (!(
this is
Zone_Town) || base.lv != 0))
3683 Debug.Log(
"Updating Quest:" + force);
3690 if (
item.quest.IsExpired || completedQuests.Contains(
item.quest.uid) || force)
3708 maxQuest = 4 + EClass.rnd(4);
3710 completedQuests.Clear();
3712 List<Tuple<string, int>> listTag =
new List<Tuple<string, int>>();
3716 array =
new string[9] {
"supply/8",
"deliver/7",
"food/8",
"escort/4",
"deliver/4",
"monster/0",
"war/0",
"farm/0",
"music/0" };
3718 string[] array2 = array;
3719 for (
int i = 0; i < array2.Length; i++)
3721 string[] array3 = array2[i].Split(
'/');
3722 listTag.Add(
new Tuple<string, int>(array3[0], array3[1].ToInt()));
3724 for (
int j = 0; j < map.charas.Count * 2; j++)
3742 foreach (Tuple<string, int> item2
in listTag)
3744 if (a.tags.Contains(item2.Item1))
3754 return a.chance * num2;
3766 List<Chara> list =
new List<Chara>();
3802 for (
int i = 0; i < 2 +
EClass.
rnd(4); i++)
3804 Point point = GetPos();
3812 thing.isLostProperty =
true;
3814 int num2 = (thing.c_lockLv =
EClass.
rndHalf(Mathf.Min(base.development / 10 + 10, 50)));
3831 static Point GetPos()
3833 for (
int j = 0; j < 10; j++)
3847 bool flag =
this is
Zone_Yowyn && base.lv == -1;
3854 if (EClass.player.doneBackers.Contains(a.id))
3872 if (chara.
id !=
"follower")
3883 if (
item.chara == chara.
id)
3895 if (fortuneRoll ==
null)
3900 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
Condition AddCondition(string id, int p=100, bool force=false)
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(long _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)
List< Chara > listCarryoverMap
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, bool assignQuest=true)
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
void RefreshDeathSentense()
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 int SightRadiusBonus
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()