При выпивании банки становитесь невидимыми. При этом можно атаковать. Эффект длится 30 минут. Требуются исходники
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.
+ */
+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.");
--- /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.
+ */
+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.");
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>
--- 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>
Последнее редактирование модератором: