diff --git a/extensions/src/ACRE2Core/updateSpeakingData.h b/extensions/src/ACRE2Core/updateSpeakingData.h index 6eedd0d16..72a055e82 100644 --- a/extensions/src/ACRE2Core/updateSpeakingData.h +++ b/extensions/src/ACRE2Core/updateSpeakingData.h @@ -30,6 +30,8 @@ RPC_FUNCTION(updateSpeakingData) { } } TRACE("SPEAKING DATA: %s", vMessage->getData()); + bool unmute = false; + CEngine::getInstance()->getSoundEngine()->getSoundMixer()->lock(); if (speaker) { LOCK(speaker); @@ -76,9 +78,7 @@ RPC_FUNCTION(updateSpeakingData) { // want. const int32_t count = vMessage->getParameterAsInt(3); speaker->setSpeakingType(acre::Speaking::radio); - if (CEngine::getInstance()->getClient()->getMuted(playerId) == acre::Result::ok) { - CEngine::getInstance()->getClient()->setMuted(playerId, false); - } + unmute = true; for (int32_t i = 0; i < count; ++i) { const int32_t channelId = i + 1; if (!speaker->channels[channelId]) { @@ -137,9 +137,7 @@ RPC_FUNCTION(updateSpeakingData) { } else { speaker->setSpeakingType(acre::Speaking::god); } - if (CEngine::getInstance()->getClient()->getMuted(playerId) == acre::Result::ok) { - CEngine::getInstance()->getClient()->setMuted(playerId, false); - } + unmute = true; if (speaker->channels[0]) { speaker->channels[0]->getEffectInsert(7)->setParam("volume", vMessage->getParameterAsFloat(3)); } @@ -149,6 +147,13 @@ RPC_FUNCTION(updateSpeakingData) { UNLOCK(speaker); } CEngine::getInstance()->getSoundEngine()->getSoundMixer()->unlock(); + + if (unmute) { + if (CEngine::getInstance()->getClient()->getMuted(playerId) == acre::Result::ok) { + CEngine::getInstance()->getClient()->setMuted(playerId, false); + } + } + return acre::Result::ok; } public: