Что делает скрипт: ищет руду в указанной сумке, перетаскивает в бэкпак по несколько штук (в зависимости от цвета руды - настраивается перетаскивание разного количества),
сразу плавит и кладет инготы в другую сумку. Попутно считает количество переплавленных и сгоревших инготов каждого цвета.
Можно запустить как отдельный макрос, продвинутые юзеры стелса могут использовать как внешнюю процедуру например при разгрузке шахтера (если у них еще такого нет )
Спасибо nepopus за готовую инфу по типам/цветам/именам руды и ингот.
Критика и предложения по усовершенствованию приветствуются
Code: Select all
Program Pereplavka_by_alpi;
const
mainBag = $4047DD76; // Главная сумка. Если сумка с рудой в бекпаке чара - поставить backpack
oreBag = $4002747C; // Исходная сумка с рудой
IngotBag = $4047DD76; // Сумка куда складываются инготы
oreLow = 10; // по сколько штук плавить руду до верита
oreMid = 3; // по сколько штук плавить руду от верита до обсида
oreHig = 1; // по сколько штук плавить руду выше обсида
worldmessage = 'World is saving now...';
hungrymessage = 'You are starving';
messagetimer = (0.05/(24*60));
Food = $09BB;
type toreinfo = record
name: string;
oreColor: word;
ingotColor: word;
ingotType: word;
end;
var
oreInfo: array of toreinfo;
oreType: array of word;
tmpingot, tmpcount,tmpfizzle,tmpdrop : integer;
i,k,j : byte;
tmpid : cardinal;
Procedure CheckState;
begin
if InJournalBetweenTimes(worldmessage,now-2*messagetimer,now) > 0 then begin AddToSystemJournal('Сохранение мира. Ждем 60 секунд'); wait(60000); end;
if InJournalBetweenTimes(hungrymessage,now-messagetimer,now) > 0 then
begin
wait(500);
FindType(Food,backpack);
if findcount > 0 then begin UseObject(finditem); AddToSystemJournal('Перекус. Осталось еды в паке: '+IntToStr(GetQuantity(FindType(Food,backpack)))+' шт'); end
else AddToSystemJournal('Не найдена еда! Положите еду в пак!');
end;
end;
begin
UseObject(MainBag);
wait(1000);
UseObject(oreBag);
wait(1000);
setlength(oreInfo, 30);
oreInfo[0].name := 'Iron';
oreInfo[0].oreColor := $0000;
oreInfo[0].ingotColor := $0000;
oreInfo[0].ingotType := $1BEF;
////////////
oreInfo[1].name := 'Rusty';
oreInfo[1].oreColor := $0750;
oreInfo[1].ingotColor := $0750;
oreInfo[1].ingotType := $1BEF;
////////////
oreInfo[2].name := 'Old Copper';
oreInfo[2].oreColor := $0590;
oreInfo[2].ingotColor := $0590;
oreInfo[2].ingotType := $1BEF;
////////////
oreInfo[3].name := 'Dull Copper';
oreInfo[3].oreColor := $060A;
oreInfo[3].ingotColor := $060A;
oreInfo[3].ingotType := $1BEF;
////////////
oreInfo[4].name := 'Copper';
oreInfo[4].oreColor := $0088;
oreInfo[4].ingotColor := $0000;
oreInfo[4].ingotType := $1BE3;
////////////
oreInfo[5].name := 'Bronze';
oreInfo[5].oreColor := $0488;
oreInfo[5].ingotColor := $0488;
oreInfo[5].ingotType := $1BEF;
////////////
oreInfo[6].name := 'Silver';
oreInfo[6].oreColor := $0482;
oreInfo[6].ingotColor := $0000;
oreInfo[6].ingotType := $1BF5;
////////////
oreInfo[7].name := 'Gold';
oreInfo[7].oreColor := $0032;
oreInfo[7].ingotColor := $0000;
oreInfo[7].ingotType := $1BE9;
////////////
oreInfo[8].name := 'Shadow';
oreInfo[8].oreColor := $096B;
oreInfo[8].ingotColor := $096B;
oreInfo[8].ingotType := $1BEF;
////////////
oreInfo[9].name := 'Rose';
oreInfo[9].oreColor := $0014;
oreInfo[9].ingotColor := $0014;
oreInfo[9].ingotType := $1BEF;
////////////
oreInfo[10].name := 'Agapite';
oreInfo[10].oreColor := $0193;
oreInfo[10].ingotColor := $0193;
oreInfo[10].ingotType := $1BEF;
////////////
oreInfo[11].name := 'Blood rock';
oreInfo[11].oreColor := $04C2;
oreInfo[11].ingotColor := $04C2;
oreInfo[11].ingotType := $1BEF;
////////////
oreInfo[12].name := 'Verite';
oreInfo[12].oreColor := $07D5;
oreInfo[12].ingotColor := $07D5;
oreInfo[12].ingotType := $1BEF;
////////////
oreInfo[13].name := 'Valorite';
oreInfo[13].oreColor := $00CE;
oreInfo[13].ingotColor := $00CE;
oreInfo[13].ingotType := $1BEF;
////////////
oreInfo[14].name := 'Mitheril';
oreInfo[14].oreColor := $052D;
oreInfo[14].ingotColor := $052D;
oreInfo[14].ingotType := $1BEF;
////////////
oreInfo[15].name := 'Black Rock';
oreInfo[15].oreColor := $0455;
oreInfo[15].ingotColor := $0455;
oreInfo[15].ingotType := $1BEF;
////////////
oreInfo[16].name := 'Obsidian';
oreInfo[16].oreColor := $0028;
oreInfo[16].ingotColor := $0028;
oreInfo[16].ingotType := $1BEF;
////////////
oreInfo[17].name := 'Plutonium';
oreInfo[17].oreColor := $08AF;
oreInfo[17].ingotColor := $08AF;
oreInfo[17].ingotType := $1BEF;
////////////
oreInfo[18].name := 'Dragon';
oreInfo[18].oreColor := $0085;
oreInfo[18].ingotColor := $0085;
oreInfo[18].ingotType := $1BEF;
////////////
oreInfo[19].name := 'Crystaline';
oreInfo[19].oreColor := $09A4;
oreInfo[19].ingotColor := $09A4;
oreInfo[19].ingotType := $1BEF;
///////////
oreInfo[20].name := 'Krynite';
oreInfo[20].oreColor := $010F;
oreInfo[20].ingotColor := $010F;
oreInfo[20].ingotType := $1BEF;
////////////
oreInfo[21].name := 'Vulcan';
oreInfo[21].oreColor := $09DA;
oreInfo[21].ingotColor := $09DA;
oreInfo[21].ingotType := $1BEF;
////////////
oreInfo[22].name := 'Sand Rock';
oreInfo[22].oreColor := $008F;
oreInfo[22].ingotColor := $008F;
oreInfo[22].ingotType := $1BEF;
////////////
oreInfo[23].name := 'Blood Crest';
oreInfo[23].oreColor := $09EC;
oreInfo[23].ingotColor := $09EC;
oreInfo[23].ingotType := $1BEF;
////////////
oreInfo[24].name := 'Steel';
oreInfo[24].oreColor := $09D3;
oreInfo[24].ingotColor := $09D3;
oreInfo[24].ingotType := $1BEF;
////////////
oreInfo[25].name := 'Elvin';
oreInfo[25].oreColor := $09E6;
oreInfo[25].ingotColor := $09E6;
oreInfo[25].ingotType := $1BEF;
////////////
oreInfo[26].name := 'Gorgan';
oreInfo[26].oreColor := $09F0;
oreInfo[26].ingotColor := $09F0;
oreInfo[26].ingotType := $1BEF;
////////////
oreInfo[27].name := 'Acid';
oreInfo[27].oreColor := $09B9;
oreInfo[27].ingotColor := $09B9;
oreInfo[27].ingotType := $1BEF;
////////////
oreInfo[28].name := 'Aqua';
oreInfo[28].oreColor := $0060;
oreInfo[28].ingotColor := $0060;
oreInfo[28].ingotType := $1BEF;
////////////
oreInfo[29].name := 'Eldar';
oreInfo[29].oreColor := $0BA7;
oreInfo[29].ingotColor := $0BA7;
oreInfo[29].ingotType := $1BEF;
setlength(oreType, 4);
oreType[3] := $19B7; //Руда 1шт.
oreType[2] := $19BA; //Руда 2шт.
oreType[1] := $19B8; //Руда 3шт.
oreType[0] := $19B9; //Руда 4шт.
for i := 0 to 29 do // начинаем перебирать цвет руды от айрона до эльдара
begin
CheckState; // проверка на ворлдсейв
tmpingot := CountEx(oreInfo[i].ingotType,oreInfo[i].ingotColor,IngotBag); // запоминаем количество готовых инготов текущего цвета
if tmpingot > 0 then AddToSystemJournal(oreInfo[i].name+' в сундуке: '+IntToStr(tmpingot)'ингот.'); // выводим сообщение
tmpid := FindTypeEx(oreType[0],oreInfo[i].oreColor,oreBag,false); ////////////////////
if tmpid = 0 then tmpid := FindTypeEx(oreType[1],oreInfo[i].oreColor,oreBag,false); //
if tmpid = 0 then tmpid := FindTypeEx(oreType[2],oreInfo[i].oreColor,oreBag,false); // Проверяем, есть ли руда нужного типа в паке.
if tmpid = 0 then tmpid := FindTypeEx(oreType[3],oreInfo[i].oreColor,oreBag,false); //
tmpcount := findquantity; // Запоминаем количество руды этого типа
if tmpid <> 0 then // Если нашли руду - начинаем плавить
begin
AddToSystemJournal(oreInfo[i].name+': Плавлю руду *'+IntToStr(tmpcount)'*'); // Выводим сообщения
if i < 12 then tmpdrop := oreLow /////////////////////
else if (i >= 12) and (i < 16) then tmpdrop := oreMid // Настраиваем количество переносимой в пак за один раз руды для разных цветов
else if i >= 16 then tmpdrop := oreHig; //
for k := 1 to tmpcount/tmpdrop +1 do // Задаем количество итераций, необходимых для переноса руды одного цвета
begin
for j := 0 to 3 do // Перебираем руду по типу: 4 в стопке, 3-2-1 в стопке.
begin
CheckState; // Проверка на ворлдсейв
FindTypeEx(oreType[j],oreInfo[i].oreColor,oreBag,false); // Ищем руду нужного цвета в паке для руды
wait(500); // Задержка 0,5с минимум
if findcount > 0 then moveitem(finditem,tmpdrop,backpack,0,0,0); // Если найдена руда нужного типа - перемещаем ее в пак
end;
for j := 0 to 3 do // Снова перебираем руду по типу
repeat // * начало цикла плавки
CheckState; // Проверка на ворлдсейв
wait(100);
if CountEx(oreType[j],oreInfo[i].oreColor,backpack) > 0 then // Проверяем, найден ли нужный тип руды
UseType(oreType[j],oreInfo[i].oreColor); // Если да - плавим руду в бэкпаке
FindTypeEx(oreInfo[i].ingotType,oreInfo[i].ingotColor,backpack,false); // Ищем готовые инготы в бэкпаке
if findquantity > 0 then
begin
wait(500);
moveitem(finditem,9999,IngotBag,0,0,0); // если найдены - перемещаем инготы в сумку для инготов
end;
until FindTypeEx(oreType[j],oreInfo[i].oreColor,backpack,false) = 0; // * выход из цикла когда переплавили инготы (руды нет в паке)
end;
tmpfizzle := tmpcount + tmpingot - CountEx(oreInfo[i].ingotType,oreInfo[i].ingotColor,IngotBag); // небольшая калькуляция для подсчета количества сгоревших инготов
AddToSystemJournal('Добавлено: '+IntToStr(tmpcount-tmpfizzle)+' ингот. Сгорело : '+IntToStr(tmpfizzle)+' шт.');
end else AddToSystemJournal(oreInfo[i].name+': руда не найдена ');
wait(500);
end;
wait(500);
end.