Fix for minimum enchant value not used and support for blessed down by one enchant.

Contributed by CostyKiller.
This commit is contained in:
MobiusDevelopment
2020-11-18 09:14:09 +00:00
parent ed61cf165b
commit a99a9449f8
68 changed files with 663 additions and 102 deletions

View File

@ -39,6 +39,7 @@ public abstract class AbstractEnchantItem
EtcItemType.ENCHT_ATTR_ANCIENT_CRYSTAL_ENCHANT_AM,
EtcItemType.ENCHT_ATTR_ANCIENT_CRYSTAL_ENCHANT_WP,
EtcItemType.BLESS_ENCHT_AM,
EtcItemType.BLESS_ENCHT_AM_DOWN,
EtcItemType.BLESS_ENCHT_WP,
EtcItemType.ENCHT_AM,
EtcItemType.ENCHT_WP,
@ -56,6 +57,7 @@ public abstract class AbstractEnchantItem
private final int _id;
private final CrystalType _grade;
private final int _minEnchantLevel;
private final int _maxEnchantLevel;
private final double _bonusRate;
@ -71,6 +73,7 @@ public abstract class AbstractEnchantItem
throw new IllegalAccessError();
}
_grade = set.getEnum("targetGrade", CrystalType.class, CrystalType.NONE);
_minEnchantLevel = set.getInt("maxEnchant", 0);
_maxEnchantLevel = set.getInt("maxEnchant", 127);
_bonusRate = set.getDouble("bonusRate", 0);
}
@ -112,6 +115,14 @@ public abstract class AbstractEnchantItem
*/
public abstract boolean isWeapon();
/**
* @return the minimum enchant level that this scroll/item can be used with
*/
public int getMinEnchantLevel()
{
return _minEnchantLevel;
}
/**
* @return the maximum enchant level that this scroll/item can be used with
*/
@ -139,7 +150,7 @@ public abstract class AbstractEnchantItem
{
return false;
}
else if ((_maxEnchantLevel != 0) && (itemToEnchant.getEnchantLevel() >= _maxEnchantLevel))
else if (((_minEnchantLevel != 0) && (itemToEnchant.getEnchantLevel() < _minEnchantLevel)) && ((_maxEnchantLevel != 0) && (itemToEnchant.getEnchantLevel() >= _maxEnchantLevel)))
{
return false;
}

View File

@ -35,6 +35,7 @@ public class EnchantScroll extends AbstractEnchantItem
{
private final boolean _isWeapon;
private final boolean _isBlessed;
private final boolean _isBlessedDown;
private final boolean _isSafe;
private final boolean _isGiant;
private final int _scrollGroupId;
@ -48,6 +49,7 @@ public class EnchantScroll extends AbstractEnchantItem
final ItemType type = getItem().getItemType();
_isWeapon = (type == EtcItemType.ENCHT_ATTR_ANCIENT_CRYSTAL_ENCHANT_WP) || (type == EtcItemType.BLESS_ENCHT_WP) || (type == EtcItemType.ENCHT_WP) || (type == EtcItemType.GIANT_ENCHT_WP);
_isBlessed = (type == EtcItemType.BLESS_ENCHT_AM) || (type == EtcItemType.BLESS_ENCHT_WP) || (type == EtcItemType.BLESSED_ENCHT_ATTR_INC_PROP_ENCHT_WP) || (type == EtcItemType.BLESSED_ENCHT_ATTR_INC_PROP_ENCHT_AM) || (type == EtcItemType.BLESSED_GIANT_ENCHT_ATTR_INC_PROP_ENCHT_AM) || (type == EtcItemType.BLESSED_GIANT_ENCHT_ATTR_INC_PROP_ENCHT_WP);
_isBlessedDown = (type == EtcItemType.BLESS_ENCHT_AM_DOWN);
_isSafe = (type == EtcItemType.ENCHT_ATTR_ANCIENT_CRYSTAL_ENCHANT_AM) || (type == EtcItemType.ENCHT_ATTR_ANCIENT_CRYSTAL_ENCHANT_WP) || (type == EtcItemType.ENCHT_ATTR_CRYSTAL_ENCHANT_AM) || (type == EtcItemType.ENCHT_ATTR_CRYSTAL_ENCHANT_WP);
_isGiant = (type == EtcItemType.GIANT_ENCHT_AM) || (type == EtcItemType.GIANT_ENCHT_WP);
}
@ -59,13 +61,21 @@ public class EnchantScroll extends AbstractEnchantItem
}
/**
* @return {@code true} for blessed scrolls (enchanted item will remain on failure), {@code false} otherwise
* @return {@code true} for blessed scrolls (enchanted item will remain on failure and enchant value will reset to 0), {@code false} otherwise
*/
public boolean isBlessed()
{
return _isBlessed;
}
/**
* @return {@code true} for blessed scrolls (enchanted item will remain on failure and enchant value will go down by 1), {@code false} otherwise
*/
public boolean isBlessedDown()
{
return _isBlessedDown;
}
/**
* @return {@code true} for safe-enchant scrolls (enchant level will remain on failure), {@code false} otherwise
*/
@ -123,6 +133,10 @@ public class EnchantScroll extends AbstractEnchantItem
{
return false;
}
else if ((isBlessedDown() && !supportItem.isBlessed()) || (!isBlessedDown() && supportItem.isBlessed()))
{
return false;
}
else if ((isGiant() && !supportItem.isGiant()) || (!isGiant() && supportItem.isGiant()))
{
return false;

View File

@ -46,6 +46,7 @@ public enum EtcItemType implements ItemType
GIANT_ENCHT_AM,
BLESS_ENCHT_WP,
BLESS_ENCHT_AM,
BLESS_ENCHT_AM_DOWN,
COUPON,
ELIXIR,
ENCHT_ATTR,

View File

@ -319,12 +319,19 @@ public class RequestEnchantItem implements IClientIncomingPacket
player.broadcastUserInfo();
}
if (scrollTemplate.isBlessed() || ((supportTemplate != null) && supportTemplate.isBlessed()))
if (scrollTemplate.isBlessed() || scrollTemplate.isBlessedDown() || ((supportTemplate != null) && supportTemplate.isBlessed()))
{
// blessed enchant - enchant value down by 1
if (scrollTemplate.isBlessedDown())
{
item.setEnchantLevel(item.getEnchantLevel() - 1);
}
else
// blessed enchant - clear enchant value
client.sendPacket(SystemMessageId.THE_BLESSED_ENCHANT_FAILED_THE_ENCHANT_VALUE_OF_THE_ITEM_BECAME_0);
item.setEnchantLevel(0);
{
client.sendPacket(SystemMessageId.THE_BLESSED_ENCHANT_FAILED_THE_ENCHANT_VALUE_OF_THE_ITEM_BECAME_0);
item.setEnchantLevel(0);
}
item.updateDatabase();
client.sendPacket(new EnchantResult(EnchantResult.BLESSED_FAIL, 0, 0));
if (Config.LOG_ITEM_ENCHANTS)