1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
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;
}
|