14 return RefZone.Get(this.owner.c_uidZone);
18 this.owner.c_uidZone = ((value !=
null) ? value.uid : 0);
24 public virtual bool CanUseInTempDungeon
34 public virtual string langOnUse
44 public virtual bool IsUpstairs
54 public virtual bool IsDownstairs
64 public virtual bool IsTeleport
74 public virtual bool OnlyInTheSameTopZone
84 public virtual bool AutoEnter
94 public virtual bool ForceEnter
104 public virtual bool CanToggleAutoEnter
114 public virtual bool CreateExternalZone
118 return !this.IsTeleport && (this.owner.GetStr(30,
null) !=
null || base.GetParam(1,
null) !=
null);
124 public virtual ZoneTransition.EnterState enterState
134 public virtual bool IsEntrace
138 return !this.IsUpstairs && !this.IsDownstairs;
144 public override bool CanBeHeld
154 public override bool CanBeDestroyed
164 public override bool CanBeStolen
174 public virtual int UseDist
183 public override void OnImportMap()
185 this.owner.c_uidZone = 0;
189 public virtual Point GetExitPos()
192 if (this.owner.dir % 2 == 0)
194 point.x -= this.owner.sourceCard.W / 2;
200 point.z += this.owner.sourceCard.H / 2;
206 public override void TrySetAct(
ActPlan p)
208 if (!
EClass._zone.AllowNewZone)
212 bool flag = this.IsEntrace || p.IsSelf;
213 if (this.owner.sourceRenderCard.multisize)
217 int w = this.owner.W;
218 int h = this.owner.H;
219 flag = ((this.owner.dir % 2 == 0) ? (z == this.owner.pos.z && x > this.owner.pos.x - w + 1 && x <= this.owner.pos.x - 1) : (p.pos.x == this.owner.pos.x && p.pos.z >= this.owner.pos.z + 1 && p.pos.z < this.owner.pos.z + h - 1));
225 if (
EClass.pc.held !=
null &&
EClass.pc.held.trait.CanOnlyCarry)
229 if (p.dist <=
this.UseDist)
231 p.TrySetAct(
"actNewZone", delegate()
233 if ((
EClass._zone.RegenerateOnEnter ||
EClass._zone.IsInstance) && !
this.CanUseInTempDungeon)
238 return this.MoveZone(
false);
239 }, this.owner, CursorSystem.MoveZone, 1,
false,
true,
false);
244 public bool CanAutoEnter()
246 return EClass._zone.AllowNewZone && !this.owner.sourceRenderCard.multisize && (EClass.pc.held ==
null || !
EClass.pc.held.trait.CanOnlyCarry);
250 public bool MoveZone(
bool confirmed =
false)
252 if (this.Electricity != 0 && !this.owner.isOn)
254 this.owner.PlaySound(
"electricity_insufficient", 1f,
true);
257 if (this.TryTeleport())
261 if (!confirmed &&
EClass._zone.IsNefia &&
EClass._zone.Boss !=
null)
264 EInput.Consume(
true, 1);
265 Dialog.YesNo(
"ExitZoneBoss".lang(
EClass._zone.Name,
null,
null,
null,
null), delegate
268 },
null,
"yes",
"no");
273 state = this.enterState,
274 idTele = base.GetParam(3,
null)
277 string param = base.GetParam(2,
null);
278 int num = (param !=
null) ? param.ToInt() : 0;
279 if (this.OnlyInTheSameTopZone && this.zone !=
null && this.zone.GetTopZone() !=
EClass._zone.GetTopZone())
283 if (this.zone ==
null)
285 if (this.CreateExternalZone)
289 else if (this.IsTeleport)
291 zone =
EClass.world.region.FindZone(base.GetParam(1,
null));
294 zone = zone.GetTopZone();
295 this.zone = zone.FindZone(num);
298 else if (this.IsDownstairs || this.IsUpstairs)
300 zone =
EClass._zone.GetTopZone();
301 num = EClass._zone.lv + (this.IsUpstairs ? 1 : (this.IsDownstairs ? -1 : 0));
302 this.zone =
EClass._zone.GetTopZone().FindZone(num);
303 if (this.zone ==
null &&
EClass._zone.parent.IsRegion && ((
this.IsUpstairs &&
EClass._zone.lv == -1) || (
this.IsDownstairs &&
EClass._zone.lv == 1)))
309 if (this.OnlyInTheSameTopZone && this.zone !=
null && this.zone.GetTopZone() !=
EClass._zone.GetTopZone())
313 if (this.zone ==
null)
315 if (this.OnlyInTheSameTopZone && zone !=
null && zone.GetTopZone() !=
EClass._zone.GetTopZone())
319 if (zone ==
null ||
EClass._zone.isExternalZone)
321 Msg.SayNothingHappen();
324 this.CreateZone(zone, num);
327 if ((this.IsDownstairs || this.IsUpstairs) && this.zone.IDGenerator ==
null &&
EClass._zone.IDGenerator ==
null)
331 pos = this.owner.pos.Copy(),
332 fromAbove = this.IsDownstairs,
333 uidZone = EClass._zone.uid
338 x = this.owner.pos.x,
342 Debug.Log(this.zone);
343 EClass.pc.MoveZone(this.zone, transition);
348 public Zone CreateZone(
Zone dest,
int destLv)
350 string text = dest.GetNewZoneID(destLv);
351 if (this.CreateExternalZone)
353 text = (this.owner.GetStr(30,
null) ?? base.GetParam(1,
null));
355 Debug.Log(
string.Concat(
new string[]
362 EClass.sources.zones.map.ContainsKey(text).ToString(),
364 (dest !=
null) ? dest.ToString() :
null
366 Zone zone =
SpatialGen.Create(text, dest,
true, this.owner.pos.x,
this.owner.pos.z, 0) as
Zone;
370 this.owner.c_uidZone = zone.uid;
371 if (this.CreateExternalZone)
373 zone.isExternalZone =
true;
375 Debug.Log(
"Created:" + zone.Name +
"/" + zone.id);
380 public override void OnStepped(
Chara c)
382 if (this.AutoEnter && c.IsPC &&
this.owner.IsInstalled && c.IsAliveInCurrentZone && (
this.ForceEnter || !
EClass.core.config.game.disableAutoStairs))
384 string str =
"OnStepped:";
386 Debug.Log(str + ((ai !=
null) ? ai.ToString() :
null));
392 if (ai_Goto !=
null && !ai_Goto.dest.Equals(
this.owner.pos))
396 this.MoveZone(
false);
401 public virtual bool TryTeleport()
407 public virtual bool IsFor(
Zone z)
413 string param = base.GetParam(1,
null);
414 if (!param.IsEmpty())
416 int num = (base.GetParam(2,
null) !=
null) ? base.GetParam(2,
null).ToInt() : 0;
417 if (z.id == param && z.lv == num)