From 5e2eb7d67ae933b7566f1944d0bb7744da03d586 Mon Sep 17 00:00:00 2001 From: aura Date: Tue, 17 Feb 2026 23:42:09 +0100 Subject: move source stuff to its own folder --- source/sourcemod/scripting/gokz-replays/nav.sp | 97 ++++++++++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 source/sourcemod/scripting/gokz-replays/nav.sp (limited to 'source/sourcemod/scripting/gokz-replays/nav.sp') diff --git a/source/sourcemod/scripting/gokz-replays/nav.sp b/source/sourcemod/scripting/gokz-replays/nav.sp new file mode 100644 index 0000000..4e73c2f --- /dev/null +++ b/source/sourcemod/scripting/gokz-replays/nav.sp @@ -0,0 +1,97 @@ +/* + Ensures that there is .nav file for the map so the server + does not to auto-generating one. +*/ + + + +// =====[ EVENTS ]===== + +void OnMapStart_Nav() +{ + if (!CheckForNavFile()) + { + GenerateNavFile(); + } +} + + + +// =====[ PRIVATE ]===== + +static bool CheckForNavFile() +{ + // Make sure there's a nav file + // Credit to shavit's simple bhop timer - https://github.com/shavitush/bhoptimer + + char mapPath[PLATFORM_MAX_PATH]; + GetCurrentMap(mapPath, sizeof(mapPath)); + + char navFilePath[PLATFORM_MAX_PATH]; + FormatEx(navFilePath, PLATFORM_MAX_PATH, "maps/%s.nav", mapPath); + + return FileExists(navFilePath); +} + +static void GenerateNavFile() +{ + // Generate (copy a) .nav file for the map + // Credit to shavit's simple bhop timer - https://github.com/shavitush/bhoptimer + + char mapPath[PLATFORM_MAX_PATH]; + GetCurrentMap(mapPath, sizeof(mapPath)); + + char[] navFilePath = new char[PLATFORM_MAX_PATH]; + FormatEx(navFilePath, PLATFORM_MAX_PATH, "maps/%s.nav", mapPath); + + if (!FileExists(RP_NAV_FILE)) + { + SetFailState("Failed to load file: \"%s\". Check that it exists.", RP_NAV_FILE); + } + File_Copy(RP_NAV_FILE, navFilePath); + ForceChangeLevel(gC_CurrentMap, "[gokz-replays] Generate .nav file."); +} + +/* + * Copies file source to destination + * Based on code of javalia: + * http://forums.alliedmods.net/showthread.php?t=159895 + * + * Credit to shavit's simple bhop timer - https://github.com/shavitush/bhoptimer + * + * @param source Input file + * @param destination Output file + */ +static bool File_Copy(const char[] source, const char[] destination) +{ + File file_source = OpenFile(source, "rb"); + + if (file_source == null) + { + return false; + } + + File file_destination = OpenFile(destination, "wb"); + + if (file_destination == null) + { + delete file_source; + + return false; + } + + int[] buffer = new int[32]; + int cache = 0; + + while (!IsEndOfFile(file_source)) + { + cache = ReadFile(file_source, buffer, 32, 1); + + file_destination.Write(buffer, cache, 1); + } + + delete file_source; + delete file_destination; + + return true; +} \ No newline at end of file -- cgit v1.2.3