|  | @@ -13,7 +13,7 @@
 | 
	
		
			
				|  |  |  #include <stocksoup/files>
 | 
	
		
			
				|  |  |  #include <stocksoup/version>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -#define PLUGIN_VERSION "1.1.5"
 | 
	
		
			
				|  |  | +#define PLUGIN_VERSION "1.2.0"
 | 
	
		
			
				|  |  |  public Plugin myinfo = {
 | 
	
		
			
				|  |  |  	name = "[CSRD] SRCDS Automatic Data Dumper",
 | 
	
		
			
				|  |  |  	author = "nosoop",
 | 
	
	
		
			
				|  | @@ -45,6 +45,7 @@ StringMap g_ConCommandFlagCache;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  public APLRes AskPluginLoad2(Handle hPluginSelf, bool bLateLoaded, char[] error, int err_max) {
 | 
	
		
			
				|  |  |  	if (bLateLoaded) {
 | 
	
		
			
				|  |  | +		// skip dump on late load because muh consistency
 | 
	
		
			
				|  |  |  		g_DumpAction = DumpAction_None;
 | 
	
		
			
				|  |  |  	} else {
 | 
	
		
			
				|  |  |  		g_DumpAction = DumpAction_UpdateCheck;
 | 
	
	
		
			
				|  | @@ -130,6 +131,7 @@ void PerformDataDump(RequestFrameCallback postDumpCallback = INVALID_FUNCTION, a
 | 
	
		
			
				|  |  |  	
 | 
	
		
			
				|  |  |  	DumpServerCommands("%s/%d.commands.txt", outputDirectory, version);
 | 
	
		
			
				|  |  |  	DumpServerConVars("%s/%d.convars.txt", outputDirectory, version);
 | 
	
		
			
				|  |  | +	DumpUserMessageNames("%s/%d.usermessages.txt", outputDirectory, version);
 | 
	
		
			
				|  |  |  	
 | 
	
		
			
				|  |  |  	/**
 | 
	
		
			
				|  |  |  	 * spawns all entities, server will crash on map change -- make sure there are 1400-ish
 | 
	
	
		
			
				|  | @@ -138,7 +140,7 @@ void PerformDataDump(RequestFrameCallback postDumpCallback = INVALID_FUNCTION, a
 | 
	
		
			
				|  |  |  	ServerCommand("sm_dump_datamaps %s/%d.datamaps.txt", outputDirectory, version);
 | 
	
		
			
				|  |  |  	
 | 
	
		
			
				|  |  |  	// TODO replace this with just filtering the appropriate lines from datamaps?
 | 
	
		
			
				|  |  | -	// match expr /^[A-Za-z0-9_]+ - [A-Za-z0-9_]+$/
 | 
	
		
			
				|  |  | +	// match expr /^\w+ - \w+$/
 | 
	
		
			
				|  |  |  	ServerCommand("sm_dump_classes %s/%d.classes.txt", outputDirectory, version);
 | 
	
		
			
				|  |  |  	
 | 
	
		
			
				|  |  |  	ServerCommand("sm_dump_teprops %s/%d.tempents.txt", outputDirectory, version);
 | 
	
	
		
			
				|  | @@ -285,7 +287,29 @@ void DumpServerConVars(const char[] format, any ...) {
 | 
	
		
			
				|  |  |  	delete outputFile;
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +/**
 | 
	
		
			
				|  |  | + * Dumps user message names to a path created by the format string.
 | 
	
		
			
				|  |  | + */
 | 
	
		
			
				|  |  | +void DumpUserMessageNames(const char[] format, any ...) {
 | 
	
		
			
				|  |  | +	char outputPath[PLATFORM_MAX_PATH];
 | 
	
		
			
				|  |  | +	VFormat(outputPath, sizeof(outputPath), format, 2);
 | 
	
		
			
				|  |  | +	
 | 
	
		
			
				|  |  | +	File outputFile = OpenFile(outputPath, "w");
 | 
	
		
			
				|  |  | +	outputFile.WriteLine("\"%s\",\"%s\"", "Index", "Name");
 | 
	
		
			
				|  |  | +	
 | 
	
		
			
				|  |  | +	char umName[128];
 | 
	
		
			
				|  |  | +	for (int um = 0; GetUserMessageName(view_as<UserMsg>(um), umName, sizeof(umName)); um++) {
 | 
	
		
			
				|  |  | +		outputFile.WriteLine("\"%d\",\"%s\"", um, umName);
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +	
 | 
	
		
			
				|  |  | +	delete outputFile;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +/** 
 | 
	
		
			
				|  |  | + * Converts bitflags from a ConCommandBase to a space-separated list of flag descriptions.
 | 
	
		
			
				|  |  | + */
 | 
	
		
			
				|  |  |  char[] GetCommandFlagString(int flags) {
 | 
	
		
			
				|  |  | +	// static array of flag descriptions, index mapped to corresponding bit
 | 
	
		
			
				|  |  |  	static char s_flagStrings[][] = {
 | 
	
		
			
				|  |  |  		"UNREGISTERED",
 | 
	
		
			
				|  |  |  		"DEVELOPMENTONLY",
 |