135 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			SourcePawn
		
	
	
	
	
	
			
		
		
	
	
			135 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			SourcePawn
		
	
	
	
	
	
| #pragma semicolon 1
 | |
| #include <sourcemod>
 | |
| 
 | |
| Database g_hDatabase;
 | |
| 
 | |
| public Plugin myinfo ={
 | |
|     name = "List SourceMod Command",
 | |
|     author = "jenzur",
 | |
|     description = "Lists SourceMod commands accessible to the client in a menu. just stolen from darthninja",
 | |
|     version = "1.0",
 | |
|     url = "https://forums.alliedmods.net/showthread.php?p=1524781"
 | |
| }; 
 | |
| 
 | |
| public void OnMapStart()
 | |
| {
 | |
|     if (!g_hDatabase)
 | |
|     {
 | |
|         Database.Connect(SQL_OnDatabaseConnect, "racetimercss");
 | |
|     }
 | |
|     else
 | |
|     {
 | |
|         Command_listcmd();
 | |
|     }
 | |
| }
 | |
| 
 | |
| public void OnPluginStart()
 | |
| {
 | |
|     if (!g_hDatabase)
 | |
|     {
 | |
|         Database.Connect(SQL_OnDatabaseConnect, "racetimercss");
 | |
|     }
 | |
| }
 | |
| 
 | |
| public void SQL_OnDatabaseConnect(Database db, const char[] error, any data)
 | |
| {
 | |
|     if(!db || strlen(error))
 | |
|     {
 | |
|         LogError("Database error: %s", error);
 | |
|         return;
 | |
|     }
 | |
|     g_hDatabase = db;
 | |
|     Command_listcmd();
 | |
| }
 | |
| 
 | |
| public void Command_listcmd()
 | |
| {
 | |
| 	decl String:Command[64];
 | |
| 	decl String:Description[255];
 | |
| 	new Handle:hIterator = GetCommandIterator();
 | |
| 
 | |
| 	new iFlags;
 | |
| 	decl String:strFlags[64];
 | |
| 
 | |
| 	/* Start printing the commands to the client */
 | |
| 	while (ReadCommandIterator(hIterator, Command, sizeof(Command), iFlags, Description, sizeof(Description)))
 | |
|     {
 | |
|         Format(strFlags, sizeof(strFlags), "");
 | |
|         
 | |
|         //This still may not be the best way to do this
 | |
|         if (iFlags & ADMFLAG_RESERVATION)
 | |
|             StrCat(strFlags, sizeof(strFlags), "ADMFLAG_RESERVATION");
 | |
|         if (iFlags & ADMFLAG_GENERIC)
 | |
|             StrCat(strFlags, sizeof(strFlags), "ADMFLAG_GENERIC");
 | |
|         if (iFlags & ADMFLAG_KICK)
 | |
|             StrCat(strFlags, sizeof(strFlags), "ADMFLAG_KICK");
 | |
|         if (iFlags & ADMFLAG_BAN)
 | |
|             StrCat(strFlags, sizeof(strFlags), "ADMFLAG_BAN");
 | |
|         if (iFlags & ADMFLAG_UNBAN)
 | |
|             StrCat(strFlags, sizeof(strFlags), "ADMFLAG_UNBAN");
 | |
|         if (iFlags & ADMFLAG_SLAY)
 | |
|             StrCat(strFlags, sizeof(strFlags), "ADMFLAG_SLAY");
 | |
|         if (iFlags & ADMFLAG_CHANGEMAP)
 | |
|             StrCat(strFlags, sizeof(strFlags), "ADMFLAG_CHANGEMAP");
 | |
|         if (iFlags & ADMFLAG_CONVARS)
 | |
|             StrCat(strFlags, sizeof(strFlags), "ADMFLAG_CONVARS");
 | |
|         if (iFlags & ADMFLAG_CONFIG)
 | |
|             StrCat(strFlags, sizeof(strFlags), "ADMFLAG_CONFIG");
 | |
|         if (iFlags & ADMFLAG_CHAT)
 | |
|             StrCat(strFlags, sizeof(strFlags), "ADMFLAG_CHAT");
 | |
|         if (iFlags & ADMFLAG_VOTE)
 | |
|             StrCat(strFlags, sizeof(strFlags), "ADMFLAG_VOTE");
 | |
|         if (iFlags & ADMFLAG_PASSWORD)
 | |
|             StrCat(strFlags, sizeof(strFlags), "ADMFLAG_PASSWORD");
 | |
|         if (iFlags & ADMFLAG_RCON)
 | |
|             StrCat(strFlags, sizeof(strFlags), "ADMFLAG_RCON");
 | |
|         if (iFlags & ADMFLAG_CHEATS)
 | |
|             StrCat(strFlags, sizeof(strFlags), "ADMFLAG_CHEATS");
 | |
|         if (iFlags & ADMFLAG_ROOT)
 | |
|             StrCat(strFlags, sizeof(strFlags), "ADMFLAG_ROOT");
 | |
|         if (iFlags & ADMFLAG_CUSTOM1)
 | |
|             StrCat(strFlags, sizeof(strFlags), "ADMFLAG_CUSTOM1");
 | |
|         if (iFlags & ADMFLAG_CUSTOM2)
 | |
|             StrCat(strFlags, sizeof(strFlags), "ADMFLAG_CUSTOM2");
 | |
|         if (iFlags & ADMFLAG_CUSTOM3)
 | |
|             StrCat(strFlags, sizeof(strFlags), "ADMFLAG_CUSTOM3");
 | |
|         if (iFlags & ADMFLAG_CUSTOM4)
 | |
|             StrCat(strFlags, sizeof(strFlags), "ADMFLAG_CUSTOM4");
 | |
|         if (iFlags & ADMFLAG_CUSTOM5)
 | |
|             StrCat(strFlags, sizeof(strFlags), "ADMFLAG_CUSTOM5");
 | |
|         if (iFlags & ADMFLAG_CUSTOM6)
 | |
|             StrCat(strFlags, sizeof(strFlags), "ADMFLAG_CUSTOM6");
 | |
|         if (iFlags == 0)
 | |
|             Format(strFlags, sizeof(strFlags), "No flag registered");
 | |
| 
 | |
|         if (StrEqual(Description, "", false))
 | |
|             Format(Description, sizeof(Description), "No description found");
 | |
|         //PrintToChatAll("Command: %s Description: %s strFlags: %s", Command, Description, strFlags);
 | |
|         char sQuery[2048];
 | |
|         int size2 = 2 * strlen(Description) + 1;
 | |
|         char[] sEscapedDescription = new char[size2 + 1];
 | |
| 
 | |
|         g_hDatabase.Escape(Description, sEscapedDescription, size2 + 1);
 | |
|         Format(sQuery, sizeof(sQuery), "INSERT INTO `ze_commands_info` (`command`, `description`, `flag`) VALUES ('%s', '%s', '%s') ON DUPLICATE KEY UPDATE `description` = '%s', `flag` = '%s'", Command, sEscapedDescription, strFlags, sEscapedDescription, strFlags);
 | |
| 
 | |
|         DataPack hDataPack = new DataPack();
 | |
|         hDataPack.WriteString(sQuery);
 | |
|         g_hDatabase.Query(SQL_OnQueryCompleted, sQuery, hDataPack, DBPrio_Low);
 | |
|     }
 | |
| 	CloseHandle(hIterator);
 | |
| }
 | |
| 
 | |
| public void SQL_OnQueryCompleted(Database db, DBResultSet results, const char[] error, DataPack data)
 | |
| {
 | |
|     if (!db || strlen(error))
 | |
|     {
 | |
|         char sQuery[2048];
 | |
|         ResetPack(data);
 | |
|         data.ReadString(sQuery, sizeof(sQuery));
 | |
|         LogError("Query error 3: %s", error); 
 | |
|         LogError("actual query: %s", sQuery);
 | |
|     }
 | |
|     delete results;
 | |
|     delete data;
 | |
| }
 |