Postal 2 · handler “Postal 2”
Version 1
Release notes
first release
- Released
- Size
- 3.9 MB
- Downloads
- 78
- Check
- Verified
- SHA-256
- d38c3218de01ee712a3706bf4ef28fc7e7bab0616b5adc6418fa3aae057e588f
Files 16
| Path | Size |
|---|---|
| handler.js | 26 KB |
| Postal 2/checknucleus.bat | 831 B |
| Postal 2/custom_gen_values.txt | 16 B |
| Postal 2/d3d8.dll | 122 KB |
| Postal 2/NicksCoop Files/credits.txt | 458 B |
| Postal 2/NicksCoop Files/Maps/NicksCoopMapLoader.fuk | 170 KB |
| Postal 2/NicksCoop Files/System/NicksCoop.int | 317 B |
| Postal 2/NicksCoop Files/System/NicksCoop.u | 7.2 MB |
| Postal 2/NicksCoop Files/System/NicksCoopCustomMods.ini | 878 B |
| Postal 2/NicksCoop Files/System/NicksCoopInvReplace.ini | 812 B |
| Postal 2/NicksCoop Files/System/NicksCoopSave.ini | 2.0 KB |
| Postal 2/NicksCoop Files/System/NicksCoop_RunServer.bat | 1.4 KB |
| Postal 2/NicksCoop Files/System/Postal2CoOp.ini | 50 KB |
| Postal 2/NicksCoop Files/System/UCC.exe | 124 KB |
| Postal 2/NicksCoop Files/System/User.ini | 6.9 KB |
| Postal 2/Postal2Splash.bmp | 1.3 MB |
handler.js
Plain textHub.Handler.Version = 1; // Released at https://hub.splitscreen.me/ on Mon Apr 21 2025 17:28:26 GMT+0000 (Coordinated Universal Time).
Hub.Handler.Id = "PM4brTCbhT3EQsXYc";
Hub.Maintainer.Name = "Vlxst";
Hub.Maintainer.Id = "wZTsDsXZnJhD4fwfz";
Game.FileSymlinkExclusions = ["NicksCoopSave.ini", "User.ini"];
Game.DirSymlinkCopyInstead = ["System"];
Game.BackupFiles = ["System\\NicksCoopSave.ini", "System\\User.ini"];
Game.GameName = "Postal 2 (NicksCoop)";
Game.HandlerInterval = 100;
Game.SymlinkExe = false;
Game.KeepSymLinkOnExit = false;
Game.SymlinkGame = true;
Game.SymlinkFolders = false;
Game.SupportsKeyboard = false;
Game.ExecutableName = "Postal2.exe";
Game.ChangeExe = true;
Game.SteamID = "223470";
Game.GUID = "Postal 2";
Game.MaxPlayers = 8;
Game.MaxPlayersOneMonitor = 4;
Game.WorkingFolder = "";
Game.BinariesFolder = "System";
Game.Hook.ForceFocus = true;
Game.Hook.ForceFocusWindowName = "Postal 2";
Game.HasDynamicWindowTitle = true;
Game.ForceWindowTitle = true;
// Game.ResetWindows = true;
Game.RefreshWindowAfterStart = true;
// Game.SetForegroundWindowElsewhere = true;
Game.SetWindowHook = true;
Game.Hook.DInputEnabled = false;
Game.Hook.DInputForceDisable = true;
Game.Hook.XInputEnabled = false;
Game.Hook.CustomDllEnabled = false;
Game.BlockRawInput = false;
// Game.PreventGameFocus = true;
Game.PauseBetweenContextAndLaunch = 5;
Game.PauseBetweenProcessGrab = 5;
Game.PauseBetweenStarts = 30;
Game.KillProcessesOnClose = ["cmd", "UCC"];
Game.Description =
"SUPPORTS GAMEPADS ONLY!!!\n\n" +
"REQUIRED: This Handler use Nicks Coop mod to enable campaign coop: (https://steamcommunity.com/sharedfiles/filedetails/?id=737631813)\n" +
"without it, it wouldn't be possible!.\n\n" +
"Have your game totally CLEAN!\n" +
"!!Not necessary to download any mod manually!!\n\n" +
"You will need to use *game build: 5025*\n" +
"If you don't know how to change betas: https://www.moddb.com/mods/nickscoop-postal-2-coop/news/compatibility-fix-v1-4-3\n\n" +
"IMPORTANT: Always before exiting the game, use the *SAVE GAME* option in the instances pause menu.\n" +
"FOV: Can be adjusted in-game. Press the ~ (tilde) key during gameplay to type in the game console, example: FOV 101.\n\n" +
"ONLINE: You can play LAN and online, just access the website: (https://master.333networks.com/s/postal2)\n" +
"Choose the server and copy the IP:PORT and paste it when the nucleus starts the instances.\n" +
"!!Remember to only select servers that host games created with the NicksCoop mod!!\n\n" +
"NOT is necessary to press the END key as usual, just wait for the instances to open and reposition correctly." +
"\n" +
"Avoid closing the game in any way, use the nucleus hotkeys to close instances (Default: Ctrl+E)" +
"\n" +
"Sometimes the mouse cursor may be persistent when exiting the pause menu, this is due to the game using gamepad emulating mouse in the menu, so just enter and exit the pause menu in any instance for the cursor to disappear." +
"\n\n" +
"CREDITS: My sincere thanks to Evil (creator of the mod) for supporting this handler and helping me fix a problem in the game engine. THANKS";
Game.CustomUserGeneralPrompts = [
"-Enter IP and Port of Server-\n" + "Default: 127.0.0.1:7777 (LAN)\n \n" + "-You can find servers online at-\n" + "https://master.333networks.com/s/postal2\n \n" + "last IP used:"
];
Game.SaveCustomUserGeneralValues = true;
Game.SaveAndEditCustomUserGeneralValues = true;
Game.RenameAndOrMoveFiles = [
"1|System\\Postal2.int|System\\Postal2 - Player 1.int",
"2|System\\Postal2.int|System\\Postal2 - Player 2.int",
"3|System\\Postal2.int|System\\Postal2 - Player 3.int",
"4|System\\Postal2.int|System\\Postal2 - Player 4.int",
"5|System\\Postal2.int|System\\Postal2 - Player 5.int",
"6|System\\Postal2.int|System\\Postal2 - Player 6.int",
"7|System\\Postal2.int|System\\Postal2 - Player 7.int",
"8|System\\Postal2.int|System\\Postal2 - Player 8.int"
];
//USS deprecated options:
Game.HookSetCursorPos = false;
Game.HookGetCursorPos = false;
Game.HookGetKeyState = false;
Game.HookGetAsyncKeyState = false;
Game.HookGetKeyboardState = false;
Game.HookFilterRawInput = false;
Game.HookFilterMouseMessages = false;
Game.HookUseLegacyInput = false;
Game.HookDontUpdateLegacyInMouseMsg = false;
Game.HookMouseVisibility = false;
Game.InjectHookXinput = false;
Game.SendNormalMouseInput = false;
Game.SendNormalKeyboardInput = false;
Game.SendScrollWheel = false;
Game.ForwardRawKeyboardInput = false;
Game.ForwardRawMouseInput = false;
Game.HookReRegisterRawInput = false;
Game.HookReRegisterRawInputMouse = false;
Game.HookReRegisterRawInputKeyboard = false;
Game.DrawFakeMouseCursor = false;
Game.UpdateFakeMouseWithInternalInput = false;
//ProtoInput:
// Game.SupportsMultipleKeyboardsAndMice = false;
//// for work gamepads
Game.ProtoInput.XinputHook = true;
Game.ProtoInput.UseOpenXinput = true;
Game.ProtoInput.UseDinputRedirection = false;
Game.ProtoInput.DinputDeviceHook = false;
Game.ProtoInput.DinputHookAlsoHooksGetDeviceState = false;
Game.ProtoInput.MultipleProtoControllers = true;
Game.Play = function() {
Game.SupportsMultipleKeyboardsAndMice = true;
Game.ProtoInput.InjectStartup = false;
Game.ProtoInput.InjectRuntime_RemoteLoadMethod = false;
Game.ProtoInput.InjectRuntime_EasyHookMethod = true;
Game.ProtoInput.InjectRuntime_EasyHookStealthMethod = false;
Game.LockInputAtStart = false;
Game.LockInputSuspendsExplorer = true;
Game.ProtoInput.FreezeExternalInputWhenInputNotLocked = false;
Game.LockInputToggleKey = 0x23;
Game.ProtoInput.RenameHandlesHook = false;
Game.ProtoInput.RenameHandles = [];
Game.ProtoInput.RenameNamedPipes = [];
Game.ProtoInput.RegisterRawInputHook = false;
Game.ProtoInput.GetRawInputDataHook = false;
Game.ProtoInput.MessageFilterHook = true;
Game.ProtoInput.GetCursorPosHook = false;
Game.ProtoInput.SetCursorPosHook = false;
Game.ProtoInput.GetKeyStateHook = false;
Game.ProtoInput.GetAsyncKeyStateHook = false;
Game.ProtoInput.GetKeyboardStateHook = false;
Game.ProtoInput.CursorVisibilityHook = false;
Game.ProtoInput.ClipCursorHook = true;
Game.ProtoInput.FocusHooks = false;
Game.ProtoInput.DrawFakeCursor = true;
Game.ProtoInput.ClipCursorHookCreatesFakeClip = true;
Game.ProtoInput.EnableToggleFakeCursorVisibilityShortcut = false;
Game.ProtoInput.DontShowCursorWhenImageUpdated = true;
Game.ProtoInput.AllowFakeCursorOutOfBounds = false;
Game.ProtoInput.ExtendFakeCursorBounds = true;
Game.ProtoInput.RawInputFilter = false;
Game.ProtoInput.MouseMoveFilter = false;
Game.ProtoInput.MouseActivateFilter = false;
Game.ProtoInput.WindowActivateFilter = false;
Game.ProtoInput.WindowActvateAppFilter = false;
Game.ProtoInput.MouseWheelFilter = false;
Game.ProtoInput.MouseButtonFilter = false;
Game.ProtoInput.KeyboardButtonFilter = false;
Game.ProtoInput.SendMouseWheelMessages = true;
Game.ProtoInput.SendMouseButtonMessages = true;
Game.ProtoInput.SendMouseMovementMessages = true;
Game.ProtoInput.SendKeyboardButtonMessages = true;
Game.ProtoInput.EnableFocusMessageLoop = false;
//Game.ProtoInput.FocusLoopIntervalMilliseconds = 5;
//Game.ProtoInput.FocusLoop_WM_ACTIVATE = true;
//Game.ProtoInput.FocusLoop_WM_ACTIVATEAPP = true;
//Game.ProtoInput.FocusLoop_WM_NCACTIVATE = true;
//Game.ProtoInput.FocusLoop_WM_SETFOCUS = true;
//Game.ProtoInput.FocusLoop_WM_MOUSEACTIVATE = true;
Game.ProtoInput.BlockedMessages = [0x0008, 0x02a3, 0x02a1]; // Blocks WM_KILLFOCUS, WM_MOUSEHOVER and WM_MOUSELEAVE
Game.ProtoInput.OnInputLocked = function() {
for (var i = 0; i < PlayerList.Count; i++) {
var player = PlayerList[i];
ProtoInput.InstallHook(player.ProtoInputInstanceHandle, ProtoInput.Values.GetCursorPosHookID);
ProtoInput.InstallHook(player.ProtoInputInstanceHandle, ProtoInput.Values.SetCursorPosHookID);
ProtoInput.InstallHook(player.ProtoInputInstanceHandle, ProtoInput.Values.GetKeyStateHookID);
ProtoInput.InstallHook(player.ProtoInputInstanceHandle, ProtoInput.Values.GetAsyncKeyStateHookID);
ProtoInput.InstallHook(player.ProtoInputInstanceHandle, ProtoInput.Values.GetKeyboardStateHookID);
ProtoInput.InstallHook(player.ProtoInputInstanceHandle, ProtoInput.Values.CursorVisibilityStateHookID);
ProtoInput.InstallHook(player.ProtoInputInstanceHandle, ProtoInput.Values.GetRawInputDataHookID);
ProtoInput.InstallHook(player.ProtoInputInstanceHandle, ProtoInput.Values.RegisterRawInputHookID);
//ProtoInput.InstallHook(player.ProtoInputInstanceHandle, ProtoInput.Values.MessageFilterHookID);
ProtoInput.InstallHook(player.ProtoInputInstanceHandle, ProtoInput.Values.FocusHooksHookID);
//Avoid the mouse move filter unless absolutely necessary as it can massively affect performance if the game gets primary input from mouse move messages
//ProtoInput.EnableMessageFilter(player.ProtoInputInstanceHandle, ProtoInput.Valuesaaaaaa.MouseMoveFilterID);
ProtoInput.EnableMessageFilter(player.ProtoInputInstanceHandle, ProtoInput.Values.RawInputFilterID);
ProtoInput.EnableMessageFilter(player.ProtoInputInstanceHandle, ProtoInput.Values.MouseActivateFilterID);
ProtoInput.EnableMessageFilter(player.ProtoInputInstanceHandle, ProtoInput.Values.WindowActivateFilterID);
ProtoInput.EnableMessageFilter(player.ProtoInputInstanceHandle, ProtoInput.Values.WindowActivateAppFilterID);
ProtoInput.EnableMessageFilter(player.ProtoInputInstanceHandle, ProtoInput.Values.MouseWheelFilterID);
ProtoInput.EnableMessageFilter(player.ProtoInputInstanceHandle, ProtoInput.Values.MouseButtonFilterID);
//ProtoInput.SetDrawFakeCursor(player.ProtoInputInstanceHandle, true);
}
};
Game.ProtoInput.OnInputUnlocked = function() {
for (var i = 0; i < PlayerList.Count; i++) {
var player = PlayerList[i];
ProtoInput.UninstallHook(player.ProtoInputInstanceHandle, ProtoInput.Values.GetCursorPosHookID);
ProtoInput.UninstallHook(player.ProtoInputInstanceHandle, ProtoInput.Values.SetCursorPosHookID);
ProtoInput.UninstallHook(player.ProtoInputInstanceHandle, ProtoInput.Values.GetKeyStateHookID);
ProtoInput.UninstallHook(player.ProtoInputInstanceHandle, ProtoInput.Values.GetAsyncKeyStateHookID);
ProtoInput.UninstallHook(player.ProtoInputInstanceHandle, ProtoInput.Values.GetKeyboardStateHookID);
ProtoInput.UninstallHook(player.ProtoInputInstanceHandle, ProtoInput.Values.CursorVisibilityStateHookID);
ProtoInput.UninstallHook(player.ProtoInputInstanceHandle, ProtoInput.Values.GetRawInputDataHookID);
ProtoInput.UninstallHook(player.ProtoInputInstanceHandle, ProtoInput.Values.RegisterRawInputHookID);
//ProtoInput.UninstallHook(player.ProtoInputInstanceHandle, ProtoInput.Values.MessageFilterHookID);
ProtoInput.UninstallHook(player.ProtoInputInstanceHandle, ProtoInput.Values.FocusHooksHookID);
ProtoInput.DisableMessageFilter(player.ProtoInputInstanceHandle, ProtoInput.Values.RawInputFilterID);
ProtoInput.DisableMessageFilter(player.ProtoInputInstanceHandle, ProtoInput.Values.MouseMoveFilterID);
ProtoInput.DisableMessageFilter(player.ProtoInputInstanceHandle, ProtoInput.Values.MouseActivateFilterID);
ProtoInput.DisableMessageFilter(player.ProtoInputInstanceHandle, ProtoInput.Values.WindowActivateFilterID);
ProtoInput.DisableMessageFilter(player.ProtoInputInstanceHandle, ProtoInput.Values.WindowActivateAppFilterID);
ProtoInput.DisableMessageFilter(player.ProtoInputInstanceHandle, ProtoInput.Values.MouseWheelFilterID);
ProtoInput.DisableMessageFilter(player.ProtoInputInstanceHandle, ProtoInput.Values.MouseButtonFilterID);
//ProtoInput.SetDrawFakeCursor(player.ProtoInputInstanceHandle, false);
}
};
//start arguments
var Args = (Context.Args = Context.CustomUserGeneralValues + " -INI=Postal2CoOp.ini");
Context.StartArguments = Args;
//copy files of NicksCoop mod
var savePath = (Context.SavePath = Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\Maps\\NicksCoopMapLoader.fuk");
var savePkgOrigin = System.IO.Path.Combine(Game.Folder, "NicksCoop Files\\Maps\\NicksCoopMapLoader.fuk");
System.IO.File.Copy(savePkgOrigin, savePath, true);
var savePath = (Context.SavePath = Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\System\\NicksCoop.int");
var savePkgOrigin = System.IO.Path.Combine(Game.Folder, "NicksCoop Files\\System\\NicksCoop.int");
System.IO.File.Copy(savePkgOrigin, savePath, true);
var savePath = (Context.SavePath = Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\System\\NicksCoop.u");
var savePkgOrigin = System.IO.Path.Combine(Game.Folder, "NicksCoop Files\\System\\NicksCoop.u");
System.IO.File.Copy(savePkgOrigin, savePath, true);
var savePath = (Context.SavePath = Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\System\\NicksCoopCustomMods.ini");
var savePkgOrigin = System.IO.Path.Combine(Game.Folder, "NicksCoop Files\\System\\NicksCoopCustomMods.ini");
System.IO.File.Copy(savePkgOrigin, savePath, true);
var savePath = (Context.SavePath = Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\System\\NicksCoopInvReplace.ini");
var savePkgOrigin = System.IO.Path.Combine(Game.Folder, "NicksCoop Files\\System\\NicksCoopInvReplace.ini");
System.IO.File.Copy(savePkgOrigin, savePath, true);
var savePath = (Context.SavePath = Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\System\\NicksCoopSave.ini");
var savePkgOrigin = System.IO.Path.Combine(Game.Folder, "NicksCoop Files\\System\\NicksCoopSave.ini");
System.IO.File.Copy(savePkgOrigin, savePath, true);
var savePath = (Context.SavePath = Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\System\\Postal2CoOp.ini");
var savePkgOrigin = System.IO.Path.Combine(Game.Folder, "NicksCoop Files\\System\\Postal2CoOp.ini");
System.IO.File.Copy(savePkgOrigin, savePath, true);
var savePath = (Context.SavePath = Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\System\\UCC.exe");
var savePkgOrigin = System.IO.Path.Combine(Game.Folder, "NicksCoop Files\\System\\UCC.exe");
System.IO.File.Copy(savePkgOrigin, savePath, true);
var savePath = (Context.SavePath = Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\System\\NicksCoop_RunServer.bat");
var savePkgOrigin = System.IO.Path.Combine(Game.Folder, "NicksCoop Files\\System\\NicksCoop_RunServer.bat");
System.IO.File.Copy(savePkgOrigin, savePath, true);
var savePath = (Context.SavePath = Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\System\\User.ini");
var savePkgOrigin = System.IO.Path.Combine(Game.Folder, "NicksCoop Files\\System\\User.ini");
System.IO.File.Copy(savePkgOrigin, savePath, true);
//d3d8tod3d9
var savePath = (Context.SavePath = Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\System\\d3d8.dll");
var savePkgOrigin = System.IO.Path.Combine(Game.Folder, "d3d8.dll");
System.IO.File.Copy(savePkgOrigin, savePath, true);
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//editing ini files
var savePath = Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\System\\Postal2CoOp.ini";
Context.ModifySaveFile(savePath, savePath, Nucleus.SaveType.INI, [
new Nucleus.IniSaveInfo("WinDrv.WindowsClient", "StartupFullscreen", "False"),
new Nucleus.IniSaveInfo("WinDrv.WindowsClient", "FullscreenWindowed", "False"),
new Nucleus.IniSaveInfo("WinDrv.WindowsClient", "FullscreenViewportY", Context.Height),
new Nucleus.IniSaveInfo("WinDrv.WindowsClient", "FullscreenViewportX", Context.Width),
new Nucleus.IniSaveInfo("WinDrv.WindowsClient", "MenuViewportX", Context.Width),
new Nucleus.IniSaveInfo("WinDrv.WindowsClient", "MenuViewportY", Context.Height),
new Nucleus.IniSaveInfo("WinDrv.WindowsClient", "WindowedViewportY", Context.Height),
new Nucleus.IniSaveInfo("WinDrv.WindowsClient", "WindowedViewportX", Context.Width),
new Nucleus.IniSaveInfo("SDLDrv.SDLClient", "WindowedViewportX", Context.Width),
new Nucleus.IniSaveInfo("SDLDrv.SDLClient", "WindowedViewporty", Context.Height),
new Nucleus.IniSaveInfo("SDLDrv.SDLClient", "MenuViewportX", Context.Width),
new Nucleus.IniSaveInfo("SDLDrv.SDLClient", "MenuViewportY", Context.Height),
new Nucleus.IniSaveInfo("SDLDrv.SDLClient", "FullscreenViewportY", Context.Height),
new Nucleus.IniSaveInfo("SDLDrv.SDLClient", "FullscreenViewportX", Context.Width),
new Nucleus.IniSaveInfo("NicksCoop.CoopMenu", "MultiPlayerName", Context.Nickname),
new Nucleus.IniSaveInfo("NicksCoop.CoopMenu", "MultiPlayerHostName", Context.Nickname),
new Nucleus.IniSaveInfo("Postal2Game.P2GameInfo", "bWidescreenStretch", "True"),
new Nucleus.IniSaveInfo("D3DDrv.D3DRenderDevice", "UseVSync", "True"),
new Nucleus.IniSaveInfo("D3DDrv.D3DRenderDevice", "ReduceMouseLag", "False"), //no edit
new Nucleus.IniSaveInfo("OpenGLDrv.OpenGLRenderDevice", "ReduceMouseLag", "False"), //no edit
//Server Settings
new Nucleus.IniSaveInfo("NicksCoop.CoopGameInfo", "CoopSaveServerID", "AAAA-AAAA-AAAA-AAAA"), //DO NOT TOUCH
new Nucleus.IniSaveInfo("NicksCoop.CoopGameInfo", "CoopHostNameID", "AAAA_AAAA"), //DO NOT TOUCH
new Nucleus.IniSaveInfo("NicksCoop.CoopGameInfo", "CoopTravelPortalName", ""), //DO NOT TOUCH
new Nucleus.IniSaveInfo("NicksCoop.CoopGameInfo", "bCoopRagdollSync", "True"), //DO NOT TOUCH
new Nucleus.IniSaveInfo("NicksCoop.CoopGameInfo", "ReportLogFileType", "ReportLog_D%D_M%M_Y%Y"), //DO NOT TOUCH
new Nucleus.IniSaveInfo("NicksCoop.CoopGameInfo", "bNonDedicatedAutoSave", "True"), //DO NOT TOUCH
new Nucleus.IniSaveInfo("NicksCoop.CoopGameInfo", "bAutoSave_FirstRun", "False"), //DO NOT TOUCH
new Nucleus.IniSaveInfo("NicksCoop.CoopGameInfo", "xResetVoteTimeStamp", "0.000000"), //DO NOT TOUCH
new Nucleus.IniSaveInfo("NicksCoop.CoopGameInfo", "CoopFriendlyFireScale", "0.000000"), //FriendlyFire Max 1.000000
new Nucleus.IniSaveInfo("NicksCoop.CoopGameInfo", "CoopStoryModeType", "2"), // Story Mode: 0 = POSTAL 2 , 1 = Apocalypse Weekend , 2 = A Week in Paradise
new Nucleus.IniSaveInfo("NicksCoop.CoopGameInfo", "CoopTravelAccessPercent", "0.500000"), //How many Players you need to travel between levels (more tha value). Max value 1.000000.
new Nucleus.IniSaveInfo("Engine.GameInfo", "GameDifficulty", "5.000000"), //Difficulty 0.000000 at 10.000000. Default Normal = 5.000000
new Nucleus.IniSaveInfo("Engine.GameInfo", "MaxSpectators", "5"), //Max 10
new Nucleus.IniSaveInfo("Engine.GameInfo", "MaxPlayers", "16"), // Max 16
new Nucleus.IniSaveInfo("UTBrowser.UMenuBotmatchClientWindow", "AdminPassword", "Nick"), //Admin Password
new Nucleus.IniSaveInfo("Engine.GameReplicationInfo", "ServerName", "(NucleusCoop)NicksCoop Local Server"), //server name
new Nucleus.IniSaveInfo("Engine.GameReplicationInfo", "ShortName", "(NucleusCoop)NicksCoop Local Server"), //server name
new Nucleus.IniSaveInfo("Postal2Game.P2GameInfoSingle", "bNoHolidays", "False") // No Holidays Events (True or False)
]);
//sum of aspect
if (Context.AspectRatioDecimal < 1.2) {
//vertical below 4:3
} else {
//fix Map on horizontal
var savePath = Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\System\\Postal2CoOp.ini";
Context.ModifySaveFile(savePath, savePath, Nucleus.SaveType.INI, [new Nucleus.IniSaveInfo("Postal2Game.P2GameInfo", "bWidescreenStretch", "False")]);
}
//skins players and others //////////////////////////
if (Context.PlayerID == 0) {
//this is what Nucleus will do for the player 1
var savePath = Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\System\\User.ini";
Context.ModifySaveFile(savePath, savePath, Nucleus.SaveType.INI, [new Nucleus.IniSaveInfo("DefaultPlayer", "Skin", "NicksCoop.ExtraStuff.Punisher_Skin")]);
var savePath = (Context.SavePath = Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\System\\Postal2 - Player 1Splash.bmp");
var savePkgOrigin = System.IO.Path.Combine(Game.Folder, "Postal2Splash.bmp");
System.IO.File.Copy(savePkgOrigin, savePath, true);
}
if (Context.PlayerID == 1) {
// this is what Nucleus will do for the player 2
var savePath = Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\System\\User.ini";
Context.ModifySaveFile(savePath, savePath, Nucleus.SaveType.INI, [new Nucleus.IniSaveInfo("DefaultPlayer", "Skin", "NicksCoop.ExtraStuff.HNDudeSanta_Skin")]);
var savePath = (Context.SavePath = Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\System\\Postal2 - Player 2Splash.bmp");
var savePkgOrigin = System.IO.Path.Combine(Game.Folder, "Postal2Splash.bmp");
System.IO.File.Copy(savePkgOrigin, savePath, true);
}
if (Context.PlayerID == 2) {
// this is what Nucleus will do for the player 3
var savePath = Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\System\\User.ini";
Context.ModifySaveFile(savePath, savePath, Nucleus.SaveType.INI, [new Nucleus.IniSaveInfo("DefaultPlayer", "Skin", "ChameleonSkins.Scientists.MW__164__Avg_Dude")]);
var savePath = (Context.SavePath = Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\System\\Postal2 - Player 3Splash.bmp");
var savePkgOrigin = System.IO.Path.Combine(Game.Folder, "Postal2Splash.bmp");
System.IO.File.Copy(savePkgOrigin, savePath, true);
}
if (Context.PlayerID == 3) {
// this is what Nucleus will do for the player 4
var savePath = Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\System\\User.ini";
Context.ModifySaveFile(savePath, savePath, Nucleus.SaveType.INI, [new Nucleus.IniSaveInfo("DefaultPlayer", "Skin", "NicksCoop.ExtraStuff.SJDudeShtopor_Skin00")]);
var savePath = (Context.SavePath = Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\System\\Postal2 - Player 4Splash.bmp");
var savePkgOrigin = System.IO.Path.Combine(Game.Folder, "Postal2Splash.bmp");
System.IO.File.Copy(savePkgOrigin, savePath, true);
}
if (Context.PlayerID == 4) {
// this is what Nucleus will do for the player 5
var savePath = Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\System\\User.ini";
Context.ModifySaveFile(savePath, savePath, Nucleus.SaveType.INI, [new Nucleus.IniSaveInfo("DefaultPlayer", "Skin", "NicksCoop.ExtraStuff.P1Dude_Skin")]);
var savePath = (Context.SavePath = Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\System\\Postal2 - Player 5Splash.bmp");
var savePkgOrigin = System.IO.Path.Combine(Game.Folder, "Postal2Splash.bmp");
System.IO.File.Copy(savePkgOrigin, savePath, true);
}
if (Context.PlayerID == 5) {
// this is what Nucleus will do for the player 6
var savePath = Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\System\\User.ini";
Context.ModifySaveFile(savePath, savePath, Nucleus.SaveType.INI, [new Nucleus.IniSaveInfo("DefaultPlayer", "Skin", "NicksCoop.ExtraStuff.PRDude_Skin")]);
var savePath = (Context.SavePath = Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\System\\Postal2 - Player 6Splash.bmp");
var savePkgOrigin = System.IO.Path.Combine(Game.Folder, "Postal2Splash.bmp");
System.IO.File.Copy(savePkgOrigin, savePath, true);
}
if (Context.PlayerID == 6) {
// this is what Nucleus will do for the player 7
var savePath = Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\System\\User.ini";
Context.ModifySaveFile(savePath, savePath, Nucleus.SaveType.INI, [new Nucleus.IniSaveInfo("DefaultPlayer", "Skin", "NicksCoop.ExtraStuff.TalibDude_Skin")]);
var savePath = (Context.SavePath = Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\System\\Postal2 - Player 7Splash.bmp");
var savePkgOrigin = System.IO.Path.Combine(Game.Folder, "Postal2Splash.bmp");
System.IO.File.Copy(savePkgOrigin, savePath, true);
}
if (Context.PlayerID == 7) {
// this is what Nucleus will do for the player 8
var savePath = Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\System\\User.ini";
Context.ModifySaveFile(savePath, savePath, Nucleus.SaveType.INI, [new Nucleus.IniSaveInfo("DefaultPlayer", "Skin", "NicksCoop.ExtraStuff.BetaNiceDude_Skin")]);
var savePath = (Context.SavePath = Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\System\\Postal2 - Player 8Splash.bmp");
var savePkgOrigin = System.IO.Path.Combine(Game.Folder, "Postal2Splash.bmp");
System.IO.File.Copy(savePkgOrigin, savePath, true);
}
/////////////////////////////////////////////////////////////////////////
//// for xinput work
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;
}
///// Restore Save backup
if (System.IO.File.Exists(Context.PlayerGameFilesBackupFolder + "\\System\\NicksCoopSave.ini")) {
var savePath = (Context.SavePath = Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\System\\NicksCoopSave.ini");
var savePkgOrigin = System.IO.Path.Combine(Context.PlayerGameFilesBackupFolder + "\\System\\NicksCoopSave.ini");
System.IO.File.Copy(savePkgOrigin, savePath, true);
}
if (System.IO.File.Exists(Context.PlayerGameFilesBackupFolder + "\\System\\User.ini")) {
var savePath = (Context.SavePath = Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\System\\User.ini");
var savePkgOrigin = System.IO.Path.Combine(Context.PlayerGameFilesBackupFolder + "\\System\\User.ini");
System.IO.File.Copy(savePkgOrigin, savePath, true);
}
var savePath = Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\System\\User.ini";
Context.ModifySaveFile(savePath, savePath, Nucleus.SaveType.INI, [
new Nucleus.IniSaveInfo("DefaultPlayer", "Name", Context.Nickname)
// new Nucleus.IniSaveInfo("Engine.PlayerController", "DesiredFOV", "101.4"),
// new Nucleus.IniSaveInfo("Engine.PlayerController", "DefaultFOV", "101.4"),
]);
/////////////////////////
//SERVER
Context.RunAdditionalFiles(["1|" + Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\System\\NicksCoop_RunServer.bat"], false, 0, false, false);
Context.RunAdditionalFiles(["1|" + Game.Folder + "\\checknucleus.bat"], false, 1, true, false);
};