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.


  • Posts

    • Selling Telegram bots with 2024 year old. Strong. Bots clean, without subscribers, without blocking Price list: From 3 bots - 3.5$ for 1sht. From 20 bots - 3$ for 1pc. From 60 bots - 2.8$ for 1pc. From 100 bots - 2.5$ for 1pc. From 400 bots - 2$ for 1pc. Full transfer of owner rights / transfer account. Sell empty channels 2022. Without shadow bans. Not used. Without posts. Write in Telegram - @SMMTG6
    • Hello everyone   We are engaged in search engine optimization bots in Telegram.   - We make ranking bots to order Telegram search bots up to 100,000 premium subscribers.   We work with countries such as: USA, China, Israel, Russia, Uzbekistan, India, Saudi Arabia, Iran, Italy, Turkey and other countries. Clarify with us. Possible output in multi-geo (several countries).   Prices from 10$ from 20$ per 1000 Premium subscribers, depending on the country.   Term of manufacture of bot - 4 days   We are one of the most famous sellers in Telegram. We agree on the guarantor at your expense.   ☆ Our Telegram-channel - https://t.me/+e_DKWnC5AFw0ZDhi   ☆ For questions about buying a bot contact @SMMTG6   ☆ Our panel with the best Premium subscribers - smmtg.pro
    • Opening April 26 at 19:00 (UTC +3)  https://lineage2dex.com/en/sign-in Open Beta Test from April 22 This is pre-announcing of NEW season server, so we want to share some key points of it. Full details with road map, patch notes we will announce a bit latter Main features Modern Classic client (less lags, smoother gameplay, a lot of useful interface features). Anti-bot protection - we use our own system in combine with popular solutions like AAC, so in the end our project have one of the best anti-bot shield exists. Buff book to buff yourself or your summon/pet. With regular buff book you can create only 1 buff profile, if you need more - get the modern buff book and create up to 10 profiles! Daily rewards - login to the game every day and get rewards. Expanded subclass slots - you can have 5 subclasses from the beginning and expand up to 10. Class/Gender change - you can change your main class and gender if you want. Masterwork items (can be obtained by crafting or farming RBs, have better bonuses than regular items). Item Broker Auctions in towns can sell some epic jewelry and other useful goods for adena (3 times per week). Giran Harbor Fair - daily event which allows you to get temporary epic jewelry a lot of other rare items for adena. Talents - special tree with passive skills which will help you to tune your class better. Team vs Team event. Episodes - we open new content step by step to keep you engaged, bring more fun and extend the game. Episodes reveal following features: Hellbound Island Isle of Preyer, with new content, new Dynasty gear PvP item improvement allows you to improve your items with additional bonuses. Charms can be equipped in one of the special slots that open when wearing a bracelet. Each type of charm grants the wearer certain bonuses Instance Zones New Epic Bosses - Freya, Beleth, Tiat, Trasken Cyclic macros (macros restarts when finishes) Why choose Dex? We have destroyed the stereotypes that PvP servers live for a couple of weeks. Our Union x50 server proves it (working from April 2020 with good online). We have enough high-end content that will allow you to maintain interest in the game all the time! And we are always working on improving the game and adding new interesting activities and content. Seasonal servers have a road map with planned list of changes to keep you engaged. When the time comes the server will be merged with the Union server. So if you're new on Dex, you can start from zero like all othe players on NEW (seasonal) server. All your items and characters will be safe, and you can continue play when season over on our main server - UNION. High-end content (unlocked over episodes) Hellbound Island Spoiler Hellbound is an endgame location mostly for parties, but if you will be well geared you can farm most spots solo. You can get to Hellbound with help of gatekeepers. Hellbound contains multiple raid bosses and entrance to new epic boss Beleth. Drop from raid bosses and from entire island in general is very valuable. Monsters at Hellbound can drop special Hellbound Coins which can be exchanged to some useful goods at the Hellbound Trader Joseph. Isle of Prayer Spoiler Isle of Prayer is a high-end location, divided into several areas, each tailored for different classes and playstyles. By completing quests and farming mobs on IoP, you can obtain Dynasty equipment. You can read more about specific features and spots from our wiki: The most popular Lineage 2 classic server waiting for you. Download L2 client and play! You expect grandiose battles and incredible siege. The adrenaline just rolls! The most popular Lineage 2 classic server waiting for you. Download L2 client and play! You expect grandiose battles and incredible siege. The adrenaline just rolls!  lineage2dex.com We will be glad to hear any comments and suggestions on our discord channel, join it we have very friendly community there  - Join discord  
    • rly cool l2off pack...but rly expesive....
  • Topics

×
×
  • Create New...