Mining [stelth client 7.9.2]

Гости
Сообщений: 14
Рег. 15.11.2013
10 марта 2017 19:50
Сообщение #1
Скрипт для тестов.

Я не предоставляю помощь по настройке и если у вас что-то не работает, то я искренне соболезную.

Алгоритм:
- Запуск на месте где копаем
- Копает до 150 руды в паке
- Летит по руне в банк
- Проверка проверка/перезаряд руны
- Берет (не крафтит!) кирки
- Берет реги
- Летит копать дальше
- Когда закончил копать до конца, летит отдыхать 30 минут у банка

Настройка:
    BankRune = $40D8BC44;
    OstrovRune = $40D8BC43;
    Bank = $40AE8DB5;
    Xmin = 2436;
    Xmax = 2498;
    Ymin = 40;
    Ymax = 67;


Руны в банк и пещеру
ID банка
Координаты шахты:
The Best Ultima Online Shard Antares

Скрипт:
Program Mining_BestUO;
uses
    SysUtils;
    
const
    BankRune = $40D8BC44;
    OstrovRune = $40D8BC43;
    Bank = $40AE8DB5;
    Xmin = 2436;
    Xmax = 2498;
    Ymin = 40;
    Ymax = 67;
    
    AxeType = $0E85;
    Log = $19B9;

var
    ii,s,b,c,pX,pY : integer;
    pZ : ShortInt;  
    cTime,cTime2 : TDateTime;
    mPathArr : TPathArray;
    NeedToDrop : Boolean;
    TyleType : Array [0..24] of Word;
    a : TFoundTilesArray;
    TileNum,TileX,TileY,TileZ : tStringList;
    
procedure recall(rune:cardinal);
var
    MyX,MyY,Waiti : integer;
    
begin
MyX := GetX(Self);
MyY := GetY(Self);
While (getX(Self)=MyX) and (GetY(Self)=MyY) do
begin
If TargetPresent Then CancelTarget;
Cast('Recall');
WaitForTarget(5000);
TargetToObject(rune);
Waiti := 0;
While (getX(Self)=MyX) and (GetY(Self)=MyY) and (Waiti < 20) Do
    begin
    Wait(500);
    Waiti := Waiti + 1;
    end;
Wait(650);
CheckLag(10000);
end;
end;


procedure checkrune(check_rune_id:cardinal);
var
    CheckRunecTime : TDateTime;
    RuneString,OldName : String;
    Zariadi : integer;
    
begin
CheckRunecTime := Now;
ClickOnObject(check_rune_id);
WaitJournalLine(CheckRunecTime,'(',10000);
If InJournalBetweenTimes('(',CheckRunecTime,Now)<>-1 then
begin
RuneString := Journal(InJournalBetweenTimes('(',CheckRunecTime,Now));
OldName := RuneString;
Delete(OldName,Ansipos('(',RuneString)-1,99);
Delete(OldName,1,Ansipos(':',RuneString)+1);
Delete(RuneString,1,Ansipos('(',RuneString));
Delete(RuneString,Ansipos(')',RuneString),1);
AddToSystemJournal('Зарядов осталось: '+OldName+': '+RuneString);
Zariadi := StrToInt(RuneString);
If Zariadi < 5 Then
    begin
    AddToSystemJournal('Мало зарядов.');
    If TargetPresent Then CancelTarget;
    Cast('Mark');
    WaitFortarget(5000);
    TargetToObject(check_rune_id);
    CheckLag(10000);
    Wait(650);
    end;
end;
end;

procedure CheckReags;
var
    reags : array of integer;
    ireags : integer;
    reagtype : string;
begin
reags := [$0F7A,$0F7B,$0F86];
For ireags:=0 To length(reags)-1 do
    begin
    FindType(reags[ireags],backpack);
    if FindQuantity<10 then
        begin
        FindType(reags[ireags],bank);
        Case reags[ireags] of
            $0F7A : reagtype := 'Black Perl';
            $0F7B : reagtype := 'Blood Moss';
            $0F86 : reagtype := 'Mandrake Root';
            end;
        AddToSystemJournal(reagtype+' в банке: '+IntToStr(FindQuantity));
        Grab(FindItem,10);
        Wait(650);
        CheckLag(10000);
        end;
    end;
end;

function CheckAxe : Boolean;
begin
Result := True;
If FindType(AxeType,BackPack)=0 Then
    begin
    AddToSystemJournal('Нужена кирка.');
    FindType(AxeType,Bank);
    If FindCount=0 Then
        begin
        AddToSystemJournal('В банке нет кирки!');
        Result := False;
        end
    else
        begin
        Grab(FindItem,1);
        Wait(650);
        CheckLag(10000);
        AddToSystemJournal('В банке осталось: '+IntToStr(FindCount)+' кирок.');
        end;
    end;
end;

procedure CheckMana;
begin
If WarMode Then SetWarMode(False);
If Mana < 50 Then
begin
While Mana <> MaxMana do
    begin
    UseSkill('Meditation');
    Wait(1000);
    end;
end;
end;
    
procedure ImDead(DeadStatus:Boolean);
    var
    Deada : Integer;
begin
If DeadStatus Then
begin
    AddToSystemJournal('Я умер. Летим домой.');
    Deada := GetGumpsCount;
    NumGumpButton(GetGumpsCount-1,1);
    while Deada = GetGumpsCount do
    Wait(50);
    NumGumpButton(GetGumpsCount-1,2);
    While 1=1 Do Wait(1000);
end;
end;
    
procedure LoadTiles;
var
XCheckMin,YCheckMin,XCheckMax,YCheckMax:integer;
begin
TyleType[0] := 1386;
TyleType[1] := 1363;
TyleType[2] := 1362;
TyleType[3] := 1361;
TyleType[4] := 1359;
TyleType[5] := 1358;
TyleType[6] := 1357;
TyleType[7] := 1356;
TyleType[8] := 1355;
TyleType[9] := 1354;
TyleType[10] := 1353;
TyleType[11] := 1352;
TyleType[12] := 1351;
TyleType[13] := 1350;
TyleType[14] := 1349;
TyleType[15] := 1348;
TyleType[16] := 1347;
TyleType[17] := 1346;
TyleType[18] := 1345;
TyleType[19] := 1344;
TyleType[20] := 1343;
TyleType[21] := 1342;
TyleType[22] := 1341;
TyleType[23] := 1340;
TyleType[24] := 1339;
TileNum := TStringList.Create;
TileX := TStringList.Create;
TileY := TStringList.Create;
TileZ := TStringList.Create;

XCheckMin := Xmin;
XCheckMax := XCheckMin+3;
While XCheckMin < Xmax Do
begin
YCheckMin := Ymin;
YCheckMax := YCheckMin+3;
While YCheckMin < Ymax Do
begin
for s := 0 to 24 do
    begin
    b:= GetStaticTilesArray(XCheckMin,YCheckMin,XCheckMax,YCheckMax, 0, TyleType[s], a);
    if b>0 Then
    begin
    for c :=0 to b-1 do
      begin
      TileNum.Add(IntToStr(TyleType[s]));
      TileX.Add(IntToStr(a[c].X));
      TileY.Add(IntToStr(a[c].Y));
      TileZ.Add(IntToStr(a[c].Z));
      end;
    end;
    end;
YCheckMin := YCheckMax+1;
YCheckMax := YCheckMin+3;
end;
XCheckMin := XCheckMax+1;
XCheckMax := XCheckMin+3;
end;

AddToSystemJournal('Найдено точек руды: '+IntToStr(TileNum.Count)+';');
end;

procedure CheckMineXY;
begin
For pX := Getx(self)-1 to Getx(self)+1 do
begin
    For pY := Gety(self)-1 to Gety(self)+1 Do
    begin
        If (pX <> GetX(Self)) and (pY <> getY(self)) then
        begin
            If NewMoveXY(pX,pY,False,0,true) Then Exit;
        end;
    end;        
end;
AddToSystemJournal('Не могу копать под собой. Фикс не срабатал.');
While 1=1 do wait(1000);
end;

procedure Lumber(tTile,tX,tY,tZ:integer);
begin
cTime := Now;
While InJournalBetweenTimes('far away|line of sight|nothing here',cTime,Now)=-1 Do
begin
cTime2 := Now;
If TargetPresent Then CancelTarget;
if (GetType(ObjAtLayer(RhandLayer)) <> AxeType) then
   begin
   UseObject(FindType(AxeType, Backpack));
   end;
if (GetType(ObjAtLayer(RhandLayer)) = AxeType) then
   begin
   UseObject(ObjAtLayer(RhandLayer));
   end;  
WaitForTarget(5000);
TargetToTile(tTile,tX,tY,tZ);
WaitJournalLine(cTime2,'put the|far away|line of sight|fail to find|nothing here|close to yourself',25000);
If InJournalBetweenTimes('close to yourself',cTime2,Now)<>-1 Then CheckMineXY;
Wait(350);
end;
end;

procedure CheckWeight;
begin
FindType(Log,BackPack);
If (FindFullQuantity > 150) or (NeedToDrop = True) Then
    begin
    recall(bankrune);
    If NeedToDrop Then
        begin
        Wait(60000*30);
        NeedToDrop := False;
        end;
    checkrune(bankrune);
    CheckLag(10000);
    UoSay('bank');
    Wait(650);
    CheckLag(10000);
    While FindType(Log,BackPack)>0 Do
        begin
        MoveItem(FindItem,-1,Bank,0,0,0);
        Wait(650);
        CheckLag(10000);
        end;
    FindTypeEx(Log,$0000,bank,False);
    AddToSystemJournal('Руды в банке: '+IntToStr(FindFullQuantity));
    CheckReags;
    If CheckAxe = False Then Exit;
    CheckMana;
    recall(OstrovRune);  
    checkrune(OstrovRune);
    AddToSystemJournal('------------------');
    end;
end;      
    
begin
SetARStatus(True);
SetPauseScriptOnDisconnectStatus(True);
SetEventProc(evDeath,'ImDead');
LoadTiles;
NeedToDrop := False;
While 1 = 1 Do
begin
For ii:=0 To TileNum.Count-1 Do
begin
    If GetPathArray(StrToInt(TileX[ii]),StrToInt(TileY[ii]),True,3,mPathArr)<0 Then
        begin
        AddToSystemJournal('Не вижу шахты.');
        Exit;
        end;
    NewMoveXY(StrToInt(TileX[ii]),StrToInt(TileY[ii]),True,2,True);
    Lumber(StrToInt(TileNum[ii]),StrToInt(TileX[ii]),StrToInt(TileY[ii]),StrToInt(TileZ[ii]));
    CheckWeight;
end;
NeedToDrop := True;
AddToSystemJournal('Копать закончил. 30 минут отдых');
CheckWeight;
end;
TileNum.Clear;
TileNum.Free;
TileX.Clear;
TileX.Free;
TileY.Clear;
TileY.Free;
TileZ.Clear;
TileZ.Free;
end.
Лейтенант (4548828)11 лет
Dragonstalker
Сообщений: 3319
Рег. 19.11.2013
11 марта 2017 09:37
Сообщение #2
добыча называется Lumber, руда называется Log, инструмент топор.
Я бы добавил ввиду специфики шарда пару моментов.
1) Если убили то летим по гампу в гостиницу.
Если успели перелететь - проверка координаты через 15 секунд - то перейдем к лекарю и ресаемся, затем идем до банка добираем руны, летим на базу, ждем минут 10-30 и летим копать.
Если не успели попасть в гостиницу (проверка координаты через 15 секунд) - тут есть некроманты которые отправляют в закрытую зону госта - то вырубаем клиент.
2) На базе пока стоишь надо хавать рыбу.
3) Можно пока стоишь жарить туже рыбу - эффективнее используется время.
4) И лучше запилить нуби руну и летать на базу а не в банк. В банк много не напихаешь. Его можно использовать как пересылочный пункт для реагентов.
5) Если уж пилить пилить то можно вписать трек и телепортироватся при треке человечка. Хотя хз если вписать ресалку то пофиг. А то будут постоянно стопорить скрипт.
Ефрейтор (245183)7 лет
Ranger
Сообщений: 51
Рег. 25.03.2017
3 апреля 2017 19:31
Сообщение #3
Marakoris,
А есть хороший скрипт на миненг. где он ходит. если перегруз реколится к дому и скидывает потом обратно поруне и капает. ))
Лейтенант (4548828)11 лет
Dragonstalker
Сообщений: 3319
Рег. 19.11.2013
3 апреля 2017 22:41
Сообщение #4
S.t.A.l.K.e.R,
Интересное предложение. :bye:
Ефрейтор (245183)7 лет
Ranger
Сообщений: 51
Рег. 25.03.2017
4 апреля 2017 08:47
Сообщение #5
Mirage,
Я играл на старом Антаресе. у меня был скрипт просто жесть.
Мне один человек подарил.
Значит запускаешь скрипт с места где лежат например 3 руны в шахты и рядом ящик, он реколится по первой встает в инвиз и начинает капать.
Как только трекинг кого-то находит, он реколится обратно домой, скидывает руду.
И так же делает если он перегружен.
Ходит по всей пешере, как только он ее выкапывает, он прилетает домой и реколится по второй руне.
Ну и так далее до бесконечности.
Ефрейтор (245183)7 лет
Ranger
Сообщений: 51
Рег. 25.03.2017
4 апреля 2017 08:53
Сообщение #6
Mirage,
И если есть, дай пожалуйста скрипт на тест индефикейшн.
Лейтенант (4548828)11 лет
Dragonstalker
Сообщений: 3319
Рег. 19.11.2013
4 апреля 2017 13:08
Сообщение #7
Я просто обратил внимание на предложение без знака вопроса :)
Я на скриптах почти не копал. Только в шахте которой на данном клиенте не существует.
Да и по большому счету вон же сверху скрипт. Надо проверить его да отписаться в чем могут быть проблемы. А я сейчас почти не захожу в игру - времени не хватает.
Последние посетители (0):

 
Сейчас: 24 ноября 2024 00:21