Показать сообщение отдельно
Непрочитано 25.02.2014, 18:19   #3
Аватар для Persy
Пользователь

По умолчанию Re: Interlude баг клиента №2

Вы уверены, что в хрониках ниже IL не происходит того же самого бага?

Давайте заглянем в сам интерфейс игры. Большая часть логики окон описана в Interface.u. Откроем этот файл из IL и сравним его с таковым из HF p.5. Нас интересует класс PrivateShopWnd, а именно обработчик события OnDropItem и вызываемая в нем функция MoveItemTopToBottom.
В хрониках выше IL(в нашем случае в HF p.5) при перемещении предмета из инвентаря в список покупок вызывается движковая функция FindItemWithAllProperty, которая в качестве аргумента использует полный ItemInfo. В клиенте IL таковой функции нет. Нет от слова вообще.
Комментарий NCSoft к этой функции в NWindow.ItemWindowHandle, описывающий структуру ItemInfo:
Свернуть ↑Развернуть ↓


Конкретно в IL при перемещении предмета из инвентаря в список покупок клиент вызывает функцию FindItemWithClassID, которая в качестве аргумента использует только лишь клиентский ID предмета из полного ItemInfo.

Что имеем:

Формируя список покупки, клиент IL использует только клиентский ID предмета. При попытке переноса итема в список покупки клиент перебирает инвентарь игрока, находит первый совпавший по клиентскому ID предмет, копирует его ItemInfo и отправляет в список покупки.

Клиенты более поздних версий(к примеру, Gracia Final - NWindow.ItemWindowHandle.FindItemWithEnchantNum - native final function int FindItemWithEnchantNum (ItemID scID, int EnchantNum);) имеют необходимый функционал, поэтому могут различать предметы с одинаковым клиентским ID и разным уровнем энчанта.

Исправить это невозможно, клиент IL просто не имеет необходимых функций. Как вариант решения проблемы - использовать клиент более поздних версий, вырезав ненужный контент.
Persy вне форума Отправить сообщение для Persy с помощью Skype™ Ответить с цитированием
Сказали спасибо: