Jump to content
  • 0

Auto Potions


Question

5 answers to this question

Recommended Posts

  • 0
Posted

Potion.java maybe?

here is the code of potion.java

/*
 * 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 2, 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, write to the Free Software
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
 * 02111-1307, USA.
 *
 * http://www.gnu.org/copyleft/gpl.html
 */
package com.l2jfrozen.gameserver.handler.itemhandlers;

import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

import javolution.util.FastMap;

import com.l2jfrozen.Config;
import com.l2jfrozen.gameserver.datatables.SkillTable;
import com.l2jfrozen.gameserver.handler.IItemHandler;
import com.l2jfrozen.gameserver.model.L2Effect;
import com.l2jfrozen.gameserver.model.L2Effect.EffectType;
import com.l2jfrozen.gameserver.model.L2Skill;
import com.l2jfrozen.gameserver.model.L2Summon;
import com.l2jfrozen.gameserver.model.actor.instance.L2ItemInstance;
import com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance;
import com.l2jfrozen.gameserver.model.actor.instance.L2PetInstance;
import com.l2jfrozen.gameserver.model.actor.instance.L2PlayableInstance;
import com.l2jfrozen.gameserver.model.actor.instance.L2StaticObjectInstance;
import com.l2jfrozen.gameserver.model.entity.event.CTF;
import com.l2jfrozen.gameserver.model.entity.event.DM;
import com.l2jfrozen.gameserver.model.entity.event.TvT;
import com.l2jfrozen.gameserver.model.entity.event.VIP;
import com.l2jfrozen.gameserver.network.SystemMessageId;
import com.l2jfrozen.gameserver.network.serverpackets.ActionFailed;
import com.l2jfrozen.gameserver.network.serverpackets.SystemMessage;
import com.l2jfrozen.gameserver.thread.ThreadPoolManager;

/**
 * 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 int _herbstask = 0;
	
	private static FastMap<Integer,PotionsSkills> potions = new FastMap<Integer,PotionsSkills>();
	
	private static void loadPotions(){
		
		for(PotionsSkills actual_potion: PotionsSkills.values()){
			
			potions.put(actual_potion.potion_id, actual_potion);
		
		}
	}
	
	public static PotionsSkills get_skills_for_potion(Integer potion_id){
		
		if(potions.isEmpty())
			loadPotions();
		
		return potions.get(potion_id);
		
	}
	
	public static List<Integer> get_potions_for_skill(Integer skill_id, Integer skill_level){
		
		if(potions.isEmpty())
			loadPotions();
		
		List<Integer> output_potions = new ArrayList<Integer>();
		
		for(Integer actual_potion_item: potions.keySet()){
			
			FastMap<Integer,Integer> actual_item_skills = null;
			if(potions.get(actual_potion_item)!=null)
				actual_item_skills = potions.get(actual_potion_item).skills;
			
			if(actual_item_skills!=null && actual_item_skills.get(skill_id)!=null && actual_item_skills.get(skill_id)==skill_level){
				output_potions.add(actual_potion_item);
			}
			
		}
		
		return output_potions;
		
	}
	
	/** Task for Herbs */
	private class HerbTask implements Runnable
	{
		private L2PcInstance _activeChar;
		private int _magicId;
		private int _level;

		HerbTask(L2PcInstance activeChar, int magicId, int level)
		{
			_activeChar = activeChar;
			_magicId = magicId;
			_level = level;
		}

		@Override
		public void run()
		{
			try
			{
				usePotion(_activeChar, _magicId, _level);
			}
			catch(Throwable t)
			{
				if(Config.ENABLE_ALL_EXCEPTIONS)
					t.printStackTrace();
				
				_log.log(Level.WARNING, "", t);
			}
		}
	}

	private static final int[] ITEM_IDS =
	{
			65,
			725,
			726,
			727,
			728,
			733,
			734,
			735,
			1060,
			1061,
			1062,
			1073,
			1374,
			1375,
			1539,
			1540,
			4667,
			4679,
			4680,
			5283,
			5591,
			5592,
			6035,
			6036,
			6652,
			6653,
			6654,
			6655,
			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,
			//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
	};

	@Override
	public synchronized void useItem(L2PlayableInstance playable, L2ItemInstance item)
	{
		L2PcInstance activeChar;
		if(playable instanceof L2PcInstance)
		{
			activeChar = (L2PcInstance) playable;
		}
		else if(playable instanceof L2PetInstance)
		{
			activeChar = ((L2PetInstance) playable).getOwner();
		}
		else
			return;

		//if(activeChar._inEventTvT && TvT._started && !Config.TVT_ALLOW_POTIONS)
		if(activeChar._inEventTvT && TvT.is_started() && !Config.TVT_ALLOW_POTIONS)
		{
			activeChar.sendPacket(ActionFailed.STATIC_PACKET);
			return;
		}

		//if(activeChar._inEventDM && DM._started && !Config.DM_ALLOW_POTIONS)
		if(activeChar._inEventDM && DM.is_started() && !Config.DM_ALLOW_POTIONS)
		{
			activeChar.sendPacket(ActionFailed.STATIC_PACKET);
			return;
		}

		//if(activeChar._inEventCTF && CTF._started && !Config.CTF_ALLOW_POTIONS)
		if(activeChar._inEventCTF && CTF.is_started() && !Config.CTF_ALLOW_POTIONS)
		{
			activeChar.sendPacket(ActionFailed.STATIC_PACKET);
			return;
		}

		//if(activeChar._inEventVIP && VIP._started)
		if(activeChar._inEventVIP && VIP._started)
		{
			activeChar.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())
		{
			activeChar.sendPacket(ActionFailed.STATIC_PACKET);
			return;
		}*/

		if(!Config.ALLOW_POTS_IN_PVP && (activeChar.isInDuel() || activeChar.getPvpFlag() != 0))
		{
			activeChar.sendMessage("You Cannot Use Potions In PvP!");
			return;
		}

		int itemId = item.getItemId();
		switch(itemId)
		{
			// MANA POTIONS
			case 726: // mana drug, xml: 2003
				if(!isEffectReplaceable(playable, L2Effect.EffectType.MANA_HEAL_OVER_TIME, itemId))
					return;
				usePotion(playable, 2003, 1);
				break;
			case 728: // mana_potion, xml: 2005
				usePotion(playable, 2005, 1);
				break;

			// HEALING AND SPEED POTIONS
			case 65: // red_potion, xml: 2001
				usePotion(playable, 2001, 1);
				break;
			case 725: // healing_drug, xml: 2002
				if(!isEffectReplaceable(playable, L2Effect.EffectType.HEAL_OVER_TIME, itemId))
					return;
				usePotion(playable, 2002, 1);
				break;
			case 727: // _healing_potion, xml: 2032
				if(!isEffectReplaceable(playable, L2Effect.EffectType.HEAL_OVER_TIME, itemId))
					return;
				usePotion(playable, 2032, 1);
				break;
			case 733: // endeavor_potion
				usePotion(playable, 2010, 1);
				break;	
			case 734: // quick_step_potion, xml: 2011
				usePotion(playable, 2011, 1);
				break;
			case 735: // swift_attack_potion, xml: 2012
				usePotion(playable, 2012, 1);
				break;
			case 1060: // lesser_healing_potion,
			case 1073: // beginner's potion, xml: 2031
				if(!isEffectReplaceable(playable, L2Effect.EffectType.HEAL_OVER_TIME, itemId))
					return;
				usePotion(playable, 2031, 1);
				break;
			case 1061: // healing_potion, xml: 2032
				if(!isEffectReplaceable(playable, L2Effect.EffectType.HEAL_OVER_TIME, itemId))
					return;
				usePotion(playable, 2032, 1);
				break;
			case 1062: // haste_potion, xml: 2011
				usePotion(playable, 2011, 1);
				break;
			case 1374: // adv_quick_step_potion, xml: 2034
				usePotion(playable, 2034, 1);
				break;
			case 1375: // adv_swift_attack_potion, xml: 2035
				usePotion(playable, 2035, 1);
				break;
			case 1539: // greater_healing_potion, xml: 2037
				if(!isEffectReplaceable(playable, L2Effect.EffectType.HEAL_OVER_TIME, itemId))
					return;
				usePotion(playable, 2037, 1);
				break;
			case 1540: // quick_healing_potion, xml: 2038
				usePotion(playable, 2038, 1);
				break;
			case 4667: // potion_of_critical_escape
				usePotion(playable, 2074, 1);
				break;	
			case 4679: // bless of eva
				usePotion(playable, 2076, 1);
				break;
			case 4680: // rsk_damage_shield_potion
				usePotion(playable, 2077, 1);
				break;				
			case 5283: // Rice Cake, xml: 2136
				if(!isEffectReplaceable(playable, L2Effect.EffectType.HEAL_OVER_TIME, itemId))
					return;
				usePotion(playable, 2136, 1);
				break;
			case 5591: // CP
				usePotion(playable, 2166, 1);
				break;
			case 5592: // Greater CP
				usePotion(playable, 2166, 2);
				break;
			case 6035: // Magic Haste Potion, xml: 2169
				usePotion(playable, 2169, 1);
				break;
			case 6036: // Greater Magic Haste Potion, xml: 2169
				usePotion(playable, 2169, 2);
				break;

			// ELIXIR
			case 8622:
			case 8623:
			case 8624:
			case 8625:
			case 8626:
			case 8627:
				// elixir of Life
				if(!isEffectReplaceable(activeChar, L2Effect.EffectType.HEAL_OVER_TIME, itemId))
					return;
				
				if(itemId == 8622 && activeChar.getExpertiseIndex() == 0 || itemId == 8623 && activeChar.getExpertiseIndex() == 1 || itemId == 8624 && activeChar.getExpertiseIndex() == 2 || itemId == 8625 && activeChar.getExpertiseIndex() == 3 || itemId == 8626 && activeChar.getExpertiseIndex() == 4 || itemId == 8627 && activeChar.getExpertiseIndex() == 5)
				{
					usePotion(activeChar, 2287, (activeChar.getExpertiseIndex() + 1));
				}
				else
				{
					SystemMessage sm = new SystemMessage(SystemMessageId.INCOMPATIBLE_ITEM_GRADE); // INCOMPATIBLE_ITEM_GRADE
					sm.addItemName(itemId);
					activeChar.sendPacket(sm);
					sm = null;

					return;
				}
				break;
			case 8628:
			case 8629:
			case 8630:
			case 8631:
			case 8632:
			case 8633:
				// elixir of Strength
				if(!isEffectReplaceable(activeChar, L2Effect.EffectType.HEAL_OVER_TIME, itemId))
					return;
				
				if(itemId == 8628 && activeChar.getExpertiseIndex() == 0 || itemId == 8629 && activeChar.getExpertiseIndex() == 1 || itemId == 8630 && activeChar.getExpertiseIndex() == 2 || itemId == 8631 && activeChar.getExpertiseIndex() == 3 || itemId == 8632 && activeChar.getExpertiseIndex() == 4 || itemId == 8633 && activeChar.getExpertiseIndex() == 5)
				{
					usePotion(activeChar, 2288, (activeChar.getExpertiseIndex() + 1));
				}
				else
				{
					SystemMessage sm = new SystemMessage(SystemMessageId.INCOMPATIBLE_ITEM_GRADE); // INCOMPATIBLE_ITEM_GRADE
					sm.addItemName(itemId);
					activeChar.sendPacket(sm);
					sm = null;

					return;
				}
				break;
			case 8634:
			case 8635:
			case 8636:
			case 8637:
			case 8638:
			case 8639:
				// elixir of cp
				if(!isEffectReplaceable(activeChar, L2Effect.EffectType.HEAL_OVER_TIME, itemId))
					return;
				
				if(itemId == 8634 && activeChar.getExpertiseIndex() == 0 || itemId == 8635 && activeChar.getExpertiseIndex() == 1 || itemId == 8636 && activeChar.getExpertiseIndex() == 2 || itemId == 8637 && activeChar.getExpertiseIndex() == 3 || itemId == 8638 && activeChar.getExpertiseIndex() == 4 || itemId == 8639 && activeChar.getExpertiseIndex() == 5)
				{
					usePotion(activeChar, 2289, (activeChar.getExpertiseIndex() + 1));
				}
				else
				{
					SystemMessage sm = new SystemMessage(SystemMessageId.INCOMPATIBLE_ITEM_GRADE); // INCOMPATIBLE_ITEM_GRADE
					sm.addItemName(itemId);
					activeChar.sendPacket(sm);
					sm = null;

					return;
				}
				break;

			// VALAKAS AMULETS
			case 6652: // Amulet Protection of Valakas
				usePotion(playable, 2231, 1);
				break;
			case 6653: // Amulet Flames of Valakas
				usePotion(playable, 2233, 1);
				break;
			case 6654: // Amulet Flames of Valakas
				usePotion(playable, 2233, 1);
				break;
			case 6655: // Amulet Slay Valakas
				usePotion(playable, 2232, 1);
				break;

			// HERBS
			case 8600: // Herb of Life
				usePotion(playable, 2278, 1);
				break;
			case 8601: // Greater Herb of Life
				usePotion(playable, 2278, 2);
				break;
			case 8602: // Superior Herb of Life
				usePotion(playable, 2278, 3);
				break;
			case 8603: // Herb of Mana
				usePotion(playable, 2279, 1);
				break;
			case 8604: // Greater Herb of Mane
				usePotion(playable, 2279, 2);
				break;
			case 8605: // Superior Herb of Mane
				usePotion(playable, 2279, 3);
				break;
			case 8606: // Herb of Strength
				usePotion(playable, 2280, 1);
				break;
			case 8607: // Herb of Magic
				usePotion(playable, 2281, 1);
				break;
			case 8608: // Herb of Atk. Spd.
				usePotion(playable, 2282, 1);
				break;
			case 8609: // Herb of Casting Spd.
				usePotion(playable, 2283, 1);
				break;
			case 8610: // Herb of Critical Attack
				usePotion(playable, 2284, 1);
				break;
			case 8611: // Herb of Speed
				usePotion(playable, 2285, 1);
				break;
			case 8612: // Herb of Warrior
				usePotion(playable, 2280, 1);
				usePotion(playable, 2282, 1);
				usePotion(playable, 2284, 1);
				break;
			case 8613: // Herb of Mystic
				usePotion(playable, 2281, 1);
				usePotion(playable, 2283, 1);
				break;
			case 8614: // Herb of Warrior
				usePotion(playable, 2278, 3);
				usePotion(playable, 2279, 3);
				break;

			// FISHERMAN POTIONS
			case 8193: // Fisherman's Potion - Green
				if(playable.getSkillLevel(1315) <= 3)
				{
					playable.destroyItem("Consume", item.getObjectId(), 1, null, false);
					playable.sendPacket(new SystemMessage(SystemMessageId.NOTHING_HAPPENED));
					return;
				}
				usePotion(playable, 2274, 1);
				break;
			case 8194: // Fisherman's Potion - Jade
				if(playable.getSkillLevel(1315) <= 6)
				{
					playable.destroyItem("Consume", item.getObjectId(), 1, null, false);
					playable.sendPacket(new SystemMessage(SystemMessageId.NOTHING_HAPPENED));
					return;
				}
				usePotion(playable, 2274, 2);
				break;
			case 8195: // Fisherman's Potion - Blue
				if(playable.getSkillLevel(1315) <= 9)
				{
					playable.destroyItem("Consume", item.getObjectId(), 1, null, false);
					playable.sendPacket(new SystemMessage(SystemMessageId.NOTHING_HAPPENED));
					return;
				}
				usePotion(playable, 2274, 3);
				break;
			case 8196: // Fisherman's Potion - Yellow
				if(playable.getSkillLevel(1315) <= 12)
				{
					playable.destroyItem("Consume", item.getObjectId(), 1, null, false);
					playable.sendPacket(new SystemMessage(SystemMessageId.NOTHING_HAPPENED));
					return;
				}
				usePotion(playable, 2274, 4);
				break;
			case 8197: // Fisherman's Potion - Orange
				if(playable.getSkillLevel(1315) <= 15)
				{
					playable.destroyItem("Consume", item.getObjectId(), 1, null, false);
					playable.sendPacket(new SystemMessage(SystemMessageId.NOTHING_HAPPENED));
					return;
				}
				usePotion(playable, 2274, 5);
				break;
			case 8198: // Fisherman's Potion - Purple
				if(playable.getSkillLevel(1315) <= 18)
				{
					playable.destroyItem("Consume", item.getObjectId(), 1, null, false);
					playable.sendPacket(new SystemMessage(SystemMessageId.NOTHING_HAPPENED));
					return;
				}
				usePotion(playable, 2274, 6);
				break;
			case 8199: // Fisherman's Potion - Red
				if(playable.getSkillLevel(1315) <= 21)
				{
					playable.destroyItem("Consume", item.getObjectId(), 1, null, false);
					playable.sendPacket(new SystemMessage(SystemMessageId.NOTHING_HAPPENED));
					return;
				}
				usePotion(playable, 2274, 7);
				break;
			case 8200: // Fisherman's Potion - White
				if(playable.getSkillLevel(1315) <= 24)
				{
					playable.destroyItem("Consume", item.getObjectId(), 1, null, false);
					playable.sendPacket(new SystemMessage(SystemMessageId.NOTHING_HAPPENED));
					return;
				}
				usePotion(playable, 2274, 8);
				break;
			case 8201: // Fisherman's Potion - Black
				usePotion(playable, 2274, 9);
				break;
			case 8202: // Fishing Potion
				usePotion(playable, 2275, 1);
				break;
			default:
		}

		activeChar = null;

		/*
		if(res)
		{
			playable.destroyItem("Consume", item.getObjectId(), 1, null, false);
		}
		*/
		
	}

	private boolean isEffectReplaceable(L2PlayableInstance activeChar, Enum<EffectType> effectType, int itemId)
	{
		L2Effect[] effects = activeChar.getAllEffects();

		if(effects == null)
			return true;

		for(L2Effect e : effects)
		{
			if(e.getEffectType() == effectType)
			{
				if(e.getSkill().isPotion())
				{
					// 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);
					sm = null;

					return false;
				}
			}
		}
		return true;
	}

	public boolean usePotion(L2PlayableInstance activeChar, int magicId, int level)
	{
		if(activeChar.isCastingNow() && magicId > 2277 && magicId < 2285 && activeChar instanceof L2PcInstance)
		{
			_herbstask += 100;
			ThreadPoolManager.getInstance().scheduleAi(new HerbTask((L2PcInstance)activeChar, magicId, level), _herbstask);
		}
		else
		{
			if(magicId > 2277 && magicId < 2285 && _herbstask >= 100)
			{
				_herbstask -= 100;
			}
			L2Skill skill = SkillTable.getInstance().getInfo(magicId, level);
			if(activeChar.getTarget() instanceof L2StaticObjectInstance)
			{
				activeChar.setTarget(activeChar);
			}
			if(skill != null)
			{
				activeChar.doCast(skill);
				if(skill.isPotion() && !activeChar.isParalyzed() ){
					
					if(activeChar instanceof L2PcInstance){
						
						L2PcInstance instance = (L2PcInstance) activeChar;
						
						if(!instance.isSitting() && !instance.isAway() && !instance.isFakeDeath())
							return true;
						
					}else
						return true;
					
				}
				
				//if(!((activeChar.isSitting() || activeChar.isParalyzed() || activeChar.isAway() || activeChar.isFakeDeath()) && !skill.isPotion()))
				//	return true;
			}
		}
		return false;
	}

	@Override
	public int[] getItemIds()
	{
		return ITEM_IDS;
	}
	
	public static void delete_Potion_Item (L2PlayableInstance playable, Integer skill_id, Integer skill_level){
		
		if(!(playable instanceof L2PcInstance) && !(playable instanceof L2Summon)){
			return;
		}
		
		List<Integer> possible_potions = Potions.get_potions_for_skill(skill_id, skill_level);
		
		if(!possible_potions.isEmpty()){
			
			for(Integer potion: possible_potions){
				
				if(potion >= 8600 && potion <= 8614){ //herbs are directly destroyed
					continue; 
				}
				
				if(playable instanceof L2PcInstance)
				{
					L2PcInstance activeChar = (L2PcInstance) playable;
					
					if(activeChar.getInventory().getInventoryItemCount(potion, 0)>0){
						
						L2ItemInstance item = activeChar.getInventory().getItemByItemId(potion);
						activeChar.destroyItem("Consume", item.getObjectId(), 1, null, false);
						
					}else{
						if(Config.DEBUG)
							_log.log(Level.WARNING, "Attention: playable "+playable.getName()+" has not potions "+potion+"!");
					}
				}
				else if(playable instanceof L2Summon)
				{
					L2Summon activeChar = (L2Summon) playable;
					
					if(activeChar.getInventory().getInventoryItemCount(potion, 0)>0){
						
						L2ItemInstance item = activeChar.getInventory().getItemByItemId(potion);
						activeChar.destroyItem("Consume", item.getObjectId(), 1, null, false);
						
					}else{
						if(Config.DEBUG)
							_log.log(Level.WARNING, "Attention: playable "+playable.getName()+" has not potions "+potion+"!");
					}
				}
				
			}
			
		}else{
			_log.log(Level.WARNING, "Attention: Can't destroy potion for skill "+skill_id+" level "+skill_level);
		}
		
	}
	
	enum PotionsSkills{
		
		mana_drug( 726, 2003, 1),
		mana_potion( 728, 2005, 1),
		red_potion( 65, 2001, 1),
		healing_drug(725,  2002, 1),
		healing_potion_ring(727,  2032, 1),
		quick_step_potion (734, 2011, 1),
		swift_attack_potion (735,2012, 1),
		lesser_healing_potion (1060,2031, 1),
		beginner_s_potion (1073,  2031, 1),
		healing_potion (1061,  2032, 1),
		haste_potion (1062,  2011, 1),
		adv_quick_step_potion (1374, 2034, 1),
		adv_swift_attack_potion (1375, 2035, 1),
		greater_healing_potion (1539, 2037, 1),
		quick_healing_potion(1540, 2038, 1),
		bless_of_eva(4679, 2076, 1),
		endeavor_potion(733, 2010, 1),
		potion_of_critical_escape(4667, 2074, 1),
		rsk_damage_shield_potion(4680, 2077, 1),
		Rice_Cake (5283, 2136, 1),
		CP (5591, 2166, 1),
		Greater_CP (5592, 2166, 2),
		Magic_Haste_Potion (6035,  2169, 1),
		Greater_Magic_Haste_Potion (6036,  2169, 2),
		elixir_of_Life_nog(8622,2287, 1),
		elixir_of_Life_d(8623,2287, 2),
		elixir_of_Life_c(8624,2287, 3),
		elixir_of_Life_b(8625,2287, 4),
		elixir_of_Life_a(8626,2287, 5),
		elixir_of_Life_s(8627,2287, 6),
		elixir_of_Strength_nog(8628, 2288, 1),
		elixir_of_Strength_d(8629, 2288, 2),
		elixir_of_Strength_c(8630, 2288, 3),
		elixir_of_Strength_b(8631, 2288, 4),
		elixir_of_Strength_a(8632, 2288, 5),
		elixir_of_Strength_s(8633, 2288, 6),
		elixir_of_cp_nog(8634,2289, 1),
		elixir_of_cp_d(8635,2289, 2),
		elixir_of_cp_c(8636,2289, 3),
		elixir_of_cp_b(8637,2289, 4),
		elixir_of_cp_a(8638,2289, 5),
		elixir_of_cp_s(8639,2289, 6),
		Amulet_Protection_of_Valakas(6652, 2231, 1),
		Amulet_Flames_of_Valakas_1 (6653, 2233, 1),
		Amulet_Flames_of_Valakas_2 (6654, 2233, 1),
		Amulet_Slay_Valakas (6655, 2232, 1),
		Herb_of_Life (8600, 2278, 1),
		Greater_Herb_of_Life (8601, 2278, 2),
		Superior_Herb_of_Life (8602, 2278, 3),
		Herb_of_Mana (8603, 2279, 1),
		Greater_Herb_of_Mane (8604, 2279, 2),
		Superior_Herb_of_Mane (8605, 2279, 3),
		Herb_of_Strength (8606, 2280, 1),
		Herb_of_Magic (8607, 2281, 1),
		Herb_of_Atk_Spd (8608, 2282, 1),
		Herb_of_Casting_Spd (8609, 2283, 1),
		Herb_of_Critical_Attack (8610, 2284, 1),
		Herb_of_Speed (8611, 2285, 1),
		
		Herb_of_Warrior (8612, new Integer[]{2280,2282,2284},new Integer[]{1,1,1}),
		Herb_of_Mystic (8613, new Integer[]{2281,2283},new Integer[]{1,1}),
		Herb_of_Recovery (8614, new Integer[]{2278,2279},new Integer[]{3,3}),
		
		Fisherman_s_Potion_Green (8193, 2274, 1),
		Fisherman_s_Potion_Jade (8194, 2274, 2),
		Fisherman_s_Potion_Blue (8195, 2274, 3),
		Fisherman_s_Potion_Yellow (8196, 2274, 4),
		Fisherman_s_Potion_Orange (8197, 2274, 5),
		Fisherman_s_Potion_Purple (8198, 2274, 6),
		Fisherman_s_Potion_Red (8199, 2274, 7),
		Fisherman_s_Potion_White (8200, 2274, 8),
		Fisherman_s_Potion_Black (8201, 2274, 9),
		Fishing_Potion (8202, 2275, 1);
			
		public Integer potion_id;
		public FastMap<Integer, Integer> skills = new FastMap<Integer, Integer>();
		
		private PotionsSkills(int potion_item, int skill_identifier , int skill_level){
			//FastMap<Integer, Integer> skills = new FastMap<Integer, Integer>();
			skills.put(skill_identifier, skill_level);
			//potion_id_skills.put(potion_item, skills);
			potion_id=potion_item;
		}
		
		private PotionsSkills(int potion_item, Integer[] skill_identifiers , Integer[] skill_levels){
			//FastMap<Integer, Integer> skills = new FastMap<Integer, Integer>();
			for(int i = 0;i<skill_identifiers.length;i++){
				skills.put(skill_identifiers[i], skill_levels[i]); //each skill of a particular potion
																   //can have just 1 level, not more
			}
			potion_id=potion_item;
			//potion_id_skills.put(potion_item, skills);
		}
		
		/*
		public final FastMap<Integer,Integer> get_skills_for_potion(Integer potion_id){
			
			return potion_id_skills.get(potion_id);
			
		}
		
		public final List<Integer> get_potions_for_skill(Integer skill_id, Integer skill_level){
			
			List<Integer> output_potions = new ArrayList<Integer>();
			
			for(Integer actual_potion_item: potion_id_skills.keySet()){
				FastMap<Integer,Integer> actual_item_skills = potion_id_skills.get(actual_potion_item);
				
				if(actual_item_skills!=null && actual_item_skills.get(skill_id)!=null && actual_item_skills.get(skill_id)==skill_level){
					output_potions.add(actual_potion_item);
				}
				
			}
			
			return output_potions;
			
		}
		*/
	}
}

and soulshot.java

/*
 * 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 2, 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, write to the Free Software
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
 * 02111-1307, USA.
 *
 * http://www.gnu.org/copyleft/gpl.html
 */
package com.l2jfrozen.gameserver.handler.itemhandlers;

import com.l2jfrozen.Config;
import com.l2jfrozen.gameserver.handler.IItemHandler;
import com.l2jfrozen.gameserver.model.actor.instance.L2ItemInstance;
import com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance;
import com.l2jfrozen.gameserver.model.actor.instance.L2PlayableInstance;
import com.l2jfrozen.gameserver.network.SystemMessageId;
import com.l2jfrozen.gameserver.network.serverpackets.ActionFailed;
import com.l2jfrozen.gameserver.network.serverpackets.ExAutoSoulShot;
import com.l2jfrozen.gameserver.network.serverpackets.MagicSkillUser;
import com.l2jfrozen.gameserver.network.serverpackets.SystemMessage;
import com.l2jfrozen.gameserver.skills.Stats;
import com.l2jfrozen.gameserver.templates.L2Item;
import com.l2jfrozen.gameserver.templates.L2Weapon;
import com.l2jfrozen.gameserver.util.Broadcast;

/**
 * This class ...
 * 
 * @version $Revision: 1.2.4.5 $ $Date: 2009/04/13 03:12:07 $
 * @author programmos
 */

public class SoulShots implements IItemHandler
{
	// All the item IDs that this handler knows.
	private static final int[] ITEM_IDS =
	{
			5789, 1835, 1463, 1464, 1465, 1466, 1467
	};
	private static final int[] SKILL_IDS =
	{
			2039, 2150, 2151, 2152, 2153, 2154
	};

	/* (non-Javadoc)
	 * @see com.l2jfrozen.gameserver.handler.IItemHandler#useItem(com.l2jfrozen.gameserver.model.L2PcInstance, com.l2jfrozen.gameserver.model.L2ItemInstance)
	 */
	@Override
	public void useItem(L2PlayableInstance playable, L2ItemInstance item)
	{
		if(!(playable instanceof L2PcInstance))
			return;

		L2PcInstance activeChar = (L2PcInstance) playable;
		L2ItemInstance weaponInst = activeChar.getActiveWeaponInstance();
		L2Weapon weaponItem = activeChar.getActiveWeaponItem();
		int itemId = item.getItemId();

		// Check if Soulshot can be used
		if(weaponInst == null || weaponItem.getSoulShotCount() == 0)
		{
			if(!activeChar.getAutoSoulShot().containsKey(itemId))
			{
				activeChar.sendPacket(new SystemMessage(SystemMessageId.CANNOT_USE_SOULSHOTS));
			}
			return;
		}

		if(activeChar.isParalyzed())
		{
			activeChar.sendMessage("You Cannot Use This While You Are Paralyzed");
			activeChar.sendPacket(ActionFailed.STATIC_PACKET);
			return;
		}

		// Check for correct grade
		int weaponGrade = weaponItem.getCrystalType();
		if(weaponGrade == L2Item.CRYSTAL_NONE && itemId != 5789 && itemId != 1835 || weaponGrade == L2Item.CRYSTAL_D && itemId != 1463 || weaponGrade == L2Item.CRYSTAL_C && itemId != 1464 || weaponGrade == L2Item.CRYSTAL_B && itemId != 1465 || weaponGrade == L2Item.CRYSTAL_A && itemId != 1466 || weaponGrade == L2Item.CRYSTAL_S && itemId != 1467)
		{
			if(!activeChar.getAutoSoulShot().containsKey(itemId))
			{
				activeChar.sendPacket(new SystemMessage(SystemMessageId.SOULSHOTS_GRADE_MISMATCH));
			}
			return;
		}

		activeChar.soulShotLock.lock();
		try
		{
			// Check if Soulshot is already active
			if(weaponInst.getChargedSoulshot() != L2ItemInstance.CHARGED_NONE)
				return;

			// Consume Soulshots if player has enough of them
			int saSSCount = (int) activeChar.getStat().calcStat(Stats.SOULSHOT_COUNT, 0, null, null);
			int SSCount = saSSCount == 0 ? weaponItem.getSoulShotCount() : saSSCount;

			weaponItem = null;

			// TODO: test ss
			if(!Config.DONT_DESTROY_SS)
			{
				if(!activeChar.destroyItemWithoutTrace("Consume", item.getObjectId(), SSCount, null, false))
				{
					if(activeChar.getAutoSoulShot().containsKey(itemId))
					{
						activeChar.removeAutoSoulShot(itemId);
						activeChar.sendPacket(new ExAutoSoulShot(itemId, 0));

						SystemMessage sm = new SystemMessage(SystemMessageId.AUTO_USE_OF_S1_CANCELLED);
						sm.addString(item.getItem().getName());
						activeChar.sendPacket(sm);
						sm = null;
					}
					else
					{
						activeChar.sendPacket(new SystemMessage(SystemMessageId.NOT_ENOUGH_SOULSHOTS));
					}
					return;
				}
			}

			// Charge soulshot
			weaponInst.setChargedSoulshot(L2ItemInstance.CHARGED_SOULSHOT);

			weaponInst = null;
		}
		finally
		{
			activeChar.soulShotLock.unlock();
		}

		// Send message to client
		activeChar.sendPacket(new SystemMessage(SystemMessageId.ENABLED_SOULSHOT));
		Broadcast.toSelfAndKnownPlayersInRadius(activeChar, new MagicSkillUser(activeChar, activeChar, SKILL_IDS[weaponGrade], 1, 0, 0), 360000/*600*/);

		activeChar = null;
	}

	@Override
	public int[] getItemIds()
	{
		return ITEM_IDS;
	}
}

what should i change in code line?

  • 0
Posted (edited)

Just add w/e code the patch has at ItemSkills class to Potions class.

Edited by Versus
  • 0
Posted

He means open potions.java and what is in the patch for itemskills.java edit potions.java with this you dont have to search for itemskills

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...