Fix for minimum enchant value not used and support for blessed down by one enchant.
Contributed by CostyKiller.
This commit is contained in:
@@ -39,6 +39,7 @@ public abstract class AbstractEnchantItem
|
|||||||
EtcItemType.ENCHT_ATTR_ANCIENT_CRYSTAL_ENCHANT_AM,
|
EtcItemType.ENCHT_ATTR_ANCIENT_CRYSTAL_ENCHANT_AM,
|
||||||
EtcItemType.ENCHT_ATTR_ANCIENT_CRYSTAL_ENCHANT_WP,
|
EtcItemType.ENCHT_ATTR_ANCIENT_CRYSTAL_ENCHANT_WP,
|
||||||
EtcItemType.BLESS_ENCHT_AM,
|
EtcItemType.BLESS_ENCHT_AM,
|
||||||
|
EtcItemType.BLESS_ENCHT_AM_DOWN,
|
||||||
EtcItemType.BLESS_ENCHT_WP,
|
EtcItemType.BLESS_ENCHT_WP,
|
||||||
EtcItemType.ENCHT_AM,
|
EtcItemType.ENCHT_AM,
|
||||||
EtcItemType.ENCHT_WP,
|
EtcItemType.ENCHT_WP,
|
||||||
@@ -56,6 +57,7 @@ public abstract class AbstractEnchantItem
|
|||||||
|
|
||||||
private final int _id;
|
private final int _id;
|
||||||
private final CrystalType _grade;
|
private final CrystalType _grade;
|
||||||
|
private final int _minEnchantLevel;
|
||||||
private final int _maxEnchantLevel;
|
private final int _maxEnchantLevel;
|
||||||
private final double _bonusRate;
|
private final double _bonusRate;
|
||||||
|
|
||||||
@@ -71,6 +73,7 @@ public abstract class AbstractEnchantItem
|
|||||||
throw new IllegalAccessError();
|
throw new IllegalAccessError();
|
||||||
}
|
}
|
||||||
_grade = set.getEnum("targetGrade", CrystalType.class, CrystalType.NONE);
|
_grade = set.getEnum("targetGrade", CrystalType.class, CrystalType.NONE);
|
||||||
|
_minEnchantLevel = set.getInt("maxEnchant", 0);
|
||||||
_maxEnchantLevel = set.getInt("maxEnchant", 127);
|
_maxEnchantLevel = set.getInt("maxEnchant", 127);
|
||||||
_bonusRate = set.getDouble("bonusRate", 0);
|
_bonusRate = set.getDouble("bonusRate", 0);
|
||||||
}
|
}
|
||||||
@@ -112,6 +115,14 @@ public abstract class AbstractEnchantItem
|
|||||||
*/
|
*/
|
||||||
public abstract boolean isWeapon();
|
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
|
* @return the maximum enchant level that this scroll/item can be used with
|
||||||
*/
|
*/
|
||||||
@@ -139,7 +150,7 @@ public abstract class AbstractEnchantItem
|
|||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
else if ((_maxEnchantLevel != 0) && (itemToEnchant.getEnchantLevel() >= _maxEnchantLevel))
|
else if (((_minEnchantLevel != 0) && (itemToEnchant.getEnchantLevel() < _minEnchantLevel)) && ((_maxEnchantLevel != 0) && (itemToEnchant.getEnchantLevel() >= _maxEnchantLevel)))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@@ -35,6 +35,7 @@ public class EnchantScroll extends AbstractEnchantItem
|
|||||||
{
|
{
|
||||||
private final boolean _isWeapon;
|
private final boolean _isWeapon;
|
||||||
private final boolean _isBlessed;
|
private final boolean _isBlessed;
|
||||||
|
private final boolean _isBlessedDown;
|
||||||
private final boolean _isSafe;
|
private final boolean _isSafe;
|
||||||
private final boolean _isGiant;
|
private final boolean _isGiant;
|
||||||
private final int _scrollGroupId;
|
private final int _scrollGroupId;
|
||||||
@@ -48,6 +49,7 @@ public class EnchantScroll extends AbstractEnchantItem
|
|||||||
final ItemType type = getItem().getItemType();
|
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);
|
_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);
|
_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);
|
_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);
|
_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()
|
public boolean isBlessed()
|
||||||
{
|
{
|
||||||
return _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
|
* @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;
|
return false;
|
||||||
}
|
}
|
||||||
|
else if ((isBlessedDown() && !supportItem.isBlessed()) || (!isBlessedDown() && supportItem.isBlessed()))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
else if ((isGiant() && !supportItem.isGiant()) || (!isGiant() && supportItem.isGiant()))
|
else if ((isGiant() && !supportItem.isGiant()) || (!isGiant() && supportItem.isGiant()))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
|
@@ -46,6 +46,7 @@ public enum EtcItemType implements ItemType
|
|||||||
GIANT_ENCHT_AM,
|
GIANT_ENCHT_AM,
|
||||||
BLESS_ENCHT_WP,
|
BLESS_ENCHT_WP,
|
||||||
BLESS_ENCHT_AM,
|
BLESS_ENCHT_AM,
|
||||||
|
BLESS_ENCHT_AM_DOWN,
|
||||||
COUPON,
|
COUPON,
|
||||||
ELIXIR,
|
ELIXIR,
|
||||||
ENCHT_ATTR,
|
ENCHT_ATTR,
|
||||||
|
@@ -318,12 +318,19 @@ public class RequestEnchantItem implements IClientIncomingPacket
|
|||||||
player.broadcastUserInfo();
|
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
|
// blessed enchant - clear enchant value
|
||||||
client.sendPacket(SystemMessageId.THE_BLESSED_ENCHANT_FAILED_THE_ENCHANT_VALUE_OF_THE_ITEM_BECAME_0);
|
{
|
||||||
|
client.sendPacket(SystemMessageId.THE_BLESSED_ENCHANT_FAILED_THE_ENCHANT_VALUE_OF_THE_ITEM_BECAME_0);
|
||||||
item.setEnchantLevel(0);
|
item.setEnchantLevel(0);
|
||||||
|
}
|
||||||
item.updateDatabase();
|
item.updateDatabase();
|
||||||
client.sendPacket(new EnchantResult(EnchantResult.BLESSED_FAIL, 0, 0));
|
client.sendPacket(new EnchantResult(EnchantResult.BLESSED_FAIL, 0, 0));
|
||||||
if (Config.LOG_ITEM_ENCHANTS)
|
if (Config.LOG_ITEM_ENCHANTS)
|
||||||
|
@@ -39,6 +39,7 @@ public abstract class AbstractEnchantItem
|
|||||||
EtcItemType.ENCHT_ATTR_ANCIENT_CRYSTAL_ENCHANT_AM,
|
EtcItemType.ENCHT_ATTR_ANCIENT_CRYSTAL_ENCHANT_AM,
|
||||||
EtcItemType.ENCHT_ATTR_ANCIENT_CRYSTAL_ENCHANT_WP,
|
EtcItemType.ENCHT_ATTR_ANCIENT_CRYSTAL_ENCHANT_WP,
|
||||||
EtcItemType.BLESS_ENCHT_AM,
|
EtcItemType.BLESS_ENCHT_AM,
|
||||||
|
EtcItemType.BLESS_ENCHT_AM_DOWN,
|
||||||
EtcItemType.BLESS_ENCHT_WP,
|
EtcItemType.BLESS_ENCHT_WP,
|
||||||
EtcItemType.ENCHT_AM,
|
EtcItemType.ENCHT_AM,
|
||||||
EtcItemType.ENCHT_WP,
|
EtcItemType.ENCHT_WP,
|
||||||
@@ -56,6 +57,7 @@ public abstract class AbstractEnchantItem
|
|||||||
|
|
||||||
private final int _id;
|
private final int _id;
|
||||||
private final CrystalType _grade;
|
private final CrystalType _grade;
|
||||||
|
private final int _minEnchantLevel;
|
||||||
private final int _maxEnchantLevel;
|
private final int _maxEnchantLevel;
|
||||||
private final double _bonusRate;
|
private final double _bonusRate;
|
||||||
|
|
||||||
@@ -71,6 +73,7 @@ public abstract class AbstractEnchantItem
|
|||||||
throw new IllegalAccessError();
|
throw new IllegalAccessError();
|
||||||
}
|
}
|
||||||
_grade = set.getEnum("targetGrade", CrystalType.class, CrystalType.NONE);
|
_grade = set.getEnum("targetGrade", CrystalType.class, CrystalType.NONE);
|
||||||
|
_minEnchantLevel = set.getInt("maxEnchant", 0);
|
||||||
_maxEnchantLevel = set.getInt("maxEnchant", 127);
|
_maxEnchantLevel = set.getInt("maxEnchant", 127);
|
||||||
_bonusRate = set.getDouble("bonusRate", 0);
|
_bonusRate = set.getDouble("bonusRate", 0);
|
||||||
}
|
}
|
||||||
@@ -112,6 +115,14 @@ public abstract class AbstractEnchantItem
|
|||||||
*/
|
*/
|
||||||
public abstract boolean isWeapon();
|
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
|
* @return the maximum enchant level that this scroll/item can be used with
|
||||||
*/
|
*/
|
||||||
@@ -139,7 +150,7 @@ public abstract class AbstractEnchantItem
|
|||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
else if ((_maxEnchantLevel != 0) && (itemToEnchant.getEnchantLevel() >= _maxEnchantLevel))
|
else if (((_minEnchantLevel != 0) && (itemToEnchant.getEnchantLevel() < _minEnchantLevel)) && ((_maxEnchantLevel != 0) && (itemToEnchant.getEnchantLevel() >= _maxEnchantLevel)))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@@ -35,6 +35,7 @@ public class EnchantScroll extends AbstractEnchantItem
|
|||||||
{
|
{
|
||||||
private final boolean _isWeapon;
|
private final boolean _isWeapon;
|
||||||
private final boolean _isBlessed;
|
private final boolean _isBlessed;
|
||||||
|
private final boolean _isBlessedDown;
|
||||||
private final boolean _isSafe;
|
private final boolean _isSafe;
|
||||||
private final boolean _isGiant;
|
private final boolean _isGiant;
|
||||||
private final int _scrollGroupId;
|
private final int _scrollGroupId;
|
||||||
@@ -48,6 +49,7 @@ public class EnchantScroll extends AbstractEnchantItem
|
|||||||
final ItemType type = getItem().getItemType();
|
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);
|
_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);
|
_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);
|
_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);
|
_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()
|
public boolean isBlessed()
|
||||||
{
|
{
|
||||||
return _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
|
* @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;
|
return false;
|
||||||
}
|
}
|
||||||
|
else if ((isBlessedDown() && !supportItem.isBlessed()) || (!isBlessedDown() && supportItem.isBlessed()))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
else if ((isGiant() && !supportItem.isGiant()) || (!isGiant() && supportItem.isGiant()))
|
else if ((isGiant() && !supportItem.isGiant()) || (!isGiant() && supportItem.isGiant()))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
|
@@ -46,6 +46,7 @@ public enum EtcItemType implements ItemType
|
|||||||
GIANT_ENCHT_AM,
|
GIANT_ENCHT_AM,
|
||||||
BLESS_ENCHT_WP,
|
BLESS_ENCHT_WP,
|
||||||
BLESS_ENCHT_AM,
|
BLESS_ENCHT_AM,
|
||||||
|
BLESS_ENCHT_AM_DOWN,
|
||||||
COUPON,
|
COUPON,
|
||||||
ELIXIR,
|
ELIXIR,
|
||||||
ENCHT_ATTR,
|
ENCHT_ATTR,
|
||||||
|
@@ -318,12 +318,19 @@ public class RequestEnchantItem implements IClientIncomingPacket
|
|||||||
player.broadcastUserInfo();
|
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
|
// blessed enchant - clear enchant value
|
||||||
client.sendPacket(SystemMessageId.THE_BLESSED_ENCHANT_FAILED_THE_ENCHANT_VALUE_OF_THE_ITEM_BECAME_0);
|
{
|
||||||
|
client.sendPacket(SystemMessageId.THE_BLESSED_ENCHANT_FAILED_THE_ENCHANT_VALUE_OF_THE_ITEM_BECAME_0);
|
||||||
item.setEnchantLevel(0);
|
item.setEnchantLevel(0);
|
||||||
|
}
|
||||||
item.updateDatabase();
|
item.updateDatabase();
|
||||||
client.sendPacket(new EnchantResult(EnchantResult.BLESSED_FAIL, 0, 0));
|
client.sendPacket(new EnchantResult(EnchantResult.BLESSED_FAIL, 0, 0));
|
||||||
if (Config.LOG_ITEM_ENCHANTS)
|
if (Config.LOG_ITEM_ENCHANTS)
|
||||||
|
@@ -39,6 +39,7 @@ public abstract class AbstractEnchantItem
|
|||||||
EtcItemType.ENCHT_ATTR_ANCIENT_CRYSTAL_ENCHANT_AM,
|
EtcItemType.ENCHT_ATTR_ANCIENT_CRYSTAL_ENCHANT_AM,
|
||||||
EtcItemType.ENCHT_ATTR_ANCIENT_CRYSTAL_ENCHANT_WP,
|
EtcItemType.ENCHT_ATTR_ANCIENT_CRYSTAL_ENCHANT_WP,
|
||||||
EtcItemType.BLESS_ENCHT_AM,
|
EtcItemType.BLESS_ENCHT_AM,
|
||||||
|
EtcItemType.BLESS_ENCHT_AM_DOWN,
|
||||||
EtcItemType.BLESS_ENCHT_WP,
|
EtcItemType.BLESS_ENCHT_WP,
|
||||||
EtcItemType.ENCHT_AM,
|
EtcItemType.ENCHT_AM,
|
||||||
EtcItemType.ENCHT_WP,
|
EtcItemType.ENCHT_WP,
|
||||||
@@ -56,6 +57,7 @@ public abstract class AbstractEnchantItem
|
|||||||
|
|
||||||
private final int _id;
|
private final int _id;
|
||||||
private final CrystalType _grade;
|
private final CrystalType _grade;
|
||||||
|
private final int _minEnchantLevel;
|
||||||
private final int _maxEnchantLevel;
|
private final int _maxEnchantLevel;
|
||||||
private final double _bonusRate;
|
private final double _bonusRate;
|
||||||
|
|
||||||
@@ -71,6 +73,7 @@ public abstract class AbstractEnchantItem
|
|||||||
throw new IllegalAccessError();
|
throw new IllegalAccessError();
|
||||||
}
|
}
|
||||||
_grade = set.getEnum("targetGrade", CrystalType.class, CrystalType.NONE);
|
_grade = set.getEnum("targetGrade", CrystalType.class, CrystalType.NONE);
|
||||||
|
_minEnchantLevel = set.getInt("maxEnchant", 0);
|
||||||
_maxEnchantLevel = set.getInt("maxEnchant", 127);
|
_maxEnchantLevel = set.getInt("maxEnchant", 127);
|
||||||
_bonusRate = set.getDouble("bonusRate", 0);
|
_bonusRate = set.getDouble("bonusRate", 0);
|
||||||
}
|
}
|
||||||
@@ -112,6 +115,14 @@ public abstract class AbstractEnchantItem
|
|||||||
*/
|
*/
|
||||||
public abstract boolean isWeapon();
|
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
|
* @return the maximum enchant level that this scroll/item can be used with
|
||||||
*/
|
*/
|
||||||
@@ -139,7 +150,7 @@ public abstract class AbstractEnchantItem
|
|||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
else if ((_maxEnchantLevel != 0) && (itemToEnchant.getEnchantLevel() >= _maxEnchantLevel))
|
else if (((_minEnchantLevel != 0) && (itemToEnchant.getEnchantLevel() < _minEnchantLevel)) && ((_maxEnchantLevel != 0) && (itemToEnchant.getEnchantLevel() >= _maxEnchantLevel)))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@@ -35,6 +35,7 @@ public class EnchantScroll extends AbstractEnchantItem
|
|||||||
{
|
{
|
||||||
private final boolean _isWeapon;
|
private final boolean _isWeapon;
|
||||||
private final boolean _isBlessed;
|
private final boolean _isBlessed;
|
||||||
|
private final boolean _isBlessedDown;
|
||||||
private final boolean _isSafe;
|
private final boolean _isSafe;
|
||||||
private final boolean _isGiant;
|
private final boolean _isGiant;
|
||||||
private final int _scrollGroupId;
|
private final int _scrollGroupId;
|
||||||
@@ -48,6 +49,7 @@ public class EnchantScroll extends AbstractEnchantItem
|
|||||||
final ItemType type = getItem().getItemType();
|
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);
|
_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);
|
_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);
|
_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);
|
_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()
|
public boolean isBlessed()
|
||||||
{
|
{
|
||||||
return _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
|
* @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;
|
return false;
|
||||||
}
|
}
|
||||||
|
else if ((isBlessedDown() && !supportItem.isBlessed()) || (!isBlessedDown() && supportItem.isBlessed()))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
else if ((isGiant() && !supportItem.isGiant()) || (!isGiant() && supportItem.isGiant()))
|
else if ((isGiant() && !supportItem.isGiant()) || (!isGiant() && supportItem.isGiant()))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
|
@@ -46,6 +46,7 @@ public enum EtcItemType implements ItemType
|
|||||||
GIANT_ENCHT_AM,
|
GIANT_ENCHT_AM,
|
||||||
BLESS_ENCHT_WP,
|
BLESS_ENCHT_WP,
|
||||||
BLESS_ENCHT_AM,
|
BLESS_ENCHT_AM,
|
||||||
|
BLESS_ENCHT_AM_DOWN,
|
||||||
COUPON,
|
COUPON,
|
||||||
ELIXIR,
|
ELIXIR,
|
||||||
ENCHT_ATTR,
|
ENCHT_ATTR,
|
||||||
|
@@ -318,12 +318,19 @@ public class RequestEnchantItem implements IClientIncomingPacket
|
|||||||
player.broadcastUserInfo();
|
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
|
// blessed enchant - clear enchant value
|
||||||
client.sendPacket(SystemMessageId.THE_BLESSED_ENCHANT_FAILED_THE_ENCHANT_VALUE_OF_THE_ITEM_BECAME_0);
|
{
|
||||||
|
client.sendPacket(SystemMessageId.THE_BLESSED_ENCHANT_FAILED_THE_ENCHANT_VALUE_OF_THE_ITEM_BECAME_0);
|
||||||
item.setEnchantLevel(0);
|
item.setEnchantLevel(0);
|
||||||
|
}
|
||||||
item.updateDatabase();
|
item.updateDatabase();
|
||||||
client.sendPacket(new EnchantResult(EnchantResult.BLESSED_FAIL, 0, 0));
|
client.sendPacket(new EnchantResult(EnchantResult.BLESSED_FAIL, 0, 0));
|
||||||
if (Config.LOG_ITEM_ENCHANTS)
|
if (Config.LOG_ITEM_ENCHANTS)
|
||||||
|
@@ -39,6 +39,7 @@ public abstract class AbstractEnchantItem
|
|||||||
EtcItemType.ENCHT_ATTR_ANCIENT_CRYSTAL_ENCHANT_AM,
|
EtcItemType.ENCHT_ATTR_ANCIENT_CRYSTAL_ENCHANT_AM,
|
||||||
EtcItemType.ENCHT_ATTR_ANCIENT_CRYSTAL_ENCHANT_WP,
|
EtcItemType.ENCHT_ATTR_ANCIENT_CRYSTAL_ENCHANT_WP,
|
||||||
EtcItemType.BLESS_ENCHT_AM,
|
EtcItemType.BLESS_ENCHT_AM,
|
||||||
|
EtcItemType.BLESS_ENCHT_AM_DOWN,
|
||||||
EtcItemType.BLESS_ENCHT_WP,
|
EtcItemType.BLESS_ENCHT_WP,
|
||||||
EtcItemType.ENCHT_AM,
|
EtcItemType.ENCHT_AM,
|
||||||
EtcItemType.ENCHT_WP,
|
EtcItemType.ENCHT_WP,
|
||||||
@@ -56,6 +57,7 @@ public abstract class AbstractEnchantItem
|
|||||||
|
|
||||||
private final int _id;
|
private final int _id;
|
||||||
private final CrystalType _grade;
|
private final CrystalType _grade;
|
||||||
|
private final int _minEnchantLevel;
|
||||||
private final int _maxEnchantLevel;
|
private final int _maxEnchantLevel;
|
||||||
private final double _bonusRate;
|
private final double _bonusRate;
|
||||||
|
|
||||||
@@ -71,6 +73,7 @@ public abstract class AbstractEnchantItem
|
|||||||
throw new IllegalAccessError();
|
throw new IllegalAccessError();
|
||||||
}
|
}
|
||||||
_grade = set.getEnum("targetGrade", CrystalType.class, CrystalType.NONE);
|
_grade = set.getEnum("targetGrade", CrystalType.class, CrystalType.NONE);
|
||||||
|
_minEnchantLevel = set.getInt("maxEnchant", 0);
|
||||||
_maxEnchantLevel = set.getInt("maxEnchant", 127);
|
_maxEnchantLevel = set.getInt("maxEnchant", 127);
|
||||||
_bonusRate = set.getDouble("bonusRate", 0);
|
_bonusRate = set.getDouble("bonusRate", 0);
|
||||||
}
|
}
|
||||||
@@ -112,6 +115,14 @@ public abstract class AbstractEnchantItem
|
|||||||
*/
|
*/
|
||||||
public abstract boolean isWeapon();
|
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
|
* @return the maximum enchant level that this scroll/item can be used with
|
||||||
*/
|
*/
|
||||||
@@ -139,7 +150,7 @@ public abstract class AbstractEnchantItem
|
|||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
else if ((_maxEnchantLevel != 0) && (itemToEnchant.getEnchantLevel() >= _maxEnchantLevel))
|
else if (((_minEnchantLevel != 0) && (itemToEnchant.getEnchantLevel() < _minEnchantLevel)) && ((_maxEnchantLevel != 0) && (itemToEnchant.getEnchantLevel() >= _maxEnchantLevel)))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@@ -35,6 +35,7 @@ public class EnchantScroll extends AbstractEnchantItem
|
|||||||
{
|
{
|
||||||
private final boolean _isWeapon;
|
private final boolean _isWeapon;
|
||||||
private final boolean _isBlessed;
|
private final boolean _isBlessed;
|
||||||
|
private final boolean _isBlessedDown;
|
||||||
private final boolean _isSafe;
|
private final boolean _isSafe;
|
||||||
private final boolean _isGiant;
|
private final boolean _isGiant;
|
||||||
private final int _scrollGroupId;
|
private final int _scrollGroupId;
|
||||||
@@ -48,6 +49,7 @@ public class EnchantScroll extends AbstractEnchantItem
|
|||||||
final ItemType type = getItem().getItemType();
|
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);
|
_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);
|
_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);
|
_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);
|
_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()
|
public boolean isBlessed()
|
||||||
{
|
{
|
||||||
return _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
|
* @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;
|
return false;
|
||||||
}
|
}
|
||||||
|
else if ((isBlessedDown() && !supportItem.isBlessed()) || (!isBlessedDown() && supportItem.isBlessed()))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
else if ((isGiant() && !supportItem.isGiant()) || (!isGiant() && supportItem.isGiant()))
|
else if ((isGiant() && !supportItem.isGiant()) || (!isGiant() && supportItem.isGiant()))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
|
@@ -46,6 +46,7 @@ public enum EtcItemType implements ItemType
|
|||||||
GIANT_ENCHT_AM,
|
GIANT_ENCHT_AM,
|
||||||
BLESS_ENCHT_WP,
|
BLESS_ENCHT_WP,
|
||||||
BLESS_ENCHT_AM,
|
BLESS_ENCHT_AM,
|
||||||
|
BLESS_ENCHT_AM_DOWN,
|
||||||
COUPON,
|
COUPON,
|
||||||
ELIXIR,
|
ELIXIR,
|
||||||
ENCHT_ATTR,
|
ENCHT_ATTR,
|
||||||
|
@@ -318,12 +318,19 @@ public class RequestEnchantItem implements IClientIncomingPacket
|
|||||||
player.broadcastUserInfo();
|
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
|
// blessed enchant - clear enchant value
|
||||||
client.sendPacket(SystemMessageId.THE_BLESSED_ENCHANT_FAILED_THE_ENCHANT_VALUE_OF_THE_ITEM_BECAME_0);
|
{
|
||||||
|
client.sendPacket(SystemMessageId.THE_BLESSED_ENCHANT_FAILED_THE_ENCHANT_VALUE_OF_THE_ITEM_BECAME_0);
|
||||||
item.setEnchantLevel(0);
|
item.setEnchantLevel(0);
|
||||||
|
}
|
||||||
item.updateDatabase();
|
item.updateDatabase();
|
||||||
client.sendPacket(new EnchantResult(EnchantResult.BLESSED_FAIL, 0, 0));
|
client.sendPacket(new EnchantResult(EnchantResult.BLESSED_FAIL, 0, 0));
|
||||||
if (Config.LOG_ITEM_ENCHANTS)
|
if (Config.LOG_ITEM_ENCHANTS)
|
||||||
|
@@ -39,6 +39,7 @@ public abstract class AbstractEnchantItem
|
|||||||
EtcItemType.ENCHT_ATTR_ANCIENT_CRYSTAL_ENCHANT_AM,
|
EtcItemType.ENCHT_ATTR_ANCIENT_CRYSTAL_ENCHANT_AM,
|
||||||
EtcItemType.ENCHT_ATTR_ANCIENT_CRYSTAL_ENCHANT_WP,
|
EtcItemType.ENCHT_ATTR_ANCIENT_CRYSTAL_ENCHANT_WP,
|
||||||
EtcItemType.BLESS_ENCHT_AM,
|
EtcItemType.BLESS_ENCHT_AM,
|
||||||
|
EtcItemType.BLESS_ENCHT_AM_DOWN,
|
||||||
EtcItemType.BLESS_ENCHT_WP,
|
EtcItemType.BLESS_ENCHT_WP,
|
||||||
EtcItemType.ENCHT_AM,
|
EtcItemType.ENCHT_AM,
|
||||||
EtcItemType.ENCHT_WP,
|
EtcItemType.ENCHT_WP,
|
||||||
@@ -56,6 +57,7 @@ public abstract class AbstractEnchantItem
|
|||||||
|
|
||||||
private final int _id;
|
private final int _id;
|
||||||
private final CrystalType _grade;
|
private final CrystalType _grade;
|
||||||
|
private final int _minEnchantLevel;
|
||||||
private final int _maxEnchantLevel;
|
private final int _maxEnchantLevel;
|
||||||
private final double _bonusRate;
|
private final double _bonusRate;
|
||||||
|
|
||||||
@@ -71,6 +73,7 @@ public abstract class AbstractEnchantItem
|
|||||||
throw new IllegalAccessError();
|
throw new IllegalAccessError();
|
||||||
}
|
}
|
||||||
_grade = set.getEnum("targetGrade", CrystalType.class, CrystalType.NONE);
|
_grade = set.getEnum("targetGrade", CrystalType.class, CrystalType.NONE);
|
||||||
|
_minEnchantLevel = set.getInt("maxEnchant", 0);
|
||||||
_maxEnchantLevel = set.getInt("maxEnchant", 127);
|
_maxEnchantLevel = set.getInt("maxEnchant", 127);
|
||||||
_bonusRate = set.getDouble("bonusRate", 0);
|
_bonusRate = set.getDouble("bonusRate", 0);
|
||||||
}
|
}
|
||||||
@@ -112,6 +115,14 @@ public abstract class AbstractEnchantItem
|
|||||||
*/
|
*/
|
||||||
public abstract boolean isWeapon();
|
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
|
* @return the maximum enchant level that this scroll/item can be used with
|
||||||
*/
|
*/
|
||||||
@@ -139,7 +150,7 @@ public abstract class AbstractEnchantItem
|
|||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
else if ((_maxEnchantLevel != 0) && (itemToEnchant.getEnchantLevel() >= _maxEnchantLevel))
|
else if (((_minEnchantLevel != 0) && (itemToEnchant.getEnchantLevel() < _minEnchantLevel)) && ((_maxEnchantLevel != 0) && (itemToEnchant.getEnchantLevel() >= _maxEnchantLevel)))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@@ -35,6 +35,7 @@ public class EnchantScroll extends AbstractEnchantItem
|
|||||||
{
|
{
|
||||||
private final boolean _isWeapon;
|
private final boolean _isWeapon;
|
||||||
private final boolean _isBlessed;
|
private final boolean _isBlessed;
|
||||||
|
private final boolean _isBlessedDown;
|
||||||
private final boolean _isSafe;
|
private final boolean _isSafe;
|
||||||
private final boolean _isGiant;
|
private final boolean _isGiant;
|
||||||
private final int _scrollGroupId;
|
private final int _scrollGroupId;
|
||||||
@@ -48,6 +49,7 @@ public class EnchantScroll extends AbstractEnchantItem
|
|||||||
final ItemType type = getItem().getItemType();
|
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);
|
_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);
|
_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);
|
_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);
|
_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()
|
public boolean isBlessed()
|
||||||
{
|
{
|
||||||
return _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
|
* @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;
|
return false;
|
||||||
}
|
}
|
||||||
|
else if ((isBlessedDown() && !supportItem.isBlessed()) || (!isBlessedDown() && supportItem.isBlessed()))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
else if ((isGiant() && !supportItem.isGiant()) || (!isGiant() && supportItem.isGiant()))
|
else if ((isGiant() && !supportItem.isGiant()) || (!isGiant() && supportItem.isGiant()))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
|
@@ -46,6 +46,7 @@ public enum EtcItemType implements ItemType
|
|||||||
GIANT_ENCHT_AM,
|
GIANT_ENCHT_AM,
|
||||||
BLESS_ENCHT_WP,
|
BLESS_ENCHT_WP,
|
||||||
BLESS_ENCHT_AM,
|
BLESS_ENCHT_AM,
|
||||||
|
BLESS_ENCHT_AM_DOWN,
|
||||||
COUPON,
|
COUPON,
|
||||||
ELIXIR,
|
ELIXIR,
|
||||||
ENCHT_ATTR,
|
ENCHT_ATTR,
|
||||||
|
@@ -318,12 +318,19 @@ public class RequestEnchantItem implements IClientIncomingPacket
|
|||||||
player.broadcastUserInfo();
|
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
|
// blessed enchant - clear enchant value
|
||||||
client.sendPacket(SystemMessageId.THE_BLESSED_ENCHANT_FAILED_THE_ENCHANT_VALUE_OF_THE_ITEM_BECAME_0);
|
{
|
||||||
|
client.sendPacket(SystemMessageId.THE_BLESSED_ENCHANT_FAILED_THE_ENCHANT_VALUE_OF_THE_ITEM_BECAME_0);
|
||||||
item.setEnchantLevel(0);
|
item.setEnchantLevel(0);
|
||||||
|
}
|
||||||
item.updateDatabase();
|
item.updateDatabase();
|
||||||
client.sendPacket(new EnchantResult(EnchantResult.BLESSED_FAIL, 0, 0));
|
client.sendPacket(new EnchantResult(EnchantResult.BLESSED_FAIL, 0, 0));
|
||||||
if (Config.LOG_ITEM_ENCHANTS)
|
if (Config.LOG_ITEM_ENCHANTS)
|
||||||
|
@@ -39,6 +39,7 @@ public abstract class AbstractEnchantItem
|
|||||||
EtcItemType.ENCHT_ATTR_ANCIENT_CRYSTAL_ENCHANT_AM,
|
EtcItemType.ENCHT_ATTR_ANCIENT_CRYSTAL_ENCHANT_AM,
|
||||||
EtcItemType.ENCHT_ATTR_ANCIENT_CRYSTAL_ENCHANT_WP,
|
EtcItemType.ENCHT_ATTR_ANCIENT_CRYSTAL_ENCHANT_WP,
|
||||||
EtcItemType.BLESS_ENCHT_AM,
|
EtcItemType.BLESS_ENCHT_AM,
|
||||||
|
EtcItemType.BLESS_ENCHT_AM_DOWN,
|
||||||
EtcItemType.BLESS_ENCHT_WP,
|
EtcItemType.BLESS_ENCHT_WP,
|
||||||
EtcItemType.ENCHT_AM,
|
EtcItemType.ENCHT_AM,
|
||||||
EtcItemType.ENCHT_WP,
|
EtcItemType.ENCHT_WP,
|
||||||
@@ -56,6 +57,7 @@ public abstract class AbstractEnchantItem
|
|||||||
|
|
||||||
private final int _id;
|
private final int _id;
|
||||||
private final CrystalType _grade;
|
private final CrystalType _grade;
|
||||||
|
private final int _minEnchantLevel;
|
||||||
private final int _maxEnchantLevel;
|
private final int _maxEnchantLevel;
|
||||||
private final double _bonusRate;
|
private final double _bonusRate;
|
||||||
|
|
||||||
@@ -71,6 +73,7 @@ public abstract class AbstractEnchantItem
|
|||||||
throw new IllegalAccessError();
|
throw new IllegalAccessError();
|
||||||
}
|
}
|
||||||
_grade = set.getEnum("targetGrade", CrystalType.class, CrystalType.NONE);
|
_grade = set.getEnum("targetGrade", CrystalType.class, CrystalType.NONE);
|
||||||
|
_minEnchantLevel = set.getInt("maxEnchant", 0);
|
||||||
_maxEnchantLevel = set.getInt("maxEnchant", 127);
|
_maxEnchantLevel = set.getInt("maxEnchant", 127);
|
||||||
_bonusRate = set.getDouble("bonusRate", 0);
|
_bonusRate = set.getDouble("bonusRate", 0);
|
||||||
}
|
}
|
||||||
@@ -112,6 +115,14 @@ public abstract class AbstractEnchantItem
|
|||||||
*/
|
*/
|
||||||
public abstract boolean isWeapon();
|
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
|
* @return the maximum enchant level that this scroll/item can be used with
|
||||||
*/
|
*/
|
||||||
@@ -139,7 +150,7 @@ public abstract class AbstractEnchantItem
|
|||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
else if ((_maxEnchantLevel != 0) && (itemToEnchant.getEnchantLevel() >= _maxEnchantLevel))
|
else if (((_minEnchantLevel != 0) && (itemToEnchant.getEnchantLevel() < _minEnchantLevel)) && ((_maxEnchantLevel != 0) && (itemToEnchant.getEnchantLevel() >= _maxEnchantLevel)))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@@ -35,6 +35,7 @@ public class EnchantScroll extends AbstractEnchantItem
|
|||||||
{
|
{
|
||||||
private final boolean _isWeapon;
|
private final boolean _isWeapon;
|
||||||
private final boolean _isBlessed;
|
private final boolean _isBlessed;
|
||||||
|
private final boolean _isBlessedDown;
|
||||||
private final boolean _isSafe;
|
private final boolean _isSafe;
|
||||||
private final boolean _isGiant;
|
private final boolean _isGiant;
|
||||||
private final int _scrollGroupId;
|
private final int _scrollGroupId;
|
||||||
@@ -48,6 +49,7 @@ public class EnchantScroll extends AbstractEnchantItem
|
|||||||
final ItemType type = getItem().getItemType();
|
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);
|
_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);
|
_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);
|
_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);
|
_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()
|
public boolean isBlessed()
|
||||||
{
|
{
|
||||||
return _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
|
* @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;
|
return false;
|
||||||
}
|
}
|
||||||
|
else if ((isBlessedDown() && !supportItem.isBlessed()) || (!isBlessedDown() && supportItem.isBlessed()))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
else if ((isGiant() && !supportItem.isGiant()) || (!isGiant() && supportItem.isGiant()))
|
else if ((isGiant() && !supportItem.isGiant()) || (!isGiant() && supportItem.isGiant()))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
|
@@ -46,6 +46,7 @@ public enum EtcItemType implements ItemType
|
|||||||
GIANT_ENCHT_AM,
|
GIANT_ENCHT_AM,
|
||||||
BLESS_ENCHT_WP,
|
BLESS_ENCHT_WP,
|
||||||
BLESS_ENCHT_AM,
|
BLESS_ENCHT_AM,
|
||||||
|
BLESS_ENCHT_AM_DOWN,
|
||||||
COUPON,
|
COUPON,
|
||||||
ELIXIR,
|
ELIXIR,
|
||||||
ENCHT_ATTR,
|
ENCHT_ATTR,
|
||||||
|
@@ -318,12 +318,19 @@ public class RequestEnchantItem implements IClientIncomingPacket
|
|||||||
player.broadcastUserInfo();
|
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
|
// blessed enchant - clear enchant value
|
||||||
client.sendPacket(SystemMessageId.THE_BLESSED_ENCHANT_FAILED_THE_ENCHANT_VALUE_OF_THE_ITEM_BECAME_0);
|
{
|
||||||
|
client.sendPacket(SystemMessageId.THE_BLESSED_ENCHANT_FAILED_THE_ENCHANT_VALUE_OF_THE_ITEM_BECAME_0);
|
||||||
item.setEnchantLevel(0);
|
item.setEnchantLevel(0);
|
||||||
|
}
|
||||||
item.updateDatabase();
|
item.updateDatabase();
|
||||||
client.sendPacket(new EnchantResult(EnchantResult.BLESSED_FAIL, 0, 0));
|
client.sendPacket(new EnchantResult(EnchantResult.BLESSED_FAIL, 0, 0));
|
||||||
if (Config.LOG_ITEM_ENCHANTS)
|
if (Config.LOG_ITEM_ENCHANTS)
|
||||||
|
@@ -39,6 +39,7 @@ public abstract class AbstractEnchantItem
|
|||||||
EtcItemType.ENCHT_ATTR_ANCIENT_CRYSTAL_ENCHANT_AM,
|
EtcItemType.ENCHT_ATTR_ANCIENT_CRYSTAL_ENCHANT_AM,
|
||||||
EtcItemType.ENCHT_ATTR_ANCIENT_CRYSTAL_ENCHANT_WP,
|
EtcItemType.ENCHT_ATTR_ANCIENT_CRYSTAL_ENCHANT_WP,
|
||||||
EtcItemType.BLESS_ENCHT_AM,
|
EtcItemType.BLESS_ENCHT_AM,
|
||||||
|
EtcItemType.BLESS_ENCHT_AM_DOWN,
|
||||||
EtcItemType.BLESS_ENCHT_WP,
|
EtcItemType.BLESS_ENCHT_WP,
|
||||||
EtcItemType.ENCHT_AM,
|
EtcItemType.ENCHT_AM,
|
||||||
EtcItemType.ENCHT_WP,
|
EtcItemType.ENCHT_WP,
|
||||||
@@ -56,6 +57,7 @@ public abstract class AbstractEnchantItem
|
|||||||
|
|
||||||
private final int _id;
|
private final int _id;
|
||||||
private final CrystalType _grade;
|
private final CrystalType _grade;
|
||||||
|
private final int _minEnchantLevel;
|
||||||
private final int _maxEnchantLevel;
|
private final int _maxEnchantLevel;
|
||||||
private final double _bonusRate;
|
private final double _bonusRate;
|
||||||
|
|
||||||
@@ -71,6 +73,7 @@ public abstract class AbstractEnchantItem
|
|||||||
throw new IllegalAccessError();
|
throw new IllegalAccessError();
|
||||||
}
|
}
|
||||||
_grade = set.getEnum("targetGrade", CrystalType.class, CrystalType.NONE);
|
_grade = set.getEnum("targetGrade", CrystalType.class, CrystalType.NONE);
|
||||||
|
_minEnchantLevel = set.getInt("maxEnchant", 0);
|
||||||
_maxEnchantLevel = set.getInt("maxEnchant", 127);
|
_maxEnchantLevel = set.getInt("maxEnchant", 127);
|
||||||
_bonusRate = set.getDouble("bonusRate", 0);
|
_bonusRate = set.getDouble("bonusRate", 0);
|
||||||
}
|
}
|
||||||
@@ -112,6 +115,14 @@ public abstract class AbstractEnchantItem
|
|||||||
*/
|
*/
|
||||||
public abstract boolean isWeapon();
|
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
|
* @return the maximum enchant level that this scroll/item can be used with
|
||||||
*/
|
*/
|
||||||
@@ -139,7 +150,7 @@ public abstract class AbstractEnchantItem
|
|||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
else if ((_maxEnchantLevel != 0) && (itemToEnchant.getEnchantLevel() >= _maxEnchantLevel))
|
else if (((_minEnchantLevel != 0) && (itemToEnchant.getEnchantLevel() < _minEnchantLevel)) && ((_maxEnchantLevel != 0) && (itemToEnchant.getEnchantLevel() >= _maxEnchantLevel)))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@@ -35,6 +35,7 @@ public class EnchantScroll extends AbstractEnchantItem
|
|||||||
{
|
{
|
||||||
private final boolean _isWeapon;
|
private final boolean _isWeapon;
|
||||||
private final boolean _isBlessed;
|
private final boolean _isBlessed;
|
||||||
|
private final boolean _isBlessedDown;
|
||||||
private final boolean _isSafe;
|
private final boolean _isSafe;
|
||||||
private final boolean _isGiant;
|
private final boolean _isGiant;
|
||||||
private final int _scrollGroupId;
|
private final int _scrollGroupId;
|
||||||
@@ -48,6 +49,7 @@ public class EnchantScroll extends AbstractEnchantItem
|
|||||||
final ItemType type = getItem().getItemType();
|
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);
|
_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);
|
_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);
|
_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);
|
_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()
|
public boolean isBlessed()
|
||||||
{
|
{
|
||||||
return _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
|
* @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;
|
return false;
|
||||||
}
|
}
|
||||||
|
else if ((isBlessedDown() && !supportItem.isBlessed()) || (!isBlessedDown() && supportItem.isBlessed()))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
else if ((isGiant() && !supportItem.isGiant()) || (!isGiant() && supportItem.isGiant()))
|
else if ((isGiant() && !supportItem.isGiant()) || (!isGiant() && supportItem.isGiant()))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
|
@@ -46,6 +46,7 @@ public enum EtcItemType implements ItemType
|
|||||||
GIANT_ENCHT_AM,
|
GIANT_ENCHT_AM,
|
||||||
BLESS_ENCHT_WP,
|
BLESS_ENCHT_WP,
|
||||||
BLESS_ENCHT_AM,
|
BLESS_ENCHT_AM,
|
||||||
|
BLESS_ENCHT_AM_DOWN,
|
||||||
COUPON,
|
COUPON,
|
||||||
ELIXIR,
|
ELIXIR,
|
||||||
ENCHT_ATTR,
|
ENCHT_ATTR,
|
||||||
|
@@ -320,12 +320,19 @@ public class RequestEnchantItem implements IClientIncomingPacket
|
|||||||
player.broadcastUserInfo();
|
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
|
// blessed enchant - clear enchant value
|
||||||
client.sendPacket(SystemMessageId.THE_BLESSED_ENCHANT_FAILED_THE_ENCHANT_VALUE_OF_THE_ITEM_BECAME_0);
|
{
|
||||||
|
client.sendPacket(SystemMessageId.THE_BLESSED_ENCHANT_FAILED_THE_ENCHANT_VALUE_OF_THE_ITEM_BECAME_0);
|
||||||
item.setEnchantLevel(0);
|
item.setEnchantLevel(0);
|
||||||
|
}
|
||||||
item.updateDatabase();
|
item.updateDatabase();
|
||||||
client.sendPacket(new EnchantResult(EnchantResult.BLESSED_FAIL, 0, 0));
|
client.sendPacket(new EnchantResult(EnchantResult.BLESSED_FAIL, 0, 0));
|
||||||
if (Config.LOG_ITEM_ENCHANTS)
|
if (Config.LOG_ITEM_ENCHANTS)
|
||||||
|
@@ -39,6 +39,7 @@ public abstract class AbstractEnchantItem
|
|||||||
EtcItemType.ENCHT_ATTR_ANCIENT_CRYSTAL_ENCHANT_AM,
|
EtcItemType.ENCHT_ATTR_ANCIENT_CRYSTAL_ENCHANT_AM,
|
||||||
EtcItemType.ENCHT_ATTR_ANCIENT_CRYSTAL_ENCHANT_WP,
|
EtcItemType.ENCHT_ATTR_ANCIENT_CRYSTAL_ENCHANT_WP,
|
||||||
EtcItemType.BLESS_ENCHT_AM,
|
EtcItemType.BLESS_ENCHT_AM,
|
||||||
|
EtcItemType.BLESS_ENCHT_AM_DOWN,
|
||||||
EtcItemType.BLESS_ENCHT_WP,
|
EtcItemType.BLESS_ENCHT_WP,
|
||||||
EtcItemType.ENCHT_AM,
|
EtcItemType.ENCHT_AM,
|
||||||
EtcItemType.ENCHT_WP,
|
EtcItemType.ENCHT_WP,
|
||||||
@@ -56,6 +57,7 @@ public abstract class AbstractEnchantItem
|
|||||||
|
|
||||||
private final int _id;
|
private final int _id;
|
||||||
private final CrystalType _grade;
|
private final CrystalType _grade;
|
||||||
|
private final int _minEnchantLevel;
|
||||||
private final int _maxEnchantLevel;
|
private final int _maxEnchantLevel;
|
||||||
private final double _bonusRate;
|
private final double _bonusRate;
|
||||||
|
|
||||||
@@ -71,6 +73,7 @@ public abstract class AbstractEnchantItem
|
|||||||
throw new IllegalAccessError();
|
throw new IllegalAccessError();
|
||||||
}
|
}
|
||||||
_grade = set.getEnum("targetGrade", CrystalType.class, CrystalType.NONE);
|
_grade = set.getEnum("targetGrade", CrystalType.class, CrystalType.NONE);
|
||||||
|
_minEnchantLevel = set.getInt("maxEnchant", 0);
|
||||||
_maxEnchantLevel = set.getInt("maxEnchant", 127);
|
_maxEnchantLevel = set.getInt("maxEnchant", 127);
|
||||||
_bonusRate = set.getDouble("bonusRate", 0);
|
_bonusRate = set.getDouble("bonusRate", 0);
|
||||||
}
|
}
|
||||||
@@ -112,6 +115,14 @@ public abstract class AbstractEnchantItem
|
|||||||
*/
|
*/
|
||||||
public abstract boolean isWeapon();
|
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
|
* @return the maximum enchant level that this scroll/item can be used with
|
||||||
*/
|
*/
|
||||||
@@ -139,7 +150,7 @@ public abstract class AbstractEnchantItem
|
|||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
else if ((_maxEnchantLevel != 0) && (itemToEnchant.getEnchantLevel() >= _maxEnchantLevel))
|
else if (((_minEnchantLevel != 0) && (itemToEnchant.getEnchantLevel() < _minEnchantLevel)) && ((_maxEnchantLevel != 0) && (itemToEnchant.getEnchantLevel() >= _maxEnchantLevel)))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@@ -35,6 +35,7 @@ public class EnchantScroll extends AbstractEnchantItem
|
|||||||
{
|
{
|
||||||
private final boolean _isWeapon;
|
private final boolean _isWeapon;
|
||||||
private final boolean _isBlessed;
|
private final boolean _isBlessed;
|
||||||
|
private final boolean _isBlessedDown;
|
||||||
private final boolean _isSafe;
|
private final boolean _isSafe;
|
||||||
private final boolean _isGiant;
|
private final boolean _isGiant;
|
||||||
private final int _scrollGroupId;
|
private final int _scrollGroupId;
|
||||||
@@ -48,6 +49,7 @@ public class EnchantScroll extends AbstractEnchantItem
|
|||||||
final ItemType type = getItem().getItemType();
|
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);
|
_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);
|
_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);
|
_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);
|
_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()
|
public boolean isBlessed()
|
||||||
{
|
{
|
||||||
return _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
|
* @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;
|
return false;
|
||||||
}
|
}
|
||||||
|
else if ((isBlessedDown() && !supportItem.isBlessed()) || (!isBlessedDown() && supportItem.isBlessed()))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
else if ((isGiant() && !supportItem.isGiant()) || (!isGiant() && supportItem.isGiant()))
|
else if ((isGiant() && !supportItem.isGiant()) || (!isGiant() && supportItem.isGiant()))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
|
@@ -46,6 +46,7 @@ public enum EtcItemType implements ItemType
|
|||||||
GIANT_ENCHT_AM,
|
GIANT_ENCHT_AM,
|
||||||
BLESS_ENCHT_WP,
|
BLESS_ENCHT_WP,
|
||||||
BLESS_ENCHT_AM,
|
BLESS_ENCHT_AM,
|
||||||
|
BLESS_ENCHT_AM_DOWN,
|
||||||
COUPON,
|
COUPON,
|
||||||
ELIXIR,
|
ELIXIR,
|
||||||
ENCHT_ATTR,
|
ENCHT_ATTR,
|
||||||
|
@@ -320,12 +320,19 @@ public class RequestEnchantItem implements IClientIncomingPacket
|
|||||||
player.broadcastUserInfo();
|
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
|
// blessed enchant - clear enchant value
|
||||||
client.sendPacket(SystemMessageId.THE_BLESSED_ENCHANT_FAILED_THE_ENCHANT_VALUE_OF_THE_ITEM_BECAME_0);
|
{
|
||||||
|
client.sendPacket(SystemMessageId.THE_BLESSED_ENCHANT_FAILED_THE_ENCHANT_VALUE_OF_THE_ITEM_BECAME_0);
|
||||||
item.setEnchantLevel(0);
|
item.setEnchantLevel(0);
|
||||||
|
}
|
||||||
item.updateDatabase();
|
item.updateDatabase();
|
||||||
client.sendPacket(new EnchantResult(EnchantResult.BLESSED_FAIL, 0, 0));
|
client.sendPacket(new EnchantResult(EnchantResult.BLESSED_FAIL, 0, 0));
|
||||||
if (Config.LOG_ITEM_ENCHANTS)
|
if (Config.LOG_ITEM_ENCHANTS)
|
||||||
|
@@ -39,6 +39,7 @@ public abstract class AbstractEnchantItem
|
|||||||
EtcItemType.ENCHT_ATTR_ANCIENT_CRYSTAL_ENCHANT_AM,
|
EtcItemType.ENCHT_ATTR_ANCIENT_CRYSTAL_ENCHANT_AM,
|
||||||
EtcItemType.ENCHT_ATTR_ANCIENT_CRYSTAL_ENCHANT_WP,
|
EtcItemType.ENCHT_ATTR_ANCIENT_CRYSTAL_ENCHANT_WP,
|
||||||
EtcItemType.BLESS_ENCHT_AM,
|
EtcItemType.BLESS_ENCHT_AM,
|
||||||
|
EtcItemType.BLESS_ENCHT_AM_DOWN,
|
||||||
EtcItemType.BLESS_ENCHT_WP,
|
EtcItemType.BLESS_ENCHT_WP,
|
||||||
EtcItemType.ENCHT_AM,
|
EtcItemType.ENCHT_AM,
|
||||||
EtcItemType.ENCHT_WP,
|
EtcItemType.ENCHT_WP,
|
||||||
@@ -56,6 +57,7 @@ public abstract class AbstractEnchantItem
|
|||||||
|
|
||||||
private final int _id;
|
private final int _id;
|
||||||
private final CrystalType _grade;
|
private final CrystalType _grade;
|
||||||
|
private final int _minEnchantLevel;
|
||||||
private final int _maxEnchantLevel;
|
private final int _maxEnchantLevel;
|
||||||
private final double _bonusRate;
|
private final double _bonusRate;
|
||||||
|
|
||||||
@@ -71,6 +73,7 @@ public abstract class AbstractEnchantItem
|
|||||||
throw new IllegalAccessError();
|
throw new IllegalAccessError();
|
||||||
}
|
}
|
||||||
_grade = set.getEnum("targetGrade", CrystalType.class, CrystalType.NONE);
|
_grade = set.getEnum("targetGrade", CrystalType.class, CrystalType.NONE);
|
||||||
|
_minEnchantLevel = set.getInt("maxEnchant", 0);
|
||||||
_maxEnchantLevel = set.getInt("maxEnchant", 127);
|
_maxEnchantLevel = set.getInt("maxEnchant", 127);
|
||||||
_bonusRate = set.getDouble("bonusRate", 0);
|
_bonusRate = set.getDouble("bonusRate", 0);
|
||||||
}
|
}
|
||||||
@@ -112,6 +115,14 @@ public abstract class AbstractEnchantItem
|
|||||||
*/
|
*/
|
||||||
public abstract boolean isWeapon();
|
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
|
* @return the maximum enchant level that this scroll/item can be used with
|
||||||
*/
|
*/
|
||||||
@@ -139,7 +150,7 @@ public abstract class AbstractEnchantItem
|
|||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
else if ((_maxEnchantLevel != 0) && (itemToEnchant.getEnchantLevel() >= _maxEnchantLevel))
|
else if (((_minEnchantLevel != 0) && (itemToEnchant.getEnchantLevel() < _minEnchantLevel)) && ((_maxEnchantLevel != 0) && (itemToEnchant.getEnchantLevel() >= _maxEnchantLevel)))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@@ -35,6 +35,7 @@ public class EnchantScroll extends AbstractEnchantItem
|
|||||||
{
|
{
|
||||||
private final boolean _isWeapon;
|
private final boolean _isWeapon;
|
||||||
private final boolean _isBlessed;
|
private final boolean _isBlessed;
|
||||||
|
private final boolean _isBlessedDown;
|
||||||
private final boolean _isSafe;
|
private final boolean _isSafe;
|
||||||
private final boolean _isGiant;
|
private final boolean _isGiant;
|
||||||
private final int _scrollGroupId;
|
private final int _scrollGroupId;
|
||||||
@@ -48,6 +49,7 @@ public class EnchantScroll extends AbstractEnchantItem
|
|||||||
final ItemType type = getItem().getItemType();
|
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);
|
_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);
|
_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);
|
_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);
|
_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()
|
public boolean isBlessed()
|
||||||
{
|
{
|
||||||
return _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
|
* @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;
|
return false;
|
||||||
}
|
}
|
||||||
|
else if ((isBlessedDown() && !supportItem.isBlessed()) || (!isBlessedDown() && supportItem.isBlessed()))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
else if ((isGiant() && !supportItem.isGiant()) || (!isGiant() && supportItem.isGiant()))
|
else if ((isGiant() && !supportItem.isGiant()) || (!isGiant() && supportItem.isGiant()))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
|
@@ -46,6 +46,7 @@ public enum EtcItemType implements ItemType
|
|||||||
GIANT_ENCHT_AM,
|
GIANT_ENCHT_AM,
|
||||||
BLESS_ENCHT_WP,
|
BLESS_ENCHT_WP,
|
||||||
BLESS_ENCHT_AM,
|
BLESS_ENCHT_AM,
|
||||||
|
BLESS_ENCHT_AM_DOWN,
|
||||||
COUPON,
|
COUPON,
|
||||||
ELIXIR,
|
ELIXIR,
|
||||||
ENCHT_ATTR,
|
ENCHT_ATTR,
|
||||||
|
@@ -320,12 +320,19 @@ public class RequestEnchantItem implements IClientIncomingPacket
|
|||||||
player.broadcastUserInfo();
|
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
|
// blessed enchant - clear enchant value
|
||||||
client.sendPacket(SystemMessageId.THE_BLESSED_ENCHANT_FAILED_THE_ENCHANT_VALUE_OF_THE_ITEM_BECAME_0);
|
{
|
||||||
|
client.sendPacket(SystemMessageId.THE_BLESSED_ENCHANT_FAILED_THE_ENCHANT_VALUE_OF_THE_ITEM_BECAME_0);
|
||||||
item.setEnchantLevel(0);
|
item.setEnchantLevel(0);
|
||||||
|
}
|
||||||
item.updateDatabase();
|
item.updateDatabase();
|
||||||
client.sendPacket(new EnchantResult(EnchantResult.BLESSED_FAIL, 0, 0));
|
client.sendPacket(new EnchantResult(EnchantResult.BLESSED_FAIL, 0, 0));
|
||||||
if (Config.LOG_ITEM_ENCHANTS)
|
if (Config.LOG_ITEM_ENCHANTS)
|
||||||
|
@@ -39,6 +39,7 @@ public abstract class AbstractEnchantItem
|
|||||||
EtcItemType.ENCHT_ATTR_ANCIENT_CRYSTAL_ENCHANT_AM,
|
EtcItemType.ENCHT_ATTR_ANCIENT_CRYSTAL_ENCHANT_AM,
|
||||||
EtcItemType.ENCHT_ATTR_ANCIENT_CRYSTAL_ENCHANT_WP,
|
EtcItemType.ENCHT_ATTR_ANCIENT_CRYSTAL_ENCHANT_WP,
|
||||||
EtcItemType.BLESS_ENCHT_AM,
|
EtcItemType.BLESS_ENCHT_AM,
|
||||||
|
EtcItemType.BLESS_ENCHT_AM_DOWN,
|
||||||
EtcItemType.BLESS_ENCHT_WP,
|
EtcItemType.BLESS_ENCHT_WP,
|
||||||
EtcItemType.ENCHT_AM,
|
EtcItemType.ENCHT_AM,
|
||||||
EtcItemType.ENCHT_WP,
|
EtcItemType.ENCHT_WP,
|
||||||
@@ -56,6 +57,7 @@ public abstract class AbstractEnchantItem
|
|||||||
|
|
||||||
private final int _id;
|
private final int _id;
|
||||||
private final CrystalType _grade;
|
private final CrystalType _grade;
|
||||||
|
private final int _minEnchantLevel;
|
||||||
private final int _maxEnchantLevel;
|
private final int _maxEnchantLevel;
|
||||||
private final double _bonusRate;
|
private final double _bonusRate;
|
||||||
|
|
||||||
@@ -71,6 +73,7 @@ public abstract class AbstractEnchantItem
|
|||||||
throw new IllegalAccessError();
|
throw new IllegalAccessError();
|
||||||
}
|
}
|
||||||
_grade = set.getEnum("targetGrade", CrystalType.class, CrystalType.NONE);
|
_grade = set.getEnum("targetGrade", CrystalType.class, CrystalType.NONE);
|
||||||
|
_minEnchantLevel = set.getInt("maxEnchant", 0);
|
||||||
_maxEnchantLevel = set.getInt("maxEnchant", 127);
|
_maxEnchantLevel = set.getInt("maxEnchant", 127);
|
||||||
_bonusRate = set.getDouble("bonusRate", 0);
|
_bonusRate = set.getDouble("bonusRate", 0);
|
||||||
}
|
}
|
||||||
@@ -112,6 +115,14 @@ public abstract class AbstractEnchantItem
|
|||||||
*/
|
*/
|
||||||
public abstract boolean isWeapon();
|
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
|
* @return the maximum enchant level that this scroll/item can be used with
|
||||||
*/
|
*/
|
||||||
@@ -139,7 +150,7 @@ public abstract class AbstractEnchantItem
|
|||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
else if ((_maxEnchantLevel != 0) && (itemToEnchant.getEnchantLevel() >= _maxEnchantLevel))
|
else if (((_minEnchantLevel != 0) && (itemToEnchant.getEnchantLevel() < _minEnchantLevel)) && ((_maxEnchantLevel != 0) && (itemToEnchant.getEnchantLevel() >= _maxEnchantLevel)))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@@ -35,6 +35,7 @@ public class EnchantScroll extends AbstractEnchantItem
|
|||||||
{
|
{
|
||||||
private final boolean _isWeapon;
|
private final boolean _isWeapon;
|
||||||
private final boolean _isBlessed;
|
private final boolean _isBlessed;
|
||||||
|
private final boolean _isBlessedDown;
|
||||||
private final boolean _isSafe;
|
private final boolean _isSafe;
|
||||||
private final boolean _isGiant;
|
private final boolean _isGiant;
|
||||||
private final int _scrollGroupId;
|
private final int _scrollGroupId;
|
||||||
@@ -48,6 +49,7 @@ public class EnchantScroll extends AbstractEnchantItem
|
|||||||
final ItemType type = getItem().getItemType();
|
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);
|
_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);
|
_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);
|
_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);
|
_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()
|
public boolean isBlessed()
|
||||||
{
|
{
|
||||||
return _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
|
* @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;
|
return false;
|
||||||
}
|
}
|
||||||
|
else if ((isBlessedDown() && !supportItem.isBlessed()) || (!isBlessedDown() && supportItem.isBlessed()))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
else if ((isGiant() && !supportItem.isGiant()) || (!isGiant() && supportItem.isGiant()))
|
else if ((isGiant() && !supportItem.isGiant()) || (!isGiant() && supportItem.isGiant()))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
|
@@ -46,6 +46,7 @@ public enum EtcItemType implements ItemType
|
|||||||
GIANT_ENCHT_AM,
|
GIANT_ENCHT_AM,
|
||||||
BLESS_ENCHT_WP,
|
BLESS_ENCHT_WP,
|
||||||
BLESS_ENCHT_AM,
|
BLESS_ENCHT_AM,
|
||||||
|
BLESS_ENCHT_AM_DOWN,
|
||||||
COUPON,
|
COUPON,
|
||||||
ELIXIR,
|
ELIXIR,
|
||||||
ENCHT_ATTR,
|
ENCHT_ATTR,
|
||||||
|
@@ -318,12 +318,19 @@ public class RequestEnchantItem implements IClientIncomingPacket
|
|||||||
player.broadcastUserInfo();
|
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
|
// blessed enchant - clear enchant value
|
||||||
client.sendPacket(SystemMessageId.THE_BLESSED_ENCHANT_FAILED_THE_ENCHANT_VALUE_OF_THE_ITEM_BECAME_0);
|
{
|
||||||
|
client.sendPacket(SystemMessageId.THE_BLESSED_ENCHANT_FAILED_THE_ENCHANT_VALUE_OF_THE_ITEM_BECAME_0);
|
||||||
item.setEnchantLevel(0);
|
item.setEnchantLevel(0);
|
||||||
|
}
|
||||||
item.updateDatabase();
|
item.updateDatabase();
|
||||||
client.sendPacket(new EnchantResult(EnchantResult.BLESSED_FAIL, 0, 0));
|
client.sendPacket(new EnchantResult(EnchantResult.BLESSED_FAIL, 0, 0));
|
||||||
if (Config.LOG_ITEM_ENCHANTS)
|
if (Config.LOG_ITEM_ENCHANTS)
|
||||||
|
@@ -39,6 +39,7 @@ public abstract class AbstractEnchantItem
|
|||||||
EtcItemType.ENCHT_ATTR_ANCIENT_CRYSTAL_ENCHANT_AM,
|
EtcItemType.ENCHT_ATTR_ANCIENT_CRYSTAL_ENCHANT_AM,
|
||||||
EtcItemType.ENCHT_ATTR_ANCIENT_CRYSTAL_ENCHANT_WP,
|
EtcItemType.ENCHT_ATTR_ANCIENT_CRYSTAL_ENCHANT_WP,
|
||||||
EtcItemType.BLESS_ENCHT_AM,
|
EtcItemType.BLESS_ENCHT_AM,
|
||||||
|
EtcItemType.BLESS_ENCHT_AM_DOWN,
|
||||||
EtcItemType.BLESS_ENCHT_WP,
|
EtcItemType.BLESS_ENCHT_WP,
|
||||||
EtcItemType.ENCHT_AM,
|
EtcItemType.ENCHT_AM,
|
||||||
EtcItemType.ENCHT_WP,
|
EtcItemType.ENCHT_WP,
|
||||||
@@ -56,6 +57,7 @@ public abstract class AbstractEnchantItem
|
|||||||
|
|
||||||
private final int _id;
|
private final int _id;
|
||||||
private final CrystalType _grade;
|
private final CrystalType _grade;
|
||||||
|
private final int _minEnchantLevel;
|
||||||
private final int _maxEnchantLevel;
|
private final int _maxEnchantLevel;
|
||||||
private final double _bonusRate;
|
private final double _bonusRate;
|
||||||
|
|
||||||
@@ -71,6 +73,7 @@ public abstract class AbstractEnchantItem
|
|||||||
throw new IllegalAccessError();
|
throw new IllegalAccessError();
|
||||||
}
|
}
|
||||||
_grade = set.getEnum("targetGrade", CrystalType.class, CrystalType.NONE);
|
_grade = set.getEnum("targetGrade", CrystalType.class, CrystalType.NONE);
|
||||||
|
_minEnchantLevel = set.getInt("maxEnchant", 0);
|
||||||
_maxEnchantLevel = set.getInt("maxEnchant", 127);
|
_maxEnchantLevel = set.getInt("maxEnchant", 127);
|
||||||
_bonusRate = set.getDouble("bonusRate", 0);
|
_bonusRate = set.getDouble("bonusRate", 0);
|
||||||
}
|
}
|
||||||
@@ -112,6 +115,14 @@ public abstract class AbstractEnchantItem
|
|||||||
*/
|
*/
|
||||||
public abstract boolean isWeapon();
|
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
|
* @return the maximum enchant level that this scroll/item can be used with
|
||||||
*/
|
*/
|
||||||
@@ -139,7 +150,7 @@ public abstract class AbstractEnchantItem
|
|||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
else if ((_maxEnchantLevel != 0) && (itemToEnchant.getEnchantLevel() >= _maxEnchantLevel))
|
else if (((_minEnchantLevel != 0) && (itemToEnchant.getEnchantLevel() < _minEnchantLevel)) && ((_maxEnchantLevel != 0) && (itemToEnchant.getEnchantLevel() >= _maxEnchantLevel)))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@@ -35,6 +35,7 @@ public class EnchantScroll extends AbstractEnchantItem
|
|||||||
{
|
{
|
||||||
private final boolean _isWeapon;
|
private final boolean _isWeapon;
|
||||||
private final boolean _isBlessed;
|
private final boolean _isBlessed;
|
||||||
|
private final boolean _isBlessedDown;
|
||||||
private final boolean _isSafe;
|
private final boolean _isSafe;
|
||||||
private final boolean _isGiant;
|
private final boolean _isGiant;
|
||||||
private final int _scrollGroupId;
|
private final int _scrollGroupId;
|
||||||
@@ -48,6 +49,7 @@ public class EnchantScroll extends AbstractEnchantItem
|
|||||||
final ItemType type = getItem().getItemType();
|
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);
|
_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);
|
_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);
|
_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);
|
_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()
|
public boolean isBlessed()
|
||||||
{
|
{
|
||||||
return _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
|
* @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;
|
return false;
|
||||||
}
|
}
|
||||||
|
else if ((isBlessedDown() && !supportItem.isBlessed()) || (!isBlessedDown() && supportItem.isBlessed()))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
else if ((isGiant() && !supportItem.isGiant()) || (!isGiant() && supportItem.isGiant()))
|
else if ((isGiant() && !supportItem.isGiant()) || (!isGiant() && supportItem.isGiant()))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
|
@@ -46,6 +46,7 @@ public enum EtcItemType implements ItemType
|
|||||||
GIANT_ENCHT_AM,
|
GIANT_ENCHT_AM,
|
||||||
BLESS_ENCHT_WP,
|
BLESS_ENCHT_WP,
|
||||||
BLESS_ENCHT_AM,
|
BLESS_ENCHT_AM,
|
||||||
|
BLESS_ENCHT_AM_DOWN,
|
||||||
COUPON,
|
COUPON,
|
||||||
ELIXIR,
|
ELIXIR,
|
||||||
ENCHT_ATTR,
|
ENCHT_ATTR,
|
||||||
|
@@ -318,12 +318,19 @@ public class RequestEnchantItem implements IClientIncomingPacket
|
|||||||
player.broadcastUserInfo();
|
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
|
// blessed enchant - clear enchant value
|
||||||
client.sendPacket(SystemMessageId.THE_BLESSED_ENCHANT_FAILED_THE_ENCHANT_VALUE_OF_THE_ITEM_BECAME_0);
|
{
|
||||||
|
client.sendPacket(SystemMessageId.THE_BLESSED_ENCHANT_FAILED_THE_ENCHANT_VALUE_OF_THE_ITEM_BECAME_0);
|
||||||
item.setEnchantLevel(0);
|
item.setEnchantLevel(0);
|
||||||
|
}
|
||||||
item.updateDatabase();
|
item.updateDatabase();
|
||||||
client.sendPacket(new EnchantResult(EnchantResult.BLESSED_FAIL, 0, 0));
|
client.sendPacket(new EnchantResult(EnchantResult.BLESSED_FAIL, 0, 0));
|
||||||
if (Config.LOG_ITEM_ENCHANTS)
|
if (Config.LOG_ITEM_ENCHANTS)
|
||||||
|
@@ -39,6 +39,7 @@ public abstract class AbstractEnchantItem
|
|||||||
EtcItemType.ENCHT_ATTR_ANCIENT_CRYSTAL_ENCHANT_AM,
|
EtcItemType.ENCHT_ATTR_ANCIENT_CRYSTAL_ENCHANT_AM,
|
||||||
EtcItemType.ENCHT_ATTR_ANCIENT_CRYSTAL_ENCHANT_WP,
|
EtcItemType.ENCHT_ATTR_ANCIENT_CRYSTAL_ENCHANT_WP,
|
||||||
EtcItemType.BLESS_ENCHT_AM,
|
EtcItemType.BLESS_ENCHT_AM,
|
||||||
|
EtcItemType.BLESS_ENCHT_AM_DOWN,
|
||||||
EtcItemType.BLESS_ENCHT_WP,
|
EtcItemType.BLESS_ENCHT_WP,
|
||||||
EtcItemType.ENCHT_AM,
|
EtcItemType.ENCHT_AM,
|
||||||
EtcItemType.ENCHT_WP,
|
EtcItemType.ENCHT_WP,
|
||||||
@@ -56,6 +57,7 @@ public abstract class AbstractEnchantItem
|
|||||||
|
|
||||||
private final int _id;
|
private final int _id;
|
||||||
private final CrystalType _grade;
|
private final CrystalType _grade;
|
||||||
|
private final int _minEnchantLevel;
|
||||||
private final int _maxEnchantLevel;
|
private final int _maxEnchantLevel;
|
||||||
private final double _bonusRate;
|
private final double _bonusRate;
|
||||||
|
|
||||||
@@ -71,6 +73,7 @@ public abstract class AbstractEnchantItem
|
|||||||
throw new IllegalAccessError();
|
throw new IllegalAccessError();
|
||||||
}
|
}
|
||||||
_grade = set.getEnum("targetGrade", CrystalType.class, CrystalType.NONE);
|
_grade = set.getEnum("targetGrade", CrystalType.class, CrystalType.NONE);
|
||||||
|
_minEnchantLevel = set.getInt("maxEnchant", 0);
|
||||||
_maxEnchantLevel = set.getInt("maxEnchant", 127);
|
_maxEnchantLevel = set.getInt("maxEnchant", 127);
|
||||||
_bonusRate = set.getDouble("bonusRate", 0);
|
_bonusRate = set.getDouble("bonusRate", 0);
|
||||||
}
|
}
|
||||||
@@ -112,6 +115,14 @@ public abstract class AbstractEnchantItem
|
|||||||
*/
|
*/
|
||||||
public abstract boolean isWeapon();
|
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
|
* @return the maximum enchant level that this scroll/item can be used with
|
||||||
*/
|
*/
|
||||||
@@ -139,7 +150,7 @@ public abstract class AbstractEnchantItem
|
|||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
else if ((_maxEnchantLevel != 0) && (itemToEnchant.getEnchantLevel() >= _maxEnchantLevel))
|
else if (((_minEnchantLevel != 0) && (itemToEnchant.getEnchantLevel() < _minEnchantLevel)) && ((_maxEnchantLevel != 0) && (itemToEnchant.getEnchantLevel() >= _maxEnchantLevel)))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@@ -35,6 +35,7 @@ public class EnchantScroll extends AbstractEnchantItem
|
|||||||
{
|
{
|
||||||
private final boolean _isWeapon;
|
private final boolean _isWeapon;
|
||||||
private final boolean _isBlessed;
|
private final boolean _isBlessed;
|
||||||
|
private final boolean _isBlessedDown;
|
||||||
private final boolean _isSafe;
|
private final boolean _isSafe;
|
||||||
private final boolean _isGiant;
|
private final boolean _isGiant;
|
||||||
private final int _scrollGroupId;
|
private final int _scrollGroupId;
|
||||||
@@ -48,6 +49,7 @@ public class EnchantScroll extends AbstractEnchantItem
|
|||||||
final ItemType type = getItem().getItemType();
|
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);
|
_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);
|
_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);
|
_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);
|
_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()
|
public boolean isBlessed()
|
||||||
{
|
{
|
||||||
return _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
|
* @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;
|
return false;
|
||||||
}
|
}
|
||||||
|
else if ((isBlessedDown() && !supportItem.isBlessed()) || (!isBlessedDown() && supportItem.isBlessed()))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
else if ((isGiant() && !supportItem.isGiant()) || (!isGiant() && supportItem.isGiant()))
|
else if ((isGiant() && !supportItem.isGiant()) || (!isGiant() && supportItem.isGiant()))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
|
@@ -46,6 +46,7 @@ public enum EtcItemType implements ItemType
|
|||||||
GIANT_ENCHT_AM,
|
GIANT_ENCHT_AM,
|
||||||
BLESS_ENCHT_WP,
|
BLESS_ENCHT_WP,
|
||||||
BLESS_ENCHT_AM,
|
BLESS_ENCHT_AM,
|
||||||
|
BLESS_ENCHT_AM_DOWN,
|
||||||
COUPON,
|
COUPON,
|
||||||
ELIXIR,
|
ELIXIR,
|
||||||
ENCHT_ATTR,
|
ENCHT_ATTR,
|
||||||
|
@@ -318,12 +318,19 @@ public class RequestEnchantItem implements IClientIncomingPacket
|
|||||||
player.broadcastUserInfo();
|
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
|
// blessed enchant - clear enchant value
|
||||||
client.sendPacket(SystemMessageId.THE_BLESSED_ENCHANT_FAILED_THE_ENCHANT_VALUE_OF_THE_ITEM_BECAME_0);
|
{
|
||||||
|
client.sendPacket(SystemMessageId.THE_BLESSED_ENCHANT_FAILED_THE_ENCHANT_VALUE_OF_THE_ITEM_BECAME_0);
|
||||||
item.setEnchantLevel(0);
|
item.setEnchantLevel(0);
|
||||||
|
}
|
||||||
item.updateDatabase();
|
item.updateDatabase();
|
||||||
client.sendPacket(new EnchantResult(EnchantResult.BLESSED_FAIL, 0, 0));
|
client.sendPacket(new EnchantResult(EnchantResult.BLESSED_FAIL, 0, 0));
|
||||||
if (Config.LOG_ITEM_ENCHANTS)
|
if (Config.LOG_ITEM_ENCHANTS)
|
||||||
|
@@ -39,6 +39,7 @@ public abstract class AbstractEnchantItem
|
|||||||
EtcItemType.ENCHT_ATTR_ANCIENT_CRYSTAL_ENCHANT_AM,
|
EtcItemType.ENCHT_ATTR_ANCIENT_CRYSTAL_ENCHANT_AM,
|
||||||
EtcItemType.ENCHT_ATTR_ANCIENT_CRYSTAL_ENCHANT_WP,
|
EtcItemType.ENCHT_ATTR_ANCIENT_CRYSTAL_ENCHANT_WP,
|
||||||
EtcItemType.BLESS_ENCHT_AM,
|
EtcItemType.BLESS_ENCHT_AM,
|
||||||
|
EtcItemType.BLESS_ENCHT_AM_DOWN,
|
||||||
EtcItemType.BLESS_ENCHT_WP,
|
EtcItemType.BLESS_ENCHT_WP,
|
||||||
EtcItemType.ENCHT_AM,
|
EtcItemType.ENCHT_AM,
|
||||||
EtcItemType.ENCHT_WP,
|
EtcItemType.ENCHT_WP,
|
||||||
@@ -56,6 +57,7 @@ public abstract class AbstractEnchantItem
|
|||||||
|
|
||||||
private final int _id;
|
private final int _id;
|
||||||
private final CrystalType _grade;
|
private final CrystalType _grade;
|
||||||
|
private final int _minEnchantLevel;
|
||||||
private final int _maxEnchantLevel;
|
private final int _maxEnchantLevel;
|
||||||
private final double _bonusRate;
|
private final double _bonusRate;
|
||||||
|
|
||||||
@@ -71,6 +73,7 @@ public abstract class AbstractEnchantItem
|
|||||||
throw new IllegalAccessError();
|
throw new IllegalAccessError();
|
||||||
}
|
}
|
||||||
_grade = set.getEnum("targetGrade", CrystalType.class, CrystalType.NONE);
|
_grade = set.getEnum("targetGrade", CrystalType.class, CrystalType.NONE);
|
||||||
|
_minEnchantLevel = set.getInt("maxEnchant", 0);
|
||||||
_maxEnchantLevel = set.getInt("maxEnchant", 127);
|
_maxEnchantLevel = set.getInt("maxEnchant", 127);
|
||||||
_bonusRate = set.getDouble("bonusRate", 0);
|
_bonusRate = set.getDouble("bonusRate", 0);
|
||||||
}
|
}
|
||||||
@@ -112,6 +115,14 @@ public abstract class AbstractEnchantItem
|
|||||||
*/
|
*/
|
||||||
public abstract boolean isWeapon();
|
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
|
* @return the maximum enchant level that this scroll/item can be used with
|
||||||
*/
|
*/
|
||||||
@@ -139,7 +150,7 @@ public abstract class AbstractEnchantItem
|
|||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
else if ((_maxEnchantLevel != 0) && (itemToEnchant.getEnchantLevel() >= _maxEnchantLevel))
|
else if (((_minEnchantLevel != 0) && (itemToEnchant.getEnchantLevel() < _minEnchantLevel)) && ((_maxEnchantLevel != 0) && (itemToEnchant.getEnchantLevel() >= _maxEnchantLevel)))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@@ -35,6 +35,7 @@ public class EnchantScroll extends AbstractEnchantItem
|
|||||||
{
|
{
|
||||||
private final boolean _isWeapon;
|
private final boolean _isWeapon;
|
||||||
private final boolean _isBlessed;
|
private final boolean _isBlessed;
|
||||||
|
private final boolean _isBlessedDown;
|
||||||
private final boolean _isSafe;
|
private final boolean _isSafe;
|
||||||
private final boolean _isGiant;
|
private final boolean _isGiant;
|
||||||
private final int _scrollGroupId;
|
private final int _scrollGroupId;
|
||||||
@@ -48,6 +49,7 @@ public class EnchantScroll extends AbstractEnchantItem
|
|||||||
final ItemType type = getItem().getItemType();
|
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);
|
_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);
|
_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);
|
_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);
|
_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()
|
public boolean isBlessed()
|
||||||
{
|
{
|
||||||
return _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
|
* @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;
|
return false;
|
||||||
}
|
}
|
||||||
|
else if ((isBlessedDown() && !supportItem.isBlessed()) || (!isBlessedDown() && supportItem.isBlessed()))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
else if ((isGiant() && !supportItem.isGiant()) || (!isGiant() && supportItem.isGiant()))
|
else if ((isGiant() && !supportItem.isGiant()) || (!isGiant() && supportItem.isGiant()))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
|
@@ -46,6 +46,7 @@ public enum EtcItemType implements ItemType
|
|||||||
GIANT_ENCHT_AM,
|
GIANT_ENCHT_AM,
|
||||||
BLESS_ENCHT_WP,
|
BLESS_ENCHT_WP,
|
||||||
BLESS_ENCHT_AM,
|
BLESS_ENCHT_AM,
|
||||||
|
BLESS_ENCHT_AM_DOWN,
|
||||||
COUPON,
|
COUPON,
|
||||||
ELIXIR,
|
ELIXIR,
|
||||||
ENCHT_ATTR,
|
ENCHT_ATTR,
|
||||||
|
@@ -318,12 +318,19 @@ public class RequestEnchantItem implements IClientIncomingPacket
|
|||||||
player.broadcastUserInfo();
|
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
|
// blessed enchant - clear enchant value
|
||||||
client.sendPacket(SystemMessageId.THE_BLESSED_ENCHANT_FAILED_THE_ENCHANT_VALUE_OF_THE_ITEM_BECAME_0);
|
{
|
||||||
|
client.sendPacket(SystemMessageId.THE_BLESSED_ENCHANT_FAILED_THE_ENCHANT_VALUE_OF_THE_ITEM_BECAME_0);
|
||||||
item.setEnchantLevel(0);
|
item.setEnchantLevel(0);
|
||||||
|
}
|
||||||
item.updateDatabase();
|
item.updateDatabase();
|
||||||
client.sendPacket(new EnchantResult(EnchantResult.BLESSED_FAIL, 0, 0));
|
client.sendPacket(new EnchantResult(EnchantResult.BLESSED_FAIL, 0, 0));
|
||||||
if (Config.LOG_ITEM_ENCHANTS)
|
if (Config.LOG_ITEM_ENCHANTS)
|
||||||
|
@@ -39,6 +39,7 @@ public abstract class AbstractEnchantItem
|
|||||||
EtcItemType.ENCHT_ATTR_ANCIENT_CRYSTAL_ENCHANT_AM,
|
EtcItemType.ENCHT_ATTR_ANCIENT_CRYSTAL_ENCHANT_AM,
|
||||||
EtcItemType.ENCHT_ATTR_ANCIENT_CRYSTAL_ENCHANT_WP,
|
EtcItemType.ENCHT_ATTR_ANCIENT_CRYSTAL_ENCHANT_WP,
|
||||||
EtcItemType.BLESS_ENCHT_AM,
|
EtcItemType.BLESS_ENCHT_AM,
|
||||||
|
EtcItemType.BLESS_ENCHT_AM_DOWN,
|
||||||
EtcItemType.BLESS_ENCHT_WP,
|
EtcItemType.BLESS_ENCHT_WP,
|
||||||
EtcItemType.ENCHT_AM,
|
EtcItemType.ENCHT_AM,
|
||||||
EtcItemType.ENCHT_WP,
|
EtcItemType.ENCHT_WP,
|
||||||
@@ -56,6 +57,7 @@ public abstract class AbstractEnchantItem
|
|||||||
|
|
||||||
private final int _id;
|
private final int _id;
|
||||||
private final CrystalType _grade;
|
private final CrystalType _grade;
|
||||||
|
private final int _minEnchantLevel;
|
||||||
private final int _maxEnchantLevel;
|
private final int _maxEnchantLevel;
|
||||||
private final double _bonusRate;
|
private final double _bonusRate;
|
||||||
|
|
||||||
@@ -71,6 +73,7 @@ public abstract class AbstractEnchantItem
|
|||||||
throw new IllegalAccessError();
|
throw new IllegalAccessError();
|
||||||
}
|
}
|
||||||
_grade = set.getEnum("targetGrade", CrystalType.class, CrystalType.NONE);
|
_grade = set.getEnum("targetGrade", CrystalType.class, CrystalType.NONE);
|
||||||
|
_minEnchantLevel = set.getInt("maxEnchant", 0);
|
||||||
_maxEnchantLevel = set.getInt("maxEnchant", 127);
|
_maxEnchantLevel = set.getInt("maxEnchant", 127);
|
||||||
_bonusRate = set.getDouble("bonusRate", 0);
|
_bonusRate = set.getDouble("bonusRate", 0);
|
||||||
}
|
}
|
||||||
@@ -112,6 +115,14 @@ public abstract class AbstractEnchantItem
|
|||||||
*/
|
*/
|
||||||
public abstract boolean isWeapon();
|
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
|
* @return the maximum enchant level that this scroll/item can be used with
|
||||||
*/
|
*/
|
||||||
@@ -139,7 +150,7 @@ public abstract class AbstractEnchantItem
|
|||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
else if ((_maxEnchantLevel != 0) && (itemToEnchant.getEnchantLevel() >= _maxEnchantLevel))
|
else if (((_minEnchantLevel != 0) && (itemToEnchant.getEnchantLevel() < _minEnchantLevel)) && ((_maxEnchantLevel != 0) && (itemToEnchant.getEnchantLevel() >= _maxEnchantLevel)))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@@ -35,6 +35,7 @@ public class EnchantScroll extends AbstractEnchantItem
|
|||||||
{
|
{
|
||||||
private final boolean _isWeapon;
|
private final boolean _isWeapon;
|
||||||
private final boolean _isBlessed;
|
private final boolean _isBlessed;
|
||||||
|
private final boolean _isBlessedDown;
|
||||||
private final boolean _isSafe;
|
private final boolean _isSafe;
|
||||||
private final boolean _isGiant;
|
private final boolean _isGiant;
|
||||||
private final int _scrollGroupId;
|
private final int _scrollGroupId;
|
||||||
@@ -48,6 +49,7 @@ public class EnchantScroll extends AbstractEnchantItem
|
|||||||
final ItemType type = getItem().getItemType();
|
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);
|
_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);
|
_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);
|
_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);
|
_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()
|
public boolean isBlessed()
|
||||||
{
|
{
|
||||||
return _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
|
* @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;
|
return false;
|
||||||
}
|
}
|
||||||
|
else if ((isBlessedDown() && !supportItem.isBlessed()) || (!isBlessedDown() && supportItem.isBlessed()))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
else if ((isGiant() && !supportItem.isGiant()) || (!isGiant() && supportItem.isGiant()))
|
else if ((isGiant() && !supportItem.isGiant()) || (!isGiant() && supportItem.isGiant()))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
|
@@ -46,6 +46,7 @@ public enum EtcItemType implements ItemType
|
|||||||
GIANT_ENCHT_AM,
|
GIANT_ENCHT_AM,
|
||||||
BLESS_ENCHT_WP,
|
BLESS_ENCHT_WP,
|
||||||
BLESS_ENCHT_AM,
|
BLESS_ENCHT_AM,
|
||||||
|
BLESS_ENCHT_AM_DOWN,
|
||||||
COUPON,
|
COUPON,
|
||||||
ELIXIR,
|
ELIXIR,
|
||||||
ENCHT_ATTR,
|
ENCHT_ATTR,
|
||||||
|
@@ -320,12 +320,19 @@ public class RequestEnchantItem implements IClientIncomingPacket
|
|||||||
player.broadcastUserInfo();
|
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
|
// blessed enchant - clear enchant value
|
||||||
client.sendPacket(SystemMessageId.THE_BLESSED_ENCHANT_FAILED_THE_ENCHANT_VALUE_OF_THE_ITEM_BECAME_0);
|
{
|
||||||
|
client.sendPacket(SystemMessageId.THE_BLESSED_ENCHANT_FAILED_THE_ENCHANT_VALUE_OF_THE_ITEM_BECAME_0);
|
||||||
item.setEnchantLevel(0);
|
item.setEnchantLevel(0);
|
||||||
|
}
|
||||||
item.updateDatabase();
|
item.updateDatabase();
|
||||||
client.sendPacket(new EnchantResult(EnchantResult.BLESSED_FAIL, 0, 0));
|
client.sendPacket(new EnchantResult(EnchantResult.BLESSED_FAIL, 0, 0));
|
||||||
if (Config.LOG_ITEM_ENCHANTS)
|
if (Config.LOG_ITEM_ENCHANTS)
|
||||||
|
@@ -39,6 +39,7 @@ public abstract class AbstractEnchantItem
|
|||||||
EtcItemType.ENCHT_ATTR_ANCIENT_CRYSTAL_ENCHANT_AM,
|
EtcItemType.ENCHT_ATTR_ANCIENT_CRYSTAL_ENCHANT_AM,
|
||||||
EtcItemType.ENCHT_ATTR_ANCIENT_CRYSTAL_ENCHANT_WP,
|
EtcItemType.ENCHT_ATTR_ANCIENT_CRYSTAL_ENCHANT_WP,
|
||||||
EtcItemType.BLESS_ENCHT_AM,
|
EtcItemType.BLESS_ENCHT_AM,
|
||||||
|
EtcItemType.BLESS_ENCHT_AM_DOWN,
|
||||||
EtcItemType.BLESS_ENCHT_WP,
|
EtcItemType.BLESS_ENCHT_WP,
|
||||||
EtcItemType.ENCHT_AM,
|
EtcItemType.ENCHT_AM,
|
||||||
EtcItemType.ENCHT_WP,
|
EtcItemType.ENCHT_WP,
|
||||||
@@ -56,6 +57,7 @@ public abstract class AbstractEnchantItem
|
|||||||
|
|
||||||
private final int _id;
|
private final int _id;
|
||||||
private final CrystalType _grade;
|
private final CrystalType _grade;
|
||||||
|
private final int _minEnchantLevel;
|
||||||
private final int _maxEnchantLevel;
|
private final int _maxEnchantLevel;
|
||||||
private final double _bonusRate;
|
private final double _bonusRate;
|
||||||
|
|
||||||
@@ -71,6 +73,7 @@ public abstract class AbstractEnchantItem
|
|||||||
throw new IllegalAccessError();
|
throw new IllegalAccessError();
|
||||||
}
|
}
|
||||||
_grade = set.getEnum("targetGrade", CrystalType.class, CrystalType.NONE);
|
_grade = set.getEnum("targetGrade", CrystalType.class, CrystalType.NONE);
|
||||||
|
_minEnchantLevel = set.getInt("maxEnchant", 0);
|
||||||
_maxEnchantLevel = set.getInt("maxEnchant", 127);
|
_maxEnchantLevel = set.getInt("maxEnchant", 127);
|
||||||
_bonusRate = set.getDouble("bonusRate", 0);
|
_bonusRate = set.getDouble("bonusRate", 0);
|
||||||
}
|
}
|
||||||
@@ -112,6 +115,14 @@ public abstract class AbstractEnchantItem
|
|||||||
*/
|
*/
|
||||||
public abstract boolean isWeapon();
|
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
|
* @return the maximum enchant level that this scroll/item can be used with
|
||||||
*/
|
*/
|
||||||
@@ -139,7 +150,7 @@ public abstract class AbstractEnchantItem
|
|||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
else if ((_maxEnchantLevel != 0) && (itemToEnchant.getEnchantLevel() >= _maxEnchantLevel))
|
else if (((_minEnchantLevel != 0) && (itemToEnchant.getEnchantLevel() < _minEnchantLevel)) && ((_maxEnchantLevel != 0) && (itemToEnchant.getEnchantLevel() >= _maxEnchantLevel)))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@@ -35,6 +35,7 @@ public class EnchantScroll extends AbstractEnchantItem
|
|||||||
{
|
{
|
||||||
private final boolean _isWeapon;
|
private final boolean _isWeapon;
|
||||||
private final boolean _isBlessed;
|
private final boolean _isBlessed;
|
||||||
|
private final boolean _isBlessedDown;
|
||||||
private final boolean _isSafe;
|
private final boolean _isSafe;
|
||||||
private final boolean _isGiant;
|
private final boolean _isGiant;
|
||||||
private final int _scrollGroupId;
|
private final int _scrollGroupId;
|
||||||
@@ -48,6 +49,7 @@ public class EnchantScroll extends AbstractEnchantItem
|
|||||||
final ItemType type = getItem().getItemType();
|
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);
|
_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);
|
_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);
|
_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);
|
_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()
|
public boolean isBlessed()
|
||||||
{
|
{
|
||||||
return _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
|
* @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;
|
return false;
|
||||||
}
|
}
|
||||||
|
else if ((isBlessedDown() && !supportItem.isBlessed()) || (!isBlessedDown() && supportItem.isBlessed()))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
else if ((isGiant() && !supportItem.isGiant()) || (!isGiant() && supportItem.isGiant()))
|
else if ((isGiant() && !supportItem.isGiant()) || (!isGiant() && supportItem.isGiant()))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
|
@@ -46,6 +46,7 @@ public enum EtcItemType implements ItemType
|
|||||||
GIANT_ENCHT_AM,
|
GIANT_ENCHT_AM,
|
||||||
BLESS_ENCHT_WP,
|
BLESS_ENCHT_WP,
|
||||||
BLESS_ENCHT_AM,
|
BLESS_ENCHT_AM,
|
||||||
|
BLESS_ENCHT_AM_DOWN,
|
||||||
COUPON,
|
COUPON,
|
||||||
ELIXIR,
|
ELIXIR,
|
||||||
ENCHT_ATTR,
|
ENCHT_ATTR,
|
||||||
|
@@ -320,12 +320,19 @@ public class RequestEnchantItem implements IClientIncomingPacket
|
|||||||
player.broadcastUserInfo();
|
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
|
// blessed enchant - clear enchant value
|
||||||
client.sendPacket(SystemMessageId.THE_BLESSED_ENCHANT_FAILED_THE_ENCHANT_VALUE_OF_THE_ITEM_BECAME_0);
|
{
|
||||||
|
client.sendPacket(SystemMessageId.THE_BLESSED_ENCHANT_FAILED_THE_ENCHANT_VALUE_OF_THE_ITEM_BECAME_0);
|
||||||
item.setEnchantLevel(0);
|
item.setEnchantLevel(0);
|
||||||
|
}
|
||||||
item.updateDatabase();
|
item.updateDatabase();
|
||||||
client.sendPacket(new EnchantResult(EnchantResult.BLESSED_FAIL, 0, 0));
|
client.sendPacket(new EnchantResult(EnchantResult.BLESSED_FAIL, 0, 0));
|
||||||
if (Config.LOG_ITEM_ENCHANTS)
|
if (Config.LOG_ITEM_ENCHANTS)
|
||||||
|
@@ -39,6 +39,7 @@ public abstract class AbstractEnchantItem
|
|||||||
EtcItemType.ENCHT_ATTR_ANCIENT_CRYSTAL_ENCHANT_AM,
|
EtcItemType.ENCHT_ATTR_ANCIENT_CRYSTAL_ENCHANT_AM,
|
||||||
EtcItemType.ENCHT_ATTR_ANCIENT_CRYSTAL_ENCHANT_WP,
|
EtcItemType.ENCHT_ATTR_ANCIENT_CRYSTAL_ENCHANT_WP,
|
||||||
EtcItemType.BLESS_ENCHT_AM,
|
EtcItemType.BLESS_ENCHT_AM,
|
||||||
|
EtcItemType.BLESS_ENCHT_AM_DOWN,
|
||||||
EtcItemType.BLESS_ENCHT_WP,
|
EtcItemType.BLESS_ENCHT_WP,
|
||||||
EtcItemType.ENCHT_AM,
|
EtcItemType.ENCHT_AM,
|
||||||
EtcItemType.ENCHT_WP,
|
EtcItemType.ENCHT_WP,
|
||||||
@@ -56,6 +57,7 @@ public abstract class AbstractEnchantItem
|
|||||||
|
|
||||||
private final int _id;
|
private final int _id;
|
||||||
private final CrystalType _grade;
|
private final CrystalType _grade;
|
||||||
|
private final int _minEnchantLevel;
|
||||||
private final int _maxEnchantLevel;
|
private final int _maxEnchantLevel;
|
||||||
private final double _bonusRate;
|
private final double _bonusRate;
|
||||||
|
|
||||||
@@ -71,6 +73,7 @@ public abstract class AbstractEnchantItem
|
|||||||
throw new IllegalAccessError();
|
throw new IllegalAccessError();
|
||||||
}
|
}
|
||||||
_grade = set.getEnum("targetGrade", CrystalType.class, CrystalType.NONE);
|
_grade = set.getEnum("targetGrade", CrystalType.class, CrystalType.NONE);
|
||||||
|
_minEnchantLevel = set.getInt("maxEnchant", 0);
|
||||||
_maxEnchantLevel = set.getInt("maxEnchant", 127);
|
_maxEnchantLevel = set.getInt("maxEnchant", 127);
|
||||||
_bonusRate = set.getDouble("bonusRate", 0);
|
_bonusRate = set.getDouble("bonusRate", 0);
|
||||||
}
|
}
|
||||||
@@ -112,6 +115,14 @@ public abstract class AbstractEnchantItem
|
|||||||
*/
|
*/
|
||||||
public abstract boolean isWeapon();
|
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
|
* @return the maximum enchant level that this scroll/item can be used with
|
||||||
*/
|
*/
|
||||||
@@ -139,7 +150,7 @@ public abstract class AbstractEnchantItem
|
|||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
else if ((_maxEnchantLevel != 0) && (itemToEnchant.getEnchantLevel() >= _maxEnchantLevel))
|
else if (((_minEnchantLevel != 0) && (itemToEnchant.getEnchantLevel() < _minEnchantLevel)) && ((_maxEnchantLevel != 0) && (itemToEnchant.getEnchantLevel() >= _maxEnchantLevel)))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@@ -35,6 +35,7 @@ public class EnchantScroll extends AbstractEnchantItem
|
|||||||
{
|
{
|
||||||
private final boolean _isWeapon;
|
private final boolean _isWeapon;
|
||||||
private final boolean _isBlessed;
|
private final boolean _isBlessed;
|
||||||
|
private final boolean _isBlessedDown;
|
||||||
private final boolean _isSafe;
|
private final boolean _isSafe;
|
||||||
private final boolean _isGiant;
|
private final boolean _isGiant;
|
||||||
private final int _scrollGroupId;
|
private final int _scrollGroupId;
|
||||||
@@ -48,6 +49,7 @@ public class EnchantScroll extends AbstractEnchantItem
|
|||||||
final ItemType type = getItem().getItemType();
|
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);
|
_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);
|
_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);
|
_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);
|
_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()
|
public boolean isBlessed()
|
||||||
{
|
{
|
||||||
return _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
|
* @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;
|
return false;
|
||||||
}
|
}
|
||||||
|
else if ((isBlessedDown() && !supportItem.isBlessed()) || (!isBlessedDown() && supportItem.isBlessed()))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
else if ((isGiant() && !supportItem.isGiant()) || (!isGiant() && supportItem.isGiant()))
|
else if ((isGiant() && !supportItem.isGiant()) || (!isGiant() && supportItem.isGiant()))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
|
@@ -46,6 +46,7 @@ public enum EtcItemType implements ItemType
|
|||||||
GIANT_ENCHT_AM,
|
GIANT_ENCHT_AM,
|
||||||
BLESS_ENCHT_WP,
|
BLESS_ENCHT_WP,
|
||||||
BLESS_ENCHT_AM,
|
BLESS_ENCHT_AM,
|
||||||
|
BLESS_ENCHT_AM_DOWN,
|
||||||
COUPON,
|
COUPON,
|
||||||
ELIXIR,
|
ELIXIR,
|
||||||
ENCHT_ATTR,
|
ENCHT_ATTR,
|
||||||
|
@@ -319,12 +319,19 @@ public class RequestEnchantItem implements IClientIncomingPacket
|
|||||||
player.broadcastUserInfo();
|
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
|
// blessed enchant - clear enchant value
|
||||||
client.sendPacket(SystemMessageId.THE_BLESSED_ENCHANT_FAILED_THE_ENCHANT_VALUE_OF_THE_ITEM_BECAME_0);
|
{
|
||||||
|
client.sendPacket(SystemMessageId.THE_BLESSED_ENCHANT_FAILED_THE_ENCHANT_VALUE_OF_THE_ITEM_BECAME_0);
|
||||||
item.setEnchantLevel(0);
|
item.setEnchantLevel(0);
|
||||||
|
}
|
||||||
item.updateDatabase();
|
item.updateDatabase();
|
||||||
client.sendPacket(new EnchantResult(EnchantResult.BLESSED_FAIL, 0, 0));
|
client.sendPacket(new EnchantResult(EnchantResult.BLESSED_FAIL, 0, 0));
|
||||||
if (Config.LOG_ITEM_ENCHANTS)
|
if (Config.LOG_ITEM_ENCHANTS)
|
||||||
|
@@ -39,6 +39,7 @@ public abstract class AbstractEnchantItem
|
|||||||
EtcItemType.ENCHT_ATTR_ANCIENT_CRYSTAL_ENCHANT_AM,
|
EtcItemType.ENCHT_ATTR_ANCIENT_CRYSTAL_ENCHANT_AM,
|
||||||
EtcItemType.ENCHT_ATTR_ANCIENT_CRYSTAL_ENCHANT_WP,
|
EtcItemType.ENCHT_ATTR_ANCIENT_CRYSTAL_ENCHANT_WP,
|
||||||
EtcItemType.BLESS_ENCHT_AM,
|
EtcItemType.BLESS_ENCHT_AM,
|
||||||
|
EtcItemType.BLESS_ENCHT_AM_DOWN,
|
||||||
EtcItemType.BLESS_ENCHT_WP,
|
EtcItemType.BLESS_ENCHT_WP,
|
||||||
EtcItemType.ENCHT_AM,
|
EtcItemType.ENCHT_AM,
|
||||||
EtcItemType.ENCHT_WP,
|
EtcItemType.ENCHT_WP,
|
||||||
@@ -56,6 +57,7 @@ public abstract class AbstractEnchantItem
|
|||||||
|
|
||||||
private final int _id;
|
private final int _id;
|
||||||
private final CrystalType _grade;
|
private final CrystalType _grade;
|
||||||
|
private final int _minEnchantLevel;
|
||||||
private final int _maxEnchantLevel;
|
private final int _maxEnchantLevel;
|
||||||
private final double _bonusRate;
|
private final double _bonusRate;
|
||||||
|
|
||||||
@@ -71,6 +73,7 @@ public abstract class AbstractEnchantItem
|
|||||||
throw new IllegalAccessError();
|
throw new IllegalAccessError();
|
||||||
}
|
}
|
||||||
_grade = set.getEnum("targetGrade", CrystalType.class, CrystalType.NONE);
|
_grade = set.getEnum("targetGrade", CrystalType.class, CrystalType.NONE);
|
||||||
|
_minEnchantLevel = set.getInt("maxEnchant", 0);
|
||||||
_maxEnchantLevel = set.getInt("maxEnchant", 127);
|
_maxEnchantLevel = set.getInt("maxEnchant", 127);
|
||||||
_bonusRate = set.getDouble("bonusRate", 0);
|
_bonusRate = set.getDouble("bonusRate", 0);
|
||||||
}
|
}
|
||||||
@@ -112,6 +115,14 @@ public abstract class AbstractEnchantItem
|
|||||||
*/
|
*/
|
||||||
public abstract boolean isWeapon();
|
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
|
* @return the maximum enchant level that this scroll/item can be used with
|
||||||
*/
|
*/
|
||||||
@@ -139,7 +150,7 @@ public abstract class AbstractEnchantItem
|
|||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
else if ((_maxEnchantLevel != 0) && (itemToEnchant.getEnchantLevel() >= _maxEnchantLevel))
|
else if (((_minEnchantLevel != 0) && (itemToEnchant.getEnchantLevel() < _minEnchantLevel)) && ((_maxEnchantLevel != 0) && (itemToEnchant.getEnchantLevel() >= _maxEnchantLevel)))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@@ -35,6 +35,7 @@ public class EnchantScroll extends AbstractEnchantItem
|
|||||||
{
|
{
|
||||||
private final boolean _isWeapon;
|
private final boolean _isWeapon;
|
||||||
private final boolean _isBlessed;
|
private final boolean _isBlessed;
|
||||||
|
private final boolean _isBlessedDown;
|
||||||
private final boolean _isSafe;
|
private final boolean _isSafe;
|
||||||
private final boolean _isGiant;
|
private final boolean _isGiant;
|
||||||
private final int _scrollGroupId;
|
private final int _scrollGroupId;
|
||||||
@@ -48,6 +49,7 @@ public class EnchantScroll extends AbstractEnchantItem
|
|||||||
final ItemType type = getItem().getItemType();
|
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);
|
_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);
|
_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);
|
_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);
|
_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()
|
public boolean isBlessed()
|
||||||
{
|
{
|
||||||
return _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
|
* @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;
|
return false;
|
||||||
}
|
}
|
||||||
|
else if ((isBlessedDown() && !supportItem.isBlessed()) || (!isBlessedDown() && supportItem.isBlessed()))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
else if ((isGiant() && !supportItem.isGiant()) || (!isGiant() && supportItem.isGiant()))
|
else if ((isGiant() && !supportItem.isGiant()) || (!isGiant() && supportItem.isGiant()))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
|
@@ -46,6 +46,7 @@ public enum EtcItemType implements ItemType
|
|||||||
GIANT_ENCHT_AM,
|
GIANT_ENCHT_AM,
|
||||||
BLESS_ENCHT_WP,
|
BLESS_ENCHT_WP,
|
||||||
BLESS_ENCHT_AM,
|
BLESS_ENCHT_AM,
|
||||||
|
BLESS_ENCHT_AM_DOWN,
|
||||||
COUPON,
|
COUPON,
|
||||||
ELIXIR,
|
ELIXIR,
|
||||||
ENCHT_ATTR,
|
ENCHT_ATTR,
|
||||||
|
@@ -320,12 +320,19 @@ public class RequestEnchantItem implements IClientIncomingPacket
|
|||||||
player.broadcastUserInfo();
|
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
|
// blessed enchant - clear enchant value
|
||||||
client.sendPacket(SystemMessageId.THE_BLESSED_ENCHANT_FAILED_THE_ENCHANT_VALUE_OF_THE_ITEM_BECAME_0);
|
{
|
||||||
|
client.sendPacket(SystemMessageId.THE_BLESSED_ENCHANT_FAILED_THE_ENCHANT_VALUE_OF_THE_ITEM_BECAME_0);
|
||||||
item.setEnchantLevel(0);
|
item.setEnchantLevel(0);
|
||||||
|
}
|
||||||
item.updateDatabase();
|
item.updateDatabase();
|
||||||
client.sendPacket(new EnchantResult(EnchantResult.BLESSED_FAIL, 0, 0));
|
client.sendPacket(new EnchantResult(EnchantResult.BLESSED_FAIL, 0, 0));
|
||||||
if (Config.LOG_ITEM_ENCHANTS)
|
if (Config.LOG_ITEM_ENCHANTS)
|
||||||
|
Reference in New Issue
Block a user