Кушаем, добираем инги, крафтим, выбрасываем вещь в мусорку.
Использование: Встаём около форжи, рядом сундук с инготами и мусорка, на пол бросаем свинку, в руки берём молоток, меняем константы и меню.
Примечание: После того, как измените все константы, не забудьте изменить путь в меню до изделия, в процедуре InitMenu.
Code: Select all
Program Blacksmithing;
{$Include 'all.inc'}
const
tIngot = $1BEF; // Тип инготов
cIngot = $0000; // Цвет инготов
iCount = 10; // Кол-во инготов, для изготовления вещи
tPig = $09BB; // Тип еды на полу (свинка)
idContainer = $4004AD75; // Сундук с инготами
idTrashCan = $40035305; // Мусорка
tItem = $0F51; // Тип изготавливаемой вещи
MoveDelay = 750; // Задержка на перемещение
Msg1 = 'переместили'; // Сообщение при крафте
Msg2 = 'fail'; // Сообщение при физле
var
k, eat : Integer;
TimeStart : TDateTime;
// Кушаем каждые 100 попыток крафта. Свинку на пол
procedure CheckHungry;
begin
eat := eat + 1;
if (eat > 100) then
begin
eat := 0;
if GetQuantity(FindType(tPig, Ground)) > 0 then
begin
UseObject(FindItem);
end
else
begin
AddToSystemJournal('Свинки кончились.');
end;
end;
end;
// Возвращаем инги в сундук
procedure ClearIngot;
begin
if GetQuantity(FindTypeEx(tIngot, cIngot, Backpack, false)) > 0 then
begin
MoveItem(FindItem, 0, idContainer, 0, 0, 0);
wait(MoveDelay);
end;
end;
// Добираем инги
procedure GetIngot;
begin
MoveItem(FindTypeEx(tIngot, cIngot, idContainer, false), iCount, Backpack, 0, 0, 0);
wait(MoveDelay);
AddToSystemJournal('Добрали ' + IntToStr(iCount) + ' инготов.');
end;
// Проверяем инги
procedure CheckIngot;
begin
ClearIngot;
if GetQuantity(FindTypeEx(tIngot, cIngot, Backpack, false)) < iCount then
begin
if GetQuantity(FindTypeEx(tIngot, cIngot, idContainer, false)) > 0 then
begin
AddToSystemJournal('В сундуке ещё ' + IntToStr(FindFullQuantity) + ' инготов.');
GetIngot;
end
else
begin
AddToSystemJournal('В сундуке закончились инги.');
end;
end;
end;
// Перемещаем скрафченную вещь в мусорку
procedure MoveItemToTrashCan;
begin
if FindType(tItem, Backpack) <> 0 then
begin
MoveItem(FindItem, 0, idTrashCan, 0, 0, 0);
wait(MoveDelay);
end;
end;
// Инициализация меню
procedure InitMenu;
begin
AutoMenu('Blacksmithing','Throwing Weapons');
AutoMenu('Throwing Weapons','Heavy Throwing Knife');
eat := 0;
end;
// Чистимся
procedure CancelTargetsAndMenu;
begin
if TargetPresent then CancelTarget;
while MenuPresent do CloseMenu;
end;
// Крафтим одну вещь и перемещаем в мусорку
procedure MakeItem;
var m1, m2 : Integer;
begin
CancelTargetsAndMenu;
UseObject(FindTypeEx(tIngot, cIngot, Backpack, false));
ClearJournal;
k:=0;
TimeStart:=Now;
repeat
wait(100);
k := k + 1;
m1 := InJournalBetweenTimes(Msg1, TimeStart, Now);
m2 := InJournalBetweenTimes(Msg2, TimeStart, Now);
until (m1<>-1) or (m2<>-1) or (k > 100);
MoveItemToTrashCan;
end;
// Инициализируем меню, кушаем, добираем инги, крафтим
Begin
InitMenu;
repeat
begin
CheckHungry;
CheckIngot;
MakeItem;
end;
until Dead;
End.