BBMAXI 14 Опубликовано 21 ноября, 2010 Мана для сборок L2J Server , не путаем с L2J Free. Создать текстовый документ , скопировать в него следующее * 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.handler.itemhandlers; import java.util.logging.Logger; import net.sf.l2j.gameserver.datatables.SkillTable; import net.sf.l2j.gameserver.handler.IItemHandler; import net.sf.l2j.gameserver.model.L2Effect; import net.sf.l2j.gameserver.model.L2ItemInstance; import net.sf.l2j.gameserver.model.L2Skill; import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance; import net.sf.l2j.gameserver.model.actor.instance.L2PetInstance; import net.sf.l2j.gameserver.model.actor.instance.L2PlayableInstance; import net.sf.l2j.gameserver.model.actor.instance.L2SummonInstance; import net.sf.l2j.gameserver.model.entity.TvTEvent; import net.sf.l2j.gameserver.network.SystemMessageId; import net.sf.l2j.gameserver.network.serverpackets.ActionFailed; import net.sf.l2j.gameserver.network.serverpackets.SystemMessage; import net.sf.l2j.gameserver.templates.skills.L2EffectType; /** * This class ... * * @version $Revision: 1.2.4.4 $ $Date: 2005/03/27 15:30:07 $ */ public class Potions implements IItemHandler { protected static final Logger _log = Logger.getLogger(Potions.class.getName()); private static final int[] ITEM_IDS = { 65, 725, 726, 727, 728, 734, 735, 1060, 1061, 1073, 1374, 1375, 1539, 1540, 5591, 5592, 6035, 6036, 6652, 6553, 6554, 6555, 8193, 8194, 8195, 8196, 8197, 8198, 8199, 8200, 8201, 8202, 8600, 8601, 8602, 8603, 8604, 8605, 8606, 8607, 8608, 8609, 8610, 8611, 8612, 8613, 8614, 10155, 10157, //Attribute Potion 9997, 9998, 9999, 10000, 10001, 10002, //elixir of life 8622, 8623, 8624, 8625, 8626, 8627, //elixir of Strength 8628, 8629, 8630, 8631, 8632, 8633, //elixir of cp 8634, 8635, 8636, 8637, 8638, 8639, // Endeavor Potion 733, // Juices 10260, 10261, 10262, 10263, 10264, 10265, 10266, 10267, 10268, 10269, 10270, // CT2 herbs 10655, 10656, 10657 }; /** * * @see net.sf.l2j.gameserver.handler.IItemHandler#useItem(net.sf.l2j.gameserver.model.a ctor.instance.L2PlayableInstance, net.sf.l2j.gameserver.model.L2ItemInstance) */ public synchronized void useItem(L2PlayableInstance playable, L2ItemInstance item) { L2PcInstance activeChar; boolean res = false; if (playable instanceof L2PcInstance) activeChar = (L2PcInstance) playable; else if (playable instanceof L2PetInstance) activeChar = ((L2PetInstance) playable).getOwner(); else return; if (!TvTEvent.onPotionUse(playable.getObjectId())) { playable.sendPacket(ActionFailed.STATIC_PACKET); return; } if (activeChar.isInOlympiadMode()) { activeChar.sendPacket(new SystemMessage(SystemMessageId.THIS_ITEM_IS_NOT_AVAILABLE_FOR_THE_OLYMPIAD_EVENT) ); return; } if (activeChar.isAllSkillsDisabled()) { ActionFailed af = ActionFailed.STATIC_PACKET; activeChar.sendPacket(af); return; } int itemId = item.getItemId(); switch (itemId) { // HEALING AND SPEED POTIONS case 65: // red_potion, xml: 2001 res = usePotion(activeChar, 2001, 1); break; case 725: // healing_drug, xml: 2002 if (!isEffectReplaceable(activeChar, L2EffectType.HEAL_OVER_TIME, itemId)) return; res = usePotion(activeChar, 2002, 1); break; case 727: // _healing_potion, xml: 2032 if (!isEffectReplaceable(activeChar, L2EffectType.HEAL_OVER_TIME, itemId)) return; res = usePotion(activeChar, 2032, 1); break; case 728: // Mana Potion by Wh1tePower res = usePotion(activeChar, 2005, 1); break; case 733: // Endeavor Potion, xml: 2010 res = usePotion(activeChar, 2010, 1); break; case 734: // quick_step_potion, xml: 2011 res = usePotion(activeChar, 2011, 1); break; case 735: // swift_attack_potion, xml: 2012 res = usePotion(activeChar, 2012, 1); break; case 1060: // lesser_healing_potion, case 1073: // beginner's potion, xml: 2031 if (!isEffectReplaceable(activeChar, L2EffectType.HEAL_OVER_TIME, itemId)) return; res = usePotion(activeChar, 2031, 1); break; case 1061: // healing_potion, xml: 2032 if (!isEffectReplaceable(activeChar, L2EffectType.HEAL_OVER_TIME, itemId)) return; res = usePotion(activeChar, 2032, 1); break; case 10157: // instant haste_potion, xml: 2398 res = usePotion(activeChar, 2398, 1); break; case 1374: // adv_quick_step_potion, xml: 2034 res = usePotion(activeChar, 2034, 1); break; case 1375: // adv_swift_attack_potion, xml: 2035 res = usePotion(activeChar, 2035, 1); break; case 1539: // greater_healing_potion, xml: 2037 if (!isEffectReplaceable(activeChar, L2EffectType.HEAL_OVER_TIME, itemId)) return; res = usePotion(activeChar, 2037, 1); break; case 1540: // quick_healing_potion, xml: 2038 if (!isEffectReplaceable(activeChar, L2EffectType.HEAL_OVER_TIME, itemId)) return; res = usePotion(activeChar, 2038, 1); break; case 5591: case 5592: // CP and Greater CP if (!isEffectReplaceable(activeChar, L2EffectType.COMBAT_POINT_HEAL_OVER_TIME, itemId)) return; res = usePotion(activeChar, 2166, (itemId == 5591) ? 1 : 2); break; case 6035: // Magic Haste Potion, xml: 2169 res = usePotion(activeChar, 2169, 1); break; case 6036: // Greater Magic Haste Potion, xml: 2169 res = usePotion(activeChar, 2169, 2); break; case 10155: //Mental Potion XML:2396 res = usePotion(activeChar, 2396, 1); break; // ATTRIBUTE POTION case 9997: // Fire Resist Potion, xml: 2335 res = usePotion(activeChar, 2335, 1); break; case 9998: // Water Resist Potion, xml: 2336 res = usePotion(activeChar, 2336, 1); break; case 9999: // Earth Resist Potion, xml: 2338 res = usePotion(activeChar, 2338, 1); break; case 10000: // Wind Resist Potion, xml: 2337 res = usePotion(activeChar, 2337, 1); break; case 10001: // Dark Resist Potion, xml: 2340 res = usePotion(activeChar, 2340, 1); break; case 10002: // Divine Resist Potion, xml: 2339 res = usePotion(activeChar, 2339, 1); break; // ELIXIR case 8622: case 8623: case 8624: case 8625: case 8626: case 8627: { // elixir of Life byte expIndex = (byte) activeChar.getExpertiseIndex(); res = usePotion(activeChar, 2287, (expIndex > 5 ? expIndex : expIndex + 1)); } case 8628: case 8629: case 8630: case 8631: case 8632: case 8633: { byte expIndex = (byte) activeChar.getExpertiseIndex(); // elixir of Strength res = usePotion(activeChar, 2288, (expIndex > 5 ? expIndex : expIndex + 1)); break; } case 8634: case 8635: case 8636: case 8637: case 8638: case 8639: { byte expIndex = (byte) activeChar.getExpertiseIndex(); // elixir of cp res = usePotion(activeChar, 2289, (expIndex > 5 ? expIndex : expIndex + 1)); break; } // VALAKAS AMULETS case 6652: // Amulet Protection of Valakas res = usePotion(activeChar, 2231, 1); break; case 6653: // Amulet Flames of Valakas res = usePotion(activeChar, 2223, 1); break; case 6654: // Amulet Flames of Valakas res = usePotion(activeChar, 2233, 1); break; case 6655: // Amulet Slay Valakas res = usePotion(activeChar, 2232, 1); break; // HERBS case 8600: // Herb of Life res = usePotion(playable, 2278, 1); break; case 8601: // Greater Herb of Life res = usePotion(playable, 2278, 2); break; case 8602: // Superior Herb of Life res = usePotion(playable, 2278, 3); break; case 8603: // Herb of Mana res = usePotion(playable, 2279, 1); break; case 8604: // Greater Herb of Mane res = usePotion(playable, 2279, 2); break; case 8605: // Superior Herb of Mane res = usePotion(playable, 2279, 3); break; case 8606: // Herb of Strength res = usePotion(playable, 2280, 1); break; case 8607: // Herb of Magic res = usePotion(playable, 2281, 1); break; case 8608: // Herb of Atk. Spd. res = usePotion(playable, 2282, 1); break; case 8609: // Herb of Casting Spd. res = usePotion(playable, 2283, 1); break; case 8610: // Herb of Critical Attack res = usePotion(playable, 2284, 1); break; case 8611: // Herb of Speed res = usePotion(playable, 2285, 1); break; case 8612: // Herb of Warrior res = usePotion(playable, 2280, 1);// Herb of Strength res = usePotion(playable, 2282, 1);// Herb of Atk. Spd res = usePotion(playable, 2284, 1);// Herb of Critical Attack break; case 8613: // Herb of Mystic res = usePotion(playable, 2281, 1);// Herb of Magic res = usePotion(playable, 2283, 1);// Herb of Casting Spd. break; case 8614: // Herb of Warrior res = usePotion(playable, 2278, 3);// Superior Herb of Life res = usePotion(playable, 2279, 3);// Superior Herb of Mana break; case 10655: res = usePotion(playable, 2512, 1); break; case 10656: res = usePotion(playable, 2514, 1); break; case 10657: res = usePotion(playable, 2513, 1); break; // FISHERMAN POTIONS case 8193: // Fisherman's Potion - Green if (activeChar.getSkillLevel(1315) <= 3) { playable.destroyItem("Consume", item.getObjectId(), 1, null, false); playable.sendPacket(new SystemMessage(SystemMessageId.NOTHING_HAPPENED)); return; } res = usePotion(activeChar, 2274, 1); break; case 8194: // Fisherman's Potion - Jade if (activeChar.getSkillLevel(1315) <= 6) { playable.destroyItem("Consume", item.getObjectId(), 1, null, false); playable.sendPacket(new SystemMessage(SystemMessageId.NOTHING_HAPPENED)); return; } res = usePotion(activeChar, 2274, 2); break; case 8195: // Fisherman's Potion - Blue if (activeChar.getSkillLevel(1315) <= 9) { playable.destroyItem("Consume", item.getObjectId(), 1, null, false); playable.sendPacket(new SystemMessage(SystemMessageId.NOTHING_HAPPENED)); return; } res = usePotion(activeChar, 2274, 3); break; case 8196: // Fisherman's Potion - Yellow if (activeChar.getSkillLevel(1315) <= 12) { playable.destroyItem("Consume", item.getObjectId(), 1, null, false); playable.sendPacket(new SystemMessage(SystemMessageId.NOTHING_HAPPENED)); return; } res = usePotion(activeChar, 2274, 4); break; case 8197: // Fisherman's Potion - Orange if (activeChar.getSkillLevel(1315) <= 15) { playable.destroyItem("Consume", item.getObjectId(), 1, null, false); playable.sendPacket(new SystemMessage(SystemMessageId.NOTHING_HAPPENED)); return; } res = usePotion(activeChar, 2274, 5); break; case 8198: // Fisherman's Potion - Purple if (activeChar.getSkillLevel(1315) <= 18) { playable.destroyItem("Consume", item.getObjectId(), 1, null, false); playable.sendPacket(new SystemMessage(SystemMessageId.NOTHING_HAPPENED)); return; } res = usePotion(activeChar, 2274, 6); break; case 8199: // Fisherman's Potion - Red if (activeChar.getSkillLevel(1315) <= 21) { playable.destroyItem("Consume", item.getObjectId(), 1, null, false); playable.sendPacket(new SystemMessage(SystemMessageId.NOTHING_HAPPENED)); return; } res = usePotion(activeChar, 2274, 7); break; case 8200: // Fisherman's Potion - White if (activeChar.getSkillLevel(1315) <= 24) { playable.destroyItem("Consume", item.getObjectId(), 1, null, false); playable.sendPacket(new SystemMessage(SystemMessageId.NOTHING_HAPPENED)); return; } res = usePotion(activeChar, 2274, 8); break; case 8201: // Fisherman's Potion - Black res = usePotion(activeChar, 2274, 9); break; case 8202: // Fishing Potion res = usePotion(activeChar, 2275, 1); break; // Juices // added by Z0mbie! case 10260: // Haste Juice,xml:2429 res = usePotion(activeChar, 2429, 1); break; case 10261: // Accuracy Juice,xml:2430 res = usePotion(activeChar, 2430, 1); break; case 10262: // Critical Power Juice,xml:2431 res = usePotion(activeChar, 2431, 1); break; case 10263: // Critical Attack Juice,xml:2432 res = usePotion(activeChar, 2432, 1); break; case 10264: // Casting Speed Juice,xml:2433 res = usePotion(activeChar, 2433, 1); break; case 10265: // Evasion Juice,xml:2434 res = usePotion(activeChar, 2434, 1); break; case 10266: // Magic Power Juice,xml:2435 res = usePotion(activeChar, 2435, 1); break; case 10267: // Power Juice,xml:2436 res = usePotion(activeChar, 2436, 1); break; case 10268: // Speed Juice,xml:2437 res = usePotion(activeChar, 2437, 1); break; case 10269: // Defense Juice,xml:2438 res = usePotion(activeChar, 2438, 1); break; case 10270: // MP Consumption Juice,xml: 2439 res = usePotion(activeChar, 2439, 1); break; default: } if (res) playable.destroyItem("Consume", item.getObjectId(), 1, null, false); } /** * * @param activeChar * @param effectType * @param itemId * @return */ @SuppressWarnings("unchecked") private boolean isEffectReplaceable(L2PcInstance activeChar, Enum effectType, int itemId) { L2Effect[] effects = activeChar.getAllEffects(); if (effects == null) return true; for (L2Effect e : effects) { if (e.getEffectType() == effectType) { // One can reuse pots after 2/3 of their duration is over. // It would be faster to check if its > 10 but that would screw custom pot durations... if (e.getTaskTime() > (e.getSkill().getBuffDuration() * 67) / 100000) return true; SystemMessage sm = new SystemMessage(SystemMessageId.S1_PREPARED_FOR_REUSE); sm.addItemName(itemId); activeChar.sendPacket(sm); return false; } } return true; } /** * * @param activeChar * @param magicId * @param level * @return */ public boolean usePotion(L2PlayableInstance activeChar, int magicId, int level) { L2Skill skill = SkillTable.getInstance().getInfo(magicId, level); if (skill != null) { // Return false if potion is in reuse // so is not destroyed from inventory if (activeChar.isSkillDisabled(skill.getId())) { SystemMessage sm = new SystemMessage(SystemMessageId.S1_PREPARED_FOR_REUSE); sm.addSkillName(skill); activeChar.sendPacket(sm); return false; } activeChar.doSimultaneousCast(skill); if (activeChar instanceof L2PcInstance) { L2PcInstance player = (L2PcInstance)activeChar; //only for Heal potions if (magicId == 2031 || magicId == 2032 || magicId == 2037) { player.shortBuffStatusUpdate(magicId, level, 15); } // Summons should be affected by herbs too, self time effect is handled at L2Effect constructor else if (((magicId > 2277 && magicId < 2286) || (magicId >= 2512 && magicId <= 2514)) && (player.getPet() != null && player.getPet() instanceof L2SummonInstance)) { player.getPet().doSimultaneousCast(skill); } if (!(player.isSitting() && !skill.isPotion())) return true; } else if (activeChar instanceof L2PetInstance) { SystemMessage sm = new SystemMessage(SystemMessageId.PET_USES_S1); sm.addString(skill.getName()); ((L2PetInstance)(activeChar)).getOwner().sendPacket(sm); } } return false; } /** * * @see net.sf.l2j.gameserver.handler.IItemHandler#getItemIds() */ public int[] getItemIds() { return ITEM_IDS; } } Сохранить и переименовать в Potions.java , данный файл скопировать в L2j_Server\L2_GameServer\java\net\sf\l2j\gameserver\handler\itemhandlers С подтверждением замены файла. Для тех кто не умеет компилить - пишите в ПМ выложу скомпиленный Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты