Bitburner: Early Game Guide (sem spoilers)

Terminou o tutorial e quer saber como progredir? Quer melhorar seu script de hacking ou talvez queira começar a automatizar outras partes do jogo?

Este é um guia sem spoilers que aponta na direção certa.

 

Scripts de hacking: como melhorar

1: Siga o tutorial

Além do tutorial no jogo, há um bom guia sobre como iniciar um script de hacking decente no documentação online[bitburner.readthedocs.io].

Neste ponto você tem um script que irá continuamente enfraquecer, crescer e hackear um determinado servidor. Você pode pensar que é lento (e você estaria certo) e isso é porque existem várias melhorias que você pode fazer.

O primeiro passo é começar a usar netscript2[bitburner.readthedocs.io]. Netscript 1, ou arquivos .script que são usados ​​no tutorial, são lentos e com poucos recursos. O Netscript2 está muito próximo do javascript moderno e sua velocidade é limitada apenas pelo seu computador. Observe que a velocidade aqui se refere ao tempo de execução, não à rapidez com que suas funções enfraquece() grow() e hack() são executadas – isso é determinado pela habilidade de hacking.

Ao escrever scripts, você pode notar que seus requisitos de RAM aumentam à medida que você usa mais funções ns. Uma vez que apenas enfraquece() grow() e hack() se beneficiam do uso de threads adicionais, separá-los de todo o resto permitirá que você execute mais threads e, assim, obtenha um retorno maior.

Neste momento vale a pena ter a documentação da API[bitburner.readthedocs.io] calhar.

Separando nossos scripts de hacking para otimizar o uso de RAM

Para nos permitir executar nossas funções importantes com o maior número possível de threads, descubra como fazer o script mais simples possível que será executado  enfraquece() em um alvo dado por argumento e nada mais. Em seguida, pegue seu script de hacking do tutorial e, em vez de executar o enfraquece() diretamente, encontre uma maneira de executar o script de enfraquecimento e passar o alvo para ele como um argumento, usando tantos threads quanto a ram livre permitir. Então, encontre uma maneira de esperar até que termine. Repita este processo para grow() e hack().

Como agora usamos apenas uma pequena fração de nossa RAM no controle com 1 thread, podemos gastar todo o restante de nossa RAM executando as funções que realmente se preocupam com threads, com o maior número possível de threads. Isso pode mais que dobrar sua renda.

Controle centralizador

Se você implantar esse script de hacking em cada servidor em que você tem root, você deve estar progredindo muito bem. Mas se analisarmos o uso de ram em nossos servidores rooteados, veremos que os scripts enfraquecem.ns, grow.ns e hack.ns não usam toda a ram disponível porque o script de controle ocupa uma boa parte. Mas se estamos apenas atacando o alvo mais lucrativo com todos esses nossos servidores, por que não manter um único script de controle em um servidor e deixá-lo controlar os outros?

O objetivo aqui é escrever um script de controle que executamos em nosso computador doméstico, o qual pode gerar enfraquece.ns grow.ns e hack.ns em outros servidores – deixando-nos com toda a memória livre para fazer trabalhos importantes. Se o script de controle consumir aproximadamente o dobro da memória RAM de um único thread de enfraquece.ns, grow.ns ou hack.ns, obteremos 2 threads adicionais em cada um de nossos servidores raiz gratuitamente usando essa técnica. No início do jogo, quando a maior parte do seu ram vem de servidores aleatórios que você fez root, isso pode contar para um aumento considerável.

Execução simultânea

Em geral, para otimizações, é importante medir quais partes de nossos algoritmos têm o maior impacto no desempenho. Vamos supor que chegamos ao ponto em que um servidor está preparado (segurança mínima e dinheiro máximo alcançado) para que nosso loop seja aproximadamente enfraquecer -> crescer -> enfraquecer -> hackear.

Comece imprimindo para registrar o tempo gasto em cada etapa. No meu caso, a perda de tempo óbvia foi o enfraquecimento logo após o crescimento, porque o crescimento aumentou significativamente a segurança. E se pudéssemos começar a enfraquecer enquanto o crescimento está em andamento, fazendo as tarefas em paralelo? Na verdade, podemos:

O tempo gasto por enfraquecer(), crescer() e hack() é calculado pelo status do servidor e do jogador no começo da operação. O efeito acontece no final. Assim, se começarmos nosso enfraquecimento antes que o crescimento termine, será muito mais rápido. Descubra uma maneira de ver quanto tempo enfraquecer () e crescer () levará (dica: o documentação[github. com] tem funções para isso). Então, em vez de usar toda a memória disponível para iniciar o crescimento, use metade. Então comece a enfraquecer com a outra metade. Se o enfraquecimento fosse executado mais rápido, você precisaria dormir um pouco seu script antes de executar o enfraquecimento.

Observe que a divisão ideal provavelmente está longe de 50/50. Você pode experimentar a razão ou usar as funções de análise do documentação[github. com] para calcular a divisão ideal para que o enfraquecimento tenha energia suficiente para neutralizar o efeito do crescimento.

Otimização adicional

grow() aumenta o servidor em uma certa % de seu dinheiro atual. Idealmente, queremos ter certeza de que um único grow() o trará de volta ao máximo. Encontre uma maneira de calcular quantos threads de hack and grow você precisa para manter o ciclo curto.

A última e mais difícil otimização a considerar é agrupar um ciclo inteiro e lançá-los simultaneamente, de modo que hack() grow() e enfraquece() sejam atingidos em pouco tempo de cada um. Se você conseguir isso, poderá tirar grande vantagem de servidores maiores no jogo posterior, porque um único hack completo removerá todo o dinheiro, deixando muito tempo para reconstruir seu estoque. Se, em vez disso, você enfileirar vários lotes de scripts que se sucedem e roubar uma % menor do dinheiro, ganhará muito mais dinheiro ao longo do tempo por GB de ram do que o contrário.

Esta última otimização, no entanto, é um problema não trivial e requer planejamento, análise e refatoração extensivos para acertar.

Encontrando e quebrando servidores: obtenha mais memória RAM para atacar ou um alvo mais suculento

Se você seguiu o tutorial, você tem um script que verificará alguns servidores codificados e os quebrará. Em vez de confiar em listas codificadas, crie um script que execute Varredura()[github. com] e faz um busca em largura[pt.wikipedia.org] para gerar uma lista de todos os servidores do jogo. Então você pode fazer um loop continuamente (digamos uma vez a cada dez segundos) com dormir()[github. com], e percorra a lista, executando quaisquer abridores de porta disponíveis e NUKE.exe se puder – existem funções para verificar se você tiver portas suficientes[github. com] e habilidade de hacking[github. com].

Uma vez que um servidor é quebrado, você pode decidir o que fazer com ele:

  • Um primeiro passo fácil é ns.tprint()[github. com] o nome do servidor para que você esteja ciente.
  • Outra é cópia[github. com] e corrida[github. com] hackear scripts para que ele possa começar imediatamente a ganhar dinheiro.
  • Um terceiro é fazer um ranking de todos os possíveis alvos de hackers, classificá-los por alguma métrica e imprimir o resultado ou redirecionar todos os seus servidores para hackear o novo alvo, se for melhor que o antigo. Uma heurística simples é dinheiro máximo[github. com] dividida pela segurança mínima[github. com]. Um mais preciso é o dinheiro máximo dividido pelo tempo que levaria para hackear, voltar a crescer e enfraquecer, funções para as quais podem ser encontradas no documentação[github. com].

 

Outras mecânicas

Em breve: Guias para hacknet, mercado de ações e muito mais.

Mais guias:

Deixe um comentário

ArabicEnglishFrenchGermanItalianJapaneseKoreanPortugueseSpanish