Code: Select all
Program Alchemy;
// Крафт зелья "Stoneskin".
{$Include 'all.inc'}
var
TimeStart : TDateTime;
k : integer;
const
WhatYouDo = 'Stoneskin'; // Что делаем
TypBottles = $0F0E; // Тип пустых бутылок
TypPotion = $0F0E; // Тип готовых бутылок
ColPotion = $0964; // Цвет готовых бутылок
TypGA= $0F84; // Тип Чеснока (garlic)
TypGS= $0F85; // Тип Женьшеня (ginseng)
TypMR= $0F86; // Тип Корня Мандрагоры (mandrake root)
CountRegs = 300; // Какое количество реагентов брать
CountBottles = 100; // Какое количество пустых бутылок брать
Sunduk_reags_bottels = $40249D09; // ИД сундука с которого берем бутылки и реагенты
Sunduk_craft = $4024A3F9; // ИД сундука в который кладем готовый продукт
hide=1; // Встаем в хайди или нет. 0-нет 1-да
procedure Check_World_Save;
begin
if InJournal('saving')<>-1 then
begin
ClearJournal;
k:=0;
repeat
wait(10000)
k:=k+1;
AddToSystemJournal('World is saving more than '+IntToStr(k*10)+' seconds.');
until (InJournal('data')<>-1) or (k>10)
end
end;
procedure Check_Hidden;
begin
if not Hidden then
begin
while not Hidden do
begin
SetWarMode(False);
useskill('Hiding');
wait(3600);
end;
AddToSystemJournal('Спрятались.');
end;
end;
procedure check_ga;
begin
UseObject(Sunduk_reags_bottels);
FindType(TypGA,Backpack);
if (FindCount=0) OR (Count(TypGA)<10) then
begin
UseObject(Sunduk_reags_bottels);
wait(250);
FindType(TypGA,Sunduk_reags_bottels);
if (FindCount>0) and (CountEx(TypGA,$0000,Sunduk_reags_bottels)>100) then
begin
MoveItem(FindItem,CountRegs,Backpack,0,0,0);
wait(1000);
AddToSystemJournal('Добрали '+IntToStr(CountRegs)+' чеснока. На данный момент имеем '+IntToStr(Count(TypGA))+' штук. Осталось ещё '+IntToStr(CountEx(TypGA,$0000,Sunduk_reags_bottels))+' чеснока.');
end
else
AddToSystemJournal('Ошибка во время добора чеснока.');
exit;
end;
end;
procedure check_gs;
begin
UseObject(Sunduk_reags_bottels);
FindType(TypGS,Backpack);
if (FindCount=0) OR (Count(TypGS)<10) then
begin
UseObject(Sunduk_reags_bottels);
wait(250);
FindType(TypGS,Sunduk_reags_bottels);
if (FindCount>0) and (CountEx(TypGS,$0000,Sunduk_reags_bottels)>100) then
begin
MoveItem(FindItem,CountRegs,Backpack,0,0,0);
wait(1000);
AddToSystemJournal('Добрали '+IntToStr(CountRegs)+' женьшеня. На данный момент имеем '+IntToStr(Count(TypGS))+' штук. Осталось ещё '+IntToStr(CountEx(TypGS,$0000,Sunduk_reags_bottels))+' женьшеня.');
end
else
AddToSystemJournal('Ошибка во время добора женьшеня.');
exit;
end;
end;
procedure check_mr;
begin
UseObject(Sunduk_reags_bottels);
FindType(TypMR,Backpack);
if (FindCount=0) OR (Count(TypMR)<10) then
begin
UseObject(Sunduk_reags_bottels);
wait(250);
FindType(TypMR,Sunduk_reags_bottels);
if (FindCount>0) and (CountEx(TypMR,$0000,Sunduk_reags_bottels)>100) then
begin
MoveItem(FindItem,CountRegs,Backpack,0,0,0);
wait(1000);
AddToSystemJournal('Добрали '+IntToStr(CountRegs)+' корней Мандрагоры. На данный момент имеем '+IntToStr(Count(TypMR))+' штук. Осталось ещё '+IntToStr(CountEx(TypMR,$0000,Sunduk_reags_bottels))+' штук корня Мандрагоры.');
end
else
AddToSystemJournal('Ошибка во время добора корня Мандрагоры.');
exit;
end;
end;
procedure check_bootle;
begin
UseObject(Sunduk_reags_bottels);
FindTypeEx(TypBottles,$0000,Backpack,false);
if (FindCount=0) OR (Count(TypBottles)<5) then
begin
UseObject(Sunduk_reags_bottels);
wait(250);
FindTypeEX(TypBottles,$0000,Sunduk_reags_bottels,false);
if (FindCount>0) and (CountEx(TypBottles,$0000,Sunduk_reags_bottels)>100) then
begin
MoveItem(FindItem,CountBottles,Backpack,0,0,0);
wait(1000);
AddToSystemJournal('Добрали '+IntToStr(CountBottles)+' бутылок. На данный момент имеем '+IntToStr(CountEx(TypBottles,$0000,backpack))+' штук. Осталось ещё '+IntToStr(CountEx(TypBottles,$0000,Sunduk_reags_bottels))+' бутылок.');
end
else
AddToSystemJournal('Ошибка во время добора бутылок.');
exit;
end;
end;
procedure craft_bottle;
begin
FindTypeEx(TypPotion,ColPotion,Backpack,false);
if (FindCount>0) AND (CountEx(TypPotion,ColPotion,backpack) >= 10) then
begin
MoveItem(FindItem,GetQuantity(FindItem),Sunduk_craft,0,0,0);
wait(800);
AddToSystemJournal(IntToStr(CountEx(TypPotion,ColPotion,Sunduk_craft))+' '+WhatYouDo+ ' на данный момент в сундуке.' );
end;
end;
Begin
ClearJournal;
while not Dead do
begin
check_ga;
check_gs;
check_mr;
check_bootle;
if hide=1 then Check_Hidden;
if Weight>500 then exit; ///Если перебор веса выключение
k:=0;
TimeStart:=Now;
UseObject(FindType(TypGA,Backpack))
WaitMenu('What',WhatYouDo);
repeat
wait(100);
k := k + 1;
Check_World_Save;
until (InJournalBetweenTimes('You put', TimeStart, Now)<>-1) or (InJournalBetweenTimes('You toss', TimeStart, Now)<>-1) or (k > 300);
wait(100);
craft_bottle;
ClearJournal;
end;
End.