diff --git a/LuaMenu/images/mute.png b/LuaMenu/images/mute.png new file mode 100644 index 000000000..755b7bc16 Binary files /dev/null and b/LuaMenu/images/mute.png differ diff --git a/LuaMenu/widgets/api_user_handler.lua b/LuaMenu/widgets/api_user_handler.lua index 0e0bf3d4a..c15528e7a 100644 --- a/LuaMenu/widgets/api_user_handler.lua +++ b/LuaMenu/widgets/api_user_handler.lua @@ -89,6 +89,8 @@ local IMAGE_ONLINE = IMAGE_DIR .. "online.png" local IMAGE_OFFLINE = IMAGE_DIR .. "offline.png" local IMAGE_BOSS = IMAGE_DIR .. "boss-icon.png" local IMAGE_RUNNING_BATTLE = IMAGE_DIR .. "runningBattle.png" +local IMAGE_MUTED = IMAGE_DIR .. "mute.png" + local IMAGE_CLAN_PATH = "LuaUI/Configs/Clans/" local RANK_DIR = LUA_DIRNAME .. "configs/gameConfig/zk/rankImages/" @@ -290,12 +292,17 @@ end local function GetUserStatusImages(userName, isInBattle, userControl) local userInfo = userControl.replayUserInfo or userControl.lobby:GetUser(userName) or {} + local battleStatus = userControl.lobby:GetUserBattleStatus(userName) or {} local images = {} if userInfo.pendingPartyInvite and not userControl.hideStatusInvite then images[#images + 1] = IMAGE_PARTY_INVITE end + if isInBattle and battleStatus.isMuted then + images[#images + 1] = IMAGE_MUTED + end + if isInBattle and userControl.isBoss then images[#images + 1] = IMAGE_BOSS end @@ -614,7 +621,10 @@ local function UpdateUserBattleStatus(listener, userName, battleStatusDiff) local bs = userControls.lobby:GetUserBattleStatus(userName) or {} userControls.isPlaying = bs.isSpectator == false userControls.isBoss = bs.isBoss or false - + userControls.isMuted = bs.isMuted or false + + UpdateUserActivity(_, userName, {}) + local offset = 0 if userControls.tbQueuePos then userControls.isInQueue = bs.queuePos and bs.queuePos > 0 or false @@ -889,6 +899,7 @@ local function GetUserControls(userName, opts) userControls.isPlaying = bs.isSpectator == false userControls.isInQueue = bs.queuePos and bs.queuePos > 0 or false userControls.isBoss = bs.isBoss or false + userControls.isMuted = bs.isMuted or false if reinitialize then userControls.mainControl:ClearChildren() diff --git a/LuaMenu/widgets/chobby/components/configuration.lua b/LuaMenu/widgets/chobby/components/configuration.lua index 9b7b5995c..39b04475f 100644 --- a/LuaMenu/widgets/chobby/components/configuration.lua +++ b/LuaMenu/widgets/chobby/components/configuration.lua @@ -385,6 +385,7 @@ function Configuration:init() balanceMode = true, preset = true, boss = true, + mutes = true, } -- SAIDBATTLEEX Prefixes self.BTLEX_JOINQUEUE = "You are now in the join-queue at position" diff --git a/libs/liblobby/lobby/lobby.lua b/libs/liblobby/lobby/lobby.lua index 32122f091..6784e2f29 100644 --- a/libs/liblobby/lobby/lobby.lua +++ b/libs/liblobby/lobby/lobby.lua @@ -1558,6 +1558,21 @@ function Lobby:_OnSaidBattleEx(userName, message, sayTime) end end + if battleInfo.mutes ~= nil then + local battleMutes = {} + for mutedUserName in string.gmatch(battleInfo.mutes, "([^,]+)") do + battleMutes[mutedUserName] = true + end + + local battleUsers = self.battles[battleID].users + for _, battleUserName in pairs(battleUsers) do + local battleUserIsMuted = battleMutes[battleUserName] or false + if self.userBattleStatus[battleUserName] and self.userBattleStatus[battleUserName].isMuted ~= battleUserIsMuted then + self:_OnUpdateUserBattleStatus(battleUserName, {isMuted = battleUserIsMuted}) + end + end + end + end -- 2023-07-04 FB: For now: proceed with CallListeners of SaidBattleEx, because gui_battle_room has its own parsing of barmanager message -- return