/*
* 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.HashMap;
import java.util.List;
import java.util.Map;
import com.l2jserver.gameserver.data.xml.impl.ExperienceData;
import com.l2jserver.gameserver.model.Location;
import com.l2jserver.gameserver.model.StatsSet;
import com.l2jserver.gameserver.model.base.ClassId;
import com.l2jserver.gameserver.model.itemcontainer.Inventory;
import com.l2jserver.util.Rnd;
/**
* @author mkizub, Zoey76
*/
public class L2PcTemplate extends L2CharTemplate
{
private final ClassId _classId;
private final float[] _baseHp;
private final float[] _baseMp;
private final float[] _baseCp;
private final double[] _baseHpReg;
private final double[] _baseMpReg;
private final double[] _baseCpReg;
private final double _fCollisionHeightFemale;
private final double _fCollisionRadiusFemale;
private final int _baseSafeFallHeight;
private final List<Location> _creationPoints;
private final Map<Integer, Integer> _baseSlotDef;
public L2PcTemplate(StatsSet set, List<Location> creationPoints)
{
super(set);
_classId = ClassId.getClassId(set.getInt("classId"));
setRace(_classId.getRace());
_baseHp = new float[ExperienceData.getInstance().getMaxLevel()];
_baseMp = new float[ExperienceData.getInstance().getMaxLevel()];
_baseCp = new float[ExperienceData.getInstance().getMaxLevel()];
_baseHpReg = new double[ExperienceData.getInstance().getMaxLevel()];
_baseMpReg = new double[ExperienceData.getInstance().getMaxLevel()];
_baseCpReg = new double[ExperienceData.getInstance().getMaxLevel()];
_baseSlotDef = new HashMap<>(12);
_baseSlotDef.put(Inventory.PAPERDOLL_CHEST, set.getInt("basePDefchest", 0));
_baseSlotDef.put(Inventory.PAPERDOLL_LEGS, set.getInt("basePDeflegs", 0));
_baseSlotDef.put(Inventory.PAPERDOLL_HEAD, set.getInt("basePDefhead", 0));
_baseSlotDef.put(Inventory.PAPERDOLL_FEET, set.getInt("basePDeffeet", 0));
_baseSlotDef.put(Inventory.PAPERDOLL_GLOVES, set.getInt("basePDefgloves", 0));
_baseSlotDef.put(Inventory.PAPERDOLL_UNDER, set.getInt("basePDefunderwear", 0));
_baseSlotDef.put(Inventory.PAPERDOLL_CLOAK, set.getInt("basePDefcloak", 0));
_baseSlotDef.put(Inventory.PAPERDOLL_REAR, set.getInt("baseMDefrear", 0));
_baseSlotDef.put(Inventory.PAPERDOLL_LEAR, set.getInt("baseMDeflear", 0));
_baseSlotDef.put(Inventory.PAPERDOLL_RFINGER, set.getInt("baseMDefrfinger", 0));
_baseSlotDef.put(Inventory.PAPERDOLL_LFINGER, set.getInt("baseMDefrfinger", 0));
_baseSlotDef.put(Inventory.PAPERDOLL_NECK, set.getInt("baseMDefneck", 0));
_fCollisionRadiusFemale = set.getDouble("collisionFemaleradius");
_fCollisionHeightFemale = set.getDouble("collisionFemaleheight");
_baseSafeFallHeight = set.getInt("baseSafeFall", 333);
_creationPoints = creationPoints;
}
/**
* @return the template class Id.
*/
public ClassId getClassId()
{
return _classId;
}
/**
* @return random Location of created character spawn.
*/
public Location getCreationPoint()
{
return _creationPoints.get(Rnd.get(_creationPoints.size()));
}
/**
* Sets the value of level upgain parameter.
* @param paramName name of parameter
* @param level corresponding character level
* @param val value of parameter
*/
public void setUpgainValue(String paramName, int level, double val)
{
switch (paramName)
{
case "hp":
{
_baseHp[level] = (float) val;
break;
}
case "mp":
{
_baseMp[level] = (float) val;
break;
}
case "cp":
{
_baseCp[level] = (float) val;
break;
}
case "hpRegen":
{
_baseHpReg[level] = val;
break;
}
case "mpRegen":
{
_baseMpReg[level] = val;
break;
}
case "cpRegen":
{
_baseCpReg[level] = val;
break;
}
}
}
/**
* @param level character level to return value
* @return the baseHpMax for given character level
*/
public float getBaseHpMax(int level)
{
return _baseHp[level];
}
/**
* @param level character level to return value
* @return the baseMpMax for given character level
*/
public float getBaseMpMax(int level)
{
return _baseMp[level];
}
/**
* @param level character level to return value
* @return the baseCpMax for given character level
*/
public float getBaseCpMax(int level)
{
return _baseCp[level];
}
/**
* @param level character level to return value
* @return the base HP Regeneration for given character level
*/
public double getBaseHpRegen(int level)
{
return _baseHpReg[level];
}
/**
* @param level character level to return value
* @return the base MP Regeneration for given character level
*/
public double getBaseMpRegen(int level)
{
return _baseMpReg[level];
}
/**
* @param level character level to return value
* @return the base HP Regeneration for given character level
*/
public double getBaseCpRegen(int level)
{
return _baseCpReg[level];
}
/**
* @param slotId id of inventory slot to return value
* @return defence value of charactert for EMPTY given slot
*/
public int getBaseDefBySlot(int slotId)
{
return _baseSlotDef.containsKey(slotId) ? _baseSlotDef.get(slotId) : 0;
}
/**
* @return the template collision height for female characters.
*/
public double getFCollisionHeightFemale()
{
return _fCollisionHeightFemale;
}
/**
* @return the template collision radius for female characters.
*/
public double getFCollisionRadiusFemale()
{
return _fCollisionRadiusFemale;
}
/**
* @return the safe fall height.
*/
public int getSafeFallHeight()
{
return _baseSafeFallHeight;
}
}