Серия «BitBurner»

Создание скриптов для BitBurner

Игра позволяет прописывать код во встроенном редакторе Nano, достаточно удобном в целом, но всё же интерфейс которого не самый привычный большинству, и совсем непривычен для новичков. Поэтому многие пользуются редактором VSCode с расширением Bitburner VSCode Integration. Считаю, что это гораздо удобнее, и рекомендую так же отстроить окружение. Для работы транспилятора необходимо также установить NodeJS помоложе (14+), а для Windows - Git, чтобы иметь unix-like терминал и можно было пользоваться всеми преимуществами контроля версий.

https://code.visualstudio.com/download - редактор

https://marketplace.visualstudio.com/items?itemName=bitburne... - расширение

https://nodejs.org/en/ - NodeJS

https://git-scm.com/downloads - git

Чтобы получить автокомплит, проще писать сразу на Typescript. Во-первых, язык помогает избежать многих ошибок, пусть и только в рантайме/на этапе транспиляции в JS. Во-вторых, организации покрупнее перешли или переходят на TS, поэтому для желающих во фронтенд практика TS лишней не будет.

На гитхабе есть множество готовых темплейтов, позволяющих сразу взять и писать скрипты с автодополнением и прочими плюшками. Я предпочитаю лишний раз самому разобраться, поэтому опишу базовую настройку окружения) Все подробности пишу под Windows, т.к. у линуксоидов всё же должны быть базовые навыки работы с терминалом. Будет полезно знакомящимся с экосистемой разработки под JS|TS, не только для BitBurner.

Итак, после установки всех вышеописанных программ мы должны настроить редактор и затем подготовить директорию для работы. Запускаем VS Code, и выбираем дефолтным окружением Git Bash по инструкции: https://code.visualstudio.com/docs/terminal/basics

Периодически настройка меняется, поэтому ссылка на оф. документацию. Я сижу на арче/убунте, поэтому могу ошибаться в нюансах работы на Windows, но, в целом, после выбора bash дефолтным терминалом проблем быть не должно.

Теперь при открытии терминала (ctrl+~ по умолчанию) у вас будет запускаться unix-like терминал. Теперь можно создавать проект :)

Создайте директорию, в которой будете хранить скрипты. Откройте её в VSCode и запустите терминал. Теперь инитим npm-проект командой npm init -y (флаг -y автоматом выберет дефолтные параметры), затем добавим необходимые пакеты:

npm install -D typescript @TypeScript-eslint/eslint-plugin @TypeScript-eslint/parser eslint eslint-config-airbnb-base eslint-plugin-import eslint-config-airbnb-typescript

Эта команда установит нужные библиотеки для разработки скриптов под игру + линтер (лучший друг любого кода).  Теперь нужно настроить линтер и Typescript. Для понимания настроек необходимо прочесть документацию:

https://eslint.org/docs/latest/user-guide/configuring/ - линтер

https://www.typescriptlang.org/docs/handbook/tsconfig-json.h... - typescript

Или просто создайте файлы через терминал:

code .eslintrc.js tsconfig.json

И вставьте готовые настройки из песочницы:

https://pastebin.com/1HiX5CrJ

https://pastebin.com/3zE82atx

Если у вас есть свой любимый конфиг линта, то добавьте в него правило 'import/prefer-default-export': 'off' , т.к. в большинстве случаев ESLint предлагает заменить конструкцию export fn main на export default, и подчёркивает весь код как неверный.

Теперь создадим папки для удобного размещения скриптов:

mkdir {src,build,types}

Эта команда создаст в текущей директории 3 папки. В одной мы будем хранить и прописывать TS файлы с исходным кодом (src от sources - исходники), в build будет готовый js - для синхронизации с игровым сервером, его руками менять не будем. И types - для хранения файла, описывающего API игры, тоже будем менять только при обновлениях игры (если будет меняться api, как в недавнем релизе 2.0.0+).

В tsconfig уже указали эти папки. Так же там есть настройка "paths" - она пригодится в будущем для импортов, т.к. игра не может в относительные пути.

Создание скриптов для BitBurner Javascript, Typescript, Скрипт, Туториал, Обучение, Web-программирование, Урок, Длиннопост

Теперь нам нужно добавить Type Definitions - собственно, описание апи игры, по которому мы получим автокомплит в редакторе, а при изучении его сможем многое полезное позже найти. Итак, как объявлено в tsconfig.json, мы должны создать файл NetscriptDefinitions.d.ts и положить его в папку types, а наполнить мы можем оригинальным описанием от разработчика:

https://github.com/danielyxie/bitburner/blob/dev/src/ScriptE...


ctrl+a, ctrl+c:

https://raw.githubusercontent.com/danielyxie/bitburner/dev/s...

Осталось дело за малым: запустить игру, старт API server и получить токен авторизации:

Создание скриптов для BitBurner Javascript, Typescript, Скрипт, Туториал, Обучение, Web-программирование, Урок, Длиннопост

Нужно включить верхние две опции и скопировать токен авторизации. Не закрывая игру, возвращаемся в VSCode, прожимаем палитру команд (ctrl+shift+p) и вводим BitBurner, выбираем Add Аuth Token и вставляем ранее скопированный токен из игры. И заодно включаем File Watcher, чтобы автоматизировать обновление скриптов в игре.

Создание скриптов для BitBurner Javascript, Typescript, Скрипт, Туториал, Обучение, Web-программирование, Урок, Длиннопост

Теперь нужно настроить пуш в игру файлов из папки build, а не всех папок. Для этого снова открываем настройки, как при выборе терминала, но теперь вводим в поиск scriptRoot, сразу находим нужную опцию и вводим ./build/

Создание скриптов для BitBurner Javascript, Typescript, Скрипт, Туториал, Обучение, Web-программирование, Урок, Длиннопост

Теперь при компиляции (таки скорее транспиляции) TS файлов в JS будет триггериться вотчер расширения, который отправит все файлы в игру и там мы можем сразу запускать их.

Осталось дело за малым: проверить, как оно работает. В папке src создаём файл с понятным названием и расширением .ts (например, hack.ts) и прописываем базовую структуру:

https://pastebin.com/aRjD3Xfr

Создание скриптов для BitBurner Javascript, Typescript, Скрипт, Туториал, Обучение, Web-программирование, Урок, Длиннопост

Нам нужно импортировать тайпинги и объявлять асинхронную функцию с именем main, которая принимает в себя как минимум один аргумент ns. Это требование апи игры. Исключение - вспомогательные именованные функции, которые вы будете импортировать как часть своего скрипта, там можно уже называть как угодно. Но если вы хотите запускать скрипт из терминала игры, то его исходник должен соответствовать такой структуре.

Последний этап - компиляция. Мы пишем скрипты в среде Node JS, поэтому нужно в главном файле любого проекта - package.json - указать скрипты для компиляции. Чтобы один раз запустить команду и дальше автоматом компилить TS файлы в JS, в поле scripts нужно добавить команду watch (или любую удобную, например, go) со значением tsc -w:

https://pastebin.com/1RPGXejc

Создание скриптов для BitBurner Javascript, Typescript, Скрипт, Туториал, Обучение, Web-программирование, Урок, Длиннопост

Теперь в терминале можно выполнить npm run watch и сосредоточиться только на написании кода. Вперёд, за взломом!))

Для желающих погрузиться:

1) попробуйте настроить tsconfig.json так, чтобы импортировать тайпинги NS можно было из '@ns'

подсказка: https://www.typescriptlang.org/docs/handbook/tsconfig-json.h... 

2) Создайте скрипты из туториала через данное окружение

Показать полностью 6

Краткий обзор игры BitBurner

TL, DR: игра про автоматизацию вообще всех действий в игре с помощью скриптов на JS. Вряд ли понравится любителям динамичных игр, вероятнее всего зайдёт любителям порешать чего-нибудь на досуге.

Краткий обзор игры BitBurner Javascript, Алгоритм, Оптимизация, Длиннопост

Игра вышла 11 декабря 2021 года в Steam. Основная площадка разработчика - Discord-сервер и GitHub, так же иногда отвечает на Reddit в профильном сабе. Сама игра представляет собой цикл из развития, заработка денег на аугментации (бонусы, дающие буст к скорости скриптов и скорости прокачки персонажа) и рестарт с бонусами, позволяющими гораздо быстрее дойти дальше предыдущего уровня. Основное действие происходит в терминале, который из привычных команд поддерживает только ls с парой флагов, cd и запуск скриптов.


В процессе игры попадаются интересные алгоритмические задачи - coding contracts.

Краткий обзор игры BitBurner Javascript, Алгоритм, Оптимизация, Длиннопост

Так же есть мини-игры попроще, вида "нажимать нужную стрелку на клавиатуре". Но самый сок в игре - это продумывание автоматизации, создание алгоритмов, способных максимально быстро пополнять ваш кошелёк. Для этого приходится разбираться с апи, высчитывать (кодом) время на ослабление защиты, время на пополнение счёта целевого сервера и прочее.


По мере развития у вас появляются возможности путешествовать по нескольким городам, вступать в хакерские фракции, работать на компании или преступные группировки. Можно внедриться в корпорацию и украсть её секреты, а можно примкнуть к спецслужбам.

На одном из этапов вы можете попробовать себя в роли биржевого брокера, покупать акции, продавать, играть на разнице их стоимости. Так же можно сыграть в казино. И самое главное - эти действия тоже можно описать скриптом и выполнить без единого клика мышью.

Краткий обзор игры BitBurner Javascript, Алгоритм, Оптимизация, Длиннопост

Неудачные скрипты (бесконечный цикл, например) могут положить бразуер, поэтому всегда приходится думать, что пишешь. Несмотря на простоту, в игре есть место для шевеления мозгами, и можно даже прокачать базовые алгоритмы.

Для удобства можно использовать VSCode и установленную игру, тогда при сохранении скрипта в редакторе будут сразу обновляться скрипты в игре. Так же можно писать во встроенном редакторе с подсветкой синтаксиса и автокомплитом. Поддерживаются горячие клавиши, всё удобно разбито.

На выбор даётся две версии скриптового языка: NS1 - старый стандарт Ecma Script, не изучал его особенности, сразу пользовался NS2 - ES6 стандарт, импорты, модули, всё привычное фронтенд-разработчикам.

Можно логировать, раскрашивать вывод, делать кликабельные кнопки в логе, а бонусом достаточно много фич, позволяющих кастомизировать окружение. Например, можно выбрать между тёмной и светлой темой приложения, или полностью с нуля создать свою собственную.

Постараюсь примерно 1 раз в неделю-две докидывать интересные скрипты с разбором. Присоединяйтесь, хакать весело)


П.С.: у кого есть 5к рейтинга, добавьте, пожалуйста, тег "bitburner", это позволит кому надо - блокировать, а кому надо - подписаться.

Показать полностью 2
Отличная работа, все прочитано!