Support for single slot augments.

This commit is contained in:
MobiusDevelopment 2021-06-15 22:09:17 +00:00
parent c363229bf4
commit 1dba9f168e
16 changed files with 188 additions and 84 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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