Здраствуйте, у кого есть скрипт на ламбер?
Либо летает по руне в лес и домой или просто с дома бежал рубил при весе бежал в дом скидывал. Буду очень признателен, так как просмотрел либо непонятно там ничего как маркать и т.п.
Спасибо.
Forum in READ ONLY mode! All questions and discussions on Discord official server, invite link: https://discord.gg/VxsGzJ7
Ламбер
Вот могу своим поделиться, бегал на соскоме (opay).
Но я бегал на острове вокруг дома, никуда не летал и не прыгал.
Сначала надо создать массив деревьев,для это один раз запустить нижеприлагающийся скрипт. На диске С в корневом сосдастся файлик, где будут координаты деревьев.
Далее рабочий скрипт, в нём надо прописать тип оружия, которым рубишь, ИД сундука, координаты чара, стоящего возле сундука.Ну там всё написано. Если чара убивают, он бежит к сундуку и стоит гостом, пока не оживят.Стелс в трее мигает красным.
Но я бегал на острове вокруг дома, никуда не летал и не прыгал.
Сначала надо создать массив деревьев,для это один раз запустить нижеприлагающийся скрипт. На диске С в корневом сосдастся файлик, где будут координаты деревьев.
Code: Select all
Program FindTreesAndSaveTheyInFile;
var
treeTile: array [0 .. 34] of word;
myX, myY : word;
x, y : word;
treesNumber , Range : integer;
List : TStringList;
Const
MaxTreesNumber=250; // Максимальное кол-во деревьев, которое нам нужно пометить. ))) Пометить :)
MaxRange=180; // зона поиска деревьев.
TypesCount = 34; // Количество типов деревьев в нашем массиве.
// checks tile. if that what we need, it save file parameters in text file.
function CheckTile(x,y : word): boolean;
var
Tile0: TStaticCell;
LayersCount: word;
i,j: integer;
Begin
Result:=false;
Tile0:=ReadStaticsXY(X,Y,WorldNum);
LayersCount:=GetLayerCount(X,Y,WorldNum);
i:=0;
While i < LayersCount Do
begin
For j:=0 to TypesCount do
If Tile0.Statics[i].Tile=TreeTile[j] then
begin
//AddToSystemJournal('Tree founded!');
If newMoveXY(X,Y,false,1,true) then
begin
List.Add(IntToStr(Tile0.Statics[i].Tile)+' '+IntToStr(X)+' '+IntToStr(Y)+' '+IntToStr(Tile0.Statics[i].Z));
List.SaveToFile('C:/OsStealthTrees.dat');
treesNumber:= treesNumber+1;
If (treesNumber >= MaxTreesNumber) then
begin
AddToSystemJournal('Пометили достаточное количество деревьев!');
Result:= true;
Exit;
end;
end;
end;
i := i+1;
end;
End;
BEGIN
TreeTile[0]:=3274;
TreeTile[1]:=3275;
TreeTile[2]:=3276;
TreeTile[3]:=3277;
TreeTile[4]:=3280;
TreeTile[5]:=3283;
TreeTile[6]:=3286;
TreeTile[7]:=3288;
TreeTile[8]:=3290;
TreeTile[9]:=3293;
TreeTile[10]:=3296;
TreeTile[11]:=3299;
TreeTile[12]:=3302;
TreeTile[13]:=3320;
TreeTile[14]:=3323;
TreeTile[15]:=3326;
TreeTile[16]:=3329;
TreeTile[17]:=3393;
TreeTile[18]:=3394;
TreeTile[19]:=3395;
TreeTile[20]:=3396;
TreeTile[22]:=3438;
TreeTile[23]:=3439;
TreeTile[24]:=3440;
TreeTile[25]:=3441;
TreeTile[26]:=3442;
TreeTile[27]:=3460;
TreeTile[28]:=3462;
TreeTile[29]:=3476;
TreeTile[30]:=3480;
TreeTile[31]:=3484;
TreeTile[32]:=3488;
TreeTile[33]:=3492;
TreeTile[34]:=3496;
List := TStringList.Create;
Range:=1;
TreesNumber:=0;
myX:=getX(self);
myY:=getY(self);
While Range < maxRange do
begin
y:= myY-range;
For x:= myX-range to myX+range do begin If CheckTile(x,y) then break ; end;
If treesNumber >= MaxTreesNumber then break;
x:= myX+range;
For y:= myY-range+1 to myY+range do begin If CheckTile(x,y) then break ; end;
If treesNumber >= MaxTreesNumber then break;
y:= myY+range;
For x:= myX+range-1 downTo myX-range do begin If CheckTile(x,y) then break ; end;
If treesNumber >= MaxTreesNumber then break;
x:=myX-range;
For y:= myY+range-1 downTo myY-range+1 do begin If CheckTile(x,y) then break ; end;
If treesNumber >= MaxTreesNumber then break;
Range:= Range+1;
end;
List.Clear;
END.
Code: Select all
Program Lamber;
{$Include 'checkflow.inc'}
{$Include 'move.inc'}
{$Include 'all.inc'}
Const
Axe=$0F43; //тип орудия ,кторым рубим.
Chest=$4010D44D; // сундук с бинтаи и логами
xHome=2157; // координаты возле сундука.
yHome=2107; //
aName='JiHaN'; //твоё имя.
ClearBand=$0E21;
BloodyBand=$0E20;
Steak=$097B;
LogType=$1BDD;
Corpse=$2006;
type MiningRecord = Record
t,x,y : integer;
end;
VAR
StartM,STime: TDateTime;
MaxPosL,i,PointNumber,X,Y,aResult: integer;
MiningDim : array [0..500] of MiningRecord;
procedure GetRail(FileNam : String);
var
List : TStringList;
s : string;
begin
List := TStringList.Create;
List.LoadFromFile(FileNam);
for i:=0 to List.Count-1 do
begin
s := List.strings[i] + ' ';
MiningDim[i].t := StrToInt(Copy(s,1,Pos(' ',s)-1));
Delete(s,1,Pos(' ',s));
MiningDim[i].x := StrToInt(Copy(s,1,Pos(' ',s)-1));
Delete(s,1,Pos(' ',s));
MiningDim[i].y := StrToInt(Copy(s,1,Pos(' ',s)-1));
Delete(s,1,Pos(' ',s));
end;
MaxPosL := i;
end;
procedure hid;
Var
StartHid: TDateTime;
FailCounter: integer;
Begin
while not Hidden do
begin
If Dead OR (Life<Str) then Exit;
While Not Connected Do Wait(500);
StartHid:=Now;
//SetWarMode(true);
//wait(100);
//SetWarMode(false);
If WarMode then SetWarMode(false);
Wait(100);
// AddToSystemJournal(' Прячемся...');
UseSkill('Hiding');
WaitJournalLine(StartHid,'hidden yourself well|не удалось скрыться',5000);
If (InJournalBetweenTimes('не удалось скрыться',StartHid,Now)<>-1) then FailCounter:=FailCounter+1;
If (InJournalBetweenTimes('hidden yourself well',StartHid,Now)<>-1) then FailCounter:=0;
If FailCounter>6 then Wait(6000);
If (Life<100) then Exit;
end;
Wait(100);
End;
// aResult=1 - вырубили дерево
// aResult=2 - пеервес
// aResult=3 - ранены
// aResult=4 - мертвы
procedure Lumber;
VAR
FailCounter:integer;
SOut1,SOut2:String;
Begin
If Dead then Exit;
checklag;
While Not Connected Do Wait(500);
FailCounter:=0;
SetWarMode(false);
SOut1:=' reach this|Это слишком далеко отсюда|Тут не осталось |You put|Подолбив дерево|is attacking you|You have been';
SOut2:=' reach this|Это слишком далеко отсюда|Тут не осталось|You have been';
Hid;
Repeat
waitConnection(100);
If Dead then
begin
aResult:=4;
Exit;
end;
If Life<Str then
begin
If Dead or (Not Connected) then Exit;
AddToSystemJournal('Нас кто то бьёт.Уходим к домику лечиться.');
aResult:=3;
Exit;
end;
if TargetPresent then CancelTarget;
StartM:=Now;
Usetype(Axe,$FFFF);
WaitForTarget(5000);
WaitTargetTile((MiningDim[PointNumber].t),X,Y,getZ(self));
WaitJournalLine(StartM,Sout1,30000);
Wait(200);
If (InJournalBetweenTimes(SOut2,StartM,Now)<>-1) then
begin
aResult:=1;
eXit;
end;
If (InJournalBetweenTimes('Подолбив дерево',StartM,Now)<>-1) then FailCounter:=FailCounter+1
Else FailCounter:=0;
If FailCounter>10 then Wait(30000);
If Life<Str then
begin
If Dead or (Not Connected) then Exit;
AddToSystemJournal('Нас кто то бьёт.Уходим к домику лечиться.');
aResult:=3;
Exit;
end;
Hid;
if weight > (str*3) then
begin
AddToSystemJournal('Перегруз.Пора домой!');
aResult:=2;
Exit;
end;
Until false;
End;
/////////////////////////////////////////////////////////////////////////////////////
// Питание ;) //
/////////////////////////////////////////////////////////////////////////////////////
Procedure Eating;
Begin
If FindType(Steak,Chest)=0 then begin AddToSystemJournal('Еда закнчилась! Пополни запасы, иначе писец!'); Exit; end
Else Grab(FindItem,30);
Repeat
STime:=Now;
UseType(Steak,$FFFF);
Wait(500);
CheckLag;
AddToSystemJournal('Eating...Have fun!');
Until ((InJournalBetweenTimes('are stuffed!|are simply too full',STime,Now)<>-1) OR (Count(Steak)<1));
If FindType(Steak,backpack)>0 then
begin
AddToSystemJournal('Огрызки кидаем обратно');
MoveItem(FindItem,0,Chest,0,0,0);
CheckLag;
end;
End;
///////////////////////////////////////////////////////////////////////////////////////
// HEAL //
///////////////////////////////////////////////////////////////////////////////////////
procedure Heal;
Begin
If Dead OR (Life>=Str) then Exit;
While Not Connected Do Wait(500);
If FindType(ClearBand,Chest)>0 then Grab(finditem,50)
Else AddToSystemJournal(' Не могу найти чистых бинтов!') ;
wait(1000);
SetWarMode(false);
while ((life<str) and (Count(ClearBand)>0)) do
begin
STime:=Now;
UseType(ClearBand,$FFFF);
WaitTargetSelf;
wait(500);
WaitJournalLine(STime,'помогли|кладете|хотите сделать мумию?',10000);
end;
if FindType(ClearBand,backpack)>0 then
begin
moveitem(finditem,0,Chest,0,0,0);
Wait(300);
AddToSystemJournal(' остатки бинтов обратно в сундук... ') ;
end;
if FindType(BloodyBand,backpack)>0 then
begin
moveitem(finditem,0,Chest,0,0,0);
Wait(300);
AddToSystemJournal(' ... грязные бинты туда же... ') ;
end;
End;
procedure GoHomeAndUnload;
Begin
If Dead then Exit;
_move(xHome,yHome,0,true);
If Dead then Exit;
UseObject(Chest);
Wait(1000);
If findType(LogType,backpack)>0 then MoveItem(finditem,0,Chest,0,0,0);
wait(1000);
Eating;
Heal;
End;
procedure GhostGoHome;
Begin
AddToSystemJournal(' Ghost, go home! ') ;
_move(xHome,yHome,0,true);
while Dead do wait(5000);
waitConnection(1000);
UseObject(ObjAtLayer(Bpacklayer));
wait(1000);
UseObject(Chest);
wait(1000);
If FindType(Axe,Chest)>0 then
begin
Grab(finditem,1);
wait(1000);
end
Else
begin
fuLLLLDisconnect;
raiseException(erCustomError,'не могу найти орудие рубки!')
end;
Eating;
Heal;
End;
function findMyCorpse: boolean;
VAR aCorpse: cardinal;
Begin
result:=false;
checklag;
waitConnection(1000);
If Not Dead then Exit;
AddToSystemJournal(' WE ARE DEAD ') ;
AddToSystemJournal('coord X='+IntToStr(GetX(self))+', Y='+IntToStr(getY(self))) ;
Alarm;
If FindType(corpse,ground)>0 then
begin
STime:=Now;
clickOnObject(findItem);
WaitJournalLine(STime,'You see:',10000);
If (InJournalBetweenTimes(aName,STime,Now)<>-1) then
begin
AddToSystemJournal(' its me ! ') ;
aCorpse:=finditem;
Repeat
If FindType(corpse,ground)<>aCorpse then Ignore(finditem)
Else
begin
waitConnection(1000);
_move(getX(aCorpse),getY(aCorpse),0,true);
wait(1000);
end;
Until FindCount=0;
result:=true;
end;
end;
End;
BEGIN
FindVertical:=50;
FindDistance:=20;
SetARStatus(true);
WaitConnection(1000);
InitCheckFlow;
InitCheckHide;
AddToSystemJournal('Загружаем координаты из файла...');
GetRail('C:\lumberStealth.dat');
while true do
begin
For PointNumber:=0 to MaxPosL-1 do
begin
checklag;
waitConnection(300);
X:=(MiningDim[PointNumber].x);
Y:=(MiningDim[PointNumber].y);
_Move(X,Y,2,false);
Lumber;
If (aResult=2) OR (aResult=3) then GoHomeAndUnload;
If (aResult=4) OR Dead then
begin
setWarMode(true);
If NOT findMyCorpse then
begin
_Move(X,Y,2,true);
If Not findMyCorpse then GhostGoHome;
end;
end;
end;
end;
END.
скрипт пишет типо тут ошибка
Code: Select all
checklag;