- Хроники
- Master Class
- Исходники
- Присутствуют
- Сборка
- L2J_Mobius_12.3_Superion
Здравствуйте .
Столкнулся вот с такой проблемой
Посмотреть вложение bandicam 2025-12-02 03-20-02-133.mp4
Есть 3 файла в которых есть
1.
2.
3.
Помогите Пожалуйста , самому не разобраться.
Столкнулся вот с такой проблемой
Посмотреть вложение bandicam 2025-12-02 03-20-02-133.mp4
Есть 3 файла в которых есть
Код:
BLESSED_GIANT_ENCHT_ATTR_INC_PROP_ENCHT_AM
Код:
package org.l2jmobius.gameserver.model.item.enchant;
import java.util.EnumSet;
import java.util.Set;
import java.util.logging.Logger;
import org.l2jmobius.gameserver.data.xml.ItemData;
import org.l2jmobius.gameserver.model.StatSet;
import org.l2jmobius.gameserver.model.item.ItemTemplate;
import org.l2jmobius.gameserver.model.item.instance.Item;
import org.l2jmobius.gameserver.model.item.type.CrystalType;
import org.l2jmobius.gameserver.model.item.type.EtcItemType;
/**
* @author UnAfraid
*/
public abstract class AbstractEnchantItem
{
protected static final Logger LOGGER = Logger.getLogger(AbstractEnchantItem.class.getName());
private static final Set<EtcItemType> ENCHANT_TYPES = EnumSet.noneOf(EtcItemType.class);
static
{
ENCHANT_TYPES.add(EtcItemType.ENCHT_ATTR_ANCIENT_CRYSTAL_ENCHANT_AM);
ENCHANT_TYPES.add(EtcItemType.ENCHT_ATTR_ANCIENT_CRYSTAL_ENCHANT_WP);
ENCHANT_TYPES.add(EtcItemType.BLESS_ENCHT_AM);
ENCHANT_TYPES.add(EtcItemType.BLESS_ENCHT_AM_DOWN);
ENCHANT_TYPES.add(EtcItemType.BLESS_ENCHT_WP);
ENCHANT_TYPES.add(EtcItemType.ENCHT_AM);
ENCHANT_TYPES.add(EtcItemType.ENCHT_WP);
ENCHANT_TYPES.add(EtcItemType.ENCHT_WP_DOWN);
ENCHANT_TYPES.add(EtcItemType.ENCHT_AM_DOWN);
ENCHANT_TYPES.add(EtcItemType.GIANT_ENCHT_AM);
ENCHANT_TYPES.add(EtcItemType.GIANT_ENCHT_WP);
ENCHANT_TYPES.add(EtcItemType.ENCHT_ATTR_INC_PROP_ENCHT_AM);
ENCHANT_TYPES.add(EtcItemType.ENCHT_ATTR_INC_PROP_ENCHT_WP);
ENCHANT_TYPES.add(EtcItemType.GIANT_ENCHT_ATTR_INC_PROP_ENCHT_AM);
ENCHANT_TYPES.add(EtcItemType.GIANT_ENCHT_ATTR_INC_PROP_ENCHT_WP);
ENCHANT_TYPES.add(EtcItemType.BLESSED_ENCHT_ATTR_INC_PROP_ENCHT_AM);
ENCHANT_TYPES.add(EtcItemType.BLESSED_ENCHT_ATTR_INC_PROP_ENCHT_WP);
ENCHANT_TYPES.add(EtcItemType.BLESSED_GIANT_ENCHT_ATTR_INC_PROP_ENCHT_AM);
ENCHANT_TYPES.add(EtcItemType.BLESSED_GIANT_ENCHT_ATTR_INC_PROP_ENCHT_WP);
}
private final int _id;
private final CrystalType _grade;
private final int _minEnchantLevel;
private final int _maxEnchantLevel;
private final int _safeEnchantLevel;
private final int _randomEnchantMin;
private final int _randomEnchantMax;
private final int _randomEnchantChance;
private final double _bonusRate;
public AbstractEnchantItem(StatSet set)
{
_id = set.getInt("id");
if (getItem() == null)
{
throw new NullPointerException();
}
else if (!ENCHANT_TYPES.contains(getItem().getItemType()))
{
throw new IllegalAccessError();
}
_grade = set.getEnum("targetGrade", CrystalType.class, CrystalType.NONE);
_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);
_randomEnchantChance = set.getInt("randomEnchantChance", 50);
_bonusRate = set.getDouble("bonusRate", 0);
}
/**
* @return id of current item
*/
public int getId()
{
return _id;
}
/**
* @return bonus chance that would be added
*/
public double getBonusRate()
{
return _bonusRate;
}
/**
* @return {@link ItemTemplate} current item/scroll
*/
public ItemTemplate getItem()
{
return ItemData.getInstance().getTemplate(_id);
}
/**
* @return grade of the item/scroll.
*/
public CrystalType getGrade()
{
return _grade;
}
/**
* @return {@code true} if scroll is for weapon, {@code false} for armor
*/
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
*/
public int getMaxEnchantLevel()
{
return _maxEnchantLevel;
}
/**
* @return the safe enchant level of this scroll/item
*/
public int getSafeEnchant()
{
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;
}
/**
* @return the chance to get the maximum random enchant
*/
public int getRandomEnchantChance()
{
return _randomEnchantChance;
}
/**
* @param itemToEnchant the item to be enchanted
* @param supportItem
* @return {@code true} if this support item can be used with the item to be enchanted, {@code false} otherwise
*/
public boolean isValid(Item itemToEnchant, EnchantSupportItem supportItem)
{
if (itemToEnchant == null)
{
return false;
}
else if (!itemToEnchant.isEnchantable() || (!(itemToEnchant.getTemplate().getEnchantLimit() == 0) && (itemToEnchant.getEnchantLevel() == itemToEnchant.getTemplate().getEnchantLimit())))
{
return false;
}
else if (!isValidItemType(itemToEnchant.getTemplate().getType2()))
{
return false;
}
else if (((_minEnchantLevel != 0) && (itemToEnchant.getEnchantLevel() < _minEnchantLevel)) || ((_maxEnchantLevel != 0) && (itemToEnchant.getEnchantLevel() >= _maxEnchantLevel)))
{
return false;
}
else if (_grade != itemToEnchant.getTemplate().getCrystalTypePlus())
{
return false;
}
return true;
}
/**
* @param type2
* @return {@code true} if current type2 is valid to be enchanted, {@code false} otherwise
*/
private boolean isValidItemType(int type2)
{
if (type2 == ItemTemplate.TYPE2_WEAPON)
{
return isWeapon();
}
else if ((type2 == ItemTemplate.TYPE2_SHIELD_ARMOR) || (type2 == ItemTemplate.TYPE2_ACCESSORY))
{
return !isWeapon();
}
return false;
}
}
Код:
package org.l2jmobius.gameserver.model.item.enchant;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import org.l2jmobius.commons.util.Rnd;
import org.l2jmobius.gameserver.data.xml.EnchantItemData;
import org.l2jmobius.gameserver.data.xml.EnchantItemGroupsData;
import org.l2jmobius.gameserver.model.StatSet;
import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.item.instance.Item;
import org.l2jmobius.gameserver.model.item.type.CrystalType;
import org.l2jmobius.gameserver.model.item.type.EtcItemType;
import org.l2jmobius.gameserver.model.item.type.ItemType;
import org.l2jmobius.gameserver.model.stats.Stat;
/**
* @author UnAfraid, Mobius
*/
public class EnchantScroll extends AbstractEnchantItem
{
private final boolean _isWeapon;
private final boolean _isBlessed;
private final boolean _isBlessedDown;
private final boolean _isSafe;
private final boolean _isGiant;
private final int _scrollGroupId;
private final Map<Integer, Integer> _items = new HashMap<>();
public EnchantScroll(StatSet set)
{
super(set);
_scrollGroupId = set.getInt("scrollGroupId", 0);
final ItemType type = getItem().getItemType();
_isWeapon = (type == EtcItemType.ENCHT_ATTR_ANCIENT_CRYSTAL_ENCHANT_WP) || (type == EtcItemType.BLESS_ENCHT_WP) || (type == EtcItemType.ENCHT_WP) || (type == EtcItemType.GIANT_ENCHT_WP);
_isBlessed = (type == EtcItemType.BLESS_ENCHT_AM) || (type == EtcItemType.BLESS_ENCHT_WP) || (type == EtcItemType.BLESSED_ENCHT_ATTR_INC_PROP_ENCHT_WP) || (type == EtcItemType.BLESSED_ENCHT_ATTR_INC_PROP_ENCHT_AM) || (type == EtcItemType.BLESSED_GIANT_ENCHT_ATTR_INC_PROP_ENCHT_AM) || (type == EtcItemType.BLESSED_GIANT_ENCHT_ATTR_INC_PROP_ENCHT_WP);
_isBlessedDown = (type == EtcItemType.BLESS_ENCHT_AM_DOWN);
_isSafe = (type == EtcItemType.ENCHT_ATTR_ANCIENT_CRYSTAL_ENCHANT_AM) || (type == EtcItemType.ENCHT_ATTR_ANCIENT_CRYSTAL_ENCHANT_WP) || (type == EtcItemType.ENCHT_ATTR_CRYSTAL_ENCHANT_AM) || (type == EtcItemType.ENCHT_ATTR_CRYSTAL_ENCHANT_WP);
_isGiant = (type == EtcItemType.GIANT_ENCHT_AM) || (type == EtcItemType.GIANT_ENCHT_WP || (type == EtcItemType.BLESSED_GIANT_ENCHT_ATTR_INC_PROP_ENCHT_AM) || (type == EtcItemType.BLESSED_GIANT_ENCHT_ATTR_INC_PROP_ENCHT_WP));
}
@Override
public boolean isWeapon()
{
return _isWeapon;
}
/**
* @return {@code true} for blessed scrolls (enchanted item will remain on failure and enchant value will reset to 0), {@code false} otherwise
*/
public boolean isBlessed()
{
return _isBlessed;
}
/**
* @return {@code true} for blessed scrolls (enchanted item will remain on failure and enchant value will go down by 1), {@code false} otherwise
*/
public boolean isBlessedDown()
{
return _isBlessedDown;
}
/**
* @return {@code true} for safe-enchant scrolls (enchant level will remain on failure), {@code false} otherwise
*/
public boolean isSafe()
{
return _isSafe;
}
public boolean isGiant()
{
return _isGiant;
}
/**
* Enforces current scroll to use only those items as possible items to enchant
* @param itemId
* @param scrollGroupId
*/
public void addItem(int itemId, int scrollGroupId)
{
_items.put(itemId, scrollGroupId > -1 ? scrollGroupId : _scrollGroupId);
}
public Collection<Integer> getItems()
{
return _items.keySet();
}
/**
* @param itemToEnchant the item to be enchanted
* @param supportItem the support item used when enchanting (can be null)
* @return {@code true} if this scroll can be used with the specified support item and the item to be enchanted, {@code false} otherwise
*/
@Override
public boolean isValid(Item itemToEnchant, EnchantSupportItem supportItem)
{
if (!_items.isEmpty() && !_items.containsKey(itemToEnchant.getId()))
{
return false;
}
else if ((supportItem != null))
{
if ((isBlessed() && !supportItem.isBlessed()) || (!isBlessed() && supportItem.isBlessed()))
{
return false;
}
else if ((isGiant() && !supportItem.isGiant()) || (!isGiant() && supportItem.isGiant()))
{
return false;
}
else if (!supportItem.isValid(itemToEnchant, supportItem))
{
return false;
}
else if (supportItem.isWeapon() != isWeapon())
{
return false;
}
}
if (_items.isEmpty())
{
for (EnchantScroll scroll : EnchantItemData.getInstance().getScrolls())
{
if (scroll.getId() == getId())
{
continue;
}
final Collection<Integer> scrollItems = scroll.getItems();
if (!scrollItems.isEmpty() && scrollItems.contains(itemToEnchant.getId()))
{
return false;
}
}
}
return super.isValid(itemToEnchant, supportItem);
}
/**
* @param player
* @param enchantItem
* @return the chance of current scroll's group.
*/
public double getChance(Player player, Item enchantItem)
{
if (enchantItem == null)
{
return -1;
}
final int scrollGroupId = _items.getOrDefault(enchantItem.getId(), _scrollGroupId);
if (EnchantItemGroupsData.getInstance().getScrollGroup(scrollGroupId) == null)
{
LOGGER.warning(getClass().getSimpleName() + ": Unexistent enchant scroll group specified for enchant scroll: " + getId());
return -1;
}
final EnchantItemGroup group = EnchantItemGroupsData.getInstance().getItemGroup(enchantItem.getTemplate(), scrollGroupId);
if (group == null)
{
LOGGER.warning(getClass().getSimpleName() + ": Couldn't find enchant item group for scroll: " + getId() + " requested by: " + player);
return -1;
}
if ((getSafeEnchant() > 0) && (enchantItem.getEnchantLevel() < getSafeEnchant()))
{
return 100;
}
return group.getChance(enchantItem.getEnchantLevel());
}
/**
* @param player
* @param enchantItem
* @param supportItem
* @return the total chance for success rate of this scroll
*/
public EnchantResultType calculateSuccess(Player player, Item enchantItem, EnchantSupportItem supportItem)
{
if (!isValid(enchantItem, supportItem))
{
return EnchantResultType.ERROR;
}
final double chance = getChance(player, enchantItem);
if (chance == -1)
{
return EnchantResultType.ERROR;
}
final int crystalLevel = enchantItem.getTemplate().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 supportBonusRate = (supportItem != null) ? supportItem.getBonusRate() : 0;
final double finalChance = Math.min(chance + bonusRate + supportBonusRate + enchantRateStat, 100);
final double random = 100 * Rnd.nextDouble();
final boolean success = (random < finalChance) || player.tryLuck();
return success ? EnchantResultType.SUCCESS : EnchantResultType.FAILURE;
}
}
Код:
package org.l2jmobius.gameserver.model.item.enchant;
import org.l2jmobius.gameserver.model.StatSet;
import org.l2jmobius.gameserver.model.item.type.EtcItemType;
import org.l2jmobius.gameserver.model.item.type.ItemType;
/**
* @author UnAfraid
*/
public class EnchantSupportItem extends AbstractEnchantItem
{
private final boolean _isWeapon;
private final boolean _isBlessed;
private final boolean _isDown;
private final boolean _isGiant;
private final ItemType type;
public EnchantSupportItem(StatSet set)
{
super(set);
type = getItem().getItemType();
_isWeapon = (type == EtcItemType.ENCHT_ATTR_INC_PROP_ENCHT_WP) || (type == EtcItemType.ENCHT_WP_DOWN) || (type == EtcItemType.BLESSED_ENCHT_ATTR_INC_PROP_ENCHT_WP) || (type == EtcItemType.GIANT_ENCHT_ATTR_INC_PROP_ENCHT_WP) || (type == EtcItemType.BLESSED_GIANT_ENCHT_ATTR_INC_PROP_ENCHT_WP);
_isBlessed = (type == EtcItemType.BLESSED_ENCHT_ATTR_INC_PROP_ENCHT_AM) || (type == EtcItemType.BLESSED_ENCHT_ATTR_INC_PROP_ENCHT_WP) || (type == EtcItemType.BLESSED_GIANT_ENCHT_ATTR_INC_PROP_ENCHT_AM) || (type == EtcItemType.BLESSED_GIANT_ENCHT_ATTR_INC_PROP_ENCHT_WP);
_isDown = (type == EtcItemType.ENCHT_AM_DOWN) || (type == EtcItemType.ENCHT_WP_DOWN);
_isGiant = (type == EtcItemType.GIANT_ENCHT_ATTR_INC_PROP_ENCHT_AM) || (type == EtcItemType.GIANT_ENCHT_ATTR_INC_PROP_ENCHT_WP) || (type == EtcItemType.BLESSED_GIANT_ENCHT_ATTR_INC_PROP_ENCHT_AM) || (type == EtcItemType.BLESSED_GIANT_ENCHT_ATTR_INC_PROP_ENCHT_WP);
}
@Override
public boolean isWeapon()
{
return _isWeapon;
}
public boolean isBlessed()
{
return _isBlessed;
}
public boolean isDown()
{
return _isDown;
}
public boolean isGiant()
{
return _isGiant;
}
}

