#include <sourcemod>
new hClientUsedChat[MAXPLAYERS + 1] = {-1, ...};
public OnPluginStart()
{
AddCommandListener(ACL_Callback, "say");
AddCommandListener(ACL_Callback, "say_team");
RegAdminCmd("local_chat", RAC_Callback, ADMFLAG_BAN);
}
public OnClientDisconnect(client)
{
if (hClientUsedChat[client] != -1)
{
hClientUsedChat[hClientUsedChat[client]] = -1;
PrintToChat(hClientUsedChat[client], "[SM] Клиент отключился. Диалог недоступен.");
hClientUsedChat[client] = -1;
}
}
public Action:ACL_Callback(client, const String:message[], args)
{
if (client > 0)
{
if (hClientUsedChat[client] != -1)
{
decl String:buffer[256];
GetCmdArgString(buffer, 256);
TrimString(buffer);
Format(buffer, 256, "\x01\x05%N\x01: %s", client, buffer);
PrintToChat(client, buffer);
PrintToChat(hClientUsedChat[client], buffer);
}
}
return Plugin_Handled;
}
public Action:RAC_Callback(client, args)
{
if (client > 0)
{
new Handle:menu = CreateMenu(MenuHandler);
SetMenuTitle(menu, "Выберите игрока");
decl String:userid[16], String:name[32];
if (hClientUsedChat[client] != -1)
{
AddMenuItem(menu, "close", "Закрыть активный диалог");
GetClientName(hClientUsedChat[client], name, 32);
AddMenuItem(menu, "0", name, ITEMDRAW_DISABLED);
}
for (new i = 1; i <= MaxClients; i++)
{
if (IsClientInGame(i) && !IsFakeClient(i) && hClientUsedChat[i] == -1 && client != i)
{
IntToString(GetClientUserId(i), userid, 16);
GetClientName(i, name, 32);
AddMenuItem(menu, userid, name);
}
}
}
return Plugin_Handled;
}
public MenuHandler(Handle:menu, MenuAction:action, param1, param2)
{
switch (action)
{
case MenuAction_Select:
{
decl String:buffer[16];
GetMenuItem(menu, param2, buffer, 16);
new client = GetClientOfUserId(StringToInt(buffer));
if (client > 0)
{
if (strcmp(buffer, "close", false) == 0)
{
hClientUsedChat[param1] = hClientUsedChat[client] = -1;
PrintToChat(param1, "\x01\x05[SM] \x01Выключен диалог с \x05%N\x01.", client);
PrintToChat(client, "\x01\x05[SM] \x01Выключен диалог с \x05%N\x01.", param1);
}
else
{
hClientUsedChat[param1] = client;
hClientUsedChat[client] = param1;
PrintToChat(param1, "\x01\x05[SM] \x01Включен диалог с \x05%N\x01.", client);
PrintToChat(client, "\x01\x05[SM] \x01Включен диалог с \x05%N\x01.", param1);
}
}
else
{
PrintToChat(param1, "\x01\x05[SM] \x01Клиент недоступен.", client);
}
}
case MenuAction_Cancel, MenuCancel_ExitBack:
{
CloseHandle(menu);
}
}
}