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

Mining Мининг с автопоиском рудных мест

Only working scripts
Post Reply
shinma
Expert
Expert
Posts: 505
Joined: 28.04.2011 12:05

Mining Мининг с автопоиском рудных мест

Post by shinma »

Такс с чего начать. уже не раз сталкивался с скриптами где игрок зачем-то работает по координатам собранным инжектом в текстовый документ, или просто скрипт аля UOPILOT forever где идет обкопка вокруг себя. к стати кто не вкурсе в новом пилоте вы можете чара так от шахты до дома довести и разгрузить руду. не обязательно для этого использовать стелс. это похоже на сброс атомной бомбы чтоб убить муравья.
Так вот о чем это я предлагаю на всеобщее обозрение метод как чар может сам искать себе где будет копать. Его надо просто довести до шахты или до любой скалы и он сам может копать. в общем идею закинул, дальше думайте.
Все упрощено до предела, так что до полноценного мининга вам придется поработать головой, но скрипт работает.

Code: Select all

program Mining_shinma_DemoVersion;
{$Include 'all.inc'}
type
 region= record
  minX:word;
  minY:word;
  maxX:word;
  maxY:word;
 end;
var
 MinTile:array [0..2] of word;
 start_p: TFoundTile;
 i,j:word;
 RegArr: array [0..0] of region;
 sum:word;
 arr_sum:word;
 rs:word;
 tfta:TFoundTilesArray;
 k:word;
 temp:TFoundTilesArray;
res_arr:TFoundTilesArray;
 
 procedure init;
 begin
 start_p.X:=GetX(Self); 
 start_p.Y:=GetY(Self); 
 MinTile[0]:=236; 
 MinTile[1]:=0; 
 MinTile[2]:=0; 
 RegArr[0].minX:=start_p.X-10;
 RegArr[0].minY:=start_p.Y-10;
 RegArr[0].maxX:=start_p.X+10;
 RegArr[0].maxY:=start_p.Y+10;
end;
procedure cancel;
begin
CloseMenu;
CancelMenu; 
If TargetPresent Then CancelTarget; 
end;
procedure check_war;
begin
if IsWarMode(self) then
 begin
  setWarMode(false);
 end;
end;  
procedure Wait_Target(time_ms:Cardinal);
var
 TempTime,SumTime:Cardinal;
begin		
 SumTime:=0;
 repeat
  checksave;
  wait(500);
  TempTime:=Timer;
  SumTime:=SumTime+(Timer-TempTime);
 until ((targetpresent) or (dead) or (not connected) or (SumTime>time_ms));
end;
function sqr(a:LongInt):LongInt;
begin
 result:=a*a;
end;
function vector_length(c_1,c_2:TFoundTile):LongInt;
begin
 result:=Round(sqrt(sqr(c_1.X-c_2.X)+sqr(c_1.Y-c_2.Y)));
end;
procedure QuickSort(var item:TFoundTilesArray; count:integer; point:TFoundTile);
var
 temp_index,temp_value, tempo,i,j:LongInt;
 t_c:TFoundTile;
begin
 t_c:=point;
 temp_index:=0;
 temp_value:=vector_length(t_c,item[temp_index]);
 for i:=0 to count-2 do
 begin
  for j:=i to count-1 do
   begin
    tempo:=vector_length(t_c,item[j]);
    if tempo<temp_value then
     begin
      temp_index:=j;
      temp_value:=tempo;
     end;
   end;
   t_c:=item[temp_index];
   item[temp_index]:=item[i];
   item[i]:=t_c;
   temp_value:=vector_length(item[i],item[i+1]);
 end;
 i:=0;
end; 
procedure poisk_ore;
begin
  SetArStatus(true);
  init;
  sum:=0;  
  arr_sum:=0;
  rs:=0;
  j:=0 ;
   for i:=0 to 0 do
    begin
     rs:=GetLandTilesArray(RegArr[j].minX,RegArr[j].minY,RegArr[j].maxX,RegArr[j].maxY,1,MinTile[i],tfta);
     if rs>0 then
      for k:=0 to rs-1 do temp[arr_sum+k]:=tfta[k];
     arr_sum:=arr_sum+rs;
    end;
   QuickSort(temp,arr_sum,start_p);
   for k:=0 to arr_sum-1 do res_arr[sum+k]:=temp[k];
   sum:=sum+arr_sum; 
end;
Procedure DoitBaby(f_tile:TFoundTile);
var
ctime : TDateTime;
begin
AddToSystemJournal('146');
cancel;
UseObject(ObjAtLayer(rhandLayer)); 
Wait_Target(5000);      
TargetToTile(f_tile.Tile,f_tile.X,f_tile.Y,f_tile.Z);
ctime := Now;
  repeat
   wait(2000);
   checksave;
   check_war;
  until  (InJournalBetweenTimes('Вы переместили|There is nothing|You loosen', ctime, Now)>= 0)or dead;
end;
begin
poisk_ore;
j:=sum-1;
i:=0;
while (i<j)and(Not Dead) do
begin;
NewMoveXY(res_arr[i].X,res_arr[i].Y,false,1,false);
DoitBaby(res_arr[i]);
i:=i+1;
end;
end.
--->>>ПОИСК ПО ФОРУМУ, НАЧНИ С НЕГО!!!<<<---
--->>>Search the forum, start with him!!!<<<---
95% Ваших вопросов уже кем-то написаны и решены.
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Re: Mining Мининг с автопоиском рудных мест

Post by Vizit0r »

shinma wrote:к стати кто не вкурсе в новом пилоте вы можете чара так от шахты до дома довести и разгрузить руду. не обязательно для этого использовать стелс. это похоже на сброс атомной бомбы чтоб убить муравья.
я вот чего-то не понимаю. неужели интересно изучать язык пилота (хоть и простой, но все же), чтобы писать на нем скрипты, держать при этом 1-2 клиента (потому что они жрут дочерта памяти и проца), чтобы потом со временем все равно прийти к стелсу?

так что же в таком случае " сброс атомной бомбы чтоб убить муравья" ?

P.S. Это не пропаганда стелса, я действительно не понимаю.
В свое время, когда я узнал стелс - я был искренне рад, что есть такая прога, которая позволить мне уйти от клиентов, которых больше 2х не получалось запустить. непонимаю, зачем намеренно к нему возвращаться для макроса.
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
shinma
Expert
Expert
Posts: 505
Joined: 28.04.2011 12:05

Re: Mining Мининг с автопоиском рудных мест

Post by shinma »

потому что на нем просто писать макросы и он годится не только для уо а.... например для линейки я на нем в 6 персонажей РБ валил.
если уж я на пеньке 533 с 256МБ рам запускал два окна УО то щас жаловаться на нехватку ресурсов смешно. А писать на стелсе макросы аля пилот ахррр прям злиться начинаю когда вижу код под пилотку написаный на стелсе. это же кощунство какое-то такую зверь программу юзать для создания тупого кода.
--->>>ПОИСК ПО ФОРУМУ, НАЧНИ С НЕГО!!!<<<---
--->>>Search the forum, start with him!!!<<<---
95% Ваших вопросов уже кем-то написаны и решены.
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Re: Mining Мининг с автопоиском рудных мест

Post by Vizit0r »

я незнаю, у кого там какие клиенты, но у меня как жрал по 70-80% проца раньше, так и жрет сейчас на двухядернике (только уже 70-80 не проца, а ядра).
да, я слышал про патченые клиенты - их аж целых 2 штуки. все.

ладно, оффтопик заканчиваю на этом.
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
tyca7
Posts: 6
Joined: 21.02.2014 12:34

Re: Mining Мининг с автопоиском рудных мест

Post by tyca7 »

поделитесь есть нормальная версия под 2,0,3 клиент чтоб ходил и обкапывал скалы..
myownstyle
Neophyte
Neophyte
Posts: 31
Joined: 28.12.2009 9:56

Re: Mining Мининг с автопоиском рудных мест

Post by myownstyle »

Под 6.5.2 версиой выдает ошыбку Exec: [Error] (D:\stealth\Scripts\Debug\Testing_mining.sc at 110:29): Out Of Range

procedure poisk_ore;
begin
SetArStatus(true);
init;
sum:=0;
arr_sum:=0;
rs:=0;
j:=0 ;
for i:=0 to 0 do
begin
rs:=GetLandTilesArray(RegArr[j].minX,RegArr[j].minY,RegArr[j].maxX,RegArr[j].maxY,1,MinTile,tfta);
if rs>0 then
for k:=0 to rs-1 do temp[arr_sum+k]:=tfta[k];
arr_sum:=arr_sum+rs;
end;
QuickSort(temp,arr_sum,start_p);
for k:=0 to arr_sum-1 do res_arr[sum+k]:=temp[k];
sum:=sum+arr_sum;
end;
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Re: Mining Мининг с автопоиском рудных мест

Post by Vizit0r »

ты выходишь за заданный диапазон в массиве res_arr[sum+k].
Тот же баг можешь получить в temp[arr_sum+k].

Как по мне - индекс массива слишком сложно выставляется, потому и неочевидно когда выходишь за диапазон.
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
fredydead
Posts: 3
Joined: 11.01.2010 12:14
Contact:

Re: Mining Мининг с автопоиском рудных мест

Post by fredydead »

Чёткий скрипт. Правда немного пришлось подправить.
Post Reply