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 +
"/";
274 public virtual int MaxLv => 99999999;
276 public virtual int MinLv => -99999999;
308 public virtual int MaxSpawn => map.bounds.Width * map.bounds.Height / 175 + 2;
354 return base.source.tag.Contains(
"return");
366 return base.lv <
MaxLv;
386 public virtual bool UseFog => base.lv < 0;
398 return base.source.tag.Contains(
"light");
410 public virtual FlockController.SpawnType
FlockType => FlockController.SpawnType.Default;
420 return "conquered".lang();
544 return base.source.id;
558 return " " +
"zoneLevelB".lang((_lv * -1).
ToString() ??
"");
560 return " " +
"zoneLevel".lang((_lv + 1).
ToString() ??
"");
594 EClass.game.config.reverseSnow =
false;
601 EClass.pc.global.transition.uidLastZone = 0;
609 EClass.game.activeZone =
this;
611 Debug.Log(
NameWithLevel +
"/" +
id +
"/" + base.uid +
"/" + base.isGenerated +
"/" +
IsLoaded +
"/" + File.Exists(base.pathSave +
"map"));
612 if (base.isGenerated && !
IsLoaded && !File.Exists(base.pathSave +
"map"))
614 Debug.Log(
"(Bug) File does not exist:" +
destryoed +
"/" + base.pathSave);
615 base.isGenerated =
false;
620 if (flag2 &&
map !=
null)
627 Debug.Log(
"generating random map");
650 Debug.Log(
"zone is already loaded");
664 Debug.Log(base.isGenerated +
"/" + flag3 +
"/" + flag2 +
"/" +
IDSubset);
665 if (!base.isGenerated || flag3 || flag2)
672 IO.DeleteDirectory(
pathTemp +
"Texture Replace");
678 base.isGenerated =
true;
682 zoneExportData.orgMap =
GameIO.LoadFile<
Map>(base.pathSave +
"map");
685 catch (Exception message)
689 base.isGenerated =
true;
694 Debug.Log(
"loading map: imported? " +
isImported +
" regenerate? " + flag3);
698 EClass.
ui.Say(
"System.IO.EndOfStreamException: Unexpected end of stream:" + Environment.NewLine +
"File may be corrupted. Try replacing the following file if you have a backup:" + Environment.NewLine + (
isImported ?
pathTemp : base.pathSave) +
"map");
716 if (zoneExportData.
orgMap !=
null)
720 map.charas = orgMap.
charas;
730 map.
cells[i, j].
isSeen = array[i * EClass._map.Size + j].GetBit(1);
736 Debug.Log(
"Importing New Chara:" +
item.id +
"/" +
item.Name +
"/" +
item.orgPos);
743 foreach (Thing thing in orgMap.things)
745 if (t.id == thing.id && t.pos.Equals(thing.pos))
747 if (t.trait is TraitNewZone)
750 map.things.Insert(0, thing);
751 thing.stackOrder = 0;
755 t.ChangeMaterial(thing.material);
765 foreach (Thing thing2 in orgMap.things)
767 if (thing2.trait is TraitNewZone && t.pos.Equals(thing2.pos))
770 map.things.Add(thing2);
776 if (t.id ==
"medal" || t.id ==
"856")
778 foreach (Thing thing3 in orgMap.things)
780 if (t.id == thing3.id && t.pos.Equals(thing3.pos))
809 thing4.isSubsetCard =
false;
829 if (isImported && IsTown)
831 RefreshListCitizen();
834 AddGlobalCharasOnActivate();
838 foreach (
Card item3
in map.
Cards.ToList())
848 idCurrentSubset = forceSubset ?? IDSubset;
849 if (idCurrentSubset !=
null)
857 if (MakeTownProperties)
868 thing7.isNPCProperty =
false;
872 if (instance !=
null)
877 if (isImported && !flag3 && !RevealRoom)
887 point2.cell.isSeen =
false;
896 PathManager.Instance._pathfinder.PunishChangeDirection =
false;
900 EClass._map.config.idSceneProfile =
"indoor_water";
903 if (flag && IsTown && base.lv == 0)
907 if (base.visitCount == 0)
915 map.effectManager.GetOrCreate(c.GetSharedPoint());
934 Map.isDirtySunMap =
true;
950 chara.dirtySpeed =
true;
955 if (
card.IsUnique && !
card.IsPCFaction && !
card.IsPCParty)
965 int @
int =
card.GetInt(55);
970 if (chara2.
uid == @
int)
974 chara.enemy = chara2;
976 chara.calmCheckTurn = 20 +
EClass.
rnd(30);
984 if (
card.c_uidMaster != 0 && chara.
master ==
null)
997 else if (
card.IsInstalled &&
card.trait is
TraitDoor traitDoor &&
card.pos.HasChara && !traitDoor.IsOpen())
999 traitDoor.ToggleDoor(sound:
false, refresh:
false);
1003 forceRegenerate =
false;
1015 OnVisitNewMapOrRegenerate();
1020 EClass.player.uidLastTown = 0;
1022 else if (IsTown && base.lv == 0)
1024 EClass.player.uidLastTown = base.uid;
1028 RefreshElectricity();
1075 isSimulating =
true;
1077 isSimulating =
false;
1094 if (ShouldAutoRevive)
1114 Point point = GetSpawnPos(value);
1161 if (
Boss !=
null && IsNefia)
1167 int num = Mathf.Clamp(MinsSinceLastActive, 1, 10000);
1178 chara2.mana.value = 0;
1182 chara2.stamina.value = 0;
1187 chara2.resistCon =
null;
1191 Msg.ignoreAll =
true;
1193 chara2.
HealHP(Mathf.Max(1, chara2.
MaxHP) * Mathf.Min(num, 20) / 20);
1194 chara2.
mana.
Mod(Mathf.Max(1, chara2.
mana.
max) * Mathf.Min(num, 20) / 20);
1196 Msg.ignoreAll =
false;
1200 Debug.Log(
"Last Active:" + base.lastActive);
1201 if (base.lastActive == 0 || HourSinceLastActive <= 1 || IsRegion)
1205 Debug.Log(Name +
" Simulate:" + HourSinceLastActive +
" hours");
1208 int num2 = HourSinceLastActive / 24;
1214 if (!
item.IsPCParty)
1216 item.OnSleep(200, num2);
1217 if (
item.conSleep !=
null)
1219 item.conSleep.Kill();
1225 if (
item.things.Count > 20)
1232 VirtualDate.current = virtualDate;
1233 for (
int i = 0; i < HourSinceLastActive; i++)
1245 VirtualDate.current =
null;
1251 foreach (
Chara item2
in list)
1259 if (item2.
id ==
"bee")
1263 if (num2 > 0 && item2.
IsGuest())
1273 item2.
SetAI(goalWork);
1276 (goalWork as
GoalWork).FindWork(item2);
1280 item2.
SetAI(goalWork);
1283 (goalWork as
GoalWork).FindWork(item2);
1293 List<Thing> list2 =
new List<Thing>();
1301 if (num4 >= list2.Count)
1305 for (
int j = num4; j < list2.Count; j++)
1307 if (
EClass.
rnd(200) <= HourSinceLastActive)
1310 AddCard(chara, list2.RandomItem().
pos);
1312 chara.c_originalHostility = c_originalHostility;
1322 bool flag = zone ==
null || zone.lv > base.
lv;
1328 if (GetZoneAt(topZone.
x, topZone.
y) !=
null)
1340 enterState = RegionEnterState;
1346 float rate = zoneTransition?.
ratePos ?? (-1f);
1355 if (nearestPoint !=
null && nearestPoint.
IsValid)
1357 return nearestPoint;
1367 return new Point(zoneTransition.
x, zoneTransition.
z);
1375 if (traitTeleporter !=
null)
1379 if (traitTeleporter !=
null && !zoneTransition.
idTele.IsEmpty() && zoneTransition.
idTele == traitTeleporter.
id.IsEmpty(traitTeleporter.
GetParam(3)))
1393 if (randomThing2 !=
null)
1413 if (randomThing !=
null)
1433 flag = base.lv <= 0;
1459 return new Point(zoneTransition.
x, zoneTransition.
z);
1461 return GetRandomVisitPos(c);
1475 if (thing5.
trait is
TraitNewZone { zone: not null } traitNewZone && zone !=
null && traitNewZone.
zone.
uid == zone.uid)
1477 if (c !=
null && enterState != 0)
1479 c.SetDir(traitNewZone.owner.dir);
1481 return traitNewZone.GetExitPos();
1486 if (thing6.
trait is
TraitNewZone traitNewZone2 && ((flag && traitNewZone2.IsUpstairs) || (!flag && traitNewZone2.IsDownstairs)))
1488 if (c !=
null && enterState != 0)
1490 c.SetDir(traitNewZone2.owner.dir);
1492 return traitNewZone2.GetExitPos();
1495 return GetRandomVisitPos(c);
1503 point = map.
rooms.
listRoom.RandomItem().points.RandomItem();
1505 if (point ==
null &&
EClass.
rnd(4) != 0)
1522 Point spawnPosPC =
null;
1525 spawnPosPC = GetSpawnPos(
EClass.
pc);
1527 if (spawnPosPC ==
null)
1555 c.isRestrained =
false;
1559 Point pos = (c.IsPC ? spawnPosPC : (c.IsPCParty ? spawnPosPC.GetNearestPoint(allowBlock:
false, allowChara:
false, allowInstalled:
true, ignoreCenter:
true) : GetSpawnPos(c)));
1564 pos.
Set(spawnPosPC);
1569 if (!spawnPosPC.ForeachNearestPoint(delegate(
Point p)
1577 }, allowBlock:
false, EClass.pc.party.members.Count >= 12, allowInstalled:
true, ignoreCenter:
true, EClass._zone.IsRegion ? 2 : 6))
1579 pos.
Set(spawnPosPC);
1584 c.global.transition =
null;
1592 Point nearestPoint = spawnPosPC.
GetNearestPoint(allowBlock:
false, allowChara:
false, allowInstalled:
true, ignoreCenter:
true);
1594 item.pos.Set(nearestPoint);
1603 if (!IsUserZone && !IsPCFaction && map !=
null)
1605 List<Thing> list =
new List<Thing>();
1617 if (
item.IsContainer)
1635 Msg.
Say(
"pick_valuable");
1636 foreach (
Thing item2
in list)
1638 Msg.
Say(
"pick_valuable2", item2);
1643 base.isPeace =
false;
1644 OnBeforeDeactivate();
1656 EClass.game.activeZone =
null;
1660 base.isGenerated =
false;
1662 if (forceRegenerate)
1691 Debug.Log(
"Unloaded Map:" +
this);
1705 base.dateExpire = 0;
1710 thing.isNPCProperty =
false;
1716 for (
int i = 0; i < 7; i++)
1760 SetMainFaction(
null);
1796 Zone topZone = GetTopZone();
1803 if (!base.isRandomSite && !(
this is
Zone_Field) && (topZone ==
null || topZone ==
this || topZone.
FindDeepestZone() ==
this))
1815 if (zone !=
null && zone.
GetTopZone() ==
this)
1827 Debug.Log(
"Deleting Zone:" +
this);
1833 else if (map !=
null)
1835 Debug.Log(
"Saving Zone:" +
this);
1836 map.
Save(base.pathSave);
1837 if (!base.isMapSaved)
1839 base.isMapSaved =
true;
1840 IO.DeleteDirectory(base.pathSave +
"Texture Replace");
1841 IO.CopyDir(pathTemp +
"Texture Replace", base.pathSave +
"/Texture Replace");
1861 children.ForeachReverse(delegate(
Spatial z)
1869 if (parent !=
null && parent.IsRegion && instance ==
null)
1875 base.isGenerated =
false;
1884 base.isGenerated =
false;
1885 Zone topZone = GetTopZone();
1886 if (topZone !=
this)
1891 children.ForeachReverse(delegate(
Spatial c)
1911 if (parent ==
null || parent.IsRegion)
1915 return parent as
Zone;
1921 for (
int i = 0; i < 1000; i++)
1927 return AddCard(t, point);
1930 return AddCard(t, center);
1945 return AddThing(
id, p.
x, p.
z);
1950 return AddCard(t, point.
x, point.
z);
1955 return AddCard(t, 0, 0);
1968 chara.currentZone =
this;
1978 ignoreSpawnAnime =
false;
1983 chara.hasSpawned =
true;
1997 t.Chara.currentZone =
null;
2009 public T GetRandomSpot<T>() where T :
Trait
2014 public bool TryAddThingInSpot<T>(
Thing t,
bool useContainer =
true) where T :
Trait
2017 if (randomThing ==
null)
2024 List<Thing> list =
new List<Thing>();
2027 foreach (
Card item2
in item.ListCards())
2031 list.Add(item2.
Thing);
2035 if (TryAddThingInSharedContainer(t, list, add:
true, msg:
false,
null, sharedOnly:
false))
2044 public List<Thing> TryListThingsInSpot<T>(Func<Thing, bool> func =
null) where T :
TraitSpot
2046 List<T> list =
new List<T>();
2047 List<Thing> list2 =
new List<Thing>();
2052 list.Add(thing.
trait as T);
2055 foreach (T
item in list)
2057 foreach (
Point item2
in item.ListPoints(
null, onlyPassable:
false))
2065 if (thing2.
things.Count == 0)
2067 if (IsValid(thing2))
2081 bool IsValid(
Thing t)
2083 if (func !=
null && !func(t))
2100 if (containers ==
null)
2104 if (SearchDest() !=
null)
2123 foreach (
Thing container
in containers)
2125 Thing thing = container;
2133 if (windowSaveData !=
null)
2153 foreach (
int cat
in windowSaveData.
cats)
2166 else if (windowSaveData.
flag.HasFlag(flag))
2171 priority = windowSaveData.
priority;
2205 if (num == 0 || !destroyIfFail)
2232 List<T> list =
new List<T>();
2237 list.Add(thing2.
trait as T);
2240 foreach (T
item in list)
2242 foreach (
Point item2
in item.ListPoints(
null, onlyPassable:
false))
2250 if (thing3.
things.Count == 0)
2252 if (IsValid(thing3, insideContainer:
false))
2267 bool IsValid(
Thing t,
bool insideContainer)
2279 string text = IdProfile;
2285 text = ((base.lv < 0) ?
"Underground" :
"Sky");
2287 else if (region !=
null)
2293 name =
Lang.
GetList(
"zone_" + text.Split(
'/')[1]).RandomItem();
2295 for (
int i = 0; i < 3; i++)
2297 for (
int j = 0; j < 3; j++)
2302 if (text ==
"Random/R_Shore")
2304 base.isBeach =
true;
2321 bp.genSetting.seed = base.Seed;
2331 base.isGenerated =
true;
2342 if (IdBiome ==
"Sand" || IdBiome ==
"Water" || IsUnderwater)
2344 int num = 1 +
EClass.
rnd((IdBiome ==
"Water") ? 3 : 2);
2345 for (
int i = 0; i < num; i++)
2350 Thing t =
ThingGen.
Create(
"pearl_oyster",
new string[3] {
"wood_birch",
"poplar",
"coralwood" }.RandomItem(), ContentLv);
2355 for (
int j = 0; j < num; j++)
2366 for (
int k = 0; k < 30 +
EClass.
rnd(30); k++)
2389 foreach (
Point point
in r.points)
2393 map.
SetObj(point.
x, point.
z, num6);
2407 foreach (
Point point2
in r.points)
2419 foreach (
Point point3
in r.points)
2426 if (zone_Field !=
null)
2431 for (
int l = 0; l < num4; l++)
2475 for (
int i = 0; i < 3 +
EClass.
rnd(4); i++)
2488 if (r.points.Count <= 4)
2493 List<Point> points = r.points;
2495 "altarPoint".lang(randomReligion.NameDomain.lang());
2500 for (
int i = 0; i < 2 +
EClass.
rnd(2); i++)
2505 if (points[0].Installed ==
null)
2511 if (
item.x % 3 == 0 &&
item.z % 2 == 0 &&
item != points[0] && !
item.Equals(points[0].Front) &&
item.Installed ==
null)
2513 thing = ThingGen.Create(
"pillar1");
2514 EClass._zone.AddCard(thing, item).Install();
2517 item.SetFloor(3, 6);
2525 if (MakeEnemiesNeutral)
2532 chara.hostility = hostility2;
2536 if (PrespawnRate != 0f && !IsSkyLevel)
2538 for (
int i = 0; i < (int)((
float)MaxSpawn * PrespawnRate); i++)
2544 TryGenerateBigDaddy();
2545 TryGenerateEvolved();
2546 TryGenerateShrine();
2551 if (OreChance <= 0f)
2558 string group =
"ore";
2559 if (EClass.rnd(5) == 0)
2565 foreach (
Point point in r.points)
2567 if (point.sourceBlock.ContainsTag(
"ore"))
2569 map.SetObj(point.x, point.z, randomMaterial.id, b, 1, 0);
2584 for (
int i = 0; i < 2 +
EClass.
rnd(2); i++)
2600 int num = DangerLv * 125 / 100;
2618 Msg.
Say(
"sign_bigdaddy");
2625 for (
int i = 0; i < 3; i++)
2633 if (randomSpace ==
null)
2665 chara.c_originalHostility = (
Hostility)0;
2682 for (
int i = 0; i < tries; i++)
2714 if (setting ==
null)
2720 pos = GetSpawnPos(setting.position, setting.tries);
2731 if (IsUnderwater &&
EClass.
rnd(15) != 0)
2736 Debug.Log(setting.idSpawnList +
"/" + biome.name +
"/" + biome.
id);
2741 if (s.hostility !=
"")
2745 return s.biome == biome.name || s.biome.IsEmpty();
2748 int num = ((setting.dangerLv == -1) ? DangerLv : setting.dangerLv);
2752 idEle = setting.idEle
2754 int num2 = ((setting.filterLv == -1) ? num : setting.filterLv);
2757 num2 = ((num - 1) % 50 + 5) * 150 / 100;
2758 if (num2 >= 20 &&
EClass.
rnd(100) < num2)
2769 int num3 = ((setting.fixedLv == -1) ? cardRow.
LV : setting.fixedLv);
2772 num3 = (50 + cardRow.
LV) * Mathf.Max(1, (num - 1) / 50);
2774 num3 += DangerLvBoost;
2775 if (setting.rarity ==
Rarity.Random && cardRow.
quality == 0)
2779 cardBlueprint.rarity =
Rarity.Legendary;
2780 num3 = num3 * 125 / 100;
2785 cardBlueprint.rarity = setting.rarity;
2789 num3 = num3 * 150 / 100;
2791 if (setting.isEvolved)
2793 num3 = num3 * 2 + 20;
2795 if (num3 != cardRow.
LV)
2797 cardBlueprint.lv = num3;
2801 AddCard(chara, pos);
2802 if (setting.forcedHostility.HasValue)
2804 Hostility c_originalHostility = (chara.hostility = setting.forcedHostility.Value);
2805 chara.c_originalHostility = c_originalHostility;
2830 if (setting.isEvolved)
2832 chara.c_bossType =
BossType.Evolved;
2839 dirtyElectricity =
false;
2840 bool flag = GetSoilCost() > MaxSoil;
2841 base.electricity = elements.
Value(2201) * 10 + BaseElectricity;
2855 base.electricity += 20;
2870 bool flag = GetSoilCost() > MaxSoil;
2892 sum += elements.
Value(2201) * 10 + BaseElectricity;
2907 public void SetBGM(List<int> ids,
bool refresh =
true)
2912 foreach (
int id in ids)
2920 UnityEngine.Object.DestroyImmediate(map.
plDay);
2930 public void SetBGM(
int id = -1,
bool refresh =
true)
2932 SetBGM(
new List<int> {
id }, refresh);
2937 if (map.
plDay ==
null)
2939 map.plDay = CreatePlaylist(ref map.
_plDay,
EClass.
Sound.GetPlaylist(IDPlayList));
2946 UnityEngine.Object.DestroyImmediate(map.
plDay);
2958 Playlist playlist = map.
plDay;
2961 if (
item.playlist !=
null)
2963 playlist =
item.playlist;
2966 if (IDPlaylistOverwrite !=
null)
2968 playlist =
EClass.
Sound.GetPlaylist(IDPlaylistOverwrite);
2973 if (room !=
null && room.
lot !=
null && room.
lot.
idBGM != 0)
2976 if (playlist.list[0].data?.id != room.
lot.
idBGM)
2993 Playlist playlist =
EClass.
Sound.plBlank.Instantiate();
2994 if (list.Count == 0 && (
bool)mold)
2996 list = mold.ToInts();
2997 playlist.shuffle = mold.shuffle;
2998 playlist.minSwitchTime = mold.minSwitchTime;
2999 playlist.nextBGMOnSwitch = mold.nextBGMOnSwitch;
3000 playlist.ignoreLoop = mold.ignoreLoop;
3001 playlist.keepBGMifSamePlaylist = mold.keepBGMifSamePlaylist;
3002 playlist.name = mold.name;
3004 foreach (
int item in list)
3006 playlist.list.Add(
new Playlist.Item
3008 data = EClass.core.refs.dictBGM.TryGetValue(item, 1)
3027 return GetDeepestLv(ref max);
3032 if (Mathf.Abs(base.lv) > Mathf.Abs(max))
3036 foreach (
Spatial child
in children)
3038 (child as
Zone).GetDeepestLv(ref max);
3045 if (landFeats ==
null)
3047 landFeats =
new List<int>();
3049 string[] listBase = IDBaseLandFeat.Split(
',');
3050 string[] array = listBase;
3051 foreach (
string text
in array)
3053 if (!text.IsEmpty())
3058 if (listBase.Length == 1)
3062 if (e.category !=
"landfeat" || e.chance == 0)
3067 string[] tag = e.tag;
3068 foreach (
string text2 in tag)
3070 if (text2.StartsWith(
"bf"))
3073 if (listBase[0] == text2)
3080 return flag ? true :
false;
3083 landFeats.Add(row.
id);
3086 landFeats.Add(row.
id);
3090 List<Element> list2 =
new List<Element>();
3091 foreach (
int landFeat
in landFeats)
3100 ZipFile zipFile = ZipFile.Read(path);
3101 zipFile.ExtractExistingFile = ExtractExistingFileAction.OverwriteSilently;
3102 zipFile.ExtractAll(pathTemp);
3121 IO.CreateTempDirectory();
3126 map.
Save(IO.TempPath +
"/", zoneExportData, partial);
3127 map.
ExportMetaData(IO.TempPath +
"/", Path.GetFileNameWithoutExtension(path), partial);
3128 if (partial ==
null)
3130 IO.CopyDir(base.pathSave +
"Texture Replace", IO.TempPath +
"/Texture Replace");
3132 IO.SaveFile(IO.TempPath +
"/export", zoneExportData, compress:
true);
3133 using (ZipFile zipFile =
new ZipFile())
3135 zipFile.ExtractExistingFile = ExtractExistingFileAction.OverwriteSilently;
3136 zipFile.AddDirectory(IO.TempPath);
3140 IO.DeleteTempDirectory();
3142 catch (Exception ex)
3144 EClass.
ui.Say(ex.Message +
":" + path);
3153 if (!
string.IsNullOrEmpty(text))
3166 if (array.Length != 0)
3168 Zone_User zone_User = SpatialGen.Create(
"user", EClass.world.region, register: true) as Zone_User;
3169 zone_User.path = array[0];
3170 Thing thing = ThingGen.Create(
"teleporter");
3171 thing.c_uidZone = zone_User.uid;
3172 EClass._zone.AddCard(thing, EClass.pc.pos);
3183 catch (Exception ex)
3193 string text = pathExport;
3196 Msg.
Say(
"Exported Map:" + text);
3211 return -10000000 + base.uid;
3215 return -8000000 + base.uid;
3219 return -9000000 + base.uid;
3223 return -7000000 + base.uid;
3227 return 1000000 + base.uid;
3247 AddCard(chara, point);
3248 Msg.
Say(
"guestArrive", chara);
3255 AddCard(chara, point);
3263 if (base.IsPlayerFaction)
3283 foreach (
Thing sucker
in Suckers)
3288 if (RespawnRate != 0f)
3298 if (num < MaxRespawn)
3300 for (
int i = 0; i < RespawnPerHour; i++)
3306 if (!date.IsRealTime &&
EClass.
rnd(24) == 0)
3318 if (base.IsPlayerFaction)
3326 if (base.IsPlayerFaction)
3365 HashSet<int> hashSet =
new HashSet<int>();
3372 foreach (
Point item in traitSpotFarm.ListPoints(
null, onlyPassable:
false))
3374 hashSet.Add(
item.index);
3378 EClass.player.isAutoFarming =
false;
3385 void Perform(HashSet<int> farmMap)
3390 if (farmMap !=
null)
3394 if (!farmMap.Contains(c.index))
3399 else if (farmMap.Contains(c.
index))
3413 if (!EClass.player.isAutoFarming && c.growth.HaltGrowth() && (c.IsFarmField || c.IsTopWater) && (!isWinter || !date.IsRealTime))
3418 if (!flag && (plantData ==
null || plantData.fert >= 0))
3424 if (date.sunMap == null)
3434 else if (c.
detail !=
null)
3436 c.Things.ForeachReverse(delegate(Thing t)
3438 if (t.IsInstalled && t.trait is TraitSeed && !t.isSale)
3440 (t.trait as TraitSeed).TrySprout(force: false, sucker: false, date);
3453 c.isWatered =
false;
3462 foreach (
Spatial child
in children)
3464 if (!(child is
Zone_Field) && _x == child.
x && _y == child.
y)
3466 return child as
Zone;
3470 foreach (
Spatial child2
in children)
3472 if (_x == child2.
x && _y == child2.
y)
3474 return child2 as
Zone;
3491 bool flag = EClass.player.IsCriminal && HasLaw && !AllowCriminal && !IsPCFaction;
3497 chara.hostility = hostility;
3512 dictCitizen.Clear();
3515 if (
item.trait.IsCitizen && !
item.IsGlobal && !
item.isSubsetCard)
3524 base.influence += a;
3527 Msg.
Say(
"gainInfluence", Name, a.ToString() ??
"");
3534 base.development += a;
3537 Msg.
Say(
"gainDevelopment", Name, a.ToString() ??
"");
3543 if (!IsPCFaction && (!(
this is
Zone_Town) || base.lv != 0))
3547 Debug.Log(
"Updating Quest:" + force);
3554 if (
item.quest.IsExpired || completedQuests.Contains(
item.quest.uid) || force)
3572 maxQuest = 4 + EClass.rnd(4);
3574 completedQuests.Clear();
3576 List<Tuple<string, int>> listTag =
new List<Tuple<string, int>>();
3580 array =
new string[9] {
"supply/8",
"deliver/7",
"food/8",
"escort/4",
"deliver/4",
"monster/0",
"war/0",
"farm/0",
"music/0" };
3582 string[] array2 = array;
3583 for (
int i = 0; i < array2.Length; i++)
3585 string[] array3 = array2[i].Split(
'/');
3586 listTag.Add(
new Tuple<string, int>(array3[0], array3[1].ToInt()));
3588 for (
int j = 0; j < map.charas.Count * 2; j++)
3606 foreach (Tuple<string, int> item2
in listTag)
3608 if (a.tags.Contains(item2.Item1))
3618 return a.chance * num2;
3630 List<Chara> list =
new List<Chara>();
3666 for (
int i = 0; i < 2 +
EClass.
rnd(4); i++)
3668 Point point = GetPos();
3676 thing.isLostProperty =
true;
3678 int num2 = (thing.c_lockLv =
EClass.
rndHalf(Mathf.Min(base.development / 10 + 10, 50)));
3695 static Point GetPos()
3697 for (
int j = 0; j < 10; j++)
3711 bool flag =
this is
Zone_Yowyn && base.lv == -1;
3718 if (EClass.player.doneBackers.Contains(a.id))
3736 if (chara.
id !=
"follower")
3747 if (
item.chara == chara.
id)
3759 if (fortuneRoll ==
null)
3764 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
bool HasElement(int ele, int req=1)
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)
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)
static Element Create(int id, int v=0)
void Initialize(EloMap _elomap)
void SetZone(int gx, int gy, Zone z, bool updateMesh=false)
TileInfo GetTileInfo(int gx, int gy)
void OnSimulateMonth(VirtualDate date)
void OnSimulateDay(VirtualDate date)
void OnSimulateHour(VirtualDate date)
string Log(string idLang, string ref1=null, string ref2=null, string ref3=null, string ref4=null)
ElementContainerZone elements
List< GodStatueData > godStatues
ReligionManager religions
ZoneTransition transition
void SetStage(int idx, bool renewHarvest=false)
virtual bool NeedSunlight
bool CanGrow(VirtualDate date)
void RefreshDevelopment()
static Guild GetCurrentGuild()
static string[] GetList(string id)
static SourceMaterial.Row GetRandomMaterial(int lv, string group=null, bool tryLevelMatTier=false)
Point GetLeftPos(float rate=-1f)
void ForeachCell(Action< Cell > action)
Point GetBottomPos(float rate=-1f)
Point GetRandomSurface(int x, int z, int radius, bool walkable=true, bool allowWater=false)
Point GetTopPos(float rate=-1f)
Point GetRandomSpace(int width, int height, int tries=100)
Point GetRightPos(float rate=-1f)
static MapSubset Load(string id)
new void ForeachCell(Action< Cell > action)
PlantData TryGetPlant(Point p)
void ExportMetaData(string _path, string id, PartialMap partial=null)
Chara FindChara(string id)
IEnumerable< Card > Cards
Point GetRandomPoint(Point center, int radius, int tries=100, bool mustBeWalkable=true, bool requireLos=true)
void Save(string path, ZoneExportData export=null, PartialMap partial=null)
void AddCardOnActivate(Card c)
void OnCardRemovedFromZone(Card t)
byte[] TryLoadFile(string path, string s, int size)
Dictionary< int, int > backerObjs
void SetFloor(int x, int z, int idMat=0, int idFloor=0)
PlantData AddPlant(Point pos, Thing seed)
void OnImport(ZoneExportData data)
List< Chara > serializedCharas
static MapMetaData GetMetaData(string pathZip)
void OnCardAddedToZone(Card t, int x, int z)
void Load(string path, bool import=false, PartialMap partial=null)
void RevealAll(bool reveal=true)
void SetObj(int x, int z, int id=0, int value=1, int dir=0)
static string SayRaw(string text)
static string Say(string idLang, string ref1, string ref2=null, string ref3=null, string ref4=null)
Cell GetCenterCell(int radius=1)
void OccyupyPOI(Point p, int radius=0)
static PathManager Instance
bool IsPathClear(Point origin, Point dest, IPathfindWalker walker, int radius)
HashSet< int > doneBackers
void SetObj(int id=0, int value=1, int dir=0)
override string ToString()
Point Set(int _x, int _z)
Point GetNearestPoint(bool allowBlock=false, bool allowChara=true, bool allowInstalled=true, bool ignoreCenter=false, int minRadius=0)
bool Equals(int _x, int _z)
Point Clamp(bool useBounds=false)
Thing FindThing(Func< Thing, bool > func)
Point GetRandomPoint(int radius, bool requireLos=true, bool allowChara=true, bool allowBlocked=false, int tries=100)
bool IsActive(int id, int days=-1)
static List< Zone > ListDeliver()
static Quest Create(string _id, string _idPerson=null, Chara c=null)
static int Range(int min, int max)
static void InitBytes(int a)
static void UseSeed(int seed, Action action)
static void SetSeed(int a=-1)
Dictionary< string, Religion > dictAll
Religion GetRandomReligion(bool onlyJoinable=true, bool includeMinor=false)
static string[] OpenFilePanel(string title, string directory, string extension, bool multiselect)
static string SaveFilePanel(string title, string directory, string defaultName, string extension)
static SceneProfile Load(string id)
void RemoveActorEx(Card c)
Dictionary< string, CardRow > map
SourceZoneAffix zoneAffixes
virtual int DangerLvBoost
static SpawnList Get(string id, Func< SourceChara.Row, bool > func)
static SpawnList Get(string id, string parent=null, CardFilter filter=null)
static SpawnSetting Default
static SpawnSetting Fish()
static SpawnSetting Evolved(int fixedLv=-1)
void ApplyLocalReplace(string path)
List< Thing > List(Func< Thing, bool > func, bool onlyAccessible=false)
void DestroyAll(Func< Thing, bool > funcExclude=null)
Thing CanStack(Thing target, int destInvX=-1, int destInvY=-1)
static Thing CreateFromCategory(string idCat, int lv=-1)
static Thing Create(string id, int idMat=-1, int lv=-1)
override string GetName(NameStyle style, int _num=-1)
virtual bool CanGiveRandomQuest
virtual bool CanAutoRevive
TraitSet GetTraitSet(Type t)
virtual bool IsFor(Zone z)
static bool CanTagSale(Card t, bool insideContainer=false)
static Thing MakeSeed(SourceObj.Row obj, PlantData plant=null)
static void LevelSeed(Thing t, SourceObj.Row obj, int num)
virtual List< Point > ListPoints(Point center=null, bool onlyPassable=true)
Point GetRandomPoint(Func< Point, bool > func=null, Chara accessChara=null)
virtual ShopType ShopType
string GetParam(int i, string def=null)
static void Reserve(string idStep, Action onBeforePlay=null)
FilterResult IsFilterPass(string text)
void GenerateMap(Zone zone)
EloMap.TileInfo[,] surrounding
List< ZonePreEnterEvent > listPreEnter
virtual void OnGenerateMap()
virtual bool ShowEnemyOnMinimap
static ZoneProfile Load(string id)
void SetBGM(int id=-1, bool refresh=true)
virtual string GetNewZoneID(int level)
void OnChildNumChange(Card c)
virtual bool CanDigUnderground
virtual int BaseElectricity
virtual string IDPlayList
Dictionary< int, string > dictCitizen
void SetBGM(List< int > ids, bool refresh=true)
override string ToString()
List< Chara > ListMinions(Chara c)
void RefreshElectricity()
ZoneExportData Import(string path)
virtual string IDBaseLandFeat
virtual string GetDungenID()
virtual bool BlockBorderExit
static string forceSubset
virtual float PrespawnRate
FortuneRollData GetOrCreateFortuneRollData(bool refresh=true)
virtual bool RegenerateOnEnter
virtual void OnAfterSimulate()
void OnSimulateDay(VirtualDate date)
Playlist CreatePlaylist(ref List< int > list, Playlist mold=null)
static bool IsImportValid(string path)
virtual string IDGenerator
int CountMinions(Chara c)
virtual bool MakeTownProperties
Thing TryGetThingFromSharedContainer(Func< Thing, bool > func)
void WriteNote(UINote n, Action< UINote > onWriteNote=null, IInspect.NoteMode mode=IInspect.NoteMode.Default, Recipe recipe=null)
virtual void OnRegenerate()
virtual bool CountDeepestLevel
virtual ZoneScaleType ScaleType
virtual string pathExport
virtual void OnBeforeDeactivate()
virtual ZoneTransition.EnterState RegionEnterState
virtual bool ShouldAutoRevive
HashSet< int > completedQuests
virtual bool DisableRooms
Chara TryGenerateEvolved(bool force=false, Point p=null)
void ImportDialog(string dir=null)
void ClaimZone(bool debug=false, Point pos=null)
Chara AddChara(string id, int x, int z)
Card AddThing(string id, int x, int z)
virtual bool ShouldScaleImportedChara(Chara c)
ElementContainerZone elements
virtual bool IsReturnLocation
Chara AddRandomVisitor(bool guest=false)
void ExportDialog(string dir=null)
virtual void OnBeforeSimulate()
int GetElectricity(bool cost=false)
virtual FlockController.SpawnType FlockType
Chara SpawnMob(Point pos=null, SpawnSetting setting=null)
virtual bool CanUnlockExit
int GetDeepestLv(ref int max)
virtual int RespawnPerHour
virtual float RespawnRate
void ApplyBackerPet(bool draw)
bool CanEnterBuildModeAnywhere
Card AddCardSplinkle(Card t, Point center, int radius=4)
override string NameSuffix
virtual string TextWidgetDate
void AddGlobalCharasOnActivate()
void OnSimulateMonth(VirtualDate date)
virtual float ChanceSpawnNeutral
virtual string IDSceneTemplate
virtual bool CanBeDeliverDestination
void ClearZones(Zone current=null)
bool TryAddThingInSharedContainer(Thing t, List< Thing > containers=null, bool add=true, bool msg=false, Chara chara=null, bool sharedOnly=true)
virtual void OnDeactivate()
virtual ActionMode DefaultActionMode
virtual void OnActivate()
Card AddCard(Card t, int x, int z)
void OnSimulateHour(VirtualDate date)
override void _OnBeforeSave()
override void OnAfterCreate()
static List< Thing > Suckers
Card AddThing(string id, Point p)
virtual string IDAmbience
virtual string IDPlaylistOverwrite
Point GetSpawnPos(SpawnPosition type, int tries=100)
bool TryAddThing(Thing target, Point p, bool destroyIfFail=false)
void GrowPlants(VirtualDate date)
Chara FindChara(string id)
virtual bool ShouldMakeExit
virtual bool AllowCriminal
virtual bool AlwaysLowblock
virtual bool AllowNewZone
virtual bool RestrictBuild
virtual void OnGenerateRooms(BaseMapGen gen)
Point GetRandomVisitPos(Chara c)
virtual void OnGenerateMap()
List< Element > ListLandFeats()
static bool forceRegenerate
virtual bool MakeEnemiesNeutral
virtual bool IsUnderwater
virtual void OnCreateBP()
void Export(string path, PartialMap partial=null, bool usermap=false)
virtual bool ShouldRegenerate
virtual float BigDaddyChance
void TryGenerateBigDaddy()
virtual float EvolvedChance
static bool ignoreSpawnAnime
virtual void OnAdvanceHour()
FortuneRollData fortuneRoll
void ModDevelopment(int a)
virtual bool WillAutoSave
virtual bool IsExplorable
void UpdateQuests(bool force=false)
virtual bool KeepAllyDistance
virtual bool HiddenInRegionMap
bool IsCrime(Chara c, Act act)
void RefreshListCitizen()
Zone GetZoneAt(int _x, int _y)
Card AddCard(Card t, Point point)
string TextLevel(int _lv)
virtual ZoneFeatureType FeatureType
virtual float ShrineChance
Point GetSpawnPos(Chara c, ZoneTransition.EnterState destState=ZoneTransition.EnterState.Auto)
virtual void OnVisitNewMapOrRegenerate()