#pragma semicolon 1 #include 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() { 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[512]; 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, Description, strFlags, Description, strFlags); g_hDatabase.Query(SQL_OnQueryCompleted, sQuery, DBPrio_Low); } CloseHandle(hIterator); } public void SQL_OnQueryCompleted(Database db, DBResultSet results, const char[] error, DataPack data) { if (!db || strlen(error)) { LogError("Query error 3: %s", error); delete results; } delete data; }