};
// weakens the target server. should be finished running before running main schedule
const array_make_schedule_weaken = function(ns, integer_job_cap, float_padding_seconds, string_server_target_argument) {
void_debug(array_make_schedule_weaken, Array.from(arguments));
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 longest
let integer_time_job_finishes_seconds = float_time_weaken;
// iterate through servers in reverse to use servers with the biggest rams first
for (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 (!bool_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 ram
float_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;