diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/ElementalSpirit.java b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/ElementalSpirit.java index 925f0ab816..5bddd4d1ca 100644 --- a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/ElementalSpirit.java +++ b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/ElementalSpirit.java @@ -96,6 +96,13 @@ public class ElementalSpirit while (_data.getExperience() > getExperienceToNextLevel()); } + public void reduceLevel() + { + _data.setLevel((byte) Math.max(1, _data.getLevel() - 1)); + _data.setExperience(ElementalSpiritData.getInstance().getSpirit(getType(), getStage()).getMaxExperienceAtLevel((byte) (getLevel() - 1))); + resetCharacteristics(); + } + public int getAvailableCharacteristicsPoints() { final int stage = _data.getStage(); @@ -118,7 +125,12 @@ public class ElementalSpirit public int getExtractAmount() { - return Math.round(_data.getExperience() / ElementalSpiritData.FRAGMENT_XP_CONSUME); + int amount = Math.round(_data.getExperience() / ElementalSpiritData.FRAGMENT_XP_CONSUME); + if (getLevel() > 1) + { + amount += ElementalSpiritData.getInstance().getSpirit(getType(), getStage()).getMaxExperienceAtLevel((byte) (getLevel() - 1)) / ElementalSpiritData.FRAGMENT_XP_CONSUME; + } + return amount; } public void resetStage() diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/network/clientpackets/elementalspirits/ExElementalSpiritExtract.java b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/network/clientpackets/elementalspirits/ExElementalSpiritExtract.java index 11c4e254d1..d4aebe4fd6 100644 --- a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/network/clientpackets/elementalspirits/ExElementalSpiritExtract.java +++ b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/network/clientpackets/elementalspirits/ExElementalSpiritExtract.java @@ -65,7 +65,7 @@ public class ExElementalSpiritExtract implements IClientIncomingPacket { final int amount = spirit.getExtractAmount(); client.sendPacket(new SystemMessage(SystemMessageId.EXTRACTED_S1_S2_SUCCESSFULLY).addItemName(spirit.getExtractItem()).addInt(amount)); - spirit.resetStage(); + spirit.reduceLevel(); player.addItem("Extract", spirit.getExtractItem(), amount, player, true); final UserInfo userInfo = new UserInfo(player); @@ -78,7 +78,7 @@ public class ExElementalSpiritExtract implements IClientIncomingPacket private boolean checkConditions(PlayerInstance player, ElementalSpirit spirit) { - if (spirit.getExtractAmount() < 1) + if ((spirit.getLevel() < 2) || (spirit.getExtractAmount() < 1)) { player.sendPacket(SystemMessageId.NOT_ENOUGH_ATTRIBUTE_XP_FOR_EXTRACTION); return false; diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/ElementalSpirit.java b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/ElementalSpirit.java index 925f0ab816..5bddd4d1ca 100644 --- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/ElementalSpirit.java +++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/ElementalSpirit.java @@ -96,6 +96,13 @@ public class ElementalSpirit while (_data.getExperience() > getExperienceToNextLevel()); } + public void reduceLevel() + { + _data.setLevel((byte) Math.max(1, _data.getLevel() - 1)); + _data.setExperience(ElementalSpiritData.getInstance().getSpirit(getType(), getStage()).getMaxExperienceAtLevel((byte) (getLevel() - 1))); + resetCharacteristics(); + } + public int getAvailableCharacteristicsPoints() { final int stage = _data.getStage(); @@ -118,7 +125,12 @@ public class ElementalSpirit public int getExtractAmount() { - return Math.round(_data.getExperience() / ElementalSpiritData.FRAGMENT_XP_CONSUME); + int amount = Math.round(_data.getExperience() / ElementalSpiritData.FRAGMENT_XP_CONSUME); + if (getLevel() > 1) + { + amount += ElementalSpiritData.getInstance().getSpirit(getType(), getStage()).getMaxExperienceAtLevel((byte) (getLevel() - 1)) / ElementalSpiritData.FRAGMENT_XP_CONSUME; + } + return amount; } public void resetStage() diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/network/clientpackets/elementalspirits/ExElementalSpiritExtract.java b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/network/clientpackets/elementalspirits/ExElementalSpiritExtract.java index 11c4e254d1..d4aebe4fd6 100644 --- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/network/clientpackets/elementalspirits/ExElementalSpiritExtract.java +++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/network/clientpackets/elementalspirits/ExElementalSpiritExtract.java @@ -65,7 +65,7 @@ public class ExElementalSpiritExtract implements IClientIncomingPacket { final int amount = spirit.getExtractAmount(); client.sendPacket(new SystemMessage(SystemMessageId.EXTRACTED_S1_S2_SUCCESSFULLY).addItemName(spirit.getExtractItem()).addInt(amount)); - spirit.resetStage(); + spirit.reduceLevel(); player.addItem("Extract", spirit.getExtractItem(), amount, player, true); final UserInfo userInfo = new UserInfo(player); @@ -78,7 +78,7 @@ public class ExElementalSpiritExtract implements IClientIncomingPacket private boolean checkConditions(PlayerInstance player, ElementalSpirit spirit) { - if (spirit.getExtractAmount() < 1) + if ((spirit.getLevel() < 2) || (spirit.getExtractAmount() < 1)) { player.sendPacket(SystemMessageId.NOT_ENOUGH_ATTRIBUTE_XP_FOR_EXTRACTION); return false; diff --git a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/ElementalSpirit.java b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/ElementalSpirit.java index 925f0ab816..5bddd4d1ca 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/ElementalSpirit.java +++ b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/ElementalSpirit.java @@ -96,6 +96,13 @@ public class ElementalSpirit while (_data.getExperience() > getExperienceToNextLevel()); } + public void reduceLevel() + { + _data.setLevel((byte) Math.max(1, _data.getLevel() - 1)); + _data.setExperience(ElementalSpiritData.getInstance().getSpirit(getType(), getStage()).getMaxExperienceAtLevel((byte) (getLevel() - 1))); + resetCharacteristics(); + } + public int getAvailableCharacteristicsPoints() { final int stage = _data.getStage(); @@ -118,7 +125,12 @@ public class ElementalSpirit public int getExtractAmount() { - return Math.round(_data.getExperience() / ElementalSpiritData.FRAGMENT_XP_CONSUME); + int amount = Math.round(_data.getExperience() / ElementalSpiritData.FRAGMENT_XP_CONSUME); + if (getLevel() > 1) + { + amount += ElementalSpiritData.getInstance().getSpirit(getType(), getStage()).getMaxExperienceAtLevel((byte) (getLevel() - 1)) / ElementalSpiritData.FRAGMENT_XP_CONSUME; + } + return amount; } public void resetStage() diff --git a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/network/clientpackets/elementalspirits/ExElementalSpiritExtract.java b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/network/clientpackets/elementalspirits/ExElementalSpiritExtract.java index 11c4e254d1..d4aebe4fd6 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/network/clientpackets/elementalspirits/ExElementalSpiritExtract.java +++ b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/network/clientpackets/elementalspirits/ExElementalSpiritExtract.java @@ -65,7 +65,7 @@ public class ExElementalSpiritExtract implements IClientIncomingPacket { final int amount = spirit.getExtractAmount(); client.sendPacket(new SystemMessage(SystemMessageId.EXTRACTED_S1_S2_SUCCESSFULLY).addItemName(spirit.getExtractItem()).addInt(amount)); - spirit.resetStage(); + spirit.reduceLevel(); player.addItem("Extract", spirit.getExtractItem(), amount, player, true); final UserInfo userInfo = new UserInfo(player); @@ -78,7 +78,7 @@ public class ExElementalSpiritExtract implements IClientIncomingPacket private boolean checkConditions(PlayerInstance player, ElementalSpirit spirit) { - if (spirit.getExtractAmount() < 1) + if ((spirit.getLevel() < 2) || (spirit.getExtractAmount() < 1)) { player.sendPacket(SystemMessageId.NOT_ENOUGH_ATTRIBUTE_XP_FOR_EXTRACTION); return false; diff --git a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/ElementalSpirit.java b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/ElementalSpirit.java index 8e21b45a30..2d47ec1a6e 100644 --- a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/ElementalSpirit.java +++ b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/ElementalSpirit.java @@ -96,6 +96,13 @@ public class ElementalSpirit while (_data.getExperience() > getExperienceToNextLevel()); } + public void reduceLevel() + { + _data.setLevel((byte) Math.max(1, _data.getLevel() - 1)); + _data.setExperience(ElementalSpiritData.getInstance().getSpirit(getType(), getStage()).getMaxExperienceAtLevel((byte) (getLevel() - 1))); + resetCharacteristics(); + } + public int getAvailableCharacteristicsPoints() { final int stage = _data.getStage(); @@ -118,7 +125,12 @@ public class ElementalSpirit public int getExtractAmount() { - return Math.round(_data.getExperience() / ElementalSpiritData.FRAGMENT_XP_CONSUME); + int amount = Math.round(_data.getExperience() / ElementalSpiritData.FRAGMENT_XP_CONSUME); + if (getLevel() > 1) + { + amount += ElementalSpiritData.getInstance().getSpirit(getType(), getStage()).getMaxExperienceAtLevel((byte) (getLevel() - 1)) / ElementalSpiritData.FRAGMENT_XP_CONSUME; + } + return amount; } public void resetStage() diff --git a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/network/clientpackets/elementalspirits/ExElementalSpiritExtract.java b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/network/clientpackets/elementalspirits/ExElementalSpiritExtract.java index 11c4e254d1..d4aebe4fd6 100644 --- a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/network/clientpackets/elementalspirits/ExElementalSpiritExtract.java +++ b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/network/clientpackets/elementalspirits/ExElementalSpiritExtract.java @@ -65,7 +65,7 @@ public class ExElementalSpiritExtract implements IClientIncomingPacket { final int amount = spirit.getExtractAmount(); client.sendPacket(new SystemMessage(SystemMessageId.EXTRACTED_S1_S2_SUCCESSFULLY).addItemName(spirit.getExtractItem()).addInt(amount)); - spirit.resetStage(); + spirit.reduceLevel(); player.addItem("Extract", spirit.getExtractItem(), amount, player, true); final UserInfo userInfo = new UserInfo(player); @@ -78,7 +78,7 @@ public class ExElementalSpiritExtract implements IClientIncomingPacket private boolean checkConditions(PlayerInstance player, ElementalSpirit spirit) { - if (spirit.getExtractAmount() < 1) + if ((spirit.getLevel() < 2) || (spirit.getExtractAmount() < 1)) { player.sendPacket(SystemMessageId.NOT_ENOUGH_ATTRIBUTE_XP_FOR_EXTRACTION); return false; diff --git a/L2J_Mobius_Essence_5.0_Sylph/java/org/l2jmobius/gameserver/model/ElementalSpirit.java b/L2J_Mobius_Essence_5.0_Sylph/java/org/l2jmobius/gameserver/model/ElementalSpirit.java index 8e21b45a30..2d47ec1a6e 100644 --- a/L2J_Mobius_Essence_5.0_Sylph/java/org/l2jmobius/gameserver/model/ElementalSpirit.java +++ b/L2J_Mobius_Essence_5.0_Sylph/java/org/l2jmobius/gameserver/model/ElementalSpirit.java @@ -96,6 +96,13 @@ public class ElementalSpirit while (_data.getExperience() > getExperienceToNextLevel()); } + public void reduceLevel() + { + _data.setLevel((byte) Math.max(1, _data.getLevel() - 1)); + _data.setExperience(ElementalSpiritData.getInstance().getSpirit(getType(), getStage()).getMaxExperienceAtLevel((byte) (getLevel() - 1))); + resetCharacteristics(); + } + public int getAvailableCharacteristicsPoints() { final int stage = _data.getStage(); @@ -118,7 +125,12 @@ public class ElementalSpirit public int getExtractAmount() { - return Math.round(_data.getExperience() / ElementalSpiritData.FRAGMENT_XP_CONSUME); + int amount = Math.round(_data.getExperience() / ElementalSpiritData.FRAGMENT_XP_CONSUME); + if (getLevel() > 1) + { + amount += ElementalSpiritData.getInstance().getSpirit(getType(), getStage()).getMaxExperienceAtLevel((byte) (getLevel() - 1)) / ElementalSpiritData.FRAGMENT_XP_CONSUME; + } + return amount; } public void resetStage() diff --git a/L2J_Mobius_Essence_5.0_Sylph/java/org/l2jmobius/gameserver/network/clientpackets/elementalspirits/ExElementalSpiritExtract.java b/L2J_Mobius_Essence_5.0_Sylph/java/org/l2jmobius/gameserver/network/clientpackets/elementalspirits/ExElementalSpiritExtract.java index 11c4e254d1..d4aebe4fd6 100644 --- a/L2J_Mobius_Essence_5.0_Sylph/java/org/l2jmobius/gameserver/network/clientpackets/elementalspirits/ExElementalSpiritExtract.java +++ b/L2J_Mobius_Essence_5.0_Sylph/java/org/l2jmobius/gameserver/network/clientpackets/elementalspirits/ExElementalSpiritExtract.java @@ -65,7 +65,7 @@ public class ExElementalSpiritExtract implements IClientIncomingPacket { final int amount = spirit.getExtractAmount(); client.sendPacket(new SystemMessage(SystemMessageId.EXTRACTED_S1_S2_SUCCESSFULLY).addItemName(spirit.getExtractItem()).addInt(amount)); - spirit.resetStage(); + spirit.reduceLevel(); player.addItem("Extract", spirit.getExtractItem(), amount, player, true); final UserInfo userInfo = new UserInfo(player); @@ -78,7 +78,7 @@ public class ExElementalSpiritExtract implements IClientIncomingPacket private boolean checkConditions(PlayerInstance player, ElementalSpirit spirit) { - if (spirit.getExtractAmount() < 1) + if ((spirit.getLevel() < 2) || (spirit.getExtractAmount() < 1)) { player.sendPacket(SystemMessageId.NOT_ENOUGH_ATTRIBUTE_XP_FOR_EXTRACTION); return false;