↑ ↓

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

Тема в разделе "Помощь", создана пользователем nokiafan1111, 16 окт 2019.

  1. TopicStarter Overlay
    Offline

    nokiafan1111 Ефрейтор

    331
    21
    51
    Кредиты:
    $329,63
    Репутация:
    2
    Доброго времени суток:)

    Столкнулся с проблемой отображения необходимого количества кинар для заточки вещи после +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;
    		}
    	}
    }
     
  2. Offline

    SG Shaiy Ефрейтор

    402
    95
    61
    Кредиты:
    $15.767,72
    Репутация:
    9
    Ты посмотри есть ли условие у предмета на прорыв в клиенте, если в клиенте не указан прорыв а на сервере указан то и будет косяки,
    чтобы что-то конкретно править, вы сравните параметры предметов клиент - сервер, если будут расхождение может и не такое вылезти .
    Вы наверно же клиенты модифицируете, а потом думаете почему что-то не работает. :)
     
  3. Offline

    SG Shaiy Ефрейтор

    402
    95
    61
    Кредиты:
    $15.767,72
    Репутация:
    9
    И мой совет не лепите обработку заточки и вставки маг камней в один сервис, сделайте раздельно, вам легче будет и код ровней будет отрабатывать.
     
  4. TopicStarter Overlay
    Offline

    nokiafan1111 Ефрейтор

    331
    21
    51
    Кредиты:
    $329,63
    Репутация:
    2
    Клиент не модифицирую, чистый с сайта eu)
    Можете подсказать в каком файле клиента смотреть это условие?
     
  5. Offline

    klubheads Сержант Команда форума Модератор

    2.011
    356
    189
    Кредиты:
    $2.140,45
    Репутация:
    54
    Please login or register to view links, уточни ещё раз, тебе нужно цену на заточку(прорыв) подправить или сам прорыв?
     
  6. TopicStarter Overlay
    Offline

    nokiafan1111 Ефрейтор

    331
    21
    51
    Кредиты:
    $329,63
    Репутация:
    2
    Отображение цены
     
  7. TopicStarter Overlay
    Offline

    nokiafan1111 Ефрейтор

    331
    21
    51
    Кредиты:
    $329,63
    Репутация:
    2
    Вот что я имею в виду)

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

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

    Снимок1.PNG
     
  8. Offline

    SG Shaiy Ефрейтор

    402
    95
    61
    Кредиты:
    $15.767,72
    Репутация:
    9
    смотри сервис
     
  9. TopicStarter Overlay
    Offline

    nokiafan1111 Ефрейтор

    331
    21
    51
    Кредиты:
    $329,63
    Репутация:
    2
    в сервисе заточки уже все прописано, кинары уходят, просто нужное количество для заточки не отображается. Т.е окно багается ("Всего" показывает 0 кинар, на скрине показано) когда итем имеет прорыв, а именно, когда в бд записывается параметр "is_amplified = 1".
    При "is_amplified = 0" окно показывает нужное количество кинар как надо. Знаю что это как то правится в пакетке, но не знаю что именно туда прописать.
     
  10. TopicStarter Overlay
    Offline

    nokiafan1111 Ефрейтор

    331
    21
    51
    Кредиты:
    $329,63
    Репутация:
    2
    Вот для полной картины, что именно я спрашиваю) отображение пункта "всего"
    Please login or register to view links