|
@@ -18,13 +18,20 @@
|
|
|
*/
|
|
|
package com.l2jserver.gameserver.model.actor.templates;
|
|
|
|
|
|
+import java.util.HashMap;
|
|
|
import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
|
|
|
+import com.l2jserver.gameserver.datatables.ExperienceTable;
|
|
|
import com.l2jserver.gameserver.datatables.InitialEquipmentData;
|
|
|
+import com.l2jserver.gameserver.model.Location;
|
|
|
import com.l2jserver.gameserver.model.StatsSet;
|
|
|
import com.l2jserver.gameserver.model.base.ClassId;
|
|
|
import com.l2jserver.gameserver.model.base.Race;
|
|
|
+import com.l2jserver.gameserver.model.itemcontainer.Inventory;
|
|
|
import com.l2jserver.gameserver.model.items.PcItemTemplate;
|
|
|
+import com.l2jserver.gameserver.model.stats.MoveType;
|
|
|
+import com.l2jserver.util.Rnd;
|
|
|
|
|
|
/**
|
|
|
* @author mkizub, Zoey76
|
|
@@ -32,57 +39,61 @@ import com.l2jserver.gameserver.model.items.PcItemTemplate;
|
|
|
public class L2PcTemplate extends L2CharTemplate
|
|
|
{
|
|
|
private final ClassId _classId;
|
|
|
- private final Race _race;
|
|
|
|
|
|
- private final int _spawnX;
|
|
|
- private final int _spawnY;
|
|
|
- private final int _spawnZ;
|
|
|
+ private final float[] _baseHp;
|
|
|
+ private final float[] _baseMp;
|
|
|
+ private final float[] _baseCp;
|
|
|
|
|
|
- private final int _classBaseLevel;
|
|
|
- private final float _lvlHpAdd;
|
|
|
- private final float _lvlHpMod;
|
|
|
- private final float _lvlCpAdd;
|
|
|
- private final float _lvlCpMod;
|
|
|
- private final float _lvlMpAdd;
|
|
|
- private final float _lvlMpMod;
|
|
|
-
|
|
|
- private final double _fCollisionHeightMale;
|
|
|
- private final double _fCollisionRadiusMale;
|
|
|
+ private final double[] _baseHpReg;
|
|
|
+ private final double[] _baseMpReg;
|
|
|
+ private final double[] _baseCpReg;
|
|
|
|
|
|
private final double _fCollisionHeightFemale;
|
|
|
private final double _fCollisionRadiusFemale;
|
|
|
|
|
|
- private final int _fallHeight;
|
|
|
+ private final int _baseSafeFallHeight;
|
|
|
+ private final int _baseSlowSwimSpd;
|
|
|
+ private final int _baseFastSwimSpd;
|
|
|
|
|
|
private final List<PcItemTemplate> _initialEquipment;
|
|
|
+ private final List<Location> _creationPoints;
|
|
|
+ private final Map<Integer, Integer> _baseSlotDef;
|
|
|
|
|
|
- public L2PcTemplate(StatsSet set)
|
|
|
+ public L2PcTemplate(StatsSet set, List<Location> creationPoints)
|
|
|
{
|
|
|
super(set);
|
|
|
_classId = ClassId.getClassId(set.getInteger("classId"));
|
|
|
- _race = Race.values()[set.getInteger("raceId")];
|
|
|
-
|
|
|
- _spawnX = set.getInteger("spawnX");
|
|
|
- _spawnY = set.getInteger("spawnY");
|
|
|
- _spawnZ = set.getInteger("spawnZ");
|
|
|
|
|
|
- _classBaseLevel = set.getInteger("classBaseLevel");
|
|
|
- _lvlHpAdd = set.getFloat("lvlHpAdd");
|
|
|
- _lvlHpMod = set.getFloat("lvlHpMod");
|
|
|
- _lvlCpAdd = set.getFloat("lvlCpAdd");
|
|
|
- _lvlCpMod = set.getFloat("lvlCpMod");
|
|
|
- _lvlMpAdd = set.getFloat("lvlMpAdd");
|
|
|
- _lvlMpMod = set.getFloat("lvlMpMod");
|
|
|
+ _baseHp = new float[ExperienceTable.getInstance().getMaxLevel()];
|
|
|
+ _baseMp = new float[ExperienceTable.getInstance().getMaxLevel()];
|
|
|
+ _baseCp = new float[ExperienceTable.getInstance().getMaxLevel()];
|
|
|
+ _baseHpReg = new double[ExperienceTable.getInstance().getMaxLevel()];
|
|
|
+ _baseMpReg = new double[ExperienceTable.getInstance().getMaxLevel()];
|
|
|
+ _baseCpReg = new double[ExperienceTable.getInstance().getMaxLevel()];
|
|
|
|
|
|
- _fCollisionRadiusMale = set.getDouble("collision_radius");
|
|
|
- _fCollisionHeightMale = set.getDouble("collision_height");
|
|
|
+ _baseSlotDef = new HashMap<>(12);
|
|
|
+ _baseSlotDef.put(Inventory.PAPERDOLL_CHEST, set.getInteger("basePDefchest", 0));
|
|
|
+ _baseSlotDef.put(Inventory.PAPERDOLL_LEGS, set.getInteger("basePDeflegs", 0));
|
|
|
+ _baseSlotDef.put(Inventory.PAPERDOLL_HEAD, set.getInteger("basePDefhead", 0));
|
|
|
+ _baseSlotDef.put(Inventory.PAPERDOLL_FEET, set.getInteger("basePDeffeet", 0));
|
|
|
+ _baseSlotDef.put(Inventory.PAPERDOLL_GLOVES, set.getInteger("basePDefgloves", 0));
|
|
|
+ _baseSlotDef.put(Inventory.PAPERDOLL_UNDER, set.getInteger("basePDefunderwear", 0));
|
|
|
+ _baseSlotDef.put(Inventory.PAPERDOLL_CLOAK, set.getInteger("basePDefcloak", 0));
|
|
|
+ _baseSlotDef.put(Inventory.PAPERDOLL_REAR, set.getInteger("baseMDefrear", 0));
|
|
|
+ _baseSlotDef.put(Inventory.PAPERDOLL_LEAR, set.getInteger("baseMDeflear", 0));
|
|
|
+ _baseSlotDef.put(Inventory.PAPERDOLL_RFINGER, set.getInteger("baseMDefrfinger", 0));
|
|
|
+ _baseSlotDef.put(Inventory.PAPERDOLL_LFINGER, set.getInteger("baseMDefrfinger", 0));
|
|
|
+ _baseSlotDef.put(Inventory.PAPERDOLL_NECK, set.getInteger("baseMDefneck", 0));
|
|
|
|
|
|
- _fCollisionRadiusFemale = set.getDouble("collision_radius_female");
|
|
|
- _fCollisionHeightFemale = set.getDouble("collision_height_female");
|
|
|
+ _fCollisionRadiusFemale = set.getDouble("collisionFemaleradius");
|
|
|
+ _fCollisionHeightFemale = set.getDouble("collisionFemaleheight");
|
|
|
|
|
|
- _fallHeight = 333; // TODO: Unhardcode it.
|
|
|
+ _baseSafeFallHeight = set.getInteger("baseSafeFall", 333);
|
|
|
+ _baseSlowSwimSpd = set.getInteger("baseMoveSpdslowSwim", (super.getBaseMoveSpd(MoveType.WALK) / 2));
|
|
|
+ _baseFastSwimSpd = set.getInteger("baseMoveSpdfastSwim", (super.getBaseMoveSpd(MoveType.RUN) / 2));
|
|
|
|
|
|
_initialEquipment = InitialEquipmentData.getInstance().getEquipmentList(_classId);
|
|
|
+ _creationPoints = creationPoints;
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -98,127 +109,146 @@ public class L2PcTemplate extends L2CharTemplate
|
|
|
*/
|
|
|
public Race getRace()
|
|
|
{
|
|
|
- return _race;
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * @return the template X spawn coordinate.
|
|
|
- */
|
|
|
- public int getSpawnX()
|
|
|
- {
|
|
|
- return _spawnX;
|
|
|
+ return _classId.getRace();
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * @return the template Y spawn coordinate.
|
|
|
+ * @return random Location of created character spawn.
|
|
|
*/
|
|
|
- public int getSpawnY()
|
|
|
+ public Location getCreationPoint()
|
|
|
{
|
|
|
- return _spawnY;
|
|
|
+ return _creationPoints.get(Rnd.get(_creationPoints.size()));
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * @return the template Z spawn coordinate.
|
|
|
+ * Sets the value of level upgain parameter.
|
|
|
+ * @param paramName name of parameter
|
|
|
+ * @param level corresponding character level
|
|
|
+ * @param val value of parameter
|
|
|
*/
|
|
|
- public int getSpawnZ()
|
|
|
+ public void setUpgainValue(String paramName, int level, double val)
|
|
|
{
|
|
|
- return _spawnZ;
|
|
|
+ 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;
|
|
|
+ case "mpRegen":
|
|
|
+ _baseMpReg[level] = val;
|
|
|
+ case "cpRegen":
|
|
|
+ _baseCpReg[level] = val;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * @return the template class base level.
|
|
|
+ * @param level character level to return value
|
|
|
+ * @return the baseHpMax for given character level
|
|
|
*/
|
|
|
- public int getClassBaseLevel()
|
|
|
+ public float getBaseHpMax(int level)
|
|
|
{
|
|
|
- return _classBaseLevel;
|
|
|
+ return _baseHp[level];
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * @return the template level Hp add.
|
|
|
+ * @param level character level to return value
|
|
|
+ * @return the baseMpMax for given character level
|
|
|
*/
|
|
|
- public float getLvlHpAdd()
|
|
|
+ public float getBaseMpMax(int level)
|
|
|
{
|
|
|
- return _lvlHpAdd;
|
|
|
+ return _baseMp[level];
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * @return the template level Hp mod.
|
|
|
+ * @param level character level to return value
|
|
|
+ * @return the baseCpMax for given character level
|
|
|
*/
|
|
|
- public float getLvlHpMod()
|
|
|
+ public float getBaseCpMax(int level)
|
|
|
{
|
|
|
- return _lvlHpMod;
|
|
|
+ return _baseCp[level];
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * @return the template level Cp add.
|
|
|
+ * @param level character level to return value
|
|
|
+ * @return the base HP Regeneration for given character level
|
|
|
*/
|
|
|
- public float getLvlCpAdd()
|
|
|
+ public double getBaseHpRegen(int level)
|
|
|
{
|
|
|
- return _lvlCpAdd;
|
|
|
+ return _baseHpReg[level];
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * @return the template level Cp mod.
|
|
|
+ * @param level character level to return value
|
|
|
+ * @return the base MP Regeneration for given character level
|
|
|
*/
|
|
|
- public float getLvlCpMod()
|
|
|
+ public double getBaseMpRegen(int level)
|
|
|
{
|
|
|
- return _lvlCpMod;
|
|
|
+ return _baseMpReg[level];
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * @return the template level Mp add.
|
|
|
+ * @param level character level to return value
|
|
|
+ * @return the base HP Regeneration for given character level
|
|
|
*/
|
|
|
- public float getLvlMpAdd()
|
|
|
+ public double getBaseCpRegen(int level)
|
|
|
{
|
|
|
- return _lvlMpAdd;
|
|
|
+ return _baseCpReg[level];
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * @return the template level Mp mod.
|
|
|
+ * @param slotId id of inventory slot to return value
|
|
|
+ * @return defence value of charactert for EMPTY given slot
|
|
|
*/
|
|
|
- public float getLvlMpMod()
|
|
|
+ public int getBaseDefBySlot(int slotId)
|
|
|
{
|
|
|
- return _lvlMpMod;
|
|
|
+ return _baseSlotDef.containsKey(slotId) ? _baseSlotDef.get(slotId) : 0;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * @return the template collision height for male characters.
|
|
|
+ * @return the template collision height for female characters.
|
|
|
*/
|
|
|
- public double getFCollisionHeightMale()
|
|
|
+ public double getFCollisionHeightFemale()
|
|
|
{
|
|
|
- return _fCollisionHeightMale;
|
|
|
+ return _fCollisionHeightFemale;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * @return the template collision radius for male characters.
|
|
|
+ * @return the template collision radius for female characters.
|
|
|
*/
|
|
|
- public double getFCollisionRadiusMale()
|
|
|
+ public double getFCollisionRadiusFemale()
|
|
|
{
|
|
|
- return _fCollisionRadiusMale;
|
|
|
+ return _fCollisionRadiusFemale;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * @return the template collision height for female characters.
|
|
|
+ * @return the safe fall height.
|
|
|
*/
|
|
|
- public double getFCollisionHeightFemale()
|
|
|
+ public int getSafeFallHeight()
|
|
|
{
|
|
|
- return _fCollisionHeightFemale;
|
|
|
+ return _baseSafeFallHeight;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * @return the template collision radius for female characters.
|
|
|
+ * @return the base slow (walk) swim speed.
|
|
|
*/
|
|
|
- public double getFCollisionRadiusFemale()
|
|
|
+ public int getBaseSlowSwimSpd()
|
|
|
{
|
|
|
- return _fCollisionRadiusFemale;
|
|
|
+ return _baseSlowSwimSpd;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * @return the fall height.
|
|
|
+ * @return the base fast (run) swim speed.
|
|
|
*/
|
|
|
- public int getFallHeight()
|
|
|
+ public int getBaseFastSwimSpd()
|
|
|
{
|
|
|
- return _fallHeight;
|
|
|
+ return _baseFastSwimSpd;
|
|
|
}
|
|
|
|
|
|
/**
|