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