/// <summary> /// Called when adding or removing an account squelch /// </summary> public void HandleActionModifyAccountSquelch(bool squelch, string playerName) { //Console.WriteLine($"{Player.Name}.HandleActionModifyAccountSquelch({squelch}, {playerName})"); if (string.IsNullOrWhiteSpace(playerName)) { return; } var player = PlayerManager.FindByName(playerName); if (player == null) { Player.Session.Network.EnqueueSend(new GameMessageSystemChat($"{playerName} not found.", ChatMessageType.Broadcast)); return; } if (player.Account.AccountId == Player.Account.AccountId) { Player.Session.Network.EnqueueSend(new GameMessageSystemChat("You can't squelch yourself!", ChatMessageType.Broadcast)); return; } var squelches = Player.Character.GetSquelches(Player.CharacterDatabaseLock); var existing = squelches.FirstOrDefault(i => i.SquelchAccountId == player.Account.AccountId); if (squelch) { if (existing != null) { Player.Session.Network.EnqueueSend(new GameMessageSystemChat($"{player.Name}'s account is already squelched.", ChatMessageType.Broadcast)); return; } // always all channels? Player.Character.AddOrUpdateSquelch(player.Guid.Full, player.Account.AccountId, (uint)SquelchMask.AllChannels, Player.CharacterDatabaseLock); Player.CharacterChangesDetected = true; Player.Session.Network.EnqueueSend(new GameMessageSystemChat($"{player.Name}'s account has been squelched.", ChatMessageType.Broadcast)); } else { if (existing == null) { Player.Session.Network.EnqueueSend(new GameMessageSystemChat($"{player.Name}'s account is not squelched.", ChatMessageType.Broadcast)); return; } Player.Character.TryRemoveSquelch(existing.SquelchCharacterId, player.Account.AccountId, out _, Player.CharacterDatabaseLock); Player.CharacterChangesDetected = true; Player.Session.Network.EnqueueSend(new GameMessageSystemChat($"{player.Name}'s account has been unsquelched.", ChatMessageType.Broadcast)); } UpdateSquelchDB(); SendSquelchDB(); }
/// <summary> /// Called when adding or removing a character squelch /// </summary> public void HandleActionModifyCharacterSquelch(bool squelch, uint playerGuid, string playerName, ChatMessageType messageType) { //Console.WriteLine($"{Player.Name}.HandleActionModifyCharacterSquelch({squelch}, {playerGuid:X8}, {playerName}, {messageType})"); if (messageType != ChatMessageType.AllChannels && !IsLegalChannel(messageType)) { Player.Session.Network.EnqueueSend(new GameMessageSystemChat($"{messageType} is not a legal squelch channel", ChatMessageType.Broadcast)); return; } IPlayer player; if (playerGuid != 0) { player = PlayerManager.FindByGuid(new ObjectGuid(playerGuid)); if (player == null) { Player.Session.Network.EnqueueSend(new GameMessageSystemChat("Couldn't find player to squelch.", ChatMessageType.Broadcast)); return; } } else { if (string.IsNullOrWhiteSpace(playerName)) { return; } player = PlayerManager.FindByName(playerName); if (player == null) { Player.Session.Network.EnqueueSend(new GameMessageSystemChat($"{playerName} not found.", ChatMessageType.Broadcast)); return; } } if (player.Guid == Player.Guid) { Player.Session.Network.EnqueueSend(new GameMessageSystemChat("You can't squelch yourself!", ChatMessageType.Broadcast)); return; } if (squelch) { SquelchCharacter(player, messageType); } else { UnsquelchCharacter(player, messageType); } UpdateSquelchDB(); SendSquelchDB(); }