روبوت بسيط يستخدم الرياضيات لاختيار الترقية الأكثر ربحية.
كيف يعمل
يقوم الروبوت بالخطوات التالية.
- التحقق من التكلفة ونمو الإنتاج لجميع الترقيات الممكنة
- يحسب نسبة مربحة من كل ترقية
- فرز العناصر حسب النسبة تنازليًا
- يختار العنصر الأول
- يتحقق مما إذا كان بإمكانك شراء الترقية الآن, إذا لم يكن كذلك, ينتظر لجمع المال
- يتحقق مما إذا كان بإمكانك شراء عقدة جديدة في أقل من 30 ثواني (يمكنك تخصيص هذه المرة), إذا كان الأمر كذلك, يشتريه
- يكرر…
نسبة مربحة = نمو الإنتاج / تكلفة الترقية
نمو الإنتاج = الإنتاج بعد الترقية / الإنتاج الحالي
يعتمد هذا الدليل على تقريري السابق “أتمتة عقد Hacknet”.
كيفية الاستخدام
قم بالخطوات التالية.
- قم بتشغيل المحطة
- اكتب "nano hacknet-bot.js".’
- انسخ وألصق الكود أدناه في هذا الملف
- احفظ الملف (كنترول + ق)
- العودة إلى المحطة
- اكتب "تشغيل hacknet-bot.js".’
/** @param {ن.س} نانوثانية **/ وظيفة التصدير غير المتزامنة الرئيسية(نانوثانية) { // helpers const getMoney = () => ns.getPlayer().مال; const getProd = (مستوى, كبش, النوى) => (مستوى * 1.5) * Math.pow(1.035, كبش - 1) * ((النوى + 5) / 6); // your production multiplier const PROD_MULTIPLIER = ns.getHacknetMultipliers().إنتاج; // الحد الأقصى لوقت الانتظار لجمع الأموال للعقدة الجديدة (الافتراضي 30 ثانية) const WAITING_TIME = ns.args[0] || 30; بينما (حقيقي) { النسب الثابتة = []; دع hacknetProduction = 0; // loop through all nodes for (اسمحوا الفهرس = 0; فِهرِس < ns.hacknet.numNodes(); مؤشر ++) { // الحصول على احصائيات العقدة الحالية const { مستوى, كبش, النوى, إنتاج } = ns.hacknet.getNodeStats(فِهرِس); hacknetProduction += production; // الحصول على تكلفة الترقيات constlevelUpgradeCost = ns.hacknet.getLevelUpgradeCost(فِهرِس); const ramUpgradeCost = ns.hacknet.getRamUpgradeCost(فِهرِس); const coreUpgradeCost = ns.hacknet.getCoreUpgradeCost(فِهرِس); // الحصول على همز. نمو / نسب التكلفة constlevelUpgradeRatio = ((getProd(مستوى + 1, كبش, النوى) * PROD_MULTIPLIER) - إنتاج) / LevelUpgradeCost; نسبة ذاكرة الوصول العشوائي الثابتة = ((getProd(مستوى, كبش * 2, النوى) * PROD_MULTIPLIER) - إنتاج) / ramUpgradeCost; نسبة الترقية الأساسية = ((getProd(مستوى, كبش, النوى + 1) * PROD_MULTIPLIER) - إنتاج) / coreUpgradeCost; // الترقيات المحتملة للعقدة الحالية constcurrentNodeUpgrades = [ {نسبة: LevelUpgradeRatio, يكلف: LevelUpgradeCost, nodeIndex: فِهرِس, يرقي: "مستوى"}, {نسبة: ramUpgradeRatio, يكلف: ramUpgradeCost, nodeIndex: فِهرِس, يرقي: "كبش"}, {نسبة: coreUpgradeRatio, يكلف: coreUpgradeCost, nodeIndex: فِهرِس, يرقي: "جوهر"} ]; // دفع ترقيات العقدة الحالية لجميع نسب الترقيات.push(...currentNodeUpgrades); } // احصل على الترقية الأكثر ربحية { يكلف, nodeIndex, يرقي } = النسب((أ, ب) => ب.نسبة - أ. نسبة)[0]; // wait until you have the money for upgrade while (getMoney() < يكلف) { انتظر ns.sleep(1); } // تنفيذ مفتاح الترقية (يرقي) { قضية "مستوى": انتظر ns.hacknet.upgradeLevel(nodeIndex); استراحة; قضية "كبش": انتظر ns.hacknet.upgradeRam(nodeIndex); استراحة; قضية "جوهر": انتظر ns.hacknet.upgradeCore(nodeIndex); استراحة; تقصير: يكمل; } // تحقق مما إذا كان بإمكانك شراء عقدة جديدة const buyNodeCost = ns.hacknet.getPurchaseNodeCost(); const MissingMoneyForNewNode = buyNodeCost - getMoney(); لو (MissingMoneyForNewNode > 0 && MissingMoneyForNewNode < hacknetProduction * في انتظار_الوقت) { // إذا كنت بحاجة إلى الانتظار لعقدة الشراء أقل من WAITING_TIME (في ثواني) program waits to collect money while (getMoney() < buyNodeCost) { انتظر ns.sleep(1); } ns.hacknet.purchaseNode(); } // sleep 1ms to prevent crash because of infinite loop await ns.sleep(1); } }
يمكنك تخصيص وقت انتظار عقدة الشراء (افتراضيا 30S) عن طريق تمرير وسيطة نصية إضافية. على سبيل المثال:
قم بتشغيل hacknet-bot.js 120
هذا كل ما نشاركه اليوم من أجل هذا بيتبورنر مرشد. تم إنشاء هذا الدليل وكتابته في الأصل بواسطة syw1. في حالة فشلنا في تحديث هذا الدليل, يمكنك العثور على آخر تحديث باتباع هذا وصلة.