Перейти к содержанию
Авторизация  
Dmitriy501

Заточка предметов Помогите решить проблему.

Рекомендуемые сообщения

Здравствуйте .
У меня такая проблема свитки S точат только ранг S , а S80 и S84 нет, не могу понять почему подскажите.

 

public class RequestEnchantItem extends L2GameClientPacket
{
	private static final int ENCHANT_DELAY = 1500;
	private static final Logger _log;
	private static final int SUCCESS_VISUAL_EFF_ID = 5965;
	private static final int FAIL_VISUAL_EFF_ID = 5949;
	private int _objectId;
	private int _catalystObjId;

	@Override
	protected void readImpl() {
		_objectId = readD();
		_catalystObjId = readD();
	}

	@Override
	protected void runImpl() {
		final Player player = ((GameClient)getClient()).getActiveChar();
		if (player == null) {
			return;
		}
		if (player.isActionsDisabled()) {
			player.setEnchantScroll(null);
			player.sendActionFailed();
			return;
		}
		if (player.isInTrade()) {
			player.setEnchantScroll(null);
			player.sendActionFailed();
			return;
		}
		if (System.currentTimeMillis() <= player.getLastEnchantItemTime() + 1500L) {
			player.setEnchantScroll(null);
			player.sendActionFailed();
			return;
		}
		if (player.isInStoreMode()) {
			player.setEnchantScroll(null);
			player.sendPacket(EnchantResult.CANCEL);
			player.sendPacket(SystemMsg.YOU_CANNOT_ENCHANT_WHILE_OPERATING_A_PRIVATE_STORE_OR_PRIVATE_WORKSHOP);
			player.sendActionFailed();
			return;
		}
		final PcInventory inventory = player.getInventory();
		inventory.writeLock();
		try {
			final ItemInstance item = inventory.getItemByObjectId(_objectId);
			final ItemInstance scroll = player.getEnchantScroll();
			ItemInstance catalyst = (_catalystObjId > 0) ? inventory.getItemByObjectId(_catalystObjId) : null;
			if (!ItemFunctions.checkCatalyst(item, catalyst)) {
				catalyst = null;
			}
			if (item == null || scroll == null) {
				player.sendActionFailed();
				return;
			}
			final EnchantScroll enchantScroll = EnchantItemHolder.getInstance().getEnchantScroll(scroll.getItemId());
			if (enchantScroll == null) {
				player.sendActionFailed();
				return;
			}
			if (enchantScroll.getMaxEnchant() != -1 && item.getEnchantLevel() >= enchantScroll.getMaxEnchant()) {
				player.sendPacket(EnchantResult.CANCEL);
				player.sendPacket(SystemMsg.INAPPROPRIATE_ENCHANT_CONDITIONS);
				player.sendActionFailed();
				return;
			}
			if (enchantScroll.getItems().size() > 0)
			{
				if (!enchantScroll.getItems().contains(item.getItemId())) {
					player.sendPacket(EnchantResult.CANCEL);
					player.sendPacket(SystemMsg.DOES_NOT_FIT_STRENGTHENING_CONDITIONS_OF_THE_SCROLL);
					player.sendActionFailed();
					return;
				}
			}
			else
			{
				if (enchantScroll.getGrade().extOrdinal() <= item.getGrade().extOrdinal()) {
					player.sendPacket(EnchantResult.CANCEL);
					player.sendPacket(SystemMsg.DOES_NOT_FIT_STRENGTHENING_CONDITIONS_OF_THE_SCROLL);
					player.sendActionFailed();
					return;
				}
				final int itemType = item.getTemplate().getType2();
				switch (enchantScroll.getType()) {
					case ARMOR: {
						if (itemType == 0 || item.getTemplate().isHairAccessory()) {
							player.sendPacket(EnchantResult.CANCEL);
							player.sendPacket(SystemMsg.DOES_NOT_FIT_STRENGTHENING_CONDITIONS_OF_THE_SCROLL);
							player.sendActionFailed();
							return;
						}
						break;
					}
					case WEAPON: {
						if (itemType == 1 || itemType == 2 || item.getTemplate().isHairAccessory()) {
							player.sendPacket(EnchantResult.CANCEL);
							player.sendPacket(SystemMsg.DOES_NOT_FIT_STRENGTHENING_CONDITIONS_OF_THE_SCROLL);
							player.sendActionFailed();
							return;
						}
						break;
					}
					case HAIR_ACCESSORY: {
						if (!item.getTemplate().isHairAccessory()) {
							player.sendPacket(EnchantResult.CANCEL);
							player.sendPacket(SystemMsg.DOES_NOT_FIT_STRENGTHENING_CONDITIONS_OF_THE_SCROLL);
							player.sendActionFailed();
							return;
						}
						break;
					}
				}
			}
			if (!item.canBeEnchanted()) {
				player.sendPacket(EnchantResult.CANCEL);
				player.sendPacket(SystemMsg.INAPPROPRIATE_ENCHANT_CONDITIONS);
				player.sendActionFailed();
				return;
			}
			if (!inventory.destroyItem(scroll, 1L) || (catalyst != null && !inventory.destroyItem(catalyst, 1L))) {
				player.sendPacket(EnchantResult.CANCEL);
				player.sendActionFailed();
				return;
			}
			final boolean equipped = item.isEquipped();
			if (equipped) {
				inventory.isRefresh = true;
				inventory.unEquipItem(item);
			}
			final EnchantVariation variation = EnchantItemHolder.getInstance().getEnchantVariation(enchantScroll.getVariationId());
			if (variation == null) {
				player.sendActionFailed();
				RequestEnchantItem._log.warn("RequestEnchantItem: Cannot find variation ID[" + enchantScroll.getVariationId() + "] for enchant scroll ID[" + enchantScroll.getItemId() + "]!");
				return;
			}
			int newEnchantLvl = item.getEnchantLevel() + Rnd.get(enchantScroll.getMinEnchantStep(), enchantScroll.getMaxEnchantStep());
			newEnchantLvl = Math.min(newEnchantLvl, enchantScroll.getMaxEnchant());
			if (newEnchantLvl < item.getEnchantLevel()) {
				player.sendPacket(EnchantResult.CANCEL);
				player.sendActionFailed();
				return;
			}
			final EnchantVariation.EnchantLevel enchantLevel = variation.getLevel(item.getEnchantLevel() + 1);
			if (enchantLevel == null) {
				player.sendActionFailed();
				RequestEnchantItem._log.warn("RequestEnchantItem: Cannot find variation ID[" + enchantScroll.getVariationId() + "] enchant level[" + (item.getEnchantLevel() + 1) + "] for enchant scroll ID[" + enchantScroll.getItemId() + "]!");
				return;
			}
			double chance = enchantLevel.getBaseChance();
			if (item.getTemplate().getBodyPart() == 32768) {
				chance = enchantLevel.getFullBodyChance();
			}
			else if (item.getTemplate().isMagicWeapon()) {
				chance = enchantLevel.getMagicWeaponChance();
			}
			if (catalyst != null) {
				chance += ItemFunctions.getCatalystPower(catalyst.getItemId());
			}
			if (player.getBonus().getEnchantAdd() > 0.0) {
				chance += player.getBonus().getEnchantAdd();
			}
			if (item.getGrade() != ItemGrade.NONE) {
			}
			if (item.isWeapon()) {
				WorldStatisticsManager.getInstance().updateStat(player, CategoryType.WEAPON_ENCHANT_TRY, item.getGrade().extOrdinal(), item.getEnchantLevel() + 1);
			}
			else {
				WorldStatisticsManager.getInstance().updateStat(player, CategoryType.ARMOR_ENCHANT_TRY, item.getGrade().extOrdinal(), item.getEnchantLevel() + 1);
			}
			if (Rnd.chance(chance)) {
				item.setEnchantLevel(newEnchantLvl);
				item.setJdbcState(JdbcEntityState.UPDATED);
				item.update();
				if (equipped) {
					inventory.equipItem(item);
					inventory.isRefresh = false;
				}
				player.sendPacket(new InventoryUpdate().addModifiedItem(player, item));
				if (item.isWeapon()) {
					WorldStatisticsManager.getInstance().updateStat(player, CategoryType.WEAPON_ENCHANT_MAX, item.getGrade().ordinal(), item.getEnchantLevel());
				}
				else {
					WorldStatisticsManager.getInstance().updateStat(player, CategoryType.ARMOR_ENCHANT_MAX, item.getGrade().ordinal(), item.getEnchantLevel());
				}
				player.sendPacket(new EnchantResult(0, 0, 0L, item.getEnchantLevel()));
				if (enchantLevel.haveSuccessVisualEffect()) {
					player.broadcastPacket(new SystemMessage(3013).addName(player).addNumber(item.getEnchantLevel()).addItemName(item.getItemId()));
					player.broadcastPacket(new MagicSkillUse(player, player, 5965, 1, 500, 1500L));
				}
			}
			else {
				switch (enchantScroll.getResultType()) {
					case CRYSTALS: {
						if (item.isEquipped()) {
							player.sendDisarmMessage(item);
						}
						Log.LogItem(player, "EnchantFail", item);
						if (!inventory.destroyItem(item, 1L)) {
							player.sendActionFailed();
							return;
						}
						final int crystalId = item.getGrade().getCrystalId();
						if (crystalId > 0 && item.getCrystalCountOnEchant() > 0) {
							final int crystalAmount = item.getCrystalCountOnEchant() / 2;
							player.sendPacket(new EnchantResult(1, crystalId, crystalAmount, 0));
							ItemFunctions.addItem(player, crystalId, crystalAmount, true);
						}
						else {
							player.sendPacket(EnchantResult.FAILED_NO_CRYSTALS);
						}
						if (enchantScroll.showFailEffect()) {
							player.broadcastPacket(new MagicSkillUse(player, player, 5949, 1, 500, 1500L));
							break;
						}
						break;
					}
					case DROP_ENCHANT: {
						item.setEnchantLevel(0);
						item.setJdbcState(JdbcEntityState.UPDATED);
						item.update();
						if (equipped) {
							inventory.equipItem(item);
							inventory.isRefresh = false;
						}
						player.sendPacket(new InventoryUpdate().addModifiedItem(player, item));
						player.sendPacket(SystemMsg.THE_BLESSED_ENCHANT_FAILED);
						player.sendPacket(EnchantResult.BLESSED_FAILED);
						break;
					}
					case NOTHING: {
						player.sendPacket(EnchantResult.ANCIENT_FAILED);
						break;
					}
				}
			}
		}
		finally {
			inventory.writeUnlock();
			player.setEnchantScroll(null);
			player.updateStats();
		}
		player.setLastEnchantItemTime(System.currentTimeMillis());
	}

	static {
		_log = LoggerFactory.getLogger((Class)RequestEnchantItem.class);
	}
} 

 

 

public enum ItemGrade
{
    NONE(0, 0), 
    D(1458, 1), 
    C(1459, 2), 
    B(1460, 3), 
    A(1461, 4), 
    S(1462, 5), 
    S80(1462, 5), 
    S84(1462, 5);
    
    public static final ItemGrade[] VALUES;
    private final int _crystalId;
    private final int _extOrdinal;
    
    private ItemGrade(final int crystalId, final int extOrdinal) {
        _crystalId = crystalId;
        _extOrdinal = extOrdinal;
    }
    
    public int getCrystalId() {
        return _crystalId;
    }
    
    public int extOrdinal() {
        return _extOrdinal;
    }
    
    static {
        VALUES = values();
    }
} 

 

 

Изменено пользователем Dmitriy501

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Здравствуйте .

У меня такая проблема свитки S точат только ранг S , а S80 и S84 нет, не могу понять почему подскажите.

 

и что прям ни какого сообщения?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

и что прям ни какого сообщения?

Сообщение такое "Предмет не соответствует требованиям свитка модификации"

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

проверка некорректна

if (enchantScroll.getGrade().extOrdinal() <= item.getGrade().extOrdinal()) {
	player.sendPacket(EnchantResult.CANCEL);
	player.sendPacket(SystemMsg.DOES_NOT_FIT_STRENGTHENING_CONDITIONS_OF_THE_SCROLL);
	player.sendActionFailed();
	return;
}
надо проверять на "не равно" - !=

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...