1000 и 1 автоматизация с macro keybind mod
В силу специфики HiTech серверов игроки пытаются автоматизировать всё, до чего дотягиваются руки. В рамках этого гайда речь пойдёт об macro keybind mod'е - вещи, которая, на мой взгляд очень недооценена. Для первых шагов было выбрано самое болезненное направление на ранних этапах игры - ПОХОД В ШАХТУ
Но сперва - лирическое отступление. В теме с афк машиной и наградами присутствует скрипт, дёргающий персонажа во все стороны
*тык*. Простой и изящный, он имеет один изъян - его не выключишь по кнопке. Давайте попробуем это исправить. Если Вы кодили хотя бы раз в жизни, следующий пример будет Вам понятен, однако вызовет острое чувство несправедливости и несовершенности этого мира
IF(working)
LOG(&cOff!)
UNSET(working)
STOP()
ELSE
IF(!working)
LOG(&aOn!)
SET(working)
Давайте разберём по частям мною написанное... Вводится некая переменная working, имеющая логический тип данных, соответственно умеющая принимать значение 0 (UNSET(working)) и 1 (SET(working)). При нажатии кнопки бинда скрипт начинает проверять, чему же равна эта переменная. Если она 1(скрипт уже запущен), то она станет равна 0 и скрипт завершит работу. Команда LOG выводит в чат сообщение по типу системного, которое видите только Вы, увы, только на латинице. Пока что всё очень просто. Итоговый скрипт получился такой:
$${IF(working); LOG(&cOff!); UNSET(working); STOP(); ELSE; IF(!working); LOG(&aOn!); SET(working); do;look(north);wait(100ms);look(south);wait(100 ms);look(0,10);wait(100ms);look(10,0);wait(100ms); look(0,-10);wait(100ms);look(-10,0);wait(100ms);look(east);wait(100ms);look(west );wait(100ms);look(up);wait(100ms);look(down);wait (100ms);loop;endif}$$
Ну а теперь, то, зачем мы здесь собрались. Бот, копающий тоннели. Первая версия бота будет выполнять очень базовые функции. Основной механизм действия понятен - нажимать лкм, ждать, идти вперёд. Получившаяся конструкция выглядит следующим образом
$${if(mining); log(&cAutoMine Stopped); unset(mining); stop(); keyup(forward);else; if(!mining); log(&aStarting AutoMine); set(mining); do; do(15); key(attack); loop; keydown(forward); wait(100ms); keyup(forward); loop; endif;endif;}$$
команды keyup и keydown соответственно либо отжимают либо зажимают кнопку, что используется в скрипте для имитации нажатия кнопки "вперёд" а так же для кнопки "атака"
Работа такого чудо-скрипта показана на видео.
Очевидно, таким результатом мы не удовлетворены, а значит ищем путь к развитию получившегося.
Для финальной итерации необходимо улучшить логическую модель нашего бота. На сей раз алгоритм получился следующий:
- Проверить, что за блоки стоят перед игроком.
- Если эти блоки не воздух, то посмотреть на них.
- Перевести логическую переменную в состояние, необходимое для начала добычи блока.
- Добыть блоки перед собой, двинуться дальше.
Как же мы реализуем "глаза" нашему скрипту?
С помощью команды GETID и набора координат x y z мы можем легко узнать, что же это за блок такой там стоит. Осталось только раздобыть координаты. В этом нам поможет гроза всех школьников, сдающих информатику в 11, Леонард Эллер. Он предложил концепцию, названную в честь него углами Эллера. Выглядят они вот так:
https://upload.wikimedia.org/wikiped...angles.svg.png.
Прибегнув к небольшим математическим подсчётам, мы вычисляем позиции наших блоков для всех четырёх сторон света.
IF(%DIRECTION% = "N")
#block_x[0] = (%XPOS% + 0)
#block_y[0] = (%YPOS% + 0)
#block_z[0] = (%ZPOS% - 3)
#block_yaw[0] = 362
#block_pitch[0] = 24
#block_x[1] = (%XPOS% + 0)
#block_y[1] = (%YPOS% + 1)
#block_z[1] = (%ZPOS% - 3)
#block_yaw[1] = 360
#block_pitch[1] = 1
#block_x[2] = (%XPOS% + 0)
#block_y[2] = (%YPOS% + 2)
#block_z[2] = (%ZPOS% - 3)
#block_yaw[2] = 361
#block_pitch[2] = 342
#block_x[3] = (%XPOS% + 1)
#block_y[3] = (%YPOS% + 0)
#block_z[3] = (%ZPOS% - 3)
#block_yaw[3] = 378
#block_pitch[3] = 22
#block_x[4] = (%XPOS% + 1)
#block_y[4] = (%YPOS% + 1)
#block_z[4] = (%ZPOS% - 3)
#block_yaw[4] = 378
#block_pitch[4] = 3
#block_x[5] = (%XPOS% + 1)
#block_y[5] = (%YPOS% + 2)
#block_z[5] = (%ZPOS% - 3)
#block_yaw[5] = 378
#block_pitch[5] = 342
#block_x[6] = (%XPOS% + 0)
#block_y[6] = (%YPOS% + 3)
#block_z[6] = (%ZPOS% - 3)
#block_yaw[6] = 361
#block_pitch[6] = 323
#block_x[7] = (%XPOS% - 1)
#block_y[7] = (%YPOS% + 0)
#block_z[7] = (%ZPOS% - 3)
#block_yaw[7] = 339
#block_pitch[7] = 20
#block_x[8] = (%XPOS% - 1)
#block_y[8] = (%YPOS% + 1)
#block_z[8] = (%ZPOS% - 3)
#block_yaw[8] = 339
#block_pitch[8] = 2
#block_x[9] = (%XPOS% - 1)
#block_y[9] = (%YPOS% + 2)
#block_z[9] = (%ZPOS% - 3)
#block_yaw[9] = 339
#block_pitch[9] = 343
#block_x[10] = (%XPOS% + 0)
#block_y[10] = (%YPOS% + 2)
#block_z[10] = (%ZPOS% - 4)
#block_yaw[10] = 360
#block_pitch[10] = 347
#block_x[11] = (%XPOS% + 0)
#block_y[11] = (%YPOS% + 1)
#block_z[11] = (%ZPOS% - 4)
#block_yaw[11] = 360
#block_pitch[11] = 3
#block_x[12] = (%XPOS% + 0)
#block_y[12] = (%YPOS% + 0)
#block_z[12] = (%ZPOS% - 4)
#block_yaw[12] = 360
#block_pitch[12] = 18
#block_x[13] = (%XPOS% + 0)
#block_y[13] = (%YPOS% + 0)
#block_z[13] = (%ZPOS% - 1)
#block_yaw[13] = 359
#block_pitch[13] = 48
ELSEIF(%DIRECTION% = "E")
#block_x[0] = (%XPOS% + 3)
#block_y[0] = (%YPOS% + 0)
#block_z[0] = (%ZPOS% + 0)
#block_yaw[0] = 452
#block_pitch[0] = 24
#block_x[1] = (%XPOS% + 3)
#block_y[1] = (%YPOS% + 1)
#block_z[1] = (%ZPOS% + 0)
#block_yaw[1] = 450
#block_pitch[1] = 1
#block_x[2] = (%XPOS% + 3)
#block_y[2] = (%YPOS% + 2)
#block_z[2] = (%ZPOS% + 0)
#block_yaw[2] = 451
#block_pitch[2] = 342
#block_x[3] = (%XPOS% + 3)
#block_y[3] = (%YPOS% + 0)
#block_z[3] = (%ZPOS% + 1)
#block_yaw[3] = 468
#block_pitch[3] = 22
#block_x[4] = (%XPOS% + 3)
#block_y[4] = (%YPOS% + 1)
#block_z[4] = (%ZPOS% + 1)
#block_yaw[4] = 468
#block_pitch[4] = 3
#block_x[5] = (%XPOS% + 3)
#block_y[5] = (%YPOS% + 2)
#block_z[5] = (%ZPOS% + 1)
#block_yaw[5] = 468
#block_pitch[5] = 342
#block_x[6] = (%XPOS% + 3)
#block_y[6] = (%YPOS% + 3)
#block_z[6] = (%ZPOS% + 0)
#block_yaw[6] = 451
#block_pitch[6] = 323
#block_x[7] = (%XPOS% + 3)
#block_y[7] = (%YPOS% + 0)
#block_z[7] = (%ZPOS% - 1)
#block_yaw[7] = 429
#block_pitch[7] = 20
#block_x[8] = (%XPOS% + 3)
#block_y[8] = (%YPOS% + 1)
#block_z[8] = (%ZPOS% - 1)
#block_yaw[8] = 429
#block_pitch[8] = 2
#block_x[9] = (%XPOS% + 3)
#block_y[9] = (%YPOS% + 2)
#block_z[9] = (%ZPOS% - 1)
#block_yaw[9] = 429
#block_pitch[9] = 343
#block_x[10] = (%XPOS% + 4)
#block_y[10] = (%YPOS% + 2)
#block_z[10] = (%ZPOS% + 0)
#block_yaw[10] = 450
#block_pitch[10] = 347
#block_x[11] = (%XPOS% + 4)
#block_y[11] = (%YPOS% + 1)
#block_z[11] = (%ZPOS% + 0)
#block_yaw[11] = 450
#block_pitch[11] = 3
#block_x[12] = (%XPOS% + 4)
#block_y[12] = (%YPOS% + 0)
#block_z[12] = (%ZPOS% + 0)
#block_yaw[12] = 450
#block_pitch[12] = 18
#block_x[13] = (%XPOS% + 1)
#block_y[13] = (%YPOS% + 0)
#block_z[13] = (%ZPOS% + 0)
#block_yaw[13] = 449
#block_pitch[13] = 48
ELSEIF(%DIRECTION% = "S")
#block_x[0] = (%XPOS% + 0)
#block_y[0] = (%YPOS% + 0)
#block_z[0] = (%ZPOS% + 3)
#block_yaw[0] = 182
#block_pitch[0] = 24
#block_x[1] = (%XPOS% + 0)
#block_y[1] = (%YPOS% + 1)
#block_z[1] = (%ZPOS% + 3)
#block_yaw[1] = 180
#block_pitch[1] = 1
#block_x[2] = (%XPOS% + 0)
#block_y[2] = (%YPOS% + 2)
#block_z[2] = (%ZPOS% + 3)
#block_yaw[2] = 181
#block_pitch[2] = 342
#block_x[3] = (%XPOS% - 1)
#block_y[3] = (%YPOS% + 0)
#block_z[3] = (%ZPOS% + 3)
#block_yaw[3] = 198
#block_pitch[3] = 22
#block_x[4] = (%XPOS% - 1)
#block_y[4] = (%YPOS% + 1)
#block_z[4] = (%ZPOS% + 3)
#block_yaw[4] = 198
#block_pitch[4] = 3
#block_x[5] = (%XPOS% - 1)
#block_y[5] = (%YPOS% + 2)
#block_z[5] = (%ZPOS% + 3)
#block_yaw[5] = 198
#block_pitch[5] = 342
#block_x[6] = (%XPOS% + 0)
#block_y[6] = (%YPOS% + 3)
#block_z[6] = (%ZPOS% + 3)
#block_yaw[6] = 181
#block_pitch[6] = 323
#block_x[7] = (%XPOS% + 1)
#block_y[7] = (%YPOS% + 0)
#block_z[7] = (%ZPOS% + 3)
#block_yaw[7] = 519
#block_pitch[7] = 20
#block_x[8] = (%XPOS% + 1)
#block_y[8] = (%YPOS% + 1)
#block_z[8] = (%ZPOS% + 3)
#block_yaw[8] = 519
#block_pitch[8] = 2
#block_x[9] = (%XPOS% + 1)
#block_y[9] = (%YPOS% + 2)
#block_z[9] = (%ZPOS% + 3)
#block_yaw[9] = 519
#block_pitch[9] = 343
#block_x[10] = (%XPOS% + 0)
#block_y[10] = (%YPOS% + 2)
#block_z[10] = (%ZPOS% + 4)
#block_yaw[10] = 180
#block_pitch[10] = 347
#block_x[11] = (%XPOS% + 0)
#block_y[11] = (%YPOS% + 1)
#block_z[11] = (%ZPOS% + 4)
#block_yaw[11] = 180
#block_pitch[11] = 3
#block_x[12] = (%XPOS% + 0)
#block_y[12] = (%YPOS% + 0)
#block_z[12] = (%ZPOS% + 4)
#block_yaw[12] = 180
#block_pitch[12] = 18
#block_x[13] = (%XPOS% + 0)
#block_y[13] = (%YPOS% + 0)
#block_z[13] = (%ZPOS% + 1)
#block_yaw[13] = 539
#block_pitch[13] = 48
ELSEIF(%DIRECTION% = "W")
#block_x[0] = (%XPOS% - 3)
#block_y[0] = (%YPOS% + 0)
#block_z[0] = (%ZPOS% + 0)
#block_yaw[0] = 272
#block_pitch[0] = 24
#block_x[1] = (%XPOS% - 3)
#block_y[1] = (%YPOS% + 1)
#block_z[1] = (%ZPOS% + 0)
#block_yaw[1] = 270
#block_pitch[1] = 1
#block_x[2] = (%XPOS% - 3)
#block_y[2] = (%YPOS% + 2)
#block_z[2] = (%ZPOS% + 0)
#block_yaw[2] = 271
#block_pitch[2] = 342
#block_x[3] = (%XPOS% - 3)
#block_y[3] = (%YPOS% + 0)
#block_z[3] = (%ZPOS% - 1)
#block_yaw[3] = 288
#block_pitch[3] = 22
#block_x[4] = (%XPOS% - 3)
#block_y[4] = (%YPOS% + 1)
#block_z[4] = (%ZPOS% - 1)
#block_yaw[4] = 288
#block_pitch[4] = 3
#block_x[5] = (%XPOS% - 3)
#block_y[5] = (%YPOS% + 2)
#block_z[5] = (%ZPOS% - 1)
#block_yaw[5] = 288
#block_pitch[5] = 342
#block_x[6] = (%XPOS% - 3)
#block_y[6] = (%YPOS% + 3)
#block_z[6] = (%ZPOS% + 0)
#block_yaw[6] = 271
#block_pitch[6] = 323
#block_x[7] = (%XPOS% - 3)
#block_y[7] = (%YPOS% + 0)
#block_z[7] = (%ZPOS% + 1)
#block_yaw[7] = 249
#block_pitch[7] = 20
#block_x[8] = (%XPOS% - 3)
#block_y[8] = (%YPOS% + 1)
#block_z[8] = (%ZPOS% + 1)
#block_yaw[8] = 249
#block_pitch[8] = 2
#block_x[9] = (%XPOS% - 3)
#block_y[9] = (%YPOS% + 2)
#block_z[9] = (%ZPOS% + 1)
#block_yaw[9] = 249
#block_pitch[9] = 343
#block_x[10] = (%XPOS% - 4)
#block_y[10] = (%YPOS% + 2)
#block_z[10] = (%ZPOS% + 0)
#block_yaw[10] = 270
#block_pitch[10] = 347
#block_x[11] = (%XPOS% - 4)
#block_y[11] = (%YPOS% + 1)
#block_z[11] = (%ZPOS% + 0)
#block_yaw[11] = 270
#block_pitch[11] = 3
#block_x[12] = (%XPOS% - 4)
#block_y[12] = (%YPOS% + 0)
#block_z[12] = (%ZPOS% + 0)
#block_yaw[12] = 270
#block_pitch[12] = 18
#block_x[13] = (%XPOS% - 1)
#block_y[13] = (%YPOS% + 0)
#block_z[13] = (%ZPOS% + 0)
#block_yaw[13] = 269
#block_pitch[13] = 48
ENDIF
Совершив необходимые расчеты, реализуем предложенный логический алгоритм, снабдив его маленьким бонусом. Если скрипт обнаружит неподалёку от себя лаву или воду, то перестанет копать и завершит работу.
IF(mining)
LOG(&cMiner Stopped!)
UNSET(mining)
KEYUP(forward)
STOP()
ELSE
IF(!mining)
LOG(&aMiner Started!)
SET(mining)
UNSAFE(0)
DO
$$<tunnelDig_blockPositions.txt>
FOR(#i,0,13)
GETID(%#block_x[%#i%]%,%#block_y[%#i%]%,%#block_z[%#i%]%,&id)
IF((%&id%=="water")||(%&id%=="lava")||(%&id%=="flo wing_lava"))
KEYUP(forward)
LOG(&aWater/lava detected!)
LOG(&aMiner Stopped!)
STOP
ENDIF
NEXT
SET(done)
FOR(#i,0,10)
GETID(%#block_x[%#i%]%,%#block_y[%#i%]%,%#block_z[%#i%]%,&id)
IF(%&id% != "air")
LOOK(%#block_yaw[%#i%]%,%#block_pitch[%#i%]%)
UNSET(done)
BREAK
ENDIF
NEXT
IF(done)
KEYDOWN(forward)
ELSE
KEY(attack)
KEYUP(forward)
ENDIF
SPRINT
WAIT(1t)
LOOP
ENDUNSAFE
Финальная часть гайда - как собрать и заставить работать то, что мы сделали ранее. Врубаем хакермод и заходим по пути AppData\Roaming\.minecraftonly\Industrial\liteconf ig\common\macros. Здесь лежат все наши макросы, записаные в txt файлики. Создаём два новых - tunnelDig.txt и tunnelDig_blockPositions.txt. Запихиваем в них код.
IF(mining)
LOG(&cMiner Stopped!)
UNSET(mining)
KEYUP(forward)
STOP()
ELSE
IF(!mining)
LOG(&aMiner Started!)
SET(mining)
UNSAFE(0)
DO
$$<tunnelDig_blockPositions.txt>
FOR(#i,0,13)
GETID(%#block_x[%#i%]%,%#block_y[%#i%]%,%#block_z[%#i%]%,&id)
IF((%&id%=="water")||(%&id%=="lava")||(%&id%=="flo wing_lava"))
KEYUP(forward)
LOG(&aWater/lava detected!)
LOG(&aMiner Stopped!)
STOP
ENDIF
NEXT
SET(done)
FOR(#i,0,10)
GETID(%#block_x[%#i%]%,%#block_y[%#i%]%,%#block_z[%#i%]%,&id)
IF(%&id% != "air")
LOOK(%#block_yaw[%#i%]%,%#block_pitch[%#i%]%)
UNSET(done)
BREAK
ENDIF
NEXT
IF(done)
KEYDOWN(forward)
ELSE
KEY(attack)
KEYUP(forward)
ENDIF
SPRINT
WAIT(1t)
LOOP
ENDUNSAFE
IF(%DIRECTION% = "N")
#block_x[0] = (%XPOS% + 0)
#block_y[0] = (%YPOS% + 0)
#block_z[0] = (%ZPOS% - 3)
#block_yaw[0] = 362
#block_pitch[0] = 24
#block_x[1] = (%XPOS% + 0)
#block_y[1] = (%YPOS% + 1)
#block_z[1] = (%ZPOS% - 3)
#block_yaw[1] = 360
#block_pitch[1] = 1
#block_x[2] = (%XPOS% + 0)
#block_y[2] = (%YPOS% + 2)
#block_z[2] = (%ZPOS% - 3)
#block_yaw[2] = 361
#block_pitch[2] = 342
#block_x[3] = (%XPOS% + 1)
#block_y[3] = (%YPOS% + 0)
#block_z[3] = (%ZPOS% - 3)
#block_yaw[3] = 378
#block_pitch[3] = 22
#block_x[4] = (%XPOS% + 1)
#block_y[4] = (%YPOS% + 1)
#block_z[4] = (%ZPOS% - 3)
#block_yaw[4] = 378
#block_pitch[4] = 3
#block_x[5] = (%XPOS% + 1)
#block_y[5] = (%YPOS% + 2)
#block_z[5] = (%ZPOS% - 3)
#block_yaw[5] = 378
#block_pitch[5] = 342
#block_x[6] = (%XPOS% + 0)
#block_y[6] = (%YPOS% + 3)
#block_z[6] = (%ZPOS% - 3)
#block_yaw[6] = 361
#block_pitch[6] = 323
#block_x[7] = (%XPOS% - 1)
#block_y[7] = (%YPOS% + 0)
#block_z[7] = (%ZPOS% - 3)
#block_yaw[7] = 339
#block_pitch[7] = 20
#block_x[8] = (%XPOS% - 1)
#block_y[8] = (%YPOS% + 1)
#block_z[8] = (%ZPOS% - 3)
#block_yaw[8] = 339
#block_pitch[8] = 2
#block_x[9] = (%XPOS% - 1)
#block_y[9] = (%YPOS% + 2)
#block_z[9] = (%ZPOS% - 3)
#block_yaw[9] = 339
#block_pitch[9] = 343
#block_x[10] = (%XPOS% + 0)
#block_y[10] = (%YPOS% + 2)
#block_z[10] = (%ZPOS% - 4)
#block_yaw[10] = 360
#block_pitch[10] = 347
#block_x[11] = (%XPOS% + 0)
#block_y[11] = (%YPOS% + 1)
#block_z[11] = (%ZPOS% - 4)
#block_yaw[11] = 360
#block_pitch[11] = 3
#block_x[12] = (%XPOS% + 0)
#block_y[12] = (%YPOS% + 0)
#block_z[12] = (%ZPOS% - 4)
#block_yaw[12] = 360
#block_pitch[12] = 18
#block_x[13] = (%XPOS% + 0)
#block_y[13] = (%YPOS% + 0)
#block_z[13] = (%ZPOS% - 1)
#block_yaw[13] = 359
#block_pitch[13] = 48
ELSEIF(%DIRECTION% = "E")
#block_x[0] = (%XPOS% + 3)
#block_y[0] = (%YPOS% + 0)
#block_z[0] = (%ZPOS% + 0)
#block_yaw[0] = 452
#block_pitch[0] = 24
#block_x[1] = (%XPOS% + 3)
#block_y[1] = (%YPOS% + 1)
#block_z[1] = (%ZPOS% + 0)
#block_yaw[1] = 450
#block_pitch[1] = 1
#block_x[2] = (%XPOS% + 3)
#block_y[2] = (%YPOS% + 2)
#block_z[2] = (%ZPOS% + 0)
#block_yaw[2] = 451
#block_pitch[2] = 342
#block_x[3] = (%XPOS% + 3)
#block_y[3] = (%YPOS% + 0)
#block_z[3] = (%ZPOS% + 1)
#block_yaw[3] = 468
#block_pitch[3] = 22
#block_x[4] = (%XPOS% + 3)
#block_y[4] = (%YPOS% + 1)
#block_z[4] = (%ZPOS% + 1)
#block_yaw[4] = 468
#block_pitch[4] = 3
#block_x[5] = (%XPOS% + 3)
#block_y[5] = (%YPOS% + 2)
#block_z[5] = (%ZPOS% + 1)
#block_yaw[5] = 468
#block_pitch[5] = 342
#block_x[6] = (%XPOS% + 3)
#block_y[6] = (%YPOS% + 3)
#block_z[6] = (%ZPOS% + 0)
#block_yaw[6] = 451
#block_pitch[6] = 323
#block_x[7] = (%XPOS% + 3)
#block_y[7] = (%YPOS% + 0)
#block_z[7] = (%ZPOS% - 1)
#block_yaw[7] = 429
#block_pitch[7] = 20
#block_x[8] = (%XPOS% + 3)
#block_y[8] = (%YPOS% + 1)
#block_z[8] = (%ZPOS% - 1)
#block_yaw[8] = 429
#block_pitch[8] = 2
#block_x[9] = (%XPOS% + 3)
#block_y[9] = (%YPOS% + 2)
#block_z[9] = (%ZPOS% - 1)
#block_yaw[9] = 429
#block_pitch[9] = 343
#block_x[10] = (%XPOS% + 4)
#block_y[10] = (%YPOS% + 2)
#block_z[10] = (%ZPOS% + 0)
#block_yaw[10] = 450
#block_pitch[10] = 347
#block_x[11] = (%XPOS% + 4)
#block_y[11] = (%YPOS% + 1)
#block_z[11] = (%ZPOS% + 0)
#block_yaw[11] = 450
#block_pitch[11] = 3
#block_x[12] = (%XPOS% + 4)
#block_y[12] = (%YPOS% + 0)
#block_z[12] = (%ZPOS% + 0)
#block_yaw[12] = 450
#block_pitch[12] = 18
#block_x[13] = (%XPOS% + 1)
#block_y[13] = (%YPOS% + 0)
#block_z[13] = (%ZPOS% + 0)
#block_yaw[13] = 449
#block_pitch[13] = 48
ELSEIF(%DIRECTION% = "S")
#block_x[0] = (%XPOS% + 0)
#block_y[0] = (%YPOS% + 0)
#block_z[0] = (%ZPOS% + 3)
#block_yaw[0] = 182
#block_pitch[0] = 24
#block_x[1] = (%XPOS% + 0)
#block_y[1] = (%YPOS% + 1)
#block_z[1] = (%ZPOS% + 3)
#block_yaw[1] = 180
#block_pitch[1] = 1
#block_x[2] = (%XPOS% + 0)
#block_y[2] = (%YPOS% + 2)
#block_z[2] = (%ZPOS% + 3)
#block_yaw[2] = 181
#block_pitch[2] = 342
#block_x[3] = (%XPOS% - 1)
#block_y[3] = (%YPOS% + 0)
#block_z[3] = (%ZPOS% + 3)
#block_yaw[3] = 198
#block_pitch[3] = 22
#block_x[4] = (%XPOS% - 1)
#block_y[4] = (%YPOS% + 1)
#block_z[4] = (%ZPOS% + 3)
#block_yaw[4] = 198
#block_pitch[4] = 3
#block_x[5] = (%XPOS% - 1)
#block_y[5] = (%YPOS% + 2)
#block_z[5] = (%ZPOS% + 3)
#block_yaw[5] = 198
#block_pitch[5] = 342
#block_x[6] = (%XPOS% + 0)
#block_y[6] = (%YPOS% + 3)
#block_z[6] = (%ZPOS% + 3)
#block_yaw[6] = 181
#block_pitch[6] = 323
#block_x[7] = (%XPOS% + 1)
#block_y[7] = (%YPOS% + 0)
#block_z[7] = (%ZPOS% + 3)
#block_yaw[7] = 519
#block_pitch[7] = 20
#block_x[8] = (%XPOS% + 1)
#block_y[8] = (%YPOS% + 1)
#block_z[8] = (%ZPOS% + 3)
#block_yaw[8] = 519
#block_pitch[8] = 2
#block_x[9] = (%XPOS% + 1)
#block_y[9] = (%YPOS% + 2)
#block_z[9] = (%ZPOS% + 3)
#block_yaw[9] = 519
#block_pitch[9] = 343
#block_x[10] = (%XPOS% + 0)
#block_y[10] = (%YPOS% + 2)
#block_z[10] = (%ZPOS% + 4)
#block_yaw[10] = 180
#block_pitch[10] = 347
#block_x[11] = (%XPOS% + 0)
#block_y[11] = (%YPOS% + 1)
#block_z[11] = (%ZPOS% + 4)
#block_yaw[11] = 180
#block_pitch[11] = 3
#block_x[12] = (%XPOS% + 0)
#block_y[12] = (%YPOS% + 0)
#block_z[12] = (%ZPOS% + 4)
#block_yaw[12] = 180
#block_pitch[12] = 18
#block_x[13] = (%XPOS% + 0)
#block_y[13] = (%YPOS% + 0)
#block_z[13] = (%ZPOS% + 1)
#block_yaw[13] = 539
#block_pitch[13] = 48
ELSEIF(%DIRECTION% = "W")
#block_x[0] = (%XPOS% - 3)
#block_y[0] = (%YPOS% + 0)
#block_z[0] = (%ZPOS% + 0)
#block_yaw[0] = 272
#block_pitch[0] = 24
#block_x[1] = (%XPOS% - 3)
#block_y[1] = (%YPOS% + 1)
#block_z[1] = (%ZPOS% + 0)
#block_yaw[1] = 270
#block_pitch[1] = 1
#block_x[2] = (%XPOS% - 3)
#block_y[2] = (%YPOS% + 2)
#block_z[2] = (%ZPOS% + 0)
#block_yaw[2] = 271
#block_pitch[2] = 342
#block_x[3] = (%XPOS% - 3)
#block_y[3] = (%YPOS% + 0)
#block_z[3] = (%ZPOS% - 1)
#block_yaw[3] = 288
#block_pitch[3] = 22
#block_x[4] = (%XPOS% - 3)
#block_y[4] = (%YPOS% + 1)
#block_z[4] = (%ZPOS% - 1)
#block_yaw[4] = 288
#block_pitch[4] = 3
#block_x[5] = (%XPOS% - 3)
#block_y[5] = (%YPOS% + 2)
#block_z[5] = (%ZPOS% - 1)
#block_yaw[5] = 288
#block_pitch[5] = 342
#block_x[6] = (%XPOS% - 3)
#block_y[6] = (%YPOS% + 3)
#block_z[6] = (%ZPOS% + 0)
#block_yaw[6] = 271
#block_pitch[6] = 323
#block_x[7] = (%XPOS% - 3)
#block_y[7] = (%YPOS% + 0)
#block_z[7] = (%ZPOS% + 1)
#block_yaw[7] = 249
#block_pitch[7] = 20
#block_x[8] = (%XPOS% - 3)
#block_y[8] = (%YPOS% + 1)
#block_z[8] = (%ZPOS% + 1)
#block_yaw[8] = 249
#block_pitch[8] = 2
#block_x[9] = (%XPOS% - 3)
#block_y[9] = (%YPOS% + 2)
#block_z[9] = (%ZPOS% + 1)
#block_yaw[9] = 249
#block_pitch[9] = 343
#block_x[10] = (%XPOS% - 4)
#block_y[10] = (%YPOS% + 2)
#block_z[10] = (%ZPOS% + 0)
#block_yaw[10] = 270
#block_pitch[10] = 347
#block_x[11] = (%XPOS% - 4)
#block_y[11] = (%YPOS% + 1)
#block_z[11] = (%ZPOS% + 0)
#block_yaw[11] = 270
#block_pitch[11] = 3
#block_x[12] = (%XPOS% - 4)
#block_y[12] = (%YPOS% + 0)
#block_z[12] = (%ZPOS% + 0)
#block_yaw[12] = 270
#block_pitch[12] = 18
#block_x[13] = (%XPOS% - 1)
#block_y[13] = (%YPOS% + 0)
#block_z[13] = (%ZPOS% + 0)
#block_yaw[13] = 269
#block_pitch[13] = 48
ENDIF
Заходим на сервер, вызываем менюшку macro keybind mod ( по умолчанию - 0), биндим кнопку, прописывая следующий текст макроса:
ГОТОВО, ВЫ ВОСХИТИТЕЛЬНЫ!
Получившаяся у нас конструкция довольно "топорная" и действует в "тепличных" условиях. У меня в планах довести эту штуку до ума, добавив следующие плюшки:- Автовыбор инструмента(переключение между киркой и лопатой)
- Автоматическое складывание добытых ресурсов в МЭ/сундуки
- Автоматическое употребление еды при возникновении голода
- Атоматическая телепортация в сейф зону при количестве хп меньше заданого
- Если Вы копаете не киркой из мобиуса, то тп на зарядку инструментов или предотвращение поломки инструментов из других материалов
И любые другие функции, о которых Вы попросите меня в комментариях.
Видео работы бота:
В заключении хочу сказать вот что: я надеюсь, что теория, приведённая выше поможет Вам понять логику моих действий при работе со скриптом, я надеюсь, что мой гайд подтолкнёт других игроков сервера делиться своими уже созданными макросами и создавать новые, ну и, наконец, я надеюсь, что вам было также приятно читать этот гайд, как мне писать его. До новых встреч!