smoke96
Участник
- Сообщения
- 1,134
- Реакции
- 175
Есть небольшой плагин, который выводит список админов которые онлайн. Я старался реализовать в нем функцию скрытия админов , то есть заносишь определенный стим Ид в файл и все админ не отображается при написании команды !admins , но не тут-то было. Почему-то не работает. Помогите :) Код плагина приложил.
Структура файла adminvis.txt
PHP:
#pragma semicolon 1;
#include <sourcemod>
new g_Mode;
new bool:g_Timer;
new bool:InList[MAXPLAYERS+1];
new Handle:ListInvis;
public Plugin:myinfo =
{
name = "[SM] Admins Online",
author = "smoke",
version = "1.0",
url = ""
}
public OnPluginStart()
{
decl Handle:hCvar;
HookConVarChange((hCvar = CreateConVar("sm_adminsonline_mode", "1", "2 мода отображения, 1 - в чате, 2 - в меню")), OnChange);
g_Mode = GetConVarInt(hCvar);
HookConVarChange((hCvar = CreateConVar("sm_adminsonline_timer", "0", "Если у вас стоит плагин на подобии cmd_5sec то ставите 1")), OnChange1);
g_Timer = GetConVarBool(hCvar);
AutoExecConfig(true, "AdminsOnline");
ListInvis = CreateArray(32);
LoadAdminInvis();
RegConsoleCmd("sm_admins", Admins_CMD);
AddCommandListener(CacheReload, "sm_reloadadmins");
}
public OnChange(Handle:hCvar, const String:sOldValue[], const String:sNewValue[]) g_Mode = GetConVarInt(hCvar);
public OnChange1(Handle:hCvar, const String:sOldValue[], const String:sNewValue[]) g_Timer = GetConVarBool(hCvar);
public OnClientPostAdminCheck(client)
{
if(g_Timer) CreateTimer(6.0, Timer, client);
else IsInList(client);
}
public Action:Timer(Handle:timer, any:client)
{
IsInList(client);
return Plugin_Stop;
}
public Action:Admins_CMD(client, args)
{
switch(g_Mode)
{
case 1:
{
decl String:AdminNames[MAXPLAYERS+1][MAX_NAME_LENGTH+1];
new count = 0;
for(new i = 1 ; i <= GetMaxClients();i++)
{
if(InGame(i) && InList[i])
{
GetClientName(i, AdminNames[count], sizeof(AdminNames[]));
count++;
}
}
decl String:buffer[1024];
ImplodeStrings(AdminNames, count, ",", buffer, sizeof(buffer));
PrintToChat(client, " \x01[\x04Админы Онлайн\x01] -> \x03%s", buffer);
}
case 2:
{
decl String:AdminName[MAX_NAME_LENGTH];
new Handle:g_Menu = CreateMenu(MenuListHandler);
SetMenuTitle(g_Menu, "[Админы Онлайн]");
for(new i = 1; i <= GetMaxClients(); i++)
{
if(InGame(i) && InList[i])
{
GetClientName(i, AdminName, sizeof(AdminName));
AddMenuItem(g_Menu, AdminName, AdminName);
}
}
SetMenuExitButton(g_Menu, true);
DisplayMenu(g_Menu, client, 15);
}
}
return Plugin_Handled;
}
public Action:CacheReload(client, const String:command[], args)
{
for(new i= 1;i <= GetMaxClients(); i++)
if(IsClientInGame(i)) IsInList(i);
}
public MenuListHandler(Handle:menu, MenuAction:action, param1, param2)
{
if (action == MenuAction_End)
CloseHandle(menu);
}
LoadAdminInvis()
{
if(FileExists("cfg/sourcemod/adminvis.txt"))
{
new Handle:hFile = OpenFile("cfg/sourcemod/adminvis.txt", "r");
if (hFile != INVALID_HANDLE)
{
decl String:str_value[150];
while (!IsEndOfFile(hFile) && ReadFileLine(hFile, str_value, 150)) PushArrayString(ListInvis, str_value);
CloseHandle(hFile);
}
}
else
LogError("OpenFile error: cfg/sourcemod/adminvis.txt");
}
stock IsInList(client)
{
if(InGame(client) && GetUserAdmin(client) == INVALID_ADMIN_ID) InList[client] = false;
else
{
decl String:auth[40];
GetClientAuthId(client, AuthId_Steam2, auth, sizeof(auth));
if (FindStringInArray(ListInvis, auth) != -1) InList[client] = false;
else InList[client] = true;
}
}
stock bool:InGame(client)
{
if(client && IsClientInGame(client) && !IsFakeClient(client)) return true;
else return false;
}
PHP:
STEAM_0:1:777777