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

AutoCamping

тут можно задать вопрос по скриптингу
Post Reply
Verana
Novice
Novice
Posts: 60
Joined: 26.06.2015 18:44

AutoCamping

Post by Verana »

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


1) вариант с тайлами в скрипте не очень очевидный, у меня есть скрипт на ламбер там тайлы отдельным файлом и это по моему намного удобнее, можно было бы по тем же деревьям и этот скрипт запустить но не знаю как это реализовать и не испортить скрипт...
2) лучше было бы исправить "for i:= 0 to 5 do //надо бы парсить журнал... но просто 5 раз будем ковырять дерево.
3) если все это сложно и муторно и никто не хочет с этим разбираться, то может хотя бы поможете выделить те части скрипта которые отвечают за то чтоб ковырять даггером в деревьях и разжигать огонь, скидывая себе под ноги, может получится их прикрутить к моему ламберу чтоб ходил по тайлам...

Code: Select all

//Рядом с бритом берете координаты где-нибудь в деревьях. Записываете, затем ставите в стелсе и забываете про перса надолго =)

//Сейчас стоят координаты на которых качался я. Т.е. скрипт протестен и работоспособен на все 130% =)

//p.s. болит голова, очень в связи с этим рассеян, так что если что не так - говорите =)
// Для тех кто в танке:
//ничего в пак класть не надо, кроме своего нубского кинжала.
//перс топает до точки рубки, ищет деревья, режет 30 раз каждый ствол, киндлы кидает на пол и жжет пока все не сожжет, затем топает к следующему стволу.
//если сдох - ждет 20 секунд, ресается, ждет еще 10 секунд и затем топает на место рубки снова. 

Program camping;

/// Настройки ///
const
RadiusX=10;
RadiusY=10;
Axe=$0F51;//кинжал
StartXY=true;
StartX=1712;// Обязательно заполните эти значения
StartY=2941;// .where вам в помощь
////////////////////
//Wend, ICQ 492280//
//v. 1.1
//Remake of lumber script by Rabies


type
TreeRecord = Record
  t,x,y: integer;
  end;

var
TreeTile: array[0..50] of integer;
TreePlace: array[0..500] of TreeRecord;
TreeCount: integer;
x,y,c,a,s: integer;


procedure CheckCon;
begin
if Connected=False then
  begin;
   repeat
    Wait(1000);
   until Connected=True;
   Wait(5000);
  end;
end;

function CheckTool: boolean;
begin
CheckCon;
FindType(Axe, backpack);
  if (dead=false) and (FindCount = 0) and (ObjAtLayer(LHandLayer) = 0) then
   begin
    AddToSystemJournal('Нет кинжала');//что было бы странно впрочем
    s:=0;
    result:=false;
   end
  else
    result:=true;      
end;


procedure CheckTree;
var
LCount: integer;
t,i: integer;
TTile: TStaticCell;

begin
TTile:=ReadStaticsXY(x, y, worldnum);
LCount:=GetLayerCount(x, y, worldnum);
i:=0;
  while i < LCount do
   begin
    for t:=0 to 16 do   // количество тайлов деревьев
     begin
      if TTile.Statics[i].Tile=TreeTile[t] then
       begin
        TreePlace[c].t:=TTile.Statics[i].Tile;
        TreePlace[c].x:=x;
        TreePlace[c].y:=y;
        c:=c+1;
       end;
     end;
    i:=i+1;
   end;  
end;


procedure FindTree;
begin
for x:=GetX(self)-RadiusX to GetX(self)+RadiusX do
  if x mod 2 = 0 then
   begin
    for y:=GetY(self)-RadiusY to GetY(self)+RadiusY do
     CheckTree;
   end
  else
   begin
    for y:=GetY(self)+RadiusY downto GetY(self)-RadiusY do
     CheckTree;
   end;  
TreeCount:=c-1;
end;  


procedure DropKindle;
begin
wait(500);
FindType($0DE1,Backpack);
if FindCount > 0 then Drophere(finditem);  
end;

procedure BurnKindle;
begin
wait(500);
FindType($0DE1,Ground);
while (FindCount > 0) and (not Dead) do 
begin
  FindType($0DE1,Ground);
  if FindCount > 0 then     
    begin 
     useobject(finditem); 
     wait(500); 
    end;
end;
end;

  
procedure Lumber;
var
t: TDateTime;
i:integer;

begin
for a:=0 to TreeCount do
  begin
   CheckCon;
   t:=now;
   MoveXY(TreePlace[a].x, TreePlace[a].y, true, 1, false);
   if ObjAtLayer(LHandLayer) = 0 then
    Wait(2000);  
   if (CheckTool=true) and (Dead=false) then
    begin
     for i:= 0 to 5 do //надо бы парсить журнал, но мне в лом =) так что просто 5 раз будем ковырять дерево.
      begin
       WaitTargetTile(TreePlace[a].t, TreePlace[a].x, TreePlace[a].y, 0);
       UseType(Axe, $FFFF);
       wait(500);
      end;
     DropKindle;
     BurnKindle; 
    end
   else break;    
  end;
end;


begin
c:=0;
s:=1;
TreeTile[0]:=3446;
TreeTile[1]:=3305;
TreeTile[2]:=3230;
TreeTile[3]:=3305;
TreeTile[4]:=3453;
TreeTile[5]:=3230;
TreeTile[6]:=3453;
TreeTile[7]:=3424;
TreeTile[8]:=3409;
TreeTile[9]:=3223;
TreeTile[10]:=3465;
TreeTile[11]:=3446;
TreeTile[12]:=3402;
TreeTile[13]:=3409;
TreeTile[14]:=3430;
TreeTile[15]:=3409;
TreeTile[16]:=3402;  

CheckCon;

if StartXY=true then
  MoveXY(StartX, StartY, true, 0, false);

FindTree;
AddToSystemJournal('Найдено деревьев: '+IntToStr(TreeCount));

while (s=1) and (CheckTool=true) do
begin
  if StartXY=true then if Dead then 
   begin
    wait(20000); 
    uosay('.rescue');
    wait(10000);
    if (not Dead) then MoveXY(StartX, StartY, true, 0, false);
   end;
  Lumber;
end;
SetARStatus(false);
Disconnect;
  
end.
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Re: AutoCamping

Post by Vizit0r »

1) почему не очевидный?
2) исправить на что?
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
Verana
Novice
Novice
Posts: 60
Joined: 26.06.2015 18:44

Re: AutoCamping

Post by Verana »

1)С таким прасположением тайлов, возникает ошибка, чар иногда застревает на двух деревях и ходит только по ним, тут координаты "X" просит указать если не ошибаюсь, и точку откуда он будет видеть все деревя которые указаны по тайлам, то есть работает с деревьями которые растут на определенном растоянии от точки старта скрипта... мой скрипт на ламбер работает куда удобнее ходит по всей карте если только деревья указаны, да отдельный файл с тайлами редактировать проще, у меня несколько лесорубов и соответственно таилы заготовлены, можно быстро сменить место дислокации если вдруг кто то будет мешать в прокачке, нужно будет лишь адрес файла с новыми тайлами указать и перебить координаты старта скрипта... (В идеале конечно автопоиск деревьев и чтоб запоминал деревья с которыми работал в течении определенного времени назад)
2) К примеру если он будет сразу идити к новому дереву как только появится вот это сообщение в журнале "There`s not enough kindling here.", а сейчас он немного тупит.
3) К стати трекинг тоже можно параллельно качать при разведении огня. будет очень удобный скрипт, запустил на несколько дней и забыл про чара.
Antoska
Neophyte
Neophyte
Posts: 45
Joined: 10.07.2009 22:21
Location: Латвия, Рига

Re: AutoCamping

Post by Antoska »

А как переделать этот скрипт, что бы он не статичные тайлы искал, а просто определенные типы на земле?
Скажем те же тайлы деревьев, но не в статике?
Antoska
Neophyte
Neophyte
Posts: 45
Joined: 10.07.2009 22:21
Location: Латвия, Рига

Re: AutoCamping

Post by Antoska »

А как переделать этот скрипт, что бы он не статичные тайлы искал, а просто определенные типы на земле?
Скажем те же тайлы деревьев, но не в статике?
Antoska
Neophyte
Neophyte
Posts: 45
Joined: 10.07.2009 22:21
Location: Латвия, Рига

Re: AutoCamping

Post by Antoska »

Ап
Antoska
Neophyte
Neophyte
Posts: 45
Joined: 10.07.2009 22:21
Location: Латвия, Рига

Re: AutoCamping

Post by Antoska »

А как переделать этот скрипт, что бы он не статичные тайлы искал, а просто определенные типы на земле?
Скажем те же тайлы деревьев, но не в статике?
Macks
Apprentice
Apprentice
Posts: 250
Joined: 27.02.2006 22:23
Location: АоП - Age Of Power

Re: AutoCamping

Post by Macks »

Antoska wrote:А как переделать этот скрипт, что бы он не статичные тайлы искал, а просто определенные типы на земле?
Скажем те же тайлы деревьев, но не в статике?
Ни как.

Это другой скрипт.
Antoska
Neophyte
Neophyte
Posts: 45
Joined: 10.07.2009 22:21
Location: Латвия, Рига

Re: AutoCamping

Post by Antoska »

Я понял что другой. Вопрос как организовать поиск предметов по типу?
Macks
Apprentice
Apprentice
Posts: 250
Joined: 27.02.2006 22:23
Location: АоП - Age Of Power

Re: AutoCamping

Post by Macks »

Antoska wrote:Я понял что другой. Вопрос как организовать поиск предметов по типу?
http://stealth.od.ua/Doc:RU/Manual/Refe ... h#FindType

function FindType(ObjType: Word; Container: Cardinal) : Cardinal

Code: Select all

Ищет обьект указанного типа ObjType в указанном контейнере Container.

НЕ ищет в подсумках (контейнерах внутри заданного контейнера). Для такого поиска есть Doc:RU/Api/FindTypeEx

Фактически, Findtype = FindTypeEx(ObjType,$FFFF,Container,false);

Если обьект удовлетворяет всем условиям, то перед внесением в FindedList проверяется его наличие в IgnoreList. Если там он есть - значит отбор не проходит. Подробнее смотреть Doc:RU/Api/Ignore

Результаты поиска:

    список найденных обьектов заносится в FindedList, который можно получить, ипользуя функцию Doc:RU/Api/GetFindedList
    Последний найденный обьект заносится в Doc:RU/Api/FindItem
    Последний найденный обьект возвращается резутатом выполнения ЭТОЙ функции
    В Doc:RU/Api/FindCount заносится кол-во найденных айтемов (стопка из нескольких "стекированных" айтемов считается как один айтем!)
    В Doc:RU/Api/FindQuantity заносится кол-во айтемов в стеке (стопке), если последний айтем является стеком (стопкой)
    В Doc:RU/Api/FindFullQuantity заносится общее кол-во айтемов во всех найденых стопках (если таких в результатах нет, то будет равно Doc:RU/Api/FindCount 


На дальность поиска влияет:

    Doc:RU/Api/FindDistance - задает дальность поиска по горизонтали в клетках. 3 - значит будет искать под собой и в радиусе трех клеток. По умолчанию имеет значение 2 (принято за умолчание на большинстве серверов как максимальная дальность, с которой обычный игрок при обычных условиях может поднять или положить вещь)
    Doc:RU/Api/FindVertical - задает дальность поиска по вертикали. По умолчанию принято 5, чтобы не задевать соседние этажи при поиске. 


В случае, если ничего не найдено - вернет 0.

В качестве параметра Container можно использовать:

    Doc:RU/Api/BackPack
    Doc:RU/Api/Ground
    $FFFFFFFF ( = -1)
    ID нужного контейнера. 

Если указан ID несуществующего контейнера, то поиск производится в рюкзаке чара

Пример 1:

if FindType(bottle_type,Ground) > 0 then
begin
  UseObject(FindItem);
end;

Пример 2:

  FindType(runes,backpack);
  AddAddToSystemJournal('Runes found: ' + IntToStr(FindCount));
Post Reply