Elin Decompiled Documentation EA 23.102 Nightly
Loading...
Searching...
No Matches
TraitNewZone.cs
Go to the documentation of this file.
1using UnityEngine;
2
3public class TraitNewZone : Trait
4{
5 public Zone zone
6 {
7 get
8 {
10 }
11 set
12 {
13 owner.c_uidZone = value?.uid ?? 0;
14 }
15 }
16
17 public virtual bool CanUseInTempDungeon => false;
18
19 public virtual string langOnUse => "";
20
21 public virtual bool IsUpstairs => false;
22
23 public virtual bool IsDownstairs => false;
24
25 public virtual bool IsTeleport => false;
26
27 public virtual bool OnlyInTheSameTopZone => false;
28
29 public virtual bool AutoEnter => true;
30
31 public virtual bool ForceEnter => false;
32
33 public virtual bool CanToggleAutoEnter => false;
34
35 public virtual bool CreateExternalZone
36 {
37 get
38 {
39 if (!IsTeleport)
40 {
41 if (owner.GetStr(30) == null)
42 {
43 return GetParam(1) != null;
44 }
45 return true;
46 }
47 return false;
48 }
49 }
50
52
53 public virtual bool IsEntrace
54 {
55 get
56 {
57 if (!IsUpstairs)
58 {
59 return !IsDownstairs;
60 }
61 return false;
62 }
63 }
64
65 public override bool CanBeHeld => false;
66
67 public override bool CanBeDestroyed => false;
68
69 public override bool CanBeStolen => false;
70
71 public virtual int UseDist => 0;
72
73 public override void OnImportMap()
74 {
75 owner.c_uidZone = 0;
76 }
77
78 public virtual Point GetExitPos()
79 {
80 Point point = new Point(owner.pos);
81 if (owner.dir % 2 == 0)
82 {
83 point.x -= owner.sourceCard.W / 2;
84 point.z--;
85 }
86 else
87 {
88 point.x++;
89 point.z += owner.sourceCard.H / 2;
90 }
91 return point;
92 }
93
94 public override void TrySetAct(ActPlan p)
95 {
97 {
98 return;
99 }
100 bool flag = IsEntrace || p.IsSelf;
102 {
103 int x = p.pos.x;
104 int z = p.pos.z;
105 int w = owner.W;
106 int h = owner.H;
107 flag = ((owner.dir % 2 != 0) ? (p.pos.x == owner.pos.x && p.pos.z >= owner.pos.z + 1 && p.pos.z < owner.pos.z + h - 1) : (z == owner.pos.z && x > owner.pos.x - w + 1 && x <= owner.pos.x - 1));
108 }
109 if (!flag || (EClass.pc.held != null && EClass.pc.held.trait.CanOnlyCarry) || p.dist > UseDist)
110 {
111 return;
112 }
113 p.TrySetAct("actNewZone", delegate
114 {
116 {
117 Msg.Say("badidea");
118 return false;
119 }
120 MoveZone();
121 return false;
123 }
124
125 public bool CanAutoEnter()
126 {
128 {
129 return false;
130 }
132 {
133 return false;
134 }
135 if (EClass.pc.held != null && EClass.pc.held.trait.CanOnlyCarry)
136 {
137 return false;
138 }
139 return true;
140 }
141
142 public bool MoveZone(bool confirmed = false)
143 {
144 if (Electricity != 0 && !owner.isOn)
145 {
146 owner.PlaySound("electricity_insufficient");
147 return false;
148 }
149 if (TryTeleport())
150 {
151 return true;
152 }
153 if (!confirmed && EClass._zone.IsNefia && EClass._zone.Boss != null)
154 {
155 EClass.pc.ai.Cancel();
156 EInput.Consume(consumeAxis: true);
157 Dialog.YesNo("ExitZoneBoss".lang(EClass._zone.Name), delegate
158 {
159 MoveZone(confirmed: true);
160 });
161 return false;
162 }
163 ZoneTransition transition = new ZoneTransition
164 {
165 state = enterState,
166 idTele = GetParam(3)
167 };
168 Zone zone = null;
169 int num = GetParam(2)?.ToInt() ?? 0;
170 if (OnlyInTheSameTopZone && this.zone != null && this.zone.GetTopZone() != EClass._zone.GetTopZone())
171 {
172 this.zone = null;
173 }
174 if (this.zone == null)
175 {
177 {
178 zone = EClass._zone;
179 }
180 else if (IsTeleport)
181 {
183 if (zone != null)
184 {
185 zone = zone.GetTopZone();
186 this.zone = zone.FindZone(num);
187 }
188 }
189 else if (IsDownstairs || IsUpstairs)
190 {
192 num = EClass._zone.lv + (IsUpstairs ? 1 : (IsDownstairs ? (-1) : 0));
193 this.zone = EClass._zone.GetTopZone().FindZone(num);
194 if (this.zone == null && EClass._zone.parent.IsRegion && ((IsUpstairs && EClass._zone.lv == -1) || (IsDownstairs && EClass._zone.lv == 1)))
195 {
197 return false;
198 }
199 }
200 if (OnlyInTheSameTopZone && this.zone != null && this.zone.GetTopZone() != EClass._zone.GetTopZone())
201 {
202 this.zone = null;
203 }
204 if (this.zone == null)
205 {
207 {
208 zone = null;
209 }
210 if (zone == null || EClass._zone.isExternalZone)
211 {
213 return false;
214 }
215 CreateZone(zone, num);
216 }
217 }
218 if ((IsDownstairs || IsUpstairs) && this.zone.IDGenerator == null && EClass._zone.IDGenerator == null)
219 {
221 {
222 pos = owner.pos.Copy(),
223 fromAbove = IsDownstairs,
224 uidZone = EClass._zone.uid
225 });
226 transition = new ZoneTransition
227 {
228 state = ZoneTransition.EnterState.UndergroundOrSky,
229 x = owner.pos.x,
230 z = owner.pos.z
231 };
232 }
233 Debug.Log(this.zone);
234 EClass.pc.MoveZone(this.zone, transition);
235 return true;
236 }
237
238 public Zone CreateZone(Zone dest, int destLv)
239 {
240 string text = dest.GetNewZoneID(destLv);
242 {
243 text = owner.GetStr(30) ?? GetParam(1);
244 }
245 Debug.Log("Creating:" + text + "/" + destLv + "/" + EClass.sources.zones.map.ContainsKey(text) + "/" + dest);
246 Zone zone = SpatialGen.Create(text, dest, register: true, owner.pos.x, owner.pos.z) as Zone;
247 zone.lv = destLv;
248 zone.x = dest.x;
249 zone.y = dest.y;
250 owner.c_uidZone = zone.uid;
252 {
253 zone.isExternalZone = true;
254 }
255 Debug.Log("Created:" + zone.Name + "/" + zone.id);
256 return zone;
257 }
258
259 public override void OnStepped(Chara c)
260 {
262 {
263 Debug.Log("OnStepped:" + EClass.pc.ai);
264 AI_Goto aI_Goto = EClass.pc.ai.Current as AI_Goto;
265 if ((aI_Goto != null || EClass.pc.ai is GoalManualMove) && (aI_Goto == null || aI_Goto.dest.Equals(owner.pos)))
266 {
267 MoveZone();
268 }
269 }
270 }
271
272 public virtual bool TryTeleport()
273 {
274 return false;
275 }
276
277 public virtual bool IsFor(Zone z)
278 {
279 if (z == zone)
280 {
281 return true;
282 }
283 string param = GetParam(1);
284 if (!param.IsEmpty())
285 {
286 int num = ((GetParam(2) != null) ? GetParam(2).ToInt() : 0);
287 if (z.id == param && z.lv == num)
288 {
289 return true;
290 }
291 }
292 return false;
293 }
294}
virtual Status Cancel()
Definition: AIAct.cs:291
Point dest
Definition: AI_Goto.cs:8
Point pos
Definition: ActPlan.cs:149
bool IsSelf
Definition: ActPlan.cs:173
bool TrySetAct(string lang, Func< bool > onPerform, Card tc, CursorInfo cursor=null, int dist=1, bool isHostileAct=false, bool localAct=true, bool canRepeat=false)
Definition: ActPlan.cs:344
string GetStr(int id, string defaultStr=null)
Definition: BaseCard.cs:54
SoundSource PlaySound(string id, float v=1f, bool spatial=true)
Definition: Card.cs:5404
Point pos
Definition: Card.cs:55
virtual CardRow sourceRenderCard
Definition: Card.cs:2009
Trait trait
Definition: Card.cs:49
bool IsInstalled
Definition: Card.cs:2241
bool isOn
Definition: Card.cs:514
int H
Definition: Card.cs:2226
int dir
Definition: Card.cs:142
int c_uidZone
Definition: Card.cs:1071
int W
Definition: Card.cs:2214
Definition: Chara.cs:10
override bool IsAliveInCurrentZone
Definition: Chara.cs:546
Card held
Definition: Chara.cs:67
AIAct ai
Definition: Chara.cs:187
override bool IsPC
Definition: Chara.cs:597
void MoveZone(string alias)
Definition: Chara.cs:3010
new GameConfig game
Definition: CoreConfig.cs:596
CoreConfig config
Definition: Core.cs:70
static CursorInfo MoveZone
Definition: CursorSystem.cs:86
Definition: Dialog.cs:7
static Dialog YesNo(string langDetail, Action actionYes, Action actionNo=null, string langYes="yes", string langNo="no")
Definition: Dialog.cs:244
Definition: EClass.cs:5
static Core core
Definition: EClass.cs:6
static Zone _zone
Definition: EClass.cs:20
static World world
Definition: EClass.cs:40
static SourceManager sources
Definition: EClass.cs:42
static Chara pc
Definition: EClass.cs:14
Definition: EInput.cs:8
static void Consume(int _skipFrame)
Definition: EInput.cs:656
Definition: Msg.cs:5
static string SayNothingHappen()
Definition: Msg.cs:96
static string Say(string idLang, string ref1, string ref2=null, string ref3=null, string ref4=null)
Definition: Msg.cs:58
Definition: Point.cs:9
Point Copy()
Definition: Point.cs:467
int x
Definition: Point.cs:36
int z
Definition: Point.cs:39
bool Equals(int _x, int _z)
Definition: Point.cs:924
static Zone Get(int uid)
Definition: RefZone.cs:3
bool multisize
Definition: RenderRow.cs:64
SourceZone zones
static Spatial Create(string id, Spatial parent, bool register, int x=-99999, int y=-99999, int icon=0)
Definition: SpatialGen.cs:16
int lv
Definition: Spatial.cs:142
int uid
Definition: Spatial.cs:70
Spatial parent
Definition: Spatial.cs:10
bool isExternalZone
Definition: Spatial.cs:370
virtual bool IsRegion
Definition: Spatial.cs:501
virtual string Name
Definition: Spatial.cs:495
string id
Definition: Spatial.cs:13
int y
Definition: Spatial.cs:106
int x
Definition: Spatial.cs:94
Zone FindZone(int lv)
Definition: Spatial.cs:714
virtual bool IsUpstairs
Definition: TraitNewZone.cs:21
virtual int UseDist
Definition: TraitNewZone.cs:71
virtual bool AutoEnter
Definition: TraitNewZone.cs:29
virtual bool IsFor(Zone z)
bool CanAutoEnter()
override bool CanBeStolen
Definition: TraitNewZone.cs:69
virtual bool CanUseInTempDungeon
Definition: TraitNewZone.cs:17
virtual bool CreateExternalZone
Definition: TraitNewZone.cs:36
virtual bool IsTeleport
Definition: TraitNewZone.cs:25
override bool CanBeHeld
Definition: TraitNewZone.cs:65
virtual ZoneTransition.EnterState enterState
Definition: TraitNewZone.cs:51
virtual bool IsEntrace
Definition: TraitNewZone.cs:54
override void OnStepped(Chara c)
override void TrySetAct(ActPlan p)
Definition: TraitNewZone.cs:94
virtual Point GetExitPos()
Definition: TraitNewZone.cs:78
virtual bool CanToggleAutoEnter
Definition: TraitNewZone.cs:33
virtual string langOnUse
Definition: TraitNewZone.cs:19
Zone CreateZone(Zone dest, int destLv)
bool MoveZone(bool confirmed=false)
virtual bool IsDownstairs
Definition: TraitNewZone.cs:23
override void OnImportMap()
Definition: TraitNewZone.cs:73
override bool CanBeDestroyed
Definition: TraitNewZone.cs:67
virtual bool OnlyInTheSameTopZone
Definition: TraitNewZone.cs:27
virtual bool ForceEnter
Definition: TraitNewZone.cs:31
virtual bool TryTeleport()
Definition: Trait.cs:7
string GetParam(int i, string def=null)
Definition: Trait.cs:515
virtual int Electricity
Definition: Trait.cs:97
Card owner
Definition: Trait.cs:26
virtual bool CanOnlyCarry
Definition: Trait.cs:283
Region region
Definition: World.cs:23
void AddPreEnter(ZonePreEnterEvent e, bool executeIfActiveZone=true)
Definition: Zone.cs:12
virtual string GetNewZoneID(int level)
Definition: Zone.cs:533
ZoneEventManager events
Definition: Zone.cs:40
virtual bool RegenerateOnEnter
Definition: Zone.cs:260
virtual bool IsNefia
Definition: Zone.cs:278
virtual string IDGenerator
Definition: Zone.cs:130
Zone GetTopZone()
Definition: Zone.cs:1854
bool IsInstance
Definition: Zone.cs:480
Chara Boss
Definition: Zone.cs:83
virtual bool AllowNewZone
Definition: Zone.cs:256