Перейти к содержанию

Добыча дерева (Lumberjacking)

Материал из Wiki Legnes

Скрипт рубки леса. Персонаж сам ходит между точками, валит лес и потом рубит сектор 7 на 7 вокруг себя. Для скрипта понадобиться 2 руны и место где можно выкладывать нарубленные logs.

// Скрипт на рубку леса, автор Jelu. 2023-08-21
// TODO: Добавить проверку на гвардов, добавить забор топоров из сундука

var endMsg = "You can't cut it down|Target can not be seen";
var dropAxe = 'may have been destroer';

// Серийник контейнера куда выгружать логи, смотрим через _info
var serialConteinerForLog = '0x0';

// Координаты возле контейнера на базе, смотреть координаты рядом а не сундука, чтобы персонаж мог подойти на эту координату, через .where
var coordinateConteinerForLog = [xxxx, yyy];

// Серийник руны домой. смотрим через _info
var serialRuneToHome = '0x0';

// Серийник руны в лес, смотрим через _info
var serialRuneToWood = '0x0';

// Координаты точек где будем рубить лес, можно добавить неограниченное кол-во точек, формат [xxxx, yyy]
var points = [
	[xxxx, yyy],
	[xxxx, yyy],
];

// Сохраняем последнюю позицию, для возобновления рубки
var savePoint = null;

function main() 
{
	Orion.Print('Начинаем рубить лес. Летим в лес');	
	//Реколимся обратно на улицу и продолжаем скрипт
	Orion.Cast('Recall', serialRuneToWood);
	Orion.Wait(3000);
	
	setHidding();

	for (var p = 0; p < points.length; p++) 
	{
		if (checkMaxWeight()) {
			moveHomeAndMoveLogToBag();
		}
		
		Orion.WalkTo(points[p][0], points[p][1], 0, 0);
		
		setHidding();
		
		Orion.Print('Первая рубка');
		lumberAction(points);
		
		Orion.Print('Вторая рубка');
		lumberAction(points);
	}
	
	Orion.Print('Летим домой, конец скрипта');

	// Реколимся домой
	Orion.Cast('Recall', serialRuneToHome);
	Orion.Wait(3000);	
}

function lumberAction(points)
{
    for (var x = -3; x <= 3; x++)
    {
      for (var y = -3; y <= 3; y++)
      {
        while (true)
        {      
          if (checkMaxWeight()) {
          	savePoint = points;
          	moveHomeAndMoveLogToBag();
          }
        
          Orion.ClearJournal();
          Orion.WaitTargetTileRelative('tree', x, y, 0);  
          Orion.UseType('0x0F43');  

          for (var i = 0; i < 100; i++) {
            if (Orion.InJournal('You put the|You hack at|' + endMsg))
              break;          
          
          	Orion.Wait(100);
          } 
          
          if (Orion.InJournal(endMsg))
            break;        
       }
      }
    }
}

function checkMaxWeight()
{
	return (Player.Weight() + 35) >= Player.MaxWeight();
}

function moveHomeAndMoveLogToBag()
{
	Orion.Print('Летим домой выгружаться');
	// Реколимся домой
	Orion.Cast('Recall', serialRuneToHome);
	Orion.Wait(3000);
	
	//Идем к сумке
	Orion.WalkTo(coordinateConteinerForLog[0], coordinateConteinerForLog[1], 0, 0);
	
	// Выгружаем все из сумки в контейнер
	while (Orion.Count('0x1BDD') > 0) {
		Orion.DragItemType('0x1BDD', 'any');
		Orion.DropDraggedItem(serialConteinerForLog);
		Orion.Wait(1000);
	}
	
	Orion.Print('Летим в лес дальше рубить');	
	//Реколимся обратно на улицу и продолжаем скрипт
	Orion.Cast('Recall', serialRuneToWood);
	Orion.Wait(3000);	
	
	if (savePoint != null) {
		Orion.WalkTo(savePoint[0], savePoint[1], 0, 0);
                Orion.Wait(3000);	
		setHidding();
		savePoint = null;
	}
}

function checkByHiddingRevealed()
{
	if (Orion.InJournal('You have beeen revealed')) {
		setHidding();
	}
}

function setHidding()
{
	for (var i=0; i<=10; i++) {
		Orion.ClearJournal();
		Orion.UseSkill('Hiding');
		Orion.Wait(3000);
		
		if (Orion.InJournal('You have hidden yourself')) {
			break;
		}
	}
}