Комманда !mute или как отключить чат игроку за спам не адекватное поведение.

jadefox

Customer
21 Фев 2018
92
19
45
Делаем через Insane limits.

Mute/Unmute Player без Adkats - Limit 1 of 2

Создайте новый лимит evluation - OnAnyChat.

В first_check указываем Code:
// Mute/Unmute without AdKats (for GR101) - Limit 1 of 2
// v1.3 - OnAnyChat - first_check
//

// Variables
Dictionary<String, bool> muList = null;
String sv_muList = "_MUTED_PLAYERS_";
String[] cmdLn = new String[3];
PlayerInfoInterface muPlayer;
bool muState = false;
String[] logMsgs = { "^b^1Mute^0^n: ",
"^b^1Unmute^0^n: ",
"Mute: ",
"Unmute: ",
" has been ",
"muted by ",
"unmuted by ",
" for " };
bool isAdmin = false;
bool bKill = false;
bool bKick = false;
bool bBan = false;
bool bMove = false;
bool bLevel = false;

// Code
if (plugin.CheckAccount(player.Name, out bKill, out bKick, out bBan, out bMove, out bLevel))
{
if (bKill && bKick && bBan) isAdmin = true;
}
if (server.RoundData.issetObject(sv_muList))
{
muList = (Dictionary<String, bool>)server.RoundData.getObject(sv_muList);
}
else
{
muList = new Dictionary<String, bool>();
}
if (isAdmin)
{
if (!plugin.IsInGameCommand(player.LastChat)) return false;
cmdLn[0] = plugin.ExtractInGameCommand(player.LastChat);
if ((cmdLn[0].Length != 0) && (plugin.ExtractCommandPrefix(cmdLn[0]).Length != 0)) cmdLn[0] = plugin.ExtractInGameCommand(cmdLn[0]);
if (null == cmdLn[0] || cmdLn[0].Length == 0) return false;
if (!Regex.Match(cmdLn[0], @"^\b(MUTE|UNMUTE)\b", RegexOptions.IgnoreCase).Success) return false;
if (cmdLn[0].IndexOf(" ") > 0)
{
cmdLn[1] = cmdLn[0].Remove(0, cmdLn[0].IndexOf(" ")).Trim();
cmdLn[0] = cmdLn[0].Substring(0, cmdLn[0].IndexOf(" ")).ToLower().Trim();
if (cmdLn[0] == "mute" && cmdLn[1].IndexOf(" ") <= 0)
{
cmdLn[2] = "You\'re muted, further message spamming results in being killed or kicked, stop now!";
}
else if (cmdLn[0] == "mute" && cmdLn[1].IndexOf(" ") > 0)
{
cmdLn[2] = cmdLn[1].Remove(0, cmdLn[1].IndexOf(" ")).Trim();
cmdLn[1] = cmdLn[1].Substring(0, cmdLn[1].IndexOf(" ")).Trim();
}
else if (cmdLn[0] != "unmute")
{
plugin.SendPlayerMessage(player.Name, "ERROR: Too many arguments!");
return false;
}
}
else
{
plugin.SendPlayerMessage(player.Name, "ERROR: Missing argument(s)!");
return false;
}
muPlayer = plugin.GetPlayer(cmdLn[1], true);
if ((muPlayer == null) || (!Regex.Match(muPlayer.Name, @"^" + cmdLn[1], RegexOptions.IgnoreCase).Success))
{
plugin.SendPlayerMessage(player.Name, "ERROR: Player does not exist!");
return false;
}
cmdLn[1] = muPlayer.Name;
switch (cmdLn[0])
{
case "mute":
if (muList.ContainsKey(cmdLn[1]))
{
plugin.SendPlayerMessage(player.Name, cmdLn[1] + " is already muted!");
return false;
}
muList.Add(cmdLn[1], false);
plugin.SendPlayerYell(cmdLn[1], "\n" + cmdLn[2], 8);
plugin.SendPlayerMessage(player.Name, cmdLn[1] + " has been muted!");
logMsgs[0] = logMsgs[0] + cmdLn[1] + logMsgs[4] + logMsgs[5] + player.Name + logMsgs[7] + cmdLn[2];
logMsgs[2] = logMsgs[2] + cmdLn[1] + logMsgs[4] + logMsgs[5] + player.Name + logMsgs[7] + cmdLn[2];
plugin.ConsoleWrite(logMsgs[0]);
plugin.PRoConChat(logMsgs[0]);
plugin.PRoConEvent(logMsgs[2], "Insane Limits");
break;
case "unmute":
if (!muList.ContainsKey(cmdLn[1]))
{
plugin.SendPlayerMessage(player.Name, cmdLn[1] + " is not muted!");
return false;
}
muList.Remove(cmdLn[1]);
plugin.SendPlayerYell(cmdLn[1], "\nYou are now unmuted!", 5);
plugin.SendPlayerMessage(player.Name, cmdLn[1] + " has been unmuted!");
logMsgs[1] = logMsgs[1] + cmdLn[1] + logMsgs[4] + logMsgs[6] + player.Name;
logMsgs[3] = logMsgs[3] + cmdLn[1] + logMsgs[4] + logMsgs[6] + player.Name;
plugin.ConsoleWrite(logMsgs[1]);
plugin.PRoConChat(logMsgs[1]);
plugin.PRoConEvent(logMsgs[3], "Insane Limits");
break;
}
server.RoundData.setObject(sv_muList, muList);
}
else
{
if (muList.ContainsKey(player.Name))
{
muState = muList[player.Name];
if (muState)
{
if (player.Role > 0)
{
plugin.SendPlayerYell(player.Name, "\nYou\'re muted, further message spamming results in being kicked, stop now!", 8);
}
else
{
plugin.SendPlayerYell(player.Name, "\nYou\'re muted, further message spamming results in being killed, stop now!", 8);
}
muList[player.Name] = false;
server.RoundData.setObject(sv_muList, muList);
}
else
{
if (player.Role > 0)
{
plugin.KickPlayerWithMessage(player.Name, "Talking excessively while muted!");
}
else
{
plugin.SendPlayerYell(player.Name, "\nYou\'ve been muted due to excessive message spamming!", 8);
plugin.KillPlayer(player.Name);
}
}
}
}

return false;
Mute/Unmute Player без Adkats - Limit 2 of 2

Создаем новый лимит evaluate -OnJoin.

В first_check указываем Code:
// Mute/Unmute without AdKats (for GR101) - Limit 2 of 2
// v1.3 - OnJoin - first_check
//

// Variables
Dictionary<String, bool> muList = null;
String sv_muList = "_MUTED_PLAYERS_";

// Code
if (server.RoundData.issetObject(sv_muList))
{
muList = (Dictionary<String, bool>)server.RoundData.getObject(sv_muList);
if (muList.ContainsKey(player.Name))
{
muList[player.Name] = true;
server.RoundData.setObject(sv_muList, muList);
}
}

return false;
Судя по описанию работает следующим образом. Основные комманды !mute (никнейм) (причина), !unmute. Можно не указывать причину, по умолчанию причина будет указана СПАМ. Если вы "замутили" игрока при каждом его сообщении его будет автоматически убивать с надписью "вы убиты за спам" на английском. После окончания раунда список обнуляется. Перевод сообщений не делал, кому нада переведете. Пробуем отписумся о результатах
 
Последнее редактирование:

jadefox

Customer
21 Фев 2018
92
19
45
сегодня протестировал. В общем работает как описано, мут дает и если пытаешься чтото писать сразу киляет с сообщением в центре экрана что спам. недостаток что если ты мертвый пишешь то после того как появишься не киляет. мут снимается по окончанию раунда автоматически
 
  • Like
Реакции: Slawter

LADO@

Customer
7 Окт 2019
33
0
НА одном из серверов прописали мюте... но там физический в чат не попадал текст.. то-есть я пишу в чат,что- то и нажимаю интер...и нифига в чат не идет! хоть опишись )))))
 

Slawter

Support team
5 Сен 2014
22.522
879
НА одном из серверов прописали мюте... но там физический в чат не попадал текст.. то-есть я пишу в чат,что- то и нажимаю интер...и нифига в чат не идет! хоть опишись )))))
Да есть сервера с модификациями. Но такое врядли удастся сделать рядовому админу, для этого требуются навыки программирования, точнее взлома :) из коробки у сервера такой настройки нет, точнее она есть и просто перенесена из старых частей серии, где были подобные настройки И другие в виде информации об игроках на карте и куда они стреляют прямо в проконе, но тут они заблокированы для RCON, DICE ограничивали возможности админки с каждой последующей частью. Это как прошивка на некоторых телефонах, в какой то стране какая нибудь опция доступна, а в какой то нет, и если телефон взломать, можно разблокировать функции, которых нет из коробки.
 

LADO@

Customer
7 Окт 2019
33
0
Да есть сервера с модификациями. Но такое врядли удастся сделать рядовому админу, для этого требуются навыки программирования, точнее взлома :) из коробки у сервера такой настройки нет, точнее она есть и просто перенесена из старых частей серии, где были подобные настройки И другие в виде информации об игроках на карте и куда они стреляют прямо в проконе, но тут они заблокированы для RCON, DICE ограничивали возможности админки с каждой последующей частью. Это как прошивка на некоторых телефонах, в какой то стране какая нибудь опция доступна, а в какой то нет, и если телефон взломать, можно разблокировать функции, которых нет из коробки.
это как в третей батле можно было задать красную зону или линию базрейпа для наказания игрока.. в 4 части такого уже нет..по моему так же было и бф2142... на карте суецкий канал любили частенько делать режим игры только снайперы.. граница команд проходила строго в середине моста..
при пересечении любой из команд воображаемой линии в середине моста заканчивалась автокиллом а затем и с последующим удалением с игры..... бф4 в этом плане более ущербная...