It is currently 14 Dec 2024, 08:09

All times are UTC + 2 hours [ DST ]




Post new topic Reply to topic  [ 9 posts ] 
Author Message
PostPosted: 23 Jun 2024, 13:43 
Offline
Новичок

Joined: 15 Jun 2024, 19:01
Posts: 7
Всем привет , перелопатил весь форум в поиске простого скрипта на ламбер(orion). Из всего найденного один рабочий но с недочетами. ПРиходится каждый раз вбивать ид топора , не вырубает дерево полностью . Может кто помочь ?

function CutTreeByWorldLoc()
{
Orion.ClearJournal();
var treeWorldLocation = FindTreesInSurrArea();
for(i=0;i<treeWorldLocation.length;i++){
Orion.WalkTo(treeWorldLocation[i][0],treeWorldLocation[i][1],0);
Orion.Wait(1000);
Orion.UseObject('0x4405016A');
Orion.WaitTargetTile('tree',treeWorldLocation[i][0],treeWorldLocation[i][1],0);
Orion.Wait(7000);
if(Orion.InJournal('into your pack|but fail to', 'sys|my') != null){
LumberAgain(treeWorldLocation[i][0],treeWorldLocation[i][1]);
}

if(Player.Weight() >= Player.MaxWeight()-60) break;
}
}

function FindTreesInSurrArea()
{
var maxSearchDistance=30;
var treeWorldLocations=createArr(200,200);
var trueWorldLocCounter=0;

for(i=(Player.X()-maxSearchDistance);i<(Player.X()+maxSearchDistance+1);i++){
for(j=(Player.Y()-maxSearchDistance);j<(Player.Y()+maxSearchDistance+0);j++){
//Orion.Print("Searching X= " + i + "and Y= " + j + " location");
if(Orion.ValidateTargetTile('tree', i, j)){
Orion.Print("Found a tree, location is saved as " + (trueWorldLocCounter+1));
treeWorldLocations[trueWorldLocCounter][0]=i;
treeWorldLocations[trueWorldLocCounter][1]=j;
trueWorldLocCounter++;
}
}
}
treeWorldLocations.length=trueWorldLocCounter;
return treeWorldLocations;
}

function createArr(x, y) {
var arr = new Array(x);

for (var i = 0; i < x; i++) {
arr[i] = new Array(y);
}

return arr;
}

function LumberAgain(x,y)
{
var text = 'in your pack|but fail to|not enough wood|That is too far away|no line of sight|place any wood into';
while (!Player.Dead()){
Orion.UseObject('0x4405016A');
Orion.WaitTargetTile('tree',x,y,0);
var msg = Orion.WaitJournal(text, Orion.Now(), Orion.Now() + 5000, 'sys|my');
if(msg !=null) break;
Orion.Wait(100);
}
Orion.ClearJournal();
}


Top
 Profile  
 
PostPosted: 24 Jun 2024, 09:35 
Offline
Начинающий игрок

Joined: 18 Mar 2024, 09:31
Posts: 26
Orion.UseObject('0x4405016A')
В двух местах. Там id топора забит. Лучше перейти на Orion.UseType и там прописывать тип топора, а не id.


Top
 Profile  
 
PostPosted: 24 Jun 2024, 17:52 
Offline
Новичок

Joined: 15 Jun 2024, 19:01
Posts: 7
Buhlodonoser wrote:
Orion.UseObject('0x4405016A')
В двух местах. Там id топора забит. Лучше перейти на Orion.UseType и там прописывать тип топора, а не id.

Спасибо попробую , а что нужно подправить что бы вырубал дерево до конца а не бросал после одного добытого лога ?


Top
 Profile  
 
PostPosted: 24 Jun 2024, 18:24 
Offline
Начинающий игрок

Joined: 18 Mar 2024, 09:31
Posts: 26
А за это отвечает эта строчка
if(Orion.InJournal('into your pack|but fail to', 'sys|my')
Проверяет на нужное сообщение или его часть.
В данном варианте ищется сообщение на английском, нужно русское сообщение добавить.
Если не выйдет, пиши в личку.


Top
 Profile  
 
PostPosted: 26 Jun 2024, 09:04 
Offline
Игрок

Joined: 22 Sep 2018, 22:16
Posts: 133
Есть же нормальный скрипт, рубит полностью, ходит сам и портируется в дом и складывает все в сундук и назад.
Или который все вырубает на сколько то тайлов (можно указать)
Посмотрел, ваш код вроде все вырубает в округе. Есть еще такой получше.

Code:
function AutoLumber()
{
    PrintSelf('Started');

    var axeSerial = EquipAxe();
    if (axeSerial == '')
        return;

    var treeCoords = FindTrees(45);
    while (treeCoords.length > 0)
    {
        PrintSelf(treeCoords.length + ' trees remaining');       
        var closest = GetClosest(treeCoords);
        var treeCoord = treeCoords[closest];       
        treeCoords = Remove(treeCoords, closest);
       
        //MakeLastCarpentry();
        Orion.Wait(500);
       
        Orion.WalkTo(treeCoord.x, treeCoord.y, 0);
       
        var timeout = Orion.Now() + 3000;
       
        while (!InRange(treeCoord.x, treeCoord.y) && Orion.Now() < timeout)
        {
            PrintSelf('.');
            Orion.Wait(200);
        }
       
        if (InRange(treeCoord.x, treeCoord.y))
        {
            LumberTree(treeCoord.x, treeCoord.y, axeSerial);
        }
           
        PrintSelf('Tree Finished');
    }

    //MakeLastCarpentry();
    Orion.Wait(500);

    PrintSelf('Finished');
}

function Remove(arr, idx)
{
    var result = [];
    for (var i = 0; i < arr.length; ++i)
    {
        if (i != idx)
        {
           result.push(arr[i]);
     }
    }
   
    return result;
}

function FindTrees(range)
{
    var d = range;
   
    var treeCoords = [];
   
    var found = 0;
   
    for (x = Player.X() - d; x < Player.X() + d; ++x)
    {
        for (y = Player.Y() - d; y < Player.Y() + d; ++y)
        {
            if (Orion.ValidateTargetTile('tree', x, y))
            {
                PrintSelf('Tree at ' + x + ',' + y);
           
                var coord = { x: x, y: y};           
                treeCoords.push(coord);
           
                found++;               
            }
        }
   
    }
   
    PrintSelf('Found ' + found + ' trees');
    return treeCoords;
}

function GetClosest(treeCoords)
{
    var px = Player.X();
    var py = Player.Y();
   
    var closest = 0;
    var dsq = 1000;
   
    for (var i =0; i < treeCoords.length; ++i)
    {
        var dx = Math.abs(px - treeCoords[i].x);
        var dy = Math.abs(py - treeCoords[i].y);
   
        var dq = dx + dy;
       
        if (dq < dsq)
        {
            dsq = dq;
            closest = i;
        }
    }
   
    return closest;
}

function InRange(x, y)
{
    var dx = Math.abs(Player.X() - x);
    var dy = Math.abs(Player.Y() - y);
   
    return dx <2 && dy < 2;   
}

function LumberTree(x, y, axeSerial)
{
    var success = 'You put';
    var fail = 'You hack at the tree for a while, but fail to produce any useable wood.';
    var end = 'There is nothing|Willow|Cedar|Oak|Walnut';
    var tooFar = 'That is too far away';
   
    var timeout = Orion.Now() + 12000;
           
    while (true)
    {
        Orion.ClearJournal(success);
        Orion.ClearJournal(fail);
        Orion.ClearJournal(end);
        Orion.ClearJournal(tooFar);
       
        Orion.UseObject(axeSerial);
        Orion.WaitTargetTile('tree', x, y, 0);       
     
        var timeout = Orion.Now() + 12000;
           
        while (!(Orion.InJournal(success)
            || Orion.InJournal(fail)
            || Orion.InJournal(end)
            || Orion.InJournal(tooFar)
            || Orion.Now() > timeout))
        {
            Orion.Wait(200);
        }     

        if (Orion.InJournal(end) || Orion.InJournal(tooFar))
            return;
       
    }           
}

function EquipAxe()
{
    Orion.Unequip(2);
    Orion.Wait(500);

    var axeType = '0x0F43';
    var axes = Orion.FindType(axeType, '-1', backpack);
    Orion.Print(axes.length);
   
    if (axes.length == 0)
    {
        PrintSelf('Missing Axe');
        return '';
    }
   
    var axe = axes[0];   
    PrintSelf('Equiping Axe ' + axe);
    Orion.Equip(axe);
    Orion.Wait(500);
   
    return axe;
}

function MakeLastCarpentry()
{
    Orion.CancelWaitGump();
    Orion.WaitGump(Orion.CreateGumpHook(21));   

    var carpentryToolType = '0x1032';       
    Orion.UseType(carpentryToolType);
}

function PrintSelf(msg)
{
    var oldUse = Orion.OptionScaleSpeech();
   var oldDelay = Orion.OptionScaleSpeechDelay();
    Orion.OptionScaleSpeech(true);
   Orion.OptionScaleSpeechDelay(50);

    Orion.CharPrint('self', '30', msg);
   
    Orion.Wait(50);
    Orion.OptionScaleSpeech(oldUse);
   Orion.OptionScaleSpeechDelay(oldDelay);
}


Top
 Profile  
 
PostPosted: 26 Jun 2024, 17:41 
Offline
Новичок

Joined: 15 Jun 2024, 19:01
Posts: 7
Спасибо за помощь отписавшемся. Есть может у кого скрипт на переплавку однотипных предметов ?


Top
 Profile  
 
PostPosted: 02 Sep 2024, 16:06 
Offline
Игрок
User avatar

Joined: 31 Aug 2024, 20:41
Posts: 84
Я себе вот такой написал, это под орион. Можно качать БС, Тинкер. Можно просто переплавить однотипное, просто укажи тип предмета в переменной Goods. Тип в игре можно посмотреть командой _info

Естественно, клиент с орином должен быть запущен.

Инфа для скриптеров. Умышленно убрал ИД гампов, так как не понял, от чего они у разных инструментов зависят. Сначала думал от цвета инструмента, потом думал от уровня чара. Буду признателен, если кто-то расскажет.

Code:
// 0x13E3 - молот, 0x1EBC - тулс
var ToolType = '0x13E3';  // инструмент для изготовления

var Goods    = '0x13EB';  // производимое изделие
var Forge    = '0x1996';  // тип плавилки
var Ingots   = '0x1BEF';  // тип слитка


var menuButton = 1;

// Keys: 602 - Iron, 600 - Cupper
// Iron Ring Gloves 600
var GoodsButton = 600;




function AutoBlackSmith()
{
   while(true){
      
      if (!Craft() ) Smelt_Items();
      
      Orion.Wait(1000);
      
      
   }

}

function Craft()
{

   Orion.Print("[i] Начинаем ковку...");
   
   Orion.CancelTarget();

   Orion.UseType(ToolType, '0xFFFF');
   
   if (Orion.WaitForTarget(1000)) {
      var IngotsSerial = Orion.FindType(Ingots);
      if ( IngotsSerial.length > 0 ) {
         Orion.TargetType(Ingots, -1, 'backpack');
      } else {
         Orion.Print("Закончились слитки: "+Ingots);
         return false;
      }   
      
   }else {
      Orion.Print("Не удалось использовать инструмент для изготовления: "+ToolType);
      return false;
   }
   
   if (Orion.WaitForGump(1000))
   {
      var gump0 = Orion.GetGump('last');
      if ((gump0 !== null) && (!gump0.Replayed()) )
      {
         var gumpHook0 = Orion.CreateGumpHook(menuButton);
         gumpHook0.AddEntry(1, "");
         gump0.Select(gumpHook0);
         Orion.Wait(100);
      }
   }
   
   if (Orion.WaitForGump(1000))
   {
      var gump1 = Orion.GetGump('last');
      if ((gump1 !== null) && (!gump1.Replayed()) )
      {
         var gumpHook1 = Orion.CreateGumpHook(GoodsButton);
         gumpHook1.AddEntry(1, "");
         gump1.Select(gumpHook1);
         Orion.Wait(100);
      }
   }
   
   var msg  = Orion.WaitJournal('ресурсов|Требуется|не получилось', Orion.Now() -3000, Orion.Now() +6000);
   if ( msg != null ) { return false; }
   
   return true;
}

function Smelt_Items()
{
   
   Orion.Print("[i] Начинаем переплавку...");
   
   Orion.CancelTarget();
   
   var forgeSerial = Orion.FindType(Forge,-1,'ground','', 10);
   if(forgeSerial)
   {
      var forge = Orion.FindObject(forgeSerial);
      if(forge)
      {         
         if(Orion.WalkTo(forge.X(),forge.Y(),forge.Z(),1))
         {
            
            var itemsInBackup = Orion.FindType(Goods,-1, 'backpack');
            
            if (itemsInBackup.length == 0) {
               Orion.Print("Нет предметов для перевлавки");      
               return false;
            }
            
            for (var i =0; i < itemsInBackup.length; i++){
               Orion.UseObject(forgeSerial);
               if (Orion.WaitForTarget(1000))
                  Orion.TargetType(Goods,'any','backpack');
                  
               Orion.Wait(500);
            }
            
         } else {
            Orion.Print("Не нашли плавилку");   
            Orion.PauseScript();   
         }
      }
   }
}




Top
 Profile  
 
PostPosted: 04 Sep 2024, 12:14 
Offline
Игрок

Joined: 14 Mar 2023, 07:38
Posts: 154
Twilly wrote:
так как не понял, от чего они у разных инструментов зависят. Сначала думал от цвета инструмента, потом думал от уровня чара. Буду признателен, если кто-то расскажет.


Они (Gump ID) тупо пасаяно меняются. Заманали нах. Каждая перезагрузка или хз чо там как и все ИД гампов другие. ПЕСЕЦ бл. Нах так делать.


Top
 Profile  
 
PostPosted: 04 Sep 2024, 17:26 
Offline
Игрок
User avatar

Joined: 31 Aug 2024, 20:41
Posts: 84
Возможно, боролись с ботоводами и это осталась как одна из мер защиты. Динамические ID. Или специфика платформы. Не важно, это только повышает уровень вызова перед скриптером. ))

Да, я был сначала удивлен, что мой чар, который хотел себе кирку сделать, вдруг улетел на турнир, но потом быстро понял почему. ))


Top
 Profile  
 
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 9 posts ] 

All times are UTC + 2 hours [ DST ]


Who is online

Users browsing this forum: No registered users and 4 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group