Jump to content
  • 0

L2j (pride pack) Auto Flag Pvp Zone


Question

Recommended Posts

  • 0
Posted

you need to make a new zone type in Primival Island and that zone type should have on enter flag at once, on exit start flag exit task not imidietly cause it will be cheat, and you also need to handle on die and on res what happens

how to do this search somewhere in this forum how to make a new zone there is a share for acis

 

  • 0
Posted
5 hours ago, testaroaverta said:

i need help to make autoflag zone for example Primeval Isle .. i take pvp but i need to make it autoflag on enter

/*
 * 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 net.sf.l2j.gameserver.model.actor.L2Character;
import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
import net.sf.l2j.gameserver.model.zone.L2ZoneType;

public class L2PrimevalZone extends L2ZoneType
{
	public L2PrimevalZone(final int id)
	{
		super(id);
	}
	
	@Override
	protected void onEnter(final L2Character character)
	{
		if (character instanceof L2PcInstance)
		{
			if (character.getInstanceId() == 0)
			{
				character.setInsideZone(L2Character.ZONE_PRIMEVAL, true);
				L2PcInstance player = character.getActingPlayer();
				if (!player.isInPI())
				{
                    player.sendMessage("You have entered Primeval Isle");
					player.setIsInPI(true);
					player.updatePvPFlag(1);
					player.sendMessage("PvP Flag status updated");
				}
			}
		}
	}
	
	@Override
	protected void onExit(final L2Character character)
	{
		if (character instanceof L2PcInstance && character.getActingPlayer().isInPI())
		{
			character.getActingPlayer().broadcastUserInfo();
			character.getActingPlayer().setIsInPI(false);
			character.getActingPlayer().stopPvPFlag();
			character.getActingPlayer().sendMessage("You have left Primeval Isle");
		}
		character.setInsideZone(L2Character.ZONE_PRIMEVAL, false);
	}
	
	@Override
	public void onDieInside(final L2Character character)
	{}
	
	@Override
	public void onReviveInside(final L2Character character)
	{}
}

 

  • 0
Posted
25 minutes ago, Brado said:

/*
 * 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 net.sf.l2j.gameserver.model.actor.L2Character;
import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
import net.sf.l2j.gameserver.model.zone.L2ZoneType;

public class L2PrimevalZone extends L2ZoneType
{
	public L2PrimevalZone(final int id)
	{
		super(id);
	}
	
	@Override
	protected void onEnter(final L2Character character)
	{
		if (character instanceof L2PcInstance)
		{
			if (character.getInstanceId() == 0)
			{
				character.setInsideZone(L2Character.ZONE_PRIMEVAL, true);
				L2PcInstance player = character.getActingPlayer();
				if (!player.isInPI())
				{
                    player.sendMessage("You have entered Primeval Isle");
					player.setIsInPI(true);
					player.updatePvPFlag(1);
					player.sendMessage("PvP Flag status updated");
				}
			}
		}
	}
	
	@Override
	protected void onExit(final L2Character character)
	{
		if (character instanceof L2PcInstance && character.getActingPlayer().isInPI())
		{
			character.getActingPlayer().broadcastUserInfo();
			character.getActingPlayer().setIsInPI(false);
			character.getActingPlayer().stopPvPFlag();
			character.getActingPlayer().sendMessage("You have left Primeval Isle");
		}
		character.setInsideZone(L2Character.ZONE_PRIMEVAL, false);
	}
	
	@Override
	public void onDieInside(final L2Character character)
	{}
	
	@Override
	public void onReviveInside(final L2Character character)
	{}
}

 

I believe that when players hit each other then they will be unflagged

  • 0
Posted (edited)

### Eclipse Workspace Patch 1.0
#P aCis_gameserver
Index: java/net/sf/l2j/gameserver/model/zone/type/L2FlagZone.java
===================================================================
--- java/net/sf/l2j/gameserver/model/zone/type/L2FlagZone.java    (revision 0)
+++ java/net/sf/l2j/gameserver/model/zone/type/L2FlagZone.java    (working copy)
@@ -0,0 +1,185 @@
+/*
+ * 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 <[url="http://www.gnu.org/licenses/>."]http://www.gnu.org/licenses/>.[/url]
+ */
+package net.sf.l2j.gameserver.model.zone.type;
+
+import java.util.concurrent.Future;
+
+import net.sf.l2j.gameserver.datatables.SkillTable;
+import net.sf.l2j.gameserver.model.L2Skill;
+import net.sf.l2j.gameserver.model.actor.L2Character;
+import net.sf.l2j.gameserver.model.actor.L2Playable;
+import net.sf.l2j.gameserver.model.actor.instance.L2MonsterInstance;
+import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
+import net.sf.l2j.gameserver.model.zone.L2ZoneType;
+import net.sf.l2j.gameserver.ThreadPoolManager;
+import net.sf.l2j.util.Rnd;
+
+/**
+ * @author Toxico
+ * @Adaptar Shevenic
+ */
+
+public class L2FlagZone extends L2ZoneType
+{
+ int _skillId;
+ private int _chance;
+ private int _initialDelay;
+ int _skillLvl;
+ private int _reuse;
+ private boolean _enabled;
+ private String _target;
+ private Future<?> _task;
+ public L2FlagZone(int id)
+ {
+     super(id);
+     _skillId = 1323;
+     _skillLvl = 1;
+     _chance = 100;
+     _initialDelay = 0;
+     _reuse = 30000;
+     _enabled = true;
+     _target = "pc";
+ }
+
+ @Override
+ public void setParameter(String name, String value)
+ {
+     if(name.equals("skillId"))
+     {
+         _skillId = Integer.parseInt(value);
+     }
+     else if(name.equals("skillLvl"))
+     {
+         _skillLvl = Integer.parseInt(value);
+     }
+     else if(name.equals("chance"))
+     {
+         _chance = Integer.parseInt(value);
+     }
+     else if(name.equals("initialDelay"))
+     {
+         _initialDelay = Integer.parseInt(value);
+     }
+     else if(name.equals("default_enabled"))
+     {
+         _enabled = Boolean.parseBoolean(value);
+     }
+     else if(name.equals("target"))
+     {
+         _target = String.valueOf(value);
+     }
+     else if(name.equals("reuse"))
+     {
+         _reuse = Integer.parseInt(value);
+     }
+     else
+     {
+         super.setParameter(name, value);
+     }
+ }
+
+ @Override
+ protected void onEnter(L2Character character)
+ {
+     if (character instanceof L2PcInstance)
+     {
+         // Set pvp flag
+         ((L2PcInstance) character).setPvpFlag(1);
+         ((L2PcInstance) character).sendMessage("You entered a Pvp Flag zone.");
+         ((L2PcInstance) character).broadcastUserInfo();
+            if((character instanceof L2Playable && _target.equalsIgnoreCase("pc") || character instanceof L2PcInstance && _target.equalsIgnoreCase("pc_only") || character instanceof L2MonsterInstance && _target.equalsIgnoreCase("npc")) && _task == null)
+         {
+         _task = ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(new ApplySkill(/*this*/), _initialDelay, _reuse);
+         }
+     }
+ }
+
+ @Override
+ protected void onExit(L2Character character)
+ {
+     if (character instanceof L2PcInstance)
+     {
+         ((L2PcInstance) character).setPvpFlag(0);
+         ((L2PcInstance) character).sendMessage("You left the Pvp Flag zone.");
+         ((L2PcInstance) character).broadcastUserInfo();
+     }
+     if(_characterList.isEmpty() && _task != null)
+     {
+         _task.cancel(true);
+         _task = null;
+     }
+ }
+
+ public L2Skill getSkill()
+ {
+     return SkillTable.getInstance().getInfo(_skillId, _skillLvl);
+ }
+
+ public String getTargetType()
+ {
+     return _target;
+ }
+
+ public boolean isEnabled()
+ {
+     return _enabled;
+ }
+
+ public int getChance()
+ {
+     return _chance;
+ }
+
+ public void setZoneEnabled(boolean val)
+ {
+     _enabled = val;
+ }
+ class ApplySkill implements Runnable
+ {
+     @Override
+     public void run()
+     {
+         if(isEnabled())
+         {
+            for(L2Character temp : _characterList)
+            {
+             if(temp != null && !temp.isDead())
+             {
+                 if((temp instanceof L2Playable && getTargetType().equalsIgnoreCase("pc") || temp instanceof L2PcInstance && getTargetType().equalsIgnoreCase("pc_only") || temp instanceof L2MonsterInstance && getTargetType().equalsIgnoreCase("npc")) && Rnd.get(100) < getChance())
+                 {
+                     L2Skill skill = null;
+                     if((skill=getSkill())==null){
+                        System.out.println("ATTENTION: error on zone with id "+getId());
+                        System.out.println("Skill "+_skillId+","+_skillLvl+" not present between skills");
+                     }else
+                        skill.getEffects(temp, temp);
+                 }
+             }
+            }
+         }
+     }
+ }
+
+ @Override
+ public void onDieInside(L2Character character)
+ {
+    
+ }
+
+ @Override
+ public void onReviveInside(L2Character character)
+ {
+     onEnter(character);
+ }
+}
\ No newline at end of file
Index: java/net/sf/l2j/gameserver/model/zone/L2ZoneType.java
===================================================================
--- java/net/sf/l2j/gameserver/model/zone/L2ZoneType.java    (revision 2)
+++ java/net/sf/l2j/gameserver/model/zone/L2ZoneType.java    (working copy)
@@ -38,7 +38,7 @@
     
     private final int _id;
     protected L2ZoneForm _zone;
-    protected List<L2Character> _characterList;
+    public List<L2Character> _characterList;
     
     private Map<QuestEventType, List<Quest>> _questEvents;
     
Index: data/xml/zones/ArenaZone.xml
===================================================================
--- data/xml/zones/ArenaZone.xml    (revision 2)
+++ data/xml/zones/ArenaZone.xml    (working copy)
@@ -11,7 +11,7 @@
         <node X="-87429" Y="142708" />
         <spawn X="-86979" Y="142402" Z="-3643" />
     </zone>
-    <zone type="ArenaZone" shape="Cuboid" minZ="-3850" maxZ="-350"><!-- giran_pvp_battle -->
+    <zone type="FlagZone" shape="Cuboid" minZ="-3850" maxZ="-350"><!-- giran_pvp_battle -->
         <node X="72493" Y="142263" />
         <node X="73493" Y="143261" />
         <spawn X="73890" Y="142656" Z="-3778" />

 

 

 

 

This is for Acis pack. I think you can adapt it to jserver easy.

Its auto flag and noblesse.

Edited by xRelic
  • 0
Posted
1 hour ago, Brado said:

/*
 * 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 net.sf.l2j.gameserver.model.actor.L2Character;
import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
import net.sf.l2j.gameserver.model.zone.L2ZoneType;

public class L2PrimevalZone extends L2ZoneType
{
	public L2PrimevalZone(final int id)
	{
		super(id);
	}
	
	@Override
	protected void onEnter(final L2Character character)
	{
		if (character instanceof L2PcInstance)
		{
			if (character.getInstanceId() == 0)
			{
				character.setInsideZone(L2Character.ZONE_PRIMEVAL, true);
				L2PcInstance player = character.getActingPlayer();
				if (!player.isInPI())
				{
                    player.sendMessage("You have entered Primeval Isle");
					player.setIsInPI(true);
					player.updatePvPFlag(1);
					player.sendMessage("PvP Flag status updated");
				}
			}
		}
	}
	
	@Override
	protected void onExit(final L2Character character)
	{
		if (character instanceof L2PcInstance && character.getActingPlayer().isInPI())
		{
			character.getActingPlayer().broadcastUserInfo();
			character.getActingPlayer().setIsInPI(false);
			character.getActingPlayer().stopPvPFlag();
			character.getActingPlayer().sendMessage("You have left Primeval Isle");
		}
		character.setInsideZone(L2Character.ZONE_PRIMEVAL, false);
	}
	
	@Override
	public void onDieInside(final L2Character character)
	{}
	
	@Override
	public void onReviveInside(final L2Character character)
	{}
}

 

not working..

  • 0
Posted
20 minutes ago, testaroaverta said:

not working..

Not working because the code he gave you is trash 

The guy's code first broadcast the packet and then change the flag.

 

Check setPvPFlag and similar methods and check which method simple change the flag (asign the variable you want) without add object to the PvPTaskManager. You want avoid that cause flag will be removed afterwards. 

 

In addition those who try help by giving codes at least CODE IT PROPERLY. Do not share a random trash code please.

  • 0
Posted
Spoiler

### Eclipse Workspace Patch 1.0
#P L2J_DataPack_BETA
Index: dist/game/data/xsd/zones.xsd
===================================================================
--- dist/game/data/xsd/zones.xsd (revision 9872)
+++ dist/game/data/xsd/zones.xsd (working copy)
@@ -145,6 +145,7 @@
  <xs:enumeration value="TerritoryWarZone" />
  <xs:enumeration value="TownZone" />
  <xs:enumeration value="WaterZone" />
+ <xs:enumeration value="MultiFunctionZone" />
  </xs:restriction>
  </xs:simpleType>
  </xs:attribute>
Index: dist/game/data/zones/peace.xml
===================================================================
--- dist/game/data/zones/peace.xml (revision 9872)
+++ dist/game/data/zones/peace.xml (working copy)
@@ -948,4 +948,10 @@
  <node X="-113768" Y="-150965" />
  <node X="-115424" Y="-150965" />
  </zone>
+ <zone name="Custom" type="MultiFunctionZone" shape="NPoly" minZ="-15000" maxZ="-10000">
+ <node X="130000" Y="160000" />
+ <node X="130000" Y="130000" />
+ <node X="160000" Y="130000" />
+ <node X="160000" Y="160000" />
+ </zone>
 </list>
\ No newline at end of file
#P L2J_Server_BETA
Index: java/com/l2jserver/gameserver/network/serverpackets/Die.java
===================================================================
--- java/com/l2jserver/gameserver/network/serverpackets/Die.java (revision 6165)
+++ java/com/l2jserver/gameserver/network/serverpackets/Die.java (working copy)
@@ -31,6 +31,8 @@
 import com.l2jserver.gameserver.model.entity.Castle;
 import com.l2jserver.gameserver.model.entity.Fort;
 import com.l2jserver.gameserver.model.entity.clanhall.SiegableHall;
+import com.l2jserver.gameserver.model.zone.ZoneId;
+import com.l2jserver.gameserver.model.zone.type.L2MultiFunctionZone;
 
 public class Die extends L2GameServerPacket
 {
@@ -54,7 +56,7 @@
  _isJailed = player.isJailed();
  }
 
- _canTeleport = cha.canRevive() && !cha.isPendingRevive();
+ _canTeleport = (cha.canRevive() && !cha.isPendingRevive()) || (cha.isInsideZone(ZoneId.MULTI_FUNCTION) && !L2MultiFunctionZone.revive);
  _sweepable = cha.isL2Attackable() && cha.isSweepActive();
  }
 
Index: java/com/l2jserver/gameserver/network/clientpackets/UseItem.java
===================================================================
--- java/com/l2jserver/gameserver/network/clientpackets/UseItem.java (revision 6165)
+++ java/com/l2jserver/gameserver/network/clientpackets/UseItem.java (working copy)
@@ -43,6 +43,8 @@
 import com.l2jserver.gameserver.model.items.type.L2ArmorType;
 import com.l2jserver.gameserver.model.items.type.L2WeaponType;
 import com.l2jserver.gameserver.model.skills.L2Skill;
+import com.l2jserver.gameserver.model.zone.ZoneId;
+import com.l2jserver.gameserver.model.zone.type.L2MultiFunctionZone;
 import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.serverpackets.ActionFailed;
 import com.l2jserver.gameserver.network.serverpackets.ExUseSharedGroupItem;
@@ -128,6 +130,12 @@
  return;
  }
 
+ if (getClient().getActiveChar().isInsideZone(ZoneId.MULTI_FUNCTION) && !L2MultiFunctionZone.checkItem(item))
+ {
+ getClient().getActiveChar().sendMessage("You cannot use " + item.getName() + " inside this zone.");
+ return;
+ }
+
  if (item.getItem().getType2() == L2Item.TYPE2_QUEST)
  {
  activeChar.sendPacket(SystemMessageId.CANNOT_USE_QUEST_ITEMS);
Index: java/com/l2jserver/gameserver/network/clientpackets/Logout.java
===================================================================
--- java/com/l2jserver/gameserver/network/clientpackets/Logout.java (revision 6165)
+++ java/com/l2jserver/gameserver/network/clientpackets/Logout.java (working copy)
@@ -26,6 +26,8 @@
 import com.l2jserver.gameserver.SevenSignsFestival;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.entity.L2Event;
+import com.l2jserver.gameserver.model.zone.ZoneId;
+import com.l2jserver.gameserver.model.zone.type.L2MultiFunctionZone;
 import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.serverpackets.ActionFailed;
 import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
@@ -97,6 +99,13 @@
  return;
  }
 
+ if (player.isInsideZone(ZoneId.MULTI_FUNCTION) && !L2MultiFunctionZone.logout_zone)
+ {
+ player.sendMessage("You cannot logout while inside a Multifunction zone.");
+ player.sendPacket(ActionFailed.STATIC_PACKET);
+ return;
+ }
+
  // Prevent player from logging out if they are a festival participant
  // and it is in progress, otherwise notify party members that the player
  // is not longer a participant.
Index: java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java
===================================================================
--- java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java (revision 6165)
+++ java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java (working copy)
@@ -241,6 +241,7 @@
 import com.l2jserver.gameserver.model.zone.L2ZoneType;
 import com.l2jserver.gameserver.model.zone.ZoneId;
 import com.l2jserver.gameserver.model.zone.type.L2BossZone;
+import com.l2jserver.gameserver.model.zone.type.L2MultiFunctionZone;
 import com.l2jserver.gameserver.model.zone.type.L2NoRestartZone;
 import com.l2jserver.gameserver.network.L2GameClient;
 import com.l2jserver.gameserver.network.SystemMessageId;
@@ -5811,6 +5812,8 @@
  // Add karma to attacker and increase its PK counter
  setPvpKills(getPvpKills() + 1);
 
+ L2MultiFunctionZone.givereward(this);
+
  // Send a Server->Client UserInfo packet to attacker with its Karma and PK Counter
  sendPacket(new UserInfo(this));
  sendPacket(new ExBrExtraUserInfo(this));
Index: java/com/l2jserver/gameserver/model/zone/type/L2MultiFunctionZone.java
===================================================================
--- java/com/l2jserver/gameserver/model/zone/type/L2MultiFunctionZone.java (revision 0)
+++ java/com/l2jserver/gameserver/model/zone/type/L2MultiFunctionZone.java (working copy)
@@ -0,0 +1,381 @@
+/*
+ * 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/>.
+ */
+/*
+ * 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 com.l2jserver.gameserver.model.zone.type;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Properties;
+
+import javolution.util.FastList;
+
+import com.l2jserver.gameserver.ThreadPoolManager;
+import com.l2jserver.gameserver.datatables.SkillTable;
+import com.l2jserver.gameserver.model.actor.L2Character;
+import com.l2jserver.gameserver.model.actor.L2Summon;
+import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.model.itemcontainer.PcInventory;
+import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
+import com.l2jserver.gameserver.model.skills.L2Skill;
+import com.l2jserver.gameserver.model.zone.ZoneId;
+import com.l2jserver.util.Rnd;
+
+/**
+ * @author Wyatt
+ * @version 1.3
+ */
+
+public class L2MultiFunctionZone extends L2RespawnZone
+{
+
+ public L2MultiFunctionZone(int id)
+ {
+ super(id);
+ loadConfigs();
+ }
+
+ public static boolean pvp_enabled, restart_zone, store_zone, logout_zone, revive_noblesse, revive_heal, revive, remove_buffs, remove_pets, give_noblesse;
+ static int radius, enchant, revive_delay;
+ static int[][] spawn_loc;
+ L2Skill noblesse = SkillTable.getInstance().getInfo(1323, 1);
+ private static List<String> items = new FastList<>();
+ private static List<String> grades = new FastList<>(), classes = new FastList<>();
+ public static List<int[]> rewards;
+ static String[] gradeNames =
+ {
+ "",
+ "D",
+ "C",
+ "B",
+ "A",
+ "S",
+ "S80",
+ "S84"
+ };
+
+ @Override
+ protected void onEnter(L2Character character)
+ {
+ character.setInsideZone(ZoneId.NO_SUMMON_FRIEND, true);
+ character.setInsideZone(ZoneId.MULTI_FUNCTION, true);
+ if (!store_zone)
+ {
+ character.setInsideZone(ZoneId.NO_STORE, true);
+ }
+
+ if (character instanceof L2PcInstance)
+ {
+ L2PcInstance activeChar = ((L2PcInstance) character);
+ if ((classes != null) && classes.contains("" + activeChar.getClassId().getId()))
+ {
+ activeChar.teleToLocation(83597, 147888, -3405);
+ activeChar.sendMessage("Your class is not allowed in the MultiFunction zone.");
+ return;
+ }
+
+ for (L2ItemInstance o : activeChar.getInventory()._items)
+ {
+ if (o.isEquipable() && o.isEquipped() && !checkItem(o))
+ {
+ int slot = activeChar.getInventory().getSlotFromItem(o);
+ activeChar.getInventory().unEquipItemInBodySlot(slot);
+ activeChar.sendMessage(o.getName() + " unequiped because is not allowed inside this zone.");
+ }
+ }
+ activeChar.sendMessage("You entered in a MultiFunction zone.");
+ clear(activeChar);
+ if (give_noblesse)
+ {
+ noblesse.getEffects(activeChar, activeChar);
+ }
+ if (pvp_enabled)
+ {
+ activeChar.updatePvPFlag(1);
+ }
+ }
+ }
+
+ @Override
+ protected void onExit(L2Character character)
+ {
+ character.setInsideZone(ZoneId.NO_SUMMON_FRIEND, false);
+ character.setInsideZone(ZoneId.MULTI_FUNCTION, false);
+ if (!store_zone)
+ {
+ character.setInsideZone(ZoneId.NO_STORE, false);
+ }
+
+ if (character instanceof L2PcInstance)
+ {
+ L2PcInstance activeChar = ((L2PcInstance) character);
+ activeChar.sendMessage("You left from a MultiFunction zone.");
+
+ if (pvp_enabled)
+ {
+ activeChar.stopPvPFlag();
+ }
+ }
+ }
+
+ @Override
+ public void onDieInside(final L2Character character)
+ {
+ if (character instanceof L2PcInstance)
+ {
+ final L2PcInstance activeChar = ((L2PcInstance) character);
+ if (revive)
+ {
+ ThreadPoolManager.getInstance().scheduleGeneral(new Runnable()
+ {
+ @Override
+ public void run()
+ {
+ activeChar.doRevive();
+ heal(activeChar);
+ int[] loc = spawn_loc[Rnd.get(spawn_loc.length)];
+ activeChar.teleToLocation(loc[0] + Rnd.get(-radius, radius), loc[1] + Rnd.get(-radius, radius), loc[2]);
+ }
+ }, revive_delay * 1000);
+ }
+ }
+ }
+
+ @Override
+ public void onReviveInside(L2Character character)
+ {
+ if (character instanceof L2PcInstance)
+ {
+ L2PcInstance activeChar = ((L2PcInstance) character);
+ if (revive_noblesse)
+ {
+ noblesse.getEffects(activeChar, activeChar);
+ }
+ if (revive_heal)
+ {
+ heal(activeChar);
+ }
+ }
+ }
+
+ private void clear(L2PcInstance player)
+ {
+ if (remove_buffs)
+ {
+ player.stopAllEffectsExceptThoseThatLastThroughDeath();
+ if (remove_pets)
+ {
+ L2Summon pet = player.getSummon();
+ if (pet != null)
+ {
+ pet.stopAllEffectsExceptThoseThatLastThroughDeath();
+ pet.unSummon(player);
+ }
+ }
+ }
+ else
+ {
+ if (remove_pets)
+ {
+ L2Summon pet = player.getSummon();
+ if (pet != null)
+ {
+ pet.unSummon(player);
+ }
+ }
+ }
+ }
+
+ static void heal(L2PcInstance activeChar)
+ {
+ activeChar.setCurrentHp(activeChar.getMaxHp());
+ activeChar.setCurrentCp(activeChar.getMaxCp());
+ activeChar.setCurrentMp(activeChar.getMaxMp());
+ }
+
+ public static void givereward(L2PcInstance player)
+ {
+ if (player.isInsideZone(ZoneId.MULTI_FUNCTION))
+ {
+ for (int[] reward : rewards)
+ {
+ PcInventory inv = player.getInventory();
+ inv.addItem("Custom Reward", reward[0], reward[1], player, player);
+ }
+ }
+ }
+
+ public static boolean checkItem(L2ItemInstance item)
+ {
+ int o = item.getItem().getCrystalType();
+ int e = item.getEnchantLevel();
+
+ if ((enchant != 0) && (e >= enchant))
+ {
+ return false;
+ }
+
+ if (grades.contains(gradeNames[o]))
+ {
+ return false;
+ }
+
+ if ((items != null) && items.contains("" + item.getId()))
+ {
+ return false;
+ }
+ return true;
+ }
+
+ private static void loadConfigs()
+ {
+ try
+ {
+ Properties prop = new Properties();
+ prop.load(new FileInputStream(new File("./config/MultiFunctionZone.properties")));
+ pvp_enabled = Boolean.parseBoolean(prop.getProperty("EnablePvP", "False"));
+ spawn_loc = parseItemsList(prop.getProperty("SpawnLoc", "150111,144740,-12248"));
+ revive_delay = Integer.parseInt(prop.getProperty("ReviveDelay", "10"));
+ if (revive_delay != 0)
+ {
+ revive = true;
+ }
+ give_noblesse = Boolean.parseBoolean(prop.getProperty("GiveNoblesse", "False"));
+ String[] propertySplit = prop.getProperty("Items", "").split(",");
+ if (propertySplit.length != 0)
+ {
+ for (String i : propertySplit)
+ {
+ items.add(i);
+ }
+ }
+ propertySplit = prop.getProperty("Grades", "").split(",");
+ if (propertySplit.length != 0)
+ {
+ for (String i : propertySplit)
+ {
+ if (i.equals("D") || i.equals("C") || i.equals("B") || i.equals("A") || i.equals("S") || i.equals("S80") || i.equals("S84"))
+ {
+ grades.add(i);
+ }
+ }
+ }
+ propertySplit = prop.getProperty("Classes", "").split(",");
+ if (propertySplit.length != 0)
+ {
+ for (String i : propertySplit)
+ {
+ classes.add(i);
+ }
+ }
+ radius = Integer.parseInt(prop.getProperty("RespawnRadius", "500"));
+ enchant = Integer.parseInt(prop.getProperty("Enchant", "0"));
+ remove_buffs = Boolean.parseBoolean(prop.getProperty("RemoveBuffs", "False"));
+ remove_pets = Boolean.parseBoolean(prop.getProperty("RemovePets", "False"));
+ restart_zone = Boolean.parseBoolean(prop.getProperty("NoRestartZone", "False"));
+ store_zone = Boolean.parseBoolean(prop.getProperty("NoStoreZone", "False"));
+ logout_zone = Boolean.parseBoolean(prop.getProperty("NoLogoutZone", "False"));
+ revive_noblesse = Boolean.parseBoolean(prop.getProperty("ReviveNoblesse", "False"));
+ revive_heal = Boolean.parseBoolean(prop.getProperty("ReviveHeal", "False"));
+ rewards = new ArrayList<>();
+ propertySplit = prop.getProperty("Rewards", "57,100000").split(";");
+ for (String reward : propertySplit)
+ {
+ String[] rewardSplit = reward.split(",");
+ if (rewardSplit.length == 2)
+ {
+ try
+ {
+ rewards.add(new int[]
+ {
+ Integer.parseInt(rewardSplit[0]),
+ Integer.parseInt(rewardSplit[1])
+ });
+ }
+ catch (NumberFormatException nfe)
+ {
+ }
+ }
+ }
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ }
+ }
+
+ private static int[][] parseItemsList(String line)
+ {
+ final String[] propertySplit = line.split(";");
+ if (propertySplit.length == 0)
+ {
+ return null;
+ }
+
+ int i = 0;
+ String[] valueSplit;
+ final int[][] result = new int[propertySplit.length][];
+ for (String value : propertySplit)
+ {
+ valueSplit = value.split(",");
+ if (valueSplit.length != 3)
+ {
+ return null;
+ }
+
+ result[i] = new int[3];
+ try
+ {
+ result[i][0] = Integer.parseInt(valueSplit[0]);
+ }
+ catch (NumberFormatException e)
+ {
+ return null;
+ }
+ try
+ {
+ result[i][1] = Integer.parseInt(valueSplit[1]);
+ }
+ catch (NumberFormatException e)
+ {
+ return null;
+ }
+ try
+ {
+ result[i][2] = Integer.parseInt(valueSplit[2]);
+ }
+ catch (NumberFormatException e)
+ {
+ return null;
+ }
+ i++;
+ }
+ return result;
+ }
+}
\ No newline at end of file
Index: java/com/l2jserver/gameserver/network/clientpackets/RequestRestart.java
===================================================================
--- java/com/l2jserver/gameserver/network/clientpackets/RequestRestart.java (revision 6165)
+++ java/com/l2jserver/gameserver/network/clientpackets/RequestRestart.java (working copy)
@@ -27,6 +27,8 @@
 import com.l2jserver.gameserver.instancemanager.AntiFeedManager;
 import com.l2jserver.gameserver.model.L2Party;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.model.zone.ZoneId;
+import com.l2jserver.gameserver.model.zone.type.L2MultiFunctionZone;
 import com.l2jserver.gameserver.network.L2GameClient;
 import com.l2jserver.gameserver.network.L2GameClient.GameClientState;
 import com.l2jserver.gameserver.network.SystemMessageId;
@@ -91,6 +93,13 @@
  return;
  }
 
+ if (player.isInsideZone(ZoneId.MULTI_FUNCTION) && !L2MultiFunctionZone.restart_zone)
+ {
+ player.sendMessage("You cannot restart while inside a Multifunction zone.");
+ sendPacket(RestartResponse.valueOf(false));
+ return;
+ }
+
  // Prevent player from restarting if they are a festival participant
  // and it is in progress, otherwise notify party members that the player
  // is not longer a participant.
Index: java/com/l2jserver/gameserver/model/itemcontainer/ItemContainer.java
===================================================================
--- java/com/l2jserver/gameserver/model/itemcontainer/ItemContainer.java (revision 6165)
+++ java/com/l2jserver/gameserver/model/itemcontainer/ItemContainer.java (working copy)
@@ -46,7 +46,7 @@
 {
  protected static final Logger _log = Logger.getLogger(ItemContainer.class.getName());
 
- protected final List<L2ItemInstance> _items;
+ public final List<L2ItemInstance> _items;
 
  protected ItemContainer()
  {
Index: dist/game/config/MultiFunctionZone.properties
===================================================================
--- dist/game/config/MultiFunctionZone.properties (revision 0)
+++ dist/game/config/MultiFunctionZone.properties (working copy)
@@ -0,0 +1,60 @@
+# ---------------------------------------------------------------------------
+# MultiFunctionZone - custom addon for your server
+# ---------------------------------------------------------------------------
+# This option will turn on PvP flag to all people when entering to the zone
+EnablePvP = True
+
+# If set to false, zone will be no-restart zone
+NoRestartZone = False
+
+# If set to false, zone will be no-logout zone
+NoLogoutZone = False
+
+# If set to false, zone will be no-store zone
+NoStoreZone = False
+
+# Give noblesse after revive?
+ReviveNoblesse = False
+
+# Heal after revive?
+ReviveHeal = False
+
+# Delay, in seconds, to wait before revive
+# 0 to disable
+ReviveDelay = 10
+
+# Set the spawn points where players will be teleported on revive, if enabled
+# example:150111,144740,-12248;143665,144418,-12022;144443,147685,-12139
+SpawnLoc = 150111,144740,-12248;143665,144418,-12022;144443,147685,-12139
+
+# Random respawn radius
+RespawnRadius = 500
+
+# If set to true, players will take noblesse blessing when entering
+GiveNoblesse = True
+
+# Remove buffs when entering to the zone
+RemoveBuffs = False
+
+# Remove pets when entering to the zone
+RemovePets = False
+
+# Special rewards when hunting inside this zone
+# example: 57,100000;14720,1
+Rewards = 57,100000;14720,1
+
+# List of Items(id's) that won't be usable inside this area and also will be unequiped when entering
+# (armor, weapons, scrolls, potions, etc), example: 728,7575, 6383, 1538
+Items = 728,7575,6383,1538
+
+# List of Grades that won't be usable inside this area and also will be unequiped when entering
+# example: D,C,B,A,S,S80,S84
+Grades = C,B,A
+
+# Items with this enchant or more won't be usable inside this area and also will be unequiped when entering
+# 0 to disable
+Enchant = 0
+
+# Players with one of that classes won't be able to enter to the zone
+# example: 93,85,12
+Classes = 92
\ No newline at end of file
Index: java/com/l2jserver/gameserver/model/zone/ZoneId.java
===================================================================
--- java/com/l2jserver/gameserver/model/zone/ZoneId.java (revision 6165)
+++ java/com/l2jserver/gameserver/model/zone/ZoneId.java (working copy)
@@ -46,7 +46,8 @@
  ALTERED(19),
  NO_BOOKMARK(20),
  NO_ITEM_DROP(21),
- NO_RESTART(22);
+ NO_RESTART(22),
+ MULTI_FUNCTION(23);
 
  private final int _id

 

  • 0
Posted (edited)

There is a shared pack with all these features and somehow you still want someone to send you the code and the implementation of it

Edited by JaharakaL
  • Haha 1
Guest
This topic is now closed to further replies.
×
×
  • Create New...