• SiteAnalyzer, технический и SEO-анализ сайтов

Кинары при заточке

nokiafan1111

Ефрейтор
Доброго времени суток:)

Столкнулся с проблемой отображения необходимого количества кинар для заточки вещи после +15
Сборка 4.9
Сам код заточки робит, кинары уходят
(как костыль прописал чтобы заточка не осуществлялась, если у персонажа количество кинар меньше чем необходимо. Все работает)
Но вот хотелось бы, чтобы сам клиент не давал точится) без каких либо костылей.
Происходит это все, когда шмот имеет прорыв, т.е в базе итем имеет цифру 1 в колонке is_amplified.
(как тест взял шмот военачальника и убрал у него прорыв и сделал у персонажа 100 кинар, все отображалось и клиент не давал заточится, т.к кинар не хватало)
Вот после этого отображение багается (на скрине видно, что необходимое количество стало 0)
Знаю что это вроде связанно с пакетом CM_MANASTONE (два первых кейса отвечают за это, насколько я правильно понял), копался в нем и чет не смог дать отображение.

Может кто помочь с отображением? что именно надо добавить?:)

Вот скриншот
Aion0473.jpg
И сам код пакета
Код:
public class CM_MANASTONE extends AionClientPacket {

	private int npcObjId;
	private int slotNum;
	private int actionType;
	private int targetFusedSlot;
	private int stoneUniqueId;
	private int targetItemUniqueId;
	private int supplementUniqueId;

	/**
	 * @param opcode
	 */
	public CM_MANASTONE(int opcode, State state, State... restStates) {
		super(opcode, state, restStates);
	}

	@Override
	protected void readImpl() {
		actionType = readC();
		targetFusedSlot = readC();
		targetItemUniqueId = readD();
		switch (actionType) {
			case 1:
			case 2:
			case 4:
			case 8:
				stoneUniqueId = readD();
				supplementUniqueId = readD();
				break;
			case 3:
				slotNum = readC();
				readC();
				readH();
				npcObjId = readD();
				break;
		}
	}

	@Override
	protected void runImpl() {
		Player player = getConnection().getActivePlayer();
		VisibleObject obj = player.getKnownList().getObject(npcObjId);

		switch (actionType) {
			case 1: // enchant stone
			case 2: // add manastone
				EnchantItemAction action = new EnchantItemAction();
				Item manastone = player.getInventory().getItemByObjId(stoneUniqueId);
				Item targetItem = player.getEquipment().getEquippedItemByObjId(targetItemUniqueId);
				if (targetItem == null) {
					targetItem = player.getInventory().getItemByObjId(targetItemUniqueId);
				}
				if (action.canAct(player, manastone, targetItem)) {
					Item supplement = player.getInventory().getItemByObjId(supplementUniqueId);
					if (supplement != null) {
						if (supplement.getItemId() / 100000 != 1661) { // suppliment id check
							return;
						}
					}
					action.act(player, manastone, targetItem, supplement, targetFusedSlot);
				}
				break;
			case 3: // remove manastone
				long price = PricesService.getPriceForService(500, player.getRace());
				if (player.getInventory().getKinah() < price) {
					PacketSendUtility.sendPacket(player, SM_SYSTEM_MESSAGE.STR_MSG_NOT_ENOUGH_KINA(price));
					return;
				}
				if (obj != null && obj instanceof Npc && MathUtil.isInRange(player, obj, 7)) {
					player.getInventory().decreaseKinah(price);
					if (targetFusedSlot == 1) {
						ItemSocketService.removeManastone(player, targetItemUniqueId, slotNum);
					} else {
						ItemSocketService.removeFusionstone(player, targetItemUniqueId, slotNum);
					}
				}
				break;
			case 4: // add godstone
				Item godStone = player.getInventory().getItemByObjId(stoneUniqueId);
				Item targetItemGod = player.getEquipment().getEquippedItemByObjId(targetItemUniqueId);
				if (targetItemGod == null) {
					targetItemGod = player.getInventory().getItemByObjId(targetItemUniqueId);
				}
				GodstoneAction godAction = new GodstoneAction();
				if (godAction.canAct(player, godStone, targetItemGod)) {
					godAction.act(player, godStone, targetItemGod);
				}
				break;
		}
	}
}
 
Ты посмотри есть ли условие у предмета на прорыв в клиенте, если в клиенте не указан прорыв а на сервере указан то и будет косяки,
чтобы что-то конкретно править, вы сравните параметры предметов клиент - сервер, если будут расхождение может и не такое вылезти .
Вы наверно же клиенты модифицируете, а потом думаете почему что-то не работает. :)
 
И мой совет не лепите обработку заточки и вставки маг камней в один сервис, сделайте раздельно, вам легче будет и код ровней будет отрабатывать.
 
Ты посмотри есть ли условие у предмета на прорыв в клиенте, если в клиенте не указан прорыв а на сервере указан то и будет косяки,
чтобы что-то конкретно править, вы сравните параметры предметов клиент - сервер, если будут расхождение может и не такое вылезти .
Вы наверно же клиенты модифицируете, а потом думаете почему что-то не работает. :)
Клиент не модифицирую, чистый с сайта eu)
Можете подсказать в каком файле клиента смотреть это условие?
 
Вот что я имею в виду)

Как должно быть:
(итем в бд имеет щас is_amplified = 0)
Снимок.PNG

А вот это, после того как итем имеет is_amplified = 1

Снимок1.PNG
 
в сервисе заточки уже все прописано, кинары уходят, просто нужное количество для заточки не отображается. Т.е окно багается ("Всего" показывает 0 кинар, на скрине показано) когда итем имеет прорыв, а именно, когда в бд записывается параметр "is_amplified = 1".
При "is_amplified = 0" окно показывает нужное количество кинар как надо. Знаю что это как то правится в пакетке, но не знаю что именно туда прописать.
 
Назад
Сверху