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

добыча (mining recall script)

тут можно задать вопрос по скриптингу
Post Reply
edu
Posts: 3
Joined: 18.11.2011 23:27

добыча (mining recall script)

Post by edu »

English: I got some macro miner here in the Scripting section but no work to do to mine around the mine, and recall home and kept ores in a chest or bank and recall back to mine.
I am in need of a script to do it, if someone has or can help me I would be grateful
thank you

Russian: Я получил некоторые макросы шахтера здесь, в разделе сценариев, но не поработать, чтобы мои вокруг мое, и все Recalada руд в груди или скамейке Recalada а затем обратно в шахту.
Я нуждается в сценарии этого делать, если кто-либо может помочь мне, я был бы признателен
спасибо

Sorry if something is not clear,i am brazilian and i'm using Google Translate :)

[] 's
Alex
Moderator
Moderator
Posts: 351
Joined: 07.04.2005 4:41

Re: добыча (mining recall script)

Post by Alex »

try this one:

Code: Select all

program Mining;
{$Include 'all.inc'}

type st = array[0..100] of array[1..3] of word;
const
Radius = 2;             //Если Radius = 2, то 25 клеток копки; если 1, то 9 клеток копки; если 0, то поидее 1 летка;
MaxWght = 400; 	        //Максимальный вес с которым может поднимать вещи
MinOre = 8;  		//Минимальный уровень руды,с которую будет брать, остальное игнориться на полу
MaxFood = 2;
OreType = $19B9;
AxeType = $0E85;
RedRadius = 10;         //Радиус поиска красного
CountAxeInPack = 2;      //Количество кирок, которых должно быть в паке
AxeGump =  '3717';
TinkGump = '7865';
Eda = $097B;             //Тип еды
TinkType = $1EB9;
CopperType = $1BF2;
//Для выгрузки руды, настроено для ГК. Выгрузка идет на север со смещением одной клетки.
OreX = -1;
OreY = -1;              
OreZ = 2;                //Если выгрузка идет на ступеньки ГК тут надо поставить 2
//Для рекола
RuneBook = $52363CB3;    //Рунобука с рунами по шахтам
KolRun = 15;              //Количество рун по шахтам
RbToHome = $4C08F883;    //Рунобука домой
HomeRune = 1;            //Номер руны домой
AtHomeX = 2073;           //Координата Х положения чара в доме.
AtHomeY = 1246;           //Координата Y положения чара в доме. 
NeedMana = 94;           //Количество манны, которое чар будет ждать прежде чем улететь
//Состояние чара
IN_MINING = 1;
AT_HOME = 2;
NEED_RESOURCE = 3;
WAIT_MANA = 4;
IN_DANGER = 5;
MAKE_RESOURCE = 6;
START_SCRIPT = 7;
ORE_IN_FINGER = 8;
TO_HOME = 9;
RES_SELF = 10;
//Музыкальный файл
FileName = 'd:\help.wav'; //Звуковой файл, обязательно *.wav

var
OreColor : Array [0..16] of Word;
MinOreCol : integer;
Koord : st;
Status : integer;
MaxCharges : integer;   // Максимальное количество зарядов в RuneBook, в последствии подредактируется
CountKoord : integer;
FullPack : boolean;
stime : TDateTime;
TileX, TileY : word;
OreInFinger : Cardinal;
OreInFingerColor : word;
StartX,StartY,EndX,EndY: integer;
a,b,c,d,e,f,g,h,k,r,Krug : Integer;

procedure Raschet;
var
i: integer;
  begin
  StartX := GetX(self) - Radius;
  StartY := GetY(self) - Radius;
  EndX := GetX(self) + Radius;
  EndY := GetY(self) + Radius;
  i := 0;
  for TileX := StartX to EndX do 
    begin
    for TileY:=StartY to EndY do 
      begin
      Koord[i][1] := TileX;
      Koord[i][2] := TileY;
      i := i + 1;
      end;
    end;
  CountKoord := i-1;     
  end;
  
procedure CheckConnect;
 begin
  if not Connected then begin
      while not Connected do wait(2000);
        ClickOnObject(backpack);
        WaitJournalLine(Now,'backpack',120000);
        CheckSave;
        Addtosystemjournal('Поплыли дальше после реконнекта.');
      end;
 end;

procedure ResSelf;
begin
  AddToSystemJournal('Resself. Enter');
  PlayWav(FileName);
  CheckConnect;
  Wait(1000);
  WaitGump('1');
  setwarmode(true);
  while dead do wait(1000);
  if targetpresent then canceltarget;
  if dead then exit;
  UOSay('Спасибо.');
  AddToSystemJournal('Resself. Exit');
  Status := RES_SELF;
end;

function AllRight():boolean;
  begin
  if ((Status = NEED_RESOURCE) or (Status = IN_DANGER) or (Status = RES_SELF)) then result := false
  else result := true; 
  end;

function DangerCheck():boolean; 
var 
Enemy:array[1..3] of Word; 
z:Integer; 
begin 
  Enemy[1] := $0190; 
  Enemy[2] := $0191;
  Enemy[3] := $000E; 
  Ignore(Self);
  finddistance:=RedRadius; 
  for z:=1 to 3 do 
    begin 
    CheckConnect; 
    if FindType(Enemy[z],ground) > 0 then 
      begin
      if (GetNotoriety(finditem) = 6) or (z=3) then
        begin 
        AddToSystemJournal('В шахту пришел(а) ' + GetCliloc(finditem));
        Status := IN_DANGER;
        Raw_Move(GetDirection(self),true); 
        wait(50); 
        Raw_Move(GetDirection(self),true); 
        wait(50); 
        result := true;
        exit;
        end
      end;
    end; 
    result := false;
end;

Procedure GrabOre;
var q,qq: integer;
stime : TDateTime;
OreGrab, CountGrab: cardinal;
begin
finddistance:=2;
FindType(OreType,ground);
if findcount>0 then
  begin
  if Status = TO_HOME then qq := 1 
  else qq := MinOre; 
  for q:=15 downto qq do
    begin
    stime:=Now;
    FindTypeEx(OreType,OreColor[q],ground,false);
    if (FindQuantity>0) and not FullPack then 
      begin
        CheckConnect;
        addtosystemjournal('  Найдено: ' + GetCliloc(finditem));
        OreGrab:=finditem;
        CountGrab:=GetQuantity(finditem);
        Grab(OreGrab, CountGrab);
      end;
    if InJournalBetweenTimes('That item is too heavy',stime,Now)>=0 then begin addtosystemjournal('Тяжеловато!!!'); FullPack:=true; exit; end;
    end;
  end;
end;
 
procedure EquipPicAxe;
  begin
  FindType(AxeType,backpack);
  if (FindQuantity>0) then 
      begin
      Equip(RHandLayer,finditem);
      CheckConnect;
      wait(1500);
      end
  else
      begin
      Status := NEED_RESOURCE;
      addtosystemjournal('Закончились кирки. Пора домой!');
      end;
  end;

function WaitMining():boolean;
var
stime : TDateTime;
begin
stime:=Now;
if DangerCheck then result:=false;
WaitJournalLine(Now, 'You put some|no more ore|broke|stop mining|cannot see|far away|cannot mine|what is this?!', 30000);
if InJournalBetweenTimes('You put some', stime, Now) >=0 then
  begin
  GrabOre();
  result:=true; 
  end
else
  begin
  result:=false; 
  end;
end;

function StartMining(x,y : word):boolean;
var
stime : TDateTime;
TileInfo : TStaticCell;
i : Integer;
begin
stime:=Now;
if TargetPresent then CancelTarget;
CheckConnect;
if dead then resself;
if GetType(ObjAtLayer(RhandLayer)) <> AxeType then EquipPicAxe;
if AllRight() then
begin
TileInfo:=ReadStaticsXY(x, y, 1);
for i := 0 to TileInfo.StaticCount -1 do 
  if (TileInfo.Statics[i].Tile >= 1339) and (TileInfo.Statics[i].Tile <= 1343) then 
    begin
    WaitTargetTile(TileInfo.Statics[i].tile,TileInfo.Statics[i].x,TileInfo.Statics[i].y,TileInfo.Statics[i].z); 
    UseObject(ObjAtLayer(RHandLayer));
    while WaitMining() do wait(100);
    end;
end;
if dead then resself;
a := InJournalBetweenTimes('no more ore', stime, Now);
b := InJournalBetweenTimes('broke', stime, Now);
c := InJournalBetweenTimes('stop mining', stime, Now);
d := InJournalBetweenTimes('cannot see', stime, Now);
e := InJournalBetweenTimes('far away', stime, Now);
f := InJournalBetweenTimes('cannot mine', stime, Now);
g := InJournalBetweenTimes('what is this?!', stime, Now);
CheckSave;

if b >=0 then 
  begin
  wait(1000);
  if GetType(ObjAtLayer(RhandLayer)) <> AxeType then begin
    EquipPicAxe;
    Addtosystemjournal('Сменили кирку!');
  end;
end;
if ((a >=0) or (b >=0) or (c >=0) or (d >=0) or (e >=0) or (f >=0) or (g >=0) or (h >=0)) then begin result:=false; end
else begin result:=true; end;
end;

procedure StackOre(ObjType, Color : word; OreX,OreY : integer); 
var
PackItem, GroundItem : Cardinal; 
stime : TDateTime;
begin
PackItem := 0;
GroundItem := 0; 
FindtypeEx(ObjType,Color,backpack,false);                    
IF FindFullQuantity > 0 then PackItem := finditem; 
FindtypeEx(ObjType,Color,ground,false);                    
IF FindFullQuantity > 0 then IgnoreReset; 
repeat 
  FindtypeEx(ObjType,Color,ground,false); 
  IF FindCount > 0 then 
    if FindQuantity > 55000 then Ignore(finditem) 
    else
      Begin
      GroundItem := finditem; 
      if (PackItem <> 0) and (GroundItem <> 0) then
        begin
        CheckConnect;
        stime := Now;
        MoveItems(backpack,ObjType,Color,GroundItem,0,0,0,700);
        if InJournalBetweenTimes('Could not add item to stack', stime, Now) > 0 then
          Begin
          Ignore(GroundItem);
          GroundItem := 0;
          end;
        end
      end;
until (FindCount = 0) or (GroundItem <> 0); 
if GroundItem = 0 then drop(PackItem,-1,OreX,OreY,OreZ);
end;


procedure DropOre;
var 
  flag : boolean;
  X,Y : Integer;
  q: Integer;
  PackItem : Cardinal;
begin
  FindType(OreType,backpack);
  if findcount > 0 then
    begin
    addtosystemjournal('Количество найденых стопок руды в паке: ' + IntToStr(FindCount));
    for q:=0 to 15 do
      begin
      FindTypeEx(OreType,OreColor[q],backpack,true);
      if FindCount > 0 then
        begin
        StackOre(OreType,OreColor[q],OreX,OreY);
        wait(200);
        end; 
      end;
    FullPack := false;
    end;
end;

procedure CheckAxe;
	var food: integer;
	Begin
	AddToSystemJournal('Проверяю инструменты...');
	if (count($097B)<MaxFood) then
	  begin
	  repeat
		food:=count (Eda);
		FindType(Eda,ground);
		if finditem=0 then continue;
		if (findquantity>(MaxFood-food)) then grab (finditem, MaxFood-food) else grab (finditem, 0);
		wait (1000);
		AddToSystemJournal('Подкинул '+inttostr(count (Eda)-food)+' еды в бэкпак');
	  until (countground(Eda)=0) or (count(Eda)>MaxFood-1);
	  end;
	if (Count(AxeType) < CountAxeInPack) then
		begin
		FindType(Tinktype,ground);
		if FindCount < 3 then
			begin
			CheckConnect;
			AddToSystemJournal('Делаем тузлы');
			UseObject(FindType(TinkType,ground));
			WaitTargetobject(findtype(CopperType,ground));
			GumpAutoTextEntry(513,'1'); 
			WaitGump(TinkGump);
			wait(500);
			WaitJournalLine(Now, 'You create|destroy|You put', 30000);
			drop(FindType(TinkType,backpack),-1,OreX,GetY(self),OreZ);
			end;
		repeat
		        WaitConnection(3000);
			CheckSave;
			CheckDead(false);
			FindType(CopperType,ground);
			if FindCount > 0 then
				begin
				finddistance:=1;
				AddToSystemJournal('Делаем кирку.');
				UseObject(FindType(TinkType,ground));
				WaitTargetobject(findtype(CopperType,ground));
				GumpAutoTextEntry(513,'1'); 
				WaitGump(AxeGump);
				wait(500);
				WaitJournalLine(Now, 'You create|destroy|You put', 30000);
				end
			else
				begin
				AddToSystemJournal('Не могу найти руду, чтобы сделать инструмент добывательный!');
				FullDisconnect;
				end;
		until (Count(AxeType) >= CountAxeInPack);
                end;	
        End;

function GetRuneId() : Integer;
var 
	Tmp,FileList : TStringList; 
	M,N : Integer;
	GI: Integer;
	FindNo : Boolean;
Begin 
  FileList := TStringList.Create();
  Tmp := TStringList.Create();  
  GetGumpFullLines(GI,FileList);
  m:=0;
  N:=0;
  FindNo := true;
  while (m < FileList.count-1)  and FindNo do 
    BEGIN 
    StrBreakApart(FileList.Strings[m], ' ', Tmp); 
    if (Tmp.Strings[0] = 'GumpButtons:') then 
       begin
       N:=m+2;
       end;
       m:=m+1;
    END;
    StrBreakApart(FileList.Strings[N], ' ', Tmp);
    if N > 0 then
        begin
        result:=StrToInt(Tmp.Strings[Tmp.count-3]);
        end
    else
        begin
        result:=0;
        end;
    FileList.Free;
    Tmp.Free;
End;

function Recall(RB : Cardinal; N:Integer):boolean;
var 
   Num : Integer;
   Serial : Integer;
begin
if N < 1 then
	N:=1;
Serial := 0;
repeat
   if not (Serial = 0) then CloseSimpleGump(Serial);
   UseObject(RB);
   CheckConnect;
   wait(3000);
   GetGumpSerial(Serial);  
until (GetGumpsCount > 0)
Num := GetRuneId();
if Num > 0 then
	begin
	waitGump(IntToStr(Num+(N-1)));
	wait(5000);
	result := true;
	end
else
	begin
	addtosystemjournal('Руна не найдена :(');
	result := false;
	end;	
end;


function CheckRunebook(ItemCheck: cardinal): integer;
var 
  s1,s2: string;
  Charges, i, indx: integer;
  starttime: TdateTime;
  check: boolean;
begin
  waitconnection(3000);
  check:=false;
  while connected and not check do
    begin
    starttime := Now;
    ClickOnObject(ItemCheck);
    repeat
      wait(50);
      i:=i+1;
    until (InJournalBetweenTimes('[charges:|a runebook', starttime, Now)<>-1) or (i>=200);
    if i>=200 then i:=0 else check:=true;
    if (InJournalBetweenTimes('[charges:', starttime, Now)=-1) then
      begin
      check:=true;
      result:=MaxCharges;
      addToSystemJournal('Переименуйте как-то главную рунабуку! Не могу определить количество зарядов');
      exit;
      end;
    if check=true then indx:=LineIndex;
    checksave;
    end;
  s2:=Journal(indx);
  s1:=Copy(s2, length(s2)-2 ,2);
  s2:=Trim(s1);
  Charges:=StrToInt(s2);
  result:=Charges;
end;

Procedure CheckCharges(RB: Cardinal);
var 
  NeedCharges, TempCharges: integer;
  Changed: boolean;
  GateTravels: cardinal;
begin
  waitconnection(3000);
  if Count($1F60)>0 then
    begin
    stack($1F60, $0000);
    wait (2000);
    end;
    Changed:=false;
    FindType($1F60, ground);
    if FindCount=0 then
      begin
      FindDistance:=0;
      FindType($1F60, ground);
      end;
    GateTravels:=finditem;
    repeat
      NeedCharges:=MaxCharges-CheckRunebook(RB);
      if NeedCharges<0 then
        begin
        MaxCharges:=MaxCharges+5;
        Changed:=true;
        end;
    until NeedCharges>=0;
    if Changed then
      begin
      AddToSystemJournal (' Максимальное количество зарядов рунабуки изненено, теперь '+inttostr(MaxCharges));
      Changed:=false;
      end;
    if (FindCount > 0) and (NeedCharges>0) then
      begin
      TempCharges:=Count($1F60);
      addToSystemJournal('Заправляю рунабуку на ' +inttostr(NeedCharges)+' заряд(а)');
      DragItem(GateTravels, NeedCharges);
      wait (2000);
      DropItem(RB, 0,0,0);
      CheckSave;
      wait (2000);
      CheckSave;
      if Count($1F60)>TempCharges then
        begin
        MaxCharges:=MaxCharges-Count($1F60);
        AddToSystemJournal (' Максимальное количество зарядов рунабуки изненено, теперь '+inttostr(MaxCharges));
        stack($1F60, $0000);
        end;
      end 
    else
      if (FindCount < 0) and (NeedCharges>0) then
        begin
        addToSystemJournal('Закончились заряды для рунабуки в месте заправки! Выхожу...');
        FullDisconnect;
        end;
end;

procedure WaitNeedMana;
var 
  wm: integer;
  begin
  if Status = AT_HOME then wm := NeedMana
  else wm := 70; 
  if Mana < wm then
    begin
    addToSystemJournal('Ожидаем пока востановится мана...');
    while Mana <= wm do 
      begin 
      if GetSkillValue('Meditation') > 0 then UseSkill('Meditation'); 
      wait(1000); 
      end;
    end;
  end;
  
procedure GetOreInFinger;
var q: integer;
    CountGrab: cardinal;
  begin
  finddistance:=2;
  FindType(OreType,ground);
  if findcount > 0 then
  for q:=15 downto 0 do
    begin
    FindTypeEx(OreType,OreColor[q],ground,false);
    if FindQuantity > 0 then 
      begin
        addtosystemjournal('Берем на палец: ' + GetCliloc(finditem));
        OreInFinger:=finditem;
        OreInFingerColor := GetColor(OreInFinger);
        CountGrab:=GetQuantity(finditem);
        DragItem(OreInFinger, CountGrab);
        Status := ORE_IN_FINGER;
        exit;
      end;
    end;
  end;
  
procedure DropOreFromFinger;
var q: integer;
GroundItem, CountGrab: cardinal;
  begin
  finddistance:=2;
  if Status = ORE_IN_FINGER then
    begin
    repeat 
    FindtypeEx(OreType,OreInFingerColor,ground,false); 
    IF FindCount > 0 then 
      if FindQuantity > 55000 then Ignore(finditem) 
      else
        Begin
        GroundItem := finditem; 
        if (OreInFinger <> 0) and (GroundItem <> 0) then
          begin
          stime := Now;
          DropItem(GroundItem,0,0,0);
          wait(1000);
          CheckConnect;
          if InJournalBetweenTimes('Could not add item to stack', stime, Now) > 0 then
            Begin
            Ignore(GroundItem);
            GroundItem := 0;
            end;
          end
        end;
    until (FindCount = 0) or (GroundItem <> 0); 
    if GroundItem = 0 then DropItem(ground,OreX,OreY,OreZ);
    Addtosystemjournal('Освободили руки...');
    end;
  end;

procedure GoHome;
  begin
  if dead then resself;
  CheckConnect;
  if Status = IN_MINING then begin Status := TO_HOME; GrabOre; end;
  if Status = TO_HOME then GetOreInFinger;
  WaitNeedMana;
  Addtosystemjournal('Полетели домой...');
  if (not ((GetX(self) = AtHomeX) and (GetY(self) = AtHomeY))) then Recall(RbToHome,HomeRune);
  if Status = ORE_IN_FINGER then DropOreFromFinger;
  Status := AT_HOME;
  UnEquip(RHandLayer);
  wait(1000);
  CheckConnect;
  end;
  
procedure GoToWaxta(Num: integer);
  begin
  if dead then resself;
  WaitNeedMana;
  Addtosystemjournal('Полетели в шахту...');
  Status := IN_MINING;
  if ((GetX(self) = AtHomeX) and (GetY(self) = AtHomeY)) then Recall(RuneBook,Num);
  end;
  
procedure InfoRes;
  begin
  FindDistance := 2;
  FindType(Eda,ground);
  Addtosystemjournal('Еды на земле '+intToStr(findfullquantity)+'!');
  FindType(TinkType,ground);
  Addtosystemjournal('Тулзов на земле '+intToStr(findfullquantity)+'!');
  FindType(CopperType,ground);
  Addtosystemjournal('Металла на земле '+intToStr(findfullquantity)+'!');
  FindType($1F60,ground);
  Addtosystemjournal('Гейтов на земле '+intToStr(findfullquantity)+'!');
  Addtosystemjournal('--==Руда==--');
  Addtosystemjournal('Количество Cooper: ' + inttostr(CountEx(OreType,$07DF,Ground)));
  Addtosystemjournal('Количество Iron: ' + inttostr(CountEx(OreType,$0000,Ground)));
  Addtosystemjournal('Количество Steel: ' + inttostr(CountEx(OreType,$0482,Ground)));
  Addtosystemjournal('Количество Anra: ' + inttostr(CountEx(OreType,$045E,Ground)));
  Addtosystemjournal('Количество Valurit: ' + inttostr(CountEx(OreType,$07D6,Ground)));
  Addtosystemjournal('Количество LavaRock: ' + inttostr(CountEx(OreType,$006f,Ground)));
  Addtosystemjournal('Количество IceRock: ' + inttostr(CountEx(OreType,$09f9,Ground)));
  Addtosystemjournal('Количество Shadow: ' + inttostr(CountEx(OreType,$0940,Ground)));
  Addtosystemjournal('Количество Azurite: ' + inttostr(CountEx(OreType,$094A,Ground)));
  Addtosystemjournal('Количество Doom: ' + inttostr(CountEx(OreType,$0943,Ground)));
  Addtosystemjournal('Количество BlueSteel: ' + inttostr(CountEx(OreType,$094E,Ground)));
  Addtosystemjournal('Количество DarkRuby: ' + inttostr(CountEx(OreType,$0214,Ground))); 
  Addtosystemjournal('Количество Crystalit: ' + inttostr(CountEx(OreType,$0487,Ground)));
  Addtosystemjournal('Количество Onix: ' + inttostr(CountEx(OreType,$0946,Ground)));
  Addtosystemjournal('Количество Mefril: ' + inttostr(CountEx(OreType,$093F,Ground)));  
  Addtosystemjournal('Количество GeMa: ' + inttostr(CountEx(OreType,$05D7,Ground)));
  end;

Begin
SetARStatus(true);
OreColor[0] := $07DF; //   0 - Cooper 
OreColor[1] := $0000; //   1 - Iron 
OreColor[2] := $0482; //   2 - Steel 
OreColor[3] := $045E; //   3 - Anra 
OreColor[4] := $07D6; //   4 - Valurit 
OreColor[5] := $006f; //   5 - LavaRock
OreColor[6] := $09f9; //   6 - IceRock
OreColor[7] := $0940; //   7 - Shadow
OreColor[8] := $094A; //   8 - Azurite
OreColor[9] := $0943; //   9 - Doom
OreColor[10] := $094E; // 10 - BlueSteel
OreColor[11] := $0214; // 11 - DarkRuby
OreColor[12] := $0487; // 12 - Crystalit
OreColor[13] := $0946; // 13 - Onix
OreColor[14] := $093F; // 14 - Mefril
OreColor[15] := $05D7; // 15 - Gem

MinOreCol := OreColor[MinOre];
MaxCharges := 10;
Addtosystemjournal('--==Скрипт сделан MindOM==--');
while not Connected do wait(2000);
FindDistance := 15; 
FindVertical := 128;
if (WarMode = true) then SetWarMode(false);
Status := START_SCRIPT;
Krug := 0;
while 1=1 do
  begin
  for r := 0 to KolRun - 1 do
    begin
    GoHome;
    DropOre;
    CheckAxe;
    CheckCharges(RuneBook);
    CheckCharges(RbToHome);
    Hungry(1,ground);
    InfoRes;
    CheckSave;
    GoToWaxta(r+1);
    Raschet;
    CheckConnect;
    for k := 0 to CountKoord -1 do
       begin
       if dead then resself;
       CheckSave;
       if AllRight() then
         begin
         Hungry(1,backpack);
         Addtosystemjournal('Круг №'+inttostr(Krug+1)+'; Шахта №'+inttostr(r+1)+'; Точка № '+inttostr(k+1)+'/'+inttostr(CountKoord)+' (X=' + inttostr(Koord[k][1])+ ', Y='+ inttostr(Koord[k][2])+')');
         while StartMining(Koord[k][1],Koord[k][2]) do wait(100);
         end;
       end;
    end;
  Krug := Krug + 1;
  Addtosystemjournal('Закончили круг № '+inttostr(Krug));
  end;
End.
Новый стелс лежит тут. Стелс это произведение искусства! :)
edu
Posts: 3
Joined: 18.11.2011 23:27

Re: добыча (mining recall script)

Post by edu »

Thank Alex for your contribution :)
O Compiling script and ocurred this errors:

Code: Select all

15:28:20:129 [eduxxx]: Compiler: [Hint] (miner.sc at 289:3):  Variable 'X' never used
15:28:20:130 [eduxxx]: Compiler: [Hint] (miner.sc at 289:3):  Variable 'Y' never used
15:28:20:131 [eduxxx]: Compiler: [Hint] (miner.sc at 291:3):  Variable 'PACKITEM' never used
15:28:20:132 [eduxxx]: Compiler: [Error] (miner.sc at 343:10):  Unknown identifier 'CheckDead'
15:28:20:134 [eduxxx]: Compiling failed
15:28:20:136 [eduxxx]: Script miner.sc stopped successfuly
Although i dont understand much, try to solve the problem and if anyone here can help me know and I'm thankful

Tkz

[]'s
Alex
Moderator
Moderator
Posts: 351
Joined: 07.04.2005 4:41

Re: добыча (mining recall script)

Post by Alex »

remove "CheckDead(false);" from the script
Новый стелс лежит тут. Стелс это произведение искусства! :)
edu
Posts: 3
Joined: 18.11.2011 23:27

Re: добыча (mining recall script)

Post by edu »

After removing the line CheckDead compiled the script however is giving another error

Code: Select all

17:18:41:545 [edur0x7]: Compiled succesfully
17:18:41:547 [edur0x7]: --==?????? ?????? Mindomo ==--
17:18:41:549 [edur0x7]: ???????? ?????...
17:18:41:550 [edur0x7]: [b]UseObject error: Object not found.[/b]
I think the line is to use the pickaxe to mine, but try to find yourself thinking TinkType be the same and did not work = [
Vargul
Neophyte
Neophyte
Posts: 49
Joined: 16.09.2010 10:30

Re: добыча (mining recall script)

Post by Vargul »

Code: Select all

function GetRuneId() : Integer;
var
   Tmp,FileList : TStringList;
   M,N : Integer;
   GI: Integer;
   FindNo : Boolean;
Begin
  FileList := TStringList.Create();
  Tmp := TStringList.Create(); 
  GetGumpFullLines(GI,FileList);
  m:=0;
  N:=0;
  FindNo := true;
  while (m < FileList.count-1)  and FindNo do
    BEGIN
    StrBreakApart(FileList.Strings[m], ' ', Tmp);
    if (Tmp.Strings[0] = 'GumpButtons:') then
       begin
       N:=m+2;
       end;
       m:=m+1;
    END;

Алекс, вопрос, если не менять в этом блоке ничего то чар не реколится. У меня на сервере рунбука имеет 2 способа рекола:
1. используя заряды буки (левая кнопка)
2. используя реагенты (правая кнопка)
как я понял твоя функция кликает именно на правую, потому как только я поменял N:=m+2; на N:=m+1; чар стал реколится.
Поправь, если я неправ.

Второй момент
AtHomeX = 2073; //Координата Х положения чара в доме.
AtHomeY = 1246; //Координата Y положения чара в доме.

это, если я опять же правильно понял из коментов, координаты чара при выгрузке загрузке руды/регов у дома
Так вот есил их поменять на свои то по прилету в шахту выдается системное сообщение что Круг 1 Шахта 1 .......и в скобках координаты AtHomeX AtHomeY попарвленные на мои и следом ошибка Out of Range 56. не помню дальше и все скрипт останавливается, но если поменять эти координаты на координаты 1 шахты он начинает копать.

Смысл скрипта это сбрасывать всю руду на пол а при реколе домой подымать с пола "на палец" только какой-то один вид руды?
MinOre = 8; //Минимальный уровень руды,с которую будет брать, остальное игнориться на полу - просто вот это не совсем понятно
Еще я понял что если нет кирок он их сам делает
Просто не успел полностью потестить скрипт, задумка очень хорошая, но реализовано под конкретный шард. Просто я бы хотел уточнить кое какие нюансы.
Можешь в нескольких словах работу скрипта описать? Т.е. что делает по шагам
Можеш в асю кинуть 43209490
Заранее благодарю.
Alex
Moderator
Moderator
Posts: 351
Joined: 07.04.2005 4:41

Re: добыча (mining recall script)

Post by Alex »

AtHomeX - это координаты точки домашней, чар сравнивает с ними текущие координаты что бы понять где он сейчас находится

по Out of Range, придется с помощью AddToSystemJournal('*line number*') выискивать где падает

по поводу руды, он собирает с пола в сумку "полезную"(зависит от значения MinOre) а потом кроме того еще хватает в руки самую крутую из оставшихся под ногами

нюансы спрашивай)
Новый стелс лежит тут. Стелс это произведение искусства! :)
soulen
Neophyte
Neophyte
Posts: 18
Joined: 16.01.2012 13:29

Re: добыча (mining recall script)

Post by soulen »

Уважаемый создатель скрипта, а как бы сделать перед реколлом проверку на наличие кирки в руках... А то на зхр не реколится зараза. И почему-то скидывает руду даже если 0 ставлю.
Alex
Moderator
Moderator
Posts: 351
Joined: 07.04.2005 4:41

Re: добыча (mining recall script)

Post by Alex »

soulen wrote:Уважаемый создатель скрипта, а как бы сделать перед реколлом проверку на наличие кирки в руках... А то на зхр не реколится зараза. И почему-то скидывает руду даже если 0 ставлю.
там есть функцияx CheckAxe которая делает тинкерингом кирки если их в сумке нету, а одеть в руки можно с помощью этой функции - http://stealth.od.ua/wiki/doku.php?id=equip
а по поводу cкидывает руду, тут тебе придется копатся в скрипте, разбиратся почему
Новый стелс лежит тут. Стелс это произведение искусства! :)
MuDaCk
Apprentice
Apprentice
Posts: 393
Joined: 10.10.2006 0:03
Contact:

Re: добыча (mining recall script)

Post by MuDaCk »

А чем плох скрипт Феникса?
http://stealth.od.ua/forum/viewtopic.php?f=3&t=1570
My name is Игорёшка Image
Пишу скрипты за едуImage
Fenix
Developer
Developer
Posts: 275
Joined: 24.08.2010 7:20
Location: Ставрополь
Contact:

Re: добыча (mining recall script)

Post by Fenix »

Тем, что тот скрипт предметы в руки не берет для добычи (на том шарде их можно использовать прямо из бекпака) и, соответственно, не убирает их потом из рук перед реколом.
Помните – ничто так не защищает ваши зубы 12 часов днем и 12 часов ночью как уважительное отношение к окружающим.
"Многие из вас знакомы с достоинствами программиста. Их всего три, и разумеется это: лень, нетерпеливость и гордыня"© Larry Wall
Post Reply