 f483f9bec5
			
		
	
	f483f9bec5
	
	
	
		
			
			-Update AcquireSkillList packet. -Added skill Dual Maximum Hp to skill tree for all awaken classes. -Fixed a bug when changing class skills to learn stay from previous class until relogin. Contributed by NviX.
		
			
				
	
	
		
			283 lines
		
	
	
		
			7.0 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			283 lines
		
	
	
		
			7.0 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
| /*
 | |
|  * Copyright (C) 2004-2015 L2J Server
 | |
|  * 
 | |
|  * This file is part of L2J Server.
 | |
|  * 
 | |
|  * L2J Server 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.
 | |
|  * 
 | |
|  * L2J Server 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;
 | |
| 
 | |
| import java.util.ArrayList;
 | |
| import java.util.HashSet;
 | |
| import java.util.List;
 | |
| import java.util.Set;
 | |
| 
 | |
| import com.l2jserver.Config;
 | |
| import com.l2jserver.gameserver.enums.Race;
 | |
| import com.l2jserver.gameserver.model.base.ClassId;
 | |
| import com.l2jserver.gameserver.model.base.SocialClass;
 | |
| import com.l2jserver.gameserver.model.holders.ItemHolder;
 | |
| import com.l2jserver.gameserver.model.holders.SkillHolder;
 | |
| 
 | |
| /**
 | |
|  * @author Zoey76
 | |
|  */
 | |
| public final class L2SkillLearn
 | |
| {
 | |
| 	private final String _skillName;
 | |
| 	private final int _skillId;
 | |
| 	private final int _skillLvl;
 | |
| 	private final int _getLevel;
 | |
| 	private final int _getDualClassLevel;
 | |
| 	private final boolean _autoGet;
 | |
| 	private final int _levelUpSp;
 | |
| 	private final List<ItemHolder> _requiredItems = new ArrayList<>();
 | |
| 	private final List<Race> _races = new ArrayList<>();
 | |
| 	private final List<SkillHolder> _preReqSkills = new ArrayList<>();
 | |
| 	private SocialClass _socialClass;
 | |
| 	private final boolean _residenceSkill;
 | |
| 	private final List<Integer> _residenceIds = new ArrayList<>();
 | |
| 	private final boolean _learnedByNpc;
 | |
| 	private final boolean _learnedByFS;
 | |
| 	private final Set<Integer> _removeSkills = new HashSet<>(1);
 | |
| 	
 | |
| 	/**
 | |
| 	 * Constructor for L2SkillLearn.
 | |
| 	 * @param set the set with the L2SkillLearn data.
 | |
| 	 */
 | |
| 	public L2SkillLearn(StatsSet set)
 | |
| 	{
 | |
| 		_skillName = set.getString("skillName");
 | |
| 		_skillId = set.getInt("skillId");
 | |
| 		_skillLvl = set.getInt("skillLvl");
 | |
| 		_getLevel = set.getInt("getLevel");
 | |
| 		_getDualClassLevel = set.getInt("getDualClassLevel", 0);
 | |
| 		_autoGet = set.getBoolean("autoGet", false);
 | |
| 		_levelUpSp = set.getInt("levelUpSp", 0);
 | |
| 		_residenceSkill = set.getBoolean("residenceSkill", false);
 | |
| 		_learnedByNpc = set.getBoolean("learnedByNpc", false);
 | |
| 		_learnedByFS = set.getBoolean("learnedByFS", false);
 | |
| 	}
 | |
| 	
 | |
| 	/**
 | |
| 	 * @return the name of this skill.
 | |
| 	 */
 | |
| 	public String getName()
 | |
| 	{
 | |
| 		return _skillName;
 | |
| 	}
 | |
| 	
 | |
| 	/**
 | |
| 	 * @return the ID of this skill.
 | |
| 	 */
 | |
| 	public int getSkillId()
 | |
| 	{
 | |
| 		return _skillId;
 | |
| 	}
 | |
| 	
 | |
| 	/**
 | |
| 	 * @return the level of this skill.
 | |
| 	 */
 | |
| 	public int getSkillLevel()
 | |
| 	{
 | |
| 		return _skillLvl;
 | |
| 	}
 | |
| 	
 | |
| 	/**
 | |
| 	 * @return the minimum level required to acquire this skill.
 | |
| 	 */
 | |
| 	public int getGetLevel()
 | |
| 	{
 | |
| 		return _getLevel;
 | |
| 	}
 | |
| 	
 | |
| 	/**
 | |
| 	 * @return the minimum dual class level required to acquire this skill.
 | |
| 	 */
 | |
| 	public int getDualClassLevel()
 | |
| 	{
 | |
| 		return _getDualClassLevel;
 | |
| 	}
 | |
| 	
 | |
| 	/**
 | |
| 	 * @return the amount of SP/Clan Reputation to acquire this skill.
 | |
| 	 */
 | |
| 	public int getLevelUpSp()
 | |
| 	{
 | |
| 		return _levelUpSp;
 | |
| 	}
 | |
| 	
 | |
| 	/**
 | |
| 	 * @return {@code true} if the skill is auto-get, this skill is automatically delivered.
 | |
| 	 */
 | |
| 	public boolean isAutoGet()
 | |
| 	{
 | |
| 		return _autoGet;
 | |
| 	}
 | |
| 	
 | |
| 	/**
 | |
| 	 * @return the list with the item holders required to acquire this skill.
 | |
| 	 */
 | |
| 	public List<ItemHolder> getRequiredItems()
 | |
| 	{
 | |
| 		return _requiredItems;
 | |
| 	}
 | |
| 	
 | |
| 	/**
 | |
| 	 * Adds a required item holder to learn this skill.
 | |
| 	 * @param item the required item holder.
 | |
| 	 */
 | |
| 	public void addRequiredItem(ItemHolder item)
 | |
| 	{
 | |
| 		_requiredItems.add(item);
 | |
| 	}
 | |
| 	
 | |
| 	/**
 | |
| 	 * @return a list with the races that can acquire this skill.
 | |
| 	 */
 | |
| 	public List<Race> getRaces()
 | |
| 	{
 | |
| 		return _races;
 | |
| 	}
 | |
| 	
 | |
| 	/**
 | |
| 	 * Adds a required race to learn this skill.
 | |
| 	 * @param race the required race.
 | |
| 	 */
 | |
| 	public void addRace(Race race)
 | |
| 	{
 | |
| 		_races.add(race);
 | |
| 	}
 | |
| 	
 | |
| 	/**
 | |
| 	 * @return the list of skill holders required to acquire this skill.
 | |
| 	 */
 | |
| 	public List<SkillHolder> getPreReqSkills()
 | |
| 	{
 | |
| 		return _preReqSkills;
 | |
| 	}
 | |
| 	
 | |
| 	/**
 | |
| 	 * Adds a required skill holder to learn this skill.
 | |
| 	 * @param skill the required skill holder.
 | |
| 	 */
 | |
| 	public void addPreReqSkill(SkillHolder skill)
 | |
| 	{
 | |
| 		_preReqSkills.add(skill);
 | |
| 	}
 | |
| 	
 | |
| 	/**
 | |
| 	 * @return the social class required to get this skill.
 | |
| 	 */
 | |
| 	public SocialClass getSocialClass()
 | |
| 	{
 | |
| 		return _socialClass;
 | |
| 	}
 | |
| 	
 | |
| 	/**
 | |
| 	 * Sets the social class if hasn't been set before.
 | |
| 	 * @param socialClass the social class to set.
 | |
| 	 */
 | |
| 	public void setSocialClass(SocialClass socialClass)
 | |
| 	{
 | |
| 		if (_socialClass == null)
 | |
| 		{
 | |
| 			_socialClass = socialClass;
 | |
| 		}
 | |
| 	}
 | |
| 	
 | |
| 	/**
 | |
| 	 * @return {@code true} if this skill is a Residence skill.
 | |
| 	 */
 | |
| 	public boolean isResidencialSkill()
 | |
| 	{
 | |
| 		return _residenceSkill;
 | |
| 	}
 | |
| 	
 | |
| 	/**
 | |
| 	 * @return a list with the Ids where this skill is available.
 | |
| 	 */
 | |
| 	public List<Integer> getResidenceIds()
 | |
| 	{
 | |
| 		return _residenceIds;
 | |
| 	}
 | |
| 	
 | |
| 	/**
 | |
| 	 * Adds a required residence Id.
 | |
| 	 * @param id the residence Id to add.
 | |
| 	 */
 | |
| 	public void addResidenceId(Integer id)
 | |
| 	{
 | |
| 		_residenceIds.add(id);
 | |
| 	}
 | |
| 	
 | |
| 	/**
 | |
| 	 * @return {@code true} if this skill is learned from Npc.
 | |
| 	 */
 | |
| 	public boolean isLearnedByNpc()
 | |
| 	{
 | |
| 		return _learnedByNpc;
 | |
| 	}
 | |
| 	
 | |
| 	/**
 | |
| 	 * @return {@code true} if this skill is learned by Forgotten Scroll.
 | |
| 	 */
 | |
| 	public boolean isLearnedByFS()
 | |
| 	{
 | |
| 		return _learnedByFS;
 | |
| 	}
 | |
| 	
 | |
| 	public void addRemoveSkills(int skillId)
 | |
| 	{
 | |
| 		_removeSkills.add(skillId);
 | |
| 	}
 | |
| 	
 | |
| 	public Set<Integer> getRemoveSkills()
 | |
| 	{
 | |
| 		return _removeSkills;
 | |
| 	}
 | |
| 	
 | |
| 	/**
 | |
| 	 * Used for AltGameSkillLearn mod.<br>
 | |
| 	 * If the alternative skill learn system is enabled and the player is learning a skill from a different class apply a fee.<br>
 | |
| 	 * If the player is learning a skill from other class type (mage learning warrior skills or vice versa) the fee is higher.
 | |
| 	 * @param playerClass the player class Id.
 | |
| 	 * @param learningClass the skill learning player class Id.
 | |
| 	 * @return the amount of SP required to acquire this skill, by calculating the cost for the alternative skill learn system.
 | |
| 	 */
 | |
| 	public int getCalculatedLevelUpSp(ClassId playerClass, ClassId learningClass)
 | |
| 	{
 | |
| 		if ((playerClass == null) || (learningClass == null))
 | |
| 		{
 | |
| 			return _levelUpSp;
 | |
| 		}
 | |
| 		
 | |
| 		int levelUpSp = _levelUpSp;
 | |
| 		// If the alternative skill learn system is enabled and the player is learning a skill from a different class apply a fee.
 | |
| 		if (Config.ALT_GAME_SKILL_LEARN && (playerClass != learningClass))
 | |
| 		{
 | |
| 			// If the player is learning a skill from other class type (mage learning warrior skills or vice versa) the fee is higher.
 | |
| 			if (playerClass.isMage() != learningClass.isMage())
 | |
| 			{
 | |
| 				levelUpSp *= 3;
 | |
| 			}
 | |
| 			else
 | |
| 			{
 | |
| 				levelUpSp *= 2;
 | |
| 			}
 | |
| 		}
 | |
| 		return levelUpSp;
 | |
| 	}
 | |
| }
 |