SHOW:
|
|
- or go back to the newest paste.
1 | ================================================= | |
2 | Index: gameserver.taskmanager.PvpFlagTaskManager.JAVA | |
3 | ================================================= | |
4 | ||
5 | +package l2j.dev.gameserver.taskmanager; | |
6 | + | |
7 | +import java.util.Map; | |
8 | +import java.util.concurrent.ConcurrentHashMap; | |
9 | + | |
10 | +import l2j.dev.commons.concurrent.ThreadPool; | |
11 | +import l2j.dev.gameserver.model.actor.instance.PlayerInstance; | |
12 | +import l2j.dev.gameserver.model.zone.ZoneId; | |
13 | + | |
14 | +/** | |
15 | + * @author Juvenil Walker | |
16 | + */ | |
17 | +public class PvpFlagTaskManager implements Runnable | |
18 | +{ | |
19 | + private final Map<PlayerInstance, Long> _players = new ConcurrentHashMap<>(); | |
20 | + | |
21 | + protected PvpFlagTaskManager() | |
22 | + { | |
23 | + // Run task each second. | |
24 | + ThreadPool.scheduleAtFixedRate(this, 1000, 1000); | |
25 | + } | |
26 | + | |
27 | + public final void add(PlayerInstance player, long time) | |
28 | + { | |
29 | + _players.put(player, System.currentTimeMillis() + time); | |
30 | + } | |
31 | + | |
32 | + public final void remove(PlayerInstance player) | |
33 | + { | |
34 | + _players.remove(player); | |
35 | + } | |
36 | + | |
37 | + @Override | |
38 | + public final void run() | |
39 | + { | |
40 | + // List is empty, skip. | |
41 | + if (_players.isEmpty()) | |
42 | + { | |
43 | + return; | |
44 | + } | |
45 | + | |
46 | + // Get current time. | |
47 | + final long currentTime = System.currentTimeMillis(); | |
48 | + | |
49 | + // Loop all players. | |
50 | + for (Map.Entry<PlayerInstance, Long> entry : _players.entrySet()) | |
51 | + { | |
52 | + // Get time left and check. | |
53 | + final PlayerInstance player = entry.getKey(); | |
54 | + | |
55 | + if (player.isInsideZone(ZoneId.CHAOT)) | |
56 | + { | |
57 | + _players.remove(player); | |
58 | + continue; | |
59 | + } | |
60 | + | |
61 | + final long timeLeft = entry.getValue(); | |
62 | + | |
63 | + // Time is running out, clear PvP flag and remove from list. | |
64 | + if (currentTime > timeLeft) | |
65 | + { | |
66 | + player.updatePvPFlag(0); | |
67 | + _players.remove(player); | |
68 | + } | |
69 | + // Time almost runned out, update to blinking PvP flag. | |
70 | + else if (currentTime > (timeLeft - 5000)) | |
71 | + { | |
72 | + player.updatePvPFlag(2); | |
73 | + // Time didn't run out, keep PvP flag. | |
74 | + } | |
75 | + else | |
76 | + { | |
77 | + player.updatePvPFlag(1); | |
78 | + } | |
79 | + } | |
80 | + } | |
81 | + | |
82 | + public static final PvpFlagTaskManager getInstance() | |
83 | + { | |
84 | + return SingletonHolder._instance; | |
85 | + } | |
86 | + | |
87 | + private static class SingletonHolder | |
88 | + { | |
89 | + protected static final PvpFlagTaskManager _instance = new PvpFlagTaskManager(); | |
90 | + } | |
91 | +} | |
92 | ============================================================== | |
93 | Index: l2j.dev.gameserver.model.zone.ZoneId.JAVA | |
94 | ============================================================== | |
95 | SCRIPT, | |
96 | SIEGE, | |
97 | TOWN, | |
98 | SWAMP, | |
99 | WATER, | |
100 | + CHAOT; | |
101 | ||
102 | ||
103 | ||
104 | ============================================================== | |
105 | Index: gameserver.model.zone.type.ChaoticZone.JAVA | |
106 | ============================================================== | |
107 | ||
108 | +package l2j.dev.gameserver.model.zone.type; | |
109 | + | |
110 | +import l2j.dev.Config; | |
111 | +import l2j.dev.gameserver.datatables.SkillTable; | |
112 | +import l2j.dev.gameserver.enums.TeleportWhereType; | |
113 | +import l2j.dev.gameserver.model.Skill; | |
114 | +import l2j.dev.gameserver.model.actor.Creature; | |
115 | +import l2j.dev.gameserver.model.actor.instance.PlayerInstance; | |
116 | +import l2j.dev.gameserver.model.zone.ZoneId; | |
117 | +import l2j.dev.gameserver.model.zone.ZoneRespawn; | |
118 | +import l2j.dev.gameserver.network.SystemMessageId; | |
119 | +import l2j.dev.gameserver.network.serverpackets.ExShowScreenMessage; | |
120 | +import l2j.dev.gameserver.taskmanager.PvpFlagTaskManager; | |
121 | + | |
122 | +/** | |
123 | + * @author Juvenil Walker | |
124 | + */ | |
125 | +public class ChaoticZone extends ZoneRespawn | |
126 | +{ | |
127 | + private String _ChaoticName; | |
128 | + private boolean _ChaoticNameBollean; | |
129 | + private boolean _ChaoticFlag; | |
130 | + private boolean _ChaoticNobles; | |
131 | + private boolean _Chaotic_HEAL_FUll_HP_CP_MP; | |
132 | + private int _TimeDelay; | |
133 | + | |
134 | + public ChaoticZone(int id) | |
135 | + { | |
136 | + super(id); | |
137 | + } | |
138 | + | |
139 | + @Override | |
140 | + public void setParameter(String name, String value) | |
141 | + { | |
142 | + if (name.equals("name")) | |
143 | + { | |
144 | + _ChaoticName = value; | |
145 | + } | |
146 | + else if (name.equals("ChaoticFlag")) | |
147 | + { | |
148 | + _ChaoticFlag = Boolean.parseBoolean(value); | |
149 | + } | |
150 | + else if (name.equals("ChaoticNobles")) | |
151 | + { | |
152 | + _ChaoticNobles = Boolean.parseBoolean(value); | |
153 | + } | |
154 | + else if (name.equals("Chaotic_HEAL_FUll_HP_CP_MP")) | |
155 | + { | |
156 | + _Chaotic_HEAL_FUll_HP_CP_MP = Boolean.parseBoolean(value); | |
157 | + } | |
158 | + else if (name.equals("Chaotic_HEAL_FUll_HP_CP_MP")) | |
159 | + { | |
160 | + _Chaotic_HEAL_FUll_HP_CP_MP = Boolean.parseBoolean(value); | |
161 | + } | |
162 | + else if (name.equals("ChaoticMensagem")) | |
163 | + { | |
164 | + _ChaoticNameBollean = Boolean.parseBoolean(value); | |
165 | + } | |
166 | + else if (name.equals("MensagenDelay")) | |
167 | + { | |
168 | + _TimeDelay = Integer.parseInt(value); | |
169 | + } | |
170 | + else | |
171 | + { | |
172 | + super.setParameter(name, value); | |
173 | + } | |
174 | + } | |
175 | + | |
176 | + @Override | |
177 | + protected void onEnter(Creature creature) | |
178 | + { | |
179 | + creature.setInsideZone(ZoneId.CHAOT, true); | |
180 | + creature.setInsideZone(ZoneId.NO_SUMMON_FRIEND, true); | |
181 | + | |
182 | + if (creature instanceof PlayerInstance) | |
183 | + { | |
184 | + if (_ChaoticFlag) | |
185 | + { | |
186 | + ((PlayerInstance) creature).sendPacket(SystemMessageId.YOU_HAVE_ENTERED_A_COMBAT_ZONE); | |
187 | + | |
188 | + creature.updatePvPFlag(1); | |
189 | + } | |
190 | + if (_ChaoticNobles) | |
191 | + { | |
192 | + Skill noblesse = SkillTable.getInstance().getInfo(1323, 1); | |
193 | + noblesse.getEffects(creature, creature); | |
194 | + } | |
195 | + | |
196 | + if (!_Chaotic_HEAL_FUll_HP_CP_MP) | |
197 | + { | |
198 | + creature.setCurrentCp(creature.getMaxCp()); | |
199 | + creature.setCurrentHp(creature.getMaxHp()); | |
200 | + creature.setCurrentMp(creature.getMaxMp()); | |
201 | + } | |
202 | + if (_ChaoticNameBollean) | |
203 | + { | |
204 | + creature.sendPacket(new ExShowScreenMessage(" " + getChaoticName() + "", _TimeDelay)); | |
205 | + } | |
206 | + | |
207 | + } | |
208 | + | |
209 | + } | |
210 | + | |
211 | + @Override | |
212 | + protected void onExit(Creature creature) | |
213 | + { | |
214 | + creature.setInsideZone(ZoneId.CHAOT, false); | |
215 | + creature.setInsideZone(ZoneId.NO_SUMMON_FRIEND, false); | |
216 | + | |
217 | + if (creature instanceof PlayerInstance) | |
218 | + { | |
219 | + if (_ChaoticFlag) | |
220 | + { | |
221 | + final PlayerInstance player = (PlayerInstance) creature; | |
222 | + PvpFlagTaskManager.getInstance().add(player, Config.PVP_NORMAL_TIME); | |
223 | + creature.setPvpFlagLasts(System.currentTimeMillis() + Config.PVP_NORMAL_TIME); | |
224 | + ((PlayerInstance) creature).sendPacket(SystemMessageId.YOU_HAVE_LEFT_A_COMBAT_ZONE); | |
225 | + } | |
226 | + if (_ChaoticNameBollean) | |
227 | + { | |
228 | + creature.sendPacket(new ExShowScreenMessage(" Left " + getChaoticName() + "", _TimeDelay)); | |
229 | + } | |
230 | + } | |
231 | + } | |
232 | + | |
233 | + @Override | |
234 | + protected void onDieInside(Creature creature) | |
235 | + { | |
236 | + } | |
237 | + | |
238 | + @Override | |
239 | + protected void onReviveInside(Creature creature) | |
240 | + { | |
241 | + if (_Chaotic_HEAL_FUll_HP_CP_MP) | |
242 | + { | |
243 | + creature.setCurrentCp(creature.getMaxCp()); | |
244 | + creature.setCurrentHp(creature.getMaxHp()); | |
245 | + creature.setCurrentMp(creature.getMaxMp()); | |
246 | + } | |
247 | + if (_ChaoticNobles) | |
248 | + { | |
249 | + Skill noblesse = SkillTable.getInstance().getInfo(1323, 1); | |
250 | + noblesse.getEffects(creature, creature); | |
251 | + } | |
252 | + } | |
253 | + | |
254 | + public void oustAllPlayers() | |
255 | + { | |
256 | + for (Creature creature : getCharactersInside()) | |
257 | + { | |
258 | + if (creature == null) | |
259 | + { | |
260 | + continue; | |
261 | + } | |
262 | + | |
263 | + if (creature instanceof PlayerInstance) | |
264 | + { | |
265 | + final PlayerInstance player = (PlayerInstance) creature; | |
266 | + if (player.isOnline()) | |
267 | + { | |
268 | + player.teleToLocation(TeleportWhereType.TOWN); | |
269 | + } | |
270 | + } | |
271 | + } | |
272 | + } | |
273 | + | |
274 | + public String getChaoticName() | |
275 | + { | |
276 | + return _ChaoticName; | |
277 | + } | |
278 | +} | |
279 | ||
280 | ======================================================== | |
281 | Index: gameserver.datatables.xml.ZoneData.JAVA | |
282 | ======================================================== | |
283 | ||
284 | +import l2j.dev.gameserver.model.zone.type.ChaoticZone; | |
285 | ||
286 | case "ArenaZone": | |
287 | { | |
288 | temp = new ArenaZone(zoneId); | |
289 | break; | |
290 | } | |
291 | ||
292 | + case "ChaoticZone": | |
293 | + { | |
294 | + temp = new ChaoticZone(zoneId); | |
295 | + break; | |
296 | + } | |
297 | ||
298 | ======================================================== | |
299 | Index: l2j.dev.gameserver.datatables.xml.MapRegionData.JAVA | |
300 | ======================================================== | |
301 | ||
302 | ||
303 | // Check if player is in arena. | |
304 | final ArenaZone arena = ZoneData.getInstance().getZone(player, ArenaZone.class); | |
305 | if (arena != null) | |
306 | { | |
307 | return arena.getSpawnLoc(); | |
308 | } | |
309 | ||
310 | + // Check if player is in arena. | |
311 | + final ChaoticZone Flag = ZoneData.getInstance().getZone(player, ChaoticZone.class); | |
312 | + if (Flag != null) | |
313 | + { | |
314 | + return Flag.getSpawnLoc(); | |
315 | + } | |
316 | ||
317 | ||
318 | ======================================================== | |
319 | Index: GAME/DATA/ZONES/ChaoticZone.XML | |
320 | ======================================================== | |
321 | ||
322 | +<?xml version="1.0" encoding="utf-8"?> | |
323 | +<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../xsd/zones.xsd"> | |
324 | + | |
325 | + <!-- Primeval Isle --> | |
326 | + <zone type="ChaoticZone" shape="NPoly" minZ="-4290" maxZ="-1290"> | |
327 | + <!-- Name Chaotic ExShowScreenMessage --> | |
328 | + <stat name="name" val="Primavel Isle" /> | |
329 | + <!-- Chaotic Enable Update Flag --> | |
330 | + <stat name="ChaoticFlag" val="True" /> | |
331 | + <!-- Chaotic Enable Skill Nobles --> | |
332 | + <stat name="ChaoticNobles" val="True" /> | |
333 | + <!-- Chaotic Heal Full HP/CP/MP --> | |
334 | + <stat name="Chaotic_HEAL_FUll_HP_CP_MP" val="True" /> | |
335 | + <!-- Chaotic Enable Mensagem onEnter onExit --> | |
336 | + <stat name="ChaoticMensagem" val="True" /> | |
337 | + <!-- Chaotic Delay Mensagen Time --> | |
338 | + <stat name="MensagenDelay" val="4000" /> | |
339 | + <node X="10408" Y="-27395" /> | |
340 | + <node X="12065" Y="-25334" /> | |
341 | + <node X="15834" Y="-19850" /> | |
342 | + <node X="8791" Y="-10223" /> | |
343 | + <node X="3487" Y="-12137" /> | |
344 | + <node X="4110" Y="-34245" /> | |
345 | + <spawn X="10280" Y="-23832" Z="-3664" /> | |
346 | + <spawn X="9496" Y="-21928" Z="-3680" /> | |
347 | + </zone> | |
348 | + | |
349 | + <!-- Pagan Temple Pvp --> | |
350 | + <zone type="ChaoticZone" shape="Cylinder" minZ="-11000" maxZ="-8000" rad="19000"> | |
351 | + <!-- Name Chaotic ExShowScreenMessage --> | |
352 | + <stat name="name" val="Pagan Temple" /> | |
353 | + <!-- Chaotic Enable Update Flag --> | |
354 | + <stat name="ChaoticFlag" val="True" /> | |
355 | + <!-- Chaotic Enable Skill Nobles --> | |
356 | + <stat name="ChaoticNobles" val="True" /> | |
357 | + <!-- Chaotic Heal Full HP/CP/MP --> | |
358 | + <stat name="Chaotic_HEAL_FUll_HP_CP_MP" val="True" /> | |
359 | + <!-- Chaotic Enable Mensagem onEnter onExit --> | |
360 | + <stat name="ChaoticMensagem" val="True" /> | |
361 | + <!-- Chaotic Delay Mensagen Time --> | |
362 | + <stat name="MensagenDelay" val="4000" /> | |
363 | + <node X="-16370" Y="-40782" /> | |
364 | + <spawn X="-17592" Y="-50776" Z="-11008" /> | |
365 | + <spawn X="-15048" Y="-50712" Z="-11008" /> | |
366 | + <spawn X="-17592" Y="-50776" Z="-11008" /> | |
367 | + <spawn X="-15048" Y="-50712" Z="-11008" /> | |
368 | + </zone> | |
369 | + | |
370 | + <!-- MONASTERY SPWAN FLAG --> | |
371 | + <zone type="ChaoticZone" shape="Cuboid" minZ="-3296" maxZ="-3392"> | |
372 | + <!-- Name Chaotic ExShowScreenMessage --> | |
373 | + <stat name="name" val="Monastery" /> | |
374 | + <!-- Chaotic Enable Update Flag --> | |
375 | + <stat name="ChaoticFlag" val="True" /> | |
376 | + <!-- Chaotic Enable Skill Nobles --> | |
377 | + <stat name="ChaoticNobles" val="True" /> | |
378 | + <!-- Chaotic Heal Full HP/CP/MP --> | |
379 | + <stat name="Chaotic_HEAL_FUll_HP_CP_MP" val="True" /> | |
380 | + <!-- Chaotic Enable Mensagem onEnter onExit --> | |
381 | + <stat name="ChaoticMensagem" val="True" /> | |
382 | + <!-- Chaotic Delay Mensagen Time --> | |
383 | + <stat name="MensagenDelay" val="4000" /> | |
384 | + | |
385 | + <node X="119665" Y="-77324" /> | |
386 | + <node X="-118416" Y="-75408" /> | |
387 | + <spawn X="148560" Y="-55904" Z="-2779" /> | |
388 | + </zone> | |
389 | + | |
390 | + <!-- Ketra --> | |
391 | + <zone type="ChaoticZone" shape="Cuboid" minZ="-10000" maxZ="10000"> | |
392 | + <!-- Name Chaotic ExShowScreenMessage --> | |
393 | + <stat name="name" val="Ketra Orc" /> | |
394 | + <!-- Chaotic Enable Update Flag --> | |
395 | + <stat name="ChaoticFlag" val="True" /> | |
396 | + <!-- Chaotic Enable Skill Nobles --> | |
397 | + <stat name="ChaoticNobles" val="True" /> | |
398 | + <!-- Chaotic Heal Full HP/CP/MP --> | |
399 | + <stat name="Chaotic_HEAL_FUll_HP_CP_MP" val="True" /> | |
400 | + <!-- Chaotic Enable Mensagem onEnter onExit --> | |
401 | + <stat name="ChaoticMensagem" val="True" /> | |
402 | + <!-- Chaotic Delay Mensagen Time --> | |
403 | + <stat name="MensagenDelay" val="4000" /> | |
404 | + | |
405 | + <node X="137513" Y="-59681" /> | |
406 | + <node X="100011" Y="-90708" /> | |
407 | + <spawn X="131144" Y="-72360" Z="-3518" /> | |
408 | + <spawn X="130968" Y="-71992" Z="-3489" /> | |
409 | + <spawn X="130552" Y="-71768" Z="-3464" /> | |
410 | + <spawn X="130088" Y="-71896" Z="-3477" /> | |
411 | + <spawn X="129592" Y="-72056" Z="-3464" /> | |
412 | + <spawn X="129128" Y="-72344" Z="-3487" /> | |
413 | + <spawn X="129064" Y="-72856" Z="-3464" /> | |
414 | + <spawn X="129560" Y="-72856" Z="-3452" /> | |
415 | + <spawn X="129912" Y="-72664" Z="-3471" /> | |
416 | + <spawn X="130392" Y="-72408" Z="-3508" /> | |
417 | + <spawn X="130728" Y="-72584" Z="-3497" /> | |
418 | + <spawn X="130712" Y="-72184" Z="-3510" /> | |
419 | + <spawn X="130312" Y="-72120" Z="-3502" /> | |
420 | + <spawn X="129872" Y="-72292" Z="-3503" /> | |
421 | + <spawn X="129402" Y="-72557" Z="-3497" /> | |
422 | + <spawn X="128824" Y="-73272" Z="-3438" /> | |
423 | + <spawn X="128392" Y="-73016" Z="-3464" /> | |
424 | + <spawn X="128248" Y="-73384" Z="-3405" /> | |
425 | + <spawn X="127912" Y="-73016" Z="-3453" /> | |
426 | + <spawn X="127688" Y="-73416" Z="-3418" /> | |
427 | + <spawn X="127400" Y="-73176" Z="-3384" /> | |
428 | + <spawn X="127016" Y="-73608" Z="-3384" /> | |
429 | + <spawn X="126904" Y="-72984" Z="-3272" /> | |
430 | + <spawn X="126488" Y="-72552" Z="-3208" /> | |
431 | + <spawn X="126088" Y="-72264" Z="-3161" /> | |
432 | + <spawn X="126024" Y="-71880" Z="-3105" /> | |
433 | + <spawn X="127080" Y="-74184" Z="-3265" /> | |
434 | + <spawn X="127048" Y="-74728" Z="-3109" /> | |
435 | + <spawn X="126632" Y="-75080" Z="-2997" /> | |
436 | + <spawn X="126584" Y="-75384" Z="-2887" /> | |
437 | + <spawn X="126296" Y="-75544" Z="-2857" /> | |
438 | + <spawn X="126120" Y="-75688" Z="-2852" /> | |
439 | + <spawn X="127144" Y="-73304" Z="-3368" /> | |
440 | + <spawn X="128696" Y="-73048" Z="-3446" /> | |
441 | + <spawn X="128088" Y="-71944" Z="-2824" /> | |
442 | + <spawn X="126920" Y="-71736" Z="-2816" /> | |
443 | + <spawn X="128168" Y="-71880" Z="-2848" /> | |
444 | + <spawn X="129016" Y="-71080" Z="-2824" /> | |
445 | + <spawn X="130440" Y="-73432" Z="-2904" /> | |
446 | + <spawn X="127928" Y="-74488" Z="-2608" /> | |
447 | + </zone> | |
448 | + | |
449 | + <!-- Imperial Tomb --> | |
450 | + <zone type="ChaoticZone" shape="Cuboid" minZ="-10000" maxZ="10000"> | |
451 | + <!-- Name Chaotic ExShowScreenMessage --> | |
452 | + <stat name="name" val="Imperial Tomb" /> | |
453 | + <!-- Chaotic Enable Update Flag --> | |
454 | + <stat name="ChaoticFlag" val="True" /> | |
455 | + <!-- Chaotic Enable Skill Nobles --> | |
456 | + <stat name="ChaoticNobles" val="True" /> | |
457 | + <!-- Chaotic Heal Full HP/CP/MP --> | |
458 | + <stat name="Chaotic_HEAL_FUll_HP_CP_MP" val="True" /> | |
459 | + <!-- Chaotic Enable Mensagem onEnter onExit --> | |
460 | + <stat name="ChaoticMensagem" val="True" /> | |
461 | + <!-- Chaotic Delay Mensagen Time --> | |
462 | + <stat name="MensagenDelay" val="4000" /> | |
463 | + | |
464 | + <node X="197805" Y="-67585" /> | |
465 | + <node X="173512" Y="-91135" /> | |
466 | + <spawn X="180408" Y="-78696" Z="-2728" /> | |
467 | + <spawn X="182440" Y="-78696" Z="-2728" /> | |
468 | + <spawn X="181384" Y="-79688" Z="-2728" /> | |
469 | + <spawn X="181416" Y="-77576" Z="-2728" /> | |
470 | + <spawn X="181288" Y="-78584" Z="-2728" /> | |
471 | + <spawn X="181336" Y="-78776" Z="-2728" /> | |
472 | + <spawn X="181512" Y="-78696" Z="-2728" /> | |
473 | + <spawn X="181480" Y="-78520" Z="-2727" /> | |
474 | + <spawn X="181992" Y="-78680" Z="-2728" /> | |
475 | + <spawn X="181368" Y="-79256" Z="-2728" /> | |
476 | + <spawn X="180904" Y="-78696" Z="-2728" /> | |
477 | + <spawn X="180200" Y="-78168" Z="-2731" /> | |
478 | + <spawn X="180248" Y="-79240" Z="-2729" /> | |
479 | + <spawn X="180872" Y="-79944" Z="-2731" /> | |
480 | + <spawn X="181944" Y="-79960" Z="-2731" /> | |
481 | + <spawn X="182664" Y="-79208" Z="-2728" /> | |
482 | + <spawn X="182648" Y="-78104" Z="-2728" /> | |
483 | + <spawn X="182088" Y="-77448" Z="-2731" /> | |
484 | + <spawn X="180856" Y="-77448" Z="-2731" /> | |
485 | + <spawn X="181384" Y="-77960" Z="-2728" /> | |
486 | + </zone> | |
487 | +</list> |