Доброго времени суток Столкнулся с проблемой отображения необходимого количества кинар для заточки вещи после +15 Сборка 4.9 Сам код заточки робит, кинары уходят (как костыль прописал чтобы заточка не осуществлялась, если у персонажа количество кинар меньше чем необходимо. Все работает) Но вот хотелось бы, чтобы сам клиент не давал точится) без каких либо костылей. Происходит это все, когда шмот имеет прорыв, т.е в базе итем имеет цифру 1 в колонке is_amplified. (как тест взял шмот военачальника и убрал у него прорыв и сделал у персонажа 100 кинар, все отображалось и клиент не давал заточится, т.к кинар не хватало) Вот после этого отображение багается (на скрине видно, что необходимое количество стало 0) Знаю что это вроде связанно с пакетом CM_MANASTONE (два первых кейса отвечают за это, насколько я правильно понял), копался в нем и чет не смог дать отображение. Может кто помочь с отображением? что именно надо добавить? Вот скриншот Спойлер И сам код пакета Спойлер: CM_MANASTONE Код: 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) Можете подсказать в каком файле клиента смотреть это условие?
Please login or register to view links, уточни ещё раз, тебе нужно цену на заточку(прорыв) подправить или сам прорыв?
Вот что я имею в виду) Как должно быть: (итем в бд имеет щас is_amplified = 0) А вот это, после того как итем имеет is_amplified = 1
в сервисе заточки уже все прописано, кинары уходят, просто нужное количество для заточки не отображается. Т.е окно багается ("Всего" показывает 0 кинар, на скрине показано) когда итем имеет прорыв, а именно, когда в бд записывается параметр "is_amplified = 1". При "is_amplified = 0" окно показывает нужное количество кинар как надо. Знаю что это как то правится в пакетке, но не знаю что именно туда прописать.
Вот для полной картины, что именно я спрашиваю) отображение пункта "всего" Please login or register to view links