Code: Select all
Program Craft;
{$Include 'all.inc'}
const
//===============Setup=================================//
RegChest = $400875F8; // otkyda brat' regi
CraftedItemChest = $4014877A; // keda skladuvat
TrashBagType = $09AA; // ne pomnu chto eto... =)
//===============Choose Your Destiny===================//
Quantity = 100; // skolko delat
NameIt = 'spyglass'; // - chto delat
HowManyLoadReg = 500; // po skolko gryzit
SaveThisQuantityOfReg = 2000; // savim regi v syndyke
//=================END SETUP===========================//
type TItemInfo = Record
Name : String;
Tool, Container, TypeOfItem : Cardinal;
QuantityOfReg, CraftGump, CategoryBtn, ItemBtn, SmeltBtn : Integer;
Reg : array[0..1] of Cardinal;
end;
var
Item : TItemInfo;
Food : array[0..4] of Cardinal;
//i : Integer;
procedure Init;
begin
if (NameIt = 'scroll') then
begin
Item.Name := 'Скролл';
Item.Tool := $0F9D;
Item.Container := $0E76;
Item.TypeOfItem := $1544;
Item.QuantityOfReg := 2;
Item.CraftGump := 1044005;
Item.CategoryBtn := 5;
Item.ItemBtn := 16;
Item.Reg[0] := $1766;
end;
if (NameIt = 'cutlass') then
begin
Item.Name := 'Катласс';
Item.Tool := $13E3;
Item.Container := $0E76;
Item.TypeOfItem := $1441;
Item.QuantityOfReg := 8;
Item.CraftGump := 1044002;
Item.CategoryBtn := 11;
Item.ItemBtn := 19;
Item.Reg[0] := $1BEF;
end;
if (NameIt = 'scissors') then
begin
Item.Name := 'Ножницы';
Item.Tool := $1EB8;
Item.Container := $0E76;
Item.TypeOfItem := $0F9F;
Item.QuantityOfReg := 2;
Item.CraftGump := 1044007;
Item.CategoryBtn := 8;
Item.ItemBtn := 17;
Item.Reg[0] := $1BEF;
Item.SmeltBtn := 2;
end;
if (NameIt = 'scorp') then
begin
Item.Name := 'Штука для карпы';
Item.Tool := $1EB8;
Item.Container := $0E76;
Item.TypeOfItem := $10E7;
Item.QuantityOfReg := 2;
Item.CraftGump := 1044007;
Item.CategoryBtn := 8;
Item.ItemBtn := 21;
Item.Reg[0] := $1BEF;
Item.SmeltBtn := 2;
end;
if (NameIt = 'lockpick') then
begin
Item.Name := 'Отмычка';
Item.Tool := $1EB8;
Item.Container := $0E76;
Item.TypeOfItem := $14FC;
Item.QuantityOfReg := 1;
Item.CraftGump := 1044007;
Item.CategoryBtn := 8;
Item.ItemBtn := 59;
Item.Reg[0] := $1BEF;
Item.SmeltBtn := 2;
end;
if (NameIt = 'spyglass') then
begin
Item.Name := 'Подзорная труба';
Item.Tool := $1EB8;
Item.Container := $0E76;
Item.TypeOfItem := $14F5;
Item.QuantityOfReg := 4;
Item.CraftGump := 1044007;
Item.CategoryBtn := 11;
Item.ItemBtn := 35;
Item.Reg[0] := $1BEF;
Item.SmeltBtn := 2;
end;
//================================//
Food[0] := $09B7;
Food[1] := $1608;
Food[2] := $09D0;
Food[3] := $160A;
Food[4] := $097B;
end;
procedure Obed;
var
im : Integer;
begin
for im := 0 to 4 do
begin
if (FindType(Food[im], backpack) > 0) then
begin
UseObject(FindItem);
Wait(1000);
end;
end;
end;
procedure GumpCheckAndSolve;
var
gi :TGumpInfo;
begin
if IsGump then
begin
GetGumpInfo(GetGumpsCount-1, gi);
if not (gi.XmfHTMLGumpColor[0].Cliloc_id = Item.CraftGump) then
begin
while IsGump do
begin
CloseSimpleGump(GetGumpsCount-1);
end;
if (FindType(Item.Tool, backpack) > 0) then UseObject(FindItem);
Wait(1500);
end;
end;
if not IsGump then
begin
if (FindType(Item.Tool, backpack) > 0) then UseObject(FindItem);
Wait(1000);
end;
end;
procedure CraftOneItem;
var
gi : TGumpInfo;
begin
GumpCheckAndSolve;
Obed;
Wait(1500);
CheckSave;
GetGumpInfo(GetGumpsCount-1, gi);
if (gi.XmfHTMLGumpColor[0].Cliloc_id = Item.CraftGump) then
begin
NumGumpButton(GetGumpsCount-1, gi.GumpButtons[Item.CategoryBtn].return_value);
Wait(1500);
CheckSave;
NumGumpButton(GetGumpsCount-1, gi.GumpButtons[Item.ItemBtn].return_value);
end;
end;
procedure SmeltItem;
var
gi : TGumpInfo;
begin
GumpCheckAndSolve;
Wait(1000);
CheckSave;
GetGumpInfo(GetGumpsCount-1, gi);
if (gi.XmfHTMLGumpColor[0].Cliloc_id = Item.CraftGump) then
begin
NumGumpButton(GetGumpsCount-1, gi.GumpButtons[Item.SmeltBtn].return_value);
WaitForTarget(5000);
if TargetPresent then TargetToObject(FindType(Item.TypeOfItem, backpack));
Wait(1500);
end;
end;
function UsesLeft : Integer;
var
aa : TClilocRec;
begin
aa := GetToolTipRec(FindType(Item.Tool, backpack));
Result := (StrToInt(aa.Items[1].Params[0]));
end;
procedure UnloadReload;
var
qReg : Integer;
tmpReg : Cardinal;
begin
UseObject(RegChest);
Wait(1500);
FindType(Item.Tool, RegChest);
if FindCount > 0 then
begin
if not (FindType(Item.Tool, backpack) > 0) then
begin
MoveItem(FindType(Item.Tool, RegChest), 0, backpack, 0,0,0);
Wait(1500);
end;
end;
FindType(Item.Reg[0], RegChest);
tmpReg := FindItem;
if GetQuantity(FindItem) > SaveThisQuantityOfReg then
begin
FindType(Item.Reg[0], backpack);
if GetQuantity(FindItem) < 200 then
begin
qReg := HowManyLoadReg - GetQuantity(FindItem);
MoveItem(tmpReg, qReg, backpack, 0, 0, 0);
Wait(1500);
end;
end;
FindType(Item.TypeOfItem, backpack);
while FindCount > 0 do
begin
MoveItem(FindType(Item.TypeOfItem, backpack), 0, CraftedItemChest, 0,0,0);
Wait(1500);
end;
end;
begin
Init;
for i := 0 to (Quantity - 1) do
//while not Dead do
begin
UnloadReload;
AddToSystemJournal(IntToStr(GetQuantity(FindType(Item.Reg[0], backpack))));
while (FindType(Item.Tool, backpack) > 0) and (GetQuantity(FindType(Item.Reg[0], backpack)) > Item.QuantityOfReg) do
begin
CraftOneItem;
Wait(3500);
end;
end;
end.
Скрипт написан - для шарда Forgotten Lands. На других шардах будет, скорее всего - по другому!