273 lines
6.7 KiB
Java
273 lines
6.7 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 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");
|
|
_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 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;
|
|
}
|
|
}
|