Указываем цвет и тип ингот, количество наборов для ковки.
Если инготов недостаточно для ковки нужного количества - кует столько наборов, на сколько хватит ингот.
В константе FemaleMake указывается, какой нагрудник ковать - женский(true) или мужской (false)
Code: Select all
Program Kovka_by_alpik;
const
IngotColorName = 'Gold';
IngotColor = $0000;
IngotType = $1BE9;
sunduk = $4047DD76;
sumka_ingot = $4047DD76;
MakeWhat = 'Plate Mail';
MakeCount = 3; // сколько комплектов изготовить
FemaleMake = false; // изготавливать женский или мужской нагрудник
worldmessage = 'World is saving now...';
hungrymessage = 'You are starving';
messagetimer = (0.05/(24*60));
Food = $09BB;
type maketype = record
name: string;
menu: string;
mincount: byte;
end;
var
tmp_hammer : 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;
function MakeBS( make : string ) : boolean;
var ingot : cardinal;
i, j, tmp_make_count : byte ;
all_min_count : integer;
platearray : array[0..6] of maketype;
ctime : TDateTime;
sunduk_count, backpack_count, all_count, tmp_count : integer;
begin
all_min_count := 0;
platearray[0].name:= 'Plate Helmet';
platearray[0].menu:= '(1)';
platearray[0].mincount:= 15;
platearray[1].name:= 'Plate Gorget';
platearray[1].menu:= '(2)';
platearray[1].mincount:= 10;
platearray[2].name:= 'Plate Gauntlets';
platearray[2].menu:= '(3)';
platearray[2].mincount:= 12;
platearray[3].name:= 'Plate Arms';
platearray[3].menu:= '(4)';
platearray[3].mincount:= 18;
platearray[4].name:= 'Plate Legs';
platearray[4].menu:= '(5)';
platearray[4].mincount:= 20;
if FemaleMake then begin
platearray[5].name:= 'Feemale Plate';
platearray[5].menu:= '(6)';
end else begin
platearray[5].name:= 'Platemail';
platearray[5].menu:= '(7)';
end;
platearray[5].mincount:= 25;
platearray[6].name:= 'Plate Heater';
platearray[6].menu:= 'Heater Shield';
platearray[6].mincount:= 18;
CheckState;
for i := 0 to 6 do all_min_count := all_min_count + platearray[i].mincount;
AddToSystemJournal('Приступаем к изготовлению заказа. На один комплект требуется '+IntToStr(all_min_count)+' ингот.');
sunduk_count := CountEx(IngotType,IngotColor,sumka_ingot);
backpack_count := CountEx(IngotType,IngotColor,backpack);
all_count := sunduk_count + backpack_count;
tmp_count := all_count / all_min_count;
if tmp_count >= MakeCount then
begin
CheckState;
AddToSystemJournal('Ингот: '+IntToStr(all_count)+', хватит чтобы изготовить '+IntToStr(tmp_count)+' '+MakeWhat+' *без учета физлов*');
tmp_make_count := MakeCount;
end else begin
if tmp_count > 0 then AddToSystemJournal('Ингот: '+IntToStr(all_count)+', хватит на изготовление части заказа:'+IntToStr(tmp_count)+' из '+IntToStr(MakeCount)+' *без учета физлов*')
else AddToSystemJournal('Недостаточно ресурсов для изготовления заказа');
tmp_make_count := tmp_count;
end;
result := true;
for j := 1 to tmp_make_count do
begin
CheckState;
if CountEx(IngotType,IngotColor,backpack) < all_min_count then
begin
if CountEx(IngotType,IngotColor,sumka_ingot) < all_min_count then
begin
AddToSystemJournal('Недостаточно ресурсов для изготовления комплекта №'+IntToStr(j));
exit;
end else begin
wait(500);
moveitem(FindTypeEx(IngotType,IngotColor,sumka_ingot,false),all_min_count,backpack,0,0,0);
end;
end;
for i := 0 to 6 do
begin
wait(1000);
CheckState;
ingot := FindTypeEx(IngotType,IngotColor,backpack,false);
if (GetQuantity(ingot) >= platearray[i].mincount) then
begin
CancelMenu;
WaitMenu( 'Black' , 'Armor & Weapon' );
WaitMenu( 'Armor' , 'Armor' );
WaitMenu( 'Armor' , 'Plate Armor' );
WaitMenu('Plate Armor',platearray[i].menu);
ctime := now;
UseObject(ingot);
wait(10000);
if InJournalBetweenTimes('You have failed',ctime,now) > 0 then
begin
AddToSystemJournal('Не удалось создать предмет '+platearray[i].name+'. Повтор.');
i := i-1;
end;
end else
if CountEx(IngotType,IngotColor,sumka_ingot) < platearray[i].mincount then
begin
AddToSystemJournal('Недостаточно ресурсов для изготовления детали '+platearray[i].name);
exit;
end else begin
CheckState;
wait(500);
moveitem(FindTypeEx(IngotType,IngotColor,sumka_ingot,false),platearray[i].mincount,backpack,0,0,0);
i := i-1;
end;
end;
end;
end;
Begin
AddToSystemJournal('*** инициализация скрипта ***');
AddToSystemJournal('Инготы : '+IngotColorName);
AddToSystemJournal('Изготавливаем : '+MakeWhat);
UseObject(sunduk); wait(1000);
UseObject(sumka_ingot); wait(1000);
CheckState;
tmp_hammer := ObjAtLayerEx(RhandLayer,self);
if tmp_hammer = 0 then tmp_hammer := FindType($13E3,backpack);
if tmp_hammer <> 0 then UseObject(tmp_hammer) else AddToSystemJournal('Молоток не найден, ковать не буду :(');
if TargetPresent then CancelTarget;
AddToSystemJournal('Приняли заказ на изготовление '+IntToStr(MakeCount)+' '+MakeWhat);
if MakeBS(MakeWhat) then AddToSystemJournal('Изготовление закончено');
CheckState;
if CountEx(IngotType,IngotColor,backpack) > 0 then moveitem(FindTypeEx(IngotType,IngotColor,backpack,false),999,sumka_ingot,0,0,0);
End.