Bitburner — неортодоксальная автоматизация и внутриигровой моддинг

Гайды

Bitburner — неортодоксальная автоматизация и внутриигровой моддинг 0

Хотя обычные функции, передаваемые через скрипты, могут делать большинство вещей, но поскольку мы можем запускать JavaScript, мы можем использовать документ чтобы сделать еще больше.

Основное использование

“Document” это ключевое слово javascript для всей веб-страницы. В том, как написан Bitburner, игра в основном представляет собой веб-страницу, помещенную в собственное приложение, поэтому мы можем что-то изменить в ней, используя “document”. Пример размещения чего-либо в консоли:

document.getElementById(«терминал»).insertAdjacentHTML(«beforeend», «Hello world»)

Однако это не будет выглядеть правильно, так как у него отсутствует стиль и он не структурирован так же, как другие элементы в консоли. Чтобы он выглядел так, как будто он там, вам нужно обернуть его в какой-то другой код, например:

document.getElementById(«terminal»).insertAdjacentHTML(«beforeend», `<li class=»jss44 MuiListItem-root MuiListItem-gutters MuiListItem-padding css-1578zj2″> <p class=»jss92 MuiTypography-root MuiTypography-body1 css-cxl1tz»> Привет, мир. </p></li>`); И вам не обязательно заканчивать текстом, вы также можете поместить туда любые другие HTML-элементы. Единственное, что вам нужно узнать, это код элемента, который вы хотите изменить, который вы можете найти, выбрав Debug->Activate и выполнив поиск в режиме инспектора.

Примечание. вероятно, обратите внимание на большие затраты оперативной памяти при использовании документа, и хотя это эксплойт и, следовательно, не рекомендуется, способ обойти эту стоимость — вместо этого получить “document” используя eval и сохраняя его в переменной следующим образом:

const doc = eval(«документ»); doc.getElementById(«терминал»).insertAdjacentHTML(«beforeend», «Hello world»)

Пользовательская статистика

Bitburner — неортодоксальная автоматизация и внутриигровой моддинг 1

Обзор

Статистика состоит из двух частей в HUD: текста и панели. В обоих случаях много кода, но это весь код-оболочка, поэтому процесс довольно прост.

Код

const doc = eval(«документ»); экспортировать асинхронную функцию main(ns) { const HUDElement = doc.getElementById(«root»).firstChild.firstChild.firstChild.firstChild .firstChild.firstChild.firstChild; const statName = «Мудрый»; переменная statValue = 0; вар процентов = 50; var text = htmlToElement(` <tr class=»MuiTableRow-root css-1dix92e» id=»custom-stat»> <th class=»jss7 MuiTableCell-root MuiTableCell-body MuiTableCell-sizeMedium css-hadb7u» scope=» row»> <p class=»jss12 MuiTypography-root MuiTypography-body1 css-cxl1tz»>${statName}&</p></th><td class=»jss7 MuiTableCell-root MuiTableCell-body MuiTableCell-alignRight MuiTableCell-sizeMedium css-7v1cxh»> <p class=»jss12 MuiTypography-root MuiTypography-body1 css-cxl1tz»>${statValue}</p ></td> <td class=»jss7 MuiTableCell-root MuiTableCell-body MuiTableCell-alignRight MuiTableCell-sizeMedium css-7v1cxh»> <p class=»jss12 MuiTypography-root MuiTypography-body1 css-cxl1tz» id=» обзор-ча-хук»></p></td></tr>`); var bar = htmlToElement(` <tr class=»MuiTableRow-root css-1dix92e»><th class=»jss7 MuiTableCell-root MuiTableCell-body MuiTableCell-sizeMedium css-hadb7u» scope=»row» colspan=»2″ style=»padding-bottom: 2px; position: relative; top: -3px;»> <span class=»MuiLinearProgress-root MuiLinearProgress-colorPrimary MuiLinearProgress-determinate css-koo86v» role=»progressbar» aria-valuenow=»49″ aria-valuemin=»0″ aria-valuemax=»100″><span class=»MuiLinearProgress-bar MuiLinearProgress-barColorPrimary MuiLinearProgress-bar1Determinate css-14usnx9″ style=»transform: translateX(-${100-percent}%);»></span></span>< /th></tr>`); HUDElement.children[14].after(text); текст.после(бар); ns.atExit(() => { text.remove(); bar.remove(); }); //Удаляет статистику при уничтожении скрипта while(true){ statValue++; //Обновление элементов //Очень неэффективно text.remove(); бар.удалить(); text = htmlToElement(` <tr class=»MuiTableRow-root css-1dix92e» id=»custom-stat»> <th class=»jss7 MuiTableCell-root MuiTableCell-body MuiTableCell-sizeMedium css-hadb7u» scope=»row «><p class=»jss12 MuiTypography-root MuiTypography-body1 css-cxl1tz»>${statName}&</p></th> <td class=»jss7 MuiTableCell-root MuiTableCell-body MuiTableCell -alignRight MuiTableCell-sizeMedium css-7v1cxh»> <p class=»jss12 MuiTypography-root MuiTypography-body1 css-cxl1tz»>${statValue}</p></td> <td class=»jss7 MuiTableCell -root MuiTableCell-body MuiTableCell-alignRight MuiTableCell-sizeMedium css-7v1cxh»><p class=»jss12 MuiTypography-root MuiTypography-body1 css-cxl1tz» id=»overview-cha-hook»></p></td></tr>` ); bar = htmlToElement(` <tr class=»MuiTableRow-root css-1dix92e»> <th class=»jss7 MuiTableCell-root MuiTableCell-body MuiTableCell-sizeMedium css-hadb7u» scope=»row» colspan=»2″ style =»padding-bottom: 2px; position: относительный; top: -3px;»> <span class=»MuiLinearProgress-root MuiLinearProgress-colorPrimary MuiLinearProgress-determinate css-koo86v» role=»progressbar» aria-valuenow=»49″ ария-значениемин=»0″ ария-значениемакс=»100″><span class=»MuiLinearProgress-bar MuiLinearProgress-barColorPrimary MuiLinearProgress-bar1Determinate css-14usnx9″ style=»transform: translateX(-${100-percent}%);»></span></span>< /th></tr>`); HUDElement.children[14].after(text); текст.после(бар); ждать ns.sleep(1000); } } //https://stackoverflow.com/a/35385518/11131159 function htmlToElement(html) { var template = doc.createElement('template'); html = html.trim(); //Никогда не возвращайте текстовый узел пробела в качестве результата template.innerHTML = html; возвратить template.content.firstChild; }

Поскольку это много html, для упрощения я поместил всю информацию, которую вы обычно меняете, в переменные. Затем, чтобы добавить функциональность к статистике, вам нужно добавить элементы в начало цикла while, который обновляет ее.

Путешествие из скрипта

Bitburner — неортодоксальная автоматизация и внутриигровой моддинг 2

Один из способов изменить сервер, к которому вы подключены, с помощью сценария — составить длинный список подключений, а затем поместить все в консоль и искусственно запустить ее. Есть еще несколько вещей, которые нужно сделать, чтобы терминал не вел себя странно при запуске, но в целом он был простым.

Код

const path = «подключить hong-fang-tea; подключить CSEC» const terminalInput = document.getElementById («terminal-input»); terminalInput.value = «дом; $ {путь}»; const handler = Object.keys(terminalInput)[1]; terminalInput[handler].onChange({target:terminalInput}); terminalInput[handler].onKeyDown({keyCode:13,preventDefault:()=>null});

Это был пример кода, который при запуске приводил вас к серверу Cybersec, но помещая любой список подключений в “путь” будет работать (команды разделены точкой с запятой).

Поскольку это обычный JavaScript, вы также можете поместить этот код в свойство onclick элемента <a> (или любого другого элемента для это имеет значение), чтобы при нажатии на нее вы меняли серверы.

WIP

Оцените статью