يتيح لك هذا البرنامج النصي إدارة عصابة قتالية تلقائيًا.
الوصف
يتيح لك هذا البرنامج النصي إدارة عصابة قتالية تلقائيًا.
يستغرق أقل من 32 جيجا بايت ، لذلك يمكن تشغيله من منزلك دون ترقيات ذاكرة الوصول العشوائي.
يستغرق أقل من يوم واحد للفوز بعقدة BN2.
يحتوي على الكثير من الثوابت القابلة للضبط يدويًا (لم أقم بضبطها جيدًا ، لذا يمكنك تحسين البرنامج النصي إذا وجدت أن الإعدادات الافتراضية غير متوازنة).
يمكن تبديل مهام أعضاء العصابة يدويًا ، ويكتشف البرنامج النصي ذلك ولن يقوم بتبديلها تلقائيًا إذا وجد شخصًا قام بتبديل المهام (يمكنك العودة إلى الوضع التلقائي إذا قمت بتعيين مهمة "غير محددة" ، أو فقط أعد تشغيل البرنامج النصي).
تتم إدارة عمليات الصعود والمعدات وحرب الأراضي من خلال البرنامج النصي أيضًا.
نعم ، أسلوب الترميز سيء ، إنه "تطور سريع".
يستغرق أقل من 32 جيجا بايت ، لذلك يمكن تشغيله من منزلك دون ترقيات ذاكرة الوصول العشوائي.
يستغرق أقل من يوم واحد للفوز بعقدة BN2.
يحتوي على الكثير من الثوابت القابلة للضبط يدويًا (لم أقم بضبطها جيدًا ، لذا يمكنك تحسين البرنامج النصي إذا وجدت أن الإعدادات الافتراضية غير متوازنة).
يمكن تبديل مهام أعضاء العصابة يدويًا ، ويكتشف البرنامج النصي ذلك ولن يقوم بتبديلها تلقائيًا إذا وجد شخصًا قام بتبديل المهام (يمكنك العودة إلى الوضع التلقائي إذا قمت بتعيين مهمة "غير محددة" ، أو فقط أعد تشغيل البرنامج النصي).
تتم إدارة عمليات الصعود والمعدات وحرب الأراضي من خلال البرنامج النصي أيضًا.
نعم ، أسلوب الترميز سيء ، إنه "تطور سريع".
الرمز
/* (do not copy this comment, it's a disclaimer for Russian laws only) * Перечисленная ниже деятельность запрещена на территории РФ и осуждается автором данного руководства. Данное руководство не имеет ничего общего с реальной жизнью, все выполняемые в нём действия влияют только на цифры в видеоигре и являются исключительно художественным вымыслом. */ const TASK_TRAIN = "Train Combat"; const TASK_VIGI = "Vigilante Justice"; const TASK_NOOB = String.fromCharCode(77) + "ug People"; const TASK_RESPECT = String.fromCharCode(84) + "errorism"; const TASK_MONEY = "Human " + String.fromCharCode(84) + "rafficking"; const TASK_WARFARE = "Territory Warfare"; const TASK_NULL = "Unassigned"; const TASK_MANUAL = "Manual/NotReallyTaskName"; const ASCEND_ON_MPL = 10; const EQUIP_AFFORD_COEFF = 100; const STATS_TRESHOLD = 0.7; const STATS_MIN = 4000; const STATS_HARD_MIN = 200; const TRAIN_CHANCE = 0.2; const RESPECT_MIN = 2e+6; const WANTED_PENALTY_TRESHOLD = 0.99; const WARFARE_TRESHOLD = 2; const MEMBERS_MIN = 6; const MEMBERS_MAX = 12; const SLEEP_TIME = 10000; /** @param {NS} ns **/ export async function main(ns) { const gang = ns.gang; // Get weighted stats sum (at this moment, sum of combat stats in eq proportions) function getStatsSum(member) { const info = gang.getMemberInformation(member); return info.str + info.def + info.dex + info.agi; } // Find the best gang power except our gang function maxEnemyPower(myGang) { const others = ns.gang.getOtherGangInformation(); let maxPower = 0; for (let name in others) { if (name === myGang.faction) continue; maxPower = Math.max(maxPower, others[name].power); } return maxPower; } // Set a task or not to set (if manually overridden) const autoTasks = {} function setAutoTask(member, task) { const info = gang.getMemberInformation(member); const lastTask = info.task; // Manual task: stored task mismatches real task and not unassigned if (lastTask !== TASK_NULL && autoTasks.hasOwnProperty(member) && autoTasks[member] !== lastTask) { autoTasks[member] = TASK_MANUAL; return; } // Automatic task: set it if differs from real one autoTasks[member] = task; if (lastTask !== task) { gang.setMemberTask(member, task); } } // The script accepts argument for default task override (optional) let defaultTask = null; if (ns.args[0] && gang.getTaskNames().includes(ns.args[0])) { defaultTask = ns.args[0]; } // Main loop for (;;) { // Recruit any member possible while (gang.canRecruitMember()) gang.recruitMember('member' + gang.getMemberNames().length); let bestStats = STATS_MIN / STATS_TRESHOLD; // minimum const members = gang.getMemberNames(); const info = gang.getGangInformation(); // Ascend if good enough for (let member of members) { const r = gang.getAscensionResult(member); if (!r) continue; const mpl = r.agi * r.def * r.dex * r.str; if (mpl > ASCEND_ON_MPL) { gang.ascendMember(member); ns.tprint(`Member ${member} ascended!`); } } // Purchase equipment const allEquip = gang.getEquipmentNames(); let money = ns.getServerMoneyAvailable('home'); for (let equip of allEquip) { const cost = gang.getEquipmentCost(equip); const amount = money/cost; if (amount < EQUIP_AFFORD_COEFF) continue; for (let member of members) { const info = gang.getMemberInformation(member); if (info.upgrades.includes(equip) || info.augmentations.includes(equip)) continue; if (gang.purchaseEquipment(member, equip)) { money -= cost; } } } // Find best stats for (let member of members) { let sum = getStatsSum(member); if (sum > bestStats) bestStats = sum; } // Check if we are powerful enough let powerfulEnough = info.power >= maxEnemyPower(info) * WARFARE_TRESHOLD; gang.setTerritoryWarfare(powerfulEnough); // Choose the default task for members let task = defaultTask; if (!defaultTask) { // If gang isn't full - gain respect if (members.length < MEMBERS_MAX) { task = (members.length < MEMBERS_MIN) ? TASK_NOOB : TASK_RESPECT; } else { // if respect too low - gain it first, power second, money last if (info.respect < RESPECT_MIN) { task = TASK_RESPECT; } else if (!powerfulEnough) { task = TASK_WARFARE; } else { task = TASK_MONEY; } } } // Assign tasks for (let member of members) { let sum = getStatsSum(member); // Train members, not acceptable in 'noob mode' if (sum < STATS_HARD_MIN || (members.length >= MEMBERS_MIN && sum < bestStats * STATS_TRESHOLD)) { setAutoTask(member, TASK_TRAIN); continue; } // Vigi if wanted penalty too large if (info.wantedLevel > 2 && info.wantedPenalty < WANTED_PENALTY_TRESHOLD) { setAutoTask(member, TASK_VIGI); continue; } // Do the default task (autoselected or called with args[0]) setAutoTask(member, Math.random() < TRAIN_CHANCE ? TASK_TRAIN : task); } await ns.sleep(SLEEP_TIME); } }
By شوغال
المزيد من الأدلة:
- Bitburner: أتمتة عقد Hacknet
- Bitburner: كيفية إضافة إحصائيات مخصصة إلى HUD (شاشة العرض الرأسية)
- Bitburner: البرنامج النصي لإدارة السيارات في وقت مبكر من Hacknet
- Bitburner: دليل إنجاز DevMenu
- Bitburner: دليل اللعبة المبكر (مجاني المفسد)
مرحبا ، شكرا على السيناريو الخاص بك.
لدي هذا الخطأ عند تشغيله:
خطا وقت التشغيل
عصابة.ns@home
لم يتم تعريف العضو
كومة:
ReferenceError: العضو غير معرّف
في Module.main (gang.ns: 121: 16)
at executeJSScript (file:///C:/Program%20Files%20(x86)/Steam/steamapps/common/Bitburner/resources/app/main.bundle.js:19:83091)
كيف تعلن "عضو"؟
أطيب التحيات
} // Vigi إذا أراد عقوبة كبيرة جدًا إذا (info.wantedLevel> 2 &&
في هذا السطر ، قم بإزالة التعليق لإصلاحه:
"// فيجي إذا أراد ركلة جزاء كبيرة جدًا"