Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Index: java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminZone.java
- ===================================================================
- --- java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminZone.java (revision 52)
- +++ java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminZone.java (working copy)
- @@ -111,6 +111,7 @@
- html.replace("%DANGERAREA%", (activeChar.isInsideZone(ZoneId.DANGER_AREA) ? "<font color=\"LEVEL\">YES</font>" : "NO"));
- html.replace("%CASTONARTIFACT%", (activeChar.isInsideZone(ZoneId.CAST_ON_ARTIFACT) ? "<font color=\"LEVEL\">YES</font>" : "NO"));
- html.replace("%NORESTART%", (activeChar.isInsideZone(ZoneId.NO_RESTART) ? "<font color=\"LEVEL\">YES</font>" : "NO"));
- + html.replace("%MULTI%", (activeChar.isInsideZone(ZoneId.MULTI) ? "<font color=\"LEVEL\">YES</font>" : "NO"));
- final StringBuilder sb = new StringBuilder(100);
- for (L2ZoneType zone : World.getInstance().getRegion(x, y).getZones())
- Index: java/net/sf/l2j/gameserver/model/L2Skill.java
- ===================================================================
- --- java/net/sf/l2j/gameserver/model/L2Skill.java (revision 52)
- +++ java/net/sf/l2j/gameserver/model/L2Skill.java (working copy)
- @@ -43,6 +43,7 @@
- import net.sf.l2j.gameserver.model.item.type.ArmorType;
- import net.sf.l2j.gameserver.model.item.type.WeaponType;
- import net.sf.l2j.gameserver.model.zone.ZoneId;
- +import net.sf.l2j.gameserver.model.zone.type.L2MultiZone;
- import net.sf.l2j.gameserver.network.SystemMessageId;
- import net.sf.l2j.gameserver.network.serverpackets.SystemMessage;
- import net.sf.l2j.gameserver.skills.Env;
- @@ -2177,6 +2178,9 @@
- if (effected instanceof L2DoorInstance || effected instanceof L2SiegeFlagInstance)
- return Collections.emptyList();
- + if ((effected instanceof L2PcInstance || effected instanceof L2PetInstance) && effected.isInsideZone(ZoneId.MULTI) && L2MultiZone.isRestrictedSkill(getId()))
- + return Collections.emptyList();
- +
- if (effector != effected)
- {
- if (isOffensive() || isDebuff())
- Index: java/net/sf/l2j/gameserver/model/zone/ZoneId.java
- ===================================================================
- --- java/net/sf/l2j/gameserver/model/zone/ZoneId.java (revision 52)
- +++ java/net/sf/l2j/gameserver/model/zone/ZoneId.java (working copy)
- @@ -38,7 +38,8 @@
- DANGER_AREA(15),
- CAST_ON_ARTIFACT(16),
- NO_RESTART(17),
- - SCRIPT(18);
- + SCRIPT(18),
- + MULTI(19);
- private final int _id;
- Index: java/net/sf/l2j/gameserver/model/zone/type/L2MultiZone.java
- ===================================================================
- --- java/net/sf/l2j/gameserver/model/zone/type/L2MultiZone.java (revision 0)
- +++ java/net/sf/l2j/gameserver/model/zone/type/L2MultiZone.java (working copy)
- @@ -0,0 +1,234 @@
- +/*
- + * This program is free software: you can redistribute it and/or modify it under
- + * the terms of the GNU General Public License as published by the Free Software
- + * Foundation, either version 3 of the License, or (at your option) any later
- + * version.
- + *
- + * This program is distributed in the hope that it will be useful, but WITHOUT
- + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
- + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
- + * details.
- + *
- + * You should have received a copy of the GNU General Public License along with
- + * this program. If not, see <http://www.gnu.org/licenses/>.
- + */
- +package net.sf.l2j.gameserver.model.zone.type;
- +
- +import java.util.ArrayList;
- +import java.util.List;
- +
- +import net.sf.l2j.commons.concurrent.ThreadPool;
- +import net.sf.l2j.commons.random.Rnd;
- +import net.sf.l2j.gameserver.model.L2Effect;
- +import net.sf.l2j.gameserver.model.Location;
- +import net.sf.l2j.gameserver.model.actor.L2Character;
- +import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
- +import net.sf.l2j.gameserver.model.actor.instance.L2PetInstance;
- +import net.sf.l2j.gameserver.model.item.instance.ItemInstance;
- +import net.sf.l2j.gameserver.model.zone.L2ZoneType;
- +import net.sf.l2j.gameserver.model.zone.ZoneId;
- +import net.sf.l2j.gameserver.network.serverpackets.ExShowScreenMessage;
- +import net.sf.l2j.gameserver.network.serverpackets.InventoryUpdate;
- +
- +/**
- + * @author rapfersan92
- + */
- +public class L2MultiZone extends L2ZoneType
- +{
- + private static boolean _isNoRestart;
- + private static boolean _isNoStore;
- + private static boolean _isNoSummonFriend;
- + private static boolean _isFlagEnabled;
- + private static boolean _isReviveEnabled;
- + private static boolean _isHealEnabled;
- + private static int _revivePower;
- + private static int _reviveDelay;
- + private static List<Location> _reviveLocations = new ArrayList<>();
- + private static List<Integer> _restrictedItems = new ArrayList<>();
- + private static List<Integer> _restrictedSkills = new ArrayList<>();
- +
- + public L2MultiZone(int id)
- + {
- + super(id);
- +
- + _isNoRestart = false;
- + _isNoStore = false;
- + _isNoSummonFriend = false;
- + _isFlagEnabled = false;
- + _isReviveEnabled = false;
- + _isHealEnabled = false;
- + _revivePower = 0;
- + _reviveDelay = 0;
- + }
- +
- + @Override
- + public void setParameter(String name, String value)
- + {
- + if (name.equals("isNoRestart"))
- + _isNoRestart = Boolean.parseBoolean(value);
- + else if (name.equals("isNoStore"))
- + _isNoStore = Boolean.parseBoolean(value);
- + else if (name.equals("isNoSummonFriend"))
- + _isNoSummonFriend = Boolean.parseBoolean(value);
- + else if (name.equals("isFlagEnabled"))
- + _isFlagEnabled = Boolean.parseBoolean(value);
- + else if (name.equals("isReviveEnabled"))
- + _isReviveEnabled = Boolean.parseBoolean(value);
- + else if (name.equals("isHealEnabled"))
- + _isHealEnabled = Boolean.parseBoolean(value);
- + else if (name.equals("revivePower"))
- + _revivePower = Integer.parseInt(value);
- + else if (name.equals("reviveDelay"))
- + _reviveDelay = Integer.parseInt(value);
- + else if (name.equals("reviveLocations"))
- + {
- + String[] property = value.split(";");
- + for (String data : property)
- + {
- + String[] coordinates = data.split(",");
- + _reviveLocations.add(new Location(Integer.parseInt(coordinates[0]), Integer.parseInt(coordinates[1]), Integer.parseInt(coordinates[2])));
- + }
- + }
- + else if (name.equals("restrictedItems"))
- + {
- + String[] property = value.split(",");
- + for (String itemId : property)
- + _restrictedItems.add(Integer.parseInt(itemId));
- + }
- + else if (name.equals("restrictedSkills"))
- + {
- + String[] property = value.split(",");
- + for (String skillId : property)
- + _restrictedSkills.add(Integer.parseInt(skillId));
- + }
- + else
- + super.setParameter(name, value);
- + }
- +
- + @Override
- + protected void onEnter(L2Character character)
- + {
- + character.setInsideZone(ZoneId.MULTI, true);
- +
- + if (_isNoRestart)
- + character.setInsideZone(ZoneId.NO_RESTART, true);
- +
- + if (_isNoStore)
- + character.setInsideZone(ZoneId.NO_STORE, true);
- +
- + if (_isNoSummonFriend)
- + character.setInsideZone(ZoneId.NO_SUMMON_FRIEND, true);
- +
- + if (character instanceof L2PcInstance || character instanceof L2PetInstance)
- + {
- + final L2PcInstance player = (L2PcInstance) character;
- + player.sendPacket(new ExShowScreenMessage("You have entered a multi zone.", 5000));
- +
- + if (_isFlagEnabled)
- + player.updatePvPFlag(1);
- +
- + checkItemRestriction(character);
- + checkSkillRestriction(character);
- + }
- + }
- +
- + @Override
- + protected void onExit(L2Character character)
- + {
- + character.setInsideZone(ZoneId.MULTI, false);
- +
- + if (_isNoRestart)
- + character.setInsideZone(ZoneId.NO_RESTART, false);
- +
- + if (_isNoStore)
- + character.setInsideZone(ZoneId.NO_STORE, false);
- +
- + if (_isNoSummonFriend)
- + character.setInsideZone(ZoneId.NO_SUMMON_FRIEND, false);
- +
- + if (character instanceof L2PcInstance)
- + {
- + final L2PcInstance player = (L2PcInstance) character;
- + player.sendPacket(new ExShowScreenMessage("You have left a multi zone.", 5000));
- +
- + if (_isFlagEnabled)
- + player.updatePvPFlag(0);
- + }
- + }
- +
- + @Override
- + public void onDieInside(L2Character character)
- + {
- + if (character instanceof L2PcInstance && _isReviveEnabled)
- + {
- + ThreadPool.schedule(() -> respawnCharacter(character), _reviveDelay * 1000);
- + character.sendPacket(new ExShowScreenMessage("You will be revived in " + _reviveDelay + " second(s).", 5000));
- + }
- + }
- +
- + @Override
- + public void onReviveInside(L2Character character)
- + {
- + if (character instanceof L2PcInstance && _isHealEnabled)
- + {
- + character.setCurrentCp(character.getMaxCp());
- + character.setCurrentHp(character.getMaxHp());
- + character.setCurrentMp(character.getMaxMp());
- + character.sendPacket(new ExShowScreenMessage("Your CP, HP and MP have been restored.", 5000));
- + }
- + }
- +
- + private static void respawnCharacter(L2Character character)
- + {
- + if (character.isDead())
- + {
- + character.doRevive(_revivePower);
- + character.teleToLocation(Rnd.get(_reviveLocations), 20);
- + }
- + }
- +
- + private static void checkItemRestriction(L2Character character)
- + {
- + for (ItemInstance item : character.getInventory().getPaperdollItems())
- + {
- + if (item == null || !isRestrictedItem(item.getItemId()))
- + continue;
- +
- + character.getInventory().unEquipItemInSlot(item.getLocationSlot());
- + InventoryUpdate iu = new InventoryUpdate();
- + iu.addModifiedItem(item);
- + character.sendPacket(iu);
- + }
- + }
- +
- + private static void checkSkillRestriction(L2Character character)
- + {
- + for (L2Effect effect : character.getAllEffects())
- + {
- + if (effect == null || !isRestrictedSkill(effect.getSkill().getId()))
- + continue;
- +
- + effect.exit(true);
- + }
- + }
- +
- + public static boolean isFlagEnabled()
- + {
- + return _isFlagEnabled;
- + }
- +
- + public static boolean isReviveEnabled()
- + {
- + return _isReviveEnabled;
- + }
- +
- + public static boolean isRestrictedItem(int itemId)
- + {
- + return _restrictedItems.contains(itemId);
- + }
- +
- + public static boolean isRestrictedSkill(int skillId)
- + {
- + return _restrictedSkills.contains(skillId);
- + }
- +}
- \ No newline at end of file
- Index: java/net/sf/l2j/gameserver/network/clientpackets/RequestMagicSkillUse.java
- ===================================================================
- --- java/net/sf/l2j/gameserver/network/clientpackets/RequestMagicSkillUse.java (revision 52)
- +++ java/net/sf/l2j/gameserver/network/clientpackets/RequestMagicSkillUse.java (working copy)
- @@ -21,6 +21,8 @@
- import net.sf.l2j.gameserver.datatables.SkillTable;
- import net.sf.l2j.gameserver.model.L2Skill;
- import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
- +import net.sf.l2j.gameserver.model.zone.ZoneId;
- +import net.sf.l2j.gameserver.model.zone.type.L2MultiZone;
- import net.sf.l2j.gameserver.network.serverpackets.ActionFailed;
- import net.sf.l2j.gameserver.templates.skills.L2SkillType;
- @@ -83,6 +85,13 @@
- return;
- }
- + if (activeChar.isInsideZone(ZoneId.MULTI) && L2MultiZone.isRestrictedSkill(skill.getId()))
- + {
- + activeChar.sendMessage(skill.getName() + " cannot be used inside multi zone.");
- + activeChar.sendPacket(ActionFailed.STATIC_PACKET);
- + return;
- + }
- +
- if (activeChar.isAttackingNow())
- {
- if (skill.isToggle())
- Index: java/net/sf/l2j/gameserver/network/clientpackets/RequestPetUseItem.java
- ===================================================================
- --- java/net/sf/l2j/gameserver/network/clientpackets/RequestPetUseItem.java (revision 52)
- +++ java/net/sf/l2j/gameserver/network/clientpackets/RequestPetUseItem.java (working copy)
- @@ -21,6 +21,8 @@
- import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
- import net.sf.l2j.gameserver.model.actor.instance.L2PetInstance;
- import net.sf.l2j.gameserver.model.item.instance.ItemInstance;
- +import net.sf.l2j.gameserver.model.zone.ZoneId;
- +import net.sf.l2j.gameserver.model.zone.type.L2MultiZone;
- import net.sf.l2j.gameserver.network.SystemMessageId;
- import net.sf.l2j.gameserver.network.serverpackets.PetItemList;
- import net.sf.l2j.gameserver.network.serverpackets.SystemMessage;
- @@ -67,6 +69,12 @@
- if (!item.isEquipped() && !item.getItem().checkCondition(pet, pet, true))
- return;
- + if (activeChar.isInsideZone(ZoneId.MULTI) && L2MultiZone.isRestrictedItem(item.getItemId()))
- + {
- + activeChar.sendMessage(item.getName() + " cannot be used inside multi zone.");
- + return;
- + }
- +
- // Check if item is pet armor or pet weapon
- if (item.isPetItem())
- {
- Index: java/net/sf/l2j/gameserver/network/clientpackets/UseItem.java
- ===================================================================
- --- java/net/sf/l2j/gameserver/network/clientpackets/UseItem.java (revision 52)
- +++ java/net/sf/l2j/gameserver/network/clientpackets/UseItem.java (working copy)
- @@ -29,6 +29,8 @@
- import net.sf.l2j.gameserver.model.item.type.EtcItemType;
- import net.sf.l2j.gameserver.model.item.type.WeaponType;
- import net.sf.l2j.gameserver.model.itemcontainer.Inventory;
- +import net.sf.l2j.gameserver.model.zone.ZoneId;
- +import net.sf.l2j.gameserver.model.zone.type.L2MultiZone;
- import net.sf.l2j.gameserver.network.SystemMessageId;
- import net.sf.l2j.gameserver.network.serverpackets.ItemList;
- import net.sf.l2j.gameserver.network.serverpackets.PetItemList;
- @@ -182,6 +184,12 @@
- return;
- }
- + if (activeChar.isInsideZone(ZoneId.MULTI) && L2MultiZone.isRestrictedItem(item.getItemId()))
- + {
- + activeChar.sendMessage(item.getName() + " cannot be used inside multi zone.");
- + return;
- + }
- +
- if (item.isEquipable())
- {
- if (activeChar.isCastingNow() || activeChar.isCastingSimultaneouslyNow())
- Index: java/net/sf/l2j/gameserver/network/serverpackets/Die.java
- ===================================================================
- --- java/net/sf/l2j/gameserver/network/serverpackets/Die.java (revision 52)
- +++ java/net/sf/l2j/gameserver/network/serverpackets/Die.java (working copy)
- @@ -21,6 +21,8 @@
- import net.sf.l2j.gameserver.model.actor.L2Character;
- import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
- import net.sf.l2j.gameserver.model.entity.Castle;
- +import net.sf.l2j.gameserver.model.zone.ZoneId;
- +import net.sf.l2j.gameserver.model.zone.type.L2MultiZone;
- public class Die extends L2GameServerPacket
- {
- @@ -57,7 +59,7 @@
- writeC(0x06);
- writeD(_charObjId);
- - writeD(0x01); // to nearest village
- + writeD(_activeChar.isInsideZone(ZoneId.MULTI) && L2MultiZone.isReviveEnabled() ? 0x00 : 0x01); // to nearest village
- if (_clan != null)
- {
- Index: java/net/sf/l2j/gameserver/taskmanager/PvpFlagTaskManager.java
- ===================================================================
- --- java/net/sf/l2j/gameserver/taskmanager/PvpFlagTaskManager.java (revision 52)
- +++ java/net/sf/l2j/gameserver/taskmanager/PvpFlagTaskManager.java (working copy)
- @@ -20,6 +20,8 @@
- import net.sf.l2j.commons.concurrent.ThreadPool;
- import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
- +import net.sf.l2j.gameserver.model.zone.ZoneId;
- +import net.sf.l2j.gameserver.model.zone.type.L2MultiZone;
- /**
- * Updates and clears PvP flag of {@link L2PcInstance} after specified time.
- @@ -72,8 +74,14 @@
- // Loop all players.
- for (Map.Entry<L2PcInstance, Long> entry : _players.entrySet())
- {
- + final L2PcInstance player = entry.getKey();
- + if (player.isInsideZone(ZoneId.MULTI) && L2MultiZone.isFlagEnabled())
- + {
- + _players.remove(player);
- + continue;
- + }
- +
- // Get time left and check.
- - final L2PcInstance player = entry.getKey();
- final long timeLeft = entry.getValue();
- // Time is running out, clear PvP flag and remove from list.
Add Comment
Please, Sign In to add comment