mirror of https://github.com/r4sas/ExtraMirror
shelru
8 years ago
committed by
GitHub
1 changed files with 159 additions and 0 deletions
@ -0,0 +1,159 @@ |
|||||||
|
|
||||||
|
DWORD dwCmdList; |
||||||
|
void hookedCmdList() |
||||||
|
{ |
||||||
|
int total_cmds = 0; |
||||||
|
int odd_cmds = 0; |
||||||
|
bool log = false; |
||||||
|
bool is_legit_cmd = false; |
||||||
|
pcommand_t pCmd = g_Engine.pfnGetCmdList(); |
||||||
|
char cmd[1024]; |
||||||
|
char gamedir[256]; |
||||||
|
|
||||||
|
FILE *w; |
||||||
|
|
||||||
|
gamedir[0] = 0; |
||||||
|
cmd[0] = 0; |
||||||
|
strncat( cmd, g_Engine.Cmd_Argv(1), sizeof(cmd) ); |
||||||
|
|
||||||
|
if( cmd[0] == '?' && cmd[1] == 0 ) |
||||||
|
{ |
||||||
|
g_Engine.Con_Printf( "CmdList : List all commands\nCmdList [Partial] : List commands starting with 'Partial'\nCmdList log [Partial] : Logs commands to file \"cmdlist.txt\" in the gamedir.\n"); |
||||||
|
return; |
||||||
|
} |
||||||
|
g_Engine.Con_Printf( "Command List\n--------------\n" ); |
||||||
|
if( cmd[0] == '!' && cmd[1] == 0 ) |
||||||
|
{ |
||||||
|
while( pCmd ) |
||||||
|
{ |
||||||
|
if( !is_legit_cmd ) |
||||||
|
{ |
||||||
|
odd_cmds++; |
||||||
|
if( pCmd->pfnFunc == last_added_cmd ) |
||||||
|
{ |
||||||
|
is_legit_cmd = true; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
g_Engine.Con_Printf( "%-16.16s%s\n", pCmd->pszName, is_legit_cmd ? "" : "\t\t\t(odd)" ); |
||||||
|
|
||||||
|
total_cmds++; |
||||||
|
pCmd = pCmd->pNext; |
||||||
|
} |
||||||
|
g_Engine.Con_Printf( "--------------\n%3i Total Commands (%d odd)\nCmdList ? for syntax\n", total_cmds, odd_cmds ); |
||||||
|
|
||||||
|
return; |
||||||
|
} |
||||||
|
strncat(gamedir,g_Engine.pfnGetGameDirectory(),sizeof(gamedir)); |
||||||
|
strncat(gamedir,"/cmdlist.txt",sizeof(gamedir)); |
||||||
|
if( strncmp( cmd, "log", strlen(cmd) ) == 0 ) |
||||||
|
{ |
||||||
|
w = fopen( gamedir, "w" ); |
||||||
|
log = true; |
||||||
|
} |
||||||
|
|
||||||
|
if( log && w == NULL ) |
||||||
|
{ |
||||||
|
log = false; |
||||||
|
g_Engine.Con_Printf( "Couldn't open %s for writing!\n", gamedir ); |
||||||
|
return; |
||||||
|
} |
||||||
|
if( g_Engine.Cmd_Argc() == 2 ) |
||||||
|
{ |
||||||
|
if( log ) |
||||||
|
{ |
||||||
|
while( pCmd ) |
||||||
|
{ |
||||||
|
if( pCmd->pfnFunc == last_added_cmd ) |
||||||
|
{ |
||||||
|
is_legit_cmd = true; |
||||||
|
} |
||||||
|
|
||||||
|
if( is_legit_cmd ) |
||||||
|
{ |
||||||
|
g_Engine.Con_Printf( "%-16.16s\n", pCmd->pszName ); |
||||||
|
fprintf( w, "%-16.16s\n", pCmd->pszName ); |
||||||
|
total_cmds++; |
||||||
|
} |
||||||
|
pCmd = pCmd->pNext; |
||||||
|
} |
||||||
|
|
||||||
|
g_Engine.Con_Printf( "--------------\n%3i Total Commands\nCmdList ? for syntax\n", total_cmds ); |
||||||
|
fclose(w); |
||||||
|
return; |
||||||
|
} |
||||||
|
else |
||||||
|
{ |
||||||
|
while( pCmd ) |
||||||
|
{ |
||||||
|
if( pCmd->pfnFunc == last_added_cmd ) |
||||||
|
{ |
||||||
|
is_legit_cmd = true; |
||||||
|
} |
||||||
|
if( is_legit_cmd && strncmp( cmd, pCmd->pszName, strlen(cmd) ) == 0 ) |
||||||
|
{ |
||||||
|
g_Engine.Con_Printf( "%-16.16s\n", pCmd->pszName ); |
||||||
|
total_cmds++; |
||||||
|
} |
||||||
|
pCmd = pCmd->pNext; |
||||||
|
} |
||||||
|
g_Engine.Con_Printf( "--------------\n%3i Commands for [%s]\nCmdList ? for syntax\n", total_cmds, cmd ); |
||||||
|
|
||||||
|
return; |
||||||
|
} |
||||||
|
} |
||||||
|
if( g_Engine.Cmd_Argc() == 3 && log ) |
||||||
|
{ |
||||||
|
while( pCmd ) |
||||||
|
{ |
||||||
|
if( pCmd->pfnFunc == last_added_cmd ) |
||||||
|
{ |
||||||
|
is_legit_cmd = true; |
||||||
|
} |
||||||
|
|
||||||
|
if( is_legit_cmd && strncmp( g_Engine.Cmd_Argv(2), pCmd->pszName, strlen(g_Engine.Cmd_Argv(2)) ) == 0 ) |
||||||
|
{ |
||||||
|
g_Engine.Con_Printf( "%-16.16s\n", pCmd->pszName ); |
||||||
|
fprintf( w, "%-16.16s\n", pCmd->pszName ); |
||||||
|
total_cmds++; |
||||||
|
} |
||||||
|
|
||||||
|
pCmd = pCmd->pNext; |
||||||
|
} |
||||||
|
g_Engine.Con_Printf( "--------------\n%3i Total Commands\nCmdList ? for syntax\n", total_cmds ); |
||||||
|
fclose(w); |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
while( pCmd ) |
||||||
|
{ |
||||||
|
if( pCmd->pfnFunc == last_added_cmd )is_legit_cmd = true; |
||||||
|
if( is_legit_cmd ) |
||||||
|
{ |
||||||
|
g_Engine.Con_Printf( "%-16.16s\n", pCmd->pszName ); |
||||||
|
if( log ) |
||||||
|
fprintf( w, "%-16.16s\n", pCmd->pszName ); |
||||||
|
|
||||||
|
total_cmds++; |
||||||
|
} |
||||||
|
pCmd = pCmd->pNext; |
||||||
|
} |
||||||
|
g_Engine.Con_Printf( "--------------\n%3i Total Commands\nCmdList ? for syntax\n", total_cmds ); |
||||||
|
if( log ) |
||||||
|
fclose(w); |
||||||
|
} |
||||||
|
|
||||||
|
void hookCommand( char *cmdName, DWORD *dwCmdPointer, void (*func)( void ) ) |
||||||
|
{ |
||||||
|
pcommand_t pCmd = g_Engine.pfnGetCmdList( ); |
||||||
|
while( pCmd ) |
||||||
|
{ |
||||||
|
if( !strcmp( pCmd->pszName, cmdName ) ) |
||||||
|
{ |
||||||
|
*dwCmdPointer = pCmd->pfnFunc; |
||||||
|
pCmd->pfnFunc = (DWORD)( (void *)func ); |
||||||
|
break; |
||||||
|
} |
||||||
|
pCmd = pCmd->pNext; |
||||||
|
}; |
||||||
|
} |
Loading…
Reference in new issue