Bitburner : Guide de début de partie (sans spoiler)

Vous avez terminé le tutoriel et vous vous demandez comment progresser ? Vous voulez améliorer votre script de piratage ou peut-être voulez-vous commencer à automatiser d'autres parties du jeu ?

Ceci est un guide sans spoiler qui vous oriente dans la bonne direction.

 

Scripts de piratage : comment s'améliorer

1 : Suivez le tutoriel

En plus du didacticiel du jeu, il existe un bon guide sur la façon de démarrer un script de piratage décent dans le documentation en ligne[bitburner.readthedocs.io].

À ce stade, vous avez un script qui affaiblira, développera et piratera continuellement un serveur donné. Vous pourriez penser que c'est lent (et vous auriez raison) et c'est parce qu'il y a plusieurs améliorations que vous pouvez apporter.

La première étape consiste à commencer à utiliser netscript2[bitburner.readthedocs.io]. Netscript 1, ou les fichiers .script utilisés dans le didacticiel, sont lents et manquent de fonctionnalités. Netscript2 est très proche du javascript moderne, et leur vitesse n'est limitée que par votre ordinateur. Notez que la vitesse fait ici référence au temps d'exécution, et non à la vitesse d'exécution de vos fonctions affaiblir () grow () et hack () - qui est déterminée par les compétences de piratage.

Lors de l'écriture de scripts, vous remarquerez peut-être que leurs besoins en RAM augmentent à mesure que vous utilisez davantage de fonctions ns. Étant donné que seuls affaiblir () grow () et hack () bénéficient de l'utilisation de threads supplémentaires, les séparer de tout le reste vous permettra d'exécuter plus de threads et donc d'obtenir un gain plus élevé.

À ce stade, cela vaut la peine d'avoir la documentation de l'API[bitburner.readthedocs.io] pratique.

Séparer nos scripts de piratage pour optimiser l'utilisation de la RAM

Pour nous permettre d'exécuter nos fonctions importantes avec autant de threads que possible, découvrez comment créer le script le plus simple possible qui s'exécutera uniquement affaiblir () sur une cible donnée par argument et rien de plus. Ensuite, prenez votre script de piratage du didacticiel et, au lieu d'exécuter affaiblir () directement, trouvez un moyen d'exécuter le script affaiblir et de lui transmettre la cible en tant qu'argument, en utilisant autant de threads que le bélier libre le permet. Ensuite, trouvez un moyen d'attendre qu'il se termine. Répétez ce processus pour grow() et hack().

Parce que nous n'utilisons maintenant qu'une petite fraction de notre RAM sur le contrôle avec 1 thread, nous pouvons consacrer tout le reste de notre RAM à exécuter les fonctions qui se soucient réellement des threads, avec autant de threads que possible. Cela peut plus que doubler vos revenus.

Contrôle centralisé

Si vous déployez ce script de piratage sur chaque serveur sur lequel vous avez root, vous devriez bien progresser. Mais si nous analysons l'utilisation de la RAM sur nos serveurs rootés, nous constatons que les scripts affaiblissement.ns, grow.ns et hack.ns n'utilisent pas toute la RAM disponible car le script de contrôle prend beaucoup de place. Mais si nous attaquons de toute façon la cible la plus rentable avec tous nos serveurs, pourquoi ne pas nous en tenir à un seul script de contrôle sur un serveur et le laisser contrôler les autres ?

Le but ici est d'écrire un script de contrôle que nous exécutons sur notre ordinateur personnel, qui peut engendrer affaibli.ns grow.ns et hack.ns sur autres serveurs – nous laissant toute leur mémoire libre pour faire des travaux importants. Si le script de contrôle prend environ deux fois le bélier d'un seul thread de Improve.ns, grow.ns ou hack.ns, nous obtenons gratuitement 2 threads supplémentaires sur chacun de nos serveurs rootés en utilisant cette technique. Au début du jeu, lorsque la majeure partie de votre RAM provient de serveurs aléatoires que vous avez enracinés, cela peut compter pour une augmentation considérable.

Exécution simultanée

En général, pour les optimisations, il est important de mesurer quelles parties de nos algorithmes ont le plus long impact sur les performances. Supposons que nous soyons arrivés au point où un serveur est préparé (sécurité minimale et argent maximal atteints) de sorte que notre boucle soit approximativement affaiblie -> croissance -> affaiblissement -> hack.

Commencez par imprimer pour enregistrer le temps passé sur chaque étape. Dans mon cas, la perte de temps évidente était l'affaiblissement juste après la croissance, car la croissance augmentait considérablement la sécurité. Et si nous pouvions commencer à nous affaiblir pendant que la croissance est en cours, faisant ainsi les tâches en parallèle ? Nous pouvons en fait :

Le temps pris par affaiblir (), croître () et hack () est calculé par le statut du serveur et du joueur à la Commencer de l'opération. L'effet se produit au fin. Ainsi, si nous commençons notre affaiblissement avant la fin de la croissance, ce sera beaucoup plus rapide. Trouvez un moyen de voir combien de temps faudra affaiblir () et croître () (indice : le Documentation[github.com] a des fonctions pour cela). Ensuite, au lieu d'utiliser toute la mémoire disponible pour démarrer la croissance, utilisez la moitié. Ensuite, commencez à affaiblir avec l'autre moitié. Si l'affaiblissement s'exécute plus rapidement, vous devez dormir un peu votre script avant d'exécuter l'affaiblissement.

Notez que la répartition optimale est probablement loin de 50/50. Vous pouvez soit expérimenter avec le rapport, soit utiliser les fonctions d'analyse du Documentation[github.com] pour calculer la répartition optimale afin que l'affaiblissement ait juste assez de puissance pour contrer l'effet de la croissance.

Optimisation supplémentaire

grow() agrandit le serveur d'un certain % de son argent actuel. Idéalement, nous voulons nous assurer qu'un seul grow () le ramènera au maximum. Trouvez un moyen de calculer le nombre de threads de hack and grow dont vous avez besoin pour garder le cycle court.

La dernière et la plus difficile optimisation à considérer est de grouper un cycle entier et de les lancer simultanément, de sorte que hack() grow() et affaibli() soient tous atteints dans un court laps de temps. Si vous gérez cela, vous pouvez tirer un grand parti des serveurs plus grands dans le jeu ultérieur, car un seul hack complet supprimera tout l'argent, vous laissant beaucoup de temps pour reconstruire sa cachette. Si vous mettez plutôt en file d'attente plusieurs lots de scripts qui se succèdent et volent un petit pourcentage de l'argent, vous gagnez beaucoup plus d'argent au fil du temps par Go de RAM qu'autrement.

Cette dernière optimisation est cependant un problème non trivial et nécessite une planification, une analyse et une refactorisation approfondies pour être correcte.

Trouver et casser des serveurs : obtenez plus de RAM pour attaquer ou une cible plus juteuse

Si vous avez suivi le tutoriel, vous avez un script qui va vérifier quelques serveurs codés en dur et les cracker. Au lieu de vous fier à des listes codées en dur, créez un script qui s'exécute analyse()[github.com] et fait un recherche en largeur d'abord[fr.wikipedia.org] pour générer une liste de tous les serveurs du jeu. Ensuite, vous pouvez boucler en continu (disons une fois toutes les dix secondes) avec dormir ()[github.com], et faites une boucle dans la liste, en exécutant tous les ouvre-ports disponibles et NUKE.exe si vous le pouvez - il y a des fonctions à vérifier si vous avez suffisamment de ports[github.com] et compétence de piratage[github.com].

Une fois qu'un serveur est cracké, vous pouvez décider quoi en faire :

  • Une première étape facile consiste à ns.tprint()[github.com] le nom du serveur pour que vous soyez au courant.
  • Un autre est de copier[github.com] et courir[github.com] pirater des scripts pour qu'il puisse immédiatement commencer à vous rapporter de l'argent.
  • Une troisième consiste à établir un classement de toutes les cibles de piratage possibles, à les trier selon une métrique et soit à imprimer le résultat, soit à rediriger tous vos serveurs pour pirater la nouvelle cible si elle est meilleure que l'ancienne. Une heuristique simple est argent max[github.com] divisé par sécurité minimale[github.com]. Un plus précis est l'argent maximum divisé par le temps qu'il faudrait pour pirater, repousser et s'affaiblir, dont les fonctions peuvent être trouvées dans le Documentation[github.com].

 

Autres mécaniques

Bientôt disponible : des guides sur le hacknet, la bourse et plus encore.

Plus de guides :

Laisser un commentaire

ArabicEnglishFrenchGermanItalianJapaneseKoreanPortugueseSpanish