Jump to content

Lineage 2


lamber


  • You cannot reply to this topic
19 replies to this topic

#1
Param Pam Pam

Param Pam Pam

    Путешественник

  • Пользователи
  • PipPip
  • 19 posts

помогите с ламбером на сталс 4.3.6 сколько не искал на сайте не 1 не подходит или скиньте стелс 3.9.8


Edited by Param Pam Pam, 16 February 2013 - 04:41 PM.


#2
Param Pam Pam

Param Pam Pam

    Путешественник

  • Пользователи
  • PipPip
  • 19 posts

Program Lumber;

/// Настройки ///
const
RadiusX=3;
RadiusY=3;
Axe=$23A2;
////////////////////
//Wend, ICQ 492280//
//v. 1.3


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

var
TreeTile: array[0..50] of integer;
TreePlace: array[0..500] of TreeRecord;
TreeCount: integer;
s: boolean;
x,y,c,a,len,i: 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 (not dead) and (FindCount = 0) and (ObjAtLayer(LHandLayer) = 0) then
begin
AddToSystemJournal('Нет топора');
s:=false;
result:=false;
end
else
result:=true;
end;


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

begin
TTile:=ReadStaticsXY(x, y, WorldNum);
LCount:=GetLayerCount(x, y, WorldNum);
for i:=0 to LCount-1 do
begin
for t:=0 to len-1 do
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;
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 Lumber;
var
t: TDateTime;

begin
for a:=0 to TreeCount do
begin
if not Dead and CheckTool then
repeat
CheckCon;
MoveXY(TreePlace[a].x, TreePlace[a].y, true, 1, false);
if TargetPresent then CancelTarget;
t:=now;
WaitTargetTile(TreePlace[a].t, TreePlace[a].x, TreePlace[a].y, 1);
UseType(Axe, $23A2);
WaitJournalLine(t, 'stop lumberjacking|any wood', 120000);
until (InJournalBetweenTimes('no wood|any wood', t, now) > 0) or Dead
else break;
end;
end;


begin
SetPauseScriptOnDisconnectStatus(false);

s:=true;
TreeTile[0]:=3240;
TreeTile[1]:=3242;
TreeTile[2]:=3277;
TreeTile[3]:=3283;
TreeTile[4]:=3286;
TreeTile[5]:=3288;
TreeTile[6]:=3289;
TreeTile[7]:=3290;
TreeTile[8]:=3291;
TreeTile[9]:=3294;
TreeTile[10]:=3296;
TreeTile[11]:=3299;
TreeTile[12]:=3302;
TreeTile[13]:=3393;
TreeTile[14]:=3394;
TreeTile[15]:=3395;
TreeTile[16]:=3396;
TreeTile[17]:=3415;
TreeTile[18]:=3416;
TreeTile[19]:=3417;
TreeTile[20]:=3418;
TreeTile[21]:=3419;
TreeTile[22]:=3438;
TreeTile[23]:=3439;
TreeTile[24]:=3440;
TreeTile[25]:=3441;
TreeTile[26]:=3442;
TreeTile[27]:=3460;
TreeTile[28]:=3461;
TreeTile[29]:=3462;
TreeTile[30]:=3480;
TreeTile[31]:=3482;
TreeTile[32]:=3488;

for i:=0 to Length(TreeTile)-1 do
if TreeTile[i] <> 0 then
len:=len+1;

CheckCon;

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

while (not Dead) and s and CheckTool do
Lumber;

SetARStatus(false);
Disconnect;

end.

а вот этот выдает ошибку вот эту 

19:41:30:627 [Addidas]: Compiling
19:41:30:659 [Addidas]: Compiled succesfully
19:41:30:686 [Addidas]: Найдено деревьев: 20
19:41:30:915 [Addidas]: UseType error: Object not found.
19:41:35:677 [Addidas]: UseType error: Object not found.



#3
and1

and1

    Вождь Зулу

  • Пользователи
  • PipPipPipPipPipPipPip
  • 582 posts

UseType(Axe, $23A2);



#4
Param Pam Pam

Param Pam Pam

    Путешественник

  • Пользователи
  • PipPip
  • 19 posts

да и че там надо написать было че за обект ?



#5
PussyMiLove

PussyMiLove

    Охотник на Драконов

  • Пользователи
  • PipPipPipPipPip
  • 154 posts

4 крафт 75 ламбера)))) ахахахах я даже хз как включить етот скррипт_))) блин))) не инджект не выходит не стелс хахаах подгоните логов избавте меня от муков ))



#6
Nebulous

Nebulous

    Путешественник

  • Пользователи
  • PipPip
  • 20 posts
Program Lumber;
 
/// Настройки ///
const
RadiusX=13;
RadiusY=13;
Axe=$0F43;
////////////////////
//Wend, ICQ 492280//
//v. 1.3
 
 
type
TreeRecord = Record
t,x,y: integer;
end;
 
var
TreeTile: array[0..50] of integer;
TreePlace: array[0..500] of TreeRecord;
TreeCount: integer;
s: boolean;
x,y,c,a,len,i: 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 (not dead) and (FindCount = 0) and (ObjAtLayer(LHandLayer) = 0) then
begin
AddToSystemJournal('Нет топора');
s:=false;
result:=false;
end
else
result:=true;
end;
 
 
procedure CheckTree;
var
LCount: integer;
t: integer;
TTile: TStaticCell;
 
begin
TTile:=ReadStaticsXY(x, y, WorldNum);
LCount:=GetLayerCount(x, y, WorldNum);
for i:=0 to LCount-1 do
begin
for t:=0 to len-1 do
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;
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 Lumber;
var
t: TDateTime;
 
begin
for a:=0 to TreeCount do
begin
if not Dead and CheckTool then
repeat
CheckCon;
MoveXY(TreePlace[a].x, TreePlace[a].y, true, 1, false);
if TargetPresent then CancelTarget;
t:=now;
WaitTargetTile(TreePlace[a].t, TreePlace[a].x, TreePlace[a].y, 1);
UseType(Axe, $0F43);
WaitJournalLine(t, 'stop lumberjacking|any wood', 120000);
until (InJournalBetweenTimes('no wood|any wood', t, now) > 0) or Dead
else break;
end;
end;
 
 
begin
SetPauseScriptOnDisconnectStatus(false);
 
s:=true;
TreeTile[0]:=3240;
TreeTile[1]:=3242;
TreeTile[2]:=3277;
TreeTile[3]:=3283;
TreeTile[4]:=3286;
TreeTile[5]:=3288;
TreeTile[6]:=3289;
TreeTile[7]:=3290;
TreeTile[8]:=3291;
TreeTile[9]:=3294;
TreeTile[10]:=3296;
TreeTile[11]:=3299;
TreeTile[12]:=3302;
TreeTile[13]:=3393;
TreeTile[14]:=3394;
TreeTile[15]:=3395;
TreeTile[16]:=3396;
TreeTile[17]:=3415;
TreeTile[18]:=3416;
TreeTile[19]:=3417;
TreeTile[20]:=3418;
TreeTile[21]:=3419;
TreeTile[22]:=3438;
TreeTile[23]:=3439;
TreeTile[24]:=3440;
TreeTile[25]:=3441;
TreeTile[26]:=3442;
TreeTile[27]:=3460;
TreeTile[28]:=3461;
TreeTile[29]:=3462;
TreeTile[30]:=3480;
TreeTile[31]:=3482;
TreeTile[32]:=3488;
 
for i:=0 to Length(TreeTile)-1 do
if TreeTile[i] <> 0 then
len:=len+1;
 
CheckCon;
 
FindTree;
AddToSystemJournal('Найдено деревьев: '+IntToStr(TreeCount));
 
while (not Dead) and s and CheckTool do
Lumber;
 
SetARStatus(false);
Disconnect;
 
end.
 
 
 
 
В чем же проблема этого скрипта?Подскажите пожалуйста!

16:24:10:275 [Nebulous]: Найдено деревьев: 25
16:24:11:884 [Nebulous]: UseType error: Object not found.
16:25:47:540 [Nebulous]: UseType error: Object not found.

Edited by Nebulous, 27 February 2013 - 05:29 PM.


#7
smitan

smitan

    Охотник на Драконов

  • Пользователи
  • PipPipPipPipPip
  • 207 posts
  • Location:Череповец Nord-West to RUSSIA

ты в лесу рубишь ???



#8
Nebulous

Nebulous

    Путешественник

  • Пользователи
  • PipPip
  • 20 posts

нет в городе!а есть разница?



#9
UnreaL

UnreaL

    Охотник на Драконов

  • Пользователи
  • PipPipPipPipPip
  • 244 posts
  • Location:SPB
  • Interests:q3

в городе запрещено



#10
Nebulous

Nebulous

    Путешественник

  • Пользователи
  • PipPip
  • 20 posts

за городом тоже не работает!



#11
UnreaL

UnreaL

    Охотник на Драконов

  • Пользователи
  • PipPipPipPipPip
  • 244 posts
  • Location:SPB
  • Interests:q3

а я не говорил что в городе не рубит, я говорил что запрещено)

может тип топора неправильно прописан или отличается от тех что есть у тебя?



#12
Nebulous

Nebulous

    Путешественник

  • Пользователи
  • PipPip
  • 20 posts

Так что поможет кто-то или нет?



#13
Param Pam Pam

Param Pam Pam

    Путешественник

  • Пользователи
  • PipPip
  • 19 posts

видать нет  :ph34r:



#14
roxer

roxer

    Охотник на Драконов

  • Пользователи
  • PipPipPipPipPip
  • 203 posts

Видно по ошибке, что это в UseType строке.Как она прописана у тебя?



#15
achtung

achtung

    Samsung Galaxy Tab2 Winner

  • Пользователи
  • PipPip
  • 33 posts

Program AutoLumber_SW;

{$Include 'all.inc'}

const
  /////////////////////////////////////////////////
  // Обязательные к изменению настройки скрипта  //
  Sunduk = $667FA40F;                            //
  //                                             //
  // Координаты точки перед сундуком             //
  xTileSunduk = 137;                            //
  yTileSunduk = 1470;                            //
  //                                             //
  /////////////////////////////////////////////////
 
  // Возможные к изменению настройки скрипта                                 
  MyMaxWeight = 350;  // Максимальный вес
  Hatchet1 = $0F43;   // Тип топора1
  Hatchet2 = $0F48;   // Тип топора2 (перевёрнутый)
 
  // Размерности массивов
  iTTileCount = 39;   // Типы тайлов деревьев (менять, только при редактировании массива)
  iCTileCount = 4;    // Кол-во точек (центров поляны), в которых хотим собирать информацию о деревьях (поляна = 30х30 тайлов)

  // Журнал
  Msg1 = 'переместили';
  Msg2 = 'That is too far away';
  Msg3 = 'hack';
  Msg4 = 'You decide not to chop wood';
  Msg5 = 'no wood here to chop...';
  Msg6 = 'appears immune';
  Msg7 = 'Try chopping';
  Msg8 = 'reach this';
   
  // Прочее
  RunSpeed = 250;
  iRadiusSearch = 20; // Радиус (не диаметр!) поиска деревьев в тайлах, относительно персонажа
  Logs = $1BDD;       // Тип логов
  WoodType = $0F90;   // Тип дедвудов
   
type
  ChopTile = Record
    x, y : Integer;
  end;
   
var
  Regs : array [1..3] of Cardinal;
  FoundTilesArray : TFoundTilesArray;
  TempFoundTilesArray, ChopTilesArray : array of TFoundTile;
  TreeTile:array [0..iTTileCount] of word;
  ChopTiles : array[1..iCTileCount] of ChopTile;
  ctime : TDateTime;
  i : Integer;
 
// Инициализация массива типов тайлов деревьев
procedure InitTTilesArray;
  begin
   
   TreeTile[0]:=3274;
   TreeTile[1]:=3275;
   TreeTile[2]:=3277;
   TreeTile[3]:=3280;

   
   TreeTile[4]:=3283;
   TreeTile[5]:=3286;
   TreeTile[6]:=3288;
   TreeTile[7]:=3290;
   
         
   TreeTile[8]:=3293;
   TreeTile[9]:=3296;
   TreeTile[10]:=3299;
   TreeTile[11]:=3302;
 
    
   TreeTile[12]:=3320;
   TreeTile[13]:=3323;
   TreeTile[14]:=3326;
   TreeTile[15]:=3329;
   
    
   TreeTile[16]:=3393;
   TreeTile[17]:=3394;
   TreeTile[18]:=3395;
   TreeTile[19]:=3396;
   
      
   TreeTile[20]:=3415;
   TreeTile[21]:=3416;
   TreeTile[22]:=3417;
   TreeTile[23]:=3418;
   
      
   TreeTile[24]:=3419;
   TreeTile[25]:=3438;
   TreeTile[26]:=3439;
   TreeTile[27]:=3440;
   
   
   TreeTile[28]:=3441;
   TreeTile[29]:=3442;
   TreeTile[30]:=3460;
   TreeTile[31]:=3461;
   
   
   TreeTile[32]:=3462;
   TreeTile[33]:=3476;
   TreeTile[34]:=3478;
   TreeTile[35]:=3480;
   
      
   TreeTile[36]:=3482;
   TreeTile[37]:=3484;
   TreeTile[38]:=3492;
   TreeTile[39]:=3496;
  end;

// Инициализация массива координат для поиска деревьев
procedure InitCTilesArray;
  begin
    ChopTiles[1].x := 2390;  // Координаты первой точки, на которую идем и ищем деревья
    ChopTiles[1].y := 3081;
   
    ChopTiles[2].x := 2357;  // Координаты второй точки, на которую идем и ищем деревья
    ChopTiles[2].y := 3044;
   
    ChopTiles[3].x := 2331;  // Координаты третьей точки, на которую идем и ищем деревья
    ChopTiles[3].y := 3096;
   
    ChopTiles[4].x := 2369;  // Координаты третьей точки, на которую идем и ищем деревья
    ChopTiles[4].y := 3120;
  end;

// Инициализация системных переменных
procedure InitSystem;
  begin
    SetRunUnmountTimer(RunSpeed);
    SetArrayLength(ChopTilesArray, 1);
  end;

// Инициализация регов
procedure InitReg;
  begin
    Regs[1] := $0F85;      // Ginseng
    Regs[2] := $0F88;      // Nightshade
    Regs[3] := $0F86;      // Mandrake Roots
  end;
 
// Поиск деревьев
procedure SearchTree;
  var
  i, j : Integer;
  iFoundTilesArrayCount : word;
  iTempFoundTilesArrayCount : Integer;
 
  begin
    for i:= 0 to iTTileCount do
      begin
        iFoundTilesArrayCount := GetStaticTilesArray((GetX(Self) - iRadiusSearch), (GetY(Self) - iRadiusSearch), (GetX(Self) + iRadiusSearch), (GetY(Self) + iRadiusSearch), 1, TreeTile[i], FoundTilesArray);
        if iFoundTilesArrayCount > 0 then
          begin
            SetArrayLength(TempFoundTilesArray, Length(TempFoundTilesArray) + iFoundTilesArrayCount);
            for j := 0 to iFoundTilesArrayCount - 1 do
              begin           
                TempFoundTilesArray[iTempFoundTilesArrayCount + j] := FoundTilesArray[j];
              end;
            iTempFoundTilesArrayCount := iTempFoundTilesArrayCount + iFoundTilesArrayCount;
          end;
      end;
    AddToSystemJournal('Найдено деревьев: ' + IntToStr(iTempFoundTilesArrayCount));     
  end;

// Чистим записи дубликаты (Vizit0r :P)
procedure ClearDuplicate;
  var
  i, j : Integer;
 
  begin
    ChopTilesArray[Length(ChopTilesArray) - 1] := TempFoundTilesArray[0];
    for i:=1 to Length(TempFoundTilesArray) - 1 do
      begin
        for j:=0 to Length(ChopTilesArray) - 1 do
          if (ChopTilesArray[j] = TempFoundTilesArray[i]) then
            break;
        if j > Length(ChopTilesArray) - 1 then
          begin
            SetArrayLength(ChopTilesArray, Length(ChopTilesArray) + 1);
            ChopTilesArray[Length(ChopTilesArray) - 1] := TempFoundTilesArray[i];
          end;
      end;
      AddToSystemJournal('После отсеивания дубликатов, осталось деревьев:' + IntToStr(Length(ChopTilesArray)));
  end;

// Возводим в степень 2 (Shinma)
function sqr(a:LongInt):LongInt;
  begin
    result:=a*a;
  end;

// Вычисляем длину вектора (Shinma)
function vector_length(c_2:TFoundTile):LongInt;
  begin
    result:=Round(sqrt(sqr(GetX(self)-c_2.X)+sqr(GetY(self)-c_2.Y)));
  end;

// «Быстрая сортировка» по длине вектора, от центра последней поляны ко всем собранным координатам деревьев   
procedure QuickSort(A: array of TFoundTile; l,r: integer);
  var
  i, j: Integer;
  x, y: TFoundTile;
 
  begin
    i := l;
    j := r;
    x := A[((l + r) div 2)];
    repeat
      while vector_length(A[i]) < vector_length(x) do inc(i);
      while vector_length(x) < vector_length(A[j]) do dec(j);
      if not (i>j) then
        begin
          y:= A[i];
          A[i]:= A[j];
          A[j]:= y;
          inc(i);
          dec(j);
        end;
    until i>j;
    if l < j then QuickSort(ChopTilesArray, l,j);
    if i < r then QuickSort(ChopTilesArray, i,r);
  end;

// Находим, исключаем дубликаты, сортируем деревья
procedure MarkTrees;
  begin
    for i:= 1 to iCTileCount do
      begin
        NewMoveXY(ChopTiles[i].x, ChopTiles[i].y, False, 1, False);
        SearchTree;
        AddToSystemJournal('Всего найдено деревьев: ' + IntToStr(Length(TempFoundTilesArray)));
        ClearDuplicate;
      end;
    QuickSort(ChopTilesArray, 0, Length(ChopTilesArray) - 1);
  end;
 
// Разгрузка (Edred)
procedure Discharge;
  // разгружаем нарубленное в сундук
  // нарубленное - реги в массиве Regs[1..3]
  // логи - константа Logs
  var
  m, tmpcnt : integer;
  tmpid, tmpstack, tmpcolor : Cardinal;
  tmpname : String;
  begin
    AddToSystemJournal('Разгружаемся');
    waitconnection(3000);
    if Dead then exit;
    UseObject(Sunduk);
    wait(1000);
    checksave;
    // выложим реги
    for m := 1 to 3 do
      begin
        tmpcnt := 0;
        Repeat
          tmpid := Findtype(Regs[m],backpack);
          if tmpid = 0 then break;
          addtosystemjournal( 'Найдено ' + inttostr(GetQuantity(tmpid)) + ' regs');
          tmpcnt := tmpcnt + 1;
          if tmpcnt > 10 then
            begin
              addtosystemjournal('Ошибка: не могу переместить regs!');
              wait(1500);
            end;
          MoveItem(tmpid,GetQuantity(tmpid),Sunduk,0,0,0);
          wait(1000);
          CheckSave;
        until tmpid = 0;
      end;
    // выложим дид вуды
    tmpcnt := 0;
    Repeat
      tmpid := Findtype(WoodType,backpack);
      if tmpid = 0 then break;
      addtosystemjournal( 'Найдено ' + inttostr(GetQuantity(tmpid)) + ' dead woods');
      tmpcnt := tmpcnt + 1;
      if tmpcnt > 10 then
        begin
          addtosystemjournal('Ошибка: не могу переместить dead woods!');
          wait(1500);
        end;
      tmpstack := Findtype(WoodType,Sunduk);
      // Если не найден в банке - тогда просто в контейнер
      if tmpstack = 0 then tmpstack := Sunduk;
      MoveItem(tmpid,GetQuantity(tmpid),tmpstack,0,0,0);
      wait(1000);
      CheckSave;
    until tmpid = 0;
    // выложим логи
    tmpcnt := 0;
    Repeat
      tmpid := Findtype(Logs,backpack);
      if tmpid = 0 then break;
      tmpcolor := GetColor(tmpid);
      tmpname := ' unknown logs';
      case tmpcolor of
        $0000 : tmpname := ' logs';
        $037F : tmpname := ' Grave logs';
        $0039 : tmpname := ' Willow logs';
        $0026 : tmpname := ' Maple logs';
        $0405 : tmpname := ' Oak logs';
        $0994 : tmpname := ' Bloody logs';
        $048A : tmpname := ' Nature logs';
        $0898 : tmpname := ' Spirits logs';
      end;
      addtosystemjournal( 'Найдено ' + inttostr(GetQuantity(tmpid)) + tmpname);
      tmpcnt := tmpcnt + 1;
      if tmpcnt > 10 then
        begin
          addtosystemjournal('Ошибка: не могу переместить логи');
          wait(1500);
        end;
      repeat
        tmpstack := FindtypeEx(Logs,tmpcolor,Sunduk,False);
        if GetQuantity(tmpstack) >= 1500 then Ignore(tmpstack);
      until (tmpstack = 0) OR (GetQuantity(tmpstack) < 1500);
      // Если не найден в сундуке - тогда просто в контейнер
      if tmpstack = 0 then tmpstack := Sunduk;
      MoveItem(tmpid,GetQuantity(tmpid),tmpstack,0,0,0);
      wait(1000);
      CheckSave;
    until tmpid = 0;
    IgnoreReset;
    AddToSystemJournal('Разгрузка закончена');
  end;

// Идем к сундуку и выгружаемся
procedure UnloadOrDead;
  begin
    NewMoveXY(xTileSunduk, yTileSunduk, false, 1, false);
    if not Dead then begin Discharge; end
    else begin AddToSystemJournal('Персонаж мертв.'); SetARStatus(False); Disconnect; end;     
  end;
 
// Рубим дерево (Edred)
function LumbCurTree(tile,x,y,z : Integer) : Boolean;
  // рубим указанный тайл. Возвращаем false если перевес или чар мертв.
  var
  q, m1, m2, m3, m4, m5, m6, m7, m8, CountFizzle, NextTree : integer;
 
  begin
   UseSkill('Arms Lore');  
   waittargetobject(findtype($0F51,backpack));
   wait(1000)
    
    Result := true;
    CountFizzle := 0;
    repeat
      if WarMode = true then SetWarMode(false);
      if TargetPresent then CancelTarget;
      ctime := Now;
      if Dead then begin Result := false; exit; end;
      if UseType(Hatchet1,$FFFF) = 0 then
        begin
          if UseType(Hatchet2,$FFFF) = 0 then
            begin
              Result := false;
              exit;
            end;
        end;
      WaitForTarget(5000);
      If TargetPresent then TargetToTile(tile, x, y, z);
      q := 0;
      repeat
        wait(100);
        q := q + 1;
        checksave;
        m1 := InJournalBetweenTimes(Msg1, ctime, Now);
        m2 := InJournalBetweenTimes(Msg2, ctime, Now);
        m3 := InJournalBetweenTimes(Msg3, ctime, Now);
        m4 := InJournalBetweenTimes(Msg4, ctime, Now);
        m5 := InJournalBetweenTimes(Msg5, ctime, Now);
        m6 := InJournalBetweenTimes(Msg6, ctime, Now);
        m7 := InJournalBetweenTimes(Msg7, ctime, Now);
        m8 := InJournalBetweenTimes(Msg8, ctime, Now);
      until (m1<>-1) or (m2<>-1) or (m3<>-1) or (m4<>-1) or (m5<>-1) or (m6<>-1) or (m7<>-1) or (m8<>-1) or Dead or (q > 150);
      if (m2<>-1) or (m3<>-1) or (m4<>-1) then CountFizzle := CountFizzle + 1;
      if Dead or (Weight > MyMaxWeight) then begin Result := false; exit; end;
      if (q > 150) then NextTree := NextTree + 1;
    until (m5<>-1) OR (m6<>-1) OR (m7<>-1) OR (m8<>-1) OR (CountFizzle = 10) OR (NextTree > 3);
    if NextTree >= 3 then NextTree := 0;
  end;

       
// Главная функция       
Begin   
  InitTTilesArray;
  InitCTilesArray;
  InitSystem;
  InitReg;
  MarkTrees;
 
  repeat
    for i:= 0 to Length(ChopTilesArray) - 1 do
      begin
        NewMoveXY(ChopTilesArray[i].x, ChopTilesArray[i].y, false, 1, false);
        if not LumbCurTree(ChopTilesArray[i].tile, ChopTilesArray[i].x, ChopTilesArray[i].y, ChopTilesArray[i].z) then UnloadOrDead;
      end;
  until Dead;
End.SetGlobal



#16
achtung

achtung

    Samsung Galaxy Tab2 Winner

  • Пользователи
  • PipPip
  • 33 posts

может подойдёт так на 4.0.0 рублю



#17
achtung

achtung

    Samsung Galaxy Tab2 Winner

  • Пользователи
  • PipPip
  • 33 posts

UseSkill('Arms Lore');  
   waittargetobject(findtype($0F51,backpack));
   wait(1000)

 

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



#18
ctenka

ctenka

    Охотник на Драконов

  • Пользователи
  • PipPipPipPipPip
  • 263 posts

я на топоры поставил которыми рублю, у меня топоры не берт сам вставляю как сделать чтобы топоры брал?



#19
ProZak

ProZak

    Путешественник

  • Пользователи
  • PipPip
  • 16 posts

Program AutoLumber_SW;

{$Include 'all.inc'}

const
  /////////////////////////////////////////////////
  // Обязательные к изменению настройки скрипта  //
  Sunduk = $667FA40F;                            //
  //                                             //
  // Координаты точки перед сундуком             //
  xTileSunduk = 137;                            //
  yTileSunduk = 1470;                            //
  //                                             //
  /////////////////////////////////////////////////
 
  // Возможные к изменению настройки скрипта                                 
  MyMaxWeight = 350;  // Максимальный вес
  Hatchet1 = $0F43;   // Тип топора1
  Hatchet2 = $0F48;   // Тип топора2 (перевёрнутый)
 
  // Размерности массивов
  iTTileCount = 39;   // Типы тайлов деревьев (менять, только при редактировании массива)
  iCTileCount = 4;    // Кол-во точек (центров поляны), в которых хотим собирать информацию о деревьях (поляна = 30х30 тайлов)

  // Журнал
  Msg1 = 'переместили';
  Msg2 = 'That is too far away';
  Msg3 = 'hack';
  Msg4 = 'You decide not to chop wood';
  Msg5 = 'no wood here to chop...';
  Msg6 = 'appears immune';
  Msg7 = 'Try chopping';
  Msg8 = 'reach this';
   
  // Прочее
  RunSpeed = 250;
  iRadiusSearch = 20; // Радиус (не диаметр!) поиска деревьев в тайлах, относительно персонажа
  Logs = $1BDD;       // Тип логов
  WoodType = $0F90;   // Тип дедвудов
   
type
  ChopTile = Record
    x, y : Integer;
  end;
   
var
  Regs : array [1..3] of Cardinal;
  FoundTilesArray : TFoundTilesArray;
  TempFoundTilesArray, ChopTilesArray : array of TFoundTile;
  TreeTile:array [0..iTTileCount] of word;
  ChopTiles : array[1..iCTileCount] of ChopTile;
  ctime : TDateTime;
  i : Integer;
 
// Инициализация массива типов тайлов деревьев
procedure InitTTilesArray;
  begin
   
   TreeTile[0]:=3274;
   TreeTile[1]:=3275;
   TreeTile[2]:=3277;
   TreeTile[3]:=3280;

   
   TreeTile[4]:=3283;
   TreeTile[5]:=3286;
   TreeTile[6]:=3288;
   TreeTile[7]:=3290;
   
         
   TreeTile[8]:=3293;
   TreeTile[9]:=3296;
   TreeTile[10]:=3299;
   TreeTile[11]:=3302;
 
    
   TreeTile[12]:=3320;
   TreeTile[13]:=3323;
   TreeTile[14]:=3326;
   TreeTile[15]:=3329;
   
    
   TreeTile[16]:=3393;
   TreeTile[17]:=3394;
   TreeTile[18]:=3395;
   TreeTile[19]:=3396;
   
      
   TreeTile[20]:=3415;
   TreeTile[21]:=3416;
   TreeTile[22]:=3417;
   TreeTile[23]:=3418;
   
      
   TreeTile[24]:=3419;
   TreeTile[25]:=3438;
   TreeTile[26]:=3439;
   TreeTile[27]:=3440;
   
   
   TreeTile[28]:=3441;
   TreeTile[29]:=3442;
   TreeTile[30]:=3460;
   TreeTile[31]:=3461;
   
   
   TreeTile[32]:=3462;
   TreeTile[33]:=3476;
   TreeTile[34]:=3478;
   TreeTile[35]:=3480;
   
      
   TreeTile[36]:=3482;
   TreeTile[37]:=3484;
   TreeTile[38]:=3492;
   TreeTile[39]:=3496;
  end;

// Инициализация массива координат для поиска деревьев
procedure InitCTilesArray;
  begin
    ChopTiles[1].x := 2390;  // Координаты первой точки, на которую идем и ищем деревья
    ChopTiles[1].y := 3081;
   
    ChopTiles[2].x := 2357;  // Координаты второй точки, на которую идем и ищем деревья
    ChopTiles[2].y := 3044;
   
    ChopTiles[3].x := 2331;  // Координаты третьей точки, на которую идем и ищем деревья
    ChopTiles[3].y := 3096;
   
    ChopTiles[4].x := 2369;  // Координаты третьей точки, на которую идем и ищем деревья
    ChopTiles[4].y := 3120;
  end;

// Инициализация системных переменных
procedure InitSystem;
  begin
    SetRunUnmountTimer(RunSpeed);
    SetArrayLength(ChopTilesArray, 1);
  end;

// Инициализация регов
procedure InitReg;
  begin
    Regs[1] := $0F85;      // Ginseng
    Regs[2] := $0F88;      // Nightshade
    Regs[3] := $0F86;      // Mandrake Roots
  end;
 
// Поиск деревьев
procedure SearchTree;
  var
  i, j : Integer;
  iFoundTilesArrayCount : word;
  iTempFoundTilesArrayCount : Integer;
 
  begin
    for i:= 0 to iTTileCount do
      begin
        iFoundTilesArrayCount := GetStaticTilesArray((GetX(Self) - iRadiusSearch), (GetY(Self) - iRadiusSearch), (GetX(Self) + iRadiusSearch), (GetY(Self) + iRadiusSearch), 1, TreeTile[i], FoundTilesArray);
        if iFoundTilesArrayCount > 0 then
          begin
            SetArrayLength(TempFoundTilesArray, Length(TempFoundTilesArray) + iFoundTilesArrayCount);
            for j := 0 to iFoundTilesArrayCount - 1 do
              begin           
                TempFoundTilesArray[iTempFoundTilesArrayCount + j] := FoundTilesArray[j];
              end;
            iTempFoundTilesArrayCount := iTempFoundTilesArrayCount + iFoundTilesArrayCount;
          end;
      end;
    AddToSystemJournal('Найдено деревьев: ' + IntToStr(iTempFoundTilesArrayCount));     
  end;

// Чистим записи дубликаты (Vizit0r :P)
procedure ClearDuplicate;
  var
  i, j : Integer;
 
  begin
    ChopTilesArray[Length(ChopTilesArray) - 1] := TempFoundTilesArray[0];
    for i:=1 to Length(TempFoundTilesArray) - 1 do
      begin
        for j:=0 to Length(ChopTilesArray) - 1 do
          if (ChopTilesArray[j] = TempFoundTilesArray[i]) then
            break;
        if j > Length(ChopTilesArray) - 1 then
          begin
            SetArrayLength(ChopTilesArray, Length(ChopTilesArray) + 1);
            ChopTilesArray[Length(ChopTilesArray) - 1] := TempFoundTilesArray[i];
          end;
      end;
      AddToSystemJournal('После отсеивания дубликатов, осталось деревьев:' + IntToStr(Length(ChopTilesArray)));
  end;

// Возводим в степень 2 (Shinma)
function sqr(a:LongInt):LongInt;
  begin
    result:=a*a;
  end;

// Вычисляем длину вектора (Shinma)
function vector_length(c_2:TFoundTile):LongInt;
  begin
    result:=Round(sqrt(sqr(GetX(self)-c_2.X)+sqr(GetY(self)-c_2.Y)));
  end;

// «Быстрая сортировка» по длине вектора, от центра последней поляны ко всем собранным координатам деревьев   
procedure QuickSort(A: array of TFoundTile; l,r: integer);
  var
  i, j: Integer;
  x, y: TFoundTile;
 
  begin
    i := l;
    j := r;
    x := A[((l + r) div 2)];
    repeat
      while vector_length(A[i]) < vector_length(x) do inc(i);
      while vector_length(x) < vector_length(A[j]) do dec(j);
      if not (i>j) then
        begin
          y:= A[i];
          A[i]:= A[j];
          A[j]:= y;
          inc(i);
          dec(j);
        end;
    until i>j;
    if l < j then QuickSort(ChopTilesArray, l,j);
    if i < r then QuickSort(ChopTilesArray, i,r);
  end;

// Находим, исключаем дубликаты, сортируем деревья
procedure MarkTrees;
  begin
    for i:= 1 to iCTileCount do
      begin
        NewMoveXY(ChopTiles[i].x, ChopTiles[i].y, False, 1, False);
        SearchTree;
        AddToSystemJournal('Всего найдено деревьев: ' + IntToStr(Length(TempFoundTilesArray)));
        ClearDuplicate;
      end;
    QuickSort(ChopTilesArray, 0, Length(ChopTilesArray) - 1);
  end;
 
// Разгрузка (Edred)
procedure Discharge;
  // разгружаем нарубленное в сундук
  // нарубленное - реги в массиве Regs[1..3]
  // логи - константа Logs
  var
  m, tmpcnt : integer;
  tmpid, tmpstack, tmpcolor : Cardinal;
  tmpname : String;
  begin
    AddToSystemJournal('Разгружаемся');
    waitconnection(3000);
    if Dead then exit;
    UseObject(Sunduk);
    wait(1000);
    checksave;
    // выложим реги
    for m := 1 to 3 do
      begin
        tmpcnt := 0;
        Repeat
          tmpid := Findtype(Regs[m],backpack);
          if tmpid = 0 then break;
          addtosystemjournal( 'Найдено ' + inttostr(GetQuantity(tmpid)) + ' regs');
          tmpcnt := tmpcnt + 1;
          if tmpcnt > 10 then
            begin
              addtosystemjournal('Ошибка: не могу переместить regs!');
              wait(1500);
            end;
          MoveItem(tmpid,GetQuantity(tmpid),Sunduk,0,0,0);
          wait(1000);
          CheckSave;
        until tmpid = 0;
      end;
    // выложим дид вуды
    tmpcnt := 0;
    Repeat
      tmpid := Findtype(WoodType,backpack);
      if tmpid = 0 then break;
      addtosystemjournal( 'Найдено ' + inttostr(GetQuantity(tmpid)) + ' dead woods');
      tmpcnt := tmpcnt + 1;
      if tmpcnt > 10 then
        begin
          addtosystemjournal('Ошибка: не могу переместить dead woods!');
          wait(1500);
        end;
      tmpstack := Findtype(WoodType,Sunduk);
      // Если не найден в банке - тогда просто в контейнер
      if tmpstack = 0 then tmpstack := Sunduk;
      MoveItem(tmpid,GetQuantity(tmpid),tmpstack,0,0,0);
      wait(1000);
      CheckSave;
    until tmpid = 0;
    // выложим логи
    tmpcnt := 0;
    Repeat
      tmpid := Findtype(Logs,backpack);
      if tmpid = 0 then break;
      tmpcolor := GetColor(tmpid);
      tmpname := ' unknown logs';
      case tmpcolor of
        $0000 : tmpname := ' logs';
        $037F : tmpname := ' Grave logs';
        $0039 : tmpname := ' Willow logs';
        $0026 : tmpname := ' Maple logs';
        $0405 : tmpname := ' Oak logs';
        $0994 : tmpname := ' Bloody logs';
        $048A : tmpname := ' Nature logs';
        $0898 : tmpname := ' Spirits logs';
      end;
      addtosystemjournal( 'Найдено ' + inttostr(GetQuantity(tmpid)) + tmpname);
      tmpcnt := tmpcnt + 1;
      if tmpcnt > 10 then
        begin
          addtosystemjournal('Ошибка: не могу переместить логи');
          wait(1500);
        end;
      repeat
        tmpstack := FindtypeEx(Logs,tmpcolor,Sunduk,False);
        if GetQuantity(tmpstack) >= 1500 then Ignore(tmpstack);
      until (tmpstack = 0) OR (GetQuantity(tmpstack) < 1500);
      // Если не найден в сундуке - тогда просто в контейнер
      if tmpstack = 0 then tmpstack := Sunduk;
      MoveItem(tmpid,GetQuantity(tmpid),tmpstack,0,0,0);
      wait(1000);
      CheckSave;
    until tmpid = 0;
    IgnoreReset;
    AddToSystemJournal('Разгрузка закончена');
  end;

// Идем к сундуку и выгружаемся
procedure UnloadOrDead;
  begin
    NewMoveXY(xTileSunduk, yTileSunduk, false, 1, false);
    if not Dead then begin Discharge; end
    else begin AddToSystemJournal('Персонаж мертв.'); SetARStatus(False); Disconnect; end;     
  end;
 
// Рубим дерево (Edred)
function LumbCurTree(tile,x,y,z : Integer) : Boolean;
  // рубим указанный тайл. Возвращаем false если перевес или чар мертв.
  var
  q, m1, m2, m3, m4, m5, m6, m7, m8, CountFizzle, NextTree : integer;
 
  begin
   UseSkill('Arms Lore');  
   waittargetobject(findtype($0F51,backpack));
   wait(1000)
    
    Result := true;
    CountFizzle := 0;
    repeat
      if WarMode = true then SetWarMode(false);
      if TargetPresent then CancelTarget;
      ctime := Now;
      if Dead then begin Result := false; exit; end;
      if UseType(Hatchet1,$FFFF) = 0 then
        begin
          if UseType(Hatchet2,$FFFF) = 0 then
            begin
              Result := false;
              exit;
            end;
        end;
      WaitForTarget(5000);
      If TargetPresent then TargetToTile(tile, x, y, z);
      q := 0;
      repeat
        wait(100);
        q := q + 1;
        checksave;
        m1 := InJournalBetweenTimes(Msg1, ctime, Now);
        m2 := InJournalBetweenTimes(Msg2, ctime, Now);
        m3 := InJournalBetweenTimes(Msg3, ctime, Now);
        m4 := InJournalBetweenTimes(Msg4, ctime, Now);
        m5 := InJournalBetweenTimes(Msg5, ctime, Now);
        m6 := InJournalBetweenTimes(Msg6, ctime, Now);
        m7 := InJournalBetweenTimes(Msg7, ctime, Now);
        m8 := InJournalBetweenTimes(Msg8, ctime, Now);
      until (m1<>-1) or (m2<>-1) or (m3<>-1) or (m4<>-1) or (m5<>-1) or (m6<>-1) or (m7<>-1) or (m8<>-1) or Dead or (q > 150);
      if (m2<>-1) or (m3<>-1) or (m4<>-1) then CountFizzle := CountFizzle + 1;
      if Dead or (Weight > MyMaxWeight) then begin Result := false; exit; end;
      if (q > 150) then NextTree := NextTree + 1;
    until (m5<>-1) OR (m6<>-1) OR (m7<>-1) OR (m8<>-1) OR (CountFizzle = 10) OR (NextTree > 3);
    if NextTree >= 3 then NextTree := 0;
  end;

       
// Главная функция       
Begin   
  InitTTilesArray;
  InitCTilesArray;
  InitSystem;
  InitReg;
  MarkTrees;
 
  repeat
    for i:= 0 to Length(ChopTilesArray) - 1 do
      begin
        NewMoveXY(ChopTilesArray[i].x, ChopTilesArray[i].y, false, 1, false);
        if not LumbCurTree(ChopTilesArray[i].tile, ChopTilesArray[i].x, ChopTilesArray[i].y, ChopTilesArray[i].z) then UnloadOrDead;
      end;
  until Dead;
End.SetGlobal

 

 

 

выдает такую ошибку, подскажите, что исправить 

 

 

19:54:39:116 [Derevo]: Найдено деревьев: 0

19:54:39:118 [Derevo]: Всего найдено деревьев: 0
19:54:39:120 [Derevo]: Out Of Range at 41.124

Edited by ProZak, 27 October 2013 - 06:57 PM.


#20
ctenka

ctenka

    Охотник на Драконов

  • Пользователи
  • PipPipPipPipPip
  • 263 posts

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







0 user(s) are reading this topic

members, guests, anonymous users