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

Добрый День. Ламбер.

тут можно задать вопрос по скриптингу
Post Reply
Lotus
Neophyte
Neophyte
Posts: 12
Joined: 20.04.2012 18:53

Добрый День. Ламбер.

Post by Lotus »

Добрый день всем , ребят .. подскажите , я уже в отчаянии .. Скрипты писать - не умею , но чуток разбераюсь , если что то нужно исправить , добавить / убрать - в принципе сам в состоянии ( я к тому , что не полный 0 ) .
Столкнулся со следующей проблемой ..

Code: Select all

Program Lumber; // vlf
type LumberR = record
tile:word;
px,py,pz:integer;
end;
Var LumberP: array of LumberR;
logCol : Array [0..132] of Word;
a,d,e : byte;
ItemCount,b:Integer;
MinLogCol: word;
Const
nearX = 1127; // nastroyki scripta, vozle lodki O Y
nearY = 222;
onboadx = 1124; // na lodke X Y
onboady = 222;
onboadz = -2; 
Trap = $4045A1F1; // ID trap
maxweight = 500;
NeedWeight = 400;
maxfood = 3;
logType = $1BDD;
DeedType = $0F90;
AxeType = $0F43;
AxeGump = '3907';
TinkGump = '7865';
eda = $097B;
Tinktype = $1EB9;
CopperType = $1BF2;

{$Include 'all.inc'}

Procedure GetLumberTiles(s:String;WPos:Integer);
begin
s := s + ' ';
LumberP[WPos].tile:=StrToInt(Copy(s,1,Pos(' ',s)-1));
Delete(s,1,Pos(' ',s));
LumberP[WPos].px:=StrToInt(Copy(s,1,Pos(' ',s)-1));
Delete(s,1,Pos(' ',s));
LumberP[WPos].py:=StrToInt(Copy(s,1,Pos(' ',s)-1));
Delete(s,1,Pos(' ',s));
LumberP[WPos].pz:=StrToInt(Copy(s,1,Pos(' ',s)-1));
Delete(s,1,Pos(' ',s));
end;

Procedure GetCoord;
var
List:TStringList;
b:integer;
begin
List:=TStringList.Create;
List.LoadFromFile('D:\Games\Ultima Online Golden World\Stealth\Scripts\Тайлы ламбер Giorgio Armani.txt');
for b := 0 to List.Count-1 do
begin
setArrayLength(LumberP, getArrayLength(LumberP) + 1);
GetLumberTiles(List.strings[b],b);
end;
ItemCount:=b;
end;


procedure checkcoord;
begin
CheckSave;
if (GetZ(self) = onboadz) then
begin
repeat
AddToSystemJournal('я в лодке')
UseObject(Trap);
wait(1000);
newMoveXY(1125,222,True,0,False);  // vpisat' coordinati otrkitogo trapa 
wait(1000);
until (GetX(self) = nearX) and (GetY(self) = nearY);
UOSay('OMG');
AddToSystemJournal('Сошел на берег успешно!');
end;
end;

procedure CheckAxe;
begin
CheckSave;
checkdead;
if (Count(AxeType) < 2) then
   begin
   repeat
   ClearJournal   
   FindTypeEx(AxeType,$000B,Ground,true);
   MoveItem(finditem, 1, Backpack, 0,0,0);
   wait(500);
   until (Count(AxeType) >= 2);
   end;
end;

procedure DropLog;
var g : integer;
Logcol :  Array [0..16] of Word;
Begin
finddistance := 1;
findvertical:=255;
CheckSave;
AddToSystemJournal('Скидываю дерево на лодку...');
logCol[0] := $0000; // normum
logCol[1] := $0362; // jade
logCol[2] := $010D; // oak
logCol[3] := $0094; // karund
logCol[4] := $01B0; // leshram
logCol[5] := $01A2; // turmalit
logCol[6] := $0026; // emerint
logCol[7] := $00CB; // legrand
logCol[8] := $0455; // solmur
logCol[9] := $092B; // kleor
logCol[10] := $0931; // logradum
logCol[11] := $093F; // vialonit
logCol[12] := $0074; // stardust
logCol[13] := $09EF; // pironil
logCol[14] := $006F; // mystic
logCol[15] := $0119; // elvin
logCol[16] := $000B; // elkris

for g := 0 to 16 do
begin
checkdead;
CheckSave;
FindTypeEx(logType,logCol[g],backpack,true);
if FindCount > 0 then
begin
stack(logType,logCol[g]);
wait(1000);
end
end;
hungry (1,ground);
wait(500);
End;


procedure GotoOnBoad;
{Возврат к лодке}
Begin
CheckSave;
repeat
newMoveXY( nearX, nearY, True,0,True);
UseObject(Trap);
wait(500);
until (GetX(self) = OnBoadX) and (GetY(self) = OnBoadY);
Hungry(1,ground);
DropLog;
CheckAxe;
checkcoord;
End;

procedure CheckEquip;
{Проверка экипировки}
Var EquipAxe : Cardinal;
Begin
AddToSystemJournal('Проверяю топор...');
if GetType(ObjAtLayer(RhandLayer)) <> AxeType then
begin
 Disarm;
 wait(500);
 FindType(AxeType, backpack);
 if findCount < 1 then
begin
AddToSystemJournal('Нужен топор, иду на лодку.');
GotoOnBoad;
CheckAxe;
end
 else
begin
EquipAxe := finditem;
Equip(RhandLayer, EquipAxe);
wait(500);
end
 end
End;

Procedure Lumber(tile:Word;x,y,z:Integer);
{Рубка дерева}
begin
CheckEquip;
WaitTargetTile(tile,x,y,z);
UseType(AxeType, $FFFF);
AddToSystemJournal('Топор есть, рублю дерево...');
WaitJournalLine(now,'You can''chop''|stop|''|OMG|''|no logs left there|''t|enough|how to use|broke|stop|can''t see|far away', 200000);
End;

procedure checkweight;
begin
if (Weight > NeedWeight) then  
  begin
  GotoOnBoad;
  end;
end;

{Eieoeaeecaoey ne?eioa}
BEGIN
SetArStatus(true);
checkcoord;
getcoord;
AddToSystemJournal('----===Скрипт запущен===----');
While (not Dead) do
begin
for b :=0 to 132 do
begin
WaitConnection(1000);
CheckSave;
wait (500);
checkcoord;
wait (500);
Addtosystemjournal('проверка');
CheckWeight;
Addtosystemjournal('Иду в точку '+intToStr(LumberP[b].px)+', '+intToStr(LumberP[b].py)+' к дереву номер '+intToStr(b)+'.');
newMoveXY(LumberP[b].px,LumberP[b].py,True,1,True);
Addtosystemjournal('Дошел к дереву номер '+intToStr(b)+'.');
Lumber(LumberP[b].tile,LumberP[b].px,LumberP[b].py,LumberP[b].pz);
end
end
end.
Вот такой вот скриптик на ламбер , и вроде бы все хорошо со скриптоми запускается и работает , но :
после запуска скрипта - бежит рубит дерево до указанного вента , затем бежит на лодку его скидывать , сбрасывает дерево , в журнале - все норм ( нужно разгружаться , скидываю дерево ) . Потом просто становится и стоит .. не ругается , не пытается не чего делать , просто стоит может 5 минут стоять , 10 - как ему самому вздумается , потом может сам по себе не с того не с сего выйти с лодочки и побежать рубить , когда возвращается - история повторяется .. стоит и дуплит без конца , к стати тупить наченает , когда DropLog работает .. пишет в журнале скидываю дерево на лодку.... Дерево скинул уже ( смотрю по венту ) и все равно стоит ... вот только что 16 минут простоял .. В журнале все норм :

15:05:57:443 [craft]: Дошел к дереву номер 23.
15:05:57:446 [craft]: Проверяю топор...
15:05:58:588 [craft]: Топор есть, рублю дерево...
15:06:07:394 [craft]: проверка
15:06:26:350 [craft]: Скидываю дерево на лодку...
15:22:08:860 [craft]: я в лодке
15:22:11:384 [craft]: Сошел на берег успешно!
15:22:11:386 [craft]: Иду в точку 1216, 216 к дереву номер 24.

Не знаю где проблема .. Прошу вашей помощи , буду очень благодарен .. Версия клиента 2.0.0 версия стелса 6.7.1, пробывал и на стелсе 4.0.0. и на стелсе 4.0.3

И да .. не удивляйтесь по поводу

Code: Select all

Код:
procedure CheckAxe;
begin
CheckSave;
checkdead;
if (Count(AxeType) < 2) then
   begin
   repeat
   ClearJournal   
   FindTypeEx(AxeType,$000B,Ground,true);
   MoveItem(finditem, 1, Backpack, 0,0,0);
   wait(500);
   until (Count(AxeType) >= 2);
   end;
end;
У меня на сервере ввели типа топоры элкрис , элвин , мистик , делать их нельзя , только у вендоров покупать , стоят не дешево , по этому и приходится вот такое выдумывать , чтоб по 2 таскал .
drabadan
Expert
Expert
Posts: 730
Joined: 13.12.2012 17:35
Contact:

Re: Добрый День. Ламбер.

Post by drabadan »

вот так попробуй

Code: Select all

Program Lumber; // vlf
type LumberR = record
tile:word;
px,py,pz:integer;
end;
Var LumberP: array of LumberR;
logCol : Array [0..132] of Word;
a,d,e : byte;
ItemCount,b:Integer;
MinLogCol: word;
Const
nearX = 1127; // nastroyki scripta, vozle lodki O Y
nearY = 222;
onboadx = 1124; // na lodke X Y
onboady = 222;
onboadz = -2; 
Trap = $4045A1F1; // ID trap
maxweight = 500;
NeedWeight = 400;
maxfood = 3;
logType = $1BDD;
DeedType = $0F90;
AxeType = $0F43;
AxeGump = '3907';
TinkGump = '7865';
eda = $097B;
Tinktype = $1EB9;
CopperType = $1BF2;

{$Include 'all.inc'}

Procedure GetLumberTiles(s:String;WPos:Integer);
begin
s := s + ' ';
LumberP[WPos].tile:=StrToInt(Copy(s,1,Pos(' ',s)-1));
Delete(s,1,Pos(' ',s));
LumberP[WPos].px:=StrToInt(Copy(s,1,Pos(' ',s)-1));
Delete(s,1,Pos(' ',s));
LumberP[WPos].py:=StrToInt(Copy(s,1,Pos(' ',s)-1));
Delete(s,1,Pos(' ',s));
LumberP[WPos].pz:=StrToInt(Copy(s,1,Pos(' ',s)-1));
Delete(s,1,Pos(' ',s));
end;

Procedure GetCoord;
var
List:TStringList;
b:integer;
begin
List:=TStringList.Create;
List.LoadFromFile('D:\Games\Ultima Online Golden World\Stealth\Scripts\Тайлы ламбер Giorgio Armani.txt');
for b := 0 to List.Count-1 do
begin
setArrayLength(LumberP, getArrayLength(LumberP) + 1);
GetLumberTiles(List.strings[b],b);
end;
ItemCount:=b;
end;


procedure checkcoord;
begin
CheckSave;
if (GetZ(self) = onboadz) then
begin
repeat
AddToSystemJournal('я в лодке')
UseObject(Trap);
wait(1000);
newMoveXY(1125,222,True,0,False);  // vpisat' coordinati otrkitogo trapa 
wait(1000);
until (GetX(self) = nearX) and (GetY(self) = nearY);
UOSay('OMG');
AddToSystemJournal('Сошел на берег успешно!');
end;
end;

procedure CheckAxe;
begin
CheckSave;
checkdead;
if (Count(AxeType) < 2) then
   begin
   repeat
   ClearJournal   
   FindTypeEx(AxeType,$000B,Ground,true);
   MoveItem(finditem, 1, Backpack, 0,0,0);
   wait(500);
   until (Count(AxeType) >= 2);
   end;
end;

procedure DropLog;
var g : integer;
Logcol :  Array [0..16] of Word;
Begin
finddistance := 1;
findvertical:=255;
CheckSave;
AddToSystemJournal('Скидываю дерево на лодку...');
logCol[0] := $0000; // normum
logCol[1] := $0362; // jade
logCol[2] := $010D; // oak
logCol[3] := $0094; // karund
logCol[4] := $01B0; // leshram
logCol[5] := $01A2; // turmalit
logCol[6] := $0026; // emerint
logCol[7] := $00CB; // legrand
logCol[8] := $0455; // solmur
logCol[9] := $092B; // kleor
logCol[10] := $0931; // logradum
logCol[11] := $093F; // vialonit
logCol[12] := $0074; // stardust
logCol[13] := $09EF; // pironil
logCol[14] := $006F; // mystic
logCol[15] := $0119; // elvin
logCol[16] := $000B; // elkris

for g := 0 to 16 do
begin
checkdead;
CheckSave;
FindTypeEx(logType,logCol[g],backpack,true);
if FindCount > 0 then
begin
stack(logType,logCol[g]);
wait(1000);
end
end;
hungry (1,ground);
wait(500);
End;


procedure GotoOnBoad;
{Возврат к лодке}
Begin
CheckSave;
repeat
newMoveXY( nearX, nearY, True,0,True);
UseObject(Trap);
wait(500);
until (GetX(self) = OnBoadX) and (GetY(self) = OnBoadY);
Hungry(1,ground);
DropLog;
CheckAxe;
checkcoord;
End;

procedure CheckEquip;
{Проверка экипировки}
Var EquipAxe : Cardinal;
Begin
AddToSystemJournal('Проверяю топор...');
if GetType(ObjAtLayer(RhandLayer)) <> AxeType then
begin
 Disarm;
 wait(500);
 FindType(AxeType, backpack);
 if findCount < 1 then
begin
AddToSystemJournal('Нужен топор, иду на лодку.');
GotoOnBoad;
CheckAxe;
end
 else
begin
EquipAxe := finditem;
Equip(RhandLayer, EquipAxe);
wait(500);
end
 end
End;

Procedure Lumber(tile:Word;x,y,z:Integer);
{Рубка дерева}
begin
CheckEquip;
WaitTargetTile(tile,x,y,z);
UseType(AxeType, $FFFF);
AddToSystemJournal('Топор есть, рублю дерево...');
WaitJournalLine(now,'You can''chop''|stop|''|OMG|''|no logs left there|''t|enough|how to use|broke|stop|can''t see|far away', 200000);
End;

procedure checkweight;
begin
if (Weight > NeedWeight) then  
  begin
  GotoOnBoad;
  end;
end;

{Eieoeaeecaoey ne?eioa}
BEGIN
SetArStatus(true);
checkcoord;
getcoord;
AddToSystemJournal('----===Скрипт запущен===----');
While (not Dead) do
begin
for b :=0 to 132 do
begin
WaitConnection(1000);
CheckSave;
wait (500);
checkcoord;
wait (500);
Addtosystemjournal('проверка');
CheckWeight;
Addtosystemjournal('Иду в точку '+intToStr(LumberP[b].px)+', '+intToStr(LumberP[b].py)+' к дереву номер '+intToStr(b)+'.');
newMoveXY(LumberP[b].px,LumberP[b].py,True,1,True);
Addtosystemjournal('Дошел к дереву номер '+intToStr(b)+'.');
Lumber(LumberP[b].tile,LumberP[b].px,LumberP[b].py,LumberP[b].pz);
end;
end;
end.
Lotus
Neophyte
Neophyte
Posts: 12
Joined: 20.04.2012 18:53

Re: Добрый День. Ламбер.

Post by Lotus »

Не чего не изменилось , после того как сбрасывает все логи , просто так стоит ..
17:55:05:003 [craft]: проверка
17:55:17:054 [craft]: Скидываю дерево на лодку...
17:58:06:069 [craft]: я в лодке
17:58:08:546 [craft]: Сошел на берег успешно!
17:58:08:550 [craft]: Иду в точку 1184, 216 к дереву номер 14.

Стоит теперь 3 минуты примерно, но это и на моем сркипте так было , в смысле после ваших изменений в нем - все осталось так же . Хотел еще спросить , что вы меняли в нем ? искал , искал - не вижу .. от куда они берутся эти 3 минуты , хоть убей - найти не могу ..
nah nah
Developer
Developer
Posts: 414
Joined: 13.07.2011 11:23
Contact:

Re: Добрый День. Ламбер.

Post by nah nah »

проверьте отработку этих строк

Code: Select all

CheckSave;
if (GetZ(self) = onboadz)
Lotus
Neophyte
Neophyte
Posts: 12
Joined: 20.04.2012 18:53

Re: Добрый День. Ламбер.

Post by Lotus »

nah nah wrote:проверьте отработку этих строк

Code: Select all

CheckSave;
if (GetZ(self) = onboadz)
А как проверить , не подскажите ?
nah nah
Developer
Developer
Posts: 414
Joined: 13.07.2011 11:23
Contact:

Re: Добрый День. Ламбер.

Post by nah nah »

да хотя бы AddToSystemJournal('test') поставьте перед и после вызова CheckSave
Lotus
Neophyte
Neophyte
Posts: 12
Joined: 20.04.2012 18:53

Re: Добрый День. Ламбер.

Post by Lotus »

nah nah wrote:да хотя бы AddToSystemJournal('test') поставьте перед и после вызова CheckSave
Прошу прощения , нашел проблему , проблема в

Code: Select all

procedure CheckAxe;
begin
CheckSave;
checkdead;
if (Count(AxeType) < 2) then
   begin
   repeat
   ClearJournal   
   FindTypeEx(AxeType,$000B,Ground,true);
   MoveItem(finditem, 1, Backpack, 0,0,0);
   wait(500);
   until (Count(AxeType) >= 2);
   end;
end;
Удаляю вызов процедуры , скрипт работает нормально , быстро скидывает дерево , быстро выходит из лодки .. Не ткнёте носом , что не так в моем Checkaxe ?
drabadan
Expert
Expert
Posts: 730
Joined: 13.12.2012 17:35
Contact:

Re: Добрый День. Ламбер.

Post by drabadan »

Lotus wrote:
nah nah wrote:да хотя бы AddToSystemJournal('test') поставьте перед и после вызова CheckSave
Прошу прощения , нашел проблему , проблема в

Code: Select all

procedure CheckAxe;
begin
CheckSave;
checkdead;
if (Count(AxeType) < 2) then
   begin
   repeat
   ClearJournal   
   FindTypeEx(AxeType,$000B,Ground,true);
   MoveItem(finditem, 1, Backpack, 0,0,0);
   wait(500);
   until (Count(AxeType) >= 2);
   end;
end;
Удаляю вызов процедуры , скрипт работает нормально , быстро скидывает дерево , быстро выходит из лодки .. Не ткнёте носом , что не так в моем Checkaxe ?
как минимум ; пропущена после ClearJournal и не понятно что в Сount форматирование вырвиглаз...
Сделай следующую вещь, запусти скрипт в дебаг моде, это значит, что в окне редактора поставь галочку enable debug mode потом нажми мышкой справа от номера строки на входе в эту процедуру, то-есть после начала, напротив CheckSave; потом кнопкой Step into которая ниже галочки пройди несколько циклов и найди свой инфинит луп.
Lotus
Neophyte
Neophyte
Posts: 12
Joined: 20.04.2012 18:53

Re: Добрый День. Ламбер.

Post by Lotus »

Не подскажите как правильно сделать ? :oops:
nah nah
Developer
Developer
Posts: 414
Joined: 13.07.2011 11:23
Contact:

Re: Добрый День. Ламбер.

Post by nah nah »

Зачем чистится журнал?
Новые топоры лежат на полу?
Lotus
Neophyte
Neophyte
Posts: 12
Joined: 20.04.2012 18:53

Re: Добрый День. Ламбер.

Post by Lotus »

Да , на полу .
Post Reply