Call of Duty: Black Ops 4 · handler “Call of Duty Black Ops 4”
Version 5 (current)
Release notes
Updated to newer client version by Kilo
- Released
- Size
- 18.2 MB
- Downloads
- 2,405
- Check
- Verified
- SHA-256
- 072c368e2d77b1bb66b58994958d57977fe86f0eb4d5090874c3e467b495ac28
Files 62
| Path | Size |
|---|---|
| Call Of Duty Black Ops 4/config.ini | 9.2 KB |
| Call Of Duty Black Ops 4/discord_game_sdk.dll | 3.3 MB |
| Call Of Duty Black Ops 4/DROP THE DW SERVER FOLDER HERE.txt | 0 B |
| Call Of Duty Black Ops 4/LPC/.manifest | 1.5 KB |
| Call Of Duty Black Ops 4/LPC/arasafe_core_ffotd_tu23_639_cf92ecf4a75d3f79.ff | 2.4 KB |
| Call Of Duty Black Ops 4/LPC/arasafe_core_playlists_tu23_639_cf92ecf4a75d3f79.ff | 2.4 KB |
| Call Of Duty Black Ops 4/LPC/bp_core_ffotd_tu23_639_cf92ecf4a75d3f79.ff | 40 KB |
| Call Of Duty Black Ops 4/LPC/bp_core_playlists_tu23_639_cf92ecf4a75d3f79.ff | 27 KB |
| Call Of Duty Black Ops 4/LPC/core_ffotd_tu23_639_cf92ecf4a75d3f79.ff | 9.8 MB |
| Call Of Duty Black Ops 4/LPC/core_playlists_tu23_639_cf92ecf4a75d3f79.ff | 30 KB |
| Call Of Duty Black Ops 4/LPC/en_core_ffotd_tu23_639_cf92ecf4a75d3f79.ff | 38 KB |
| Call Of Duty Black Ops 4/LPC/en_core_playlists_tu23_639_cf92ecf4a75d3f79.ff | 25 KB |
| Call Of Duty Black Ops 4/LPC/es_core_ffotd_tu23_639_cf92ecf4a75d3f79.ff | 40 KB |
| Call Of Duty Black Ops 4/LPC/es_core_playlists_tu23_639_cf92ecf4a75d3f79.ff | 26 KB |
| Call Of Duty Black Ops 4/LPC/fr_core_ffotd_tu23_639_cf92ecf4a75d3f79.ff | 41 KB |
| Call Of Duty Black Ops 4/LPC/fr_core_playlists_tu23_639_cf92ecf4a75d3f79.ff | 26 KB |
| Call Of Duty Black Ops 4/LPC/gersafe_core_ffotd_tu23_639_cf92ecf4a75d3f79.ff | 2.4 KB |
| Call Of Duty Black Ops 4/LPC/gersafe_core_playlists_tu23_639_cf92ecf4a75d3f79.ff | 2.4 KB |
| Call Of Duty Black Ops 4/LPC/ge_core_ffotd_tu23_639_cf92ecf4a75d3f79.ff | 40 KB |
| Call Of Duty Black Ops 4/LPC/ge_core_playlists_tu23_639_cf92ecf4a75d3f79.ff | 25 KB |
| Call Of Duty Black Ops 4/LPC/it_core_ffotd_tu23_639_cf92ecf4a75d3f79.ff | 40 KB |
| Call Of Duty Black Ops 4/LPC/it_core_playlists_tu23_639_cf92ecf4a75d3f79.ff | 25 KB |
| Call Of Duty Black Ops 4/LPC/jj_core_ffotd_tu23_639_cf92ecf4a75d3f79.ff | 41 KB |
| Call Of Duty Black Ops 4/LPC/jj_core_playlists_tu23_639_cf92ecf4a75d3f79.ff | 25 KB |
| Call Of Duty Black Ops 4/LPC/jpsafe_core_ffotd_tu23_639_cf92ecf4a75d3f79.ff | 2.4 KB |
| Call Of Duty Black Ops 4/LPC/jpsafe_core_playlists_tu23_639_cf92ecf4a75d3f79.ff | 2.4 KB |
| Call Of Duty Black Ops 4/LPC/k15safe_core_ffotd_tu23_639_cf92ecf4a75d3f79.ff | 2.4 KB |
| Call Of Duty Black Ops 4/LPC/k15safe_core_playlists_tu23_639_cf92ecf4a75d3f79.ff | 2.4 KB |
| Call Of Duty Black Ops 4/LPC/ko_core_ffotd_tu23_639_cf92ecf4a75d3f79.ff | 41 KB |
| Call Of Duty Black Ops 4/LPC/ko_core_playlists_tu23_639_cf92ecf4a75d3f79.ff | 28 KB |
| Call Of Duty Black Ops 4/LPC/ms_core_ffotd_tu23_639_cf92ecf4a75d3f79.ff | 41 KB |
| Call Of Duty Black Ops 4/LPC/ms_core_playlists_tu23_639_cf92ecf4a75d3f79.ff | 26 KB |
| Call Of Duty Black Ops 4/LPC/pp_core_ffotd_tu23_639_cf92ecf4a75d3f79.ff | 40 KB |
| Call Of Duty Black Ops 4/LPC/pp_core_playlists_tu23_639_cf92ecf4a75d3f79.ff | 27 KB |
| Call Of Duty Black Ops 4/LPC/rr_core_ffotd_tu23_639_cf92ecf4a75d3f79.ff | 48 KB |
| Call Of Duty Black Ops 4/LPC/rr_core_playlists_tu23_639_cf92ecf4a75d3f79.ff | 30 KB |
| Call Of Duty Black Ops 4/LPC/ru_core_ffotd_tu23_639_cf92ecf4a75d3f79.ff | 48 KB |
| Call Of Duty Black Ops 4/LPC/ru_core_playlists_tu23_639_cf92ecf4a75d3f79.ff | 30 KB |
| Call Of Duty Black Ops 4/LPC/tc_core_ffotd_tu23_639_cf92ecf4a75d3f79.ff | 38 KB |
| Call Of Duty Black Ops 4/LPC/tc_core_playlists_tu23_639_cf92ecf4a75d3f79.ff | 26 KB |
| Call Of Duty Black Ops 4/mini.au3 | 194 B |
| Call Of Duty Black Ops 4/mini.exe | 1014 KB |
| Call Of Duty Black Ops 4/project-bo4/internals/T8ShieldSupport/Data/maxrankdata_mp.csv | 441 B |
| Call Of Duty Black Ops 4/project-bo4/internals/T8ShieldSupport/Data/maxrankdata_wz.csv | 619 B |
| Call Of Duty Black Ops 4/project-bo4/internals/T8ShieldSupport/Data/maxrankdata_zm.csv | 437 B |
| Call Of Duty Black Ops 4/project-bo4/internals/T8ShieldSupport/Data/mp_randombots.csv | 1.1 KB |
| Call Of Duty Black Ops 4/project-bo4/internals/T8ShieldSupport/Data/mp_randombots_camos.csv | 393 B |
| Call Of Duty Black Ops 4/project-bo4/internals/T8ShieldSupport/Data/wz_randombots.csv | 1.3 KB |
| Call Of Duty Black Ops 4/project-bo4/internals/T8ShieldSupport/FrontHelper.luac | 1.4 MB |
| Call Of Duty Black Ops 4/project-bo4/internals/T8ShieldSupport/GameHelper.luac | 174 KB |
| Call Of Duty Black Ops 4/project-bo4/internals/T8ShieldSupport/metadata.json | 24 KB |
| Call Of Duty Black Ops 4/project-bo4/internals/T8ShieldSupport/SupportCSC.csic | 2.0 KB |
| Call Of Duty Black Ops 4/project-bo4/internals/T8ShieldSupport/SupportGSC.gsic | 101 KB |
| Call Of Duty Black Ops 4/project-bo4/internals/T8ShieldSupport/SupportUtils/SupportErrors.tsv | 16 KB |
| Call Of Duty Black Ops 4/project-bo4/internals/T8ShieldSupport/SupportUtils/SupportHashes.txt | 2.5 KB |
| Call Of Duty Black Ops 4/project-bo4/internals/T8ShieldSupport/SupportUtils/SupportStrings.txt | 2.8 MB |
| Call Of Duty Black Ops 4/project-bo4/zone/support.ff | 3.1 MB |
| Call Of Duty Black Ops 4/project-bo4.json | 1.6 KB |
| Call Of Duty Black Ops 4/user_settings_music.cgp | 3.0 KB |
| Call Of Duty Black Ops 4/user_settings_nomusic.cgp | 3.0 KB |
| Call Of Duty Black Ops 4/XInput9_1_0.dll | 3.3 MB |
| handler.js | 30 KB |
handler.js
Plain textHub.Handler.Version = 5; // Released at https://hub.splitscreen.me/ on Wed May 13 2026 23:20:56 GMT+0000 (Coordinated Universal Time).
Hub.Handler.Id = "HW2cwS444RSbmWnos";
Hub.Maintainer.Name = "birden";
Hub.Maintainer.Id = "rRycxSn253ZCjQy5C";
var answers1 = ["READ"];
Game.AddOption("THE LOBBY IS NOT JOINABLE PROBLEM: Open your browser and type 'localhost:8080' and manually disband the lobby. or sometimes just try again.", "", "grph", answers1);
var answers5 = ["No", "Yes"];
Game.AddOption("Enable music only in the first instance?", "Select 'No' to use the previous or default settings", "Mus", answers5);
var answers3 = ["-", "30", "40", "45", "50", "60", "70", "80", "90", "100", "110", "120"];
Game.AddOption("Select the FPS Cap the game will use", "Select '-' to use the previous or default settings.", "FPS", answers3);
var answers4 = ["-", "Low", "Medium", "High", "Extra"];
Game.AddOption("Select your preferred graphic settings", "Select '-' to use the previous or default settings.", "img", answers4);
var answers6 = ["-", "60", "65", "70", "75", "80", "85", "90", "95", "100", "105", "110", "115", "120"];
Game.AddOption("Select the FOV.", "Select '-' to use the previous or default settings.", "fov", answers6);
var answers7 = [];
Game.AddOption(
"Server IP",
"LEAVE IT BLANK TO CONNECT TO A LOCAL SERVER. If you want to connect to another server, type its IP. This is an experimental feature, if you have problems with servers outside of local servers, you wont get help.",
"ip",
answers7
);
var answers8 = ["Old", "New"];
Game.AddOption(
"Which local server to run?",
"Old has been tested alot and has been in use for the handler for years.(the one showed here: https://www.youtube.com/watch?v=J3MApSs5cWQ )\n\nYou can get the new server from: https://shield-client.gitbook.io/shield-documentation/server-setup/server-setup (newer client related stuff will work, mods, etc) extract it on the same place as the old server and keep the folder name as DWServer-New (name of the Zip). On the new server you need to use the friend system to play together. For FAQ use: https://shield-client.gitbook.io/shield-documentation/launcher-guide/things-to-know\n\nIf you need to update the client in split screen, replace the files 'discord_game_sdk.dll' and 'XInput9_1_0.dll' inside the handlers folder for the new ones, if something breaks, nothing i can help.",
"server",
answers8
);
// Game.KillMutex = ["shield_mutex"];
Game.FileSymlinkExclusions = [
"project-bo4.json",
"BlackOps4.start",
"d3d11.dll",
"support.ff",
"XInput9_1_0.dll",
"discord_game_sdk.dll",
"UMPDC.dll",
"project-bo4_updater.bat",
"project-bo4.exe",
"Mp.cfg",
"powrprof.dll",
"config.ini",
"project-bo4.log"
];
Game.FileSymlinkCopyInstead = [
"BlackOps4_boot.exe",
"bink2w64.dll",
"d3dcompiler_46.dll",
"dbghelp.dll",
"Launcher.db",
"oo2core_6_win64.dll",
"ortp_x64.dll",
"vcruntime140.dll",
"vivoxsdk.dll",
"REV.Runtime.dll",
"imgui.ini",
"game.icn",
".product.db",
".build.info",
".patch.result",
"bindings.cfg",
"mp_loadouts_arena_offline.cgp",
"mp_loadouts_offline.cgp",
"recent_players.cgp",
"shoutcaster_settings.cgp",
"user_settings.cgp",
"wz_loadouts_offline.cgp",
"zm_loadouts_offline.cgp"
];
Game.DirSymlinkExclusions = ["players", "project-bo4", "project-bo4\\mods"];
Game.DirExclusions = [
"project-bo4\\internals",
"players\\000000008a7c30be",
"players\\0000000068d9e76d",
"players\\0000000068d9e76e",
"players\\0000000068d9e76f",
"players\\000000008a7c30c0",
"players\\000000008a7c30c2",
"players\\000000008a7c30c3",
"players\\000000008a7c30c4",
"players\\000000008a7c30c5"
];
// Game.DirSymlinkCopyInstead = ["Language","Data\\indices","Data\\config"];
Game.DirExclusions = ["LPC"];
Game.KillProcessesOnClose = ["mini", "server"];
Game.StartArguments = "";
Game.SymlinkExe = false;
Game.SymlinkGame = true;
Game.SymlinkFolders = true;
Game.KeepSymLinkOnExit = true;
Game.GameName = "Call of Duty Black Ops 4";
Game.GUID = "Call of Duty Black Ops 4";
Game.ExecutableName = "BlackOps4.exe";
Game.MaxPlayers = 8;
Game.HandlerInterval = 100;
Game.Hook.ForceFocus = false;
Game.Hook.ForceFocusWindowName = "Call of Duty®: Black Ops 4";
Game.Hook.DInputEnabled = false;
Game.Hook.XInputEnabled = false;
Game.Hook.XInputReroute = false;
Game.Hook.CustomDllEnabled = false;
Game.XInputPlusDll = [];
Game.Description =
"IMPORTANT: This uses Project-bo4 client. For a local server download the DW server(https://github.com/bodnjenie14/DWUPDATES/releases) and go to nucleus coop folder > handlers folder > Call Of Duty Black Ops 4 and place it in there. If you download the .rar you will need to create a folder with the name 'DW SERVER' and place the files in there. The in-game server browser wont work with nucleus.\n\nNever quit the lobby with the host first, you will crash\n\nHOW TO CONNECT: only matchmaking works, so search for the same map/mode, let one player get to 'waiting for other players' than start searching with the others players to connect.\n\nFOR CONTROLLERS TO WORK: After all the screens resized correctly press 'END' key 2 times, wait a little between each press, now click with the mouse a 2-3 times on one of the screens while moving the controller until it becomes a controller cursor, now press 'END' one more time and all screens will have controllers working.\n\nWhen your done, if your input is locked press 'END' to unlock it and press ctrl + Q to close nucleus and the server.";
Game.PauseBetweenStarts = 5;
Game.PauseBetweenProcessGrab = 18;
Game.RefreshWindowAfterStart = true;
Game.SetWindowHookStart = true;
Game.ProtoInput.InjectStartup = true;
Game.ProtoInput.InjectRuntime_RemoteLoadMethod = false;
Game.ProtoInput.InjectRuntime_EasyHookMethod = false;
Game.ProtoInput.InjectRuntime_EasyHookStealthMethod = true;
Game.LockInputAtStart = false;
Game.LockInputSuspendsExplorer = false;
Game.ProtoInput.FreezeExternalInputWhenInputNotLocked = true;
Game.LockInputToggleKey = 0x23;
Game.ProtoInput.RenameHandlesHook = false;
Game.ProtoInput.RenameHandles = [];
Game.ProtoInput.RenameNamedPipes = [];
Game.ProtoInput.ClipCursorHook = true;
Game.ProtoInput.XinputHook = true;
Game.ProtoInput.UseOpenXinput = true;
Game.ProtoInput.OnInputLocked = function() {
for (var i = 0; i < PlayerList.Count; i++) {
var player = PlayerList[i];
ProtoInput.StartFocusMessageLoop(player.ProtoInputInstanceHandle, 5, true, false, false, false, false);
System.Threading.Thread.Sleep(1000);
ProtoInput.StopFocusMessageLoop(player.ProtoInputInstanceHandle);
ProtoInput.InstallHook(player.ProtoInputInstanceHandle, ProtoInput.Values.GetRawInputDataHookID);
ProtoInput.InstallHook(player.ProtoInputInstanceHandle, ProtoInput.Values.RegisterRawInputHookID);
ProtoInput.InstallHook(player.ProtoInputInstanceHandle, ProtoInput.Values.FocusHooksHookID);
}
};
Game.ProtoInput.OnInputUnlocked = function() {
for (var i = 0; i < PlayerList.Count; i++) {
var player = PlayerList[i];
ProtoInput.UninstallHook(player.ProtoInputInstanceHandle, ProtoInput.Values.GetRawInputDataHookID);
ProtoInput.UninstallHook(player.ProtoInputInstanceHandle, ProtoInput.Values.RegisterRawInputHookID);
ProtoInput.UninstallHook(player.ProtoInputInstanceHandle, ProtoInput.Values.FocusHooksHookID);
}
};
Game.Play = function() {
Context.RunAdditionalFiles([Context.ScriptFolder + "\\mini.exe"], false, 10);
var project = Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\project-bo4";
if (!System.IO.Directory.Exists(project)) {
System.IO.Directory.CreateDirectory(project);
}
var LPC = Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\LPC";
if (!System.IO.Directory.Exists(project)) {
System.IO.Directory.CreateDirectory(project);
}
Context.Wait(2000);
Context.CopyFolder(Context.ScriptFolder + "\\project-bo4", project);
Context.Wait(2000);
Context.CopyFolder(Context.ScriptFolder + "\\LPC", LPC);
Context.Wait(2000);
var savePath = (Context.SavePath = Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\XInput9_1_0.dll");
var savePkgOrigin = System.IO.Path.Combine(Game.Folder, "XInput9_1_0.dll");
System.IO.File.Copy(savePkgOrigin, savePath, true);
var savePath = (Context.SavePath = Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\discord_game_sdk.dll");
var savePkgOrigin = System.IO.Path.Combine(Game.Folder, "discord_game_sdk.dll");
System.IO.File.Copy(savePkgOrigin, savePath, true);
if (!System.IO.File.Exists(Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\project-bo4.json")) {
var savePath = (Context.SavePath = Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\project-bo4.json");
var savePkgOrigin = System.IO.Path.Combine(Game.Folder, "project-bo4.json");
System.IO.File.Copy(savePkgOrigin, savePath, true);
}
var players = Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\players";
if (!System.IO.Directory.Exists(players)) {
System.IO.Directory.CreateDirectory(players);
}
if (!System.IO.File.Exists(Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\players\\config.ini")) {
var savePath = Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\players\\config.ini";
var savePkgOrigin = System.IO.Path.Combine(Game.Folder, "config.ini");
System.IO.File.Copy(savePkgOrigin, savePath, true);
}
var cfgpath = Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\players\\config.ini";
var dict = [
Context.FindLineNumberInTextFile(cfgpath, "play_intro_movies =", Nucleus.SearchType.StartsWith) + '|play_intro_movies = "0"',
Context.FindLineNumberInTextFile(cfgpath, "window_maximized =", Nucleus.SearchType.StartsWith) + '|window_maximized = "0"',
Context.FindLineNumberInTextFile(cfgpath, "fullscreen_mode =", Nucleus.SearchType.StartsWith) + '|fullscreen_mode = "0"',
Context.FindLineNumberInTextFile(cfgpath, "fullscreen_preferred_mode = ", Nucleus.SearchType.StartsWith) + '|fullscreen_preferred_mode = "0"',
Context.FindLineNumberInTextFile(cfgpath, "window_x = ", Nucleus.SearchType.StartsWith) + '|window_x = "' + Context.PosX + '"',
Context.FindLineNumberInTextFile(cfgpath, "window_y = ", Nucleus.SearchType.StartsWith) + '|window_y = "' + Context.PosY + '"',
Context.FindLineNumberInTextFile(cfgpath, "window_width = ", Nucleus.SearchType.StartsWith) + '|window_width = "' + Context.Width + '"',
Context.FindLineNumberInTextFile(cfgpath, "window_height = ", Nucleus.SearchType.StartsWith) + '|window_height = "' + Context.Height + '"',
Context.FindLineNumberInTextFile(cfgpath, "aspect_ratio =", Nucleus.SearchType.StartsWith) + '|aspect_ratio = "window"',
Context.FindLineNumberInTextFile(cfgpath, "hdr_display_mode =", Nucleus.SearchType.StartsWith) + '|hdr_display_mode = "-1"',
Context.FindLineNumberInTextFile(cfgpath, "automatic_process_priority", Nucleus.SearchType.StartsWith) + '|automatic_process_priority = "0"',
Context.FindLineNumberInTextFile(cfgpath, "fullscreen_resolution =", Nucleus.SearchType.StartsWith) + '|fullscreen_resolution = "' + Context.Width + "x" + Context.Height + '"'
];
Context.ReplaceLinesInTextFile(cfgpath, dict);
var img = Context.Options["img"];
if (img == "Low") {
if (System.IO.File.Exists(Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\players\\config.ini")) {
var dict = [
Context.FindLineNumberInTextFile(cfgpath, "mesh_quality", Nucleus.SearchType.StartsWith) + '|mesh_quality = "2"',
Context.FindLineNumberInTextFile(cfgpath, "texture_filter", Nucleus.SearchType.StartsWith) + '|texture_filter = "0"',
Context.FindLineNumberInTextFile(cfgpath, "texture_quality", Nucleus.SearchType.StartsWith) + '|texture_quality = "3"',
Context.FindLineNumberInTextFile(cfgpath, "texture_quality_fx", Nucleus.SearchType.StartsWith) + '|texture_quality_fx = "3"',
Context.FindLineNumberInTextFile(cfgpath, "texture_quality_probes", Nucleus.SearchType.StartsWith) + '|texture_quality_probes = "2"',
Context.FindLineNumberInTextFile(cfgpath, "texture_quality_baked_sun_shadows", Nucleus.SearchType.StartsWith) + '|texture_quality_baked_sun_shadows = "1"',
Context.FindLineNumberInTextFile(cfgpath, "disable_dynamic_light_shadows", Nucleus.SearchType.StartsWith) + '|disable_dynamic_light_shadows = "1"',
Context.FindLineNumberInTextFile(cfgpath, "disable_dynamic_sun_shadows", Nucleus.SearchType.StartsWith) + '|disable_dynamic_sun_shadows = "1"',
Context.FindLineNumberInTextFile(cfgpath, "fx_shadows", Nucleus.SearchType.StartsWith) + '|fx_shadows = "0"',
Context.FindLineNumberInTextFile(cfgpath, "spot_shadow_texture_size", Nucleus.SearchType.StartsWith) + '|spot_shadow_texture_size = "512"',
Context.FindLineNumberInTextFile(cfgpath, "omni_shadow_texture_size", Nucleus.SearchType.StartsWith) + '|omni_shadow_texture_size = "256"',
Context.FindLineNumberInTextFile(cfgpath, "shadow_filtering", Nucleus.SearchType.StartsWith) + '|shadow_filtering = "0"',
Context.FindLineNumberInTextFile(cfgpath, "oit", Nucleus.SearchType.StartsWith) + '|oit = "0"',
Context.FindLineNumberInTextFile(cfgpath, "oit_layers", Nucleus.SearchType.StartsWith) + '|oit_layers = "8"',
Context.FindLineNumberInTextFile(cfgpath, "ssao_technique", Nucleus.SearchType.StartsWith) + '|ssao_technique = "Disabled"',
Context.FindLineNumberInTextFile(cfgpath, "aa_technique", Nucleus.SearchType.StartsWith) + '|aa_technique = "None"',
Context.FindLineNumberInTextFile(cfgpath, "motion_blur", Nucleus.SearchType.StartsWith) + '|motion_blur = "Off"',
Context.FindLineNumberInTextFile(cfgpath, "motion_blur_quality", Nucleus.SearchType.StartsWith) + '|motion_blur_quality = "High"',
Context.FindLineNumberInTextFile(cfgpath, "subsurface_scattering", Nucleus.SearchType.StartsWith) + '|subsurface_scattering = "0"',
Context.FindLineNumberInTextFile(cfgpath, "ssr", Nucleus.SearchType.StartsWith) + '|ssr = "0"',
Context.FindLineNumberInTextFile(cfgpath, "shadow_viewmodel_self", Nucleus.SearchType.StartsWith) + '|shadow_viewmodel_self = "Off"',
Context.FindLineNumberInTextFile(cfgpath, "dedicated_player_shadow", Nucleus.SearchType.StartsWith) + '|dedicated_player_shadow = "Off"',
Context.FindLineNumberInTextFile(cfgpath, "auto_cull_radius", Nucleus.SearchType.StartsWith) + '|auto_cull_radius = "1.5"',
Context.FindLineNumberInTextFile(cfgpath, "local_ambient_lighting", Nucleus.SearchType.StartsWith) + '|local_ambient_lighting = "1"',
Context.FindLineNumberInTextFile(cfgpath, "volumetric_light_quality", Nucleus.SearchType.StartsWith) + '|volumetric_light_quality = "0"',
Context.FindLineNumberInTextFile(cfgpath, "volumetric_light_sample_mult", Nucleus.SearchType.StartsWith) + '|volumetric_light_sample_mult = "0.5"'
];
Context.ReplaceLinesInTextFile(cfgpath, dict);
}
}
if (img == "Medium") {
if (System.IO.File.Exists(Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\players\\config.ini")) {
var dict = [
Context.FindLineNumberInTextFile(cfgpath, "mesh_quality", Nucleus.SearchType.StartsWith) + '|mesh_quality = "1"',
Context.FindLineNumberInTextFile(cfgpath, "texture_filter", Nucleus.SearchType.StartsWith) + '|texture_filter = "1"',
Context.FindLineNumberInTextFile(cfgpath, "texture_quality", Nucleus.SearchType.StartsWith) + '|texture_quality = "2"',
Context.FindLineNumberInTextFile(cfgpath, "texture_quality_fx", Nucleus.SearchType.StartsWith) + '|texture_quality_fx = "1"',
Context.FindLineNumberInTextFile(cfgpath, "texture_quality_probes", Nucleus.SearchType.StartsWith) + '|texture_quality_probes = "1"',
Context.FindLineNumberInTextFile(cfgpath, "texture_quality_baked_sun_shadows", Nucleus.SearchType.StartsWith) + '|texture_quality_baked_sun_shadows = "0"',
Context.FindLineNumberInTextFile(cfgpath, "disable_dynamic_light_shadows", Nucleus.SearchType.StartsWith) + '|disable_dynamic_light_shadows = "1"',
Context.FindLineNumberInTextFile(cfgpath, "disable_dynamic_sun_shadows", Nucleus.SearchType.StartsWith) + '|disable_dynamic_sun_shadows = "1"',
Context.FindLineNumberInTextFile(cfgpath, "fx_shadows", Nucleus.SearchType.StartsWith) + '|fx_shadows = "0"',
Context.FindLineNumberInTextFile(cfgpath, "spot_shadow_texture_size", Nucleus.SearchType.StartsWith) + '|spot_shadow_texture_size = "2048"',
Context.FindLineNumberInTextFile(cfgpath, "omni_shadow_texture_size", Nucleus.SearchType.StartsWith) + '|omni_shadow_texture_size = "256"',
Context.FindLineNumberInTextFile(cfgpath, "shadow_filtering", Nucleus.SearchType.StartsWith) + '|shadow_filtering = "1"',
Context.FindLineNumberInTextFile(cfgpath, "oit", Nucleus.SearchType.StartsWith) + '|oit = "1"',
Context.FindLineNumberInTextFile(cfgpath, "oit_layers", Nucleus.SearchType.StartsWith) + '|oit_layers = "8"',
Context.FindLineNumberInTextFile(cfgpath, "ssao_technique", Nucleus.SearchType.StartsWith) + '|ssao_technique = "GTAO Medium Quality"',
Context.FindLineNumberInTextFile(cfgpath, "aa_technique", Nucleus.SearchType.StartsWith) + '|aa_technique = "SMAA 1x"',
Context.FindLineNumberInTextFile(cfgpath, "motion_blur", Nucleus.SearchType.StartsWith) + '|motion_blur = "Off"',
Context.FindLineNumberInTextFile(cfgpath, "motion_blur_quality", Nucleus.SearchType.StartsWith) + '|motion_blur_quality = "High"',
Context.FindLineNumberInTextFile(cfgpath, "subsurface_scattering", Nucleus.SearchType.StartsWith) + '|subsurface_scattering = "0"',
Context.FindLineNumberInTextFile(cfgpath, "ssr", Nucleus.SearchType.StartsWith) + '|ssr = "0"',
Context.FindLineNumberInTextFile(cfgpath, "shadow_viewmodel_self", Nucleus.SearchType.StartsWith) + '|shadow_viewmodel_self = "Off"',
Context.FindLineNumberInTextFile(cfgpath, "dedicated_player_shadow", Nucleus.SearchType.StartsWith) + '|dedicated_player_shadow = "All"',
Context.FindLineNumberInTextFile(cfgpath, "auto_cull_radius", Nucleus.SearchType.StartsWith) + '|auto_cull_radius = "1"',
Context.FindLineNumberInTextFile(cfgpath, "local_ambient_lighting", Nucleus.SearchType.StartsWith) + '|local_ambient_lighting = "1"',
Context.FindLineNumberInTextFile(cfgpath, "volumetric_light_quality", Nucleus.SearchType.StartsWith) + '|volumetric_light_quality = "0"',
Context.FindLineNumberInTextFile(cfgpath, "volumetric_light_sample_mult", Nucleus.SearchType.StartsWith) + '|volumetric_light_sample_mult = "2"'
];
Context.ReplaceLinesInTextFile(cfgpath, dict);
}
}
if (img == "High") {
if (System.IO.File.Exists(Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\players\\config.ini")) {
var dict = [
Context.FindLineNumberInTextFile(cfgpath, "mesh_quality", Nucleus.SearchType.StartsWith) + '|mesh_quality = "0"',
Context.FindLineNumberInTextFile(cfgpath, "texture_filter", Nucleus.SearchType.StartsWith) + '|texture_filter = "2"',
Context.FindLineNumberInTextFile(cfgpath, "texture_quality", Nucleus.SearchType.StartsWith) + '|texture_quality = "1"',
Context.FindLineNumberInTextFile(cfgpath, "texture_quality_fx", Nucleus.SearchType.StartsWith) + '|texture_quality_fx = "0"',
Context.FindLineNumberInTextFile(cfgpath, "texture_quality_probes", Nucleus.SearchType.StartsWith) + '|texture_quality_probes = "0"',
Context.FindLineNumberInTextFile(cfgpath, "texture_quality_baked_sun_shadows", Nucleus.SearchType.StartsWith) + '|texture_quality_baked_sun_shadows = "0"',
Context.FindLineNumberInTextFile(cfgpath, "disable_dynamic_light_shadows", Nucleus.SearchType.StartsWith) + '|disable_dynamic_light_shadows = "0"',
Context.FindLineNumberInTextFile(cfgpath, "disable_dynamic_sun_shadows", Nucleus.SearchType.StartsWith) + '|disable_dynamic_sun_shadows = "0"',
Context.FindLineNumberInTextFile(cfgpath, "fx_shadows", Nucleus.SearchType.StartsWith) + '|fx_shadows = "1"',
Context.FindLineNumberInTextFile(cfgpath, "spot_shadow_texture_size", Nucleus.SearchType.StartsWith) + '|spot_shadow_texture_size = "2048"',
Context.FindLineNumberInTextFile(cfgpath, "omni_shadow_texture_size", Nucleus.SearchType.StartsWith) + '|omni_shadow_texture_size = "256"',
Context.FindLineNumberInTextFile(cfgpath, "shadow_filtering", Nucleus.SearchType.StartsWith) + '|shadow_filtering = "1"',
Context.FindLineNumberInTextFile(cfgpath, "oit", Nucleus.SearchType.StartsWith) + '|oit = "1"',
Context.FindLineNumberInTextFile(cfgpath, "oit_layers", Nucleus.SearchType.StartsWith) + '|oit_layers = "12"',
Context.FindLineNumberInTextFile(cfgpath, "ssao_technique", Nucleus.SearchType.StartsWith) + '|ssao_technique = "GTAO High Quality"',
Context.FindLineNumberInTextFile(cfgpath, "aa_technique", Nucleus.SearchType.StartsWith) + '|aa_technique = "Filmic SMAA T2x"',
Context.FindLineNumberInTextFile(cfgpath, "motion_blur", Nucleus.SearchType.StartsWith) + '|motion_blur = "Off"',
Context.FindLineNumberInTextFile(cfgpath, "motion_blur_quality", Nucleus.SearchType.StartsWith) + '|motion_blur_quality = "High"',
Context.FindLineNumberInTextFile(cfgpath, "subsurface_scattering", Nucleus.SearchType.StartsWith) + '|subsurface_scattering = "1"',
Context.FindLineNumberInTextFile(cfgpath, "ssr", Nucleus.SearchType.StartsWith) + '|ssr = "1"',
Context.FindLineNumberInTextFile(cfgpath, "shadow_viewmodel_self", Nucleus.SearchType.StartsWith) + '|shadow_viewmodel_self = "All"',
Context.FindLineNumberInTextFile(cfgpath, "dedicated_player_shadow", Nucleus.SearchType.StartsWith) + '|dedicated_player_shadow = "All"',
Context.FindLineNumberInTextFile(cfgpath, "auto_cull_radius", Nucleus.SearchType.StartsWith) + '|auto_cull_radius = "0.25"',
Context.FindLineNumberInTextFile(cfgpath, "local_ambient_lighting", Nucleus.SearchType.StartsWith) + '|local_ambient_lighting = "0"',
Context.FindLineNumberInTextFile(cfgpath, "volumetric_light_quality", Nucleus.SearchType.StartsWith) + '|volumetric_light_quality = "0"',
Context.FindLineNumberInTextFile(cfgpath, "volumetric_light_sample_mult", Nucleus.SearchType.StartsWith) + '|volumetric_light_sample_mult = "2"'
];
Context.ReplaceLinesInTextFile(cfgpath, dict);
}
}
if (img == "Extra") {
if (System.IO.File.Exists(Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\players\\config.ini")) {
var dict = [
Context.FindLineNumberInTextFile(cfgpath, "mesh_quality", Nucleus.SearchType.StartsWith) + '|mesh_quality = "0"',
Context.FindLineNumberInTextFile(cfgpath, "texture_filter", Nucleus.SearchType.StartsWith) + '|texture_filter = "2"',
Context.FindLineNumberInTextFile(cfgpath, "texture_quality", Nucleus.SearchType.StartsWith) + '|texture_quality = "0"',
Context.FindLineNumberInTextFile(cfgpath, "texture_quality_fx", Nucleus.SearchType.StartsWith) + '|texture_quality_fx = "0"',
Context.FindLineNumberInTextFile(cfgpath, "texture_quality_probes", Nucleus.SearchType.StartsWith) + '|texture_quality_probes = "0"',
Context.FindLineNumberInTextFile(cfgpath, "texture_quality_baked_sun_shadows", Nucleus.SearchType.StartsWith) + '|texture_quality_baked_sun_shadows = "0"',
Context.FindLineNumberInTextFile(cfgpath, "disable_dynamic_light_shadows", Nucleus.SearchType.StartsWith) + '|disable_dynamic_light_shadows = "0"',
Context.FindLineNumberInTextFile(cfgpath, "disable_dynamic_sun_shadows", Nucleus.SearchType.StartsWith) + '|disable_dynamic_sun_shadows = "0"',
Context.FindLineNumberInTextFile(cfgpath, "fx_shadows", Nucleus.SearchType.StartsWith) + '|fx_shadows = "1"',
Context.FindLineNumberInTextFile(cfgpath, "spot_shadow_texture_size", Nucleus.SearchType.StartsWith) + '|spot_shadow_texture_size = "4096"',
Context.FindLineNumberInTextFile(cfgpath, "omni_shadow_texture_size", Nucleus.SearchType.StartsWith) + '|omni_shadow_texture_size = "512"',
Context.FindLineNumberInTextFile(cfgpath, "shadow_filtering", Nucleus.SearchType.StartsWith) + '|shadow_filtering = "1"',
Context.FindLineNumberInTextFile(cfgpath, "oit", Nucleus.SearchType.StartsWith) + '|oit = "1"',
Context.FindLineNumberInTextFile(cfgpath, "motion_blur", Nucleus.SearchType.StartsWith) + '|motion_blur = "Auto"',
Context.FindLineNumberInTextFile(cfgpath, "motion_blur_quality", Nucleus.SearchType.StartsWith) + '|motion_blur_quality = "High"',
Context.FindLineNumberInTextFile(cfgpath, "subsurface_scattering", Nucleus.SearchType.StartsWith) + '|subsurface_scattering = "1"',
Context.FindLineNumberInTextFile(cfgpath, "ssr", Nucleus.SearchType.StartsWith) + '|ssr = "1"',
Context.FindLineNumberInTextFile(cfgpath, "shadow_viewmodel_self", Nucleus.SearchType.StartsWith) + '|shadow_viewmodel_self = "All"',
Context.FindLineNumberInTextFile(cfgpath, "dedicated_player_shadow", Nucleus.SearchType.StartsWith) + '|dedicated_player_shadow = "All"',
Context.FindLineNumberInTextFile(cfgpath, "auto_cull_radius", Nucleus.SearchType.StartsWith) + '|auto_cull_radius = "0.25"',
Context.FindLineNumberInTextFile(cfgpath, "local_ambient_lighting", Nucleus.SearchType.StartsWith) + '|local_ambient_lighting = "0"',
Context.FindLineNumberInTextFile(cfgpath, "volumetric_light_quality", Nucleus.SearchType.StartsWith) + '|volumetric_light_quality = "0"',
Context.FindLineNumberInTextFile(cfgpath, "volumetric_light_sample_mult", Nucleus.SearchType.StartsWith) + '|volumetric_light_sample_mult = "2"'
];
Context.ReplaceLinesInTextFile(cfgpath, dict);
}
}
var Mus = Context.Options["Mus"];
if (Mus == "Yes") {
if (Context.PlayerID == 0) {
var cfgpath = Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\players\\config.ini";
var dict = [
Context.FindLineNumberInTextFile(cfgpath, "music_scale =", Nucleus.SearchType.StartsWith) + '|music_scale = "1"',
Context.FindLineNumberInTextFile(cfgpath, "mute_music =", Nucleus.SearchType.StartsWith) + '|mute_music = "0"'
];
Context.ReplaceLinesInTextFile(cfgpath, dict);
var savePath = (Context.SavePath = Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\players\\user_settings.cgp");
var savePkgOrigin = System.IO.Path.Combine(Game.Folder, "user_settings_music.cgp");
System.IO.File.Copy(savePkgOrigin, savePath, true);
} else {
var cfgpath = Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\players\\config.ini";
var dict = [
Context.FindLineNumberInTextFile(cfgpath, "music_scale =", Nucleus.SearchType.StartsWith) + '|music_scale = "0"',
Context.FindLineNumberInTextFile(cfgpath, "mute_music =", Nucleus.SearchType.StartsWith) + '|mute_music = "1"'
];
Context.ReplaceLinesInTextFile(cfgpath, dict);
var savePath = (Context.SavePath = Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\players\\user_settings.cgp");
var savePkgOrigin = System.IO.Path.Combine(Game.Folder, "user_settings_nomusic.cgp");
System.IO.File.Copy(savePkgOrigin, savePath, true);
}
}
var FPS = Context.Options["FPS"];
if (FPS != "-") {
var cfgpath = Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\players\\config.ini";
var dict = [
Context.FindLineNumberInTextFile(cfgpath, "max_fps =", Nucleus.SearchType.StartsWith) + '|max_fps = "' + FPS + '"',
Context.FindLineNumberInTextFile(cfgpath, "max_fps_menu =", Nucleus.SearchType.StartsWith) + '|max_fps_menu = "' + FPS + '"'
];
Context.ReplaceLinesInTextFile(cfgpath, dict);
}
var FOV = Context.Options["fov"];
if (FOV != "-") {
var cfgpath = Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\players\\config.ini";
var dict = [Context.FindLineNumberInTextFile(cfgpath, "fov =", Nucleus.SearchType.StartsWith) + '|fov = "' + FOV + '"'];
Context.ReplaceLinesInTextFile(cfgpath, dict);
}
var cfgpath = Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\project-bo4.json";
if (Context.PlayerID == 0) {
var dictID = [
// Context.FindLineNumberInTextFile(cfgpath, ' "xuid":', Nucleus.SearchType.StartsWith) + '| "xuid": 232339475' + Context.PlayerID + ',',
Context.FindLineNumberInTextFile(cfgpath, ' "name":', Nucleus.SearchType.StartsWith) + '| "name": "' + Context.Nickname + '",'
];
} else {
var dictID = [
Context.FindLineNumberInTextFile(cfgpath, ' "instance_name_' + (Context.PlayerID + 1) + '":', Nucleus.SearchType.StartsWith) +
'| "instance_name_' +
(Context.PlayerID + 1) +
'": "' +
Context.Nickname +
'",'
];
}
let connectIP = "127.0.0.1";
if (Context.Options["ip"] != "") {
connectIP = Context.Options["ip"];
} else {
if (Context.Options["server"] == "Old") {
Context.RunAdditionalFiles(["1|" + Game.Folder + "\\DW SERVER\\server.exe"], false, 10, false, false);
} else {
Context.RunAdditionalFiles(["1|" + Game.Folder + "\\DWServer-New\\DWServer.exe"], false, 10, false, false);
}
}
var dict = [Context.FindLineNumberInTextFile(cfgpath, ' "ipv4":', Nucleus.SearchType.StartsWith) + '| "ipv4": "' + connectIP + '"'];
Context.ReplaceLinesInTextFile(cfgpath, dict);
Context.ReplaceLinesInTextFile(cfgpath, dictID);
Context.Wait(2000);
var numPlayers = 0;
for (var i = 0; i < PlayerList.Count; i++) {
var player = PlayerList[i];
if (player.IsXInput && player.ScreenIndex !== -1) {
numPlayers++;
}
player.ProtoController1 = Context.GamepadId;
player.ProtoController2 = Context.GamepadId;
player.ProtoController3 = Context.GamepadId;
player.ProtoController4 = Context.GamepadId;
player.ProtoController5 = Context.GamepadId;
player.ProtoController6 = Context.GamepadId;
player.ProtoController7 = Context.GamepadId;
player.ProtoController8 = Context.GamepadId;
player.ProtoController9 = Context.GamepadId;
}
};