Вы уверены, что в хрониках ниже IL не происходит того же самого бага?
Давайте заглянем в сам интерфейс игры. Большая часть логики окон описана в
Interface.u. Откроем этот файл из IL и сравним его с таковым из HF p.5. Нас интересует класс
PrivateShopWnd, а именно обработчик события
OnDropItem и вызываемая в нем функция
MoveItemTopToBottom.
В хрониках выше IL(в нашем случае в HF p.5) при перемещении предмета из инвентаря в список покупок вызывается движковая функция
FindItemWithAllProperty, которая в качестве аргумента использует полный
ItemInfo. В клиенте IL таковой функции нет. Нет от слова вообще.
Свернуть ↑
Код:
/**
*
* @example
*var ItemWindowHandle i_handle;
*var ItemInfo info;
*i_handle = GetItemWindowHandle("InventoryWnd.InventoryItem");
*i_handle.GetItem(0, info); //
*I_handle.AddItem(info);
*struct native constructive ItemInfo
*{
* var ItemID Id;
* var string Name;
* var string AdditionalName;
* var string IconName;
* var string IconNameEx1;
* var string IconNameEx2;
* var string IconNameEx3;
* var string IconNameEx4;
* var string ForeTexture;
* var string Description;
* var string DragSrcName;
* var string IconPanel;
* var int DragSrcReserved;
* var string MacroCommand;
* var int ItemType;
* var int ItemSubType;
* var INT64 ItemNum;
* var INT64 Price;
* var int Level;
* var int SlotBitType;
* var int Weight;
* var int MaterialType;
* var int WeaponType;
* var int PhysicalDamage;
* var int MagicalDamage;
* var int PhysicalDefense;
* var int MagicalDefense;
* var int ShieldDefense;
* var int ShieldDefenseRate;
* var int Durability;
* var int CrystalType;
* var int RandomDamage;
* var int Critical;
* var int HitModify;
* var int AttackSpeed;
* var int MpConsume;
* var int ArmorType;
* var int AvoidModify;
* var int Damaged;
* var int Enchanted;
* var int MpBonus;
* var int SoulshotCount;
* var int SpiritshotCount;
* var int PopMsgNum;
* var int BodyPart;
* var int RefineryOp1;
* var int RefineryOp2;
* var int CurrentDurability;
* var int CurrentPeriod;
* // item enchant option - by jin 09/08/05
* var int EnchantOption1;
* var int EnchantOption2;
* var int EnchantOption3;
* //
* var int Reserved;
* var INT64 Reserved64;
* var INT64 DefaultPrice;
* var int ConsumeType;
* var int Blessed;
* var INT64 AllItemCount;
* var int IconIndex;
* var bool bEquipped;
* var bool bRecipe;
* var bool bArrow;
* var bool bShowCount;
* var bool bDisabled;
* var bool bIsLock;
* var int AttackAttributeType; // - lancelot 2007. 4.27.
* var int AttackAttributeValue;
* var int DefenseAttributeValueFire;
* var int DefenseAttributeValueWater;
* var int DefenseAttributeValueWind;
* var int DefenseAttributeValueEarth;
* var int DefenseAttributeValueHoly;
* var int DefenseAttributeValueUnholy;
* var int RelatedQuestID[MAX_RELATED_QUEST];
*};
*/
Свернуть ↑Развернуть ↓
Конкретно в IL при перемещении предмета из инвентаря в список покупок клиент вызывает функцию FindItemWithClassID, которая в качестве аргумента использует только лишь клиентский ID предмета из полного ItemInfo.
Что имеем:
Формируя список покупки, клиент IL использует только клиентский ID предмета. При попытке переноса итема в список покупки клиент перебирает инвентарь игрока, находит первый совпавший по клиентскому ID предмет, копирует его
ItemInfo и отправляет в список покупки.
Клиенты более поздних версий(к примеру, Gracia Final -
NWindow.ItemWindowHandle.FindItemWithEnchantNum -
native final function int FindItemWithEnchantNum (ItemID scID, int EnchantNum);) имеют необходимый функционал, поэтому могут различать предметы с одинаковым клиентским ID и разным уровнем энчанта.
Исправить это невозможно, клиент IL просто не имеет необходимых функций. Как вариант решения проблемы - использовать клиент более поздних версий, вырезав ненужный контент.