Unhardcoded bonus enchant scrolls.

This commit is contained in:
MobiusDevelopment
2021-04-28 14:40:04 +00:00
parent 160f58a554
commit f81e3d62ce
70 changed files with 807 additions and 283 deletions

View File

@@ -35,6 +35,22 @@
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="randomEnchantMin" use="optional">
<xs:simpleType>
<xs:restriction base="xs:positiveInteger">
<xs:minInclusive value="1" />
<xs:maxInclusive value="127" />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="randomEnchantMax" use="optional">
<xs:simpleType>
<xs:restriction base="xs:positiveInteger">
<xs:minInclusive value="1" />
<xs:maxInclusive value="127" />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="maxEnchantFighter">
<xs:simpleType>
<xs:restriction base="xs:positiveInteger">

View File

@@ -62,6 +62,8 @@ public abstract class AbstractEnchantItem
private final int _minEnchantLevel;
private final int _maxEnchantLevel;
private final int _safeEnchantLevel;
private final int _randomEnchantMin;
private final int _randomEnchantMax;
private final double _bonusRate;
private final boolean _isBlessed;
@@ -80,6 +82,8 @@ public abstract class AbstractEnchantItem
_minEnchantLevel = set.getInt("minEnchant", 0);
_maxEnchantLevel = set.getInt("maxEnchant", 127);
_safeEnchantLevel = set.getInt("safeEnchant", 0);
_randomEnchantMin = set.getInt("randomEnchantMin", 1);
_randomEnchantMax = set.getInt("randomEnchantMax", _randomEnchantMin);
_bonusRate = set.getDouble("bonusRate", 0);
_isBlessed = set.getBoolean("isBlessed", false);
}
@@ -145,6 +149,27 @@ public abstract class AbstractEnchantItem
return _safeEnchantLevel;
}
/**
* @return the minimum random enchant level of this scroll/item
*/
public int getRandomEnchantMin()
{
return _randomEnchantMin;
}
/**
* @return the maximum random enchant level of this scroll/item
*/
public int getRandomEnchantMax()
{
return _randomEnchantMax;
}
public boolean isActionBlessed()
{
return _isBlessed;
}
/**
* @param itemToEnchant the item to be enchanted
* @param supportItem
@@ -191,9 +216,4 @@ public abstract class AbstractEnchantItem
}
return false;
}
public boolean isActionBlessed()
{
return _isBlessed;
}
}

View File

@@ -19,7 +19,6 @@ package org.l2jmobius.gameserver.model.items.enchant;
import java.util.HashSet;
import java.util.Set;
import org.l2jmobius.Config;
import org.l2jmobius.commons.util.Rnd;
import org.l2jmobius.gameserver.data.xml.EnchantItemData;
import org.l2jmobius.gameserver.data.xml.EnchantItemGroupsData;
@@ -238,26 +237,4 @@ public class EnchantScroll extends AbstractEnchantItem
final boolean success = (random < finalChance);
return success ? EnchantResultType.SUCCESS : EnchantResultType.FAILURE;
}
public EnchantResultType calculateSuccess(PlayerInstance player, ItemInstance enchantItem)
{
if (!isActionBlessed() || !enchantItem.isWeapon())
{
return EnchantResultType.ERROR;
}
final double chance = Config.BLESSING_CHANCE;
if (chance == -1)
{
return EnchantResultType.ERROR;
}
final int crystalLevel = enchantItem.getItem().getCrystalType().getLevel();
final double enchantRateStat = (crystalLevel > CrystalType.NONE.getLevel()) && (crystalLevel < CrystalType.EVENT.getLevel()) ? player.getStat().getValue(Stat.ENCHANT_RATE) : 0;
final double bonusRate = getBonusRate();
final double finalChance = Math.min(chance + bonusRate + enchantRateStat, 100);
final double random = 100 * Rnd.nextDouble();
final boolean success = (random < finalChance);
return success ? EnchantResultType.SUCCESS : EnchantResultType.FAILURE;
}
}

View File

@@ -186,16 +186,9 @@ public class RequestEnchantItem implements IClientIncomingPacket
// Increase enchant level only if scroll's base template has chance, some armors can success over +20 but they shouldn't have increased.
if (scrollTemplate.getChance(player, item) > 0)
{
if (scrollTemplate.isGiant())
if (supportTemplate != null)
{
if (((supportTemplate != null) && (supportTemplate.getId() == 23785)) || ((supportTemplate != null) && (supportTemplate.getId() == 23786))) // Lesser Giant's Lucky Enchant Stones. Increase from +2 to +4
{
item.setEnchantLevel(Math.min(item.getEnchantLevel() + 2 + Rnd.get(3), scrollTemplate.getMaxEnchantLevel()));
}
else
{
item.setEnchantLevel(Math.min(item.getEnchantLevel() + 1 + Rnd.get(3), scrollTemplate.getMaxEnchantLevel()));
}
item.setEnchantLevel(Math.min(item.getEnchantLevel() + Rnd.get(supportTemplate.getRandomEnchantMin(), supportTemplate.getRandomEnchantMax()), supportTemplate.getMaxEnchantLevel()));
}
else if (scrollTemplate.isCursed())
{
@@ -203,8 +196,9 @@ public class RequestEnchantItem implements IClientIncomingPacket
}
else
{
item.setEnchantLevel(item.getEnchantLevel() + 1);
item.setEnchantLevel(Math.min(item.getEnchantLevel() + Rnd.get(scrollTemplate.getRandomEnchantMin(), scrollTemplate.getRandomEnchantMax()), scrollTemplate.getMaxEnchantLevel()));
}
item.updateDatabase();
}
client.sendPacket(new EnchantResult(EnchantResult.SUCCESS, item));