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

Ламбер

тут можно задать вопрос по скриптингу
Post Reply
holy
Posts: 6
Joined: 27.05.2010 22:25

Ламбер

Post by holy »

Здраствуйте, у кого есть скрипт на ламбер?

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

Спасибо.
MuDaCk
Apprentice
Apprentice
Posts: 393
Joined: 10.10.2006 0:03
Contact:

Post by MuDaCk »

Обьясни на каком серваке ты играешь (Сфера, рануо, преаос). Нужно ли хавать? бить мобов? Или нужно только летать и рубить, никуда не складывая ресурсы?
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Post by Vizit0r »

преаос - это новый тип эмулятора?
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
holy
Posts: 6
Joined: 27.05.2010 22:25

Post by holy »

Сфера.

Скрипт чтобы рубил,как набирал вес шел к дому или летел(без разницы) скидывал в ящик доберал регов , если топоров в паке нету брал топор( 1-2 штуки) летал обратно и рубил.

Есть не обязательно.
holy
Posts: 6
Joined: 27.05.2010 22:25

Post by holy »

ап
grundick
Developer
Developer
Posts: 272
Joined: 31.01.2008 21:16

Post by grundick »

Вот могу своим поделиться, бегал на соскоме (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.
holy
Posts: 6
Joined: 27.05.2010 22:25

Post by holy »

скрипт пишет типо тут ошибка

Code: Select all

checklag;
holy
Posts: 6
Joined: 27.05.2010 22:25

Post by holy »

А есть файлы к етому скрипту?

{$Include 'checkflow.inc'}
{$Include 'move.inc'}
Post Reply