Support generating automatically missing player stats.
This commit is contained in:
parent
b611ebca75
commit
c1767487e8
@ -45,6 +45,7 @@ public final class PlayerTemplateData implements IGameXmlReader
|
||||
private final Map<ClassId, L2PcTemplate> _playerTemplates = new HashMap<>();
|
||||
|
||||
private int _dataCount = 0;
|
||||
private int _autoGeneratedCount = 0;
|
||||
|
||||
protected PlayerTemplateData()
|
||||
{
|
||||
@ -58,6 +59,10 @@ public final class PlayerTemplateData implements IGameXmlReader
|
||||
parseDatapackDirectory("data/stats/chars/baseStats", false);
|
||||
LOGGER.info(getClass().getSimpleName() + ": Loaded " + _playerTemplates.size() + " character templates.");
|
||||
LOGGER.info(getClass().getSimpleName() + ": Loaded " + _dataCount + " level up gain records.");
|
||||
if (_autoGeneratedCount > 0)
|
||||
{
|
||||
LOGGER.info(getClass().getSimpleName() + ": Generated " + _autoGeneratedCount + " level up gain records.");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -146,17 +151,16 @@ public final class PlayerTemplateData implements IGameXmlReader
|
||||
}
|
||||
else if ("lvlUpgainData".equalsIgnoreCase(d.getNodeName()))
|
||||
{
|
||||
int level = 0;
|
||||
for (Node lvlNode = d.getFirstChild(); lvlNode != null; lvlNode = lvlNode.getNextSibling())
|
||||
{
|
||||
if ("level".equalsIgnoreCase(lvlNode.getNodeName()))
|
||||
{
|
||||
attrs = lvlNode.getAttributes();
|
||||
final int level = parseInteger(attrs, "val");
|
||||
|
||||
level = parseInteger(attrs, "val");
|
||||
for (Node valNode = lvlNode.getFirstChild(); valNode != null; valNode = valNode.getNextSibling())
|
||||
{
|
||||
final String nodeName = valNode.getNodeName();
|
||||
|
||||
if ((level < Config.PLAYER_MAXIMUM_LEVEL) && (nodeName.startsWith("hp") || nodeName.startsWith("mp") || nodeName.startsWith("cp")) && _playerTemplates.containsKey(ClassId.getClassId(classId)))
|
||||
{
|
||||
_playerTemplates.get(ClassId.getClassId(classId)).setUpgainValue(nodeName, level, Double.parseDouble(valNode.getTextContent()));
|
||||
@ -165,7 +169,27 @@ public final class PlayerTemplateData implements IGameXmlReader
|
||||
}
|
||||
}
|
||||
}
|
||||
// TODO: Generate stats automatically.
|
||||
// Generate missing stats automatically.
|
||||
while (level < (Config.PLAYER_MAXIMUM_LEVEL - 1))
|
||||
{
|
||||
level++;
|
||||
_autoGeneratedCount++;
|
||||
final double hpM1 = _playerTemplates.get(ClassId.getClassId(classId)).getBaseHpMax(level - 1);
|
||||
_playerTemplates.get(ClassId.getClassId(classId)).setUpgainValue("hp", level, (((((hpM1 * level) / (level - 1)) + ((hpM1 * (level + 1)) / (level - 1))) / 2) + 1.45));
|
||||
final double mpM1 = _playerTemplates.get(ClassId.getClassId(classId)).getBaseMpMax(level - 1);
|
||||
_playerTemplates.get(ClassId.getClassId(classId)).setUpgainValue("mp", level, (((((mpM1 * level) / (level - 1)) + ((mpM1 * (level + 1)) / (level - 1))) / 2) + 1.6));
|
||||
final double cpM1 = _playerTemplates.get(ClassId.getClassId(classId)).getBaseCpMax(level - 1);
|
||||
_playerTemplates.get(ClassId.getClassId(classId)).setUpgainValue("cp", level, (((((cpM1 * level) / (level - 1)) + ((cpM1 * (level + 1)) / (level - 1))) / 2) + 0.8));
|
||||
final double hpRegM1 = _playerTemplates.get(ClassId.getClassId(classId)).getBaseHpRegen(level - 1);
|
||||
final double hpRegM2 = _playerTemplates.get(ClassId.getClassId(classId)).getBaseHpRegen(level - 2);
|
||||
_playerTemplates.get(ClassId.getClassId(classId)).setUpgainValue("hpRegen", level, (hpRegM1 * 2) - hpRegM2);
|
||||
final double mpRegM1 = _playerTemplates.get(ClassId.getClassId(classId)).getBaseMpRegen(level - 1);
|
||||
final double mpRegM2 = _playerTemplates.get(ClassId.getClassId(classId)).getBaseMpRegen(level - 2);
|
||||
_playerTemplates.get(ClassId.getClassId(classId)).setUpgainValue("mpRegen", level, (mpRegM1 * 2) - mpRegM2);
|
||||
final double cpRegM1 = _playerTemplates.get(ClassId.getClassId(classId)).getBaseCpRegen(level - 1);
|
||||
final double cpRegM2 = _playerTemplates.get(ClassId.getClassId(classId)).getBaseCpRegen(level - 2);
|
||||
_playerTemplates.get(ClassId.getClassId(classId)).setUpgainValue("cpRegen", level, (cpRegM1 * 2) - cpRegM2);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -45,6 +45,7 @@ public final class PlayerTemplateData implements IGameXmlReader
|
||||
private final Map<ClassId, L2PcTemplate> _playerTemplates = new HashMap<>();
|
||||
|
||||
private int _dataCount = 0;
|
||||
private int _autoGeneratedCount = 0;
|
||||
|
||||
protected PlayerTemplateData()
|
||||
{
|
||||
@ -58,6 +59,10 @@ public final class PlayerTemplateData implements IGameXmlReader
|
||||
parseDatapackDirectory("data/stats/chars/baseStats", false);
|
||||
LOGGER.info(getClass().getSimpleName() + ": Loaded " + _playerTemplates.size() + " character templates.");
|
||||
LOGGER.info(getClass().getSimpleName() + ": Loaded " + _dataCount + " level up gain records.");
|
||||
if (_autoGeneratedCount > 0)
|
||||
{
|
||||
LOGGER.info(getClass().getSimpleName() + ": Generated " + _autoGeneratedCount + " level up gain records.");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -146,17 +151,16 @@ public final class PlayerTemplateData implements IGameXmlReader
|
||||
}
|
||||
else if ("lvlUpgainData".equalsIgnoreCase(d.getNodeName()))
|
||||
{
|
||||
int level = 0;
|
||||
for (Node lvlNode = d.getFirstChild(); lvlNode != null; lvlNode = lvlNode.getNextSibling())
|
||||
{
|
||||
if ("level".equalsIgnoreCase(lvlNode.getNodeName()))
|
||||
{
|
||||
attrs = lvlNode.getAttributes();
|
||||
final int level = parseInteger(attrs, "val");
|
||||
|
||||
level = parseInteger(attrs, "val");
|
||||
for (Node valNode = lvlNode.getFirstChild(); valNode != null; valNode = valNode.getNextSibling())
|
||||
{
|
||||
final String nodeName = valNode.getNodeName();
|
||||
|
||||
if ((level < Config.PLAYER_MAXIMUM_LEVEL) && (nodeName.startsWith("hp") || nodeName.startsWith("mp") || nodeName.startsWith("cp")) && _playerTemplates.containsKey(ClassId.getClassId(classId)))
|
||||
{
|
||||
_playerTemplates.get(ClassId.getClassId(classId)).setUpgainValue(nodeName, level, Double.parseDouble(valNode.getTextContent()));
|
||||
@ -165,7 +169,27 @@ public final class PlayerTemplateData implements IGameXmlReader
|
||||
}
|
||||
}
|
||||
}
|
||||
// TODO: Generate stats automatically.
|
||||
// Generate missing stats automatically.
|
||||
while (level < (Config.PLAYER_MAXIMUM_LEVEL - 1))
|
||||
{
|
||||
level++;
|
||||
_autoGeneratedCount++;
|
||||
final double hpM1 = _playerTemplates.get(ClassId.getClassId(classId)).getBaseHpMax(level - 1);
|
||||
_playerTemplates.get(ClassId.getClassId(classId)).setUpgainValue("hp", level, (((((hpM1 * level) / (level - 1)) + ((hpM1 * (level + 1)) / (level - 1))) / 2) + 1.45));
|
||||
final double mpM1 = _playerTemplates.get(ClassId.getClassId(classId)).getBaseMpMax(level - 1);
|
||||
_playerTemplates.get(ClassId.getClassId(classId)).setUpgainValue("mp", level, (((((mpM1 * level) / (level - 1)) + ((mpM1 * (level + 1)) / (level - 1))) / 2) + 1.6));
|
||||
final double cpM1 = _playerTemplates.get(ClassId.getClassId(classId)).getBaseCpMax(level - 1);
|
||||
_playerTemplates.get(ClassId.getClassId(classId)).setUpgainValue("cp", level, (((((cpM1 * level) / (level - 1)) + ((cpM1 * (level + 1)) / (level - 1))) / 2) + 0.8));
|
||||
final double hpRegM1 = _playerTemplates.get(ClassId.getClassId(classId)).getBaseHpRegen(level - 1);
|
||||
final double hpRegM2 = _playerTemplates.get(ClassId.getClassId(classId)).getBaseHpRegen(level - 2);
|
||||
_playerTemplates.get(ClassId.getClassId(classId)).setUpgainValue("hpRegen", level, (hpRegM1 * 2) - hpRegM2);
|
||||
final double mpRegM1 = _playerTemplates.get(ClassId.getClassId(classId)).getBaseMpRegen(level - 1);
|
||||
final double mpRegM2 = _playerTemplates.get(ClassId.getClassId(classId)).getBaseMpRegen(level - 2);
|
||||
_playerTemplates.get(ClassId.getClassId(classId)).setUpgainValue("mpRegen", level, (mpRegM1 * 2) - mpRegM2);
|
||||
final double cpRegM1 = _playerTemplates.get(ClassId.getClassId(classId)).getBaseCpRegen(level - 1);
|
||||
final double cpRegM2 = _playerTemplates.get(ClassId.getClassId(classId)).getBaseCpRegen(level - 2);
|
||||
_playerTemplates.get(ClassId.getClassId(classId)).setUpgainValue("cpRegen", level, (cpRegM1 * 2) - cpRegM2);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -45,6 +45,7 @@ public final class PlayerTemplateData implements IGameXmlReader
|
||||
private final Map<ClassId, L2PcTemplate> _playerTemplates = new HashMap<>();
|
||||
|
||||
private int _dataCount = 0;
|
||||
private int _autoGeneratedCount = 0;
|
||||
|
||||
protected PlayerTemplateData()
|
||||
{
|
||||
@ -58,6 +59,10 @@ public final class PlayerTemplateData implements IGameXmlReader
|
||||
parseDatapackDirectory("data/stats/chars/baseStats", false);
|
||||
LOGGER.info(getClass().getSimpleName() + ": Loaded " + _playerTemplates.size() + " character templates.");
|
||||
LOGGER.info(getClass().getSimpleName() + ": Loaded " + _dataCount + " level up gain records.");
|
||||
if (_autoGeneratedCount > 0)
|
||||
{
|
||||
LOGGER.info(getClass().getSimpleName() + ": Generated " + _autoGeneratedCount + " level up gain records.");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -146,17 +151,16 @@ public final class PlayerTemplateData implements IGameXmlReader
|
||||
}
|
||||
else if ("lvlUpgainData".equalsIgnoreCase(d.getNodeName()))
|
||||
{
|
||||
int level = 0;
|
||||
for (Node lvlNode = d.getFirstChild(); lvlNode != null; lvlNode = lvlNode.getNextSibling())
|
||||
{
|
||||
if ("level".equalsIgnoreCase(lvlNode.getNodeName()))
|
||||
{
|
||||
attrs = lvlNode.getAttributes();
|
||||
final int level = parseInteger(attrs, "val");
|
||||
|
||||
level = parseInteger(attrs, "val");
|
||||
for (Node valNode = lvlNode.getFirstChild(); valNode != null; valNode = valNode.getNextSibling())
|
||||
{
|
||||
final String nodeName = valNode.getNodeName();
|
||||
|
||||
if ((level < Config.PLAYER_MAXIMUM_LEVEL) && (nodeName.startsWith("hp") || nodeName.startsWith("mp") || nodeName.startsWith("cp")) && _playerTemplates.containsKey(ClassId.getClassId(classId)))
|
||||
{
|
||||
_playerTemplates.get(ClassId.getClassId(classId)).setUpgainValue(nodeName, level, Double.parseDouble(valNode.getTextContent()));
|
||||
@ -165,7 +169,27 @@ public final class PlayerTemplateData implements IGameXmlReader
|
||||
}
|
||||
}
|
||||
}
|
||||
// TODO: Generate stats automatically.
|
||||
// Generate missing stats automatically.
|
||||
while (level < (Config.PLAYER_MAXIMUM_LEVEL - 1))
|
||||
{
|
||||
level++;
|
||||
_autoGeneratedCount++;
|
||||
final double hpM1 = _playerTemplates.get(ClassId.getClassId(classId)).getBaseHpMax(level - 1);
|
||||
_playerTemplates.get(ClassId.getClassId(classId)).setUpgainValue("hp", level, (((((hpM1 * level) / (level - 1)) + ((hpM1 * (level + 1)) / (level - 1))) / 2) + 1.45));
|
||||
final double mpM1 = _playerTemplates.get(ClassId.getClassId(classId)).getBaseMpMax(level - 1);
|
||||
_playerTemplates.get(ClassId.getClassId(classId)).setUpgainValue("mp", level, (((((mpM1 * level) / (level - 1)) + ((mpM1 * (level + 1)) / (level - 1))) / 2) + 1.6));
|
||||
final double cpM1 = _playerTemplates.get(ClassId.getClassId(classId)).getBaseCpMax(level - 1);
|
||||
_playerTemplates.get(ClassId.getClassId(classId)).setUpgainValue("cp", level, (((((cpM1 * level) / (level - 1)) + ((cpM1 * (level + 1)) / (level - 1))) / 2) + 0.8));
|
||||
final double hpRegM1 = _playerTemplates.get(ClassId.getClassId(classId)).getBaseHpRegen(level - 1);
|
||||
final double hpRegM2 = _playerTemplates.get(ClassId.getClassId(classId)).getBaseHpRegen(level - 2);
|
||||
_playerTemplates.get(ClassId.getClassId(classId)).setUpgainValue("hpRegen", level, (hpRegM1 * 2) - hpRegM2);
|
||||
final double mpRegM1 = _playerTemplates.get(ClassId.getClassId(classId)).getBaseMpRegen(level - 1);
|
||||
final double mpRegM2 = _playerTemplates.get(ClassId.getClassId(classId)).getBaseMpRegen(level - 2);
|
||||
_playerTemplates.get(ClassId.getClassId(classId)).setUpgainValue("mpRegen", level, (mpRegM1 * 2) - mpRegM2);
|
||||
final double cpRegM1 = _playerTemplates.get(ClassId.getClassId(classId)).getBaseCpRegen(level - 1);
|
||||
final double cpRegM2 = _playerTemplates.get(ClassId.getClassId(classId)).getBaseCpRegen(level - 2);
|
||||
_playerTemplates.get(ClassId.getClassId(classId)).setUpgainValue("cpRegen", level, (cpRegM1 * 2) - cpRegM2);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -45,6 +45,7 @@ public final class PlayerTemplateData implements IGameXmlReader
|
||||
private final Map<ClassId, L2PcTemplate> _playerTemplates = new HashMap<>();
|
||||
|
||||
private int _dataCount = 0;
|
||||
private int _autoGeneratedCount = 0;
|
||||
|
||||
protected PlayerTemplateData()
|
||||
{
|
||||
@ -58,6 +59,10 @@ public final class PlayerTemplateData implements IGameXmlReader
|
||||
parseDatapackDirectory("data/stats/chars/baseStats", false);
|
||||
LOGGER.info(getClass().getSimpleName() + ": Loaded " + _playerTemplates.size() + " character templates.");
|
||||
LOGGER.info(getClass().getSimpleName() + ": Loaded " + _dataCount + " level up gain records.");
|
||||
if (_autoGeneratedCount > 0)
|
||||
{
|
||||
LOGGER.info(getClass().getSimpleName() + ": Generated " + _autoGeneratedCount + " level up gain records.");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -146,17 +151,16 @@ public final class PlayerTemplateData implements IGameXmlReader
|
||||
}
|
||||
else if ("lvlUpgainData".equalsIgnoreCase(d.getNodeName()))
|
||||
{
|
||||
int level = 0;
|
||||
for (Node lvlNode = d.getFirstChild(); lvlNode != null; lvlNode = lvlNode.getNextSibling())
|
||||
{
|
||||
if ("level".equalsIgnoreCase(lvlNode.getNodeName()))
|
||||
{
|
||||
attrs = lvlNode.getAttributes();
|
||||
final int level = parseInteger(attrs, "val");
|
||||
|
||||
level = parseInteger(attrs, "val");
|
||||
for (Node valNode = lvlNode.getFirstChild(); valNode != null; valNode = valNode.getNextSibling())
|
||||
{
|
||||
final String nodeName = valNode.getNodeName();
|
||||
|
||||
if ((level < Config.PLAYER_MAXIMUM_LEVEL) && (nodeName.startsWith("hp") || nodeName.startsWith("mp") || nodeName.startsWith("cp")) && _playerTemplates.containsKey(ClassId.getClassId(classId)))
|
||||
{
|
||||
_playerTemplates.get(ClassId.getClassId(classId)).setUpgainValue(nodeName, level, Double.parseDouble(valNode.getTextContent()));
|
||||
@ -165,7 +169,27 @@ public final class PlayerTemplateData implements IGameXmlReader
|
||||
}
|
||||
}
|
||||
}
|
||||
// TODO: Generate stats automatically.
|
||||
// Generate missing stats automatically.
|
||||
while (level < (Config.PLAYER_MAXIMUM_LEVEL - 1))
|
||||
{
|
||||
level++;
|
||||
_autoGeneratedCount++;
|
||||
final double hpM1 = _playerTemplates.get(ClassId.getClassId(classId)).getBaseHpMax(level - 1);
|
||||
_playerTemplates.get(ClassId.getClassId(classId)).setUpgainValue("hp", level, (((((hpM1 * level) / (level - 1)) + ((hpM1 * (level + 1)) / (level - 1))) / 2) + 1.45));
|
||||
final double mpM1 = _playerTemplates.get(ClassId.getClassId(classId)).getBaseMpMax(level - 1);
|
||||
_playerTemplates.get(ClassId.getClassId(classId)).setUpgainValue("mp", level, (((((mpM1 * level) / (level - 1)) + ((mpM1 * (level + 1)) / (level - 1))) / 2) + 1.6));
|
||||
final double cpM1 = _playerTemplates.get(ClassId.getClassId(classId)).getBaseCpMax(level - 1);
|
||||
_playerTemplates.get(ClassId.getClassId(classId)).setUpgainValue("cp", level, (((((cpM1 * level) / (level - 1)) + ((cpM1 * (level + 1)) / (level - 1))) / 2) + 0.8));
|
||||
final double hpRegM1 = _playerTemplates.get(ClassId.getClassId(classId)).getBaseHpRegen(level - 1);
|
||||
final double hpRegM2 = _playerTemplates.get(ClassId.getClassId(classId)).getBaseHpRegen(level - 2);
|
||||
_playerTemplates.get(ClassId.getClassId(classId)).setUpgainValue("hpRegen", level, (hpRegM1 * 2) - hpRegM2);
|
||||
final double mpRegM1 = _playerTemplates.get(ClassId.getClassId(classId)).getBaseMpRegen(level - 1);
|
||||
final double mpRegM2 = _playerTemplates.get(ClassId.getClassId(classId)).getBaseMpRegen(level - 2);
|
||||
_playerTemplates.get(ClassId.getClassId(classId)).setUpgainValue("mpRegen", level, (mpRegM1 * 2) - mpRegM2);
|
||||
final double cpRegM1 = _playerTemplates.get(ClassId.getClassId(classId)).getBaseCpRegen(level - 1);
|
||||
final double cpRegM2 = _playerTemplates.get(ClassId.getClassId(classId)).getBaseCpRegen(level - 2);
|
||||
_playerTemplates.get(ClassId.getClassId(classId)).setUpgainValue("cpRegen", level, (cpRegM1 * 2) - cpRegM2);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -45,6 +45,7 @@ public final class PlayerTemplateData implements IGameXmlReader
|
||||
private final Map<ClassId, L2PcTemplate> _playerTemplates = new HashMap<>();
|
||||
|
||||
private int _dataCount = 0;
|
||||
private int _autoGeneratedCount = 0;
|
||||
|
||||
protected PlayerTemplateData()
|
||||
{
|
||||
@ -58,6 +59,10 @@ public final class PlayerTemplateData implements IGameXmlReader
|
||||
parseDatapackDirectory("data/stats/chars/baseStats", false);
|
||||
LOGGER.info(getClass().getSimpleName() + ": Loaded " + _playerTemplates.size() + " character templates.");
|
||||
LOGGER.info(getClass().getSimpleName() + ": Loaded " + _dataCount + " level up gain records.");
|
||||
if (_autoGeneratedCount > 0)
|
||||
{
|
||||
LOGGER.info(getClass().getSimpleName() + ": Generated " + _autoGeneratedCount + " level up gain records.");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -146,17 +151,16 @@ public final class PlayerTemplateData implements IGameXmlReader
|
||||
}
|
||||
else if ("lvlUpgainData".equalsIgnoreCase(d.getNodeName()))
|
||||
{
|
||||
int level = 0;
|
||||
for (Node lvlNode = d.getFirstChild(); lvlNode != null; lvlNode = lvlNode.getNextSibling())
|
||||
{
|
||||
if ("level".equalsIgnoreCase(lvlNode.getNodeName()))
|
||||
{
|
||||
attrs = lvlNode.getAttributes();
|
||||
final int level = parseInteger(attrs, "val");
|
||||
|
||||
level = parseInteger(attrs, "val");
|
||||
for (Node valNode = lvlNode.getFirstChild(); valNode != null; valNode = valNode.getNextSibling())
|
||||
{
|
||||
final String nodeName = valNode.getNodeName();
|
||||
|
||||
if ((level < Config.PLAYER_MAXIMUM_LEVEL) && (nodeName.startsWith("hp") || nodeName.startsWith("mp") || nodeName.startsWith("cp")) && _playerTemplates.containsKey(ClassId.getClassId(classId)))
|
||||
{
|
||||
_playerTemplates.get(ClassId.getClassId(classId)).setUpgainValue(nodeName, level, Double.parseDouble(valNode.getTextContent()));
|
||||
@ -165,7 +169,27 @@ public final class PlayerTemplateData implements IGameXmlReader
|
||||
}
|
||||
}
|
||||
}
|
||||
// TODO: Generate stats automatically.
|
||||
// Generate missing stats automatically.
|
||||
while (level < (Config.PLAYER_MAXIMUM_LEVEL - 1))
|
||||
{
|
||||
level++;
|
||||
_autoGeneratedCount++;
|
||||
final double hpM1 = _playerTemplates.get(ClassId.getClassId(classId)).getBaseHpMax(level - 1);
|
||||
_playerTemplates.get(ClassId.getClassId(classId)).setUpgainValue("hp", level, (((((hpM1 * level) / (level - 1)) + ((hpM1 * (level + 1)) / (level - 1))) / 2) + 1.45));
|
||||
final double mpM1 = _playerTemplates.get(ClassId.getClassId(classId)).getBaseMpMax(level - 1);
|
||||
_playerTemplates.get(ClassId.getClassId(classId)).setUpgainValue("mp", level, (((((mpM1 * level) / (level - 1)) + ((mpM1 * (level + 1)) / (level - 1))) / 2) + 1.6));
|
||||
final double cpM1 = _playerTemplates.get(ClassId.getClassId(classId)).getBaseCpMax(level - 1);
|
||||
_playerTemplates.get(ClassId.getClassId(classId)).setUpgainValue("cp", level, (((((cpM1 * level) / (level - 1)) + ((cpM1 * (level + 1)) / (level - 1))) / 2) + 0.8));
|
||||
final double hpRegM1 = _playerTemplates.get(ClassId.getClassId(classId)).getBaseHpRegen(level - 1);
|
||||
final double hpRegM2 = _playerTemplates.get(ClassId.getClassId(classId)).getBaseHpRegen(level - 2);
|
||||
_playerTemplates.get(ClassId.getClassId(classId)).setUpgainValue("hpRegen", level, (hpRegM1 * 2) - hpRegM2);
|
||||
final double mpRegM1 = _playerTemplates.get(ClassId.getClassId(classId)).getBaseMpRegen(level - 1);
|
||||
final double mpRegM2 = _playerTemplates.get(ClassId.getClassId(classId)).getBaseMpRegen(level - 2);
|
||||
_playerTemplates.get(ClassId.getClassId(classId)).setUpgainValue("mpRegen", level, (mpRegM1 * 2) - mpRegM2);
|
||||
final double cpRegM1 = _playerTemplates.get(ClassId.getClassId(classId)).getBaseCpRegen(level - 1);
|
||||
final double cpRegM2 = _playerTemplates.get(ClassId.getClassId(classId)).getBaseCpRegen(level - 2);
|
||||
_playerTemplates.get(ClassId.getClassId(classId)).setUpgainValue("cpRegen", level, (cpRegM1 * 2) - cpRegM2);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -45,6 +45,7 @@ public final class PlayerTemplateData implements IGameXmlReader
|
||||
private final Map<ClassId, L2PcTemplate> _playerTemplates = new HashMap<>();
|
||||
|
||||
private int _dataCount = 0;
|
||||
private int _autoGeneratedCount = 0;
|
||||
|
||||
protected PlayerTemplateData()
|
||||
{
|
||||
@ -58,6 +59,10 @@ public final class PlayerTemplateData implements IGameXmlReader
|
||||
parseDatapackDirectory("data/stats/chars/baseStats", false);
|
||||
LOGGER.info(getClass().getSimpleName() + ": Loaded " + _playerTemplates.size() + " character templates.");
|
||||
LOGGER.info(getClass().getSimpleName() + ": Loaded " + _dataCount + " level up gain records.");
|
||||
if (_autoGeneratedCount > 0)
|
||||
{
|
||||
LOGGER.info(getClass().getSimpleName() + ": Generated " + _autoGeneratedCount + " level up gain records.");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -146,17 +151,16 @@ public final class PlayerTemplateData implements IGameXmlReader
|
||||
}
|
||||
else if ("lvlUpgainData".equalsIgnoreCase(d.getNodeName()))
|
||||
{
|
||||
int level = 0;
|
||||
for (Node lvlNode = d.getFirstChild(); lvlNode != null; lvlNode = lvlNode.getNextSibling())
|
||||
{
|
||||
if ("level".equalsIgnoreCase(lvlNode.getNodeName()))
|
||||
{
|
||||
attrs = lvlNode.getAttributes();
|
||||
final int level = parseInteger(attrs, "val");
|
||||
|
||||
level = parseInteger(attrs, "val");
|
||||
for (Node valNode = lvlNode.getFirstChild(); valNode != null; valNode = valNode.getNextSibling())
|
||||
{
|
||||
final String nodeName = valNode.getNodeName();
|
||||
|
||||
if ((level < Config.PLAYER_MAXIMUM_LEVEL) && (nodeName.startsWith("hp") || nodeName.startsWith("mp") || nodeName.startsWith("cp")) && _playerTemplates.containsKey(ClassId.getClassId(classId)))
|
||||
{
|
||||
_playerTemplates.get(ClassId.getClassId(classId)).setUpgainValue(nodeName, level, Double.parseDouble(valNode.getTextContent()));
|
||||
@ -165,7 +169,27 @@ public final class PlayerTemplateData implements IGameXmlReader
|
||||
}
|
||||
}
|
||||
}
|
||||
// TODO: Generate stats automatically.
|
||||
// Generate missing stats automatically.
|
||||
while (level < (Config.PLAYER_MAXIMUM_LEVEL - 1))
|
||||
{
|
||||
level++;
|
||||
_autoGeneratedCount++;
|
||||
final double hpM1 = _playerTemplates.get(ClassId.getClassId(classId)).getBaseHpMax(level - 1);
|
||||
_playerTemplates.get(ClassId.getClassId(classId)).setUpgainValue("hp", level, (((((hpM1 * level) / (level - 1)) + ((hpM1 * (level + 1)) / (level - 1))) / 2) + 1.45));
|
||||
final double mpM1 = _playerTemplates.get(ClassId.getClassId(classId)).getBaseMpMax(level - 1);
|
||||
_playerTemplates.get(ClassId.getClassId(classId)).setUpgainValue("mp", level, (((((mpM1 * level) / (level - 1)) + ((mpM1 * (level + 1)) / (level - 1))) / 2) + 1.6));
|
||||
final double cpM1 = _playerTemplates.get(ClassId.getClassId(classId)).getBaseCpMax(level - 1);
|
||||
_playerTemplates.get(ClassId.getClassId(classId)).setUpgainValue("cp", level, (((((cpM1 * level) / (level - 1)) + ((cpM1 * (level + 1)) / (level - 1))) / 2) + 0.8));
|
||||
final double hpRegM1 = _playerTemplates.get(ClassId.getClassId(classId)).getBaseHpRegen(level - 1);
|
||||
final double hpRegM2 = _playerTemplates.get(ClassId.getClassId(classId)).getBaseHpRegen(level - 2);
|
||||
_playerTemplates.get(ClassId.getClassId(classId)).setUpgainValue("hpRegen", level, (hpRegM1 * 2) - hpRegM2);
|
||||
final double mpRegM1 = _playerTemplates.get(ClassId.getClassId(classId)).getBaseMpRegen(level - 1);
|
||||
final double mpRegM2 = _playerTemplates.get(ClassId.getClassId(classId)).getBaseMpRegen(level - 2);
|
||||
_playerTemplates.get(ClassId.getClassId(classId)).setUpgainValue("mpRegen", level, (mpRegM1 * 2) - mpRegM2);
|
||||
final double cpRegM1 = _playerTemplates.get(ClassId.getClassId(classId)).getBaseCpRegen(level - 1);
|
||||
final double cpRegM2 = _playerTemplates.get(ClassId.getClassId(classId)).getBaseCpRegen(level - 2);
|
||||
_playerTemplates.get(ClassId.getClassId(classId)).setUpgainValue("cpRegen", level, (cpRegM1 * 2) - cpRegM2);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -45,6 +45,7 @@ public final class PlayerTemplateData implements IGameXmlReader
|
||||
private final Map<ClassId, L2PcTemplate> _playerTemplates = new HashMap<>();
|
||||
|
||||
private int _dataCount = 0;
|
||||
private int _autoGeneratedCount = 0;
|
||||
|
||||
protected PlayerTemplateData()
|
||||
{
|
||||
@ -58,6 +59,10 @@ public final class PlayerTemplateData implements IGameXmlReader
|
||||
parseDatapackDirectory("data/stats/chars/baseStats", false);
|
||||
LOGGER.info(getClass().getSimpleName() + ": Loaded " + _playerTemplates.size() + " character templates.");
|
||||
LOGGER.info(getClass().getSimpleName() + ": Loaded " + _dataCount + " level up gain records.");
|
||||
if (_autoGeneratedCount > 0)
|
||||
{
|
||||
LOGGER.info(getClass().getSimpleName() + ": Generated " + _autoGeneratedCount + " level up gain records.");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -146,17 +151,16 @@ public final class PlayerTemplateData implements IGameXmlReader
|
||||
}
|
||||
else if ("lvlUpgainData".equalsIgnoreCase(d.getNodeName()))
|
||||
{
|
||||
int level = 0;
|
||||
for (Node lvlNode = d.getFirstChild(); lvlNode != null; lvlNode = lvlNode.getNextSibling())
|
||||
{
|
||||
if ("level".equalsIgnoreCase(lvlNode.getNodeName()))
|
||||
{
|
||||
attrs = lvlNode.getAttributes();
|
||||
final int level = parseInteger(attrs, "val");
|
||||
|
||||
level = parseInteger(attrs, "val");
|
||||
for (Node valNode = lvlNode.getFirstChild(); valNode != null; valNode = valNode.getNextSibling())
|
||||
{
|
||||
final String nodeName = valNode.getNodeName();
|
||||
|
||||
if ((level < Config.PLAYER_MAXIMUM_LEVEL) && (nodeName.startsWith("hp") || nodeName.startsWith("mp") || nodeName.startsWith("cp")) && _playerTemplates.containsKey(ClassId.getClassId(classId)))
|
||||
{
|
||||
_playerTemplates.get(ClassId.getClassId(classId)).setUpgainValue(nodeName, level, Double.parseDouble(valNode.getTextContent()));
|
||||
@ -165,7 +169,27 @@ public final class PlayerTemplateData implements IGameXmlReader
|
||||
}
|
||||
}
|
||||
}
|
||||
// TODO: Generate stats automatically.
|
||||
// Generate missing stats automatically.
|
||||
while (level < (Config.PLAYER_MAXIMUM_LEVEL - 1))
|
||||
{
|
||||
level++;
|
||||
_autoGeneratedCount++;
|
||||
final double hpM1 = _playerTemplates.get(ClassId.getClassId(classId)).getBaseHpMax(level - 1);
|
||||
_playerTemplates.get(ClassId.getClassId(classId)).setUpgainValue("hp", level, (((((hpM1 * level) / (level - 1)) + ((hpM1 * (level + 1)) / (level - 1))) / 2) + 1.45));
|
||||
final double mpM1 = _playerTemplates.get(ClassId.getClassId(classId)).getBaseMpMax(level - 1);
|
||||
_playerTemplates.get(ClassId.getClassId(classId)).setUpgainValue("mp", level, (((((mpM1 * level) / (level - 1)) + ((mpM1 * (level + 1)) / (level - 1))) / 2) + 1.6));
|
||||
final double cpM1 = _playerTemplates.get(ClassId.getClassId(classId)).getBaseCpMax(level - 1);
|
||||
_playerTemplates.get(ClassId.getClassId(classId)).setUpgainValue("cp", level, (((((cpM1 * level) / (level - 1)) + ((cpM1 * (level + 1)) / (level - 1))) / 2) + 0.8));
|
||||
final double hpRegM1 = _playerTemplates.get(ClassId.getClassId(classId)).getBaseHpRegen(level - 1);
|
||||
final double hpRegM2 = _playerTemplates.get(ClassId.getClassId(classId)).getBaseHpRegen(level - 2);
|
||||
_playerTemplates.get(ClassId.getClassId(classId)).setUpgainValue("hpRegen", level, (hpRegM1 * 2) - hpRegM2);
|
||||
final double mpRegM1 = _playerTemplates.get(ClassId.getClassId(classId)).getBaseMpRegen(level - 1);
|
||||
final double mpRegM2 = _playerTemplates.get(ClassId.getClassId(classId)).getBaseMpRegen(level - 2);
|
||||
_playerTemplates.get(ClassId.getClassId(classId)).setUpgainValue("mpRegen", level, (mpRegM1 * 2) - mpRegM2);
|
||||
final double cpRegM1 = _playerTemplates.get(ClassId.getClassId(classId)).getBaseCpRegen(level - 1);
|
||||
final double cpRegM2 = _playerTemplates.get(ClassId.getClassId(classId)).getBaseCpRegen(level - 2);
|
||||
_playerTemplates.get(ClassId.getClassId(classId)).setUpgainValue("cpRegen", level, (cpRegM1 * 2) - cpRegM2);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -45,6 +45,7 @@ public final class PlayerTemplateData implements IGameXmlReader
|
||||
private final Map<ClassId, L2PcTemplate> _playerTemplates = new HashMap<>();
|
||||
|
||||
private int _dataCount = 0;
|
||||
private int _autoGeneratedCount = 0;
|
||||
|
||||
protected PlayerTemplateData()
|
||||
{
|
||||
@ -58,6 +59,10 @@ public final class PlayerTemplateData implements IGameXmlReader
|
||||
parseDatapackDirectory("data/stats/chars/baseStats", false);
|
||||
LOGGER.info(getClass().getSimpleName() + ": Loaded " + _playerTemplates.size() + " character templates.");
|
||||
LOGGER.info(getClass().getSimpleName() + ": Loaded " + _dataCount + " level up gain records.");
|
||||
if (_autoGeneratedCount > 0)
|
||||
{
|
||||
LOGGER.info(getClass().getSimpleName() + ": Generated " + _autoGeneratedCount + " level up gain records.");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -146,17 +151,16 @@ public final class PlayerTemplateData implements IGameXmlReader
|
||||
}
|
||||
else if ("lvlUpgainData".equalsIgnoreCase(d.getNodeName()))
|
||||
{
|
||||
int level = 0;
|
||||
for (Node lvlNode = d.getFirstChild(); lvlNode != null; lvlNode = lvlNode.getNextSibling())
|
||||
{
|
||||
if ("level".equalsIgnoreCase(lvlNode.getNodeName()))
|
||||
{
|
||||
attrs = lvlNode.getAttributes();
|
||||
final int level = parseInteger(attrs, "val");
|
||||
|
||||
level = parseInteger(attrs, "val");
|
||||
for (Node valNode = lvlNode.getFirstChild(); valNode != null; valNode = valNode.getNextSibling())
|
||||
{
|
||||
final String nodeName = valNode.getNodeName();
|
||||
|
||||
if ((level < Config.PLAYER_MAXIMUM_LEVEL) && (nodeName.startsWith("hp") || nodeName.startsWith("mp") || nodeName.startsWith("cp")) && _playerTemplates.containsKey(ClassId.getClassId(classId)))
|
||||
{
|
||||
_playerTemplates.get(ClassId.getClassId(classId)).setUpgainValue(nodeName, level, Double.parseDouble(valNode.getTextContent()));
|
||||
@ -165,7 +169,27 @@ public final class PlayerTemplateData implements IGameXmlReader
|
||||
}
|
||||
}
|
||||
}
|
||||
// TODO: Generate stats automatically.
|
||||
// Generate missing stats automatically.
|
||||
while (level < (Config.PLAYER_MAXIMUM_LEVEL - 1))
|
||||
{
|
||||
level++;
|
||||
_autoGeneratedCount++;
|
||||
final double hpM1 = _playerTemplates.get(ClassId.getClassId(classId)).getBaseHpMax(level - 1);
|
||||
_playerTemplates.get(ClassId.getClassId(classId)).setUpgainValue("hp", level, (((((hpM1 * level) / (level - 1)) + ((hpM1 * (level + 1)) / (level - 1))) / 2) + 1.45));
|
||||
final double mpM1 = _playerTemplates.get(ClassId.getClassId(classId)).getBaseMpMax(level - 1);
|
||||
_playerTemplates.get(ClassId.getClassId(classId)).setUpgainValue("mp", level, (((((mpM1 * level) / (level - 1)) + ((mpM1 * (level + 1)) / (level - 1))) / 2) + 1.6));
|
||||
final double cpM1 = _playerTemplates.get(ClassId.getClassId(classId)).getBaseCpMax(level - 1);
|
||||
_playerTemplates.get(ClassId.getClassId(classId)).setUpgainValue("cp", level, (((((cpM1 * level) / (level - 1)) + ((cpM1 * (level + 1)) / (level - 1))) / 2) + 0.8));
|
||||
final double hpRegM1 = _playerTemplates.get(ClassId.getClassId(classId)).getBaseHpRegen(level - 1);
|
||||
final double hpRegM2 = _playerTemplates.get(ClassId.getClassId(classId)).getBaseHpRegen(level - 2);
|
||||
_playerTemplates.get(ClassId.getClassId(classId)).setUpgainValue("hpRegen", level, (hpRegM1 * 2) - hpRegM2);
|
||||
final double mpRegM1 = _playerTemplates.get(ClassId.getClassId(classId)).getBaseMpRegen(level - 1);
|
||||
final double mpRegM2 = _playerTemplates.get(ClassId.getClassId(classId)).getBaseMpRegen(level - 2);
|
||||
_playerTemplates.get(ClassId.getClassId(classId)).setUpgainValue("mpRegen", level, (mpRegM1 * 2) - mpRegM2);
|
||||
final double cpRegM1 = _playerTemplates.get(ClassId.getClassId(classId)).getBaseCpRegen(level - 1);
|
||||
final double cpRegM2 = _playerTemplates.get(ClassId.getClassId(classId)).getBaseCpRegen(level - 2);
|
||||
_playerTemplates.get(ClassId.getClassId(classId)).setUpgainValue("cpRegen", level, (cpRegM1 * 2) - cpRegM2);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -45,6 +45,7 @@ public final class PlayerTemplateData implements IGameXmlReader
|
||||
private final Map<ClassId, L2PcTemplate> _playerTemplates = new HashMap<>();
|
||||
|
||||
private int _dataCount = 0;
|
||||
private int _autoGeneratedCount = 0;
|
||||
|
||||
protected PlayerTemplateData()
|
||||
{
|
||||
@ -58,6 +59,10 @@ public final class PlayerTemplateData implements IGameXmlReader
|
||||
parseDatapackDirectory("data/stats/chars/baseStats", false);
|
||||
LOGGER.info(getClass().getSimpleName() + ": Loaded " + _playerTemplates.size() + " character templates.");
|
||||
LOGGER.info(getClass().getSimpleName() + ": Loaded " + _dataCount + " level up gain records.");
|
||||
if (_autoGeneratedCount > 0)
|
||||
{
|
||||
LOGGER.info(getClass().getSimpleName() + ": Generated " + _autoGeneratedCount + " level up gain records.");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -146,17 +151,16 @@ public final class PlayerTemplateData implements IGameXmlReader
|
||||
}
|
||||
else if ("lvlUpgainData".equalsIgnoreCase(d.getNodeName()))
|
||||
{
|
||||
int level = 0;
|
||||
for (Node lvlNode = d.getFirstChild(); lvlNode != null; lvlNode = lvlNode.getNextSibling())
|
||||
{
|
||||
if ("level".equalsIgnoreCase(lvlNode.getNodeName()))
|
||||
{
|
||||
attrs = lvlNode.getAttributes();
|
||||
final int level = parseInteger(attrs, "val");
|
||||
|
||||
level = parseInteger(attrs, "val");
|
||||
for (Node valNode = lvlNode.getFirstChild(); valNode != null; valNode = valNode.getNextSibling())
|
||||
{
|
||||
final String nodeName = valNode.getNodeName();
|
||||
|
||||
if ((level < Config.PLAYER_MAXIMUM_LEVEL) && (nodeName.startsWith("hp") || nodeName.startsWith("mp") || nodeName.startsWith("cp")) && _playerTemplates.containsKey(ClassId.getClassId(classId)))
|
||||
{
|
||||
_playerTemplates.get(ClassId.getClassId(classId)).setUpgainValue(nodeName, level, Double.parseDouble(valNode.getTextContent()));
|
||||
@ -165,7 +169,27 @@ public final class PlayerTemplateData implements IGameXmlReader
|
||||
}
|
||||
}
|
||||
}
|
||||
// TODO: Generate stats automatically.
|
||||
// Generate missing stats automatically.
|
||||
while (level < (Config.PLAYER_MAXIMUM_LEVEL - 1))
|
||||
{
|
||||
level++;
|
||||
_autoGeneratedCount++;
|
||||
final double hpM1 = _playerTemplates.get(ClassId.getClassId(classId)).getBaseHpMax(level - 1);
|
||||
_playerTemplates.get(ClassId.getClassId(classId)).setUpgainValue("hp", level, (((((hpM1 * level) / (level - 1)) + ((hpM1 * (level + 1)) / (level - 1))) / 2) + 1.45));
|
||||
final double mpM1 = _playerTemplates.get(ClassId.getClassId(classId)).getBaseMpMax(level - 1);
|
||||
_playerTemplates.get(ClassId.getClassId(classId)).setUpgainValue("mp", level, (((((mpM1 * level) / (level - 1)) + ((mpM1 * (level + 1)) / (level - 1))) / 2) + 1.6));
|
||||
final double cpM1 = _playerTemplates.get(ClassId.getClassId(classId)).getBaseCpMax(level - 1);
|
||||
_playerTemplates.get(ClassId.getClassId(classId)).setUpgainValue("cp", level, (((((cpM1 * level) / (level - 1)) + ((cpM1 * (level + 1)) / (level - 1))) / 2) + 0.8));
|
||||
final double hpRegM1 = _playerTemplates.get(ClassId.getClassId(classId)).getBaseHpRegen(level - 1);
|
||||
final double hpRegM2 = _playerTemplates.get(ClassId.getClassId(classId)).getBaseHpRegen(level - 2);
|
||||
_playerTemplates.get(ClassId.getClassId(classId)).setUpgainValue("hpRegen", level, (hpRegM1 * 2) - hpRegM2);
|
||||
final double mpRegM1 = _playerTemplates.get(ClassId.getClassId(classId)).getBaseMpRegen(level - 1);
|
||||
final double mpRegM2 = _playerTemplates.get(ClassId.getClassId(classId)).getBaseMpRegen(level - 2);
|
||||
_playerTemplates.get(ClassId.getClassId(classId)).setUpgainValue("mpRegen", level, (mpRegM1 * 2) - mpRegM2);
|
||||
final double cpRegM1 = _playerTemplates.get(ClassId.getClassId(classId)).getBaseCpRegen(level - 1);
|
||||
final double cpRegM2 = _playerTemplates.get(ClassId.getClassId(classId)).getBaseCpRegen(level - 2);
|
||||
_playerTemplates.get(ClassId.getClassId(classId)).setUpgainValue("cpRegen", level, (cpRegM1 * 2) - cpRegM2);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -45,6 +45,7 @@ public final class PlayerTemplateData implements IGameXmlReader
|
||||
private final Map<ClassId, L2PcTemplate> _playerTemplates = new HashMap<>();
|
||||
|
||||
private int _dataCount = 0;
|
||||
private int _autoGeneratedCount = 0;
|
||||
|
||||
protected PlayerTemplateData()
|
||||
{
|
||||
@ -58,6 +59,10 @@ public final class PlayerTemplateData implements IGameXmlReader
|
||||
parseDatapackDirectory("data/stats/chars/baseStats", false);
|
||||
LOGGER.info(getClass().getSimpleName() + ": Loaded " + _playerTemplates.size() + " character templates.");
|
||||
LOGGER.info(getClass().getSimpleName() + ": Loaded " + _dataCount + " level up gain records.");
|
||||
if (_autoGeneratedCount > 0)
|
||||
{
|
||||
LOGGER.info(getClass().getSimpleName() + ": Generated " + _autoGeneratedCount + " level up gain records.");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -146,17 +151,16 @@ public final class PlayerTemplateData implements IGameXmlReader
|
||||
}
|
||||
else if ("lvlUpgainData".equalsIgnoreCase(d.getNodeName()))
|
||||
{
|
||||
int level = 0;
|
||||
for (Node lvlNode = d.getFirstChild(); lvlNode != null; lvlNode = lvlNode.getNextSibling())
|
||||
{
|
||||
if ("level".equalsIgnoreCase(lvlNode.getNodeName()))
|
||||
{
|
||||
attrs = lvlNode.getAttributes();
|
||||
final int level = parseInteger(attrs, "val");
|
||||
|
||||
level = parseInteger(attrs, "val");
|
||||
for (Node valNode = lvlNode.getFirstChild(); valNode != null; valNode = valNode.getNextSibling())
|
||||
{
|
||||
final String nodeName = valNode.getNodeName();
|
||||
|
||||
if ((level < Config.PLAYER_MAXIMUM_LEVEL) && (nodeName.startsWith("hp") || nodeName.startsWith("mp") || nodeName.startsWith("cp")) && _playerTemplates.containsKey(ClassId.getClassId(classId)))
|
||||
{
|
||||
_playerTemplates.get(ClassId.getClassId(classId)).setUpgainValue(nodeName, level, Double.parseDouble(valNode.getTextContent()));
|
||||
@ -165,7 +169,27 @@ public final class PlayerTemplateData implements IGameXmlReader
|
||||
}
|
||||
}
|
||||
}
|
||||
// TODO: Generate stats automatically.
|
||||
// Generate missing stats automatically.
|
||||
while (level < (Config.PLAYER_MAXIMUM_LEVEL - 1))
|
||||
{
|
||||
level++;
|
||||
_autoGeneratedCount++;
|
||||
final double hpM1 = _playerTemplates.get(ClassId.getClassId(classId)).getBaseHpMax(level - 1);
|
||||
_playerTemplates.get(ClassId.getClassId(classId)).setUpgainValue("hp", level, (((((hpM1 * level) / (level - 1)) + ((hpM1 * (level + 1)) / (level - 1))) / 2) + 1.45));
|
||||
final double mpM1 = _playerTemplates.get(ClassId.getClassId(classId)).getBaseMpMax(level - 1);
|
||||
_playerTemplates.get(ClassId.getClassId(classId)).setUpgainValue("mp", level, (((((mpM1 * level) / (level - 1)) + ((mpM1 * (level + 1)) / (level - 1))) / 2) + 1.6));
|
||||
final double cpM1 = _playerTemplates.get(ClassId.getClassId(classId)).getBaseCpMax(level - 1);
|
||||
_playerTemplates.get(ClassId.getClassId(classId)).setUpgainValue("cp", level, (((((cpM1 * level) / (level - 1)) + ((cpM1 * (level + 1)) / (level - 1))) / 2) + 0.8));
|
||||
final double hpRegM1 = _playerTemplates.get(ClassId.getClassId(classId)).getBaseHpRegen(level - 1);
|
||||
final double hpRegM2 = _playerTemplates.get(ClassId.getClassId(classId)).getBaseHpRegen(level - 2);
|
||||
_playerTemplates.get(ClassId.getClassId(classId)).setUpgainValue("hpRegen", level, (hpRegM1 * 2) - hpRegM2);
|
||||
final double mpRegM1 = _playerTemplates.get(ClassId.getClassId(classId)).getBaseMpRegen(level - 1);
|
||||
final double mpRegM2 = _playerTemplates.get(ClassId.getClassId(classId)).getBaseMpRegen(level - 2);
|
||||
_playerTemplates.get(ClassId.getClassId(classId)).setUpgainValue("mpRegen", level, (mpRegM1 * 2) - mpRegM2);
|
||||
final double cpRegM1 = _playerTemplates.get(ClassId.getClassId(classId)).getBaseCpRegen(level - 1);
|
||||
final double cpRegM2 = _playerTemplates.get(ClassId.getClassId(classId)).getBaseCpRegen(level - 2);
|
||||
_playerTemplates.get(ClassId.getClassId(classId)).setUpgainValue("cpRegen", level, (cpRegM1 * 2) - cpRegM2);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -45,6 +45,7 @@ public final class PlayerTemplateData implements IGameXmlReader
|
||||
private final Map<ClassId, L2PcTemplate> _playerTemplates = new HashMap<>();
|
||||
|
||||
private int _dataCount = 0;
|
||||
private int _autoGeneratedCount = 0;
|
||||
|
||||
protected PlayerTemplateData()
|
||||
{
|
||||
@ -58,6 +59,10 @@ public final class PlayerTemplateData implements IGameXmlReader
|
||||
parseDatapackDirectory("data/stats/chars/baseStats", false);
|
||||
LOGGER.info(getClass().getSimpleName() + ": Loaded " + _playerTemplates.size() + " character templates.");
|
||||
LOGGER.info(getClass().getSimpleName() + ": Loaded " + _dataCount + " level up gain records.");
|
||||
if (_autoGeneratedCount > 0)
|
||||
{
|
||||
LOGGER.info(getClass().getSimpleName() + ": Generated " + _autoGeneratedCount + " level up gain records.");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -146,17 +151,16 @@ public final class PlayerTemplateData implements IGameXmlReader
|
||||
}
|
||||
else if ("lvlUpgainData".equalsIgnoreCase(d.getNodeName()))
|
||||
{
|
||||
int level = 0;
|
||||
for (Node lvlNode = d.getFirstChild(); lvlNode != null; lvlNode = lvlNode.getNextSibling())
|
||||
{
|
||||
if ("level".equalsIgnoreCase(lvlNode.getNodeName()))
|
||||
{
|
||||
attrs = lvlNode.getAttributes();
|
||||
final int level = parseInteger(attrs, "val");
|
||||
|
||||
level = parseInteger(attrs, "val");
|
||||
for (Node valNode = lvlNode.getFirstChild(); valNode != null; valNode = valNode.getNextSibling())
|
||||
{
|
||||
final String nodeName = valNode.getNodeName();
|
||||
|
||||
if ((level < Config.PLAYER_MAXIMUM_LEVEL) && (nodeName.startsWith("hp") || nodeName.startsWith("mp") || nodeName.startsWith("cp")) && _playerTemplates.containsKey(ClassId.getClassId(classId)))
|
||||
{
|
||||
_playerTemplates.get(ClassId.getClassId(classId)).setUpgainValue(nodeName, level, Double.parseDouble(valNode.getTextContent()));
|
||||
@ -165,7 +169,27 @@ public final class PlayerTemplateData implements IGameXmlReader
|
||||
}
|
||||
}
|
||||
}
|
||||
// TODO: Generate stats automatically.
|
||||
// Generate missing stats automatically.
|
||||
while (level < (Config.PLAYER_MAXIMUM_LEVEL - 1))
|
||||
{
|
||||
level++;
|
||||
_autoGeneratedCount++;
|
||||
final double hpM1 = _playerTemplates.get(ClassId.getClassId(classId)).getBaseHpMax(level - 1);
|
||||
_playerTemplates.get(ClassId.getClassId(classId)).setUpgainValue("hp", level, (((((hpM1 * level) / (level - 1)) + ((hpM1 * (level + 1)) / (level - 1))) / 2) + 1.45));
|
||||
final double mpM1 = _playerTemplates.get(ClassId.getClassId(classId)).getBaseMpMax(level - 1);
|
||||
_playerTemplates.get(ClassId.getClassId(classId)).setUpgainValue("mp", level, (((((mpM1 * level) / (level - 1)) + ((mpM1 * (level + 1)) / (level - 1))) / 2) + 1.6));
|
||||
final double cpM1 = _playerTemplates.get(ClassId.getClassId(classId)).getBaseCpMax(level - 1);
|
||||
_playerTemplates.get(ClassId.getClassId(classId)).setUpgainValue("cp", level, (((((cpM1 * level) / (level - 1)) + ((cpM1 * (level + 1)) / (level - 1))) / 2) + 0.8));
|
||||
final double hpRegM1 = _playerTemplates.get(ClassId.getClassId(classId)).getBaseHpRegen(level - 1);
|
||||
final double hpRegM2 = _playerTemplates.get(ClassId.getClassId(classId)).getBaseHpRegen(level - 2);
|
||||
_playerTemplates.get(ClassId.getClassId(classId)).setUpgainValue("hpRegen", level, (hpRegM1 * 2) - hpRegM2);
|
||||
final double mpRegM1 = _playerTemplates.get(ClassId.getClassId(classId)).getBaseMpRegen(level - 1);
|
||||
final double mpRegM2 = _playerTemplates.get(ClassId.getClassId(classId)).getBaseMpRegen(level - 2);
|
||||
_playerTemplates.get(ClassId.getClassId(classId)).setUpgainValue("mpRegen", level, (mpRegM1 * 2) - mpRegM2);
|
||||
final double cpRegM1 = _playerTemplates.get(ClassId.getClassId(classId)).getBaseCpRegen(level - 1);
|
||||
final double cpRegM2 = _playerTemplates.get(ClassId.getClassId(classId)).getBaseCpRegen(level - 2);
|
||||
_playerTemplates.get(ClassId.getClassId(classId)).setUpgainValue("cpRegen", level, (cpRegM1 * 2) - cpRegM2);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user