Принцип работы скрипта прост: добираем бутылки и реагенты, крафтим lesser explosions, выбрасываем в мусорку, и так по кругу, пока не умрем или не докачаем скил до заданного значения (указывается в настройках к скрипту). Сам скрипт является очередной переделкой моего универсального скрипта на крафт, в первоначальном варианте на Bowcraft. В процессе работы, ведётся следующий лог (в зависимости от кол-ва указанных реагентов и их названия и минимального кол-ва для изготовления зелья):
05:24:04:983 [*]: Sulfurous Ash: 11639 штук. Примерно изделий: 3879 .
05:24:11:199 [*]: Бутылки: 17332 штук. Примерно изделий: 17332 .
05:24:12:056 [*]: Sulfurous Ash: 11636 штук. Примерно изделий: 3878 .
05:24:17:069 [*]: Бутылки: 17331 штук. Примерно изделий: 17331 .
05:24:17:923 [*]: Sulfurous Ash: 11633 штук. Примерно изделий: 3877 .
05:24:23:039 [*]: Бутылки: 17330 штук. Примерно изделий: 17330 .
05:24:23:894 [*]: Sulfurous Ash: 11630 штук. Примерно изделий: 3876 .
Code: Select all
Program Alchemy;
{$Include 'all.inc'}
const
// Типы и ID
idContainer = $4001C6CD; // Сундук с реагентами и бутылками
idTrashCan = $40035305; // Мусорка
tItem = $0F0D; // Тип изготавливаемой вещи
// Скил, до которого качаем на текущих настройках (реагентах)
MaxAlchemySkill = 45.1;
// Журнал
Msg1 = 'переместили'; // Сообщение при крафте
Msg2 = 'toss the failed'; // Сообщение при физле
// Прочее
Trash = true; // Выбрасываем, или складываем в контейнер
MoveDelay = 750; // Задержка на перемещение
qRes = 2; // Размерность массива (кол-во ресурсов)
nRes = 2; // Номер ресурса, на которой дважды кликаем (реагенты)
type
resource= record
tRes : Cardinal;
cRes : Cardinal;
qRes : Integer;
sRes : String;
end;
var
resources : array[1..qRes] of resource;
TimeStart : TDateTime;
k, i : Integer;
procedure Init;
begin
// Пустые бутылки
resources[1].tRes := $0F0E;
resources[1].cRes := $0000;
resources[1].qRes := 1;
resources[1].sRes := 'Бутылки';
// Sulfurous Ash
resources[2].tRes := $0F8C;
resources[2].cRes := $0000;
resources[2].qRes := 3;
resources[2].sRes := 'Sulfurous Ash';
end;
// Возвращаем ресурсы в сундук
function ClearResources(tItem : Cardinal; cItem : Cardinal) : Boolean;
begin
if GetQuantity(FindTypeEx(tItem, cItem, Backpack, false)) > 0 then
begin
MoveItem(FindItem, 0, idContainer, 0, 0, 0);
wait(MoveDelay);
result := true;
end;
end;
// Добираем ресурсы
function GetResources(tItem : Cardinal; cItem : Cardinal; qItem : Integer) : Boolean;
begin
MoveItem(FindTypeEx(tItem, cItem, idContainer, false), qItem, Backpack, 0, 0, 0);
wait(MoveDelay);
result := true;
end;
// Проверяем ресурсы (шаблон)
function CheckResourcesFunc(tItem : Cardinal; cItem : Cardinal; qItem : Integer; sItem : String) : Boolean;
begin
ClearResources(tItem, cItem);
if GetQuantity(FindTypeEx(tItem, cItem, Backpack, false)) < qItem then
begin
if GetQuantity(FindTypeEx(tItem, cItem, idContainer, false)) > 0 then
begin
AddToSystemJournal(sItem + ': ' + IntToStr(FindFullQuantity) + ' штук. Примерно изделий: ' + IntToStr((FindFullQuantity / qItem)) + ' .');
GetResources(tItem, cItem, qItem);
result := true;
end
else
begin
AddToSystemJournal(sItem + ': закончились ресурсы.');
result := false;
end;
end;
end;
// Проверяем ресурсы (вызов)
procedure CheckResourcesProc;
begin
for i:= 1 to qRes do
begin
CheckResourcesFunc(resources[i].tRes, resources[i].cRes, resources[i].qRes, resources[i].sRes);
end;
end;
// Перемещаем скрафченное зелье в мусорку
procedure MoveItemToTrashCan;
begin
if FindType(tItem, Backpack) <> 0 then
begin
MoveItem(FindItem, 0, idTrashCan, 0, 0, 0);
wait(MoveDelay);
end;
end;
// Перемещаем скрафченное зелье в контейнер
procedure MoveItemToContainer;
begin
if FindType(tItem, Backpack) <> 0 then
begin
MoveItem(FindItem, 0, idContainer, 0, 0, 0);
wait(MoveDelay);
end;
end;
// Инициализация меню
procedure InitMenu;
begin
WaitMenu('What sort of potion','Lesser Explosion');
end;
// Чистимся
procedure CancelTargetsAndMenu;
begin
CancelMenu;
if TargetPresent then CancelTarget;
while MenuPresent do CloseMenu;
if WarMode then SetWarMode(false);
while not Hidden do
begin
UseSkill('Stealth');
wait(3500);
end;
end;
// Открываем контейнер с ресурсами
procedure OpenContainer;
begin
UseObject(idContainer);
wait(MoveDelay);
end;
// Крафтим зелье и перемещаем в мусорку
procedure MakeItem;
var m1, m2 : Integer;
begin
CancelTargetsAndMenu;
InitMenu;
ClearJournal;
k:=0;
UseObject(FindTypeEx(resources[nRes].tRes, resources[nRes].cRes, Backpack, false));
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);
if Trash then begin MoveItemToTrashCan; end
else begin MoveItemToContainer; end;
end;
// Инициализируем меню, кушаем, добираем реагенты и бутылки, крафтим
Begin
Init;
OpenContainer;
repeat
CheckResourcesProc;
MakeItem;
until Dead OR (GetSkillValue('Alchemy') >= MaxAlchemySkill);
End.