Добыча дерева (Lumberjacking)
Внешний вид
Скрипт рубки леса. Персонаж сам ходит между точками, валит лес и потом рубит сектор 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';
// Координаты контейнера на базе
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;
}
}
}