/*
* 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.actor.templates;
import java.util.Arrays;
import java.util.Collections;
import java.util.Map;
import com.l2jserver.gameserver.enums.Race;
import com.l2jserver.gameserver.model.StatsSet;
import com.l2jserver.gameserver.model.events.ListenersContainer;
import com.l2jserver.gameserver.model.items.type.WeaponType;
import com.l2jserver.gameserver.model.skills.Skill;
import com.l2jserver.gameserver.model.stats.MoveType;
/**
* Character template.
* @author Zoey76
*/
public class L2CharTemplate extends ListenersContainer
{
// BaseStats
private int _baseSTR;
private int _baseCON;
private int _baseDEX;
private int _baseINT;
private int _baseWIT;
private int _baseMEN;
private int _baseLUC;
private int _baseCHA;
private float _baseHpMax;
private float _baseCpMax;
private float _baseMpMax;
private float _baseHpReg;
private float _baseMpReg;
private int _basePAtk;
private int _baseMAtk;
private int _basePDef;
private int _baseMDef;
private int _basePAtkSpd;
private int _baseMAtkSpd;
private int _baseAttackRange;
private int _randomDamage;
private WeaponType _baseAttackType;
private int _baseShldDef;
private int _baseShldRate;
private int _baseCritRate;
private int _baseMCritRate;
// SpecialStats
private int _baseBreath;
private int _baseFire;
private int _baseWind;
private int _baseWater;
private int _baseEarth;
private int _baseHoly;
private int _baseDark;
private double _baseFireRes;
private double _baseWindRes;
private double _baseWaterRes;
private double _baseEarthRes;
private double _baseHolyRes;
private double _baseDarkRes;
private double _baseElementRes;
/** For client info use {@link #_fCollisionRadius} */
private int _collisionRadius;
/** For client info use {@link #_fCollisionHeight} */
private int _collisionHeight;
private double _fCollisionRadius;
private double _fCollisionHeight;
private final double[] _moveType = new double[MoveType.values().length];
/** The creature's race. */
private Race _race;
public L2CharTemplate(StatsSet set)
{
set(set);
}
public void set(StatsSet set)
{
// Base stats
_baseSTR = set.getInt("baseSTR", 0);
_baseCON = set.getInt("baseCON", 0);
_baseDEX = set.getInt("baseDEX", 0);
_baseINT = set.getInt("baseINT", 0);
_baseWIT = set.getInt("baseWIT", 0);
_baseMEN = set.getInt("baseMEN", 0);
_baseLUC = set.getInt("baseLUC", 0);
_baseCHA = set.getInt("baseCHA", 0);
_baseHpMax = set.getFloat("baseHpMax", 0);
_baseCpMax = set.getFloat("baseCpMax", 0);
_baseMpMax = set.getFloat("baseMpMax", 0);
_baseHpReg = set.getFloat("baseHpReg", 0);
_baseMpReg = set.getFloat("baseMpReg", 0);
_basePAtk = set.getInt("basePAtk", 0);
_baseMAtk = set.getInt("baseMAtk", 0);
_basePDef = set.getInt("basePDef", 0);
_baseMDef = set.getInt("baseMDef", 0);
_basePAtkSpd = set.getInt("basePAtkSpd", 300);
_baseMAtkSpd = set.getInt("baseMAtkSpd", 333);
_baseShldDef = set.getInt("baseShldDef", 0);
_baseAttackRange = set.getInt("baseAtkRange", 40);
_randomDamage = set.getInt("baseRndDam", 0);
_baseAttackType = set.getEnum("baseAtkType", WeaponType.class, WeaponType.FIST);
_baseShldRate = set.getInt("baseShldRate", 0);
_baseCritRate = set.getInt("baseCritRate", 4);
_baseMCritRate = set.getInt("baseMCritRate", 0);
// SpecialStats
_baseBreath = set.getInt("baseBreath", 100);
_baseFire = set.getInt("baseFire", 0);
_baseWind = set.getInt("baseWind", 0);
_baseWater = set.getInt("baseWater", 0);
_baseEarth = set.getInt("baseEarth", 0);
_baseHoly = set.getInt("baseHoly", 0);
_baseDark = set.getInt("baseDark", 0);
_baseFireRes = set.getInt("baseFireRes", 0);
_baseWindRes = set.getInt("baseWindRes", 0);
_baseWaterRes = set.getInt("baseWaterRes", 0);
_baseEarthRes = set.getInt("baseEarthRes", 0);
_baseHolyRes = set.getInt("baseHolyRes", 0);
_baseDarkRes = set.getInt("baseDarkRes", 0);
_baseElementRes = set.getInt("baseElementRes", 0);
// Geometry
_fCollisionHeight = set.getDouble("collision_height", 0);
_fCollisionRadius = set.getDouble("collision_radius", 0);
_collisionRadius = (int) _fCollisionRadius;
_collisionHeight = (int) _fCollisionHeight;
// speed.
Arrays.fill(_moveType, 1);
setBaseMoveSpeed(MoveType.RUN, set.getDouble("baseRunSpd", 120));
setBaseMoveSpeed(MoveType.WALK, set.getDouble("baseWalkSpd", 50));
setBaseMoveSpeed(MoveType.FAST_SWIM, set.getDouble("baseSwimRunSpd", getBaseMoveSpeed(MoveType.RUN)));
setBaseMoveSpeed(MoveType.SLOW_SWIM, set.getDouble("baseSwimWalkSpd", getBaseMoveSpeed(MoveType.WALK)));
setBaseMoveSpeed(MoveType.FAST_FLY, set.getDouble("baseFlyRunSpd", getBaseMoveSpeed(MoveType.RUN)));
setBaseMoveSpeed(MoveType.SLOW_FLY, set.getDouble("baseFlyWalkSpd", getBaseMoveSpeed(MoveType.WALK)));
}
/**
* @return the baseHpMax
*/
public float getBaseHpMax()
{
return _baseHpMax;
}
/**
* @return the _baseFire
*/
public int getBaseFire()
{
return _baseFire;
}
/**
* @return the _baseWind
*/
public int getBaseWind()
{
return _baseWind;
}
/**
* @return the _baseWater
*/
public int getBaseWater()
{
return _baseWater;
}
/**
* @return the _baseEarth
*/
public int getBaseEarth()
{
return _baseEarth;
}
/**
* @return the _baseHoly
*/
public int getBaseHoly()
{
return _baseHoly;
}
/**
* @return the _baseDark
*/
public int getBaseDark()
{
return _baseDark;
}
/**
* @return the _baseFireRes
*/
public double getBaseFireRes()
{
return _baseFireRes;
}
/**
* @return the _baseWindRes
*/
public double getBaseWindRes()
{
return _baseWindRes;
}
/**
* @return the _baseWaterRes
*/
public double getBaseWaterRes()
{
return _baseWaterRes;
}
/**
* @return the _baseEarthRes
*/
public double getBaseEarthRes()
{
return _baseEarthRes;
}
/**
* @return the _baseHolyRes
*/
public double getBaseHolyRes()
{
return _baseHolyRes;
}
/**
* @return the _baseDarkRes
*/
public double getBaseDarkRes()
{
return _baseDarkRes;
}
/**
* @return the _baseElementRes
*/
public double getBaseElementRes()
{
return _baseElementRes;
}
/**
* @return the baseSTR
*/
public int getBaseSTR()
{
return _baseSTR;
}
/**
* @return the baseCON
*/
public int getBaseCON()
{
return _baseCON;
}
/**
* @return the baseDEX
*/
public int getBaseDEX()
{
return _baseDEX;
}
/**
* @return the baseINT
*/
public int getBaseINT()
{
return _baseINT;
}
/**
* @return the baseWIT
*/
public int getBaseWIT()
{
return _baseWIT;
}
/**
* @return the baseMEN
*/
public int getBaseMEN()
{
return _baseMEN;
}
/**
* @return the baseLUC
*/
public int getBaseLUC()
{
return _baseLUC;
}
/**
* @return the baseCHA
*/
public int getBaseCHA()
{
return _baseCHA;
}
/**
* @return the baseCpMax
*/
public float getBaseCpMax()
{
return _baseCpMax;
}
/**
* @return the baseMpMax
*/
public float getBaseMpMax()
{
return _baseMpMax;
}
/**
* @return the baseHpReg
*/
public float getBaseHpReg()
{
return _baseHpReg;
}
/**
* @return the baseMpReg
*/
public float getBaseMpReg()
{
return _baseMpReg;
}
/**
* @return the basePAtk
*/
public int getBasePAtk()
{
return _basePAtk;
}
/**
* @return the baseMAtk
*/
public int getBaseMAtk()
{
return _baseMAtk;
}
/**
* @return the basePDef
*/
public int getBasePDef()
{
return _basePDef;
}
/**
* @return the baseMDef
*/
public int getBaseMDef()
{
return _baseMDef;
}
/**
* @return the basePAtkSpd
*/
public int getBasePAtkSpd()
{
return _basePAtkSpd;
}
/**
* @return the baseMAtkSpd
*/
public int getBaseMAtkSpd()
{
return _baseMAtkSpd;
}
/**
* @return the random damage
*/
public int getRandomDamage()
{
return _randomDamage;
}
/**
* @return the baseShldDef
*/
public int getBaseShldDef()
{
return _baseShldDef;
}
/**
* @return the baseShldRate
*/
public int getBaseShldRate()
{
return _baseShldRate;
}
/**
* @return the baseCritRate
*/
public int getBaseCritRate()
{
return _baseCritRate;
}
/**
* @return the baseMCritRate
*/
public int getBaseMCritRate()
{
return _baseMCritRate;
}
public void setBaseMoveSpeed(MoveType type, double val)
{
_moveType[type.ordinal()] = val;
}
public double getBaseMoveSpeed(MoveType mt)
{
return _moveType[mt.ordinal()];
}
/**
* @return the baseBreath
*/
public int getBaseBreath()
{
return _baseBreath;
}
/**
* @return the collisionRadius
*/
public int getCollisionRadius()
{
return _collisionRadius;
}
/**
* @return the collisionHeight
*/
public int getCollisionHeight()
{
return _collisionHeight;
}
/**
* @return the fCollisionRadius
*/
public double getfCollisionRadius()
{
return _fCollisionRadius;
}
/**
* @return the fCollisionHeight
*/
public double getfCollisionHeight()
{
return _fCollisionHeight;
}
/**
* @param baseFire the baseFire to set
*/
public void setBaseFire(int baseFire)
{
_baseFire = baseFire;
}
/**
* @param baseWater the baseWater to set
*/
public void setBaseWater(int baseWater)
{
_baseWater = baseWater;
}
/**
* @param baseEarth the baseEarth to set
*/
public void setBaseEarth(int baseEarth)
{
_baseEarth = baseEarth;
}
/**
* @param baseWind the baseWind to set
*/
public void setBaseWind(int baseWind)
{
_baseWind = baseWind;
}
/**
* @param baseHoly the baseHoly to set
*/
public void setBaseHoly(int baseHoly)
{
_baseHoly = baseHoly;
}
/**
* @param baseDark the baseDark to set
*/
public void setBaseDark(int baseDark)
{
_baseDark = baseDark;
}
/**
* @param baseFireRes the baseFireRes to set
*/
public void setBaseFireRes(double baseFireRes)
{
_baseFireRes = baseFireRes;
}
/**
* @param baseWaterRes the baseWaterRes to set
*/
public void setBaseWaterRes(double baseWaterRes)
{
_baseWaterRes = baseWaterRes;
}
/**
* @param baseEarthRes the baseEarthRes to set
*/
public void setBaseEarthRes(double baseEarthRes)
{
_baseEarthRes = baseEarthRes;
}
/**
* @param baseWindRes the baseWindRes to set
*/
public void setBaseWindRes(double baseWindRes)
{
_baseWindRes = baseWindRes;
}
/**
* @param baseHolyRes the baseHolyRes to set
*/
public void setBaseHolyRes(double baseHolyRes)
{
_baseHolyRes = baseHolyRes;
}
/**
* @param baseDarkRes the baseDarkRes to set
*/
public void setBaseDarkRes(double baseDarkRes)
{
_baseDarkRes = baseDarkRes;
}
/**
* @param baseElementRes
*/
public void setBaseElementRes(double baseElementRes)
{
_baseElementRes = baseElementRes;
}
/**
* @return the base attack type (Sword, Fist, Blunt, etc..)
*/
public WeaponType getBaseAttackType()
{
return _baseAttackType;
}
/**
* Sets base attack type.
* @param type
*/
public void setBaseAttackType(WeaponType type)
{
_baseAttackType = type;
}
/**
* @return the baseAtkRange
*/
public int getBaseAttackRange()
{
return _baseAttackRange;
}
/**
* Sets base attack range.
* @param val
*/
public void setBaseAttackRange(int val)
{
_baseAttackRange = val;
}
/**
* Overridden in L2NpcTemplate
* @return the characters skills
*/
public Map<Integer, Skill> getSkills()
{
return Collections.emptyMap();
}
/**
* Gets the craeture's race.
* @return the race
*/
public Race getRace()
{
return _race;
}
/**
* Sets the creature's race.
* @param race the race
*/
public void setRace(Race race)
{
_race = race;
}
}