Перейти к содержанию
Форум шарда Middle-Earth
Kallish

Программа Stealth

Рекомендуемые сообщения

Поделитесь скриптами под нее, прога круче инжекта раз в 20. потенциал дикий... правда написана на паскале который я ваще не знаю)

 

 

 

Для тех кто в танке:

http://stealth.od.ua - клиент программы Stealth

 

функции := http://stealth.od.ua/Doc:RU/Api (с примерами)

"все" функции := http://stealth.od.ua/wiki/doku.php?id=functions (c примерами)

ОБСАЛЮТНО все функции := http://stealth.od.ua/forum/viewtopic.php?t=1220 (без примеров (их очень мало))

 

ссылки любезно предоставил nepret.

 

MeSSiR

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да не когда мне изучать ещё и компьютерные языки =)

Вот что я сварганить смог

Program Healing;
begin
  while not dead do
   begin
   uosay('.bandage self');
   wait(5000);
   uosay('.v');
   wait(5000);
   uosay('.ab 1');
   WaitTargetSelf;
   wait(5000);
   end;
End.

Суть простая - запускаем прогу, паладина или другого какого либо чара танка( убираем ab 1). - все чар для битья готов, его не не дисконектнет вообще) при этом нада автологин включить в самой программе.

Program stealth;

begin

while not dead do

begin

if Hidden then

useskill('Stealth')

else useskill('Hiding');

wait(5000);

end;

End.

Прокачка стелса.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Program hiding_and_stealth;
var
i:integer;
d:Cardinal;
TimeSay : TDateTime;
procedure Hungry(NeededLevel : Integer); {проверка голода от Миралекса!!!}
var HArray : array [0..10] of String;
    CurrentLevel : Integer;
    HasError : Boolean;
    TimeSayHungry : TDateTime;
    FoodID : Cardinal;
    i,c,difference : Integer;
begin
if (NeededLevel < 0) or (NeededLevel > 10) then Exit;
   HArray[0] := 'You are absolutely stuffed!';
   HArray[1] := 'You are stuffed';
   HArray[2] := 'hungry at all';
   HArray[3] := 'You are a little hungry';
   HArray[4] := 'You are somewhat hungry';
   HArray[5] := 'You are REALLY hungry';
   HArray[6] := 'Your stomash hurts';
   HArray[7] := 'Your stomash hurts and you feel dizzy';
   HArray[8] := 'You are starving';
   HArray[9] := 'You are almost dying of hunger';
   HArray[10] := 'You are DYING of hunger...';
HasError := true;
TimeSayHungry := Now;
UOSay('.hungry');
wait(100);
i:=0;
while i < 100 do
   begin
   for c := 0 to 10 do
   if InJournalBetweenTimes(HArray[c],TimeSayHungry,Now) >= 0 then
   begin
   CurrentLevel := c;
   HasError := false;
   i := 100;
   end;
   wait(100);
   i := i + 1;
   end;
if HasError then
   begin
   AddToSystemJournal('Error with Hungry: Lag? Conection error? Something else?');
   Exit;
   end;
difference := CurrentLevel - NeededLevel;
if difference > 0 then for i := 1 to difference do
   begin
   wait(5000)
   FoodID := FindType($097B,backpack);
   if FoodID <> $00 then UseObject(FoodID)
   else AddToSystemJournal('No Food');
   wait(200);
   end;
end;

begin
i:=0;
while i<1000 do
   begin
   TimeSay := Now;
   while InJournalBetweenTimes('You have hidden yourself well',TimeSay,Now)<0 do
   begin    
      useskill('Hiding');
        wait(2000);
   end;
   TimeSay := Now;
   while (InJournalBetweenTimes('You have revealed yourself!',TimeSay,Now)<0) and 
   (InJournalBetweenTimes('You must be hidden to use stealth',TimeSay,Now) <0) do
   begin
      if InJournalBetweenTimes('You have revealed yourself!',TimeSay,Now)<0 then i:=500;
      if InJournalBetweenTimes('You must be hidden to use stealth',TimeSay,Now)<0 then i:=500;
      useskill('Stealth');
      wait(2000);
   end;
       Hungry(1);
   end;
end.

Может кто на примере этого скрипта, сделать скрипт, качающий все остальные скилы)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

да помоему чувак который писал эту прогу сам с мидлы =( найти бы его)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а эти то зачем? на инжекте же уже есть норм скрипт на спаринг...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У инжекта нет функции реконнекта в игру! А у этой программы есть, у меня например инет может падать на 1-3 мин пару раз в сутки.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Program Guards;
var 
t: TDateTime;

begin
while not Dead do
  begin 
   t:=now;
   Wait(3000);
   if InJournalBetweenTimes('is attacking you', t, now) > 0 then
    UOSay('.guards');
  end;  
end.

 

Зов гвардов, очень полезно будет для ньюбов!

 

 

Program Guards;
var 
t: TDateTime;

begin
while not Dead do
begin 
  t:=now;
   WaitJournalLine(t, 'is attacking you', 200000);
   if InJournalBetweenTimes('is attacking you', t, now) > 0 then
    UOSay('.guards');
  end;  
end.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Код
Program Evaluate;
var t:integer;

{$Include 'all.inc'}

Begin
SetARStatus(true); //Включаем автореконектор
Hungry(1,backpack);
while not dead do // Зацикливаем
begin
for t:=0 to 30 do
begin
CheckSave;
CheckTargetError(2,2); //Проверяем нет ли левого таргета
UseSkill('Evaluate Intelligence');
WaitTargetObject(self);
Wait(10500);
end;
Hungry(1,backpack); //Проверяем голод
end;
End.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Все таки, я не забросил разбираться в программе стелс, получайте и пользуйтесь обалденным скриптом на обкаст.

Все что нужно - это скинуть в папку Stealth\Scripts\Include все инклюды которые только есть для стелса.

 

program cast;
const
sunduk = $4499C893;
var 
r,i : integer;
s : string;
MissingReg : cardinal;
Reags : array[1..8] of cardinal;
ctime : TDateTime;

{$Include 'all.inc'}


function timer(var acttimer:integer;actafter:integer):boolean;
begin
   result:=false;
   acttimer:=acttimer+1;
   if acttimer>=actafter then
   begin
      acttimer:=0;
      result:=true;       
   end;
end;

procedure CheckJournal;
begin
if InJournalBetweenTimes('Bless!', ctime, Now) <> -1 then 
    begin
    WaitTargetObject(LineID);
    cast('Bless');
    wait(3000);
    WaitTargetObject(LineID);
    cast('Protection');
    exit;
    end;
end;

function CheckReags : boolean;
begin
Result := True;
Reags[1] := $0F7B // BloodMosss
Reags[2] := $0F7A // BlackPearls
Reags[3] := $0F84 // Garlick
Reags[4] := $0F85 // Ginseng
Reags[5] := $0F86 // Madrake Roots
Reags[6] := $0F88 // NightShades
Reags[7] := $0F8C // Sulphuruos Ashs
Reags[8] := $0F8D // Spider Silks
for r := 1  to 8  do
    begin 
    findtype(Reags[r],BackPack);
    if findcount = 0 then  
        begin
        MissingReg := Reags[r];
        Result := False;
        end; 
    end;
end;

procedure Waiting;
begin
if MissingReg = $0F7B then s := 'BloodMosss';
if MissingReg = $0F7A then s := 'BlackPearls';
if MissingReg = $0F84 then s := 'Garlick';
if MissingReg = $0F85 then s := 'Ginseng';
if MissingReg = $0F86 then s := 'Madrake Roots';
if MissingReg = $0F88 then s := 'NightShades';
if MissingReg = $0F8C then s := 'Sulphuruos Ashs';
if MissingReg = $0F8D then s := 'Spider Silks';
AddToSystemJournal('KoH4uJIucb ' + s);
while (not CheckReags) do
    begin 
    ctime := now;
    wait(10000);
    if InJournalBetweenTimes('dispel!|hunt!|macro!', ctime, Now) <> -1 then uosay('KoH4uJIucb ' + s );
    uosay(' ');
    findtype(MissingReg,sunduk);
    if findcount > 0 then MoveItems(sunduk, MissingReg, $FFFF, backpack, 0, 0, 0, 500);
    end; 
end;

BEGIN
MissingReg := 0;
while (not dead) do
    begin 
    if (not CheckReags) then Waiting;
    ctime:=now;
    wait(1000);
        if timer(i,100) then 
        begin
        Hungry(1,backpack);
        uosay(' ');
        end;
    if TargetPresent then CancelTarget;
    CheckJournal;
    if mana < 35  then 
        begin
        wait(1000);
        useskill('Meditation');
        WaitJournalLine(now,'stop medit',30000);
                end;
    end;
END.

Ни каких айди прописывать не нужно, просто включайте скрипт и пользуйтесь.

 

1. Хангри инклюд не работает под наш шард.

2. Ид сумки с регами кто будет указывать?

3. Нет команды на перекастовку блеса.

4. Скрипт просит лишние реги.

В общем, скрипт ещё править и править под наш шард...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Код
Program Evaluate;
var t:integer;

{$Include 'all.inc'}

Begin
SetARStatus(true); //Включаем автореконектор
Hungry(1,backpack);
while not dead do // Зацикливаем
begin
for t:=0 to 30 do
begin
CheckSave;
CheckTargetError(2,2); //Проверяем нет ли левого таргета
UseSkill('Evaluate Intelligence');
WaitTargetObject(self);
Wait(10500);
end;
Hungry(1,backpack); //Проверяем голод
end;
End.

 

сам что-ли писал?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2nepret скрипт работает, на нашем шарде!

Вот, кое что я исправил теперь он идиально работает, инклюд исправляется под наш шард - меняется одна строчка и все.

 

program cast;
const
sunduk = $4499C893;
var 
r,i : integer;
s : string;
MissingReg : cardinal;
Reags : array[1..8] of cardinal;
ctime : TDateTime;

{$Include 'all.inc'}


function timer(var acttimer:integer;actafter:integer):boolean;
begin
   result:=false;
   acttimer:=acttimer+1;
   if acttimer>=actafter then
   begin
      acttimer:=0;
      result:=true;       
   end;
end;

procedure CheckJournal;
begin
if InJournalBetweenTimes('Cast!', ctime, Now) <> -1 then 
    begin
    WaitTargetObject(LineID);
    cast('Bless');
    wait(3000);
    WaitTargetObject(LineID);
    cast('Protection');
    wait(3000)
    UseSkill('Spirit Speak');
    exit;
    end;
if InJournalBetweenTimes('Ress!', ctime, Now) <> -1 then
    begin    
    WaitTargetObject(LineID);
    cast('Resurrection');
    wait(3000);     
    exit;
    end;
if InJournalBetweenTimes('help', ctime, Now) <> -1 then
    begin
    uosay('Скажи мне "cast!"- c большой буквы');
    wait(100);
    uosay('Скажи мне "ress!"- c большой буквы');
    wait(100);
    uosay('Скажи мне "bless!"- c большой буквы');
    wait(100);
    uosay('Скажи мне "prot!"- c большой буквы');
    wait(100);
    UseSkill('Spirit Speak');
    exit;
    end;
if InJournalBetweenTimes('Bless!', ctime, Now) <> -1 then 
    begin
    WaitTargetObject(LineID);
    cast('Bless');
    wait(1000);
    UseSkill('Spirit Speak');
    exit;
    end;
if InJournalBetweenTimes('Prot!', ctime, Now) <> -1 then 
    begin
    WaitTargetObject(LineID);
    cast('Protection');
    wait(1000);
    UseSkill('Spirit Speak');    
    exit;
    end;
end;

function CheckReags : boolean;
begin
Result := True;
Reags[1] := $0F7B // BloodMosss
Reags[2] := $0F7A // BlackPearls
Reags[3] := $0F84 // Garlick
Reags[4] := $0F85 // Ginseng
Reags[5] := $0F86 // Madrake Roots
Reags[6] := $0F88 // NightShades
Reags[7] := $0F8C // Sulphuruos Ashs
Reags[8] := $0F8D // Spider Silks
for r := 1  to 8  do
    begin 
    findtype(Reags[r],BackPack);
    if findcount = 0 then  
        begin
        MissingReg := Reags[r];
        Result := False;
        end; 
    end;
end;

procedure Waiting;
begin
if MissingReg = $0F7B then s := 'BloodMosss';
if MissingReg = $0F7A then s := 'BlackPearls';
if MissingReg = $0F84 then s := 'Garlick';
if MissingReg = $0F85 then s := 'Ginseng';
if MissingReg = $0F86 then s := 'Madrake Roots';
if MissingReg = $0F88 then s := 'NightShades';
if MissingReg = $0F8C then s := 'Sulphuruos Ashs';
if MissingReg = $0F8D then s := 'Spider Silks';
AddToSystemJournal('KoH4uJIucb ' + s);
while (not CheckReags) do
    begin 
    ctime := now;
    wait(10000);
    if InJournalBetweenTimes('Cast!|Bless!|Prot!|Ress!', ctime, Now) <> -1 then uosay('KoH4uJIucb ' + s );
    uosay(' ');
    findtype(MissingReg,sunduk);
    if findcount > 0 then MoveItems(sunduk, MissingReg, $FFFF, backpack, 0, 0, 0, 500);
    end; 
end;

BEGIN
MissingReg := 0;
while (not dead) do
    begin 
    if (not CheckReags) then Waiting;
    ctime:=now;
    wait(1000);
        if timer(i,100) then 
        begin
        Hungry(1,backpack);
        uosay(' ');
        end;
    if TargetPresent then CancelTarget;
    CheckJournal;
    if mana < 35  then 
        begin
        wait(1000);
        useskill('Meditation');
        WaitJournalLine(now,'stop medit',30000);
                end;
    end;
END.

 

Для того что бы реснуть госта - нужно написать в гильд чат help, потом просто в чат Ress!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
инклюд исправляется под наш шард - меняется одна строчка и все.

 

вырезаеться как минимум пол скрипта...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
вырезаеться как минимум пол скрипта...

Мне было достаточно исправить одной строчки, что бы скрипты запускались и чар жрал - больше мне не че не нужно) я не мега скриптер и ваще скриптовать не умею) Выкладываю рабочие скрипты - хотите пользуйтесь, хотите нет )

 

Если не забью на уо, займусь написанием скрипта на подобии как у мессира, только для стелса)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
достаточно исправить одной строчки, что бы скрипты запускались и чар жрал - больше мне не че не нужно)

 

исправленная МНОЙ версия:

procedure Hungry;
var 
FoodID : Cardinal;
begin
    if Not Connected then Exit;
    FindType($097B,Backpack);
    if FindCount > 0 then
        begin
            FoodID := FindType($097B,Backpack);
            if FoodID <> $00 then UseObject(FoodID);
            wait(200);
        end;
    if FindType($097B,Backpack) = 0 then AddToSystemJournal('Нет еды!');
end;

 

исходная:

procedure Hungry(NeededLevel : Integer; Container : Cardinal);
var HArray : array [0..10] of String;
    CurrentLevel : Integer;
    HasError : Boolean;
    TimeSayHungry : TDateTime;
    FoodID : Cardinal;
    i,c,difference : Integer;
begin
if Not Connected then Exit;
if (NeededLevel < 0) or (NeededLevel > 10) then Exit;
   HArray[0] := 'You are absolutely stuffed!';
   HArray[1] := 'You are stuffed';
   HArray[2] := 'hungry at all';
   HArray[3] := 'You are a little hungry';
   HArray[4] := 'You are somewhat hungry';
   HArray[5] := 'You are REALLY hungry';
   HArray[6] := 'Your stomash hurts';
   HArray[7] := 'Your stomash hurts and you feel dizzy';
   HArray[8] := 'You are starving';
   HArray[9] := 'You are almost dying of hunger';
   HArray[10] := 'You are DYING of hunger...';
HasError := true;
TimeSayHungry := Now;
UOSay('.hungry');
wait(100);
i:=0;
while i < 100 do
   begin
   for c := 0 to 10 do
   if InJournalBetweenTimes(HArray[c],TimeSayHungry,Now) >= 0 then
    begin
    CurrentLevel := c;
    HasError := false;
    i := 100;
    end;
   wait(100);
   i := i + 1;
   end;
if HasError then
   begin
   AddToSystemJournal('Error with Hungry: Lag? Conection error? Something else?');
   Exit;
   end;
difference := CurrentLevel - NeededLevel;
FindType($097B,Container);
if (difference > 0) and (FindCount > 0) then for i := 1 to difference do
   begin
   FoodID := FindType($097B,Container);
   if FoodID <> $00 then UseObject(FoodID);
   wait(200);
   end;
if FindType($097B,Container) = 0 then AddToSystemJournal('No Food');
end;

редактировать "UOSay('.hungry');" совсем не вариант...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

UseObject(FindType ($097B,Container));

 

Я просто вставил это туда, теперь он у меня жрет только когда выходит системное сообщение.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

немогу осилить на стелсе миниг, есть ли удалец на шарде способный заставить копать хотя бы в один тайл?)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

program MiningInMinoc;

const
MineStartX = 2568; //Центер пещеры по оси X
MineStartY = 483; //Центер пещеры по оси Y
Pickaxe = $143C; //Type кирки (сейчас Hammer Pick)
RuneBookInDom = $475AF894; //Указать ID рунбуки с руной в дом
GumpDom = '601'; //Руна в рунбуке по которой летим домой (1 руна на левой странице №601)
RuneBookInMine = $475AF894; //Указать ID рунбуки с руной возле пещеры
GumpMine = '605'; //Руна в рунбуке по которой летим к пещере (1 руна на левой странице №601)
ResCount = $472DDA3A; //Контейнер с припасами (еда, Recall scroll'ы, кирки)
Food = $097B; //Тип еды. Сейчас Фиш-стейки
SumFood = 50; //Колличество еды которой берём с собой
MaxVes = 10000; //Максимальный вес при котором лететь домой на разгрузку

var
a : TFoundTilesArray;
i, b, Error : integer;
StartX, StartY : Word;
TyleType : array [0..24] of cardinal;
ctime, mdtime, gtime : TDateTime;
{$Include 'all.inc'}

procedure DropRes;
var
i, IngGround : integer;
IngosColor : array [0..10] of cardinal;
begin
  IngosColor[0] := $0602;
  IngosColor[1] := $0000;
  IngosColor[2] := $0386;
  IngosColor[3] := $01BF;
  IngosColor[4] := $03E9;
  IngosColor[5] := $0590;
  IngosColor[6] := $0162;
  IngosColor[7] := $0160;
  IngosColor[8] := $0455;
  IngosColor[9] := $0253;
  IngosColor[10] := $0482;
  FindTypeEx($19B9, $FFFF, Backpack, False);
  if FindCount > 0 then
    begin
      FindTypeEx($0FB1, $FFFF, Ground, False);
      if FindCount > 0 then
        begin
          NewMoveXY(GetX(finditem),GetY(finditem),True,1,True);
          repeat
            FindTypeEx($19B9, $FFFF, Backpack, False);
            if FindCount > 0 then
              begin
                UseType($19B9, $FFFF);
                wait(500);
              end;
          until FindCount < 1; 
        end;
    end;
  for i := 0 to 10 do
    begin
      FindTypeEx($1BF2, IngosColor[i], Ground, False);
      if (FindCount > 0) and (FindCount <= 55000) then
        begin
          NewMoveXY(GetX(finditem),GetY(finditem),True,2,True);
          IngGround := finditem;
          FindTypeEx($1BF2, IngosColor[i], Backpack, False);
          if FindCount > 0 then
            begin
              checksave;
              MoveItem(finditem, FindQuantity, IngGround, 0,0,0);
              wait(500);
            end;
        end
      else
        begin
          checksave;
          MoveItem(finditem, FindQuantity, Ground, 0,0,0);
          wait(500);
        end;
    end;  
end;

procedure GetRes;
var
CheckSum : integer;
dcx, dcy : integer;                 
begin
  if not IsContainer(ResCount) then
    begin
      Error := 1;
      AddToSystemJournal('>>> Нет контейнера с ресурсами! Скрипт дальше работать НЕ БУДЕТ!');
      exit;
    end;
  dcx := GetX(ResCount);
  dcy := GetY(ResCount);
  NewMoveXY(dcx,dcy,True,2,True);
  checksave;
  UseObject(ResCount);
  wait(1000);
  FindtypeEx($1F4C, $FFFF, ResCount, False);
  if FindQuantity < 1 then
    begin
      Error := 1;
      AddToSystemJournal('>>> В указанном контейнере нету Recall scroll-ов! Скрипт дальше работать НЕ БУДЕТ!');
      exit;
    end
  else
    begin
      if not RuneBookInDom = RuneBookInMine then
        begin
          checksave;
          UseObject(RuneBookInMine);
          WaitGump('800');
          WaitTargetObject(finditem);
          wait(4000);
          checksave;
          UseObject(RuneBookInDom);
          WaitGump('800');
          WaitTargetObject(finditem);
          wait(4000);
        end
      else
        begin
          checksave;
          UseObject(RuneBookInDom);
          WaitGump('800');
          WaitTargetObject(finditem);
          wait(4000);
        end;
    end;
    
  FindtypeEx(Food, $FFFF, backpack, False);
  if SumFood > FindQuantity then
    begin
      CheckSum := SumFood - FindQuantity;
      FindtypeEx(Food, $FFFF, ResCount, False);
      if FindQuantity < 1 then
        begin
          Error := 1;
          AddToSystemJournal('>>> В указанном контейнере нету еды! Скрипт дальше работать НЕ БУДЕТ!');
          exit;
        end
      else
        begin
          checksave;
          MoveItem(finditem, CheckSum, backpack,0,0,0)
          wait(1000);
        end;
    end;
    
    FindtypeEx(Pickaxe, $FFFF, backpack, False);
    if FindCount < 1 then
      begin
        FindtypeEx(Pickaxe, $FFFF, ResCount, False);
        if FindCount < 1 then
          begin
            Error := 1;
            AddToSystemJournal('>>> В указанном контейнере нету Pickaxe! Скрипт дальше работать НЕ БУДЕТ!');
            exit;
          end
        else
          begin
            checksave;
            MoveItem(finditem, 1, backpack,0,0,0)
            wait(1000);
          end;  
      end;
end;

procedure CheckDisarm;
begin
  if (ObjAtLayer(RhandLayer) <> 0) or (ObjAtLayer(LhandLayer) <> 0) then
    begin
      disarm;
      repeat
      until (ObjAtLayer(RhandLayer) = 0) or (ObjAtLayer(LhandLayer) = 0) or dead;
    end;
end;

procedure TPDom;
var
xs, ys : Integer;
begin
  CheckDisarm;
  xs := GetX(self);
  ys := GetY(self);
  UseObject(RuneBookInDom);
  WaitGump(GumpDom);
  repeat
    wait(100)
  until (xs <> GetX(self)) or (ys <> GetY(self));
  wait(1000)
end;

procedure TPMine;
var
xs, ys : Integer;
begin
  if Error = 1 then exit; 
  CheckDisarm;
  xs := GetX(self);
  ys := GetY(self);
  UseObject(RuneBookInMine);
  WaitGump(GumpMine);
  repeat
    wait(100)
  until (xs <> GetX(self)) or (ys <> GetY(self));
  wait(1000)
end; 

procedure MobDetected;
var
Mob : array [0..1] of cardinal;

begin
  if not dead then
    begin
      if InJournalBetweenTimes('attacking you', mdtime, Now) <> -1 then
        begin
          mdtime := Now;
          UOSay('.guards');
        end;
      Mob[0] := $0033;
      Mob[1] := $000E;
      FindDistance := 5; 
      FindVertical := 1;
      for i := 0 to 1 do
        begin
          FindTypeEx(Mob[i], $FFFF, Ground, False);
          if FindCount > 0 then
            begin
              if gtime = Now then
                begin
                  UOSay('.guards');
                  gtime := gtime + 0.25/(24*60*3);
                end;
            end;
        end;
      FindDistance := 100; 
      FindVertical := 1;
    end;
end;

procedure CheckPickaxe;
var
x, y : integer;
begin
  if not dead then
    begin
      if ObjAtLayer(RhandLayer) < 1 then 
        begin
          FindType(Pickaxe, Backpack);
          if FindCount > 0 then
            begin
              Equip(RhandLayer, FindItem);
            end
          else
            begin
              x := GetX(self);
              y := GetY(self);
              TPDom;
              DropRes;
              GetRes;
              TPMine;
              NewMoveXY(x, y, True, 2, True);
            end;
        end;
      while ObjAtLayer(RhandLayer) < 1 do
        begin
          wait(100);
        end;
    end;  
end;

procedure CheckDead;
var
i, x, y : integer;
Go : array [0..13] of cardinal;
begin
  if dead then
    begin
      x := GetX(self);
      y := GetY(self);
      if IsGump then
        begin
          GumpAutoCheckBox(10,211);
          NumGumpButton(GetGumpsCount-1,0);
        end;
      if IsGump then
        begin
          CloseSimpleGump(GetGumpsCount-1);
        end;
      NewMoveXY(2550,622,True,0,True);
      NewMoveXY(2578,622,True,0,True);
      repeat
        CheckSave;
        Step(0, true);
        if GetGumpsCount > 0 then
          begin
            NumGumpButton(GetGumpsCount-1,1);
            repeat
              wait(1000);
            until not dead;
            TPDom;
            DropRes;
            GetRes;
            TPMine;
            NewMoveXY(x, y, True, 0, True);
            exit;
        end;
      until (GetX(self) = 2578) and (GetY(self) = 601);
      if PredictedDirection <> 0 then Step(0, true);
      repeat
        CheckSave;
        Step(6, true);
        if GetGumpsCount > 0 then
          begin
            NumGumpButton(GetGumpsCount-1,1);
            repeat
              wait(1000);
            until not dead;
            TPDom;
            DropRes;
            GetRes;
            TPMine;
            NewMoveXY(x, y, True, 0, True);
            exit;
          end;
      until (GetX(self) = 2575) and (GetY(self) = 601);
      repeat
        CheckSave;
        Step(0, true);
        if GetGumpsCount > 0 then
          begin
            NumGumpButton(GetGumpsCount-1,1);
            repeat
              wait(1000);
            until not dead;
            TPDom;
            DropRes;
            GetRes;
            TPMine;
            NewMoveXY(x, y, True, 0, True);
            exit;
          end;
      until (GetX(self) = 2575) and (GetY(self) = 593);  
      Go[0] := 0;
      Go[1] := 0;
      Go[2] := 0;
      Go[3] := 0;
      Go[4] := 0;
      Go[5] := 6;
      Go[6] := 6;
      Go[7] := 4;
      Go[8] := 4;
      Go[9] := 4;
      Go[10] := 4;
      Go[11] := 4;
      Go[12] := 2;
      Go[13] := 2;
      while dead do
      begin
        for i := 0 to 13 do
          begin
            if GetGumpsCount > 0 then
          begin
            NumGumpButton(GetGumpsCount-1,1);
            repeat
              wait(1000);
            until not dead;
            TPDom;
            DropRes;
            GetRes;
            TPMine;
            NewMoveXY(x, y, True, 0, True);
            exit;
          end;
            if (PredictedDirection <> 0) and (i = 0) then Step(Go[i], true);
            if (PredictedDirection <> 6) and (i = 5) then Step(Go[i], true); 
            if (PredictedDirection <> 4) and (i = 7) then Step(Go[i], true);
            if (PredictedDirection <> 2) and (i = 12) then Step(Go[i], true);
            CheckSave;
            Step(Go[i], true);
            wait(1000);
          end;
      end;   
    end;
end;

procedure CheckWeight;
var
rx, ry : integer;
begin
  if Weight >= MaxVes then
    begin
      rx := GetX(self);
      ry := GetY(self);
      TPDom;
      DropRes;
      GetRes;
      TPMine;
      NewMoveXY(rx, ry, True, 0, True);   
    end; 
end;

procedure StartMining;
var
i, t : integer;
begin
  for i := 0 to b do
    begin
      if a[i].Z = GetZ(Self) then
        begin
          CheckDead;
          checksave;
          hungry;
          CheckWeight;
          NewMoveXY(a[i].X, a[i].Y, True, 2, False);
          repeat
            CheckDead;
            CheckPickaxe;
            UseObject(ObjAtLayer(RhandLayer));
            t := 0;
            repeat
              wait(50);
              checksave;
              t := t + 1;
            until TargetPresent or dead or (t >= 100);            
            ctime := Now;
            TargetToTile(a[i].Tile, a[i].X, a[i].Y, a[i].Z);
            CheckSave;
            WaitJournalLine(ctime, 'Points|There is no ore here to mine|Cancelled|That is too far away', 5000);            
            if (InJournalBetweenTimes('There is no ore here to mine|Cancelled|That is too far away', ctime, Now) <> -1) or dead then
              begin
                CheckDead;
                break;
              end;
            if InJournalBetweenTimes('Points|Ouch!', ctime, Now) <> -1 then
              begin
                repeat
                  wait(100)
                  MobDetected;
                  CheckSave;
                until (InJournalBetweenTimes('There is no ore here to mine|Cancelled|That is too far away|You cannot|That is too far away', ctime, Now) <> -1) or dead;
              end;
            CheckDead; 
          until false;
        end;
    end;
end;

begin
SetARStatus(true); //автореконектер
SetPauseScriptOnDisconnectStatus(true); //при дисконнекте, все запущенные скрипты встанут на паузу
FindDistance := 100; 
FindVertical := 1;
Error := 0;
mdtime := Now;
gtime := Now;
TyleType[0] := 1339; //Тайлы шахты
TyleType[1] := 1340;
TyleType[2] := 1341;
TyleType[3] := 1342;
TyleType[4] := 1343;
TyleType[5] := 1344;
TyleType[6] := 1345;
TyleType[7] := 1346;
TyleType[8] := 1347;
TyleType[9] := 1348;
TyleType[10] := 1349;
TyleType[11] := 1350;
TyleType[12] := 1351;
TyleType[13] := 1352;
TyleType[14] := 1353;
TyleType[15] := 1354;
TyleType[16] := 1355;
TyleType[17] := 1356;
TyleType[18] := 1357;
TyleType[19] := 1358;
TyleType[20] := 1359;
TyleType[21] := 1386;
TyleType[22] := 1361;
TyleType[23] := 1362;
TyleType[24] := 1363;

repeat
DropRes;
GetRes;
TPMine;
if Error = 1 then
  begin
    SetARStatus(false);
    SetPauseScriptOnDisconnectStatus(false);
    exit;
  end;
NewMoveXY(MineStartX,MineStartY,True,0,True);
StartX := GetX(Self);
StartY := GetY(Self);
for i := 0 to 24 do
  begin
    b:= GetStaticTilesArray(StartX-30,StartY-30,StartX+30,StartY+30, 0, TyleType[i], a);
    if b > 1 then
      begin
        if Error = 1 then
          begin
            SetARStatus(false);
            SetPauseScriptOnDisconnectStatus(false);
            exit;
          end;
        StartMining;
      end;
  end;
TPDom;
until false
END.

 

весь скрипт писал сам, по этому могут быть опечатки

 

 

инклюды:

 

checksave.inc

procedure CheckSave; 
var Time : TDateTime; 
begin 
Time:= Now - (0.5 / 1440); 
if InJournalBetweenTimes('Saving World State',Time,Now) >= 0 then
repeat
wait(1000);
until InJournalBetweenTimes('Saving World State complete',Time,Now) >= 0;
end;

 

hungry.inc

procedure Hungry;
var 
    FoodID : Cardinal; 
begin
if Not Connected then Exit;
FindType(Food,Backpack);
if FindCount > 0 then
   begin
   FoodID := FindType(Food,Backpack);
   if FoodID <> $00 then UseObject(FoodID);
   wait(200);
   end;
if FindType(Food,Backpack) = 0 then AddToSystemJournal('Нет еды!');
end;

 

all.inc

[{$Include 'checksave.inc'}
{$Include 'hungry.inc'}
{$Include 'WaitConnection.inc'}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 nepret

Ну ты и голова! Я бы не догадался так заставить кликать чара. Вобщем рекомендую ньби кирку сделать чару, тогда не нужно будет заморачиваться с проверкой кирки! Я конечно не стремлюсь к абсолютному автономному скрипту, но я вырезал половину - рекол домой, чек дед, дресс, дроп. Оставил алгаритм копания, точней взял его за основу. Хочу сделать все-таки аутотайловый мининг под любую шахту). Если сделаю, поделюсь обязательно хотя с моими мозгами я думаю это будет где-то через год)))))))

 

По твоему скрипту - не хватает подхила чара(фраза Ouch!), режим вармода - всегда. почему то не хочет чар реколиться к шахте после речарджа буки(если она полная). Смысл плавить руду сразу? пусть в виде руды чар складирует. а потом уже самостоятельно решать - стоит плавить всю или кому-то стоит прокачать мининг.

 

 

procedure DropRes;
var
i, Color2 : integer;
Color : array [0..24] of cardinal;
begin 
  Color[0] := $0602; // нижка
  Color[1] := $0000; //
  Color[2] := $0386; //
  Color[3] := $01BF; //
  Color[4] := $03E9; //
  Color[5] := $0590; //
  Color[6] := $0162; //
  Color[7] := $0160; //
  Color[8] := $0455; //
  Color[9] := $0253; //
  Color[10] := $0482; //
  Color[11] := $0488; // purtit
  Color[12] := $0698; // deep 
  Color[13] := $05D2; // aqua
  Color[14] := $0482; // silver
  Color[15] := $0253; // valorit
  Color[16] := $0949; // druidsilver
  Color[17] := $0577; // air
  Color[18] := $051E; // celestit
  Color[19] := $0457; // ereirit
  Color[20] := $08EA; //ppk
  Color[21] := $052D; //mythril
  Color[22] := $0944; //sun
  Color[23] := $0942; //wyrm
  Color[24] := $0481; //adamant
  for i:=0 to 24 do 
begin 
//Addtosystemjournal('Разгружаюсь'); 
FindTypeEx($19B9,Color[i],backpack,False); 
if (FindCount>0) then 
begin 
MoveItem(FindItem,0,ground,0,0,0); 
wait(200); 
checksave; 
end; 
end; 
end;

 

Как сделать так что б складывал в стак - я хз. Хоть у тебя в скрипте есть пример - я не понял.

Вобщем, что ещё нужно добавить - детект перед использованием кирки, бинт, если фэйлед - .c "help". команду для принудительного выгона из шахты на журнал (qomou) или любая другая (disarm, .Recall).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не надо забывать, что этот скрипт изначально делался под одну, определённую шахту.

 

По твоему скрипту - не хватает подхила чара(фраза Ouch!)

Удар киркой по ноге достаточно редок, по этому и нет подхила. Это не критично.

 

режим вармода - всегда

Зачем? Есть же гвардс.

 

почему то не хочет чар реколиться к шахте после речарджа буки(если она полная).

Я не стал разбираться с резкой подстрок. Не особо понял как и что там, по этому запилил задержку в 4 секунды.

 

Смысл плавить руду сразу? пусть в виде руды чар складирует. а потом уже самостоятельно решать - стоит плавить всю или кому-то стоит прокачать мининг.

Если мининга выше 100, то прокачка на плавке руды не даёт поинтов к скилу. Уже проверял...

 

 

Как сделать так что б складывал в стак - я хз. Хоть у тебя в скрипте есть пример - я не понял.

 

Color2 это зачем тут?

Поставь дистанцию на поиск: FindDistance, FindVertical

 

и возьми в привычку делать отступы в скрипте, это помогает легче его читать и разбираться в нём

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Если мининга выше 100, то прокачка на плавке руды не даёт поинтов к скилу. Уже проверял...

целестит, еретрит, мифрил, адамант очень хорошо растет до 105.

 

Color2 это зачем тут?

 

да хз без него у меня чет не запускался.

 

Зачем? Есть же гвардс.

 

неактуально когда выходишь из минока, хотя в твоем варианте для минок шахты - да.

Поставь дистанцию на поиск: FindDistance, FindVertical

попробую разобраться.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Задержку на гвардс поставь минимум 2 секунды. А то твои боты одновременно начинают флудить гвардс, что вызывает немалое кол-во гвардов, за счет чего нагрузка серва увеличивается. Буду сквелчить в след раз.

Про прокачку руды: на мифриле качается до 120... так же остальная выха тоже качает. Бери каждого вида руды по 1 штуке и пробуй плавить.. если очки идут - плавь на ней)

 

с киркой дело говорит... создай нуба.. выбери ему в первичных скиллах мининг.. у него будет нуби кирка, которая не ломается... ей из сумки и копай...

 

так же у тебя в скрипте, когда чар дохнет... он запоминает место, где сдох.. и после реса возвращается к нему... в чем проблема включить лутание своего трупа? зачастую воры оставляют армор и кирку в трупе..

 

Вообще стелс с очень хорошей ходилкой.. но для меня это далеко... я к сожалению не выношу паскаль.. сам не знаю почему..

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...

×
×
  • Создать...