internal override void Chat(string Message, bool Shout) { if (Client != null) { if (Client.GetHabbo().Rank < 5) { if (GetRoom().RoomMuted) return; } } Unidle(); Users.Habbo clientUser = GetClient().GetHabbo(); if (clientUser.Muted) { GetClient().SendNotif("You are muted."); return; } if (Message.StartsWith(":")) { string[] parsedCommand = Message.Split(' '); if (ChatCommandRegister.IsChatCommand(parsedCommand[0].ToLower().Substring(1))) { try { ChatCommandHandler handler = new ChatCommandHandler(Message.Split(' '), Client); if (handler.WasExecuted()) { //Logging.LogMessage(string.Format("User {0} issued command {1}", GetUsername(), Message)); if (Client.GetHabbo().Rank > 5) { FirewindEnvironment.GetGame().GetModerationTool().LogStaffEntry(Client.GetHabbo().Username, string.Empty, "Chat command", string.Format("Issued chat command {0}", Message)); } return; } } catch (Exception x) { Logging.LogException("In-game command error: " + x.ToString()); } } } uint rank = 1; Message = LanguageLocale.FilterSwearwords(Message); if (Client != null && Client.GetHabbo() != null) rank = Client.GetHabbo().Rank; TimeSpan SinceLastMessage = DateTime.Now - clientUser.spamFloodTime; if (SinceLastMessage.TotalSeconds > clientUser.spamProtectionTime && clientUser.spamProtectionBol == true) { FloodCount = 0; clientUser.spamProtectionBol = false; clientUser.spamProtectionAbuse = 0; } else { if (SinceLastMessage.TotalSeconds > 4) FloodCount = 0; } if (SinceLastMessage.TotalSeconds < clientUser.spamProtectionTime && clientUser.spamProtectionBol == true) { ServerMessage Packet = new ServerMessage(Outgoing.FloodFilter); int timeToWait = clientUser.spamProtectionTime - SinceLastMessage.Seconds; Packet.AppendInt32(timeToWait); //Blocked for X sec GetClient().SendMessage(Packet); if (FirewindEnvironment.spamBans == true) { clientUser.spamProtectionAbuse++; GameClient toBan; toBan = FirewindEnvironment.GetGame().GetClientManager().GetClientByUsername(Client.GetHabbo().Username); if (clientUser.spamProtectionAbuse >= FirewindEnvironment.spamBans_limit) { FirewindEnvironment.GetGame().GetBanManager().BanUser(toBan, "SPAM*ABUSE", 800, LanguageLocale.GetValue("flood.banmessage"), false); } else { toBan.SendNotif(LanguageLocale.GetValue("flood.pleasewait").Replace("%secs%", Convert.ToString(timeToWait))); } } return; } if (SinceLastMessage.TotalSeconds < 4 && FloodCount > 5 && rank < 5) { ServerMessage Packet = new ServerMessage(Outgoing.FloodFilter); clientUser.spamProtectionCount += 1; if (clientUser.spamProtectionCount % 2 == 0) { clientUser.spamProtectionTime = (10 * clientUser.spamProtectionCount); } else { clientUser.spamProtectionTime = 10 * (clientUser.spamProtectionCount - 1); } clientUser.spamProtectionBol = true; Packet.AppendInt32(clientUser.spamProtectionTime - SinceLastMessage.Seconds); //Blocked for X sec GetClient().SendMessage(Packet); return; } clientUser.spamFloodTime = DateTime.Now; FloodCount++; FirewindEnvironment.GetGame().GetQuestManager().ProgressUserQuest(Client, HabboHotel.Quests.QuestType.SOCIAL_CHAT); GetClient().GetHabbo().GetChatMessageManager().AddMessage(ChatMessageFactory.CreateMessage(Message, this.GetClient(), this.GetRoom())); base.Chat(Message, Shout); }