uses SysUtils;

const
  ITEM_ID: 21735;         // ID предмета, который мы хотим ломать на кристалы (21735=Тарбар)
  ITEM_PRICE = 1540000;   // цена покупки этого предмета в магазине

// https://adrenalinebot.com/ru/api/example/counting-the-number-of-items-in-the-inventory
function ItemCount(id: integer): int64;  overload;     // подсчет кол-ва итемов по ID
var i: integer;
begin
  result:= 0;                                          
  for i:= 0 to Inventory.User.Count-1 do begin         // пробегаемся по инвентарю юзера
    if (Inventory.User.Items(i).ID = id) then          // если id совпали, то
      Inc(result, Inventory.User.Items(i).Count);      // увеличиваем результат на кол-во предметов в стаке
  end; 
end;

// функция обертка для покупки итемов у торговца с npc_id, items - массив того что нужно купить
procedure BuyItemsFromNPC(npc_id: integer; items: array of integer);   
begin                                                  
  Engine.SetTarget(npc_id);                            // берем в таргет торговца 
  Engine.DlgOpen;                                      // открываем диалог с торговцем
  Engine.DlgSel(2);                                    // жмем на строку покупки (порядковый номер строки)
  Engine.NpcTrade(false, items);                       // первый аргумент false означает покупку, второй - список покупок 
end;

begin
  if (User.CanCryst) then begin                        // если наш персонаж умеет кристаллизовать предметы
    // тут можно сделать подбег к NPC, если требуется
    // Engine.MoveTo(....);
    while (ItemCount(57) > ITEM_PRICE) do begin        // если у нас хватает адены на покупку итема, то
      BuyItemsFromNPC(30084, [ITEM_ID, 1]);            // покупаем у NPC (Грэхам в Гиране) нужный итем
      if Engine.CrystalItem(ITEM_ID) then delay(999);  // разбиваем его на кристалы, и если удалось, то ждем немного
    end;
  end else Print('Наш персонаж не умеет ломать предметы!');
  
end.