nokiafan1111
Ефрейтор
Доброго времени суток
Столкнулся с проблемой отображения необходимого количества кинар для заточки вещи после +15
Сборка 4.9
Сам код заточки робит, кинары уходят
(как костыль прописал чтобы заточка не осуществлялась, если у персонажа количество кинар меньше чем необходимо. Все работает)
Но вот хотелось бы, чтобы сам клиент не давал точится) без каких либо костылей.
Происходит это все, когда шмот имеет прорыв, т.е в базе итем имеет цифру 1 в колонке is_amplified.
(как тест взял шмот военачальника и убрал у него прорыв и сделал у персонажа 100 кинар, все отображалось и клиент не давал заточится, т.к кинар не хватало)
Вот после этого отображение багается (на скрине видно, что необходимое количество стало 0)
Знаю что это вроде связанно с пакетом CM_MANASTONE (два первых кейса отвечают за это, насколько я правильно понял), копался в нем и чет не смог дать отображение.
Может кто помочь с отображением? что именно надо добавить?
Вот скриншот
И сам код пакета
Столкнулся с проблемой отображения необходимого количества кинар для заточки вещи после +15
Сборка 4.9
Сам код заточки робит, кинары уходят
(как костыль прописал чтобы заточка не осуществлялась, если у персонажа количество кинар меньше чем необходимо. Все работает)
Но вот хотелось бы, чтобы сам клиент не давал точится) без каких либо костылей.
Происходит это все, когда шмот имеет прорыв, т.е в базе итем имеет цифру 1 в колонке is_amplified.
(как тест взял шмот военачальника и убрал у него прорыв и сделал у персонажа 100 кинар, все отображалось и клиент не давал заточится, т.к кинар не хватало)
Вот после этого отображение багается (на скрине видно, что необходимое количество стало 0)
Знаю что это вроде связанно с пакетом 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;
}
}
}




[/url