Kraker

diff_multizone_gs_362

Jul 19th, 2016
844
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Diff 15.56 KB | None | 0 0
  1. Index: java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminZone.java
  2. ===================================================================
  3. --- java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminZone.java  (revision 52)
  4. +++ java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminZone.java  (working copy)
  5. @@ -111,6 +111,7 @@
  6.         html.replace("%DANGERAREA%", (activeChar.isInsideZone(ZoneId.DANGER_AREA) ? "<font color=\"LEVEL\">YES</font>" : "NO"));
  7.         html.replace("%CASTONARTIFACT%", (activeChar.isInsideZone(ZoneId.CAST_ON_ARTIFACT) ? "<font color=\"LEVEL\">YES</font>" : "NO"));
  8.         html.replace("%NORESTART%", (activeChar.isInsideZone(ZoneId.NO_RESTART) ? "<font color=\"LEVEL\">YES</font>" : "NO"));
  9. +       html.replace("%MULTI%", (activeChar.isInsideZone(ZoneId.MULTI) ? "<font color=\"LEVEL\">YES</font>" : "NO"));
  10.        
  11.         final StringBuilder sb = new StringBuilder(100);
  12.         for (L2ZoneType zone : World.getInstance().getRegion(x, y).getZones())
  13. Index: java/net/sf/l2j/gameserver/model/L2Skill.java
  14. ===================================================================
  15. --- java/net/sf/l2j/gameserver/model/L2Skill.java   (revision 52)
  16. +++ java/net/sf/l2j/gameserver/model/L2Skill.java   (working copy)
  17. @@ -43,6 +43,7 @@
  18.  import net.sf.l2j.gameserver.model.item.type.ArmorType;
  19.  import net.sf.l2j.gameserver.model.item.type.WeaponType;
  20.  import net.sf.l2j.gameserver.model.zone.ZoneId;
  21. +import net.sf.l2j.gameserver.model.zone.type.L2MultiZone;
  22.  import net.sf.l2j.gameserver.network.SystemMessageId;
  23.  import net.sf.l2j.gameserver.network.serverpackets.SystemMessage;
  24.  import net.sf.l2j.gameserver.skills.Env;
  25. @@ -2177,6 +2178,9 @@
  26.         if (effected instanceof L2DoorInstance || effected instanceof L2SiegeFlagInstance)
  27.             return Collections.emptyList();
  28.        
  29. +       if ((effected instanceof L2PcInstance || effected instanceof L2PetInstance) && effected.isInsideZone(ZoneId.MULTI) && L2MultiZone.isRestrictedSkill(getId()))
  30. +           return Collections.emptyList();
  31. +      
  32.         if (effector != effected)
  33.         {
  34.             if (isOffensive() || isDebuff())
  35. Index: java/net/sf/l2j/gameserver/model/zone/ZoneId.java
  36. ===================================================================
  37. --- java/net/sf/l2j/gameserver/model/zone/ZoneId.java   (revision 52)
  38. +++ java/net/sf/l2j/gameserver/model/zone/ZoneId.java   (working copy)
  39. @@ -38,7 +38,8 @@
  40.     DANGER_AREA(15),
  41.     CAST_ON_ARTIFACT(16),
  42.     NO_RESTART(17),
  43. -   SCRIPT(18);
  44. +   SCRIPT(18),
  45. +   MULTI(19);
  46.    
  47.     private final int _id;
  48.    
  49. Index: java/net/sf/l2j/gameserver/model/zone/type/L2MultiZone.java
  50. ===================================================================
  51. --- java/net/sf/l2j/gameserver/model/zone/type/L2MultiZone.java (revision 0)
  52. +++ java/net/sf/l2j/gameserver/model/zone/type/L2MultiZone.java (working copy)
  53. @@ -0,0 +1,234 @@
  54. +/*
  55. + * This program is free software: you can redistribute it and/or modify it under
  56. + * the terms of the GNU General Public License as published by the Free Software
  57. + * Foundation, either version 3 of the License, or (at your option) any later
  58. + * version.
  59. + *
  60. + * This program is distributed in the hope that it will be useful, but WITHOUT
  61. + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
  62. + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
  63. + * details.
  64. + *
  65. + * You should have received a copy of the GNU General Public License along with
  66. + * this program. If not, see <http://www.gnu.org/licenses/>.
  67. + */
  68. +package net.sf.l2j.gameserver.model.zone.type;
  69. +
  70. +import java.util.ArrayList;
  71. +import java.util.List;
  72. +
  73. +import net.sf.l2j.commons.concurrent.ThreadPool;
  74. +import net.sf.l2j.commons.random.Rnd;
  75. +import net.sf.l2j.gameserver.model.L2Effect;
  76. +import net.sf.l2j.gameserver.model.Location;
  77. +import net.sf.l2j.gameserver.model.actor.L2Character;
  78. +import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
  79. +import net.sf.l2j.gameserver.model.actor.instance.L2PetInstance;
  80. +import net.sf.l2j.gameserver.model.item.instance.ItemInstance;
  81. +import net.sf.l2j.gameserver.model.zone.L2ZoneType;
  82. +import net.sf.l2j.gameserver.model.zone.ZoneId;
  83. +import net.sf.l2j.gameserver.network.serverpackets.ExShowScreenMessage;
  84. +import net.sf.l2j.gameserver.network.serverpackets.InventoryUpdate;
  85. +
  86. +/**
  87. + * @author rapfersan92
  88. + */
  89. +public class L2MultiZone extends L2ZoneType
  90. +{
  91. +   private static boolean _isNoRestart;
  92. +   private static boolean _isNoStore;
  93. +   private static boolean _isNoSummonFriend;
  94. +   private static boolean _isFlagEnabled;
  95. +   private static boolean _isReviveEnabled;
  96. +   private static boolean _isHealEnabled;
  97. +   private static int _revivePower;
  98. +   private static int _reviveDelay;
  99. +   private static List<Location> _reviveLocations = new ArrayList<>();
  100. +   private static List<Integer> _restrictedItems = new ArrayList<>();
  101. +   private static List<Integer> _restrictedSkills = new ArrayList<>();
  102. +  
  103. +   public L2MultiZone(int id)
  104. +   {
  105. +       super(id);
  106. +      
  107. +       _isNoRestart = false;
  108. +       _isNoStore = false;
  109. +       _isNoSummonFriend = false;
  110. +       _isFlagEnabled = false;
  111. +       _isReviveEnabled = false;
  112. +       _isHealEnabled = false;
  113. +       _revivePower = 0;
  114. +       _reviveDelay = 0;
  115. +   }
  116. +  
  117. +   @Override
  118. +   public void setParameter(String name, String value)
  119. +   {
  120. +       if (name.equals("isNoRestart"))
  121. +           _isNoRestart = Boolean.parseBoolean(value);
  122. +       else if (name.equals("isNoStore"))
  123. +           _isNoStore = Boolean.parseBoolean(value);
  124. +       else if (name.equals("isNoSummonFriend"))
  125. +           _isNoSummonFriend = Boolean.parseBoolean(value);
  126. +       else if (name.equals("isFlagEnabled"))
  127. +           _isFlagEnabled = Boolean.parseBoolean(value);
  128. +       else if (name.equals("isReviveEnabled"))
  129. +           _isReviveEnabled = Boolean.parseBoolean(value);
  130. +       else if (name.equals("isHealEnabled"))
  131. +           _isHealEnabled = Boolean.parseBoolean(value);
  132. +       else if (name.equals("revivePower"))
  133. +           _revivePower = Integer.parseInt(value);
  134. +       else if (name.equals("reviveDelay"))
  135. +           _reviveDelay = Integer.parseInt(value);
  136. +       else if (name.equals("reviveLocations"))
  137. +       {
  138. +           String[] property = value.split(";");
  139. +           for (String data : property)
  140. +           {
  141. +               String[] coordinates = data.split(",");
  142. +               _reviveLocations.add(new Location(Integer.parseInt(coordinates[0]), Integer.parseInt(coordinates[1]), Integer.parseInt(coordinates[2])));
  143. +           }
  144. +       }
  145. +       else if (name.equals("restrictedItems"))
  146. +       {
  147. +           String[] property = value.split(",");
  148. +           for (String itemId : property)
  149. +               _restrictedItems.add(Integer.parseInt(itemId));
  150. +       }
  151. +       else if (name.equals("restrictedSkills"))
  152. +       {
  153. +           String[] property = value.split(",");
  154. +           for (String skillId : property)
  155. +               _restrictedSkills.add(Integer.parseInt(skillId));
  156. +       }
  157. +       else
  158. +           super.setParameter(name, value);
  159. +   }
  160. +  
  161. +   @Override
  162. +   protected void onEnter(L2Character character)
  163. +   {
  164. +       character.setInsideZone(ZoneId.MULTI, true);
  165. +      
  166. +       if (_isNoRestart)
  167. +           character.setInsideZone(ZoneId.NO_RESTART, true);
  168. +      
  169. +       if (_isNoStore)
  170. +           character.setInsideZone(ZoneId.NO_STORE, true);
  171. +      
  172. +       if (_isNoSummonFriend)
  173. +           character.setInsideZone(ZoneId.NO_SUMMON_FRIEND, true);
  174. +      
  175. +       if (character instanceof L2PcInstance || character instanceof L2PetInstance)
  176. +       {
  177. +           final L2PcInstance player = (L2PcInstance) character;
  178. +           player.sendPacket(new ExShowScreenMessage("You have entered a multi zone.", 5000));
  179. +          
  180. +           if (_isFlagEnabled)
  181. +               player.updatePvPFlag(1);
  182. +          
  183. +           checkItemRestriction(character);
  184. +           checkSkillRestriction(character);
  185. +       }
  186. +   }
  187. +  
  188. +   @Override
  189. +   protected void onExit(L2Character character)
  190. +   {
  191. +       character.setInsideZone(ZoneId.MULTI, false);
  192. +      
  193. +       if (_isNoRestart)
  194. +           character.setInsideZone(ZoneId.NO_RESTART, false);
  195. +      
  196. +       if (_isNoStore)
  197. +           character.setInsideZone(ZoneId.NO_STORE, false);
  198. +      
  199. +       if (_isNoSummonFriend)
  200. +           character.setInsideZone(ZoneId.NO_SUMMON_FRIEND, false);
  201. +      
  202. +       if (character instanceof L2PcInstance)
  203. +       {
  204. +           final L2PcInstance player = (L2PcInstance) character;
  205. +           player.sendPacket(new ExShowScreenMessage("You have left a multi zone.", 5000));
  206. +          
  207. +           if (_isFlagEnabled)
  208. +               player.updatePvPFlag(0);
  209. +       }
  210. +   }
  211. +  
  212. +   @Override
  213. +   public void onDieInside(L2Character character)
  214. +   {
  215. +       if (character instanceof L2PcInstance && _isReviveEnabled)
  216. +       {
  217. +           ThreadPool.schedule(() -> respawnCharacter(character), _reviveDelay * 1000);
  218. +           character.sendPacket(new ExShowScreenMessage("You will be revived in " + _reviveDelay + " second(s).", 5000));
  219. +       }
  220. +   }
  221. +  
  222. +   @Override
  223. +   public void onReviveInside(L2Character character)
  224. +   {
  225. +       if (character instanceof L2PcInstance && _isHealEnabled)
  226. +       {
  227. +           character.setCurrentCp(character.getMaxCp());
  228. +           character.setCurrentHp(character.getMaxHp());
  229. +           character.setCurrentMp(character.getMaxMp());
  230. +           character.sendPacket(new ExShowScreenMessage("Your CP, HP and MP have been restored.", 5000));
  231. +       }
  232. +   }
  233. +  
  234. +   private static void respawnCharacter(L2Character character)
  235. +   {
  236. +       if (character.isDead())
  237. +       {
  238. +           character.doRevive(_revivePower);
  239. +           character.teleToLocation(Rnd.get(_reviveLocations), 20);
  240. +       }
  241. +   }
  242. +  
  243. +   private static void checkItemRestriction(L2Character character)
  244. +   {
  245. +       for (ItemInstance item : character.getInventory().getPaperdollItems())
  246. +       {
  247. +           if (item == null || !isRestrictedItem(item.getItemId()))
  248. +               continue;
  249. +          
  250. +           character.getInventory().unEquipItemInSlot(item.getLocationSlot());
  251. +           InventoryUpdate iu = new InventoryUpdate();
  252. +           iu.addModifiedItem(item);
  253. +           character.sendPacket(iu);
  254. +       }
  255. +   }
  256. +  
  257. +   private static void checkSkillRestriction(L2Character character)
  258. +   {
  259. +       for (L2Effect effect : character.getAllEffects())
  260. +       {
  261. +           if (effect == null || !isRestrictedSkill(effect.getSkill().getId()))
  262. +               continue;
  263. +          
  264. +           effect.exit(true);
  265. +       }
  266. +   }
  267. +  
  268. +   public static boolean isFlagEnabled()
  269. +   {
  270. +       return _isFlagEnabled;
  271. +   }
  272. +  
  273. +   public static boolean isReviveEnabled()
  274. +   {
  275. +       return _isReviveEnabled;
  276. +   }
  277. +  
  278. +   public static boolean isRestrictedItem(int itemId)
  279. +   {
  280. +       return _restrictedItems.contains(itemId);
  281. +   }
  282. +  
  283. +   public static boolean isRestrictedSkill(int skillId)
  284. +   {
  285. +       return _restrictedSkills.contains(skillId);
  286. +   }
  287. +}
  288. \ No newline at end of file
  289. Index: java/net/sf/l2j/gameserver/network/clientpackets/RequestMagicSkillUse.java
  290. ===================================================================
  291. --- java/net/sf/l2j/gameserver/network/clientpackets/RequestMagicSkillUse.java  (revision 52)
  292. +++ java/net/sf/l2j/gameserver/network/clientpackets/RequestMagicSkillUse.java  (working copy)
  293. @@ -21,6 +21,8 @@
  294.  import net.sf.l2j.gameserver.datatables.SkillTable;
  295.  import net.sf.l2j.gameserver.model.L2Skill;
  296.  import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
  297. +import net.sf.l2j.gameserver.model.zone.ZoneId;
  298. +import net.sf.l2j.gameserver.model.zone.type.L2MultiZone;
  299.  import net.sf.l2j.gameserver.network.serverpackets.ActionFailed;
  300.  import net.sf.l2j.gameserver.templates.skills.L2SkillType;
  301.  
  302. @@ -83,6 +85,13 @@
  303.             return;
  304.         }
  305.        
  306. +       if (activeChar.isInsideZone(ZoneId.MULTI) && L2MultiZone.isRestrictedSkill(skill.getId()))
  307. +       {
  308. +           activeChar.sendMessage(skill.getName() + " cannot be used inside multi zone.");
  309. +           activeChar.sendPacket(ActionFailed.STATIC_PACKET);
  310. +           return;
  311. +       }
  312. +      
  313.         if (activeChar.isAttackingNow())
  314.         {
  315.             if (skill.isToggle())
  316. Index: java/net/sf/l2j/gameserver/network/clientpackets/RequestPetUseItem.java
  317. ===================================================================
  318. --- java/net/sf/l2j/gameserver/network/clientpackets/RequestPetUseItem.java (revision 52)
  319. +++ java/net/sf/l2j/gameserver/network/clientpackets/RequestPetUseItem.java (working copy)
  320. @@ -21,6 +21,8 @@
  321.  import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
  322.  import net.sf.l2j.gameserver.model.actor.instance.L2PetInstance;
  323.  import net.sf.l2j.gameserver.model.item.instance.ItemInstance;
  324. +import net.sf.l2j.gameserver.model.zone.ZoneId;
  325. +import net.sf.l2j.gameserver.model.zone.type.L2MultiZone;
  326.  import net.sf.l2j.gameserver.network.SystemMessageId;
  327.  import net.sf.l2j.gameserver.network.serverpackets.PetItemList;
  328.  import net.sf.l2j.gameserver.network.serverpackets.SystemMessage;
  329. @@ -67,6 +69,12 @@
  330.         if (!item.isEquipped() && !item.getItem().checkCondition(pet, pet, true))
  331.             return;
  332.        
  333. +       if (activeChar.isInsideZone(ZoneId.MULTI) && L2MultiZone.isRestrictedItem(item.getItemId()))
  334. +       {
  335. +           activeChar.sendMessage(item.getName() + " cannot be used inside multi zone.");
  336. +           return;
  337. +       }
  338. +      
  339.         // Check if item is pet armor or pet weapon
  340.         if (item.isPetItem())
  341.         {
  342. Index: java/net/sf/l2j/gameserver/network/clientpackets/UseItem.java
  343. ===================================================================
  344. --- java/net/sf/l2j/gameserver/network/clientpackets/UseItem.java   (revision 52)
  345. +++ java/net/sf/l2j/gameserver/network/clientpackets/UseItem.java   (working copy)
  346. @@ -29,6 +29,8 @@
  347.  import net.sf.l2j.gameserver.model.item.type.EtcItemType;
  348.  import net.sf.l2j.gameserver.model.item.type.WeaponType;
  349.  import net.sf.l2j.gameserver.model.itemcontainer.Inventory;
  350. +import net.sf.l2j.gameserver.model.zone.ZoneId;
  351. +import net.sf.l2j.gameserver.model.zone.type.L2MultiZone;
  352.  import net.sf.l2j.gameserver.network.SystemMessageId;
  353.  import net.sf.l2j.gameserver.network.serverpackets.ItemList;
  354.  import net.sf.l2j.gameserver.network.serverpackets.PetItemList;
  355. @@ -182,6 +184,12 @@
  356.                 return;
  357.         }
  358.        
  359. +       if (activeChar.isInsideZone(ZoneId.MULTI) && L2MultiZone.isRestrictedItem(item.getItemId()))
  360. +       {
  361. +           activeChar.sendMessage(item.getName() + " cannot be used inside multi zone.");
  362. +           return;
  363. +       }
  364. +      
  365.         if (item.isEquipable())
  366.         {
  367.             if (activeChar.isCastingNow() || activeChar.isCastingSimultaneouslyNow())
  368. Index: java/net/sf/l2j/gameserver/network/serverpackets/Die.java
  369. ===================================================================
  370. --- java/net/sf/l2j/gameserver/network/serverpackets/Die.java   (revision 52)
  371. +++ java/net/sf/l2j/gameserver/network/serverpackets/Die.java   (working copy)
  372. @@ -21,6 +21,8 @@
  373.  import net.sf.l2j.gameserver.model.actor.L2Character;
  374.  import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
  375.  import net.sf.l2j.gameserver.model.entity.Castle;
  376. +import net.sf.l2j.gameserver.model.zone.ZoneId;
  377. +import net.sf.l2j.gameserver.model.zone.type.L2MultiZone;
  378.  
  379.  public class Die extends L2GameServerPacket
  380.  {
  381. @@ -57,7 +59,7 @@
  382.        
  383.         writeC(0x06);
  384.         writeD(_charObjId);
  385. -       writeD(0x01); // to nearest village
  386. +       writeD(_activeChar.isInsideZone(ZoneId.MULTI) && L2MultiZone.isReviveEnabled() ? 0x00 : 0x01); // to nearest village
  387.        
  388.         if (_clan != null)
  389.         {
  390. Index: java/net/sf/l2j/gameserver/taskmanager/PvpFlagTaskManager.java
  391. ===================================================================
  392. --- java/net/sf/l2j/gameserver/taskmanager/PvpFlagTaskManager.java  (revision 52)
  393. +++ java/net/sf/l2j/gameserver/taskmanager/PvpFlagTaskManager.java  (working copy)
  394. @@ -20,6 +20,8 @@
  395.  import net.sf.l2j.commons.concurrent.ThreadPool;
  396.  
  397.  import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
  398. +import net.sf.l2j.gameserver.model.zone.ZoneId;
  399. +import net.sf.l2j.gameserver.model.zone.type.L2MultiZone;
  400.  
  401.  /**
  402.   * Updates and clears PvP flag of {@link L2PcInstance} after specified time.
  403. @@ -72,8 +74,14 @@
  404.         // Loop all players.
  405.         for (Map.Entry<L2PcInstance, Long> entry : _players.entrySet())
  406.         {
  407. +           final L2PcInstance player = entry.getKey();
  408. +           if (player.isInsideZone(ZoneId.MULTI) && L2MultiZone.isFlagEnabled())
  409. +           {
  410. +               _players.remove(player);
  411. +               continue;
  412. +           }
  413. +          
  414.             // Get time left and check.
  415. -           final L2PcInstance player = entry.getKey();
  416.             final long timeLeft = entry.getValue();
  417.            
  418.             // Time is running out, clear PvP flag and remove from list.
Add Comment
Please, Sign In to add comment