4ACCU75NFJ4ZD5CMHBBYCFLBWL2XQH4RS65FTR4JDJPBHTABYJZAC NQ22FUSWN6CBJKJ5H7UV5N2KEXBIXVNQDNL2EK6UJ3E7RFLWNVDQC 2BKHJI2SJ3VXTFBK2BWNN3I3BDNMUU5YTJGKTQCOXV66VVRHCGKAC HHZNTFCTPVDB5GIBDLZFZPDKR62SD47HQ5QALRBSP5UN52M6GLEAC VMXI7PS4GFDOWPFLHQ7TYKJ5K3K7FXNPJCBEVYHTTRN7YB5ZHEQAC EYKBOK3OG5YHBBZV3OQB423I7RVDK2HLSXEKKWJLQLKXZKUTUJBAC 2LU5Y77OWHXI4FV3YKELPYQSUOQGRSO7CXWPKUCQZ2WM5YUBZBRQC 6MBUKAG6VK6XXGRSER273IP2R35P3C5K3KOY4QVSZXEOYD3H4WRAC CJBGAILAK7G3WXYUBNUZMUMM3U5CPHWVK6ZAJWYBL4IOB5SZN32AC const string_job_decide = function(ns, string_server_target, float_server_target_security, float_server_target_cash) {
const string_job_decider_prepare = function(ns, string_server_target, float_server_target_security, float_server_target_cash) {if (float_server_target_security > ns.getServerMinSecurityLevel(string_server_target)) {return "weaken";}if (float_server_target_cash < ns.getServerMaxMoney(string_server_target)) {return "grow";}return "";};const string_job_decider = function(ns, string_server_target, float_server_target_security, float_server_target_cash) {
};// weakens the target server. should be finished running before running main scheduleconst array_make_schedule_weaken = function(ns, integer_job_cap, float_padding_seconds, string_server_target_argument) {const object_scripts = object_get_constants(ns).object_scripts;const array_servers_rooted_sorted_by_ram = array_get_servers_rooted_sorted_by_ram(ns);let string_server_target = string_server_target_argument;if (string_server_target_argument === null) {string_server_target = string_get_server_rooted_hackable_with_score_biggest(ns);}const float_server_target_security_minimum = ns.getServerMinSecurityLevel(string_server_target);const float_time_weaken = float_get_time_weaken(ns, string_server_target, ns.getServerSecurityLevel(string_server_target));let float_server_target_security_current = ns.getServerSecurityLevel(string_server_target);let array_schedule_weaken = [];let integer_array_schedule_weaken_length = 0;// assumes weaken takes longestlet integer_time_job_finishes_seconds = float_time_weaken;// iterate through servers in reverse to use servers with the biggest rams firstfor (let integer_indices_0 = array_servers_rooted_sorted_by_ram.length - 1; integer_indices_0 >= 0; --integer_indices_0) {if (float_server_target_security_current <= float_server_target_security_minimum ||integer_array_schedule_weaken_length >= integer_job_cap) {break;}const string_server_used = array_servers_rooted_sorted_by_ram[integer_indices_0];let float_server_used_ram_free_current = float_get_server_ram_free(ns, string_server_used);while (float_server_target_security_current > float_server_target_security_minimum &&float_server_used_ram_free_current > 0 &&integer_array_schedule_weaken_length < integer_job_cap) {let schedule_item = {string_job: "weaken",string_server_used: string_server_used,string_server_target: string_server_target,float_server_target_security_before: float_server_target_security_current};if (!boolean_can_server_run_script_threads(ns, float_server_used_ram_free_current, object_scripts.weaken.ram, 1)) {// ram of the currently used server isn't actually 0, we're just doing this to skip it and start using a server with more ramfloat_server_used_ram_free_current = 0;break;}const integer_threads_weaken = integer_get_threads_weaken(ns, float_server_used_ram_free_current, string_server_target, float_server_target_security_current);float_server_used_ram_free_current -= integer_threads_weaken * object_scripts.weaken.ram;const float_server_target_security_uncorrected = float_server_target_security_current - float_get_security_decrease_from_weaken(ns, integer_threads_weaken);if (float_server_target_security_uncorrected < float_server_target_security_minimum) {float_server_target_security_current = float_server_target_security_minimum;}else {float_server_target_security_current = float_server_target_security_uncorrected;}schedule_item.float_delay_seconds = integer_time_job_finishes_seconds - float_time_weaken + float_padding_seconds;integer_time_job_finishes_seconds += float_padding_seconds;schedule_item.integer_time_job_finishes_seconds = integer_time_job_finishes_seconds;schedule_item.integer_threads = integer_threads_weaken;array_schedule_weaken.push(schedule_item);++integer_array_schedule_weaken_length;break;}}return array_schedule_weaken;
// makes the actual weakening, growing and hacking scheduleconst array_make_schedule = function(ns, integer_job_cap, float_precision, float_steal_cap, float_padding_seconds, string_server_target_argument) {
// makes a scheduleconst array_make_schedule = function(ns, integer_job_cap, float_precision, float_steal_cap, float_padding_seconds, string_server_target_argument, string_decider) {
const string_job = string_job_decide(ns, string_server_target, float_server_target_security_current, float_server_target_cash_current);let schedule_item = {
const string_job = string_decider(ns, string_server_target, float_server_target_security_current, float_server_target_cash_current);const schedule_item = {
// ram of the currently used server isn't actually 0, we're just doing this to skip it and start using a server with more ramfloat_server_used_ram_free_current = 0;
// start using a server with more ramboolean_end_loop_server = true;
// ram of the currently used server isn't actually 0, we're just doing this to skip it and start using a server with more ramfloat_server_used_ram_free_current = 0;
// start using a server with more ramboolean_end_loop_server = true;
// ram of the currently used server isn't actually 0, we're just doing this to skip it and start using a server with more ramfloat_server_used_ram_free_current = 0;
// start using a server with more ramboolean_end_loop_server = true;
const void_schedule_runner = async function(ns, array_schedule) {for (let integer_indices_0 = 0; integer_indices_0 < array_schedule.length; ++integer_indices_0) {switch (array_schedule[integer_indices_0].string_job) {case "weaken": {await void_exec_script_weaken(ns, array_schedule[integer_indices_0].string_server_used, array_schedule[integer_indices_0].string_server_target, array_schedule[integer_indices_0].integer_threads, array_schedule[integer_indices_0].float_delay_seconds * 1000, integer_indices_0);break;}case "grow": {await void_exec_script_grow(ns, array_schedule[integer_indices_0].string_server_used, array_schedule[integer_indices_0].string_server_target, array_schedule[integer_indices_0].integer_threads, array_schedule[integer_indices_0].float_delay_seconds * 1000, integer_indices_0);break;}case "hack": {await void_exec_script_hack(ns, array_schedule[integer_indices_0].string_server_used, array_schedule[integer_indices_0].string_server_target, array_schedule[integer_indices_0].integer_threads, array_schedule[integer_indices_0].float_delay_seconds * 1000, integer_indices_0);break;}}}};
// schedule runner. returns the the time it'll take to finish in milliseconds.export const void_schedule_runner = async function(ns, string_servers_bought_name, integer_job_cap, float_precision, float_steal_cap, float_padding_seconds, string_server_target) {
// returns the the time it'll take to finish in milliseconds.export const void_runner = async function(ns, string_servers_bought_name, integer_job_cap, float_precision, float_steal_cap, float_padding_seconds, string_server_target) {
// weaken target if necessary to reduce the time it takes to finish later jobsconst array_schedule_weaken = array_make_schedule_weaken(ns, integer_job_cap, float_padding_seconds, string_server_target);if (array_schedule_weaken.length >= 1) {for (let integer_indices_0 = 0; integer_indices_0 < array_schedule_weaken.length; ++integer_indices_0) {await void_exec_script_weaken(ns, array_schedule_weaken[integer_indices_0].string_server_used, array_schedule_weaken[integer_indices_0].string_server_target, array_schedule_weaken[integer_indices_0].integer_threads, array_schedule_weaken[integer_indices_0].float_delay_seconds * 1000, integer_indices_0);
// prepare the target if necessarywhile (true) {if (ns.getServerSecurityLevel(string_server_target) === ns.getServerMinSecurityLevel(string_server_target) &&ns.getServerMoneyAvailable(string_server_target) === ns.getServerMaxMoney(string_server_target)) {
await ns.sleep(array_schedule_weaken[array_schedule_weaken.length - 1].integer_time_job_finishes_seconds * 1000);}// make and run actual scheduleconst array_schedule = array_make_schedule(ns, integer_job_cap, float_precision, float_steal_cap, float_padding_seconds, string_server_target);for (let integer_indices_0 = 0; integer_indices_0 < array_schedule.length; ++integer_indices_0) {switch (array_schedule[integer_indices_0].string_job) {case "weaken": {await void_exec_script_weaken(ns, array_schedule[integer_indices_0].string_server_used, array_schedule[integer_indices_0].string_server_target, array_schedule[integer_indices_0].integer_threads, array_schedule[integer_indices_0].float_delay_seconds * 1000, integer_indices_0);break;}case "grow": {await void_exec_script_grow(ns, array_schedule[integer_indices_0].string_server_used, array_schedule[integer_indices_0].string_server_target, array_schedule[integer_indices_0].integer_threads, array_schedule[integer_indices_0].float_delay_seconds * 1000, integer_indices_0);break;}case "hack": {await void_exec_script_hack(ns, array_schedule[integer_indices_0].string_server_used, array_schedule[integer_indices_0].string_server_target, array_schedule[integer_indices_0].integer_threads, array_schedule[integer_indices_0].float_delay_seconds * 1000, integer_indices_0);break;}
const array_schedule_prepare = array_make_schedule(ns, integer_job_cap, float_precision, float_steal_cap, float_padding_seconds, string_server_target, string_job_decider_prepare);if (array_schedule_prepare.length > 0) {await void_schedule_runner(ns, array_schedule_prepare);await ns.sleep(array_schedule_prepare[array_schedule_prepare.length - 1].integer_time_job_finishes_seconds * 1000);
integer_time_finishes = await void_schedule_runner(ns, string_servers_bought_name, integer_job_cap, float_precision, float_steal_cap, float_padding_seconds, string_server_target) + Date.now();
integer_time_finishes = await void_runner(ns, string_servers_bought_name, integer_job_cap, float_precision, float_steal_cap, float_padding_seconds, string_server_target) + Date.now();
* SERVER = The server that should be targetted by the `weaken`, `grow` and `hack` functions. Should be a string. Defaults to choosing an optimal target using a scroing system based on the server's maximum cash, growth, required hacking level, and the player's current hacking level.
* SERVER = The server that should be targetted by the `weaken`, `grow` and `hack` functions. Should be a string. Defaults to choosing an optimal target using a scoring system based on the server's maximum cash, growth, required hacking level, and the player's current hacking level.
* Runs the script with up to 4000 jobs, targetting "harakiri-sushi" and stealing up to 50% of it's cash per `hack` job, whilst the remaining variables are set to defaults.
* Runs the script with up to 4000 jobs, targetting "harakiri-sushi" and stealing only up to 50% of it's cash per "hack.js" job that finishes executing, whilst the remaining variables are set to defaults.