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>();
1099 isSimulating =
true;
1101 isSimulating =
false;
1113 if (fieldElements.
dict.Count() > 0)
1133 if (ShouldAutoRevive)
1153 Point point = GetSpawnPos(value);
1200 if (
Boss !=
null && IsNefia)
1206 int num = Mathf.Clamp(MinsSinceLastActive, 1, 10000);
1217 chara2.mana.value = 0;
1221 chara2.stamina.value = 0;
1226 chara2.resistCon =
null;
1230 Msg.ignoreAll =
true;
1232 chara2.
HealHP((
int)((
long)Mathf.Max(1, chara2.
MaxHP) * (
long)Mathf.Min(num, 20) / 20));
1233 chara2.
mana.
Mod(Mathf.Max(1, chara2.
mana.
max) * Mathf.Min(num, 20) / 20);
1235 Msg.ignoreAll =
false;
1239 Debug.Log(
"Last Active:" + base.lastActive);
1240 if (base.lastActive == 0 || HourSinceLastActive <= 1 || IsRegion)
1244 Debug.Log(Name +
" Simulate:" + HourSinceLastActive +
" hours");
1247 int num2 = HourSinceLastActive / 24;
1253 if (!
item.IsPCParty)
1255 item.OnSleep(200, num2);
1256 if (
item.conSleep !=
null)
1258 item.conSleep.Kill();
1264 if (
item.things.Count > 20)
1271 VirtualDate.current = virtualDate;
1272 for (
int i = 0; i < HourSinceLastActive; i++)
1284 VirtualDate.current =
null;
1290 foreach (
Chara item2
in list)
1298 if (item2.
id ==
"bee")
1302 if (num2 > 0 && item2.
IsGuest())
1312 item2.
SetAI(goalWork);
1315 (goalWork as
GoalWork).FindWork(item2);
1319 item2.
SetAI(goalWork);
1322 (goalWork as
GoalWork).FindWork(item2);
1332 List<Thing> list2 =
new List<Thing>();
1340 if (num4 >= list2.Count)
1344 for (
int j = num4; j < list2.Count; j++)
1346 if (
EClass.
rnd(200) <= HourSinceLastActive)
1349 AddCard(chara, list2.RandomItem().
pos);
1351 chara.c_originalHostility = c_originalHostility;
1361 bool flag = zone ==
null || zone.lv > base.
lv;
1367 if (GetZoneAt(topZone.
x, topZone.
y) !=
null)
1379 enterState = RegionEnterState;
1385 float rate = zoneTransition?.
ratePos ?? (-1f);
1394 if (nearestPoint !=
null && nearestPoint.
IsValid)
1396 return nearestPoint;
1406 return new Point(zoneTransition.
x, zoneTransition.
z);
1414 if (traitTeleporter !=
null)
1418 if (traitTeleporter !=
null && !zoneTransition.
idTele.IsEmpty() && zoneTransition.
idTele == traitTeleporter.
id.IsEmpty(traitTeleporter.
GetParam(3)))
1432 if (randomThing2 !=
null)
1452 if (randomThing !=
null)
1472 flag = base.lv <= 0;
1498 return new Point(zoneTransition.
x, zoneTransition.
z);
1500 return GetRandomVisitPos(c);
1514 if (thing5.
trait is
TraitNewZone { zone: not null } traitNewZone && zone !=
null && traitNewZone.
zone.
uid == zone.uid)
1516 if (c !=
null && enterState != 0)
1518 c.SetDir(traitNewZone.owner.dir);
1520 return traitNewZone.GetExitPos();
1525 if (thing6.
trait is
TraitNewZone traitNewZone2 && ((flag && traitNewZone2.IsUpstairs) || (!flag && traitNewZone2.IsDownstairs)))
1527 if (c !=
null && enterState != 0)
1529 c.SetDir(traitNewZone2.owner.dir);
1531 return traitNewZone2.GetExitPos();
1534 return GetRandomVisitPos(c);
1542 point = map.
rooms.
listRoom.RandomItem().points.RandomItem();
1544 if (point ==
null &&
EClass.
rnd(4) != 0)
1561 Point spawnPosPC =
null;
1564 spawnPosPC = GetSpawnPos(
EClass.
pc);
1566 if (spawnPosPC ==
null)
1594 c.isRestrained =
false;
1598 Point pos = (c.IsPC ? spawnPosPC : (c.IsPCParty ? spawnPosPC.GetNearestPoint(allowBlock:
false, allowChara:
false, allowInstalled:
true, ignoreCenter:
true) : GetSpawnPos(c)));
1603 pos.
Set(spawnPosPC);
1608 if (!spawnPosPC.ForeachNearestPoint(delegate(
Point p)
1616 }, allowBlock:
false, EClass.pc.party.members.Count >= 12, allowInstalled:
true, ignoreCenter:
true, EClass._zone.IsRegion ? 2 : 6))
1618 pos.
Set(spawnPosPC);
1623 c.global.transition =
null;
1631 Point nearestPoint = spawnPosPC.
GetNearestPoint(allowBlock:
false, allowChara:
false, allowInstalled:
true, ignoreCenter:
true);
1633 item.pos.Set(nearestPoint);
1642 if (!IsUserZone && !IsPCFaction && map !=
null)
1644 List<Thing> list =
new List<Thing>();
1656 if (
item.IsContainer)
1674 Msg.
Say(
"pick_valuable");
1675 foreach (
Thing item2
in list)
1677 Msg.
Say(
"pick_valuable2", item2);
1682 base.isPeace =
false;
1683 OnBeforeDeactivate();
1695 EClass.game.activeZone =
null;
1699 base.isGenerated =
false;
1701 if (forceRegenerate)
1730 Debug.Log(
"Unloaded Map:" +
this);
1744 base.dateExpire = 0;
1749 thing.isNPCProperty =
false;
1755 for (
int i = 0; i < 7; i++)
1799 SetMainFaction(
null);
1841 Zone topZone = GetTopZone();
1848 if (!base.isRandomSite && !(
this is
Zone_Field) && (topZone ==
null || topZone ==
this || topZone.
FindDeepestZone() ==
this))
1860 if (zone !=
null && zone.
GetTopZone() ==
this)
1872 Debug.Log(
"Deleting Zone:" +
this);
1878 else if (map !=
null)
1880 Debug.Log(
"Saving Zone:" +
this);
1881 map.
Save(base.pathSave);
1882 if (!base.isMapSaved)
1884 base.isMapSaved =
true;
1885 IO.DeleteDirectory(base.pathSave +
"Texture Replace");
1886 IO.CopyDir(pathTemp +
"Texture Replace", base.pathSave +
"/Texture Replace");
1906 children.ForeachReverse(delegate(
Spatial z)
1914 if (parent !=
null && parent.IsRegion && instance ==
null)
1920 base.isGenerated =
false;
1929 base.isGenerated =
false;
1930 Zone topZone = GetTopZone();
1931 if (topZone !=
this)
1936 children.ForeachReverse(delegate(
Spatial c)
1956 if (parent ==
null || parent.IsRegion)
1960 return parent as
Zone;
1966 for (
int i = 0; i < 1000; i++)
1972 return AddCard(t, point);
1975 return AddCard(t, center);
1985 return AddChara(
id, p.
x, p.
z);
1995 return AddThing(
id, p.
x, p.
z);
2000 return AddCard(t, point.
x, point.
z);
2005 return AddCard(t, 0, 0);
2018 chara.currentZone =
this;
2028 ignoreSpawnAnime =
false;
2033 chara.hasSpawned =
true;
2047 t.Chara.currentZone =
null;
2059 public T GetRandomSpot<T>() where T :
Trait
2064 public bool TryAddThingInSpot<T>(
Thing t,
bool useContainer =
true) where T :
Trait
2067 if (randomThing ==
null)
2074 List<Thing> list =
new List<Thing>();
2077 foreach (
Card item2
in item.ListCards())
2081 list.Add(item2.
Thing);
2085 if (TryAddThingInSharedContainer(t, list, add:
true, msg:
false,
null, sharedOnly:
false))
2094 public List<Thing> TryListThingsInSpot<T>(Func<Thing, bool> func =
null) where T :
TraitSpot
2096 List<T> list =
new List<T>();
2097 List<Thing> list2 =
new List<Thing>();
2102 list.Add(thing.
trait as T);
2105 foreach (T
item in list)
2107 foreach (
Point item2
in item.ListPoints(
null, onlyPassable:
false))
2115 if (thing2.
things.Count == 0)
2117 if (IsValid(thing2))
2131 bool IsValid(
Thing t)
2133 if (func !=
null && !func(t))
2150 if (containers ==
null)
2154 if (SearchDest() !=
null)
2173 foreach (
Thing container
in containers)
2175 Thing thing = container;
2183 if (windowSaveData !=
null)
2203 foreach (
int cat
in windowSaveData.
cats)
2216 else if (windowSaveData.
flag.HasFlag(flag))
2221 priority = windowSaveData.
priority;
2255 if (num == 0 || !destroyIfFail)
2282 List<T> list =
new List<T>();
2287 list.Add(thing2.
trait as T);
2290 foreach (T
item in list)
2292 foreach (
Point item2
in item.ListPoints(
null, onlyPassable:
false))
2300 if (thing3.
things.Count == 0)
2302 if (IsValid(thing3, insideContainer:
false))
2317 bool IsValid(
Thing t,
bool insideContainer)
2329 string text = IdProfile;
2335 text = ((base.lv < 0) ?
"Underground" :
"Sky");
2337 else if (region !=
null)
2343 name =
Lang.
GetList(
"zone_" + text.Split(
'/')[1]).RandomItem();
2345 for (
int i = 0; i < 3; i++)
2347 for (
int j = 0; j < 3; j++)
2352 if (text ==
"Random/R_Shore")
2354 base.isBeach =
true;
2371 bp.genSetting.seed = base.Seed;
2381 base.isGenerated =
true;
2392 if (IdBiome ==
"Sand" || IdBiome ==
"Water" || IsUnderwater)
2394 int num = 1 +
EClass.
rnd((IdBiome ==
"Water") ? 3 : 2);
2395 for (
int i = 0; i < num; i++)
2400 Thing t =
ThingGen.
Create(
"pearl_oyster",
new string[3] {
"wood_birch",
"poplar",
"coralwood" }.RandomItem(), ContentLv);
2405 for (
int j = 0; j < num; j++)
2416 for (
int k = 0; k < 30 +
EClass.
rnd(30); k++)
2439 foreach (
Point point
in r.points)
2443 map.
SetObj(point.
x, point.
z, num6);
2457 foreach (
Point point2
in r.points)
2469 foreach (
Point point3
in r.points)
2476 if (zone_Field !=
null)
2481 for (
int l = 0; l < num4; l++)
2525 for (
int i = 0; i < 3 +
EClass.
rnd(4); i++)
2538 if (r.points.Count <= 4)
2543 List<Point> points = r.points;
2545 "altarPoint".lang(randomReligion.NameDomain.lang());
2550 for (
int i = 0; i < 2 +
EClass.
rnd(2); i++)
2555 if (points[0].Installed ==
null)
2561 if (
item.x % 3 == 0 &&
item.z % 2 == 0 &&
item != points[0] && !
item.Equals(points[0].Front) &&
item.Installed ==
null)
2563 thing = ThingGen.Create(
"pillar1");
2564 EClass._zone.AddCard(thing, item).Install();
2567 item.SetFloor(3, 6);
2575 if (MakeEnemiesNeutral)
2582 chara.hostility = hostility2;
2586 if (PrespawnRate != 0f && !IsSkyLevel)
2588 for (
int i = 0; i < (int)((
float)MaxSpawn * PrespawnRate); i++)
2594 TryGenerateBigDaddy();
2595 TryGenerateEvolved();
2596 TryGenerateShrine();
2601 if (OreChance <= 0f)
2608 string group =
"ore";
2609 if (EClass.rnd(5) == 0)
2615 foreach (
Point point in r.points)
2617 if (point.sourceBlock.ContainsTag(
"ore"))
2619 map.SetObj(point.x, point.z, randomMaterial.id, b, 1, 0);
2634 for (
int i = 0; i < 2 +
EClass.
rnd(2); i++)
2650 int num = (int)((
long)DangerLv * 125L / 100);
2668 Msg.
Say(
"sign_bigdaddy");
2675 for (
int i = 0; i < 3; i++)
2683 if (randomSpace ==
null)
2715 chara.c_originalHostility = (
Hostility)0;
2732 for (
int i = 0; i < tries; i++)
2772 if (setting ==
null)
2778 pos = GetSpawnPos(setting.position, setting.tries);
2789 if (IsUnderwater &&
EClass.
rnd(15) != 0)
2798 if (s.hostility !=
"")
2802 return s.biome == biome.name || s.biome.IsEmpty();
2805 int num = ((setting.dangerLv == -1) ? DangerLv : setting.dangerLv);
2809 idEle = setting.idEle
2811 int num2 = ((setting.filterLv == -1) ? num : setting.filterLv);
2814 num2 = ((num - 1) % 50 + 5) * 150 / 100;
2815 if (num2 >= 20 &&
EClass.
rnd(100) < num2)
2826 long num3 = ((setting.fixedLv == -1) ? cardRow.
LV : setting.fixedLv);
2827 bool flag = setting.fixedLv != -1 || DangerLvBoost > 0;
2830 num3 = (50L + (long)cardRow.
LV) * Mathf.Max(1, (num - 1) / 50);
2833 num3 += DangerLvBoost;
2834 if (setting.rarity ==
Rarity.Random && cardRow.
quality == 0)
2838 cardBlueprint.rarity =
Rarity.Legendary;
2839 num3 = num3 * 125 / 100;
2844 cardBlueprint.rarity = setting.rarity;
2848 num3 = num3 * 150 / 100;
2850 if (setting.isEvolved)
2852 num3 = num3 * 2 + 20;
2854 if (num3 != cardRow.
LV)
2856 cardBlueprint.lv = (int)Mathf.Min(num3, 100000000f);
2862 chara.isScaled =
false;
2864 AddCard(chara, pos);
2865 if (setting.forcedHostility.HasValue)
2867 Hostility c_originalHostility = (chara.hostility = setting.forcedHostility.Value);
2868 chara.c_originalHostility = c_originalHostility;
2899 if (setting.isEvolved)
2901 chara.c_bossType =
BossType.Evolved;
2908 return fieldElements.
Has(idEle);
2913 fieldElements.
SetBase(idEle, a);
2918 dirtyElectricity =
false;
2919 bool flag = GetSoilCost() > MaxSoil;
2920 base.electricity = elements.
Value(2201) * 10 + BaseElectricity;
2934 base.electricity += 20;
2949 bool flag = GetSoilCost() > MaxSoil;
2971 sum += elements.
Value(2201) * 10 + BaseElectricity;
2986 public void SetBGM(List<int> ids,
bool refresh =
true,
float fadeDuration = 0f)
2991 foreach (
int id in ids)
2999 UnityEngine.Object.DestroyImmediate(map.
plDay);
3006 if (fadeDuration > 0f)
3008 EClass.
Sound.StopBGM(fadeDuration, playLastBGM:
false, delegate
3023 public void SetBGM(
int id = -1,
bool refresh =
true,
float fadeDuration = 0f)
3025 SetBGM(
new List<int> {
id }, refresh, fadeDuration);
3030 if (map.
plDay ==
null)
3032 map.plDay = CreatePlaylist(ref map.
_plDay,
EClass.
Sound.GetPlaylist(IDPlayList));
3039 UnityEngine.Object.DestroyImmediate(map.
plDay);
3051 Playlist playlist = map.
plDay;
3054 if (
item.playlist !=
null)
3056 playlist =
item.playlist;
3059 if (IDPlaylistOverwrite !=
null)
3061 playlist =
EClass.
Sound.GetPlaylist(IDPlaylistOverwrite);
3066 if (room !=
null && room.
lot !=
null && room.
lot.
idBGM != 0)
3069 if (playlist.list[0].data?.id != room.
lot.
idBGM)
3086 Playlist playlist =
EClass.
Sound.plBlank.Instantiate();
3087 if (list.Count == 0 && (
bool)mold)
3089 list = mold.ToInts();
3090 playlist.shuffle = mold.shuffle;
3091 playlist.minSwitchTime = mold.minSwitchTime;
3092 playlist.nextBGMOnSwitch = mold.nextBGMOnSwitch;
3093 playlist.ignoreLoop = mold.ignoreLoop;
3094 playlist.keepBGMifSamePlaylist = mold.keepBGMifSamePlaylist;
3095 playlist.name = mold.name;
3097 foreach (
int item in list)
3099 playlist.list.Add(
new Playlist.Item
3101 data = EClass.core.refs.dictBGM.TryGetValue(item, 1)
3120 return GetDeepestLv(ref max);
3125 if (Mathf.Abs(base.lv) > Mathf.Abs(max))
3129 foreach (
Spatial child
in children)
3131 (child as
Zone).GetDeepestLv(ref max);
3138 if (landFeats ==
null)
3140 landFeats =
new List<int>();
3142 string[] listBase = IDBaseLandFeat.Split(
',');
3143 string[] array = listBase;
3144 foreach (
string text
in array)
3146 if (!text.IsEmpty())
3151 if (listBase.Length == 1)
3155 if (e.category !=
"landfeat" || e.chance == 0)
3160 string[] tag = e.tag;
3161 foreach (
string text2 in tag)
3163 if (text2.StartsWith(
"bf"))
3166 if (listBase[0] == text2)
3173 return flag ? true :
false;
3176 landFeats.Add(row.
id);
3179 landFeats.Add(row.
id);
3183 List<Element> list2 =
new List<Element>();
3184 foreach (
int landFeat
in landFeats)
3193 ZipFile zipFile = ZipFile.Read(path);
3194 zipFile.ExtractExistingFile = ExtractExistingFileAction.OverwriteSilently;
3195 zipFile.ExtractAll(pathTemp);
3214 IO.CreateTempDirectory();
3219 map.
Save(IO.TempPath +
"/", zoneExportData, partial);
3220 map.
ExportMetaData(IO.TempPath +
"/", Path.GetFileNameWithoutExtension(path), partial);
3221 if (partial ==
null)
3223 IO.CopyDir(base.pathSave +
"Texture Replace", IO.TempPath +
"/Texture Replace");
3225 IO.SaveFile(IO.TempPath +
"/export", zoneExportData, compress:
true);
3226 using (ZipFile zipFile =
new ZipFile())
3228 zipFile.ExtractExistingFile = ExtractExistingFileAction.OverwriteSilently;
3229 zipFile.AddDirectory(IO.TempPath);
3233 IO.DeleteTempDirectory();
3235 catch (Exception ex)
3237 EClass.
ui.Say(ex.Message +
":" + path);
3246 if (!
string.IsNullOrEmpty(text))
3259 if (array.Length != 0)
3261 Zone_User zone_User = SpatialGen.Create(
"user", EClass.world.region, register: true) as Zone_User;
3262 zone_User.path = array[0];
3263 Thing thing = ThingGen.Create(
"teleporter");
3264 thing.c_uidZone = zone_User.uid;
3265 EClass._zone.AddCard(thing, EClass.pc.pos);
3276 catch (Exception ex)
3286 string text = pathExport;
3289 Msg.
Say(
"Exported Map:" + text);
3304 return -10000000 + base.uid;
3308 return -8000000 + base.uid;
3312 return -9000000 + base.uid;
3316 return -7000000 + base.uid;
3320 return 1000000 + base.uid;
3340 AddCard(chara, point);
3341 Msg.
Say(
"guestArrive", chara);
3348 AddCard(chara, point);
3356 if (base.IsPlayerFaction)
3376 foreach (
Thing sucker
in Suckers)
3381 if (RespawnRate != 0f)
3391 if (num < MaxRespawn)
3393 for (
int i = 0; i < RespawnPerHour; i++)
3399 if (!date.IsRealTime &&
EClass.
rnd(24) == 0)
3411 if (base.IsPlayerFaction)
3419 if (base.IsPlayerFaction)
3458 HashSet<int> hashSet =
new HashSet<int>();
3465 foreach (
Point item in traitSpotFarm.ListPoints(
null, onlyPassable:
false))
3467 hashSet.Add(
item.index);
3471 EClass.player.isAutoFarming =
false;
3478 void Perform(HashSet<int> farmMap)
3483 if (farmMap !=
null)
3487 if (!farmMap.Contains(c.index))
3492 else if (farmMap.Contains(c.
index))
3506 if (!EClass.player.isAutoFarming && c.growth.HaltGrowth() && (c.IsFarmField || c.IsTopWater) && (!isWinter || !date.IsRealTime))
3511 if (!flag && (plantData ==
null || plantData.fert >= 0))
3517 if (date.sunMap == null)
3527 else if (c.
detail !=
null)
3529 c.Things.ForeachReverse(delegate(Thing t)
3531 if (t.IsInstalled && t.trait is TraitSeed && !t.isSale)
3533 (t.trait as TraitSeed).TrySprout(force: false, sucker: false, date);
3546 c.isWatered =
false;
3555 foreach (
Spatial child
in children)
3557 if (!(child is
Zone_Field) && _x == child.
x && _y == child.
y)
3559 return child as
Zone;
3563 foreach (
Spatial child2
in children)
3565 if (_x == child2.
x && _y == child2.
y)
3567 return child2 as
Zone;
3584 bool flag = EClass.player.IsCriminal && HasLaw && !AllowCriminal && !IsPCFaction;
3590 chara.hostility = hostility;
3605 dictCitizen.Clear();
3608 if (
item.trait.IsCitizen && !
item.IsGlobal && !
item.isSubsetCard)
3617 base.isAlarmSet = enable;
3643 base.influence += a;
3646 Msg.
Say(
"gainInfluence", Name, a.ToString() ??
"");
3653 base.development += a;
3656 Msg.
Say(
"gainDevelopment", Name, a.ToString() ??
"");
3662 if (!IsPCFaction && (!(
this is
Zone_Town) || base.lv != 0))
3666 Debug.Log(
"Updating Quest:" + force);
3673 if (
item.quest.IsExpired || completedQuests.Contains(
item.quest.uid) || force)
3691 maxQuest = 4 + EClass.rnd(4);
3693 completedQuests.Clear();
3695 List<Tuple<string, int>> listTag =
new List<Tuple<string, int>>();
3699 array =
new string[9] {
"supply/8",
"deliver/7",
"food/8",
"escort/4",
"deliver/4",
"monster/0",
"war/0",
"farm/0",
"music/0" };
3701 string[] array2 = array;
3702 for (
int i = 0; i < array2.Length; i++)
3704 string[] array3 = array2[i].Split(
'/');
3705 listTag.Add(
new Tuple<string, int>(array3[0], array3[1].ToInt()));
3707 for (
int j = 0; j < map.charas.Count * 2; j++)
3725 foreach (Tuple<string, int> item2
in listTag)
3727 if (a.tags.Contains(item2.Item1))
3737 return a.chance * num2;
3749 List<Chara> list =
new List<Chara>();
3785 for (
int i = 0; i < 2 +
EClass.
rnd(4); i++)
3787 Point point = GetPos();
3795 thing.isLostProperty =
true;
3797 int num2 = (thing.c_lockLv =
EClass.
rndHalf(Mathf.Min(base.development / 10 + 10, 50)));
3814 static Point GetPos()
3816 for (
int j = 0; j < 10; j++)
3830 bool flag =
this is
Zone_Yowyn && base.lv == -1;
3837 if (EClass.player.doneBackers.Contains(a.id))
3855 if (chara.
id !=
"follower")
3866 if (
item.chara == chara.
id)
3878 if (fortuneRoll ==
null)
3883 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(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)
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()