projects-jenz/commands_list/scripting/commands_info.sp

121 lines
4.3 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()
{
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;
}