Support generating automatically missing player stats.

This commit is contained in:
MobiusDev 2019-03-01 06:27:49 +00:00
parent b611ebca75
commit c1767487e8
11 changed files with 308 additions and 44 deletions

View File

@ -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);
}
}
}
}

View File

@ -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);
}
}
}
}

View File

@ -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);
}
}
}
}

View File

@ -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);
}
}
}
}

View File

@ -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);
}
}
}
}

View File

@ -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);
}
}
}
}

View File

@ -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);
}
}
}
}

View File

@ -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);
}
}
}
}

View File

@ -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);
}
}
}
}

View File

@ -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);
}
}
}
}

View File

@ -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);
}
}
}
}