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

Autolumber - ламбер с автопоиском деревьев

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

Re: Autolumber - ламбер с автопоиском деревьев

Post by drabadan »

Daden wrote:А подскажите пожалуйста как сюда добор топоров из контейнера прикрутить?
та лигко! БЕРИ ТАПОР РУБИ ХАРДКОР!!!
Flucky
Posts: 1
Joined: 26.11.2013 16:25

Re: Autolumber - ламбер с автопоиском деревьев

Post by Flucky »

Выдает вот это:

Code: Select all

17:47:52:885 [Nick]: Compiling
17:47:52:922 [Nick]: Compiled succesfully
17:47:52:924 [Nick]: Out Of Range at 29.155
17:47:52:925 [Nick]: Script LUMBER!.sc stopped successfuly
Чтобы это могло значить?
drabadan
Expert
Expert
Posts: 730
Joined: 13.12.2012 17:35
Contact:

Re: Autolumber - ламбер с автопоиском деревьев

Post by drabadan »

ошибка в одном из массивов, может чегото добавлял или удалял...
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Re: Autolumber - ламбер с автопоиском деревьев

Post by Vizit0r »

Flucky wrote:Выдает вот это:

Code: Select all

17:47:52:885 [Nick]: Compiling
17:47:52:922 [Nick]: Compiled succesfully
17:47:52:924 [Nick]: Out Of Range at 29.155
17:47:52:925 [Nick]: Script LUMBER!.sc stopped successfuly
Чтобы это могло значить?
это могло бы значить, что надо использовать последнюю версию стелса, чтобы показывало нормально место ошибки.
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
Panzer
Posts: 1
Joined: 31.12.2013 14:03

Re: Autolumber - ламбер с автопоиском деревьев

Post by Panzer »

Я наверное чайник, но подскажите пожалуйста.

14:28:41:649 [Panzer]: Include\uses file - 'all.inc' - not found!
14:28:41:658 [Panzer]: Script AutoLumber_SW.sc stopped successfuly

Я так понимаю, что не могу найти в скрипте где надо указать поиск или считывание из фаила координаты деревьев или что? :shock: :?:
drabadan
Expert
Expert
Posts: 730
Joined: 13.12.2012 17:35
Contact:

Re: Autolumber - ламбер с автопоиском деревьев

Post by drabadan »

Panzer wrote:Я наверное чайник, но подскажите пожалуйста.

14:28:41:649 [Panzer]: Include\uses file - 'all.inc' - not found!
14:28:41:658 [Panzer]: Script AutoLumber_SW.sc stopped successfuly

Я так понимаю, что не могу найти в скрипте где надо указать поиск или считывание из фаила координаты деревьев или что? :shock: :?:
не правильно понимаешь!
А чего б тебе там вообще искать?

Вся соль скрипта в том - что нет никакого файла координат, он сам ищет деревья, и это можно было бы прочитать в описании работы скрипта. Тогда голова б незадуривалась глупостями!

Ищем на форуме, что такое инклюды для стелса, читаем о них и все в миг станет ясно.
Увы, хотелось бы помочь побольше - но как только начал вдумываться сколько всего тебе надо написать и объяснить по данной теме - решил отправить в поиск! Оно все очень доступно написано и очень много, так шта не ленимся - а читаем... Если оно тебе, конечно, надо!
Lavion
Posts: 4
Joined: 23.12.2011 20:27

Re: Autolumber - ламбер с автопоиском деревьев

Post by Lavion »

Люди в чем может быть проблема. Набирает максимальный вес, подходит к сундуку, открывает его и логи не выкидывает а перемещает их по бэкпаку?
drabadan
Expert
Expert
Posts: 730
Joined: 13.12.2012 17:35
Contact:

Re: Autolumber - ламбер с автопоиском деревьев

Post by drabadan »

Lavion wrote:Люди в чем может быть проблема. Набирает максимальный вес, подходит к сундуку, открывает его и логи не выкидывает а перемещает их по бэкпаку?
Id сундука не правильный
nah nah
Developer
Developer
Posts: 414
Joined: 13.07.2011 11:23
Contact:

Re: Autolumber - ламбер с автопоиском деревьев

Post by nah nah »

drabadan wrote:Id сундука не правильный
Lavion wrote:подходит к сундуку, открывает его
Gauhar
Novice
Novice
Posts: 87
Joined: 08.07.2008 17:40

Re: Autolumber - ламбер с автопоиском деревьев

Post by Gauhar »

Возможно проблема где-то здесь:

Code: Select all

repeat 
   tmpstack := FindtypeEx(Logs,tmpcolor,Sunduk,False); 
   if GetQuantity(tmpstack) >= 65000 then Ignore(tmpstack); 
until (tmpstack = 0) OR (GetQuantity(tmpstack) < 65000);
Если пытаться бросить 100 бревен в кучу в которой 64999 бервен, то ничего не выйдет, так как размер кучи не может быть больше 65000, и, соответственно, нужно уточнить какой на шарде максимальный размер кучи.
Если проблема в вышеуказанном куске скрипта, то можно попробовать исправить так:

Code: Select all

repeat 
   tmpstack := FindTypeEx(Logs,tmpcolor,Sunduk,False); 
   if (GetQuantity(tmpstack) + GetQuantity(tmpid)) > 65000 then Ignore(tmpstack); 
until (tmpstack = 0) OR ((GetQuantity(tmpstack) + GetQuantity(tmpid)) <= 65000);
nah nah
Developer
Developer
Posts: 414
Joined: 13.07.2011 11:23
Contact:

Re: Autolumber - ламбер с автопоиском деревьев

Post by nah nah »

Gauhar wrote:так как размер кучи не может быть больше 65000
чуть поправлю =) видимо в уо размер кучи хранится в 2 байтах, соответственно макс значение - 65535
Lavion
Posts: 4
Joined: 23.12.2011 20:27

Re: Autolumber - ламбер с автопоиском деревьев

Post by Lavion »

Он и в пустой сундук не сбрасывает. А просто перекладывает по паку.
drabadan
Expert
Expert
Posts: 730
Joined: 13.12.2012 17:35
Contact:

Re: Autolumber - ламбер с автопоиском деревьев

Post by drabadan »

nah nah wrote:
drabadan wrote:Id сундука не правильный
Lavion wrote:подходит к сундуку, открывает его
весьма остроумно...

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

Lavion - вложи под спойлер скрипт который у тебя.
Такие проблемы в 99 случаев из 100 - в напутанных айдишках, именно куда ложить, а не откуда или что!
Lavion
Posts: 4
Joined: 23.12.2011 20:27

Re: Autolumber - ламбер с автопоиском деревьев

Post by Lavion »

Program AutoLumber_SW;

{$Include 'all.inc'}

const
/////////////////////////////////////////////////
// Обязательные к изменению настройки скрипта //
Sunduk = $4001639C; //
// //
// Координаты точки перед сундуком //
xTileSunduk = 1095; //
yTileSunduk = 2530; //
// //
/////////////////////////////////////////////////

// Возможные к изменению настройки скрипта
MyMaxWeight = 350; // Максимальный вес
Hatchet1 = $0F47; // Тип топора1
Hatchet2 = $0F48; // Тип топора2 (перевёрнутый)

// Размерности массивов
iTTileCount = 39; // Типы тайлов деревьев (менять, только при редактировании массива)
iCTileCount = 4; // Кол-во точек (центров поляны), в которых хотим собирать информацию о деревьях (поляна = 30х30 тайлов)

// Журнал
Msg1 = 'переместили';
Msg2 = 'не смогли';
Msg3 = 'You put';
Msg4 = 'You decide not to chop wood';
Msg5 = 'There is nothing';
Msg6 = 'appears immune';
Msg7 = 'Try chopping';
Msg8 = 'hack';

// Прочее
RunSpeed = 300;
iRadiusSearch = 30; // Радиус (не диаметр!) поиска деревьев в тайлах, относительно персонажа
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 := 1097; // Координаты первой точки, на которую идем и ищем деревья
ChopTiles[1].y := 2512;

ChopTiles[2].x := 1099; // Координаты второй точки, на которую идем и ищем деревья
ChopTiles[2].y := 2486;

ChopTiles[3].x := 1102; // Координаты третьей точки, на которую идем и ищем деревья
ChopTiles[3].y := 2454;

ChopTiles[4].x := 1099; // Координаты третьей точки, на которую идем и ищем деревья
ChopTiles[4].y := 2432;
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, 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) then
break;
if j > Length(ChopTilesArray) - 1 then
begin
SetArrayLength(ChopTilesArray, Length(ChopTilesArray) + 1);
ChopTilesArray[Length(ChopTilesArray) - 1] := TempFoundTilesArray;
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) < 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;
A:= 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.x, ChopTiles.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';
$05DD : tmpname := ' Maple logs';
$0456 : tmpname := ' Oak logs';
$0030 : tmpname := ' Pine logs';
$045C : tmpname := ' Walnut 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) >= 65000 then Ignore(tmpstack);
until (tmpstack = 0) OR (GetQuantity(tmpstack) < 65000);
// Если не найден в сундуке - тогда просто в контейнер
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
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(1500);
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.x, ChopTilesArray.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.
Скрипт не менялся, менялись лиш задержки. И Цвета логов с названиями.

Code: Select all

21:03:05:379 [Lavion]: Разгружаемся
21:03:06:379 [Lavion]: Найдено 1756 logs
21:03:07:481 [Lavion]: Найдено 1756 logs
21:03:08:592 [Lavion]: Найдено 1756 logs
21:03:09:696 [Lavion]: Найдено 1756 logs
21:03:10:852 [Lavion]: Найдено 1756 logs
21:03:11:958 [Lavion]: Найдено 1756 logs
21:03:13:058 [Lavion]: Найдено 1756 logs
21:03:14:159 [Lavion]: Найдено 1756 logs
21:03:15:334 [Lavion]: Найдено 1756 logs
21:03:16:439 [Lavion]: Найдено 1756 logs
21:03:17:548 [Lavion]: Найдено 1756 logs
21:03:17:552 [Lavion]: Ошибка: не могу переместить логи

Вот в чем может быть проблема? Рубит нормально. А разгрузиться не может.
Lavion
Posts: 4
Joined: 23.12.2011 20:27

Re: Autolumber - ламбер с автопоиском деревьев

Post by Lavion »

На версии Стелса 6.1.5 не скидывает. Запустил его на версии 3.9.6 начал скидывать нормально.
Post Reply