Noticias:

No tienes permiso para ver los enlaces. Para poder verlos Registrate o Conectate.

Menú Principal

Invisible Potion

Iniciado por Swarlog, Jul 27, 2025, 12:31 AM

Tema anterior - Siguiente tema

Swarlog

CitarCORE:

Index: /java/lt/equal/gameserver/network/clientpackets/AttackRequest.java
===================================================================
--- /java/lt/equal/gameserver/network/clientpackets/AttackRequest.java (revision 1)
+++ /java/lt/equal/gameserver/network/clientpackets/AttackRequest.java (revision 64)
@@ -68,4 +68,7 @@
 			target.onAction(activeChar);
 		}
+		//Invisible Character can't attack
+		if (activeChar.getAppearance().getInvisible() && !activeChar.isGM())
+			return;		
 		else
 		{
Index: /java/lt/equal/gameserver/handler/itemhandlers/InvisiblePotion.java
===================================================================
--- /java/lt/equal/gameserver/handler/itemhandlers/InvisiblePotion.java (revision 64)
+++ /java/lt/equal/gameserver/handler/itemhandlers/InvisiblePotion.java (revision 64)
@@ -0,0 +1,140 @@
+/*
+ * 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 lt.equal.gameserver.handler.itemhandlers;
+
+import lt.equal.Config;
+import lt.equal.gameserver.ThreadPoolManager;
+import lt.equal.gameserver.handler.IItemHandler;
+import lt.equal.gameserver.model.L2ItemInstance;
+import lt.equal.gameserver.model.entity.CTF;
+import lt.equal.gameserver.model.actor.instance.L2PcInstance;
+import lt.equal.gameserver.model.actor.instance.L2PlayableInstance;
+import lt.equal.gameserver.network.serverpackets.ActionFailed;
+import lt.equal.gameserver.network.serverpackets.MagicSkillUser;
+
+/**
+ * @author `Аллигаторы®™
+ *
+ */
+
+public class InvisiblePotion implements IItemHandler
+{
+	private static final int[] ITEM_IDS =
+	{ 9996 };
+	
+	private static final int INVISIBLE_POTION_SKILL = 3267;
+	
+	private static final int EFFECT_DURATION = 1200000; // 20 mins
+
+	public void useItem(L2PlayableInstance playable, L2ItemInstance item)
+	{
+		if (!(playable instanceof L2PcInstance))
+			return;
+		L2PcInstance activeChar = (L2PcInstance) playable;
+			if (activeChar.isHero())
+			{
+				activeChar.sendPacket(new ActionFailed());
+			}
+			if (activeChar.isConfused())
+			{
+				activeChar.sendPacket(new ActionFailed());
+			}
+			if (activeChar.isSilentMoving())
+			{
+				activeChar.sendPacket(new ActionFailed());
+			}
+			if (activeChar.isDead())
+			{
+				activeChar.sendPacket(new ActionFailed());
+			}
+			if (activeChar.isAlikeDead())
+			{
+				activeChar.sendPacket(new ActionFailed());
+			}
+			if (activeChar.isFestivalParticipant())
+			{
+				activeChar.sendPacket(new ActionFailed());
+			}
+			if (activeChar.isInFunEvent())
+			{
+				activeChar.sendPacket(new ActionFailed());
+			}
+			if (activeChar.inObserverMode())
+			{
+				activeChar.sendPacket(new ActionFailed());
+			}
+			if (activeChar.isInOlympiadMode())
+			{
+				activeChar.sendPacket(new ActionFailed());
+			}
+			if (activeChar.getPvpFlag() != 0)
+			{
+				activeChar.sendPacket(new ActionFailed());
+			}
+			if (activeChar.isCastingNow())
+			{
+				activeChar.sendPacket(new ActionFailed());
+			}
+			if ((activeChar._inEventCTF && CTF._started && !Config.CTF_ALLOW_POTIONS))
+			{
+				activeChar.sendPacket(new ActionFailed());
+			}
+
+		MagicSkillUser MSU = new MagicSkillUser(playable, playable, 3267, 1, 0, 0);
+		activeChar.sendPacket(MSU);
+		activeChar.broadcastPacket(MSU);
+
+		activeChar.getAppearance().setInvisible();
+		activeChar.broadcastUserInfo();
+		activeChar.decayMe();
+		activeChar.spawnMe();
+		activeChar.sendMessage("You Are Now Invisible");
+		activeChar.destroyItem("Consume", item.getObjectId(), 1, null, false);
+
+		InvisiblePotionStop mp = new InvisiblePotionStop(playable);
+		ThreadPoolManager.getInstance().scheduleEffect(mp, EFFECT_DURATION);
+	}
+
+	public class InvisiblePotionStop implements Runnable
+	{
+		private L2PlayableInstance _playable;
+
+		public InvisiblePotionStop(L2PlayableInstance playable)
+		{
+			_playable = playable;
+		}
+
+		public void run()
+		{
+			try
+			{
+				if (!(_playable instanceof L2PcInstance))
+					return;
+
+				((L2PcInstance) _playable).getAppearance().setVisible();
+				((L2PcInstance) _playable).sendMessage("You Are Now Visable!");
+				((L2PcInstance) _playable).broadcastUserInfo();
+			}
+			catch (Throwable t)
+			{
+			}
+		}
+	}
+
+	public int[] getItemIds()
+	{
+		return ITEM_IDS;
+	}
+}
Index: /java/lt/equal/gameserver/handler/ItemHandler.java
===================================================================
--- /java/lt/equal/gameserver/handler/ItemHandler.java (revision 59)
+++ /java/lt/equal/gameserver/handler/ItemHandler.java (revision 64)
@@ -54,4 +54,5 @@
 import lt.equal.gameserver.handler.itemhandlers.SpiritShot;
 import lt.equal.gameserver.handler.itemhandlers.SummonItems;
+import lt.equal.gameserver.handler.itemhandlers.InvisiblePotion;
 
 
@@ -134,4 +135,5 @@
 		registerItemHandler(new HeroCustomItem());
 		registerItemHandler(new ByLeki());
+		registerItemHandler(new InvisiblePotion());
 
 		_log.config("ItemHandler: Loaded " + _datatable.size() + " handlers.");

CitarDATA:

Index: 3200-3299.xml
===================================================================
--- 3200-3299.xml	(revision 15)
+++ 3200-3299.xml	(working copy)
@@ -719,4 +719,12 @@
   <for>
   </for>
 </skill>
+<skill id="3267" levels="1" name="Invisible Potion">
+  <set name="target" val="TARGET_NONE"/>
+  <set name="skillType" val="NOTDONE"/>
+  <set name="operateType" val="OP_ACTIVE"/>
+  <set name="castRange" val="-1"/>
+  <for>
+  </for>
+</skill>
 </list>