using System; using System.Collections.Generic; using System.Text; using System.IO; using InfinityScript; using Utility; namespace BadWords { public class BadWords : BaseScript { string ImmunePlayers; private List Immunes = new List(); private List Lines = new List(); private List LinesUnBad = new List(); private Dictionary WarnClients = new Dictionary(); private List BannedChatPlayers = new List(); int MaxWarn = 3; string messWarn; bool end; private static string path = "scripts\\BadWords\\badwords.txt"; private static string path2 = "scripts\\BadWords\\unbadwords.txt"; private static string path_ChatBlock = "scripts\\BadWords\\blockchat.txt"; int BanTime; //TryParse string BanTimeChat; string MessagePlayer; string ServerSay = string.Empty; public BadWords() { CheckFile(path, path2, path_ChatBlock); Log.Info("Script BadWords (+BlockChat) by frst_ loaded. v1.0.0.7 | Mordekai74.3dn.ru"); MaxWarn = int.Parse(UL.GET.GetServerCFG("BADWORDS", "MaxWarn", "3")); ServerSay = UL.GET.GetServerCFG("BADWORDS", "ServerSay", string.Empty); MessagePlayer = UL.GET.GetServerCFG("BADWORDS", "MessagePlayer", string.Empty); BanTimeChat = UL.GET.GetServerCFG("BADWORDS", "BanTimeChat", "10"); messWarn = UL.GET.GetServerCFG("BADWORDS", "MessageWarn", "МАТ ЗАПРЕЩЕН. (^2 ^7/ ^2^7)"); ImmunePlayers = UL.GET.GetServerCFG("BADWORDS", "ImmunePlayers", ""); BannedChatPlayers = new List(File.ReadAllLines(path_ChatBlock)); //read ban file if (!ImmunePlayers.Equals("")) Immunes = new List(ImmunePlayers.ToLower().Split(',')); Lines = new List(File.ReadAllLines(path, Encoding.UTF8)); LinesUnBad = new List(File.ReadAllLines(path2, Encoding.UTF8)); end = true; OnNotify("game_over", () => { end = false; }); OnInterval(5000, () => { foreach (Entity player in Players) { if (!player.Name.Equals("")) { Check_BlockChat(player); } } return end; }); OnInterval(1000 * 60, () => { BannedChatPlayers = new List(File.ReadAllLines(path_ChatBlock)); return end; }); PlayerConnected += new Action(player => { if (!WarnClients.ContainsKey(player.HWID.ToLower())) WarnClients.Add(player.HWID.ToLower(), 0); }); } public override EventEat OnSay2(Entity player, string name, string Message) { string[] parsed = Message.Split(null as char[], StringSplitOptions.RemoveEmptyEntries); if (IsBlocked_inChat(player)) { player.Call("playlocalsound", "disable_activeperk"); return EventEat.EatGame; } if (!IsImmune(player)) { string str = ""; bool firstbw = true; foreach (string parser in parsed) { if (!LinesUnBad.Contains(parser)) { if (firstbw) { str += parser.ToLower(); firstbw = false; } else str += " " + parser.ToLower(); } } for (int i = 0; i < Lines.Count; i++) { if (0 <= str.IndexOf(Lines[i].ToLower(), StringComparison.InvariantCultureIgnoreCase)) { if (WarnClients.ContainsKey(player.HWID.ToLower())) { WarnClients[player.HWID.ToLower()]++; messWarn = messWarn.Replace("", WarnClients[player.HWID.ToLower()].ToString()).Replace("", MaxWarn.ToString()); UL.iPrintBold(messWarn, player); } else WarnClients.Add(player.HWID.ToLower(), 1); if (WarnClients[player.HWID.ToLower()] >= MaxWarn) { bool isNumber = int.TryParse(BanTimeChat, out BanTime); if (!isNumber && BanTimeChat.ToLower() != "infinity") { UL.ServerPrint("[BadWords.OnSay]: Ошибка. " + player.Name + " не заблокирован. Неверное значение BantimeChat в sv_config.ini"); } else { using (StreamWriter sw = new StreamWriter(path_ChatBlock, true)) { sw.WriteLine(player.Name + ";" + player.HWID.ToLower() + ";" + timestamp() + ";" + BanTimeChat.ToLower()); } ServerSay = ServerSay.Replace("", player.Name); AfterDelay(1000, () => { if (!string.IsNullOrEmpty(ServerSay)) { UL.ServerSay(ServerSay); } if (!string.IsNullOrEmpty(MessagePlayer)) { UL.TellClient(MessagePlayer, player); } }); } } break; } } } #region commands; if (Message.StartsWith("!addbadword", StringComparison.InvariantCultureIgnoreCase) || Message.StartsWith("!addbw", StringComparison.InvariantCultureIgnoreCase)) { if (parsed.Length == 2) { using (StreamWriter sw = new StreamWriter(path, true)) { sw.WriteLine(parsed[1].ToLower()); } UL.TellClient("Слово ^2" + parsed[1] + " ^7успешно добавлено. ", player); return EventEat.EatGame; } if (3 <= parsed.Length) { bool first = true; string words = ""; using (StreamWriter sw = new StreamWriter(path, true)) { for (int i = 1; i < (int)parsed.Length; i++) { sw.WriteLine(parsed[i]); if (first) { words += parsed[i]; first = false; } else { words += "^7, ^2" + parsed[i]; } } } UL.TellClient("Слова ^2" + words + " ^7успешно добавлены.", player); return EventEat.EatGame; } if (!(parsed.Length == 2) || !(3 <= parsed.Length)) { UL.TellClient("^2Используйте: ^7!addbadword ^2| ^7!addbw ", player); return EventEat.EatGame; } return EventEat.EatGame; } if (Message.StartsWith("!addunbadword", StringComparison.InvariantCultureIgnoreCase) || Message.StartsWith("!addubw", StringComparison.InvariantCultureIgnoreCase)) { if (parsed.Length == 2) { using (StreamWriter sw = new StreamWriter(path2, true)) { sw.WriteLine(parsed[1].ToLower()); } UL.TellClient("Слово ^2" + parsed[1] + " ^7успешно добавлено. ", player); } if (3 <= parsed.Length) { bool first = true; string unwords = ""; using (StreamWriter sw = new StreamWriter(path, true)) { for (int i = 1; i < (int)parsed.Length; i++) { sw.WriteLine(parsed[i]); if (first) { unwords += parsed[i]; first = false; } else { unwords += "^7, ^2" + parsed[i]; } } } UL.TellClient("Слова ^2" + unwords + " ^7успешно добавлены.", player); return EventEat.EatGame; } if (!(parsed.Length == 2) || !(3 <= parsed.Length)) { UL.TellClient("^2Используйте: ^7!addunbadword ^2| ^7!addubw ", player); return EventEat.EatGame; } return EventEat.EatGame; } if (Message.ToLower().StartsWith("!block", StringComparison.InvariantCultureIgnoreCase) || Message.ToLower().StartsWith("!bl", StringComparison.InvariantCultureIgnoreCase)) { if (parsed.Length > 2) { Entity target = UL.GET.GetClient(parsed[1]); if (target != null) { if (IsImmune(target)) { UL.TellClient("Игрок ^1" + target.Name + "^7 имеет иммунитет.", player); return EventEat.EatGame; } else { string banTime = parsed[3]; bool isNumber = int.TryParse(banTime, out BanTime); if (!isNumber && banTime.ToLower() != "infinity") { UL.TellClient("^1Неверное значение. ^7Используйте: ^2!block ^7| ^2!bt ^7