Elin Decompiled Documentation EA 23.102 Nightly
Loading...
Searching...
No Matches
Region.cs
Go to the documentation of this file.
1using System.Collections.Generic;
2using System.Linq;
3using Newtonsoft.Json;
4using UnityEngine;
5
6public class Region : Zone
7{
8 public EloMap elomap = new EloMap();
9
10 [JsonProperty]
11 public int dateCheckSites;
12
13 public override bool WillAutoSave => false;
14
16
17 public override bool IsRegion => true;
18
19 public override int DangerLv => 1;
20
21 public override bool BlockBorderExit => true;
22
23 public override Point RegionPos => _regionPos.Set(EClass.pc.pos);
24
25 public override void OnActivate()
26 {
27 children.ForeachReverse(delegate(Spatial _z)
28 {
29 Zone zone2 = _z as Zone;
30 if (zone2.CanDestroy())
31 {
32 zone2.Destroy();
33 }
34 });
35 children.ForeachReverse(delegate(Spatial _z)
36 {
37 if (_z.destryoed)
38 {
39 children.Remove(_z);
40 }
41 });
42 children.ForEach(delegate(Spatial a)
43 {
44 Zone zone = a as Zone;
45 if (!zone.IsInstance && (zone.IsPCFaction || !(zone is Zone_Field)) && !(zone is Zone_SisterHouse))
46 {
47 elomap.SetZone(zone.x, zone.y, zone);
48 }
49 });
51 }
52
53 public void CheckRandomSites()
54 {
56 {
59 }
60 if (FindZone("foxtown_nefu") == null)
61 {
62 SpatialGen.Create("foxtown_nefu", this, register: true);
63 }
64 if (FindZone("little_garden") == null)
65 {
66 SpatialGen.Create("little_garden", this, register: true);
67 }
68 if (FindZone("cave_yeek") == null)
69 {
70 SpatialGen.Create("cave_yeek", this, register: true);
71 }
72 elomap.objmap.UpdateMeshImmediate();
73 }
74
75 public void RenewRandomSites()
76 {
78 Msg.Say("renewNefia");
79 Debug.Log(ListRandomSites().Count);
80 foreach (Zone item in ListRandomSites())
81 {
82 item.dateExpire = 1;
83 }
84 }
85
86 public void UpdateRandomSites()
87 {
88 List<Zone> list = ListRandomSites();
89 int num = 50 - list.Count;
90 if (num > 0)
91 {
92 for (int i = 0; i < num; i++)
93 {
94 CreateRandomSite(GetRandomPoint(), null, updateMesh: false);
95 }
96 }
97 }
98
99 public void InitElomap()
100 {
102 }
103
104 public Zone CreateRandomSite(Zone center, int radius = 8, string idSource = null, bool updateMesh = true, int lv = 0)
105 {
106 InitElomap();
107 return CreateRandomSite(GetRandomPoint(center.IsRegion ? (EClass.pc.pos.x + EClass.scene.elomap.minX) : center.x, center.IsRegion ? (EClass.pc.pos.z + EClass.scene.elomap.minY) : center.y, radius), idSource, updateMesh, lv);
108 }
109
110 private Zone CreateRandomSite(Point pos, string idSource, bool updateMesh, int lv = 0)
111 {
112 if (pos == null)
113 {
114 return null;
115 }
116 if (idSource.IsEmpty())
117 {
118 idSource = GetRandomSiteSource().id;
119 }
120 Zone zone = SpatialGen.Create(idSource, this, register: true, pos.x, pos.z) as Zone;
121 if (lv <= 0)
122 {
123 if (EClass.player.CountKeyItem("license_adv") == 0 && !EClass.debug.enable)
124 {
125 lv = ((EClass.rnd(3) == 0) ? EClass.pc.LV : EClass.pc.FameLv) * (75 + EClass.rnd(50)) / 100 + EClass.rnd(EClass.rnd(10) + 1) - 3;
126 if (lv >= 50)
127 {
128 lv = EClass.rndHalf(50);
129 }
130 }
131 else
132 {
133 lv = EClass.pc.FameLv * 100 / (100 + EClass.rnd(50)) + EClass.rnd(EClass.rnd(10) + 1) - 3;
134 if (EClass.rnd(10) == 0)
135 {
136 lv = lv * 3 / 2;
137 }
138 if (EClass.rnd(10) == 0)
139 {
140 lv /= 2;
141 }
142 }
143 }
144 zone._dangerLv = Mathf.Max(1, lv);
145 zone.isRandomSite = true;
146 zone.dateExpire = EClass.world.date.GetRaw() + 10080;
147 if (elomap.IsSnow(zone.x, zone.y))
148 {
149 zone.icon++;
150 }
151 elomap.SetZone(zone.x, zone.y, zone);
152 if (updateMesh)
153 {
154 elomap.objmap.UpdateMeshImmediate();
155 }
156 return zone;
157 }
158
160 {
161 return EClass.sources.zones.rows.Where((SourceZone.Row a) => a.tag.Contains("random") && (EClass.debug.enable || !a.tag.Contains("debug"))).ToList().RandomItemWeighted((SourceZone.Row a) => a.chance);
162 }
163
165 {
166 Point point = new Point();
167 for (int i = 0; i < 1000; i++)
168 {
169 point = map.bounds.GetRandomPoint();
170 point.x += elomap.minX;
171 point.z += elomap.minY;
172 if (elomap.CanBuildSite(point.x, point.z, 1))
173 {
174 return point;
175 }
176 }
177 return null;
178 }
179
180 public Point GetRandomPoint(int orgX, int orgY, int radius = 8, bool increaseRadius = false)
181 {
182 Point point = new Point();
183 for (int i = 0; i < 1000; i++)
184 {
185 point.x = orgX + Rand.Range(-radius / 2, radius / 2);
186 point.z = orgY + Rand.Range(-radius / 2, radius / 2);
187 if (i % 100 == 0 && increaseRadius)
188 {
189 radius++;
190 }
191 if (elomap.CanBuildSite(point.x, point.z))
192 {
193 return point;
194 }
195 }
196 return null;
197 }
198
199 public Point GetRandomPoint(int orgX, int orgY, int minRadius, int maxRadius)
200 {
201 Point point = new Point();
202 Point p = new Point(orgX, orgY);
203 for (int i = 0; i < 1000; i++)
204 {
205 point.x = orgX + Rand.Range(-maxRadius, maxRadius);
206 point.z = orgY + Rand.Range(-maxRadius, maxRadius);
207 if (point.Distance(p) >= minRadius && !point.IsBlocked && elomap.CanBuildSite(point.x + elomap.minX, point.z + elomap.minY, 0, ElomapSiteType.Mob))
208 {
209 return point;
210 }
211 }
212 return null;
213 }
214
215 public bool CanCreateZone(Point pos)
216 {
219 if (!tileInfo.idZoneProfile.IsEmpty())
220 {
221 return !tileInfo.blocked;
222 }
223 return false;
224 }
225
227 {
228 return SpatialGen.Create("field", this, register: true, pos.x, pos.z) as Zone;
229 }
230
231 public List<Zone> ListTowns()
232 {
233 List<Zone> list = new List<Zone>();
234 foreach (Spatial value in EClass.game.spatials.map.Values)
235 {
236 if (value.CanSpawnAdv)
237 {
238 list.Add(value as Zone);
239 }
240 }
241 return list;
242 }
243
245 {
246 List<Zone> list = ListTowns();
247 Zone zone = null;
248 for (int i = 0; i < 5; i++)
249 {
250 zone = list.RandomItem();
251 _ = zone is Zone_SubTown;
252 }
253 return zone;
254 }
255
256 public List<Zone> ListRandomSites()
257 {
258 return (from Zone a in children
259 where a.isRandomSite
260 select a).ToList();
261 }
262
263 public List<Zone> ListZonesInRadius(Zone center, int radius = 10)
264 {
265 List<Zone> list = new List<Zone>();
266 foreach (Zone zone in EClass.game.spatials.Zones)
267 {
268 if (zone.Dist(center) <= radius && zone != center && !(zone.source.parent != base.source.id))
269 {
270 list.Add(zone);
271 }
272 }
273 return list;
274 }
275
276 public List<Zone> ListTravelZones(int radius = 100)
277 {
278 bool isRegion = EClass.pc.currentZone.IsRegion;
279 List<Zone> list = new List<Zone>();
280 if (!isRegion)
281 {
283 }
284 else
285 {
286 _ = EClass.pc.pos;
287 }
288 foreach (Zone zone in EClass.game.spatials.Zones)
289 {
290 if (zone.CanFastTravel && !zone.IsInstance && (zone.isKnown || EClass.debug.returnAnywhere) && zone.parent == this)
291 {
292 list.Add(zone);
293 zone.tempDist = zone.Dist(EClass.pc.pos);
294 }
295 }
296 return list;
297 }
298
299 public override void OnAdvanceHour()
300 {
301 if (EClass.world.date.hour == 0)
302 {
303 foreach (Chara item in ListMobs())
304 {
305 if (item.Dist(EClass.pc) > 20 && EClass.rnd(2) == 0)
306 {
307 item.Destroy();
308 }
309 }
310 }
311 if (ListMobs().Count >= (EClass.debug.enable ? 100 : 6) || EClass.rnd(3) != 0)
312 {
313 return;
314 }
315 Point randomPoint = GetRandomPoint(EClass.pc.pos.x, EClass.pc.pos.z, 8, 14);
316 if (randomPoint != null)
317 {
318 RegionPoint regionPoint = new RegionPoint(EClass.pc.pos);
319 BiomeProfile biome = regionPoint.biome;
320 SpawnList list = ((biome.spawn.chara.Count <= 0) ? SpawnList.Get(biome.name, "chara", new CharaFilter
321 {
322 ShouldPass = (SourceChara.Row s) => s.biome == biome.name || s.biome.IsEmpty()
324 Chara chara = CharaGen.CreateFromFilter(list, regionPoint.dangerLv);
325 if (chara != null && !(chara.trait is TraitUniqueMonster))
326 {
327 AddCard(chara, randomPoint);
328 }
329 }
330 }
331
332 public List<Chara> ListMobs()
333 {
334 List<Chara> list = new List<Chara>();
335 foreach (Chara chara in EClass._map.charas)
336 {
337 if (!chara.IsPCFactionOrMinion && !chara.IsGlobal)
338 {
339 list.Add(chara);
340 }
341 }
342 return list;
343 }
344}
ElomapSiteType
static AM_Region Region
Definition: ActionMode.cs:17
string GetRandomCharaId()
int FameLv
Definition: Card.cs:2158
bool IsPCFactionOrMinion
Definition: Card.cs:2132
Point pos
Definition: Card.cs:55
int LV
Definition: Card.cs:370
static Chara CreateFromFilter(string id, int lv=-1, int levelRange=-1)
Definition: CharaGen.cs:22
Definition: Chara.cs:10
new TraitChara trait
Definition: Chara.cs:488
override bool IsGlobal
Definition: Chara.cs:595
Zone currentZone
Definition: Chara.cs:240
bool returnAnywhere
Definition: CoreDebug.cs:202
bool enable
Definition: CoreDebug.cs:285
int hour
Definition: Date.cs:74
int GetRaw(int offsetHours=0)
Definition: Date.cs:322
bool IsExpired(int time)
Definition: Date.cs:332
Definition: EClass.cs:5
static Game game
Definition: EClass.cs:8
static Scene scene
Definition: EClass.cs:30
static int rnd(int a)
Definition: EClass.cs:50
static World world
Definition: EClass.cs:40
static Map _map
Definition: EClass.cs:18
static SourceManager sources
Definition: EClass.cs:42
static int rndHalf(int a)
Definition: EClass.cs:74
static Player player
Definition: EClass.cs:12
static Chara pc
Definition: EClass.cs:14
static CoreDebug debug
Definition: EClass.cs:48
void Initialize(EloMap _elomap)
Definition: EloMapActor.cs:28
EloMap elomap
Definition: EloMapActor.cs:7
string idZoneProfile
Definition: EloMap.cs:68
bool blocked
Definition: EloMap.cs:34
Definition: EloMap.cs:8
int minX
Definition: EloMap.cs:112
void SetZone(int gx, int gy, Zone z, bool updateMesh=false)
Definition: EloMap.cs:235
STETilemap objmap
Definition: EloMap.cs:102
int minY
Definition: EloMap.cs:114
bool IsSnow(int gx, int gy)
Definition: EloMap.cs:406
bool CanBuildSite(int gx, int gy, int radius=0, ElomapSiteType type=ElomapSiteType.Nefia)
Definition: EloMap.cs:359
TileInfo GetTileInfo(int gx, int gy)
Definition: EloMap.cs:287
SpatialManager spatials
Definition: Game.cs:152
Point GetRandomPoint()
Definition: MapBounds.cs:97
List< Chara > charas
Definition: Map.cs:81
MapBounds bounds
Definition: Map.cs:52
Definition: Msg.cs:5
static string Say(string idLang, string ref1, string ref2=null, string ref3=null, string ref4=null)
Definition: Msg.cs:58
int CountKeyItem(string alias)
Definition: Player.cs:1946
Definition: Point.cs:9
Point Set(int _x, int _z)
Definition: Point.cs:479
bool IsBlocked
Definition: Point.cs:339
int x
Definition: Point.cs:36
int z
Definition: Point.cs:39
int Distance(Point p)
Definition: Point.cs:953
Definition: Rand.cs:4
static int Range(int min, int max)
Definition: Rand.cs:42
BiomeProfile biome
Definition: RegionPoint.cs:9
Definition: Region.cs:7
override bool IsRegion
Definition: Region.cs:17
void InitElomap()
Definition: Region.cs:99
SourceZone.Row GetRandomSiteSource()
Definition: Region.cs:159
EloMap elomap
Definition: Region.cs:8
void RenewRandomSites()
Definition: Region.cs:75
bool CanCreateZone(Point pos)
Definition: Region.cs:215
Point GetRandomPoint(int orgX, int orgY, int minRadius, int maxRadius)
Definition: Region.cs:199
Point GetRandomPoint(int orgX, int orgY, int radius=8, bool increaseRadius=false)
Definition: Region.cs:180
override void OnAdvanceHour()
Definition: Region.cs:299
override bool BlockBorderExit
Definition: Region.cs:21
List< Chara > ListMobs()
Definition: Region.cs:332
void UpdateRandomSites()
Definition: Region.cs:86
override void OnActivate()
Definition: Region.cs:25
override ActionMode DefaultActionMode
Definition: Region.cs:15
List< Zone > ListTravelZones(int radius=100)
Definition: Region.cs:276
int dateCheckSites
Definition: Region.cs:11
override bool WillAutoSave
Definition: Region.cs:13
override Point RegionPos
Definition: Region.cs:23
Point GetRandomPoint()
Definition: Region.cs:164
override int DangerLv
Definition: Region.cs:19
Zone CreateZone(Point pos)
Definition: Region.cs:226
List< Zone > ListRandomSites()
Definition: Region.cs:256
Zone GetRandomTown()
Definition: Region.cs:244
Zone CreateRandomSite(Zone center, int radius=8, string idSource=null, bool updateMesh=true, int lv=0)
Definition: Region.cs:104
List< Zone > ListZonesInRadius(Zone center, int radius=10)
Definition: Region.cs:263
List< Zone > ListTowns()
Definition: Region.cs:231
Zone CreateRandomSite(Point pos, string idSource, bool updateMesh, int lv=0)
Definition: Region.cs:110
void CheckRandomSites()
Definition: Region.cs:53
EloMapActor elomapActor
Definition: Scene.cs:97
EloMap elomap
Definition: Scene.cs:143
SourceZone zones
static Spatial Create(string id, Spatial parent, bool register, int x=-99999, int y=-99999, int icon=0)
Definition: SpatialGen.cs:16
List< Zone > Zones
GlobalSpatialList map
int Dist(Point p)
Definition: Spatial.cs:765
int lv
Definition: Spatial.cs:142
virtual bool CanSpawnAdv
Definition: Spatial.cs:491
Spatial parent
Definition: Spatial.cs:10
int icon
Definition: Spatial.cs:82
virtual bool IsRegion
Definition: Spatial.cs:501
bool isKnown
Definition: Spatial.cs:346
Point _regionPos
Definition: Spatial.cs:55
SourceZone.Row source
Definition: Spatial.cs:441
bool destryoed
Definition: Spatial.cs:45
virtual bool CanFastTravel
Definition: Spatial.cs:504
int y
Definition: Spatial.cs:106
int x
Definition: Spatial.cs:94
List< Spatial > children
Definition: Spatial.cs:37
Zone FindZone(int lv)
Definition: Spatial.cs:714
static SpawnList Get(string id, string parent=null, CardFilter filter=null)
Definition: SpawnList.cs:18
Region region
Definition: World.cs:23
GameDate date
Definition: World.cs:6
Definition: Zone.cs:12
bool CanDestroy()
Definition: Zone.cs:1726
BiomeProfile biome
Definition: Zone.cs:126
bool IsInstance
Definition: Zone.cs:480
bool IsPCFaction
Definition: Zone.cs:464
Card AddCard(Card t, Point point)
Definition: Zone.cs:1893
Map map
Definition: Zone.cs:60