/*
* 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 com.l2jserver.gameserver.templates.item;
import java.util.ArrayList;
import com.l2jserver.gameserver.datatables.SkillTable;
import com.l2jserver.gameserver.model.L2ItemInstance;
import com.l2jserver.gameserver.model.L2Skill;
import com.l2jserver.gameserver.model.actor.L2Character;
import com.l2jserver.gameserver.skills.Env;
import com.l2jserver.gameserver.skills.SkillHolder;
import com.l2jserver.gameserver.skills.funcs.Func;
import com.l2jserver.gameserver.skills.funcs.FuncTemplate;
import com.l2jserver.gameserver.templates.StatsSet;
import com.l2jserver.util.StringUtil;
/**
* This class is dedicated to the management of armors.
*
* @version $Revision: 1.2.2.1.2.6 $ $Date: 2005/03/27 15:30:10 $
*/
public final class L2Armor extends L2Item
{
private final int _avoidModifier;
private final int _pDef;
private final int _mDef;
private final int _mpBonus;
private final int _hpBonus;
private L2Skill _enchant4Skill = null; // skill that activates when armor is enchanted +4
// private final String[] _skill;
private SkillHolder[] _skillHolder;
/**
* Constructor for Armor.
* Variables filled :
*
_avoidModifier
* _pDef & _mDef
* _mpBonus & _hpBonus
* enchant4Skill
* @param type : L2ArmorType designating the type of armor
* @param set : StatsSet designating the set of couples (key,value) caracterizing the armor
* @see L2Item constructor
*/
public L2Armor(L2ArmorType type, StatsSet set)
{
super(type, set);
_avoidModifier = set.getInteger("avoid_modify");
_pDef = set.getInteger("p_def");
_mDef = set.getInteger("m_def");
_mpBonus = set.getInteger("mp_bonus", 0);
_hpBonus = set.getInteger("hp_bonus", 0);
String[] skill = set.getString("enchant4_skill").split("-");
if (skill != null && skill.length == 2)
{
int skill_Id = Integer.parseInt(skill[0]);
int skillLvl = Integer.parseInt(skill[1]);
if (skill_Id > 0 && skillLvl > 0)
_enchant4Skill = SkillTable.getInstance().getInfo(skill_Id, skillLvl);
}
String[] skills = set.getString("skill").split(";");
_skillHolder = new SkillHolder[skills.length];
byte iterator = 0;
for(String st : skills)
{
String[] info = st.split("-");
if(info == null || info.length != 2)
continue;
int id = 0;
int level = 0;
try
{
id = Integer.parseInt(info[0]);
level = Integer.parseInt(info[1]);
}
catch(Exception nfe)
{
// Incorrect syntax, dont add new skill
_log.info(StringUtil.concat("> Couldnt parse " , st, " in armor skills!"));
continue;
}
// If skill can exist, add it
if(id > 0 && level > 0)
{
_skillHolder[iterator] = new SkillHolder(id, level);
iterator++;
}
}
}
/**
* Returns the type of the armor.
* @return L2ArmorType
*/
@Override
public L2ArmorType getItemType()
{
return (L2ArmorType)super._type;
}
/**
* Returns the ID of the item after applying the mask.
* @return int : ID of the item
*/
@Override
public final int getItemMask()
{
return getItemType().mask();
}
/**
* Returns the magical defense of the armor
* @return int : value of the magic defense
*/
public final int getMDef()
{
return _mDef;
}
/**
* Returns the physical defense of the armor
* @return int : value of the physical defense
*/
public final int getPDef()
{
return _pDef;
}
/**
* Returns avoid modifier given by the armor
* @return int : avoid modifier
*/
public final int getAvoidModifier()
{
return _avoidModifier;
}
/**
* Returns magical bonus given by the armor
* @return int : value of the magical bonus
*/
public final int getMpBonus()
{
return _mpBonus;
}
/**
* Returns physical bonus given by the armor
* @return int : value of the physical bonus
*/
public final int getHpBonus()
{
return _hpBonus;
}
/**
* Returns skill that player get when has equiped armor +4 or more
* @return
*/
public L2Skill getEnchant4Skill()
{
return _enchant4Skill;
}
/**
* Returns passive skill linked to that armor
* @return
*/
public SkillHolder[] getSkills()
{
return _skillHolder;
}
/**
* Returns array of Func objects containing the list of functions used by the armor
* @param instance : L2ItemInstance pointing out the armor
* @param player : L2Character pointing out the player
* @return Func[] : array of functions
*/
@Override
public Func[] getStatFuncs(L2ItemInstance instance, L2Character player)
{
if (_funcTemplates == null || _funcTemplates.length == 0)
return _emptyFunctionSet;
ArrayList funcs = new ArrayList(_funcTemplates.length);
Env env = new Env();
env.player = player;
env.item = instance;
Func f;
for (FuncTemplate t : _funcTemplates) {
f = t.getFunc(env, instance);
if (f != null)
funcs.add(f);
}
return funcs.toArray(new Func[funcs.size()]);
}
}