
==Une série de scripts utiles pour automatiser un peu tout et n'importe quoi== 🛠️ Exploits / Utilitaires spéciaux | Script | Statut | Remarque | | ------------ | ------- | ------------------------------------------------------ | | `DevMenu.js` | ✅ Final | Déverrouille le menu développeur via une faille React. | 🔄 Surveillance automatique | Script | Statut | Remarque | | ------------- | ------- | ------------------------------------------------------------------------- | | `Watchdog.js` | ✅ Final | Redémarre automatiquement `full-automation.js` et `corp-hack-manager.js`. | 🧠 Automatisation hacking principale | Script | Statut | Remarque | | ----------------------------------------- | ------- | --------------------------------------------------------- | | `full-automation.js` | ✅ Final | Script maître hacking. | | ├─ `automating-script-startup-process.js` | ✅ Final | Lance le script de hack distribué. | | │ └─ `early-hack-template.js` | ✅ Final | Hack primitif — serveur unique. | | ├─ `copy_scripts.js` | ✅ Final | Envoie les scripts de base (hack, grow, weaken, execute). | | │ ├─ `hack.js` | ✅ Final | Hack simple. | | │ ├─ `grow.js` | ✅ Final | Augmente l'argent d’un serveur. | | │ ├─ `weaken.js` | ✅ Final | Réduit la sécurité d’un serveur. | | │ └─ `execute.js` | ✅ Final | Coordonne les 3 précédents. | | ├─ `MCP.js` | ✅ Final | Gestion hacking distribuée + calcul optimisé. | | │ └─ `MCP-worker.js` | ✅ Final | Exécuté par `MCP.js` sur les serveurs esclaves. | | ├─ `hacknet-upgrade-manager.js` | ✅ Final | Achat automatique des nœuds et upgrades. | | ├─ `buy-servers.js` | ✅ Final | Achat de serveurs de meilleure capacité. | | └─ `augment-manager.js` | ✅ Final | Achat automatique d’augmentations + reset. | 💼 Gestion de la corporation | Script | Statut | Remarque | | ----------------------------- | ------- | ------------------------------------------ | | `corp-hack-manager.js` | ✅ Final | Script principal corporation. | | ├─ `update-corp-targets.js` | ✅ Final | Génère `CorpsTargets.txt`. | | ├─ `corp-hack-distributed.js` | ✅ Final | Distribue les tâches hacking sur la corpo. | | ├─ `corp-hack-cron.js` | ✅ Final | Automatisation production/investissements. | | ├─ `corp-hack-worker.js` | ✅ Final | Exécuté par `cron`, production et vente. | | └─ `wse-manager.js` | ✅ Final | Gestion boursière automatisée (stocks). | 🧠 Automatisation avancée de la gestion des gangs, corporations et emplois | Script | Statut | Remarque | | -------------------- | ------- | ------------------------------------------------------------ | | `atlas.js` | ✅ Final | Script maître pour lancer les gestionnaires avancés. | | ├─ `gang-manager.js` | ❌ Alpha | Gestion du gang : recrutement, missions, équipements. | | ├─ `corp-manager.js` | ❌ Alpha | Gestion de la corporation : finances, production, R &D, etc. | | ├─ `job-manager.js` | ❌ Alpha | Gestion des jobs : embauche, promotions, missions diverses. | | └─ `milestones-manager.js` | ❌ Alpha | Gestion des jobs : embauche, promotions, missions diverses. | Introduction En premier lieu je préciserai que je ne suis pas connaisseur en codage, L'ensemble de ces scripts ont été réalisés avec l'aide de chatGPT après dès heures de recherche, d'itérations et de peaufinage. Je ne suis pas en mesure de répondre aux éventuelles questions techniques des joueurs les plus curieux, les connaisseurs pourront plus facilement répondre aux interrogations. Pour chaque Script j'ai demandé à ChatGPT de fournir des indications sur le fonctionnement et les différentes étapes. Le guide fourni les scripts à copier/coller dans le jeu mais pas d'indication supplémentaire qui alourdirait brutalement la lecture. Certains scripts sont encore à l'état d'Alpha et ne fonctionne pas à 100% Le lancement de l'ensemble des scripts requière d'avoir suffisamment avancé dans le jeu et installé une certaine quantité de RAM. Enfin : Certaines fonctionnalités plus pointues requièrent des données changeantes d'une version du jeu à l'autre, ChatGPT a eu beaucoup de mal à trouver les paramètres optimaux pour la version actuelle et il se peut que certain scripts soient obsolète d'une version à l'autre. Pour les novices, copiez/collez les script tel quel avec les noms identiques pour chaque script, la plupart du temps le nom donné au script est important car d'autres scripts dépendant de lui et risquant de ne pas le retrouver. Sinon les notes dans les scripts peuvent vous aider à les personnaliser à votre convenance. Les connaisseurs : tout conseil pour améliorer/consolider/mettre à jour un script est bienvenue. 🛠️ Exploits / Utilitaires spéciaux | Script | Statut | Remarque | | ------------ | ------- | ------------------------------------------------------ | | `DevMenu.js` | ✅ Final | Déverrouille le menu développeur via une faille React. | 🔄 Surveillance automatique | Script | Statut | Remarque | | ------------- | ------- | ------------------------------------------------------------------------- | | `Watchdog.js` | ✅ Final | Redémarre automatiquement `full-automation.js` et `corp-hack-manager.js`. | 🧠 Automatisation hacking principale | Script | Statut | Remarque | | ----------------------------------------- | ------- | --------------------------------------------------------- | | `full-automation.js` | ✅ Final | Script maître hacking. | | ├─ `automating-script-startup-process.js` | ✅ Final | Lance le script de hack distribué. | | │ └─ `early-hack-template.js` | ✅ Final | Hack primitif — serveur unique. | | ├─ `copy_scripts.js` | ✅ Final | Envoie les scripts de base (hack, grow, weaken, execute). | | │ ├─ `hack.js` | ✅ Final | Hack simple. | | │ ├─ `grow.js` | ✅ Final | Augmente l'argent d’un serveur. | | │ ├─ `weaken.js` | ✅ Final | Réduit la sécurité d’un serveur. | | │ └─ `execute.js` | ✅ Final | Coordonne les 3 précédents. | | ├─ `MCP.js` | ✅ Final | Gestion hacking distribuée + calcul optimisé. | | │ └─ `MCP-worker.js` | ✅ Final | Exécuté par `MCP.js` sur les serveurs esclaves. | | ├─ `hacknet-upgrade-manager.js` | ✅ Final | Achat automatique des nœuds et upgrades. | | ├─ `buy-servers.js` | ✅ Final | Achat de serveurs de meilleure capacité. | | └─ `augment-manager.js` | ✅ Final | Achat automatique d’augmentations + reset. | 💼 Gestion de la corporation | Script | Statut | Remarque | | ----------------------------- | ------- | ------------------------------------------ | | `corp-hack-manager.js` | ✅ Final | Script principal corporation. | | ├─ `update-corp-targets.js` | ✅ Final | Génère `CorpsTargets.txt`. | | ├─ `corp-hack-distributed.js` | ✅ Final | Distribue les tâches hacking sur la corpo. | | ├─ `corp-hack-cron.js` | ✅ Final | Automatisation production/investissements. | | ├─ `corp-hack-worker.js` | ✅ Final | Exécuté par `cron`, production et vente. | | └─ `wse-manager.js` | ✅ Final | Gestion boursière automatisée (stocks). | 🧠 Automatisation avancée de la gestion des gangs, corporations et emplois | Script | Statut | Remarque | | -------------------- | ------- | ------------------------------------------------------------ | | `atlas.js` | ✅ Final | Script maître pour lancer les gestionnaires avancés. | | ├─ `gang-manager.js` | ❌ Alpha | Gestion du gang : recrutement, missions, équipements. | | ├─ `corp-manager.js` | ❌ Alpha | Gestion de la corporation : finances, production, R &D, etc. | | ├─ `job-manager.js` | ❌ Alpha | Gestion des jobs : embauche, promotions, missions diverses. | | └─ `milestones-manager.js` | ❌ Alpha | Gestion des jobs : embauche, promotions, missions diverses. | les scripts Semifonctionnel seront corrigés prochainement Bonne lecture ! DevMenu.js → Déverrouille le menu développeur [Succès] Un script qui déverrouille le menu développeur caché dans le jeu et permet l’acquisition du succès dédié, cependant, si vous souhaitez utiliser DevMenu.js pour cheater, attention à ce que vous faites, vous pourriez écraser votre progression actuelle en cliquant au mauvais endroit, faites bien une sauvegarde avant de vous aventurer sur des sentiers qui vous paraissent sinueux... DeVMenu.js /** * DeVMenu.js * * Exploit avancé pour intercepter et manipuler l’état React d’une application Bitburner (interface web UI), * afin de forcer un changement de page vers un menu développeur (« Dev »). * * Notes détaillées : * * - Le script utilise un « monkey patching » de React.createElement et React.useState, * pour intercepter les appels à ces fonctions React internes. * * - Lorsqu’il détecte un composant React spécifique (par inspection du code source de la fonction), * il injecte un hook temporaire pour capturer l’état local via useState. * * - La capture de l’état est asynchrone et utilise une Promise avec un timeout de 5 secondes, * pour éviter un blocage si l’exploit ne réussit pas. * * - Une fois l’état capturé, il est modifié pour forcer la navigation vers la page « Dev », * en jouant sur les différents types possibles de l’état capturé (string, number, array). * * - Enfin, il remet React.createElement et React.useState à leur état d’origine, * et rafraîchit le thème UI pour forcer le rendu. * * Attention : * - C’est un hack très fragile, dépendant de la structure interne de React et du code de Bitburner, * il peut facilement casser à chaque mise à jour du jeu. * * - Le script doit être lancé depuis l’API NS (Bitburner) avec les droits suffisants pour modifier l’UI. * * Usage : * - Utiliser pour accéder rapidement au menu développeur caché ou pour debug. * * Dépendances : * - React est supposé être globalement accessible (window.React ou global React dans l’environnement Bitburner). * - ns.ui (API Bitburner) pour modifier le thème et tprintf. */ /** @param {NS} ns */ export async function main(ns) { const orig = React.createElement; const origState = React.useState; let stateCalls = 0; let resolve; const nextLevelHook = (callNumber, fn, parentThis, parentArgs) => { React.createElement = orig; const wrapped = new Proxy(fn, { apply(target, thisArg, args_) { if (stateCalls === 0) { React.useState = function (...args) { stateCalls++; const state = origState.call(this, ...args); if (stateCalls === callNumber) { resolve(state); React.useState = origState; } return state; } } return target.apply(thisArg, args_); } }); return orig.call(parentThis, wrapped, ...parentArgs.slice(1)); } React.createElement = function (...args) { const fn = args[0]; const stringFn = (typeof fn === "function") ? String(fn) : null; if (stringFn?.includes("Trying to go to a page without the proper setup")) { return nextLevelHook(2, fn, this, args); } else if (stringFn?.includes("Routing is currently disabled")) { return nextLevelHook(1, fn, this, args); } return orig.call(this, ...args); } const resultP = Promise.race([ new Promise((res) => resolve = res), ns.asleep(5000).then(() => { throw Error("Something unknown went wrong while running exploit") })]) .finally(() => { React.createElement = orig; React.useState = origState; }); ns.ui.setTheme(ns.ui.getTheme()); const [state, setState] = await resultP; if (typeof state === "string") { setState("Dev"); } else if (typeof state === "number") { setState(8); } else if (Array.isArray(state)) { setState([{ page: "Dev" }, ...state]); } else { ns.tprintf("ERROR: Exploit succeeded, but got an unknown result for the type of page"); } } Watchdog.js → Redémarre automatiquement full-automation.js et corp-hack-manager.js. Je lis le titre, mais.. diantre ?! que sont donc 'full-automation.js' et 'corp-hack-manager.js' ??? Le coeur de ce guide, full-automaton vas hacker tous les serveurs (dans la limite de votre progression actuelle) pour générer de l'argent volé en continue, mais pas que ! Achat automatique des nœuds et upgrades. Achat de serveurs de meilleure capacité. Achat automatique d’augmentations. corp-hack-manager.js va faire lui s'occuper de l'automatisation de la gestion de la bourse, afin de modifier les courbes à notre avantage, tout en automatisant production et investissement. Mais 'Watchdog.js' dans tout ça ? Il redémarre automatiquement full-automation.js et corp-hack-manager.js. ! Ce script est donc inutile sans full-automation.js et corp-hack-manager.js (et l'ensemble des autres scripts enfantés) Mais ça, c'est pour la prochaine section ! Watchdog.js full-automation.js ← Point d’entrée principal ├─ automating-script-startup-process.js │ └─ early-hack-template.js ├─ copy_scripts.js │ ├─ hack.js │ ├─ grow.js │ ├─ weaken.js │ └─ execute.js ├─ MCP.js │ └─ MCP-worker.js ├─ hacknet-upgrade-manager.js ├─ buy-servers.js └─ augment-manager.js corp-hack-manager.js ← Point d’entrée principal ├─ update-corp-targets.js ├─ corp-hack-distributed.js ├─ corp-hack-cron.js ├─ corp-hack-worker.js └─ wse-manager.js Watchdog.js /** * watchdog.js * * 🐶 Surveille et relance les scripts critiques s’ils tombent. * * 📌 Rôle : * - Vérifie périodiquement si certains scripts-clés tournent. * - Relance automatiquement ceux qui ont crashé ou été arrêtés. * * 📁 Dépendances : * - full-automation.js * - corp-hack-manager.js * * 🧠 Notes : * - Peut être lancé au démarrage en boucle infinie. * - Ne spamme pas de PID ou de tails. */ /** @param {NS} ns **/ export async function main(ns) { ns.disableLog("ALL"); ns.ui.openTail("watchdog.js"); const watchList = [ "full-automation.js", "corp-hack-manager.js" ]; while (true) { for (const script of watchList) { if (!ns.isRunning(script, "home")) { const pid = ns.run(script); if (pid !== 0) { ns.print(`⚠️ ${script} non détecté. Lancement...`); ns.print(`✅ ${script} lancé (PID ${pid})`); } } } await ns.sleep(10000); } } full-automation.js → Automatisation Hack / nœuds et upgrades / serveurs / augmentations [Part. 1] full-automation.js ← Point d’entrée principal ├─ automating-script-startup-process.js │ └─ early-hack-template.js ├─ copy_scripts.js │ ├─ hack.js │ ├─ grow.js │ ├─ weaken.js │ └─ execute.js ├─ MCP.js │ └─ MCP-worker.js ├─ hacknet-upgrade-manager.js ├─ buy-servers.js └─ augment-manager.js full-automation.js /** * full-automation.js * * 📦 Point d’entrée principal pour l'automatisation complète du jeu. * * 📌 Rôle : * - Lance l'ensemble des scripts principaux qui gèrent tous les aspects du jeu. * - Évite les doublons grâce à `isRunning`. * - Ne pollue pas le terminal ni le tail inutilement. * * 🔁 Fréquence : Peut être relancé à tout moment, réagit intelligemment si certains scripts sont déjà actifs. * * 📜 Liste des scripts lancés : * - automating-script-startup-process.js * - copy_scripts.js * - root-access-manager.js * - MCP.js * - hacknet-upgrade-manager.js * - buy-servers.js * - augment-manager.js * - corp-hack-manager.js * - wse-manager.js */ export async function main(ns) { ns.disableLog("ALL"); ns.clearLog(); // Pas de ns.tail ici pour éviter les ouvertures en boucle ns.print("📦 Démarrage full-automation..."); const scripts = [ ["automating-script-startup-process.js"], ["copy_scripts.js"], ["root-access-manager.js"], ["MCP.js"], ["hacknet-upgrade-manager.js"], ["buy-servers.js"], ["augment-manager.js"], ["corp-hack-manager.js"], ["wse-manager.js"] ]; for (const [script, ...args] of scripts) { if (ns.isRunning(script)) { ns.print(`⏭️ ${script} déjà lancé.`); } else { const pid = ns.run(script, 1, ...args); if (pid !== 0) { ns.print(`✅ ${script} lancé (PID ${pid}).`); } else { ns.print(`❌ Impossible de lancer ${script}. RAM insuffisante ?`); } } } ns.print("✅ Tous les scripts démarrés ou déjà actifs."); } automating-script-startup-process.js /** * automating-script-startup-process.js * * 🚀 Gestion initiale et supervision continue des cycles hack/grow/weaken. * * Fonctionnalités principales : * - Lance early-hack-template.js avec le maximum de threads possible. * - Vérifie toutes les 5 secondes que early-hack-template.js tourne toujours. * - Relance automatiquement le script en cas d’arrêt. * - Affiche dans un tail dédié pour suivi visuel. * * Notes : * - Script lancé automatiquement par full-automation.js. * - Usage recommandé sur "home". * - Limite les logs pour éviter saturation. * - Rafraîchissement toutes les 5 secondes. */ /** @param {NS} ns **/ export async function main(ns) { ns.disableLog("ALL"); ns.clearLog(); ns.ui.openTail("automating-script-startup-process.js"); const scriptName = "early-hack-template.js"; const delay = 5000; // 5 secondes while (true) { ns.clearLog(); ns.print(`🚀 Vérification de ${scriptName}...`); const isRunning = ns.ps().some(p => p.filename === scriptName); if (!isRunning) { const maxThreads = Math.floor(ns.getServerMaxRam(ns.getHostname()) / ns.getScriptRam(scriptName)); if (maxThreads > 0) { const pid = ns.run(scriptName, maxThreads); if (pid === 0) { ns.print(`❌ Échec du lancement de ${scriptName}. RAM insuffisante ?`); } else { ns.print(`✅ ${scriptName} lancé avec ${maxThreads} threads (PID ${pid})`); } } else { ns.print(`⚠️ RAM insuffisante pour lancer ${scriptName}. Attente...`); } } else { ns.print(`✅ ${scriptName} déjà en cours.`); } await ns.sleep(delay); } } early-hack-template.js /** * early-hack-template.js * * Script template pour lancer hack/grow/weaken de manière simple * en évitant les erreurs liées au nombre excessif de threads. * * Utilisation : * run early-hack-template.js [cible] [action: hack|grow|weaken] [threads désirés] * * Exemple : * run early-hack-template.js n00dles hack 50 * * @param {NS} ns **/ export async function main(ns) { ns.disableLog("sleep"); ns.disableLog("getServerMaxRam"); ns.disableLog("getScriptRam"); ns.disableLog("exec"); const target = ns.args[0]; const action = ns.args[1]; let desiredThreads = ns.args[2]; if (!target || !action) { ns.tprint("Usage: run early-hack-template.js [target] [hack|grow|weaken] [threads]"); return; } if (!desiredThreads || isNaN(desiredThreads) || desiredThreads <= 0) { desiredThreads = 1; // par défaut 1 thread } else { desiredThreads = Math.floor(desiredThreads); } const scriptRam = ns.getScriptRam(ns.getScriptName()); const maxThreads = Math.floor(ns.getServerMaxRam("home") / scriptRam); if (maxThreads < 1) { ns.tprint(`❌ Pas assez de RAM pour lancer ce script sur home (RAM script: ${scriptRam.toFixed(2)}GB)`); return; } // Ajustement du nombre de threads pour ne pas dépasser la RAM disponible const threadsToUse = Math.min(desiredThreads, maxThreads); ns.tprint(`🚀 Lancement de ${action} sur ${target} avec ${threadsToUse} thread(s)`); try { if (action === "hack") { await ns.exec("hack.js", "home", threadsToUse, target); } else if (action === "grow") { await ns.exec("grow.js", "home", threadsToUse, target); } else if (action === "weaken") { await ns.exec("weaken.js", "home", threadsToUse, target); } else { ns.tprint(`❌ Action inconnue: ${action}. Utilisez hack, grow ou weaken.`); } } catch (e) { ns.tprint(`❌ Erreur lors de l'exécution: ${e.message}`); } // Script simple: on attend 1 minute puis fin await ns.sleep(60000); } full-automation.js → Automatisation Hack / nœuds et upgrades / serveurs / augmentations [Part. 2] copy_scripts.js /** * copy_scripts.js * * 📦 Script de copie automatisée des scripts principaux vers les serveurs esclaves (pserv-*). * * 📌 Rôle : * - Copier les scripts essentiels (hack.js, grow.js, weaken.js, execute.js, etc.) sur tous les serveurs personnels. * - S’assure que les serveurs disposent bien des scripts pour exécuter les tâches d’attaque. * * ✅ Fonctionnalités : * - Boucle toutes les X secondes. * - Un seul `tail()` ouvert et mis à jour à chaque boucle. * - Logs synthétiques non intrusifs. * * @param {NS} ns **/ export async function main(ns) { ns.disableLog("ALL"); ns.clearLog(); ns.ui.openTail(); // Un seul tail pour toute la boucle const scriptsToCopy = [ "hack.js", "grow.js", "weaken.js", "execute.js", ]; const home = "home"; const pservs = ns.getPurchasedServers(); while (true) { ns.clearLog(); const copyResults = []; for (const server of pservs) { let copiedCount = 0; for (const script of scriptsToCopy) { try { // Vérifie si le script est absent ou plus vieux que la version home const remoteTime = ns.getScriptModifiedTime(script, server); const localTime = ns.getScriptModifiedTime(script, home); if (remoteTime === 0 || remoteTime < localTime) { const success = ns.scp(script, server, home); if (success) copiedCount++; else ns.print(`❌ Échec copie ${script} sur ${server}`); } } catch (e) { ns.print(`❌ Erreur copie ${script} sur ${server} : ${e}`); } } copyResults.push(`${server}: ${copiedCount} script(s) copiés`); } // Affiche un résumé clair, pas de flood ns.print(`📦 Résumé copie scripts (${new Date().toLocaleTimeString()}):`); for (const line of copyResults) ns.print(` - ${line}`); // Pause avant prochain cycle await ns.sleep(30_000); } } hack.js /** * hack.js * * 💸 Script de hack pour voler de l’argent à une cible spécifique. * * 📌 Rôle : * - Utilisé dans les attaques planifiées par `execute.js` ou `MCP`. * - Exécute un hack isolé, souvent en parallèle d'autres threads weaken/grow. * * 🔒 Sécurité : * - Ignore les serveurs blacklistés (non rentables, dangereux ou spéciaux). * - Ne tente rien sans root access. * - Aucune sortie console, même en cas d’erreur. * * @param {NS} ns - Bitburner Netscript API **/ export async function main(ns) { ns.disableLog("ALL"); const blacklist = [ "home", "CSEC", "avmnite-02h", "I.I.I.I", "run4theh111z", "The-Cave", "darkweb" ]; const target = ns.args[0]; if (!target || blacklist.includes(target)) return; try { await ns.hack(target); } catch { // Silencieux pour éviter flood erreurs runtime } } grow.js /** * grow.js * * 📈 Script destiné à faire croître l'argent d’un serveur cible. * * 📌 Rôle : * - Utilisé principalement par le système `execute.js` ou `MCP` pour exécuter une croissance ciblée. * - Peut être lancé en masse depuis plusieurs serveurs personnels (pserv) ou externes. * * 🔒 Sécurité : * - Ignore les cibles exclues (voir blacklist). * - Ne tente rien sans accès root. * - Silencieux : aucun log, même en cas d’erreur ou de spam. * * @param {NS} ns - Bitburner Netscript API **/ export async function main(ns) { ns.disableLog("ALL"); const blacklist = [ "home", "CSEC", "avmnite-02h", "I.I.I.I", "run4theh111z", "The-Cave", "darkweb" ]; const target = ns.args[0]; if (!target || blacklist.includes(target)) return; try { await ns.grow(target); } catch { // Silencieux pour éviter flood erreurs runtime } } weaken.js /** * weaken.js * * 🛡 Script de réduction de la sécurité d’un serveur cible. * * 📌 Rôle : * - Réduit la sécurité d’une cible pour optimiser hack/grow. * - Lancé souvent en parallèle dans la chaîne d’attaques. * * 🔒 Sécurité : * - Ne s’exécute pas sur les serveurs blacklistés. * - Nécessite un accès root pour agir. * - Pas de logs ou erreurs affichées pour éviter flood. * * @param {NS} ns - Bitburner Netscript API **/ export async function main(ns) { ns.disableLog("ALL"); const blacklist = [ "home", "CSEC", "avmnite-02h", "I.I.I.I", "run4theh111z", "The-Cave", "darkweb" ]; const target = ns.args[0]; if (!target || blacklist.includes(target)) return; try { await ns.weaken(target); } catch { // Silencieux pour éviter flood erreurs runtime } } execute.js /** * execute.js * * 🎯 Script d’exécution dynamique d’une action ("hack", "grow" ou "weaken") sur une cible donnée. * * ✅ Fonctionnalités : * - Lance dynamiquement le script correspondant à l’action (`hack.js`, `grow.js`, `weaken.js`) avec la cible en argument. * - Vérifie l’intégrité de l’action demandée. * - Exclut les serveurs inappropriés (serveurs personnels, darkweb, etc.). * - Vérifie que la cible est rootée, accessible et pertinente. * - Comporte une protection contre les erreurs d’appel depuis MCP, full-automation, etc. * * 🛡️ Sécurisé contre : * - Actions invalides * - Cibles interdites ou inutiles * - Manque d’accès root * - Serveurs personnels * * Utilisation : * run execute.js [action] [target] * Exemple : * run execute.js hack foodnstuff * * @param {NS} ns **/ export async function main(ns) { const [action, target] = ns.args; // Liste des actions valides const validActions = ["hack", "grow", "weaken"]; if (!action || !target) { ns.tprint("❌ Usage : run execute.js [hack|grow|weaken] [target]"); return; } if (!validActions.includes(action)) { ns.tprint(`❌ Action inconnue '${action}'`); return; } // Liste des serveurs exclus (pas de message d'erreur ici pour éviter flood) const excluded = [ "home", "darkweb", "CSEC", "avmnite-02h", "I.I.I.I", "run4theh111z", "The-Cave", "w0r1d_d43m0n", ...ns.getPurchasedServers(), ...Array.from({ length: 20 }, (_, i) => `hacknet-server-${i}`) ]; if (excluded.includes(target)) { // Silencieux ici, pas d'erreur affichée pour exclusion return; } if (!ns.serverExists(target)) { ns.tprint(`❌ Le serveur '${target}' n’existe pas.`); return; } if (!ns.hasRootAccess(target)) { ns.tprint(`❌ Accès root manquant sur '${target}'.`); return; } // Vérification du niveau de hacking const reqHack = ns.getServerRequiredHackingLevel(target); if (ns.getHackingLevel() < reqHack) { ns.tprint(`❌ Niveau de hacking insuffisant pour attaquer '${target}' (requis : ${reqHack}).`); return; } // Nom du script à lancer selon l'action const script = `${action}.js`; if (!ns.fileExists(script, "home")) { ns.tprint(`❌ Script '${script}' introuvable sur 'home'.`); return; } // Exécution sécurisée, 1 thread const pid = await ns.exec(script, ns.getHostname(), 1, target); if (pid === 0) { ns.tprint(`❌ Échec du lancement de '${script}' sur '${target}'.`); } } full-automation.js → Automatisation Hack / nœuds et upgrades / serveurs / augmentations [Part. 3] MCP.js /** * MCP.js — Multi Control Program amélioré * * 📌 Objectif : * - Scanner le réseau complet depuis "home" * - Identifier les serveurs hackables (root + argent suffisant) * - Exclure les serveurs "corporate" et boursiers (gérés par corp-hack-manager) * - Calculer le meilleur ratio hack/grow/weaken * - Distribuer les scripts hack/grow/weaken sur les serveurs personnels (pserv-*) * - Maximiser l’utilisation RAM sans surcharge * - Afficher un rapport clair dans un tail unique * * ⚠️ Nécessite que les scripts hack.js, grow.js, weaken.js soient sur les serveurs personnels * * @param {NS} ns */ export async function main(ns) { ns.disableLog("ALL"); ns.clearLog(); ns.ui.openTail(); // Ouvre un seul tail // --- CONFIGURATION --- const refreshDelay = 10_000; // Délai boucle en ms const minMoneyRatio = 0.1; // Minimum % argent serveur pour être hacké const maxSecurityThreshold = 50; // Seuil max sécurité pour hack const corpBlacklist = new Set([ // Serveurs à exclure (corporate & bourse) "joesguns", "omega-net", "foodnstuff", "nectar-net", "sigma-cosmetics", "harakiri-sushi", "phantasy", "darkweb", "iron-gym", "CSEC" ]); const hackScript = "hack.js"; const growScript = "grow.js"; const weakenScript = "weaken.js"; // Récupérer liste serveurs personnels (pserv-*) const pservs = ns.getPurchasedServers(); // Fonction scan récursive (scanAll) function scanAll(root, visited = new Set()) { if (visited.has(root)) return []; visited.add(root); let found = []; const neighbors = ns.scan(root); for (const n of neighbors) { if (!visited.has(n)) { found.push(n); found = found.concat(scanAll(n, visited)); } } return found; } while (true) { ns.clearLog(); // 1. Scan complet réseau const allServers = scanAll("home"); // 2. Filtrage serveurs hackables const hackableServers = allServers.filter(server => { if (corpBlacklist.has(server)) return false; // Exclure corporate & bourse if (!ns.hasRootAccess(server)) return false; // Doit avoir root if (server.startsWith("pserv-")) return false; // Ne pas hack ses propres serveurs const money = ns.getServerMoneyAvailable(server); const maxMoney = ns.getServerMaxMoney(server); if (money < maxMoney * minMoneyRatio) return false; // Minimum argent const sec = ns.getServerSecurityLevel(server); if (sec > maxSecurityThreshold) return false; // Sécurité trop élevée return true; }); ns.print(`🕵️♂️ Serveurs hackables (${hackableServers.length}): ${hackableServers.join(", ")}`); // 3. Répartition script sur serveurs personnels // Calcule RAM par script const hackRam = ns.getScriptRam(hackScript); const growRam = ns.getScriptRam(growScript); const weakenRam = ns.getScriptRam(weakenScript); // Pour chaque serveur personnel, calcul RAM dispo (réserver 2 Go pour sécurité) let totalRamAvailable = 0; const pservRamMap = {}; for (const pserv of pservs) { const maxRam = ns.getServerMaxRam(pserv); const usedRam = ns.getServerUsedRam(pserv); const availRam = Math.max(0, maxRam - usedRam - 2); pservRamMap[pserv] = availRam; totalRamAvailable += availRam; } // Affichage RAM dispo total et par serveur perso ns.print(`💾 RAM totale dispo: ${totalRamAvailable.toFixed(2)} Go`); for (const pserv of pservs) { ns.print(` - ${pserv}: ${pservRamMap[pserv].toFixed(2)} Go`); } // 4. Distribution scripts sur cibles // Calcul threads totaux à répartir par cible // Simple stratégie : 30% hack, 40% weaken, 30% grow (à ajuster selon la situation) // On répartit threads en fonction de RAM dispo et poids script // Collecter toutes les cibles en une liste pour répartir const targets = hackableServers; if (targets.length === 0) { ns.print("⚠️ Aucun serveur hackable actuellement."); await ns.sleep(refreshDelay); continue; } // Calcul total de RAM nécessaire par cible pour un cycle complet (hack+grow+weaken) const cycleRamPerTarget = hackRam * 1 + growRam * 1 + weakenRam * 1; // 1 thread chacun en exemple // Calcul nombre de cycles complets possibles dans RAM totale dispo const maxCycles = Math.floor(totalRamAvailable / (cycleRamPerTarget * targets.length)); if (maxCycles < 1) { ns.print(`⚠️ RAM insuffisante pour exécuter les scripts sur toutes les cibles.`); await ns.sleep(refreshDelay); continue; } // Distribution threads par cible, par script, proportionnelle au nombre de cycles // Pour chaque serveur perso, on va essayer de déployer des scripts pour plusieurs cibles // On va faire simple ici : pour chaque pserv on va essayer d'équilibrer hack/grow/weaken sur une cible à la fois for (const pserv of pservs) { let ramLeft = pservRamMap[pserv]; for (const target of targets) { if (ramLeft < cycleRamPerTarget) continue; // Threads par script = max 1 cycle complet * maxCycles const threads = maxCycles; // Lance weaken if (ramLeft >= weakenRam * threads) { ns.exec(weakenScript, pserv, threads, target); ramLeft -= weakenRam * threads; ns.print(`🛡️ ${pserv} weaken(${threads}) sur ${target}`); } // Lance grow if (ramLeft >= growRam * threads) { ns.exec(growScript, pserv, threads, target); ramLeft -= growRam * threads; ns.print(`🌱 ${pserv} grow(${threads}) sur ${target}`); } // Lance hack if (ramLeft >= hackRam * threads) { ns.exec(hackScript, pserv, threads, target); ramLeft -= hackRam * threads; ns.print(`💰 ${pserv} hack(${threads}) sur ${target}`); } } } await ns.sleep(refreshDelay); } } full-automation.js → Automatisation Hack / nœuds et upgrades / serveurs / augmentations [Part. 4] MCP-worker.js /** * 📜 MCP-worker.js (Multi Control Program - Worker) * * 🔧 Rôle : * Exécute weaken/grow/hack sur serveurs personnels (pservs) contre cibles valides. * * ⚠️ IMPORTANT : * - Filtre strict des cibles blacklistées (ex : "avmnite-02h") pour éviter erreurs & flood. * - Bloc exec protégé try/catch silencieux pour ne pas polluer la console. * - Synchroniser la blacklist avec les scripts hack/grow/weaken. * * 🧠 Fonctionnalités : * - Scan complet des serveurs via scanAll() * - Filtrage des serveurs blacklistés * - Choix de la cible la plus rentable (argent max) * - Calcul des threads selon RAM dispo sur pserv * - Lancement silencieux des scripts * * 💡 Usage : * Ce worker est appelé en boucle par MCP.js pour assurer contrôle multi-cibles. * * @param {NS} ns */ export async function main(ns) { ns.disableLog("ALL"); // Blacklist des serveurs exclus du hacking pour éviter flood erreurs const blacklist = [ "home", "CSEC", "avmnite-02h", "I.I.I.I", "run4theh111z", "The-Cave", "darkweb" ]; // Récupération récursive de tous les serveurs accessibles function getAllServers(current = "home", visited = new Set()) { visited.add(current); for (const host of ns.scan(current)) { if (!visited.has(host)) getAllServers(host, visited); } return [...visited]; } // Choix de la cible la plus rentable (max argent dispo) function pickTarget(servers) { let best = null; let bestValue = 0; for (const s of servers) { if (blacklist.includes(s)) continue; if (!ns.hasRootAccess(s)) continue; if (ns.getServerMaxMoney(s) <= 0) continue; const moneyAvailable = ns.getServerMoneyAvailable(s); if (moneyAvailable > bestValue) { bestValue = moneyAvailable; best = s; } } return best; } const allServers = getAllServers(); const targets = allServers.filter(s => !blacklist.includes(s) && ns.hasRootAccess(s) && ns.getServerMaxMoney(s) > 0); const pservs = ns.getPurchasedServers(); for (const pserv of pservs) { const ramMax = ns.getServerMaxRam(pserv); const ramUsed = ns.getServerUsedRam(pserv); const ramFree = ramMax - ramUsed; if (ramFree < 1.75) continue; // minimum ram pour 1 thread weaken/grow/hack const threads = Math.floor(ramFree / ns.getScriptRam("weaken.js")); const target = pickTarget(targets); if (!target || blacklist.includes(target)) continue; try { await ns.exec("weaken.js", pserv, threads, target); await ns.exec("grow.js", pserv, threads, target); await ns.exec("hack.js", pserv, threads, target); } catch { // Silencieux pour éviter flood erreurs runtime } } } hacknet-upgrade-manager.jsd /** * hacknet-upgrade-manager.js * * 📈 Gestion automatique de l’achat et des améliorations des nœuds Hacknet. * * Fonctionnalités : * - Achète un nouveau nœud si possible. * - Améliore les niveaux, RAM et cœurs des nœuds existants. * - Répète indéfiniment avec pause de 30 secondes. * - Affiche les actions dans le terminal uniquement. * * Notes : * - Ne vérifie pas la rentabilité, achète tout ce qui est possible. * - Limite fréquence pour réduire charge CPU. */ /** @param {NS} ns **/ export async function main(ns) { ns.disableLog("sleep"); ns.tail(); while (true) { let funds = ns.getServerMoneyAvailable("home"); // Achat node const nodeCount = ns.hacknet.numNodes(); if (nodeCount < ns.hacknet.maxNumNodes() && funds > ns.hacknet.getPurchaseNodeCost()) { ns.hacknet.purchaseNode(); ns.print("hacknet-upgrade-manager: Node Hacknet acheté"); funds = ns.getServerMoneyAvailable("home"); } // Upgrade nodes for (let i = 0; i < nodeCount; i++) { if (funds < 1e9) break; const upgradeLevelCost = ns.hacknet.getLevelUpgradeCost(i, 1); if (funds > upgradeLevelCost) { ns.hacknet.upgradeLevel(i, 1); funds -= upgradeLevelCost; ns.print(`hacknet-upgrade-manager: Node ${i} niveau amélioré`); continue; } const upgradeRamCost = ns.hacknet.getRamUpgradeCost(i, 1); if (funds > upgradeRamCost) { ns.hacknet.upgradeRam(i, 1); funds -= upgradeRamCost; ns.print(`hacknet-upgrade-manager: Node ${i} RAM améliorée`); continue; } const upgradeCoreCost = ns.hacknet.getCoreUpgradeCost(i, 1); if (funds > upgradeCoreCost) { ns.hacknet.upgradeCore(i, 1); funds -= upgradeCoreCost; ns.print(`hacknet-upgrade-manager: Node ${i} cores améliorés`); continue; } } await ns.sleep(60_000); } } buy-servers.js /** * buy-servers.js * * 💻 Achat automatisé de serveurs. * * 📌 Rôle : * Ce script achète automatiquement des serveurs tant que : * - Vous n’avez pas atteint la limite maximale. * - Vous avez assez d’argent pour le meilleur serveur possible (puissance 2 de RAM). * * ⚙️ Fonctionnement : * - Essaye d’acheter un serveur avec la RAM maximale possible à chaque tick. * - Donne un nom unique basé sur un compteur (ex : pserv-0, pserv-1…). * * 🔄 Lancement : * - Utilisé uniquement via `full-automation.js`. * - Aucune dépendance, peut être relancé à volonté. * * 🧠 Remarques : * - Ne s’occupe pas de copier des scripts ni de lancer des tâches. * - Ne réutilise pas d’anciens serveurs (pas de suppression). * - Affiche les achats dans le terminal (pas de `ns.tail`). */ const PREFIX = "pserv"; const MAX_SERVERS = 25; /** @param {NS} ns **/ export async function main(ns) { ns.disableLog("ALL"); ns.print("🚀 Achat de serveurs lancé..."); while (true) { const owned = ns.getPurchasedServers(); if (owned.length >= MAX_SERVERS) { ns.print("✅ Nombre maximal de serveurs atteint."); break; } const maxRam = getMaxAffordableRam(ns); if (maxRam === 0) { ns.print("💸 Pas assez d’argent pour acheter un serveur."); break; } const hostname = `${PREFIX}-${owned.length}`; const success = ns.purchaseServer(hostname, maxRam); if (success) { ns.print(`✅ Serveur acheté : ${hostname} (${maxRam} Go)`); } else { ns.print("❌ Échec de l’achat de serveur."); break; } await ns.sleep(500); } ns.print("🛑 Fin de l’achat de serveurs."); } /** * Calcule la puissance de 2 la plus élevée que le joueur peut acheter. * @param {NS} ns * @returns {number} - RAM (Go) à acheter */ function getMaxAffordableRam(ns) { const money = ns.getServerMoneyAvailable("home"); let ram = 2; while (ns.getPurchasedServerCost(ram * 2) < money && ram * 2 <= 1048576) { ram *= 2; } return ram; } augment-manager.js /** * augment-manager.js * * 🧬 Gère automatiquement l’achat des augmentations. * * 📌 Rôle : * - Trie les augmentations disponibles. * - Achète en priorité celles qui ne sont pas déjà possédées. * * 📁 Dépendances : * - Aucune directe (utilise uniquement ns). * * 🧠 Notes : * - Peut être relancé en boucle, mais inutile si aucune faction n’est disponible. * - Les logs restent sobres. */ /** @param {NS} ns **/ export async function main(ns) { const factions = ns.getPlayer().factions; const owned = ns.singularity.getOwnedAugmentations(true); const purchased = new Set(); for (const faction of factions) { const augs = ns.singularity.getAugmentationsFromFaction(faction); const filtered = augs .filter(a => !owned.includes(a) && !purchased.has(a)) .sort((a, b) => ns.singularity.getAugmentationPrice(a) - ns.singularity.getAugmentationPrice(b)); for (const aug of filtered) { const cost = ns.singularity.getAugmentationPrice(aug); if (ns.getPlayer().money >= cost) { if (ns.singularity.purchaseAugmentation(faction, aug)) { purchased.add(aug); ns.print(`✅ Achat : ${aug} (${cost.toLocaleString()} $)`); } } } } corp-hack-manager.js → Gestion boursière automatisée corp-hack-manager.js ← Point d’entrée principal ├─ update-corp-targets.js ├─ corp-hack-distributed.js ├─ corp-hack-cron.js ├─ corp-hack-worker.js └─ wse-manager.js corp-hack-manager.js /** * corp-hack-manager.js * * Point d'entrée pour gérer les attaques sur corporations. * * Fonctionnalités : * - Lance update-corp-targets.js pour mettre à jour les cibles corporatives (dans CorpsTargets.txt). * - Démarre corp-hack-distributed.js pour répartir les attaques hack/grow/weaken. * - Orchestration via cron et surveillance. * * Notes : * - Doit être lancé régulièrement via watchdog ou manuellement. * - Intègre la chaîne complète corporate hacking. */ /** @param {NS} ns **/ export async function main(ns) { ns.tprint("Lancement corp-hack-manager.js"); // Met à jour les cibles en lançant update-corp-targets.js await ns.run("update-corp-targets.js"); // Démarre le script distribué ns.exec("corp-hack-distributed.js", "home", 1); // Lancement du cron de gestion périodique ns.exec("corp-hack-cron.js", "home", 1); } update-corp-targets.js /** * update-corp-targets.js * * Met à jour la liste des cibles corporatives. * * Fonctionnalités : * - Scanne les serveurs corporate ciblés. * - Filtre ceux ayant un bon potentiel de hack. * - Écrit la liste dans CorpsTargets.txt pour usage par les autres scripts. * * Notes : * - Utilisé par corp-hack-manager.js pour garder la liste à jour. */ /** @param {NS} ns **/ export async function main(ns) { const targets = []; const allServers = ns.scan("home"); for (const server of allServers) { if (server.includes("corporate-")) { const money = ns.getServerMoneyAvailable(server); const minMoney = ns.getServerMaxMoney(server) * 0.25; if (money > minMoney) { targets.push(server); } } } await ns.write("CorpsTargets.txt", targets.join(" n"), "w"); ns.tprint(`Cibles corporatives mises à jour : ${targets.length}`); } corp-hack-distributed.js /** * corp-hack-distributed.js * * Script distribué qui répartit les attaques hack/grow/weaken sur cibles corporate. * * Fonctionnalités : * - Lit CorpsTargets.txt pour cibles. * - Lance des threads sur des serveurs disponibles. * - Gère la répartition des attaques selon la sécurité et l’argent disponible. */ /** @param {NS} ns **/ export async function main(ns) { const targetsRaw = ns.read("CorpsTargets.txt"); if (!targetsRaw) { ns.tprint("Aucune cible corporate détectée"); return; } const targets = targetsRaw.split(" n").filter(Boolean); for (const target of targets) { const sec = ns.getServerSecurityLevel(target); const minSec = ns.getServerMinSecurityLevel(target); const moneyAvail = ns.getServerMoneyAvailable(target); const maxMoney = ns.getServerMaxMoney(target); if (sec > minSec + 5) { await ns.weaken(target); } else if (moneyAvail < maxMoney * 0.75) { await ns.grow(target); } else { await ns.hack(target); } } } corp-hack-cron.js /** * corp-hack-cron.js * * Script cron pour relancer corp-hack-manager.js à intervalle régulier. * * Notes : * - Peut être lancé en background pour automatiser la maintenance. * - Intervalle configurable (par défaut 10 minutes). */ /** @param {NS} ns **/ export async function main(ns) { const interval = 10 * 60 * 1000; // 10 minutes while (true) { ns.exec("corp-hack-manager.js", "home", 1); await ns.sleep(interval); } } corp-hack-worker.js /** * corp-hack-worker.js * * Worker pour exécuter hack/grow/weaken sur une cible donnée. * * Notes : * - Lancé par des managers pour répartir les attaques. * - Boucle continue avec ajustement dynamique. */ /** @param {NS} ns **/ export async function main(ns) { if (ns.args.length < 1) { ns.tprint("Usage: run corp-hack-worker.js [target]"); return; } const target = ns.args[0]; while (true) { const sec = ns.getServerSecurityLevel(target); const minSec = ns.getServerMinSecurityLevel(target); const moneyAvail = ns.getServerMoneyAvailable(target); const maxMoney = ns.getServerMaxMoney(target); if (sec > minSec + 5) { await ns.weaken(target); } else if (moneyAvail < maxMoney * 0.75) { await ns.grow(target); } else { await ns.hack(target); } await ns.sleep(50); } } wse-manager.js /** * wse-manager.js * * Manager du système WSE (Weaponized Script Executor). * * Fonctionnalités : * - Gère l’achat/vente des serveurs et scripts associés. * - Assure la répartition de la charge sur les serveurs pour l’attaque. * * Notes : * - Non intégré directement dans la chaîne corp-hack-manager.js, peut être lancé séparément. */ /** @param {NS} ns **/ export async function main(ns) { // Exemple simple pour illustration (à adapter selon logique spécifique) ns.tprint("Lancement wse-manager.js"); // Gestion achat/vente serveur ici // Distribution des scripts aux serveurs } Atlas.js → Automatisation gang-manager.js corp-manager.js job-manager.js milestones-manager.js Atlas.js ← Point d’entrée principal ├─gang-manager.js ├─corp-manager.js ├─job-manager.js └─milestones-manager.js /** * Atlas.js * * 🗺️ Script principal d’orchestration des services automatisés (gang, corporation, jobs, milestones, etc.) * * 🎯 Objectifs : * - Lancer automatiquement les scripts clés si non lancés. * - Vérifier la RAM disponible avant lancement pour éviter erreurs. * - Informer clairement via logs dans le terminal sur succès/échec. * - Tenter relance progressive si RAM insuffisante. * * 🛠️ Fonctionnalités : * - Gestion dynamique de RAM avec retour d’état. * - Démarrage unique par script (évite doublons). * - Boucle continue avec délais réglables. * * @param {NS} ns */ export async function main(ns) { ns.disableLog("ALL"); ns.clearLog(); // Liste des scripts essentiels à lancer et surveiller const scriptsToLaunch = [ { name: "gang-manager.js", threads: 1 }, { name: "corp-manager.js", threads: 1 }, { name: "job-manager.js", threads: 1 }, { name: "milestones-manager.js", threads: 1 }, // Ajouté pour la gestion milestones ]; const LOOP_DELAY = 30_000; // 30 secondes entre chaque cycle while (true) { ns.clearLog(); for (const script of scriptsToLaunch) { // Vérifie si le script est déjà en cours const isRunning = ns.ps().some(p => p.filename === script.name); if (isRunning) { ns.print(`⏭️ ${script.name} est déjà lancé.`); continue; } // Tente de lancer le script si possible const launched = await tryLaunchScript(ns, script.name, script.threads); if (!launched) { ns.print(`⚠️ Impossible de lancer ${script.name} pour l’instant. RAM insuffisante ou autre problème.`); } } await ns.sleep(LOOP_DELAY); } } /** * Tente de lancer un script en vérifiant la RAM dispo. * * @param {NS} ns * @param {string} scriptName Nom du script à lancer * @param {number} threads Nombre de threads à allouer * @returns {boolean} true si lancement réussi, false sinon */ async function tryLaunchScript(ns, scriptName, threads = 1) { const ramNeeded = ns.getScriptRam(scriptName) * threads; const maxRam = ns.getServerMaxRam("home"); const usedRam = ns.getServerUsedRam("home"); const freeRam = maxRam - usedRam; if (freeRam < ramNeeded) { ns.print(`❌ RAM insuffisante pour ${scriptName} (nécessaire: ${ramNeeded} Go, dispo: ${freeRam} Go)`); return false; } const pid = ns.exec(scriptName, "home", threads); if (pid === 0) { ns.print(`❌ Échec du lancement de ${scriptName} malgré RAM suffisante.`); return false; } ns.print(`✅ ${scriptName} lancé avec succès (PID ${pid})`); return true; } gang-manager.js → Automatisation Gang (BETA) gang-manager.js⚠️ SemifonctionnelExécution correcte, logique à affiner (recrutement, combat…). Les membres ont tendance à rester affiliés en boucle à "terrorism" augmentation automatisée du territoire possible mais fantaisiste à tendance à ne pas générer d'argent gang-manager.js /** * gang-manager.js * * Automatisation complète de gestion d’un gang dans Bitburner. * * Fonctionnalités : * - Création automatique du gang si absent. * - Recrutement automatique jusqu’au maximum. * - Assignation dynamique des tâches selon le respect. * - Achat automatique d’équipement si abordable, en gardant une réserve d’argent. * - Ascension automatique des membres si gains d’augmentation possibles. * - Affichage clair des stats et actions dans la fenêtre tail(). * - Pause d’une minute entre chaque boucle. * * Paramètres modifiables : * - MIN_CASH_RESERVE : montant minimal à garder sur home pour ne pas tout dépenser. * * Usage : * - Lancer ce script indépendamment, il s’occupe de tout. * * @param {NS} ns **/ export async function main(ns) { ns.disableLog("sleep"); ns.clearLog(); ns.tail(); // Montant minimal à garder sur home (ex : 100 millions) const MIN_CASH_RESERVE = 100_000_000; /** * Formate une somme d’argent en notation courte avec suffixe. * Exemple : 1234567890 -> 1.23B * @param {number} amount * @returns {string} */ function formatMoneyShort(amount) { const suffixes = ["", "k", "M", "B", "T", "Qa", "Qi", "Sx", "Sp", "Oc", "No"]; if (amount === 0) return "0"; const tier = Math.floor(Math.log10(amount) / 3); if (tier === 0) return amount.toFixed(2); const suffix = suffixes[tier] || `e${tier * 3}`; const scale = Math.pow(10, tier * 3); const scaled = amount / scale; return `${scaled.toFixed(2)}${suffix}`; } // Création automatique du gang s’il n’existe pas if (!ns.gang.inGang()) { ns.tprint("Création du gang..."); ns.gang.createGang("Terrorists"); } while (true) { ns.clearLog(); // Recrutement automatique while (ns.gang.canRecruitMember()) { const name = "Gangster-" + Date.now(); ns.gang.recruitMember(name); ns.tprint(`Recruté : ${name}`); } // Récupération des infos du gang et des membres const info = ns.gang.getGangInformation(); const members = ns.gang.getMemberNames(); // Argent dispo sur home formaté const cashAvailable = ns.getServerMoneyAvailable("home"); ns.print(`Respect: ${info.respect.toLocaleString()} | Territoire: ${(info.territory * 100).toFixed(2)}% | Argent dispo: $${formatMoneyShort(cashAvailable)}`); // Activation/désactivation de la guerre de territoire selon seuil if (info.territory < 0.9) { ns.gang.setTerritoryWarfare(true); ns.print("Guerre de territoire activée"); } else { ns.gang.setTerritoryWarfare(false); ns.print("Contrôle suffisant, guerre désactivée"); } // Gestion individuelle des membres for (const member of members) { // Assignation des tâches selon le respect total if (info.respect < 10_000) { ns.gang.setMemberTask(member, "Train Combat"); } else { ns.gang.setMemberTask(member, "Territory Warfare"); } // Achat automatique d’équipement non possédé, en respectant la réserve d’argent const equipmentList = ns.gang.getEquipmentNames(); const memberInfo = ns.gang.getMemberInformation(member); const ownedEquipment = memberInfo.equipment ?? []; // fallback tableau vide si undefined for (const eq of equipmentList) { if (!ownedEquipment.includes(eq)) { const cost = ns.gang.getEquipmentCost(eq); if (cost <= cashAvailable - MIN_CASH_RESERVE) { const purchased = ns.gang.purchaseEquipment(member, eq); if (purchased) ns.print(`✅ Équipement '${eq}' acheté pour ${member}`); } } } // Ascension automatique si bénéfices disponibles const ascRes = ns.gang.getAscensionResult(member); if (ascRes !== undefined) { const canAscend = Object.values(ascRes).some(val => val > 0); if (canAscend) { ns.gang.ascendMember(member); ns.print(`🚀 ${member} est monté en ascension !`); } } // Affichage tâche assignée actuelle ns.print(` - ${member}: ${memberInfo.task}`); } await ns.sleep(60_000); } } corp-manager.js → Automatisation Corp [ALPHA] corp-manager.js⚠️ SemifonctionnelProduction/ventes en boucle fonctionnelle, mais optimisations manquent. Attention, risques élevés de générer un bilan négatif corp-manager.js /** * corp-manager.js * * Automatisation basique de la corporation. * * Fonctionnalités améliorées : * - Création de la corporation si nécessaire. * - Création/extension de divisions et bureaux. * - Achat d'entrepôts. * - Activation de R&D et marketing. * - Affichage en temps réel des stats dans tail(). * - Boucle avec délai de 30 secondes. * * Limitations : * - Pas de gestion avancée produits ou employés. * - Nécessite des améliorations futures. * * Utilisation : * - Script autonome. * * @param {NS} ns **/ export async function main(ns) { ns.disableLog("sleep"); ns.clearLog(); ns.tail(); if (!ns.corporation.hasCorporation()) { ns.tprint("Création de la corporation..."); ns.corporation.createCorporation("MyCorp", false); } const cities = ["Aevum", "Chongqing", "New Tokyo", "Ishima", "Volhaven"]; const divisions = ["Agriculture", "Energy", "Tobacco"]; while (true) { ns.clearLog(); for (const div of divisions) { if (!ns.corporation.hasDivision(div)) { ns.corporation.expandIndustry(div, cities[0]); ns.tprint(`Division créée : ${div}`); } const division = ns.corporation.getDivision(div); for (const city of cities) { if (!division.cities.includes(city)) { ns.corporation.expandCity(div, city); } if (ns.corporation.getOffice(div, city).size < 10) { ns.corporation.buyOffice(div, city, 10); } if (ns.corporation.getWarehouse(div, city).size < 20) { ns.corporation.upgradeWarehouse(div, city, 20); } } // Activation simple R&D + marketing const researchProjects = ns.corporation.getResearchNames(); for (const proj of researchProjects) { if (!division.research.includes(proj) && ns.corporation.getCorporation().funds > 1e9) { ns.corporation.purchaseResearch(div, proj); } } for (const city of cities) { const products = ns.corporation.getProductNames(div, city); for (const product of products) { ns.corporation.setProductMarketTA1(div, product, true); ns.corporation.setProductMarketTA2(div, product, true); ns.corporation.setProductMarketTA3(div, product, true); } } ns.print(`Division: ${div} | Villes: ${division.cities.join(", ")}`); } await ns.sleep(30_000); } } job-manager.js → Automatisation des Jobs [ALPHA 0.0.0.1] (quasi inutile en l'état) ScriptStatutRemarque job-manager.js🛠️ En coursAffiche les jobs disponibles dans la ville actuelle (sans auto-job). autrement dit ne fait quasi rien en l'état actuel (avec ChatGPT on a beaucoup de mal à trouver comment accéder à la liste des jobs disponibles selon les villes, ou encore les gains, etc... Liste des industries rédigée à la main et incomplète. Je continue de chercher de mon côté, mais toute aide est bienvenue job-manager.js /** * sob-manager.js * * 📋 Affiche un tableau des entreprises connues dans la ville actuelle. * ⚠️ Ne nécessite PAS l'accès Singularity. * 🧍 Requiert de remplir manuellement les informations. * 🔁 Mise à jour après chaque voyage manuel. */ /** @param {NS} ns */ export async function main(ns) { ns.disableLog("ALL"); ns.clearLog(); const city = ns.getPlayer().city; // 💼 Liste des entreprises connues par ville const companiesByCity = { "Sector-12": [ "MegaCorp", "Blade Industries", "Four Sigma", "Bachman & Associates", "Clarke Incorporated", "ECorp", "Fulcrum Technologies" ], "Aevum": [ "ECorp", "MegaCorp", "NetLink Technologies", "OmniTek Incorporated", "Tesla Corporation" ], "Volhaven": [ "NWO", "Icarus Microsystems", "Helios Labs", "Unitalife", "OmniTek Incorporated" ], "Chongqing": ["KuaiGong International", "Four Sigma"], "New Tokyo": ["Noodle Bar", "KuaiGong International"], "Ishima": ["Noodle Bar", "Four Sigma"] }; const companies = companiesByCity[city] || []; // 🖥️ Affichage dans le terminal ns.tprint(`📍 Ville actuelle : ${city}`); ns.tprint(`🏢 Entreprises détectées : ${companies.length}`); ns.tprint("────────────────────────────────────────────────────────────"); ns.tprint("Entreprise | Statut | Commentaire"); ns.tprint("────────────────────────────────────────────────────────────"); for (const company of companies) { ns.tprint(`${company.padEnd(25)} | ${"—".padEnd(13)} | ${"Non évalué"}`); } ns.tprint(" nℹ️ Pour plus d’infos sur une entreprise : allez dans le menu 'City' → cliquez sur une entreprise, puis regardez votre réputation et le poste proposé."); } milestones-manager.js → automatisation milestones [ALPHA] /** * 🏆 milestones-manager.js * * 🎯 Gestion automatique des exploits "Milestones" et pose des backdoors. * * 📌 Fonctionnalités : * - Vérifie les serveurs spéciaux (CSEC, avmnite-02h, etc.) * - Installe automatiquement les backdoors si les conditions sont réunies : * - Accès root * - Connexion physique * - Hacking requis * - Gère les erreurs proprement, sans message "undefined" * - Ne crée plus de flood dans le terminal (grâce à un contrôle explicite du tail) * * ✅ Astuce : lancer `run milestones-manager.js --tail` pour voir les logs si besoin. * * @param {NS} ns */ export async function main(ns) { ns.disableLog("ALL"); ns.clearLog(); // ✅ N'affiche la fenêtre tail que si demandé explicitement if (ns.args.includes("--tail")) ns.tail(); const backdoorTargets = [ "CSEC", "avmnite-02h", "I.I.I.I", "run4theh111z", "The-Cave" ]; const backdoorStatus = {}; ns.print("📌 --- Milestones Manager ---"); ns.print("🔎 Vérification des exploits et backdoors... n"); for (const server of backdoorTargets) { try { ns.print(`🔍 Serveur ciblé : ${server}`); if (!ns.hasRootAccess(server)) { ns.print(`⚠️ Pas d'accès root à ${server} — backdoor impossible.`); backdoorStatus[server] = false; continue; } const currentServer = ns.getHostname(); if (currentServer !== server) { try { ns.connect(server); ns.print(`🔌 Connecté à ${server}`); } catch (e) { ns.print(`❌ Impossible de se connecter à ${server}: ${e.message || e}`); backdoorStatus[server] = false; continue; } } ns.print(`🔑 Pose de backdoor sur ${server}...`); await ns.singularity.installBackdoor(server); ns.print(`✅ Backdoor installée avec succès sur ${server}`); backdoorStatus[server] = true; } catch (e) { const errMsg = e?.message || JSON.stringify(e); ns.print(`❌ Erreur lors de l'installation sur ${server} : ${errMsg}`); backdoorStatus[server] = false; } ns.print(""); // Ligne vide pour lisibilité } // 📊 Résumé global ns.print("📊 Résumé backdoors :"); for (const [server, status] of Object.entries(backdoorStatus)) { ns.print(`- ${server}: ${status ? "✅ Installée" : "❌ Non installée"}`); } }
2026-02-15 22:00:09 发布在
Bitburner
说点好听的...
收藏
0
0
