diff --git a/L2J_Mobius_8.0_Homunculus/java/org/l2jmobius/gameserver/data/xml/VariationData.java b/L2J_Mobius_8.0_Homunculus/java/org/l2jmobius/gameserver/data/xml/VariationData.java index 74b32c2e28..fbbef17f54 100644 --- a/L2J_Mobius_8.0_Homunculus/java/org/l2jmobius/gameserver/data/xml/VariationData.java +++ b/L2J_Mobius_8.0_Homunculus/java/org/l2jmobius/gameserver/data/xml/VariationData.java @@ -231,7 +231,7 @@ public class VariationData implements IXmlReader { final Options option1 = variation.getRandomEffect(0, targetItemId); final Options option2 = variation.getRandomEffect(1, targetItemId); - return ((option1 != null) && (option2 != null)) ? new VariationInstance(variation.getMineralId(), option1, option2) : null; + return new VariationInstance(variation.getMineralId(), option1, option2); } public Variation getVariation(int mineralId) diff --git a/L2J_Mobius_8.0_Homunculus/java/org/l2jmobius/gameserver/model/VariationInstance.java b/L2J_Mobius_8.0_Homunculus/java/org/l2jmobius/gameserver/model/VariationInstance.java index 8352db1fd5..da2c01bcf6 100644 --- a/L2J_Mobius_8.0_Homunculus/java/org/l2jmobius/gameserver/model/VariationInstance.java +++ b/L2J_Mobius_8.0_Homunculus/java/org/l2jmobius/gameserver/model/VariationInstance.java @@ -16,8 +16,6 @@ */ package org.l2jmobius.gameserver.model; -import java.util.Objects; - import org.l2jmobius.gameserver.data.xml.OptionData; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.options.Options; @@ -37,17 +35,10 @@ public class VariationInstance _mineralId = mineralId; _option1 = OptionData.getInstance().getOptions(option1Id); _option2 = OptionData.getInstance().getOptions(option2Id); - if ((_option1 == null) || (_option2 == null)) - { - throw new IllegalArgumentException("Couldn't find option for id: " + option1Id + " or id: " + option1Id); - } } public VariationInstance(int mineralId, Options op1, Options op2) { - Objects.requireNonNull(op1); - Objects.requireNonNull(op2); - _mineralId = mineralId; _option1 = op1; _option2 = op2; @@ -60,23 +51,35 @@ public class VariationInstance public int getOption1Id() { - return _option1.getId(); + return _option1 == null ? -1 : _option1.getId(); } public int getOption2Id() { - return _option2.getId(); + return _option2 == null ? -1 : _option2.getId(); } public void applyBonus(PlayerInstance player) { - _option1.apply(player); - _option2.apply(player); + if (_option1 != null) + { + _option1.apply(player); + } + if (_option2 != null) + { + _option2.apply(player); + } } public void removeBonus(PlayerInstance player) { - _option1.remove(player); - _option2.remove(player); + if (_option1 != null) + { + _option1.remove(player); + } + if (_option2 != null) + { + _option2.remove(player); + } } } diff --git a/L2J_Mobius_8.0_Homunculus/java/org/l2jmobius/gameserver/model/options/Variation.java b/L2J_Mobius_8.0_Homunculus/java/org/l2jmobius/gameserver/model/options/Variation.java index 2b8ac65453..07d775ea5a 100644 --- a/L2J_Mobius_8.0_Homunculus/java/org/l2jmobius/gameserver/model/options/Variation.java +++ b/L2J_Mobius_8.0_Homunculus/java/org/l2jmobius/gameserver/model/options/Variation.java @@ -45,11 +45,15 @@ public class Variation public Options getRandomEffect(int order, int targetItemId) { - if ((_effects == null) || (_effects[order] == null)) + if (_effects == null) { LOGGER.warning("Null effect: for mineral " + _mineralId + ", order " + order); return null; } + if (_effects[order] == null) + { + return null; + } return _effects[order].getRandomEffect(targetItemId); } } \ No newline at end of file diff --git a/L2J_Mobius_8.0_Homunculus/java/org/l2jmobius/gameserver/network/clientpackets/RequestRefine.java b/L2J_Mobius_8.0_Homunculus/java/org/l2jmobius/gameserver/network/clientpackets/RequestRefine.java index 1416c43ce0..ad87485fbf 100644 --- a/L2J_Mobius_8.0_Homunculus/java/org/l2jmobius/gameserver/network/clientpackets/RequestRefine.java +++ b/L2J_Mobius_8.0_Homunculus/java/org/l2jmobius/gameserver/network/clientpackets/RequestRefine.java @@ -104,14 +104,33 @@ public class RequestRefine extends AbstractRefinePacket return; } - final VariationInstance augment = VariationData.getInstance().generateRandomVariation(variation, targetItem); + VariationInstance augment = VariationData.getInstance().generateRandomVariation(variation, targetItem); if (augment == null) { player.sendPacket(new ExVariationResult(0, 0, false)); return; } - // unequip item + // Support for single slot augments. + final int option1 = augment.getOption1Id(); + final int option2 = augment.getOption2Id(); + if ((option1 == -1) || (option2 == -1)) + { + final VariationInstance oldAugment = targetItem.getAugmentation(); + if (oldAugment != null) + { + if (option1 == -1) + { + augment = new VariationInstance(augment.getMineralId(), oldAugment.getOption1Id(), option2); + } + else + { + augment = new VariationInstance(augment.getMineralId(), option1, oldAugment.getOption2Id()); + } + } + } + + // Unequip item. final InventoryUpdate iu = new InventoryUpdate(); if (targetItem.isEquipped()) { @@ -122,13 +141,13 @@ public class RequestRefine extends AbstractRefinePacket player.broadcastUserInfo(); } - // consume the life stone + // Consume the life stone. if (!player.destroyItem("RequestRefine", mineralItem, 1, null, false)) { return; } - // consume the gemstones + // Consume the gemstones. if (!player.destroyItem("RequestRefine", feeItem, _feeCount, null, false)) { return; diff --git a/L2J_Mobius_9.0_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/data/xml/VariationData.java b/L2J_Mobius_9.0_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/data/xml/VariationData.java index 74b32c2e28..fbbef17f54 100644 --- a/L2J_Mobius_9.0_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/data/xml/VariationData.java +++ b/L2J_Mobius_9.0_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/data/xml/VariationData.java @@ -231,7 +231,7 @@ public class VariationData implements IXmlReader { final Options option1 = variation.getRandomEffect(0, targetItemId); final Options option2 = variation.getRandomEffect(1, targetItemId); - return ((option1 != null) && (option2 != null)) ? new VariationInstance(variation.getMineralId(), option1, option2) : null; + return new VariationInstance(variation.getMineralId(), option1, option2); } public Variation getVariation(int mineralId) diff --git a/L2J_Mobius_9.0_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/VariationInstance.java b/L2J_Mobius_9.0_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/VariationInstance.java index 8352db1fd5..da2c01bcf6 100644 --- a/L2J_Mobius_9.0_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/VariationInstance.java +++ b/L2J_Mobius_9.0_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/VariationInstance.java @@ -16,8 +16,6 @@ */ package org.l2jmobius.gameserver.model; -import java.util.Objects; - import org.l2jmobius.gameserver.data.xml.OptionData; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.options.Options; @@ -37,17 +35,10 @@ public class VariationInstance _mineralId = mineralId; _option1 = OptionData.getInstance().getOptions(option1Id); _option2 = OptionData.getInstance().getOptions(option2Id); - if ((_option1 == null) || (_option2 == null)) - { - throw new IllegalArgumentException("Couldn't find option for id: " + option1Id + " or id: " + option1Id); - } } public VariationInstance(int mineralId, Options op1, Options op2) { - Objects.requireNonNull(op1); - Objects.requireNonNull(op2); - _mineralId = mineralId; _option1 = op1; _option2 = op2; @@ -60,23 +51,35 @@ public class VariationInstance public int getOption1Id() { - return _option1.getId(); + return _option1 == null ? -1 : _option1.getId(); } public int getOption2Id() { - return _option2.getId(); + return _option2 == null ? -1 : _option2.getId(); } public void applyBonus(PlayerInstance player) { - _option1.apply(player); - _option2.apply(player); + if (_option1 != null) + { + _option1.apply(player); + } + if (_option2 != null) + { + _option2.apply(player); + } } public void removeBonus(PlayerInstance player) { - _option1.remove(player); - _option2.remove(player); + if (_option1 != null) + { + _option1.remove(player); + } + if (_option2 != null) + { + _option2.remove(player); + } } } diff --git a/L2J_Mobius_9.0_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/options/Variation.java b/L2J_Mobius_9.0_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/options/Variation.java index 2b8ac65453..07d775ea5a 100644 --- a/L2J_Mobius_9.0_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/options/Variation.java +++ b/L2J_Mobius_9.0_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/options/Variation.java @@ -45,11 +45,15 @@ public class Variation public Options getRandomEffect(int order, int targetItemId) { - if ((_effects == null) || (_effects[order] == null)) + if (_effects == null) { LOGGER.warning("Null effect: for mineral " + _mineralId + ", order " + order); return null; } + if (_effects[order] == null) + { + return null; + } return _effects[order].getRandomEffect(targetItemId); } } \ No newline at end of file diff --git a/L2J_Mobius_9.0_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/network/clientpackets/RequestRefine.java b/L2J_Mobius_9.0_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/network/clientpackets/RequestRefine.java index 1416c43ce0..ad87485fbf 100644 --- a/L2J_Mobius_9.0_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/network/clientpackets/RequestRefine.java +++ b/L2J_Mobius_9.0_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/network/clientpackets/RequestRefine.java @@ -104,14 +104,33 @@ public class RequestRefine extends AbstractRefinePacket return; } - final VariationInstance augment = VariationData.getInstance().generateRandomVariation(variation, targetItem); + VariationInstance augment = VariationData.getInstance().generateRandomVariation(variation, targetItem); if (augment == null) { player.sendPacket(new ExVariationResult(0, 0, false)); return; } - // unequip item + // Support for single slot augments. + final int option1 = augment.getOption1Id(); + final int option2 = augment.getOption2Id(); + if ((option1 == -1) || (option2 == -1)) + { + final VariationInstance oldAugment = targetItem.getAugmentation(); + if (oldAugment != null) + { + if (option1 == -1) + { + augment = new VariationInstance(augment.getMineralId(), oldAugment.getOption1Id(), option2); + } + else + { + augment = new VariationInstance(augment.getMineralId(), option1, oldAugment.getOption2Id()); + } + } + } + + // Unequip item. final InventoryUpdate iu = new InventoryUpdate(); if (targetItem.isEquipped()) { @@ -122,13 +141,13 @@ public class RequestRefine extends AbstractRefinePacket player.broadcastUserInfo(); } - // consume the life stone + // Consume the life stone. if (!player.destroyItem("RequestRefine", mineralItem, 1, null, false)) { return; } - // consume the gemstones + // Consume the gemstones. if (!player.destroyItem("RequestRefine", feeItem, _feeCount, null, false)) { return; diff --git a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/data/xml/VariationData.java b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/data/xml/VariationData.java index 74b32c2e28..fbbef17f54 100644 --- a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/data/xml/VariationData.java +++ b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/data/xml/VariationData.java @@ -231,7 +231,7 @@ public class VariationData implements IXmlReader { final Options option1 = variation.getRandomEffect(0, targetItemId); final Options option2 = variation.getRandomEffect(1, targetItemId); - return ((option1 != null) && (option2 != null)) ? new VariationInstance(variation.getMineralId(), option1, option2) : null; + return new VariationInstance(variation.getMineralId(), option1, option2); } public Variation getVariation(int mineralId) diff --git a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/VariationInstance.java b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/VariationInstance.java index 8352db1fd5..da2c01bcf6 100644 --- a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/VariationInstance.java +++ b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/VariationInstance.java @@ -16,8 +16,6 @@ */ package org.l2jmobius.gameserver.model; -import java.util.Objects; - import org.l2jmobius.gameserver.data.xml.OptionData; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.options.Options; @@ -37,17 +35,10 @@ public class VariationInstance _mineralId = mineralId; _option1 = OptionData.getInstance().getOptions(option1Id); _option2 = OptionData.getInstance().getOptions(option2Id); - if ((_option1 == null) || (_option2 == null)) - { - throw new IllegalArgumentException("Couldn't find option for id: " + option1Id + " or id: " + option1Id); - } } public VariationInstance(int mineralId, Options op1, Options op2) { - Objects.requireNonNull(op1); - Objects.requireNonNull(op2); - _mineralId = mineralId; _option1 = op1; _option2 = op2; @@ -60,23 +51,35 @@ public class VariationInstance public int getOption1Id() { - return _option1.getId(); + return _option1 == null ? -1 : _option1.getId(); } public int getOption2Id() { - return _option2.getId(); + return _option2 == null ? -1 : _option2.getId(); } public void applyBonus(PlayerInstance player) { - _option1.apply(player); - _option2.apply(player); + if (_option1 != null) + { + _option1.apply(player); + } + if (_option2 != null) + { + _option2.apply(player); + } } public void removeBonus(PlayerInstance player) { - _option1.remove(player); - _option2.remove(player); + if (_option1 != null) + { + _option1.remove(player); + } + if (_option2 != null) + { + _option2.remove(player); + } } } diff --git a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/options/Variation.java b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/options/Variation.java index 2b8ac65453..07d775ea5a 100644 --- a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/options/Variation.java +++ b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/options/Variation.java @@ -45,11 +45,15 @@ public class Variation public Options getRandomEffect(int order, int targetItemId) { - if ((_effects == null) || (_effects[order] == null)) + if (_effects == null) { LOGGER.warning("Null effect: for mineral " + _mineralId + ", order " + order); return null; } + if (_effects[order] == null) + { + return null; + } return _effects[order].getRandomEffect(targetItemId); } } \ No newline at end of file diff --git a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/network/clientpackets/RequestRefine.java b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/network/clientpackets/RequestRefine.java index 1416c43ce0..ad87485fbf 100644 --- a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/network/clientpackets/RequestRefine.java +++ b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/network/clientpackets/RequestRefine.java @@ -104,14 +104,33 @@ public class RequestRefine extends AbstractRefinePacket return; } - final VariationInstance augment = VariationData.getInstance().generateRandomVariation(variation, targetItem); + VariationInstance augment = VariationData.getInstance().generateRandomVariation(variation, targetItem); if (augment == null) { player.sendPacket(new ExVariationResult(0, 0, false)); return; } - // unequip item + // Support for single slot augments. + final int option1 = augment.getOption1Id(); + final int option2 = augment.getOption2Id(); + if ((option1 == -1) || (option2 == -1)) + { + final VariationInstance oldAugment = targetItem.getAugmentation(); + if (oldAugment != null) + { + if (option1 == -1) + { + augment = new VariationInstance(augment.getMineralId(), oldAugment.getOption1Id(), option2); + } + else + { + augment = new VariationInstance(augment.getMineralId(), option1, oldAugment.getOption2Id()); + } + } + } + + // Unequip item. final InventoryUpdate iu = new InventoryUpdate(); if (targetItem.isEquipped()) { @@ -122,13 +141,13 @@ public class RequestRefine extends AbstractRefinePacket player.broadcastUserInfo(); } - // consume the life stone + // Consume the life stone. if (!player.destroyItem("RequestRefine", mineralItem, 1, null, false)) { return; } - // consume the gemstones + // Consume the gemstones. if (!player.destroyItem("RequestRefine", feeItem, _feeCount, null, false)) { return; diff --git a/L2J_Mobius_Essence_5.0_Sylph/java/org/l2jmobius/gameserver/data/xml/VariationData.java b/L2J_Mobius_Essence_5.0_Sylph/java/org/l2jmobius/gameserver/data/xml/VariationData.java index 74b32c2e28..fbbef17f54 100644 --- a/L2J_Mobius_Essence_5.0_Sylph/java/org/l2jmobius/gameserver/data/xml/VariationData.java +++ b/L2J_Mobius_Essence_5.0_Sylph/java/org/l2jmobius/gameserver/data/xml/VariationData.java @@ -231,7 +231,7 @@ public class VariationData implements IXmlReader { final Options option1 = variation.getRandomEffect(0, targetItemId); final Options option2 = variation.getRandomEffect(1, targetItemId); - return ((option1 != null) && (option2 != null)) ? new VariationInstance(variation.getMineralId(), option1, option2) : null; + return new VariationInstance(variation.getMineralId(), option1, option2); } public Variation getVariation(int mineralId) diff --git a/L2J_Mobius_Essence_5.0_Sylph/java/org/l2jmobius/gameserver/model/VariationInstance.java b/L2J_Mobius_Essence_5.0_Sylph/java/org/l2jmobius/gameserver/model/VariationInstance.java index 8352db1fd5..da2c01bcf6 100644 --- a/L2J_Mobius_Essence_5.0_Sylph/java/org/l2jmobius/gameserver/model/VariationInstance.java +++ b/L2J_Mobius_Essence_5.0_Sylph/java/org/l2jmobius/gameserver/model/VariationInstance.java @@ -16,8 +16,6 @@ */ package org.l2jmobius.gameserver.model; -import java.util.Objects; - import org.l2jmobius.gameserver.data.xml.OptionData; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.options.Options; @@ -37,17 +35,10 @@ public class VariationInstance _mineralId = mineralId; _option1 = OptionData.getInstance().getOptions(option1Id); _option2 = OptionData.getInstance().getOptions(option2Id); - if ((_option1 == null) || (_option2 == null)) - { - throw new IllegalArgumentException("Couldn't find option for id: " + option1Id + " or id: " + option1Id); - } } public VariationInstance(int mineralId, Options op1, Options op2) { - Objects.requireNonNull(op1); - Objects.requireNonNull(op2); - _mineralId = mineralId; _option1 = op1; _option2 = op2; @@ -60,23 +51,35 @@ public class VariationInstance public int getOption1Id() { - return _option1.getId(); + return _option1 == null ? -1 : _option1.getId(); } public int getOption2Id() { - return _option2.getId(); + return _option2 == null ? -1 : _option2.getId(); } public void applyBonus(PlayerInstance player) { - _option1.apply(player); - _option2.apply(player); + if (_option1 != null) + { + _option1.apply(player); + } + if (_option2 != null) + { + _option2.apply(player); + } } public void removeBonus(PlayerInstance player) { - _option1.remove(player); - _option2.remove(player); + if (_option1 != null) + { + _option1.remove(player); + } + if (_option2 != null) + { + _option2.remove(player); + } } } diff --git a/L2J_Mobius_Essence_5.0_Sylph/java/org/l2jmobius/gameserver/model/options/Variation.java b/L2J_Mobius_Essence_5.0_Sylph/java/org/l2jmobius/gameserver/model/options/Variation.java index 2b8ac65453..07d775ea5a 100644 --- a/L2J_Mobius_Essence_5.0_Sylph/java/org/l2jmobius/gameserver/model/options/Variation.java +++ b/L2J_Mobius_Essence_5.0_Sylph/java/org/l2jmobius/gameserver/model/options/Variation.java @@ -45,11 +45,15 @@ public class Variation public Options getRandomEffect(int order, int targetItemId) { - if ((_effects == null) || (_effects[order] == null)) + if (_effects == null) { LOGGER.warning("Null effect: for mineral " + _mineralId + ", order " + order); return null; } + if (_effects[order] == null) + { + return null; + } return _effects[order].getRandomEffect(targetItemId); } } \ No newline at end of file diff --git a/L2J_Mobius_Essence_5.0_Sylph/java/org/l2jmobius/gameserver/network/clientpackets/RequestRefine.java b/L2J_Mobius_Essence_5.0_Sylph/java/org/l2jmobius/gameserver/network/clientpackets/RequestRefine.java index 1416c43ce0..ad87485fbf 100644 --- a/L2J_Mobius_Essence_5.0_Sylph/java/org/l2jmobius/gameserver/network/clientpackets/RequestRefine.java +++ b/L2J_Mobius_Essence_5.0_Sylph/java/org/l2jmobius/gameserver/network/clientpackets/RequestRefine.java @@ -104,14 +104,33 @@ public class RequestRefine extends AbstractRefinePacket return; } - final VariationInstance augment = VariationData.getInstance().generateRandomVariation(variation, targetItem); + VariationInstance augment = VariationData.getInstance().generateRandomVariation(variation, targetItem); if (augment == null) { player.sendPacket(new ExVariationResult(0, 0, false)); return; } - // unequip item + // Support for single slot augments. + final int option1 = augment.getOption1Id(); + final int option2 = augment.getOption2Id(); + if ((option1 == -1) || (option2 == -1)) + { + final VariationInstance oldAugment = targetItem.getAugmentation(); + if (oldAugment != null) + { + if (option1 == -1) + { + augment = new VariationInstance(augment.getMineralId(), oldAugment.getOption1Id(), option2); + } + else + { + augment = new VariationInstance(augment.getMineralId(), option1, oldAugment.getOption2Id()); + } + } + } + + // Unequip item. final InventoryUpdate iu = new InventoryUpdate(); if (targetItem.isEquipped()) { @@ -122,13 +141,13 @@ public class RequestRefine extends AbstractRefinePacket player.broadcastUserInfo(); } - // consume the life stone + // Consume the life stone. if (!player.destroyItem("RequestRefine", mineralItem, 1, null, false)) { return; } - // consume the gemstones + // Consume the gemstones. if (!player.destroyItem("RequestRefine", feeItem, _feeCount, null, false)) { return;