Elin Decompiled Documentation EA 23.167 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 override bool CanBeTeleported => false;
72
73 public virtual int UseDist => 0;
74
75 public override void OnImportMap()
76 {
77 owner.c_uidZone = 0;
78 }
79
80 public virtual Point GetExitPos()
81 {
82 Point point = new Point(owner.pos);
83 if (owner.dir % 2 == 0)
84 {
85 point.x -= owner.sourceCard.W / 2;
86 point.z--;
87 }
88 else
89 {
90 point.x++;
91 point.z += owner.sourceCard.H / 2;
92 }
93 return point;
94 }
95
96 public override void TrySetAct(ActPlan p)
97 {
99 {
100 return;
101 }
102 bool flag = IsEntrace || p.IsSelf;
104 {
105 int x = p.pos.x;
106 int z = p.pos.z;
107 int w = owner.W;
108 int h = owner.H;
109 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));
110 }
111 if (!flag || (EClass.pc.held != null && EClass.pc.held.trait.CanOnlyCarry) || p.dist > UseDist)
112 {
113 return;
114 }
115 p.TrySetAct("actNewZone", delegate
116 {
118 {
119 Msg.Say("badidea");
120 return false;
121 }
122 MoveZone();
123 return false;
125 }
126
127 public bool CanAutoEnter()
128 {
130 {
131 return false;
132 }
134 {
135 return false;
136 }
137 if (EClass.pc.held != null && EClass.pc.held.trait.CanOnlyCarry)
138 {
139 return false;
140 }
141 return true;
142 }
143
144 public bool MoveZone(bool confirmed = false)
145 {
146 if (Electricity != 0 && !owner.isOn)
147 {
148 owner.PlaySound("electricity_insufficient");
149 return false;
150 }
151 if (TryTeleport())
152 {
153 return true;
154 }
155 if (!confirmed && EClass._zone.IsNefia && EClass._zone.Boss != null)
156 {
157 EClass.pc.ai.Cancel();
158 EInput.Consume(consumeAxis: true);
159 Dialog.YesNo("ExitZoneBoss".lang(EClass._zone.Name), delegate
160 {
161 MoveZone(confirmed: true);
162 });
163 return false;
164 }
165 ZoneTransition transition = new ZoneTransition
166 {
167 state = enterState,
168 idTele = GetParam(3)
169 };
170 Zone zone = null;
171 int num = GetParam(2)?.ToInt() ?? 0;
172 if (OnlyInTheSameTopZone && this.zone != null && this.zone.GetTopZone() != EClass._zone.GetTopZone())
173 {
174 this.zone = null;
175 }
176 if (this.zone == null)
177 {
179 {
180 zone = EClass._zone;
181 }
182 else if (IsTeleport)
183 {
185 if (zone != null)
186 {
187 zone = zone.GetTopZone();
188 this.zone = zone.FindZone(num);
189 }
190 }
191 else if (IsDownstairs || IsUpstairs)
192 {
194 num = EClass._zone.lv + (IsUpstairs ? 1 : (IsDownstairs ? (-1) : 0));
195 this.zone = EClass._zone.GetTopZone().FindZone(num);
196 if (this.zone == null && EClass._zone.parent.IsRegion && ((IsUpstairs && EClass._zone.lv == -1) || (IsDownstairs && EClass._zone.lv == 1)))
197 {
199 return false;
200 }
201 }
202 if (OnlyInTheSameTopZone && this.zone != null && this.zone.GetTopZone() != EClass._zone.GetTopZone())
203 {
204 this.zone = null;
205 }
206 if (this.zone == null)
207 {
209 {
210 zone = null;
211 }
212 if (zone == null || EClass._zone.isExternalZone)
213 {
215 return false;
216 }
217 CreateZone(zone, num);
218 }
219 }
220 if ((IsDownstairs || IsUpstairs) && this.zone.IDGenerator == null && EClass._zone.IDGenerator == null)
221 {
223 {
224 pos = owner.pos.Copy(),
225 fromAbove = IsDownstairs,
226 uidZone = EClass._zone.uid
227 });
228 transition = new ZoneTransition
229 {
230 state = ZoneTransition.EnterState.UndergroundOrSky,
231 x = owner.pos.x,
232 z = owner.pos.z
233 };
234 }
235 Debug.Log(this.zone);
236 EClass.pc.MoveZone(this.zone, transition);
237 return true;
238 }
239
240 public Zone CreateZone(Zone dest, int destLv)
241 {
242 string text = dest.GetNewZoneID(destLv);
244 {
245 text = owner.GetStr(30) ?? GetParam(1);
246 }
247 Debug.Log("Creating:" + text + "/" + destLv + "/" + EClass.sources.zones.map.ContainsKey(text) + "/" + dest);
248 Zone zone = SpatialGen.Create(text, dest, register: true, owner.pos.x, owner.pos.z) as Zone;
249 zone.lv = destLv;
250 zone.x = dest.x;
251 zone.y = dest.y;
252 owner.c_uidZone = zone.uid;
254 {
255 zone.isExternalZone = true;
256 }
257 Debug.Log("Created:" + zone.Name + "/" + zone.id);
258 return zone;
259 }
260
261 public override void OnStepped(Chara c)
262 {
264 {
265 Debug.Log("OnStepped:" + EClass.pc.ai);
266 AI_Goto aI_Goto = EClass.pc.ai.Current as AI_Goto;
267 if ((aI_Goto != null || EClass.pc.ai is GoalManualMove) && (aI_Goto == null || aI_Goto.dest.Equals(owner.pos)))
268 {
269 MoveZone();
270 }
271 }
272 }
273
274 public virtual bool TryTeleport()
275 {
276 return false;
277 }
278
279 public virtual bool IsFor(Zone z)
280 {
281 if (z == zone)
282 {
283 return true;
284 }
285 string param = GetParam(1);
286 if (!param.IsEmpty())
287 {
288 int num = ((GetParam(2) != null) ? GetParam(2).ToInt() : 0);
289 if (z.id == param && z.lv == num)
290 {
291 return true;
292 }
293 }
294 return false;
295 }
296}
virtual Status Cancel()
Definition: AIAct.cs:291
Point dest
Definition: AI_Goto.cs:8
Point pos
Definition: ActPlan.cs:150
bool IsSelf
Definition: ActPlan.cs:174
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:345
string GetStr(int id, string defaultStr=null)
Definition: BaseCard.cs:54
SoundSource PlaySound(string id, float v=1f, bool spatial=true)
Definition: Card.cs:5776
Point pos
Definition: Card.cs:55
virtual CardRow sourceRenderCard
Definition: Card.cs:2069
Trait trait
Definition: Card.cs:49
bool IsInstalled
Definition: Card.cs:2317
bool isOn
Definition: Card.cs:526
int H
Definition: Card.cs:2302
int dir
Definition: Card.cs:142
int c_uidZone
Definition: Card.cs:1083
int W
Definition: Card.cs:2290
Definition: Chara.cs:10
override bool IsAliveInCurrentZone
Definition: Chara.cs:557
Card held
Definition: Chara.cs:70
AIAct ai
Definition: Chara.cs:198
override bool IsPC
Definition: Chara.cs:608
void MoveZone(string alias)
Definition: Chara.cs:3094
new GameConfig game
Definition: CoreConfig.cs:600
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:479
int x
Definition: Point.cs:36
int z
Definition: Point.cs:39
bool Equals(int _x, int _z)
Definition: Point.cs:940
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:73
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
override bool CanBeTeleported
Definition: TraitNewZone.cs:71
virtual bool IsEntrace
Definition: TraitNewZone.cs:54
override void OnStepped(Chara c)
override void TrySetAct(ActPlan p)
Definition: TraitNewZone.cs:96
virtual Point GetExitPos()
Definition: TraitNewZone.cs:80
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:75
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:556
virtual int Electricity
Definition: Trait.cs:102
Card owner
Definition: Trait.cs:27
virtual bool CanOnlyCarry
Definition: Trait.cs:290
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:535
ZoneEventManager events
Definition: Zone.cs:40
virtual bool RegenerateOnEnter
Definition: Zone.cs:260
virtual bool IsNefia
Definition: Zone.cs:280
virtual string IDGenerator
Definition: Zone.cs:130
Zone GetTopZone()
Definition: Zone.cs:1871
bool IsInstance
Definition: Zone.cs:482
Chara Boss
Definition: Zone.cs:83
virtual bool AllowNewZone
Definition: Zone.cs:256