Forum in READ ONLY mode! All questions and discussions on Discord official server, invite link: https://discord.gg/VxsGzJ7

Крафт, любой - любого итема [FLShard]

Only working scripts
Post Reply
drabadan
Expert
Expert
Posts: 730
Joined: 13.12.2012 17:35
Contact:

Крафт, любой - любого итема [FLShard]

Post by drabadan »

Такой скрипт - авось кому пригодится.

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. На других шардах будет, скорее всего - по другому!
Last edited by drabadan on 15.02.2013 22:07, edited 1 time in total.
admir
Novice
Novice
Posts: 97
Joined: 28.10.2008 20:44

Re: Крафт, любой - любого итема.

Post by admir »

укажи в названии темы [FW shard]
drabadan
Expert
Expert
Posts: 730
Joined: 13.12.2012 17:35
Contact:

Re: Крафт, любой - любого итема [FLShard]

Post by drabadan »

Перекрутил немного скрипт, прикрутил форму для него - но открутил подгрузки выгрузки и прочее.
Может кому пригодится как заготовка.
Для запуска: в пак тулсы и инготы. В окошке выбираем какой вариант и сколько.

Code: Select all

Program CraftByDrabadanchik;

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;
CraftForm : TSTForm;
CraftButton : TSTButton;
CraftItemTField : TSTEdit;
CraftItemQuantityTField : TSTEdit;
CraftQuantityLabel : TSTLabel;
CraftItemNameLabel : TSTLabel;
CraftChoicesLabel : TSTLabel;
CraftChoiceDescriptionLabel : TSTLabel;

procedure GetTItemInfo(Choice : String);
  begin
    if (Choice = '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 (Choice = '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;
		Item.SmeltBtn := 2;
      end;
	if (Choice = 'broadsword') then
      begin
        Item.Name := 'Меч';
        Item.Tool := $0FBB;		
        Item.Container := $0E76;
        Item.TypeOfItem := $0F5E;
        Item.QuantityOfReg := 10;
        Item.CraftGump := 1044002;
        Item.CategoryBtn := 11;
        Item.ItemBtn := 17;
        Item.Reg[0] := $1BEF;
		Item.SmeltBtn := 2;
      end;
	if (Choice = 'gorget') then
      begin
        Item.Name := 'Горжетка';
        Item.Tool := $0FBB;		
        Item.Container := $0E76;
        Item.TypeOfItem := $1413;
        Item.QuantityOfReg := 12;
        Item.CraftGump := 1044002;
        Item.CategoryBtn := 8;
        Item.ItemBtn := 21;
        Item.Reg[0] := $1BEF;
		Item.SmeltBtn := 2;
      end;
	if (Choice = 'arms') then
      begin
        Item.Name := 'Руки';
        Item.Tool := $0FBB;		
        Item.Container := $0E76;
        Item.TypeOfItem := $1410;
        Item.QuantityOfReg := 18;
        Item.CraftGump := 1044002;
        Item.CategoryBtn := 8;
        Item.ItemBtn := 17;
        Item.Reg[0] := $1BEF;
		Item.SmeltBtn := 2;
      end;
	if (Choice = 'gloves') then
      begin
        Item.Name := 'Перчатки';
        Item.Tool := $0FBB;		
        Item.Container := $0E76;
        Item.TypeOfItem := $1414;
        Item.QuantityOfReg := 12;
        Item.CraftGump := 1044002;
        Item.CategoryBtn := 8;
        Item.ItemBtn := 19;
        Item.Reg[0] := $1BEF;
		Item.SmeltBtn := 2;
      end;
	 if (Choice = 'katana') then
      begin
        Item.Name := 'Катана';
        Item.Tool := $0FBB;
        Item.Container := $0E76;
        Item.TypeOfItem := $13FF;
        Item.QuantityOfReg := 12;
        Item.CraftGump := 1044002;
        Item.CategoryBtn := 11;
        Item.ItemBtn := 25;
        Item.Reg[0] := $1BEF;
		Item.SmeltBtn := 2;
      end;
     if (Choice = 'scorp') then
      begin
        Item.Name := 'Cкорп';
        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 (Choice = '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 (Choice = '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;	
  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;        
    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);       
        NumGumpButton(GetGumpsCount-1, gi.GumpButtons[Item.ItemBtn].return_value);        
      end;
  end;
  
procedure SmeltItem;
var
gi : TGumpInfo;
  begin
    GumpCheckAndSolve;	
    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 B_Click(Sender : TObject);
var
tmpInt : Integer;
	begin
		GetTItemInfo(CraftItemTField.Text);
		Wait(1000);
		UOSay(Item.Name);
		for tmpInt := 0 to (StrToInt(CraftItemQuantityTField.Text) - 1) do
			begin
				CraftOneItem;
				while not IsGump do Wait(500);
			end;
	end;
	
procedure FormClose(Sender: TObject; var Action : TCloseAction);    
    begin
       Action := caFree;
       raiseException(erCustomError, 'for example, script stop after form');
    end;
	
procedure init;
	begin
		CraftForm := TSTForm.Create;
		CraftForm.OnClose := @FormClose;
		CraftForm.Width := 360;       
		CraftForm.Height := 140;   
		CraftForm.Caption := 'Craft by Drabadanchik';
		CraftForm.Visible := True;
		
		CraftButton := TSTButton.Create(CraftForm);
		CraftButton.OnClick := @B_Click;
		CraftButton.Caption := 'Скрафтить!';
		CraftButton.Top := 55;
		
		CraftItemTField := TSTEdit.Create(CraftForm);
		CraftItemQuantityTField := TSTEdit.Create(CraftForm);
		CraftItemQuantityTField.Top := 30;
		
		CraftItemNameLabel := TSTLabel.Create(CraftForm);
		CraftItemNameLabel.Left := 125;
		CraftItemNameLabel.Caption := '<-- Напиши название итема!'		
		CraftQuantityLabel := TSTLabel.Create(CraftForm);
		CraftQuantityLabel.Left := 125; 
		CraftQuantityLabel.Top := 30;
		CraftQuantityLabel.Caption := '<-- Напиши сколько хочешь скрафтить!'
		CraftChoiceDescriptionLabel := TSTLabel.Create(CraftForm);
		CraftChoiceDescriptionLabel.Top := 65;
		CraftChoiceDescriptionLabel.Left := 105;
		CraftChoiceDescriptionLabel.Caption := 'Варианты крафта: '
		CraftChoicesLabel := TSTLabel.Create(CraftForm);
		CraftChoicesLabel.Top := 85;
		CraftChoicesLabel.Left := 30;
		CraftChoicesLabel.Caption := 'gorget, cutlass, broadsword, arms, spyglass, lockpick, katana';
	end;
	

	
begin	
	init;	
	while True do Wait(1000);
end.
Post Reply