2using System.Collections.Generic;
52 public Dictionary<int, string>
dictCitizen =
new Dictionary<int, string>();
83 public static List<Thing>
Suckers =
new List<Thing>();
95 base.uidBoss = value?.
uid ?? 0;
145 public virtual string IDPlayList => base.source.idPlaylist.IsEmpty((base.lv != 0) ?
"Underground" :
null);
149 public virtual string IDHat =>
null;
157 if (base.source.idFile.Length != 0)
159 return base.source.idFile[
fileVariation] + ((base.lv == 0) ?
"" : (
"_F" + base.lv));
165 public string pathTemp => GameIO.pathTemp + base.uid +
"/";
283 public virtual int MaxLv => 99999999;
285 public virtual int MinLv => -99999999;
317 public virtual int MaxSpawn => map.bounds.Width * map.bounds.Height / 175 + 2;
363 return base.source.tag.Contains(
"return");
375 return base.lv <
MaxLv;
395 public virtual bool UseFog => base.lv < 0;
407 return base.source.tag.Contains(
"light");
419 public virtual FlockController.SpawnType
FlockType => FlockController.SpawnType.Default;
429 return "conquered".lang();
570 return base.source.id;
584 return " " +
"zoneLevelB".lang((_lv * -1).
ToString() ??
"");
586 return " " +
"zoneLevel".lang((_lv + 1).
ToString() ??
"");
620 EClass.game.config.reverseSnow =
false;
627 EClass.pc.global.transition.uidLastZone = 0;
635 EClass.game.activeZone =
this;
637 Debug.Log(
NameWithLevel +
"/" +
id +
"/" + base.uid +
"/" + base.isGenerated +
"/" +
IsLoaded +
"/" + File.Exists(base.pathSave +
"map"));
638 if (base.isGenerated && !
IsLoaded && !File.Exists(base.pathSave +
"map"))
640 Debug.Log(
"(Bug) File does not exist:" +
destryoed +
"/" + base.pathSave);
641 base.isGenerated =
false;
646 if (flag2 &&
map !=
null)
651 string lhs = CorePath.ZoneSave +
"_new.z";
652 bool flag3 = File.Exists(fullName) && !PathComparer.Default.Equals(lhs, fullName);
655 if (!flag3 && (base.source.tag.Contains(
"addMap") || flag4))
657 string[] array =
new string[4]
664 for (
int i = 0; i < array.Length; i++)
666 FileInfo fileInfo = PackageIterator.GetFiles(array[i]).LastOrDefault();
667 if (fileInfo !=
null)
669 fullName = fileInfo.FullName;
676 if (!base.isGenerated && (!flag4 || !flag3))
678 Debug.Log(
"generating random map");
701 Debug.Log(
"zone is already loaded");
715 Debug.Log(base.isGenerated +
"/" + flag5 +
"/" + flag2 +
"/" +
IDSubset);
716 if (!base.isGenerated || flag5 || flag2)
718 Debug.Log(
"importing map:" + fullName);
723 IO.DeleteDirectory(
pathTemp +
"Texture Replace");
728 zoneExportData =
Import(fullName);
729 base.isGenerated =
true;
733 zoneExportData.orgMap =
GameIO.LoadFile<
Map>(base.pathSave +
"map");
736 catch (Exception message)
740 base.isGenerated =
true;
745 Debug.Log(
"loading map: imported? " +
isImported +
" regenerate? " + flag5);
751 catch (Exception message2)
753 EClass.
ui.Say(
$"Can't load map '{base.uid}/{Name}'; File may be corrupted.\n" +
"Try replacing the following file if you have a backup:\n" + text +
"\nDefault file is at:\n" + fullName);
754 Debug.LogError(message2);
772 if (zoneExportData.
orgMap !=
null)
776 map.charas = orgMap.
charas;
786 map.
cells[j, k].
isSeen = array2[j * EClass._map.Size + k].GetBit(1);
792 Debug.Log(
"Importing New Chara:" +
item.id +
"/" +
item.Name +
"/" +
item.orgPos);
807 thing.stackOrder = 0;
832 if (t.
id ==
"medal" || t.
id ==
"856")
865 thing4.isSubsetCard =
false;
924 thing7.isNPCProperty =
false;
943 point2.cell.isSeen =
false;
952 PathManager.Instance._pathfinder.PunishChangeDirection =
false;
956 EClass._map.config.idSceneProfile =
"indoor_water";
959 if (flag &&
IsTown && base.lv == 0)
963 if (base.visitCount == 0)
971 map.effectManager.GetOrCreate(c.GetSharedPoint());
990 Map.isDirtySunMap =
true;
1002 card.CalculateFOV();
1006 chara.dirtySpeed =
true;
1011 if (
card.IsUnique && !
card.IsPCFaction && !
card.IsPCParty)
1021 int @
int =
card.GetInt(55);
1026 if (chara2.
uid == @
int)
1030 chara.enemy = chara2;
1032 chara.calmCheckTurn = 20 +
EClass.
rnd(30);
1040 if (
card.c_uidMaster != 0 && chara.
master ==
null)
1053 else if (
card.IsInstalled &&
card.trait is
TraitDoor traitDoor &&
card.pos.HasChara && !traitDoor.IsOpen())
1055 traitDoor.ToggleDoor(sound:
false, refresh:
false);
1076 EClass.player.uidLastTown = 0;
1078 else if (
IsTown && base.lv == 0)
1080 EClass.player.uidLastTown = base.uid;
1116 List<Chara> list =
new List<Chara>();
1215 if (!(
id ==
"startVillage2"))
1221 SetBGM(121, refresh:
false);
1233 Msg.
Say(
"num_silvercat", num.ToString() ??
"");
1282 chara2.mana.value = 0;
1286 chara2.stamina.value = 0;
1291 chara2.resistCon =
null;
1295 Msg.ignoreAll =
true;
1297 chara2.
HealHP((
int)((
long)Mathf.Max(1, chara2.
MaxHP) * (
long)Mathf.Min(num, 20) / 20));
1298 chara2.
mana.
Mod(Mathf.Max(1, chara2.
mana.
max) * Mathf.Min(num, 20) / 20);
1300 Msg.ignoreAll =
false;
1304 Debug.Log(
"Last Active:" + base.lastActive);
1318 if (!
item.IsPCParty)
1320 item.OnSleep(200, num2);
1321 if (
item.conSleep !=
null)
1323 item.conSleep.Kill();
1329 if (
item.things.Count > 20)
1336 VirtualDate.current = virtualDate;
1349 VirtualDate.current =
null;
1355 foreach (
Chara item2
in list)
1363 if (item2.
id ==
"bee")
1367 if (num2 > 0 && item2.
IsGuest())
1377 item2.
SetAI(goalWork);
1380 (goalWork as
GoalWork).FindWork(item2);
1384 item2.
SetAI(goalWork);
1387 (goalWork as
GoalWork).FindWork(item2);
1397 List<Thing> list2 =
new List<Thing>();
1405 if (num4 >= list2.Count)
1409 for (
int j = num4; j < list2.Count; j++)
1416 chara.c_originalHostility = c_originalHostility;
1426 bool flag = zone ==
null || zone.lv > base.
lv;
1450 float rate = zoneTransition?.
ratePos ?? (-1f);
1459 if (nearestPoint !=
null && nearestPoint.
IsValid)
1461 return nearestPoint;
1471 return new Point(zoneTransition.
x, zoneTransition.
z);
1479 if (traitTeleporter !=
null)
1483 if (traitTeleporter !=
null && !zoneTransition.
idTele.IsEmpty() && zoneTransition.
idTele == traitTeleporter.
id.IsEmpty(traitTeleporter.
GetParam(3)))
1497 if (randomThing2 !=
null)
1517 if (randomThing !=
null)
1537 flag = base.lv <= 0;
1563 return new Point(zoneTransition.
x, zoneTransition.
z);
1579 if (thing5.
trait is
TraitNewZone { zone: not null } traitNewZone && zone !=
null && traitNewZone.
zone.
uid == zone.uid)
1581 if (c !=
null && enterState != 0)
1583 c.SetDir(traitNewZone.owner.dir);
1585 return traitNewZone.GetExitPos();
1590 if (thing6.
trait is
TraitNewZone traitNewZone2 && ((flag && traitNewZone2.IsUpstairs) || (!flag && traitNewZone2.IsDownstairs)))
1592 if (c !=
null && enterState != 0)
1594 c.SetDir(traitNewZone2.owner.dir);
1596 return traitNewZone2.GetExitPos();
1609 if (point ==
null &&
EClass.
rnd(4) != 0)
1626 Point spawnPosPC =
null;
1631 if (spawnPosPC ==
null)
1659 c.isRestrained =
false;
1663 Point pos = (c.IsPC ? spawnPosPC : (c.IsPCParty ? spawnPosPC.GetNearestPoint(allowBlock:
false, allowChara:
false, allowInstalled:
true, ignoreCenter:
true) :
GetSpawnPos(c)));
1668 pos.
Set(spawnPosPC);
1673 if (!spawnPosPC.ForeachNearestPoint(delegate(
Point p)
1681 }, allowBlock:
false, EClass.pc.party.members.Count >= 12, allowInstalled:
true, ignoreCenter:
true, EClass._zone.IsRegion ? 2 : 6))
1683 pos.
Set(spawnPosPC);
1688 c.global.transition =
null;
1696 Point nearestPoint = spawnPosPC.
GetNearestPoint(allowBlock:
false, allowChara:
false, allowInstalled:
true, ignoreCenter:
true);
1698 item.pos.Set(nearestPoint);
1709 List<Thing> list =
new List<Thing>();
1721 if (
item.IsContainer)
1739 Msg.
Say(
"pick_valuable");
1740 foreach (
Thing item2
in list)
1742 Msg.
Say(
"pick_valuable2", item2);
1749 base.isPeace =
false;
1763 EClass.game.activeZone =
null;
1767 base.isGenerated =
false;
1798 Debug.Log(
"Unloaded Map:" +
this);
1812 base.dateExpire = 0;
1817 thing.isNPCProperty =
false;
1823 for (
int i = 0; i < 7; i++)
1916 if (!base.isRandomSite && !(
this is
Zone_Field) && (topZone ==
null || topZone ==
this || topZone.
FindDeepestZone() ==
this))
1928 if (zone !=
null && zone.
GetTopZone() ==
this)
1940 Debug.Log(
"Deleting Zone:" +
this);
1946 else if (
map !=
null)
1948 Debug.Log(
"Saving Zone:" +
this);
1950 if (!base.isMapSaved)
1952 base.isMapSaved =
true;
1953 IO.DeleteDirectory(base.pathSave +
"Texture Replace");
1954 IO.CopyDir(
pathTemp +
"Texture Replace", base.pathSave +
"/Texture Replace");
1988 base.isGenerated =
false;
1997 base.isGenerated =
false;
1999 if (topZone !=
this)
2034 for (
int i = 0; i < 1000; i++)
2086 chara.currentZone =
this;
2101 chara.hasSpawned =
true;
2115 t.Chara.currentZone =
null;
2135 if (randomThing ==
null)
2142 List<Thing> list =
new List<Thing>();
2145 foreach (
Card item2
in item.ListCards())
2149 list.Add(item2.
Thing);
2164 List<T> list =
new List<T>();
2165 List<Thing> list2 =
new List<Thing>();
2170 list.Add(thing.
trait as T);
2173 foreach (T
item in list)
2175 foreach (
Point item2
in item.ListPoints(
null, onlyPassable:
false))
2183 if (thing2.
things.Count == 0)
2185 if (IsValid(thing2))
2199 bool IsValid(
Thing t)
2201 if (func !=
null && !func(t))
2218 if (containers ==
null)
2222 if (SearchDest() !=
null)
2241 foreach (
Thing container
in containers)
2243 Thing thing = container;
2251 if (windowSaveData !=
null)
2271 foreach (
int cat
in windowSaveData.
cats)
2284 else if (windowSaveData.
flag.HasFlag(flag))
2289 priority = windowSaveData.
priority;
2323 if (num == 0 || !destroyIfFail)
2350 List<T> list =
new List<T>();
2355 list.Add(thing2.
trait as T);
2358 foreach (T
item in list)
2360 foreach (
Point item2
in item.ListPoints(
null, onlyPassable:
false))
2368 if (thing3.
things.Count == 0)
2370 if (IsValid(thing3, insideContainer:
false))
2385 bool IsValid(
Thing t,
bool insideContainer)
2403 text = ((base.lv < 0) ?
"Underground" :
"Sky");
2405 else if (region !=
null)
2413 for (
int i = 0; i < 3; i++)
2415 for (
int j = 0; j < 3; j++)
2420 if (text ==
"Random/R_Shore")
2422 base.isBeach =
true;
2439 bp.genSetting.seed = base.Seed;
2449 base.isGenerated =
true;
2464 for (
int i = 0; i < num; i++)
2474 for (
int j = 0; j < num; j++)
2485 if (!randomSurface3.
HasObj)
2493 for (
int l = 0; l < 30 +
EClass.
rnd(30); l++)
2516 foreach (
Point point
in r.points)
2534 foreach (
Point point2
in r.points)
2546 foreach (
Point point3
in r.points)
2553 if (zone_Field !=
null)
2558 for (
int m = 0; m < num4; m++)
2581 if (base.Tile.isRoad)
2617 for (
int i = 0; i < 3 +
EClass.
rnd(4); i++)
2630 if (r.points.Count <= 4)
2635 List<Point> points = r.points;
2637 "altarPoint".lang(randomReligion.NameDomain.lang());
2642 for (
int i = 0; i < 2 +
EClass.
rnd(2); i++)
2653 if (
item.x % 3 == 0 &&
item.z % 2 == 0 &&
item != points[0] && !
item.Equals(points[0].Front) &&
item.Installed ==
null)
2655 thing = ThingGen.Create(
"pillar1");
2656 EClass._zone.AddCard(thing, item).Install();
2659 item.SetFloor(3, 6);
2667 if (MakeEnemiesNeutral)
2674 chara.hostility = hostility2;
2678 if (PrespawnRate != 0f && !IsSkyLevel)
2680 for (
int i = 0; i < (int)((
float)MaxSpawn * PrespawnRate); i++)
2686 TryGenerateBigDaddy();
2687 TryGenerateEvolved();
2688 TryGenerateShrine();
2693 if (OreChance <= 0f)
2700 string group =
"ore";
2701 if (EClass.rnd(5) == 0)
2707 foreach (
Point point in r.points)
2709 if (point.sourceBlock.ContainsTag(
"ore"))
2711 map.SetObj(point.x, point.z, randomMaterial.id, b, 1, 0);
2726 for (
int i = 0; i < 2 +
EClass.
rnd(2); i++)
2743 List<string> list =
new List<string> {
"big_daddy",
"big_daddy2" };
2745 Spawn(list[0], spawnPos);
2748 Spawn(list[1], spawnPos.
GetNearestPoint(allowBlock:
false, allowChara:
false));
2750 Msg.
Say(
"sign_bigdaddy");
2752 void Spawn(
string id,
Point pos)
2754 int num = (int)((
long)DangerLv * 125L / 100);
2778 for (
int i = 0; i < 3; i++)
2786 if (randomSpace ==
null)
2818 chara.c_originalHostility = (
Hostility)0;
2835 for (
int i = 0; i < tries; i++)
2875 if (setting ==
null)
2881 pos = GetSpawnPos(setting.position, setting.tries);
2892 if (IsUnderwater &&
EClass.
rnd(15) != 0)
2901 if (s.hostility !=
"")
2905 return s.biome == biome.name || s.biome.IsEmpty();
2909 ShouldPass = (
SourceChara.Row s) => (!IsInstance || !(s.hostility !=
"") || !s.tag.Contains(
"cat")) ?
true :
false
2911 int num = ((setting.dangerLv == -1) ? DangerLv : setting.dangerLv);
2915 idEle = setting.idEle
2917 int num2 = ((setting.filterLv == -1) ? num : setting.filterLv);
2920 num2 = ((num - 1) % 50 + 5) * 150 / 100;
2921 if (num2 >= 20 &&
EClass.
rnd(100) < num2)
2932 long num3 = ((setting.fixedLv == -1) ? cardRow.
LV : setting.fixedLv);
2933 bool flag = setting.fixedLv != -1 || DangerLvBoost > 0;
2934 num3 += setting.addLv;
2937 num3 = (50L + (long)cardRow.
LV) * Mathf.Max(1, (num - 1) / 50);
2940 num3 += DangerLvBoost;
2941 if (setting.rarity ==
Rarity.Random && cardRow.
quality == 0)
2945 cardBlueprint.rarity =
Rarity.Legendary;
2946 num3 = num3 * 125 / 100;
2951 cardBlueprint.rarity = setting.rarity;
2955 num3 = num3 * 150 / 100;
2957 if (setting.isEvolved)
2959 num3 = num3 * 2 + 20;
2961 if (num3 != cardRow.
LV)
2963 cardBlueprint.lv = (int)Mathf.Min(num3, 100000000f);
2969 chara.isScaled =
false;
2971 AddCard(chara, pos);
2972 if (setting.forcedHostility.HasValue)
2974 Hostility c_originalHostility = (chara.hostility = setting.forcedHostility.Value);
2975 chara.c_originalHostility = c_originalHostility;
3006 if (setting.isEvolved)
3008 chara.c_bossType =
BossType.Evolved;
3010 if (DangerLv >= 20 && !IsPCFaction && !IsTown &&
EClass.
rnd(200) == 0)
3019 return fieldElements.
Has(idEle);
3024 fieldElements.
SetBase(idEle, a);
3029 dirtyElectricity =
false;
3030 bool flag = GetSoilCost() > MaxSoil;
3031 base.electricity = elements.
Value(2201) * 10 + BaseElectricity;
3045 base.electricity += 20;
3060 bool flag = GetSoilCost() > MaxSoil;
3082 sum += elements.
Value(2201) * 10 + BaseElectricity;
3097 public void SetBGM(List<int> ids,
bool refresh =
true,
float fadeDuration = 0f)
3102 foreach (
int id in ids)
3110 UnityEngine.Object.DestroyImmediate(map.
plDay);
3117 if (fadeDuration > 0f)
3119 EClass.
Sound.StopBGM(fadeDuration, playLastBGM:
false, delegate
3134 public void SetBGM(
int id = -1,
bool refresh =
true,
float fadeDuration = 0f)
3136 SetBGM(
new List<int> {
id }, refresh, fadeDuration);
3141 if (map.
plDay ==
null)
3143 map.plDay = CreatePlaylist(ref map.
_plDay,
EClass.
Sound.GetPlaylist(IDPlayList));
3150 UnityEngine.Object.DestroyImmediate(map.
plDay);
3162 Playlist playlist = map.
plDay;
3165 if (
item.playlist !=
null)
3167 playlist =
item.playlist;
3170 if (IDPlaylistOverwrite !=
null)
3172 playlist =
EClass.
Sound.GetPlaylist(IDPlaylistOverwrite);
3177 if (room !=
null && room.
lot !=
null && room.
lot.
idBGM != 0)
3180 if (playlist.list[0].data?.id != room.
lot.
idBGM)
3197 return ModUtil.CreatePlaylist(ref list, mold);
3213 return GetDeepestLv(ref max);
3218 if (Mathf.Abs(base.lv) > Mathf.Abs(max))
3222 foreach (
Spatial child
in children)
3224 (child as
Zone).GetDeepestLv(ref max);
3231 if (landFeats ==
null)
3233 landFeats =
new List<int>();
3235 string[] listBase = IDBaseLandFeat.Split(
',');
3236 string[] array = listBase;
3237 foreach (
string text
in array)
3239 if (!text.IsEmpty())
3244 if (listBase.Length == 1)
3248 if (e.category !=
"landfeat" || e.chance == 0)
3253 string[] tag = e.tag;
3254 foreach (
string text2 in tag)
3256 if (text2.StartsWith(
"bf"))
3259 if (listBase[0] == text2)
3266 return flag ? true :
false;
3269 landFeats.Add(row.
id);
3272 landFeats.Add(row.
id);
3276 List<Element> list2 =
new List<Element>();
3277 foreach (
int landFeat
in landFeats)
3286 ZipFile zipFile = ZipFile.Read(path);
3287 zipFile.ExtractExistingFile = ExtractExistingFileAction.OverwriteSilently;
3288 zipFile.ExtractAll(pathTemp);
3307 IO.CreateTempDirectory();
3312 map.
Save(IO.TempPath +
"/", zoneExportData, partial);
3313 map.
ExportMetaData(IO.TempPath +
"/", Path.GetFileNameWithoutExtension(path), partial);
3314 if (partial ==
null)
3316 IO.CopyDir(base.pathSave +
"Texture Replace", IO.TempPath +
"/Texture Replace");
3318 IO.SaveFile(IO.TempPath +
"/export", zoneExportData, compress:
true);
3319 using (ZipFile zipFile =
new ZipFile())
3321 zipFile.ExtractExistingFile = ExtractExistingFileAction.OverwriteSilently;
3322 zipFile.AddDirectory(IO.TempPath);
3326 IO.DeleteTempDirectory();
3328 catch (Exception ex)
3330 EClass.
ui.Say(ex.Message +
":" + path);
3339 if (!
string.IsNullOrEmpty(text))
3352 if (array.Length != 0)
3354 Zone_User zone_User = SpatialGen.Create(
"user", EClass.world.region, register: true) as Zone_User;
3355 zone_User.path = array[0];
3356 Thing thing = ThingGen.Create(
"teleporter");
3357 thing.c_uidZone = zone_User.uid;
3358 EClass._zone.AddCard(thing, EClass.pc.pos);
3369 catch (Exception ex)
3379 string text = pathExport;
3382 Msg.
Say(
"Exported Map:" + text);
3397 return -10000000 + base.uid;
3401 return -8000000 + base.uid;
3405 return -9000000 + base.uid;
3409 return -7000000 + base.uid;
3413 return 1000000 + base.uid;
3433 AddCard(chara, point);
3434 Msg.
Say(
"guestArrive", chara);
3441 AddCard(chara, point);
3449 if (base.IsPlayerFaction)
3469 foreach (
Thing sucker
in Suckers)
3474 if (RespawnRate != 0f)
3484 if (num < MaxRespawn)
3486 for (
int i = 0; i < RespawnPerHour; i++)
3492 if (!date.IsRealTime &&
EClass.
rnd(24) == 0)
3504 if (base.IsPlayerFaction)
3512 if (base.IsPlayerFaction)
3551 HashSet<int> hashSet =
new HashSet<int>();
3558 foreach (
Point item in traitSpotFarm.ListPoints(
null, onlyPassable:
false))
3560 hashSet.Add(
item.index);
3564 EClass.player.isAutoFarming =
false;
3571 void Perform(HashSet<int> farmMap)
3576 if (farmMap !=
null)
3580 if (!farmMap.Contains(c.index))
3585 else if (farmMap.Contains(c.
index))
3599 if (!EClass.player.isAutoFarming && c.growth.HaltGrowth() && (c.IsFarmField || c.IsTopWater) && (!isWinter || !date.IsRealTime))
3604 if (!flag && (plantData ==
null || plantData.fert >= 0))
3610 if (date.sunMap == null)
3620 else if (c.detail !=
null)
3622 c.Things.ForeachReverse(delegate(Thing t)
3624 if (t.IsInstalled && t.trait is TraitSeed && !t.isSale)
3626 (t.trait as TraitSeed).TrySprout(force: false, sucker: false, date);
3630 else if (
EClass.
rnd(20) == 0 && GrowWeed && c.CanGrowWeed &&
EClass.
rnd(weedChance) == 0)
3633 if (c.growth !=
null)
3635 c.growth.SetStage(0);
3639 c.isWatered =
false;
3648 foreach (
Spatial child
in children)
3650 if (!(child is
Zone_Field) && _x == child.
x && _y == child.
y)
3652 return child as
Zone;
3656 foreach (
Spatial child2
in children)
3658 if (_x == child2.
x && _y == child2.
y)
3660 return child2 as
Zone;
3677 bool flag = EClass.player.IsCriminal && HasLaw && !AllowCriminal && !IsPCFaction;
3683 chara.hostility = hostility;
3698 dictCitizen.Clear();
3701 if (
item.trait.IsCitizen && !
item.IsGlobal && !
item.isSubsetCard)
3710 base.isAlarmSet = enable;
3736 base.influence += a;
3739 Msg.
Say(
"gainInfluence", Name, a.ToString() ??
"");
3746 base.development += a;
3749 Msg.
Say(
"gainDevelopment", Name, a.ToString() ??
"");
3755 if (!IsPCFaction && (!(
this is
Zone_Town) || base.lv != 0))
3759 Debug.Log(
"Updating Quest:" + force);
3766 if (
item.quest.IsExpired || completedQuests.Contains(
item.quest.uid) || force)
3784 maxQuest = 4 + EClass.rnd(4);
3786 completedQuests.Clear();
3788 List<Tuple<string, int>> listTag =
new List<Tuple<string, int>>();
3792 array =
new string[9] {
"supply/8",
"deliver/7",
"food/8",
"escort/4",
"deliver/4",
"monster/0",
"war/0",
"farm/0",
"music/0" };
3794 string[] array2 = array;
3795 for (
int i = 0; i < array2.Length; i++)
3797 string[] array3 = array2[i].Split(
'/');
3798 listTag.Add(
new Tuple<string, int>(array3[0], array3[1].ToInt()));
3800 for (
int j = 0; j < map.charas.Count * 2; j++)
3818 foreach (Tuple<string, int> item2
in listTag)
3820 if (a.tags.Contains(item2.Item1))
3830 return a.chance * num2;
3842 List<Chara> list =
new List<Chara>();
3878 for (
int i = 0; i < 2 +
EClass.
rnd(4); i++)
3880 Point point = GetPos();
3888 thing.isLostProperty =
true;
3890 int num2 = (thing.c_lockLv =
EClass.
rndHalf(Mathf.Min(base.development / 10 + 10, 50)));
3907 static Point GetPos()
3909 for (
int j = 0; j < 10; j++)
3923 bool flag =
this is
Zone_Yowyn && base.lv == -1;
3930 if (EClass.player.doneBackers.Contains(a.id))
3948 if (chara.
id !=
"follower")
3959 if (
item.chara == chara.
id)
3971 if (fortuneRoll ==
null)
3976 if (refresh || fortuneRoll.
count == 0)
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
SourceMaterial.Row material
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 GetRandomPointInRadius(int minRadius, int maxRadius, bool requireLos=true, bool allowChara=true, bool allowBlocked=false, int tries=2000)
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
static Spatial Create(string id, Spatial parent, bool register, int x=-99999, int y=-99999, int icon=0)
void SetInt(int id, int value=0)
virtual int DangerLvBoost
virtual void SetMainFaction(Faction f)
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 HomeGuest(int lv)
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(string idSource)
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)
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
Thing TryGetRestock< T >(string idCat)
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
List< Thing > TryListThingsInSpot< T >(Func< Thing, bool > func=null)
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)
Zone FindOrCreateLevel(int destLv, string subId="")
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)
bool TryAddThingInSpot< T >(Thing t, bool useContainer=true)
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()
bool IsBelow(int _major, int _minor, int _batch)