Axelut

[L2JDev] Chaotic Zone Flag

May 15th, 2023
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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>
Add Comment
Please, Sign In to add comment