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

Авто фарм слабых мобов.

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

Авто фарм слабых мобов.

Post by drabadan »

Пишу под заказ скрипт на фарм овец, лам, коней и прочего шлака.

Руководство пользовователя:
1. Добавляем руны на "поляну" и "в банк". Для этого есть кнопка - "Add Chest and runes".Смотрим внимательно на подсказки и кликаем на соответствующие руны!
2. Добавляем животных. Скрипт запоминает их и если нажать Save Config, то скрипт ето еще и в файл запишет! Животных добавить достаточно просто, нажимаем на кнопку - кликаем таргетом в животинку, все сделано...
3. Добавляем волыну, я умышленно не делал запоминание оружия - потратить 2 секунды перед запуском и записать тип волынки в соответствующее окошко которое появится после нажатия на кнопку Add weapon and shield - не такая и проблема.

Как работает скрипт:
1. Реколимся на поляну.
2. Ищем всех зверей по типам и сравниваем с нашим массивом животинок, если нашли соответствие - то записываем айдишники всех найденных животных соответствующего типа, переходим к следующему типу и опять... То-есть если вокруг нас в 20 тайлах есть 3 коровы 5 коней и 468 овец, то он найдет и убъет всех, гадина такая...
3. Нашли - теперь бежим к каждой животине, убиваем, достаем даггер - режем - лутаем - запоминаем, что полутали.
4. Заканчиваются мобы - летим по руне в банк и выкладываем все, что полутали. Выкладывает, только то - что полутал. И наново.

Демо версия:

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

Руны ремаркает.

Отчет о вирусах: ОТЧЕТ

Архив скрипта:
Ссылка на дропбокс
nepret
Neophyte
Neophyte
Posts: 44
Joined: 26.07.2012 22:21

Re: Авто фарм слабых мобов.

Post by nepret »

нафига ещё и ид записывать, не проще искать по типу сразу в процессе?
а если ещё реснуться, скрипт их пропустит?
как долго тестировался скрипт?

что происходит при дисконекте и смерти чара?
есть ли автоматический резурект у хиллера\креста?

и самое главное, как прошёл краш-тест?)

такой ещё вопрос, ты же выкладываешь на русско-язычный форум? тогда почему все кнопки на инглише?

и вообще убило)))) start buttom
drabadan
Expert
Expert
Posts: 730
Joined: 13.12.2012 17:35
Contact:

Re: Авто фарм слабых мобов.

Post by drabadan »

nepret wrote:нафига ещё и ид записывать, не проще искать по типу сразу в процессе?
а если ещё реснуться, скрипт их пропустит?
как долго тестировался скрипт?

что происходит при дисконекте и смерти чара?
есть ли автоматический резурект у хиллера\креста?

и самое главное, как прошёл краш-тест?)

такой ещё вопрос, ты же выкладываешь на русско-язычный форум? тогда почемприу все кнопки на инглише?

и вообще убило)))) start buttom
Айди - хз, в процессе мне не понравилось и подумалось решилось, что проще запомнить все. Если искать последовательно то надо определять свои граничные координаты, иначе чар убежит хз куда и там точно сдохнет.

При дисконекте/смерти ничего не происходит... Авторесс сюда нет смысла паять, иначе авторемарк надо перерабатывать, да и процедуры перезагрузки бинтами регами оружием и прочим. Чтобы чар начинал голым сам одевался и прочее, летел убивал. Тогда и руны в банке надо складывать, а тогда ремарк переделывать ибо руна маркается поместуположению чара, то-есть возить маркать возить назад... Будет включен уход от пк, думаю этого хватит.

По поводу тестов - да само окно гуи виснет, это не мой бок. Такая специфика, я его совсем уберу после нажатия на кнопку старт. Окошко нужно для настройки и запуска.

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

Баттом поменяю, почему пишу на английском - у меня делфи на английском, ультима на английском, язык скрипта английский - куда тут русский совать, учитывая, что я - хохол.
Если уже делать на родном языке, то я на рідній мові напишу.
Tobacco
Posts: 2
Joined: 07.04.2014 15:11

Re: Авто фарм слабых мобов.

Post by Tobacco »

drabadan wrote:Пишу под заказ скрипт на фарм овец, лам, коней и прочего шлака.
А точнее ?:)
drabadan
Expert
Expert
Posts: 730
Joined: 13.12.2012 17:35
Contact:

Re: Авто фарм слабых мобов.

Post by drabadan »

Tobacco wrote:
drabadan wrote:Пишу под заказ скрипт на фарм овец, лам, коней и прочего шлака.
А точнее ?:)
А как?

В данный момент дописываю базу для упрощения написания любой "АВТО" скупки или "АВТО" фарма. Как допилю - посмотрим, поразвиваем. Может, дело пойдет полегче.
drabadan
Expert
Expert
Posts: 730
Joined: 13.12.2012 17:35
Contact:

Re: Авто фарм слабых мобов.

Post by drabadan »

Почти все то же самое, но - решил написать маленькую прогу для удобства ввода новых мобов.
Сам скрипт внутренний без всяких наворотов. Я его не усложнял умышленно - это просто база, для того чтобы любой мог довоять то, что наиболее подходит для него.
Код скрипта

Code: Select all

Program MobFarm;

const
 RangeCheck = 40; //(Tiles); range for mob finding
 Skinning_Tool = $40132669; //(Cardinal) id; 

{$Region 'Script'}
type
 TMob = record
 Name : String;
 _Type : Word;
end;

var
 Mobs : Array of TMob;
 Corpses : Array of Cardinal; 
 i : Integer;

procedure ReadMobArray;
var
 iniFile : TIniFile;
 i, MobsCount : Integer;
begin
 iniFile := TIniFile.Create(StealthPath + 'Mobs.ini');
 MobsCount := iniFile.ReadInteger('General', 'MobsCount', 0);
 if MobsCount > 0 then
  begin
   SetLength(Mobs, MobsCount);  
   for i := 0 to MobsCount-1 do
    with iniFile do
     begin
         Mobs[i]._Type := ReadInteger('Mobs' + IntToStr(i), 'MobType', -1);
         Mobs[i].Name := ReadString('Mobs' + IntToStr(i), 'MobName', 'No Name');
     end;
  end
 else
  AddToSystemJournal('Mob list is empty! Add more mobs with configurator.exe');
 iniFile.Free;
end;

function FindMob : Cardinal;
var
 i : Integer;
begin
 Result := 0;
 FindDistance := RangeCheck;
 if Length(Mobs) > 0 then  
  for i := Low(Mobs) to High(Mobs) do
   if FindType(Mobs[i]._Type, Ground) > 0 then
    Result := FindItem;     
end;

procedure WaitLag(WaitMS : Integer); 
begin
 CheckLag(60000);
 Wait(WaitMS);
end; 

function InCorpseList(ID : Cardinal) : Boolean;
var
 i : Integer;    
begin
 Result := False;
 if Length(Corpses) > 0 then
  begin
   for i := Low(Corpses) to High(Corpses) do
    if Corpses[i] = ID then
     begin
      Result := True;
      SetLength(Corpses, Length(Corpses) + 1);
      Corpses[High(Corpses)] := ID;
     end;
  end
 else
  begin
   SetLength(Corpses, 1);
   Corpses[High(Corpses)] := ID;
  end;
end;    
    
procedure LootCorpse;
var
 Corpse : Cardinal;
begin
 FindDistance := 1;
 if (FindType($2006, Ground) > 0) then
  if Not InCorpseList(FindItem) then
   begin
    Corpse := FindItem;
    UseObject(Skinning_Tool);
    WaitLag(100);
    if WaitForTarget(5000) then
     TargetToObject(FindItem);
    WaitLag(100);
    UseObject(FindItem);
    WaitLag(100);
    while FindType($FFFF, Corpse) > 0 do
     begin
      MoveItem(FindItem, 0, Backpack, 0,0,0);
      WaitLag(500);
     end;
   end;
end;

procedure KillMob;
var
 Mob : Cardinal;
begin
 while FindMob > 0 do
  begin
   Mob := FindMob;
   while IsObjectExists(Mob) do
    begin
     NewMoveXY(GetX(Mob), GetY(Mob), true, 1, true);
     Attack(Mob);
     WaitLag(1000);
    end;
  end;
 LootCorpse;
end;

{$EndRegion}


begin
 ReadMobArray;
 MoveOpenDoor := True;
 if Length(Mobs) > 0 then
  for i := Low(Mobs) to High(Mobs) do
   AddToSystemJournal(Mobs[i].Name);
 KillMob;  
end.
Код приложения делфи

Code: Select all

unit MainForm;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, IniFiles, stealth_script;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    Button2: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

type
  TMob = record
    Name : String;
    _Type : Word;
  end;

var
  Form1: TForm1;
  Mobs : Array of TMob;

const
  iniName = 'Mobs.ini';

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  with Script do
    begin
      if Connection.Connected then
        Client.RequestObjectTarget
      else
        raise Exception.Create('Not connected');
      if Client.WaitForTargetResponse(60000) then
        if (TUOObject.GetHP(Client.TargetResponse.ID) > 0) then
          begin
            SetLength(Mobs, Length(Mobs) + 1);
            Mobs[High(Mobs)].Name := TUOObject.GetName(Client.TargetResponse.ID);
            Mobs[High(Mobs)]._Type := TUOObject.GetType(Client.TargetResponse.ID);
            Memo1.Lines.Add(IntToStr(High(Mobs)+1) + '. ' + Mobs[High(Mobs)].Name + '; Type: ' +
              IntToStr(Mobs[High(Mobs)]._Type));
          end
        else
          raise Exception.Create('Wrong target or timed out!');
    end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  Memo1.Lines.Delete(Memo1.Lines.Count-1);
  SetLength(Mobs, Length(Mobs)-1);
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var
  iniFile : TIniFile;
  i, MobCount : Integer;
begin
  iniFile := TIniFile.Create(Script.Path.StealthPath + iniName);
  with iniFile do
    begin
      if Length(Mobs) > 0 then
        for i := Low(Mobs) to High(Mobs) do
          begin
            WriteInteger('General', 'MobsCount', Length(Mobs));
            WriteString('Mobs' + IntToStr(i), 'MobName', Mobs[i].Name);
            WriteInteger('Mobs' + IntToStr(i), 'MobType', Mobs[i]._Type);
          end;
      MobCount := ReadInteger('General', 'MobsCount', 0);
      while Length(Mobs) < MobCount do
        begin
          DeleteKey('Mobs' + IntToStr(High(Mobs)), 'MobName');
          DeleteKey('Mobs' + IntToStr(High(Mobs)), 'MobType');
        end;
    end;
  FreeAndNil(iniFile);
end;

procedure TForm1.FormCreate(Sender: TObject);
var
  iniFile : TIniFile;
  i, MobsCount : Integer;
begin
  iniFile := TIniFile.Create(Script.Path.StealthPath + iniName);
  try
    With iniFile do
      begin
        MobsCount := ReadInteger('General', 'MobsCount', 0);
        SetLength(Mobs, MobsCount);
        if MobsCount > 0 then
          for i := 0 to MobsCount-1 do
            begin
              Mobs[i].Name := ReadString('Mobs' + IntToStr(i), 'MobName', 'No Name');
              Mobs[i]._Type := ReadInteger('Mobs' + IntToStr(i), 'MobType', -1);
              Memo1.Lines.Add(IntToStr(i+1) + '. ' + Mobs[i].Name + '; Type: ' +
                  IntToStr(Mobs[i]._Type));
            end;
      end;
  finally
    FreeAndNil(iniFile);
  end;
end;

end.
https://www.dropbox.com/s/em7gj4r33ksvbkn/MobFarm.rar ссылка на скомпиленный проект.

Как пользоваться:
Открываем екзешник, через кнопку добавляем всяких животных, которых хотим фармить. Добавили - закрываем екзешник. ВНИМАНИЕ!!! Данные для скрипта изменятся только после того как вы закроете екзешник(Событие на ОнКлоуз).
Далее запускаем скрипт как любой другой, он прочтет данные из инифайла который будет сформирован в момент закрытия екзешника. По тем данным которые будут в памяти он зафармит всех!
Если вы хотите очистить какой либо тип, нажимайте на кнопку удалить нижнее - но, данные не изменяться для скрипта пока вы не закроете екзешник.

Всем удачи!

З.Ы. Тестил его на ламах у вендора, убил пару штук полутал! Может задержки надо увеличить... Вообщем пилите под себя, или давайте пилить вместе.
Hornet2015
Neophyte
Neophyte
Posts: 10
Joined: 16.11.2015 20:22

Re: Авто фарм слабых мобов.

Post by Hornet2015 »

Спасибо ... добавил процедур и использую для фарма. Единственное что лутитнг раьотает не очень корректно ... т.е. он убивает всех мобов и лутит только последнего ...
drabadan
Expert
Expert
Posts: 730
Joined: 13.12.2012 17:35
Contact:

Re: Авто фарм слабых мобов.

Post by drabadan »

Hornet2015 wrote:Спасибо ... добавил процедур и использую для фарма. Единственное что лутитнг раьотает не очень корректно ... т.е. он убивает всех мобов и лутит только последнего ...
в планах переиздать етот скрипт на коммерческой основе, допишу его правильно и выставлю демку.
Post Reply