From c8197713ad6922eb55f34ad42d625aef8d6805b3 Mon Sep 17 00:00:00 2001
From: MobiusDevelopment <8391001+MobiusDevelopment@users.noreply.github.com>
Date: Thu, 13 Aug 2020 17:10:21 +0000
Subject: [PATCH] Base HP/MP/CP stats per level stored in player templates.
---
.../dist/game/data/stats/playerTemplates.xml | 178 +++++++++---------
.../dist/game/data/xsd/playerTemplates.xsd | 12 +-
.../actor/templates/CreatureTemplate.java | 8 +-
.../model/actor/templates/PlayerTemplate.java | 79 ++++----
.../gameserver/model/skills/Formulas.java | 18 +-
.../dist/game/data/stats/playerTemplates.xml | 178 +++++++++---------
.../dist/game/data/xsd/playerTemplates.xsd | 12 +-
.../actor/templates/CreatureTemplate.java | 8 +-
.../model/actor/templates/PlayerTemplate.java | 79 ++++----
.../gameserver/model/skills/Formulas.java | 18 +-
10 files changed, 290 insertions(+), 300 deletions(-)
diff --git a/L2J_Mobius_C4_ScionsOfDestiny/dist/game/data/stats/playerTemplates.xml b/L2J_Mobius_C4_ScionsOfDestiny/dist/game/data/stats/playerTemplates.xml
index b309242623..e70d50be93 100644
--- a/L2J_Mobius_C4_ScionsOfDestiny/dist/game/data/stats/playerTemplates.xml
+++ b/L2J_Mobius_C4_ScionsOfDestiny/dist/game/data/stats/playerTemplates.xml
@@ -1,92 +1,92 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/L2J_Mobius_C4_ScionsOfDestiny/dist/game/data/xsd/playerTemplates.xsd b/L2J_Mobius_C4_ScionsOfDestiny/dist/game/data/xsd/playerTemplates.xsd
index d7e57ffc9f..dec8870f02 100644
--- a/L2J_Mobius_C4_ScionsOfDestiny/dist/game/data/xsd/playerTemplates.xsd
+++ b/L2J_Mobius_C4_ScionsOfDestiny/dist/game/data/xsd/playerTemplates.xsd
@@ -29,15 +29,9 @@
-
-
-
-
-
-
-
-
-
+
+
+
diff --git a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/actor/templates/CreatureTemplate.java b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/actor/templates/CreatureTemplate.java
index 1c9474b57c..75bf44b864 100644
--- a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/actor/templates/CreatureTemplate.java
+++ b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/actor/templates/CreatureTemplate.java
@@ -102,9 +102,9 @@ public class CreatureTemplate
_baseINT = set.getInt("baseINT");
_baseWIT = set.getInt("baseWIT");
_baseMEN = set.getInt("baseMEN");
- _baseHpMax = set.getFloat("baseHpMax");
- _baseCpMax = set.getFloat("baseCpMax");
- _baseMpMax = set.getFloat("baseMpMax");
+ _baseHpMax = set.getFloat("baseHpMax", 1);
+ _baseCpMax = set.getFloat("baseCpMax", 1);
+ _baseMpMax = set.getFloat("baseMpMax", 1);
_baseHpReg = set.getFloat("baseHpReg");
_baseMpReg = set.getFloat("baseMpReg");
_basePAtk = set.getInt("basePAtk");
@@ -113,7 +113,7 @@ public class CreatureTemplate
_baseMDef = set.getInt("baseMDef");
_basePAtkSpd = set.getInt("basePAtkSpd");
_baseMAtkSpd = set.getInt("baseMAtkSpd");
- _baseMReuseRate = set.getFloat("baseMReuseDelay", 1.f);
+ _baseMReuseRate = set.getFloat("baseMReuseDelay", 1);
_baseShldDef = set.getInt("baseShldDef");
_baseAtkRange = set.getInt("baseAtkRange");
_baseShldRate = set.getInt("baseShldRate");
diff --git a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/actor/templates/PlayerTemplate.java b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/actor/templates/PlayerTemplate.java
index dc4b6ab40b..21eca4d02d 100644
--- a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/actor/templates/PlayerTemplate.java
+++ b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/actor/templates/PlayerTemplate.java
@@ -33,16 +33,13 @@ public class PlayerTemplate extends CreatureTemplate
private final ClassId _classId;
private final String _className;
private final int _classBaseLevel;
- private final float _levelHpAdd;
- private final float _levelHpMod;
- private final float _levelCpAdd;
- private final float _levelCpMod;
- private final float _levelMpAdd;
- private final float _levelMpMod;
private final int _spawnX;
private final int _spawnY;
private final int _spawnZ;
private final List _items = new ArrayList<>();
+ private final float[] _hpTable;
+ private final float[] _mpTable;
+ private final float[] _cpTable;
public PlayerTemplate(StatSet set)
{
@@ -54,18 +51,37 @@ public class PlayerTemplate extends CreatureTemplate
_spawnY = set.getInt("spawnY");
_spawnZ = set.getInt("spawnZ");
_classBaseLevel = set.getInt("baseLevel");
- _levelHpAdd = set.getFloat("levelHpAdd");
- _levelHpMod = set.getFloat("levelHpMod");
- _levelCpAdd = set.getFloat("levelCpAdd");
- _levelCpMod = set.getFloat("levelCpMod");
- _levelMpAdd = set.getFloat("levelMpAdd");
- _levelMpMod = set.getFloat("levelMpMod");
+
String[] item;
for (String split : set.getString("items").split(";"))
{
item = split.split(",");
_items.add(new ItemHolder(Integer.parseInt(item[0]), Integer.parseInt(item[1])));
}
+
+ int counter = 0;
+ final String[] hpValues = set.getString("hpTable").split(";");
+ _hpTable = new float[hpValues.length];
+ for (String value : hpValues)
+ {
+ _hpTable[counter++] = Float.valueOf(value);
+ }
+
+ counter = 0;
+ final String[] mpValues = set.getString("mpTable").split(";");
+ _mpTable = new float[mpValues.length];
+ for (String value : mpValues)
+ {
+ _mpTable[counter++] = Float.valueOf(value);
+ }
+
+ counter = 0;
+ final String[] cpValues = set.getString("cpTable").split(";");
+ _cpTable = new float[cpValues.length];
+ for (String value : cpValues)
+ {
+ _cpTable[counter++] = Float.valueOf(value);
+ }
}
public List getItems()
@@ -108,34 +124,31 @@ public class PlayerTemplate extends CreatureTemplate
return _classBaseLevel;
}
- public float getLevelHpAdd()
+ public float getBaseHpMax(int level)
{
- return _levelHpAdd;
+ if (level > _hpTable.length)
+ {
+ return _hpTable[_hpTable.length - 1];
+ }
+ return _hpTable[level - 1];
}
- public float getLevelHpMod()
+ public float getBaseMpMax(int level)
{
- return _levelHpMod;
+ if (level > _mpTable.length)
+ {
+ return _mpTable[_mpTable.length - 1];
+ }
+ return _mpTable[level - 1];
}
- public float getLevelCpAdd()
+ public float getBaseCpMax(int level)
{
- return _levelCpAdd;
- }
-
- public float getLevelCpMod()
- {
- return _levelCpMod;
- }
-
- public float getLevelMpAdd()
- {
- return _levelMpAdd;
- }
-
- public float getLevelMpMod()
- {
- return _levelMpMod;
+ if (level > _cpTable.length)
+ {
+ return _cpTable[_cpTable.length - 1];
+ }
+ return _cpTable[level - 1];
}
public int getBaseFallSafeHeight(boolean female)
diff --git a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/skills/Formulas.java b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/skills/Formulas.java
index aeb35c8029..5b961a5300 100644
--- a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/skills/Formulas.java
+++ b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/skills/Formulas.java
@@ -707,11 +707,7 @@ public class Formulas
public void calc(Env env)
{
final PlayerTemplate t = (PlayerTemplate) env.player.getTemplate();
- final int lvl = Math.max(env.player.getLevel() - t.getClassBaseLevel(), -50);
- final double hpmod = t.getLevelHpMod() * lvl;
- final double hpmax = (t.getLevelHpAdd() + hpmod) * lvl;
- final double hpmin = (t.getLevelHpAdd() * lvl) + hpmod;
- env.value += (hpmax + hpmin) / 2;
+ env.value += t.getBaseHpMax(env.player.getLevel());
}
}
@@ -754,11 +750,7 @@ public class Formulas
public void calc(Env env)
{
final PlayerTemplate t = (PlayerTemplate) env.player.getTemplate();
- final int lvl = Math.max(env.player.getLevel() - t.getClassBaseLevel(), -50);
- final double cpmod = t.getLevelCpMod() * lvl;
- final double cpmax = (t.getLevelCpAdd() + cpmod) * lvl;
- final double cpmin = (t.getLevelCpAdd() * lvl) + cpmod;
- env.value += (cpmax + cpmin) / 2;
+ env.value += t.getBaseCpMax(env.player.getLevel());
}
}
@@ -801,11 +793,7 @@ public class Formulas
public void calc(Env env)
{
final PlayerTemplate t = (PlayerTemplate) env.player.getTemplate();
- final int lvl = Math.max(env.player.getLevel() - t.getClassBaseLevel(), -50);
- final double mpmod = t.getLevelMpMod() * lvl;
- final double mpmax = (t.getLevelMpAdd() + mpmod) * lvl;
- final double mpmin = (t.getLevelMpAdd() * lvl) + mpmod;
- env.value += (mpmax + mpmin) / 2;
+ env.value += t.getBaseMpMax(env.player.getLevel());
}
}
diff --git a/L2J_Mobius_C6_Interlude/dist/game/data/stats/playerTemplates.xml b/L2J_Mobius_C6_Interlude/dist/game/data/stats/playerTemplates.xml
index b309242623..e70d50be93 100644
--- a/L2J_Mobius_C6_Interlude/dist/game/data/stats/playerTemplates.xml
+++ b/L2J_Mobius_C6_Interlude/dist/game/data/stats/playerTemplates.xml
@@ -1,92 +1,92 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/L2J_Mobius_C6_Interlude/dist/game/data/xsd/playerTemplates.xsd b/L2J_Mobius_C6_Interlude/dist/game/data/xsd/playerTemplates.xsd
index d7e57ffc9f..dec8870f02 100644
--- a/L2J_Mobius_C6_Interlude/dist/game/data/xsd/playerTemplates.xsd
+++ b/L2J_Mobius_C6_Interlude/dist/game/data/xsd/playerTemplates.xsd
@@ -29,15 +29,9 @@
-
-
-
-
-
-
-
-
-
+
+
+
diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/actor/templates/CreatureTemplate.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/actor/templates/CreatureTemplate.java
index 1c9474b57c..75bf44b864 100644
--- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/actor/templates/CreatureTemplate.java
+++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/actor/templates/CreatureTemplate.java
@@ -102,9 +102,9 @@ public class CreatureTemplate
_baseINT = set.getInt("baseINT");
_baseWIT = set.getInt("baseWIT");
_baseMEN = set.getInt("baseMEN");
- _baseHpMax = set.getFloat("baseHpMax");
- _baseCpMax = set.getFloat("baseCpMax");
- _baseMpMax = set.getFloat("baseMpMax");
+ _baseHpMax = set.getFloat("baseHpMax", 1);
+ _baseCpMax = set.getFloat("baseCpMax", 1);
+ _baseMpMax = set.getFloat("baseMpMax", 1);
_baseHpReg = set.getFloat("baseHpReg");
_baseMpReg = set.getFloat("baseMpReg");
_basePAtk = set.getInt("basePAtk");
@@ -113,7 +113,7 @@ public class CreatureTemplate
_baseMDef = set.getInt("baseMDef");
_basePAtkSpd = set.getInt("basePAtkSpd");
_baseMAtkSpd = set.getInt("baseMAtkSpd");
- _baseMReuseRate = set.getFloat("baseMReuseDelay", 1.f);
+ _baseMReuseRate = set.getFloat("baseMReuseDelay", 1);
_baseShldDef = set.getInt("baseShldDef");
_baseAtkRange = set.getInt("baseAtkRange");
_baseShldRate = set.getInt("baseShldRate");
diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/actor/templates/PlayerTemplate.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/actor/templates/PlayerTemplate.java
index dc4b6ab40b..21eca4d02d 100644
--- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/actor/templates/PlayerTemplate.java
+++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/actor/templates/PlayerTemplate.java
@@ -33,16 +33,13 @@ public class PlayerTemplate extends CreatureTemplate
private final ClassId _classId;
private final String _className;
private final int _classBaseLevel;
- private final float _levelHpAdd;
- private final float _levelHpMod;
- private final float _levelCpAdd;
- private final float _levelCpMod;
- private final float _levelMpAdd;
- private final float _levelMpMod;
private final int _spawnX;
private final int _spawnY;
private final int _spawnZ;
private final List _items = new ArrayList<>();
+ private final float[] _hpTable;
+ private final float[] _mpTable;
+ private final float[] _cpTable;
public PlayerTemplate(StatSet set)
{
@@ -54,18 +51,37 @@ public class PlayerTemplate extends CreatureTemplate
_spawnY = set.getInt("spawnY");
_spawnZ = set.getInt("spawnZ");
_classBaseLevel = set.getInt("baseLevel");
- _levelHpAdd = set.getFloat("levelHpAdd");
- _levelHpMod = set.getFloat("levelHpMod");
- _levelCpAdd = set.getFloat("levelCpAdd");
- _levelCpMod = set.getFloat("levelCpMod");
- _levelMpAdd = set.getFloat("levelMpAdd");
- _levelMpMod = set.getFloat("levelMpMod");
+
String[] item;
for (String split : set.getString("items").split(";"))
{
item = split.split(",");
_items.add(new ItemHolder(Integer.parseInt(item[0]), Integer.parseInt(item[1])));
}
+
+ int counter = 0;
+ final String[] hpValues = set.getString("hpTable").split(";");
+ _hpTable = new float[hpValues.length];
+ for (String value : hpValues)
+ {
+ _hpTable[counter++] = Float.valueOf(value);
+ }
+
+ counter = 0;
+ final String[] mpValues = set.getString("mpTable").split(";");
+ _mpTable = new float[mpValues.length];
+ for (String value : mpValues)
+ {
+ _mpTable[counter++] = Float.valueOf(value);
+ }
+
+ counter = 0;
+ final String[] cpValues = set.getString("cpTable").split(";");
+ _cpTable = new float[cpValues.length];
+ for (String value : cpValues)
+ {
+ _cpTable[counter++] = Float.valueOf(value);
+ }
}
public List getItems()
@@ -108,34 +124,31 @@ public class PlayerTemplate extends CreatureTemplate
return _classBaseLevel;
}
- public float getLevelHpAdd()
+ public float getBaseHpMax(int level)
{
- return _levelHpAdd;
+ if (level > _hpTable.length)
+ {
+ return _hpTable[_hpTable.length - 1];
+ }
+ return _hpTable[level - 1];
}
- public float getLevelHpMod()
+ public float getBaseMpMax(int level)
{
- return _levelHpMod;
+ if (level > _mpTable.length)
+ {
+ return _mpTable[_mpTable.length - 1];
+ }
+ return _mpTable[level - 1];
}
- public float getLevelCpAdd()
+ public float getBaseCpMax(int level)
{
- return _levelCpAdd;
- }
-
- public float getLevelCpMod()
- {
- return _levelCpMod;
- }
-
- public float getLevelMpAdd()
- {
- return _levelMpAdd;
- }
-
- public float getLevelMpMod()
- {
- return _levelMpMod;
+ if (level > _cpTable.length)
+ {
+ return _cpTable[_cpTable.length - 1];
+ }
+ return _cpTable[level - 1];
}
public int getBaseFallSafeHeight(boolean female)
diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/skills/Formulas.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/skills/Formulas.java
index aeb35c8029..5b961a5300 100644
--- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/skills/Formulas.java
+++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/skills/Formulas.java
@@ -707,11 +707,7 @@ public class Formulas
public void calc(Env env)
{
final PlayerTemplate t = (PlayerTemplate) env.player.getTemplate();
- final int lvl = Math.max(env.player.getLevel() - t.getClassBaseLevel(), -50);
- final double hpmod = t.getLevelHpMod() * lvl;
- final double hpmax = (t.getLevelHpAdd() + hpmod) * lvl;
- final double hpmin = (t.getLevelHpAdd() * lvl) + hpmod;
- env.value += (hpmax + hpmin) / 2;
+ env.value += t.getBaseHpMax(env.player.getLevel());
}
}
@@ -754,11 +750,7 @@ public class Formulas
public void calc(Env env)
{
final PlayerTemplate t = (PlayerTemplate) env.player.getTemplate();
- final int lvl = Math.max(env.player.getLevel() - t.getClassBaseLevel(), -50);
- final double cpmod = t.getLevelCpMod() * lvl;
- final double cpmax = (t.getLevelCpAdd() + cpmod) * lvl;
- final double cpmin = (t.getLevelCpAdd() * lvl) + cpmod;
- env.value += (cpmax + cpmin) / 2;
+ env.value += t.getBaseCpMax(env.player.getLevel());
}
}
@@ -801,11 +793,7 @@ public class Formulas
public void calc(Env env)
{
final PlayerTemplate t = (PlayerTemplate) env.player.getTemplate();
- final int lvl = Math.max(env.player.getLevel() - t.getClassBaseLevel(), -50);
- final double mpmod = t.getLevelMpMod() * lvl;
- final double mpmax = (t.getLevelMpAdd() + mpmod) * lvl;
- final double mpmin = (t.getLevelMpAdd() * lvl) + mpmod;
- env.value += (mpmax + mpmin) / 2;
+ env.value += t.getBaseMpMax(env.player.getLevel());
}
}