Принцип работы:
В сундуке лежат инготы, скрипт берет оптимальное количество, делает вещи, при перегрузе - кидает вещи в сундук. При нехватке инготов - сбрасывает вещи в сундук, берет из сундука инготы.
Пример сделан для крафта empty bottle.
Для изменения вещи для крафта, меняем нужные константы
Например, меняем на локпики:
ItemType = $14FB;
NeedIngots = 1;
MenuThird = 'lockpick';
SuccsessLine = 'You put the lockpick';
Вот и все, остальное оставляем так же, как было.
Code: Select all
const 
     Sunduk = $00000000;  //ID сундука
     FoodType = $160A;    //тип еды - legs of lamb 
     IngotType = $1BEF;   //тип инготов
     ToolsType = $1EBC;   //тип tinker's tools
     ItemType = $0F0E;    //тип вещи, которую крафтим - empty bottle
     NeedIngots = 3;      //сколько инготов для крафта 1 вещи
     IngotWeight = 0.6;   //вес одного ингота
     MenuFirst = 'Tinkering';            //основное меню 
     MenuSecond = 'Tools';               //первый выбор 
     MenuThird = 'empty bottle';         //второй выбор
     SuccsessLine = 'You put the empty'; //строка журнала при удачном крафте
      
procedure OpenContainer(Container: Cardinal); 
begin 
   UseObject(Container); 
   repeat 
      wait(50); 
   until FindType($FFFF,Container) > 0 
end; 
procedure FullMove(ItemT: Word; Quantity: Integer; BagFrom, BagTo: Cardinal); 
begin 
   if InJournal('World is saving') <> -1 then begin
      repeat 
         wait(50); 
      until InJournal('World data saved in') <> -1;
      SetJournalLine(InJournal('World is saving'),'')
   end; 
   FindType(ItemT,BagFrom); 
   if FindCount > 0 then begin 
      MoveItem(FindItem,Quantity,BagTo,0,0,0); 
      wait(700) 
   end 
end; 
        
begin 
   SetARStatus(True); 
   CancelMenu; 
   OpenContainer(BackPack); 
   OpenContainer(Sunduk);    
   AutoMenu(MenuFirst,MenuSecond); 
   AutoMenu(MenuSecond,MenuThird); 
   FindType(IngotType,Sunduk); 
   while (FindQuantity >= NeedIngots) or (Count(IngotType) >= NeedIngots) do begin 
      ClearJournal;  
      if (Count(IngotType) < NeedIngots) or (Weight > 4*Str) then begin 
         if Count(FoodType) > 0 then UseType(FoodType,$FFFF); 
         FullMove(ItemType,Count(ItemType),BackPack,Sunduk); 
         FullMove(IngotType,Round((4*Str-Weight)/(1.5*IngotWeight)),Sunduk,BackPack) 
      end;  
      UseType(ToolsType,$FFFF); 
      repeat 
         wait(50); 
      until (InJournal(SuccsessLine) <> -1) or (InJournal(' failed') <> -1); 
      FindType(IngotType,Sunduk) 
   end; 
   FullMove(ItemType,Count(ItemType),BackPack,Sunduk); 
   FullMove(IngotType,Count(IngotType),BackPack,Sunduk); 
   CancelMenu 
end.


