Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Index: net.sf.l2j.gameserver.network.serverpackets/die.java
- ===================================================================
- --- net.sf.l2j.gameserver.network.serverpackets/die.java (revision 84)
- +++ net.sf.l2j.gameserver.network.serverpackets/die.java (working copy)
- @@ -1281,6 +1281,10 @@
- + import net.sf.l2j.gameserver.model.zone.type.MultiZone;
- + private boolean _inZone;
- @Override
- protected final void writeImpl()
- {
- + if (_inZone)
- return;
- if (creature instanceof Player)
- {
- Player player = (Player) creature;
- _allowFixedRes = player.getAccessLevel().allowFixedRes();
- _clan = player.getClan();
- + // multi zonas
- + final MultiZone zone = ZoneManager.getInstance().getZone(player, MultiZone.class);
- + _inZone = zone != null && zone.getRevive() > 0;
- }
- Index: net.sf.l2j.gameserver.model.zone.type/MultiZone.java
- ===================================================================
- --- net.sf.l2j.gameserver.model.zone.type/MultiZone.java (revision 84)
- +++ net.sf.l2j.gameserver.model.zone.type/MultiZone.java (working copy)
- @@ -1281,6 +1281,10 @@
- + package net.sf.l2j.gameserver.model.zone.type;
- +
- + import java.util.ArrayList;
- + import java.util.Arrays;
- + import java.util.List;
- +
- + import net.sf.l2j.commons.concurrent.ThreadPool;
- +
- + import net.sf.l2j.gameserver.enums.SpawnType;
- + import net.sf.l2j.gameserver.enums.ZoneId;
- + import net.sf.l2j.gameserver.model.actor.Creature;
- + import net.sf.l2j.gameserver.model.actor.Player;
- + import net.sf.l2j.gameserver.model.actor.Summon;
- + import net.sf.l2j.gameserver.model.actor.instance.Pet;
- + import net.sf.l2j.gameserver.model.item.instance.ItemInstance;
- + import net.sf.l2j.gameserver.model.zone.type.subtype.SpawnZoneType;
- + import net.sf.l2j.gameserver.network.serverpackets.ExShowScreenMessage;
- + import net.sf.l2j.gameserver.network.serverpackets.InventoryUpdate;
- + import net.sf.l2j.gameserver.taskmanager.ZoneTaskManager;
- +
- + /**
- + * @author Juvenil Amaro
- + *
- + */
- + public class MultiZone extends SpawnZoneType
- + {
- + private String _zoneName;
- + private boolean _isNoStore;
- + private boolean _isNoSummonFriend;
- + private static boolean _isFlagEnabled;
- + private boolean _isHealEnabled;
- + private int _duration;
- + private int _reviveDelay;
- + private static List<Integer> _restrictedItems = new ArrayList<>();
- +
- + public MultiZone(int id)
- + {
- + super(id);
- + }
- +
- + @Override
- + public void setParameter(String name, String value)
- + {
- + if (name.equals("name"))
- + _zoneName = 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("isHealEnabled"))
- + _isHealEnabled = Boolean.parseBoolean(value);
- + else if (name.equals("duration"))
- + _duration = Integer.parseInt(value);
- + else if (name.equals("reviveDelay"))
- + _reviveDelay = Integer.parseInt(value);
- + else if (name.equals("restrictedItems"))
- + _restrictedItems = parseIntegers(value);
- + else
- + super.setParameter(name, value);
- + }
- +
- + @Override
- + protected void onEnter(Creature character)
- + {
- + character.setInsideZone(ZoneId.MULTI, true);
- +
- + if (_isNoStore)
- + character.setInsideZone(ZoneId.NO_STORE, true);
- +
- + if (_isNoSummonFriend)
- + character.setInsideZone(ZoneId.NO_SUMMON_FRIEND, true);
- +
- + if (character instanceof Player || character instanceof Pet)
- + {
- + final Player player = (Player) character;
- + player.sendPacket(new ExShowScreenMessage("You have entered a multi zone.", 5000));
- +
- + if (_isFlagEnabled)
- + player.updatePvPFlag(1);
- +
- + checkItemRestriction(player);
- + }
- + }
- +
- + @Override
- + protected void onExit(Creature character)
- + {
- + character.setInsideZone(ZoneId.MULTI, false);
- +
- + if (_isNoStore)
- + character.setInsideZone(ZoneId.NO_STORE, false);
- +
- + if (_isNoSummonFriend)
- + character.setInsideZone(ZoneId.NO_SUMMON_FRIEND, false);
- +
- + if (character instanceof Player)
- + {
- + final Player player = (Player) character;
- + player.sendPacket(new ExShowScreenMessage("You have left a multi zone.", 5000));
- +
- + if (_isFlagEnabled)
- + player.updatePvPFlag(0);
- + }
- + }
- +
- + public void onDie(Creature character)
- + {
- + if (character instanceof Player && _reviveDelay > 0)
- + {
- + ThreadPool.schedule(() -> respawnCharacter(((Player) character)), _reviveDelay * 1000);
- + character.sendPacket(new ExShowScreenMessage("You will be revived in " + _reviveDelay + " second(s).", 5000));
- + }
- + }
- +
- + private final void respawnCharacter(Player player)
- + {
- + if (player == null || !player.isDead())
- + return;
- +
- + player.doRevive();
- + player.teleportTo(getRndSpawn(SpawnType.NORMAL), 0);
- + }
- +
- + public void onRevive(Creature character)
- + {
- + if (character instanceof Player && _isHealEnabled)
- + {
- + final Summon pet = character.getSummon();
- + if (pet != null)
- + pet.setCurrentHpMp(pet.getMaxHp(), pet.getMaxMp());
- +
- + character.setCurrentCp(character.getMaxCp());
- + character.setCurrentHpMp(character.getMaxHp(), character.getMaxMp());
- + }
- + }
- +
- + private final static void checkItemRestriction(Player player)
- + {
- + for (ItemInstance item : player.getInventory().getPaperdollItems())
- + {
- + if (item == null || !isRestrictedItem(item.getItemId()))
- + continue;
- +
- + player.getInventory().unEquipItemInSlot(item.getLocationSlot());
- + InventoryUpdate iu = new InventoryUpdate();
- + iu.addModifiedItem(item);
- + player.sendPacket(iu);
- + }
- + }
- +
- + public List<Integer> parseIntegers(String line)
- + {
- + final List<Integer> value = new ArrayList<>();
- + Arrays.asList(line.split(";")).forEach(id -> value.add(Integer.parseInt(id)));
- +
- + return value;
- + }
- +
- + public boolean isActive()
- + {
- + return ZoneTaskManager.getInstance().getCurrentZoneId() == getId();
- + }
- +
- + public String getZoneName()
- + {
- + return _zoneName;
- + }
- +
- + public int getTime()
- + {
- + return _duration;
- + }
- +
- + public int getRevive()
- + {
- + return _reviveDelay;
- + }
- +
- + public static boolean isFlagEnabled()
- + {
- + return _isFlagEnabled;
- + }
- +
- + public static boolean isRestrictedItem(int itemId)
- + {
- + return _restrictedItems.contains(itemId);
- + }
- + }
- Index: data/xml/zones/MultiZone.xml
- ===================================================================
- --- data/xml/zones/MultiZone.xml (revision 84)
- +++ data/xml/zones/MultiZone.xml (working copy)
- @@ -1281,6 +1281,10 @@
- + <?xml version="1.0" encoding="UTF-8"?>
- + <list>
- + <zone id="1" shape="Cuboid" minZ="-3850" maxZ="-350"> <!-- giran_pvp_battle -->
- + <node x="72493" y="142263" />
- + <node x="73493" y="143261" />
- + <stat name="name" val="Giran Arena" />
- + <stat name="isNoStore" val="false" />
- + <stat name="isNoSummonFriend" val="false" />
- + <stat name="isFlagEnabled" val="false" />
- + <stat name="isHealEnabled" val="false" />
- + <stat name="duration" val="0" /> <!-- minutes -->
- + <stat name="reviveDelay" val="5" /> <!-- seconds -->
- + <stat name="restrictedItems" val="6611;6612" />
- + <spawn x="73890" y="142656" z="-3778" />
- + </zone>
- + <zone id="2" shape="Cuboid" minZ="-3752" maxZ="-352"> <!-- gludin_pvp -->
- + <node x="-88411" y="141732" />
- + <node x="-87429" y="142708" />
- + <stat name="name" val="Gludin Arena" />
- + <stat name="isNoStore" val="false" />
- + <stat name="isNoSummonFriend" val="false" />
- + <stat name="isFlagEnabled" val="true" />
- + <stat name="isHealEnabled" val="true" />
- + <stat name="duration" val="0" /> <!-- minutes -->
- + <stat name="reviveDelay" val="5" /> <!-- seconds -->
- + <stat name="restrictedItems" val="6611;6612" />
- + <spawn x="-86979" y="142402" z="-3643" />
- + </zone>
- + </list>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement