azerothcore / azerothcore-wotlk

Complete Open Source and Modular solution for MMO
http://www.azerothcore.org
GNU Affero General Public License v3.0
6.23k stars 2.49k forks source link

Voice Chat #5063

Open ReynoldsCahoon opened 3 years ago

ReynoldsCahoon commented 3 years ago

CURRENT BEHAVIOUR:

Voice Chat (Added in Patch 2.2.0) support is currently missing.

EXPECTED BLIZZLIKE BEHAVIOUR:

Players should be able to create/join voice chat channels to communicate with other players. They should also have the ability to mute other players individually.

SOURCE:

Channels & Moderation Mute Players
image image
Old Voice Chat UI (Probably pre-WotLK) Video Demonstration
image IMAGE ALT TEXT

STEPS TO REPRODUCE THE PROBLEM:

  1. Connect to AzerothCore server.
  2. See that no visible voice options are available.

EXTRA NOTES:

TrinityCore discussion: References Ascent, which had a version of this running.

AC HASH/COMMIT:

d4b8defcd8e6971bdd558b1c360de9dcca9767b3

OPERATING SYSTEM:

Windows 10

MODULES:

None

CUSTOMIZATIONS:

None

ReynoldsCahoon commented 3 years ago

Beyond the expected Blizzlike behavior, it would be nice if this were extendable via the modular structure. An example module would be the addition of proximity voice, or possibly routing the voice communication to a third party server, such as Teamspeak or Mumble, to distribute voice chat traffic away from the server.

yuanf225 commented 3 years ago

Can be made into a team/team voice function, it will only take effect when joining a team/team, you can choose to turn on/mute

ReynoldsCahoon commented 3 years ago

Can be made into a team/team voice function, it will only take effect when joining a team/team, you can choose to turn on/mute

This sounds like module functionality, as the original client/server supported this in a very specific way.

yuanf225 commented 3 years ago

The text is cold, only warm words can play more emotionally :D

ReynoldsCahoon commented 3 years ago

Realized that the repo contains a VoiceChatHandler, but is possibly unused?

ReynoldsCahoon commented 3 years ago

In the TrinityCore discussion referenced in this issue, user @FALL1N1 references getting this working in some fashion in AzerothCore. https://github.com/TrinityCore/TrinityCore/issues/15057#issuecomment-383313037

After poking around this user's repositories, I believe the code that's being referenced may be here.

ReynoldsCahoon commented 3 years ago

Spoke with @FALL1N1 on Discord and he gave an example of how to enable the clientside interface:

you can test it by enabling the voice chat UI through CharacterHandler.cpp, more-specifically this line https://github.com/FALL1N1/HysteriaCore/blob/4ff15b9ed80f989b7a793637e357d928b432a75d/src/server/game/Handlers/CharacterHandler.cpp#L899

set it to '1' or 'true' within your core and the voice UI will appear, that way you can try to 'record' your voice and play it, you will see what I'm talking about :D

yuanf225 commented 2 years ago

hey guys Is anyone making this cool feature?

Winfidonarleyan commented 2 years ago

No one will do it.

Si1ker commented 2 years ago

www.discord.com 🐱

FALL1N1 commented 2 years ago

It's trash, better stick to Discord or TeamSpeak.

If you want it just for the cosmetics/visuals you can take a look at my repo. Voice quality is trash as the game is using old codec that cannot be changed unless you reverse the game and provide custom WoW.exe

Wowkasu commented 2 years ago

Yes, it is very interesting, of course it is not the primary function, but it is very entourage, and will add a lot of loyalty from the players.

WarlordXecc commented 2 years ago

If a system like this would extend from channels and be able to just be open world chat letting players speak to other players that's in a certain range of each other then I'll juicen up the bounty with another 500$.

heyitsbench commented 2 years ago

Would the packets for voice chat show up in a sniff?

Nyeriah commented 2 years ago

Voice chat was removed from the game. Iirc audio quality in 335 is awful too. There are plenty of reasons to look the other way honestly.

FALL1N1 commented 2 years ago

@benjymansy123

Would the packets for voice chat show up in a sniff?

They won't unless you are sniffing a server that has coded it, otherwise the server will return empty responses (if anything at all)

acidmanifesto commented 2 years ago

@benjymansy123

Would the packets for voice chat show up in a sniff?

They won't unless you are sniffing a server that has coded it, otherwise the server will return empty responses (if anything at all)

ymir wouldnt be able to sniff private servers but the other tools can but not really recommended. Reversing the client would be easier, which already happened and the opcodes have been obtained both server and client side and has been made available for a while. A few, not all, for example:

    SMSG_VOICE_SESSION_ROSTER_UPDATE                = 0x39E,
    SMSG_VOICE_SESSION_LEAVE                        = 0x39F,
    SMSG_VOICE_SESSION_ADJUST_PRIORITY              = 0x3A0,
    CMSG_VOICE_SET_TALKER_MUTED_REQUEST             = 0x3A1,
    SMSG_VOICE_SET_TALKER_MUTED                     = 0x3A2,
    CMSG_VOICE_SESSION_ENABLE                       = 0x3AF,
    SMSG_VOICE_SESSION_ENABLE                       = 0x3B0,
    SMSG_VOICE_PARENTAL_CONTROLS                    = 0x3B1,
    CMSG_CHANNEL_SILENCE_VOICE                      = 0x3CC,
    CMSG_CHANNEL_SILENCE_ALL                        = 0x3CD,
    CMSG_CHANNEL_UNSILENCE_VOICE                    = 0x3CE,
    CMSG_CHANNEL_UNSILENCE_ALL                      = 0x3CF,
    CMSG_SET_ACTIVE_VOICE_CHANNEL                   = 0x3D3,
    CMSG_GET_CHANNEL_MEMBER_COUNT                   = 0x3D4,
    SMSG_CHANNEL_MEMBER_COUNT                       = 0x3D5,
    CMSG_CHANNEL_VOICE_ON                           = 0x3D6,
    CMSG_CHANNEL_VOICE_OFF                          = 0x3D7,

Now the big challenge would be scripting it out. like any other opcode, we will have to address it in the opcode.cpp where we set its login status, packet processing, and session (world session most likely to keep it consistent) link for each of the numerous opcodes already. After that we would write it out as a void WorldSession::VoiceASLopcode(WorldPacket& /recvData/) or whatever.

The thing is, as nice of a feature this would be, alot of people requesting this feature, never actually used it back when the expansions was the current retail, or even played the expansion when it was retail back then. It was a very VERY low bit rate mono quailty. This was due to the limitation of the client at the time, with 8 to 16k mono variable.

This feature if it ever gets scripted in any modern wow emulator core, like it was in former ascent servers, would be more of a novelity then it is for utility.

Discord and Steam Chat offers free and better voice quailty. I agree with what @Nyeriah stated. There are plenty of reasons to look the other way honestly, or use other free alternative apps such as discord chat or steam chat variations.

Wowkasu commented 2 years ago

Please do not mention discord and steam, everyone is well aware of these ways. You're talking about human-to-human conversation, but that's not what's needed here, you need to hear a voice through your character from another character. It's not about quality, it's about hearing the voice from another character, just like you would hear it from Lady Silvana or Artos or Garosh. You need it to play the voice within the game, not to communicate with a friend or person. Do you understand the difference?

For example, you're walking through the game world... doing quests... and all of a sudden you hear a voice saying "help!..." "I'm dying...!" and you come because you hear another player's human voice through their character!!! it's very, very beautiful for the game!

FALL1N1 commented 2 years ago

Please do not mention discord and steam, everyone is well aware of these ways. You're talking about human-to-human conversation, but that's not what's needed here, you need to hear a voice through your character from another character. It's not about quality, it's about hearing the voice from another character, just like you would hear it from Lady Silvana or Artos or Garosh. You need it to play the voice within the game, not to communicate with a friend or person. Do you understand the difference?

For example, you're walking through the game world... doing quests... and all of a sudden you hear a voice saying "help!..." "I'm dying...!" and you come because you hear another player's human voice through their character!!! it's very, very beautiful for the game!

I'm afraid that's not how Voice Chat works and worked back in the day, it's not an open world voice chat like in other games, but limited to Party, Raid and World channel(s).

acidmanifesto commented 2 years ago

Please do not mention discord and steam, everyone is well aware of these ways. You're talking about human-to-human conversation, but that's not what's needed here, you need to hear a voice through your character from another character. It's not about quality, it's about hearing the voice from another character, just like you would hear it from Lady Silvana or Artos or Garosh. You need it to play the voice within the game, not to communicate with a friend or person. Do you understand the difference?

For example, you're walking through the game world... doing quests... and all of a sudden you hear a voice saying "help!..." "I'm dying...!" and you come because you hear another player's human voice through their character!!! it's very, very beautiful for the game!

You are exceeding wrong with how the voice chat work back when wotlk was retail. It did not work like that at all.

Wowkasu commented 2 years ago

You are exceeding wrong with how the voice chat work back when wotlk was retail. It did not work like that at all.

I didn't write about how it was in the past, I wrote about what it was for in the long run.

Nyeriah commented 2 years ago

Didn't mean any disrespect to those who want this as a roleplaying feature or novelty item. It's just that the work required to make it work and the usefulness to the average user don't really make it an appealing issue to be worked on, reason why nobody took interest into it over 10 years of emulation, except the Acermu guys mentioned in that discussion. About proximity chat in the way the user above described, one has to ponder how would it feel to be in a crowded place (e.g stormwind city, or dalaran) while everyone around them screamed in their 2008s walk-talkies.

Rastrian commented 1 month ago

https://github.com/celguar/voicechat-server

theres this implementation for ascent that can be ported to AC

heyitsbench commented 1 month ago

theres this implementation for ascent that can be ported to AC

That repo's been updated for use with the TBC branch of CMaNGOS (PR pending), and includes no server code.

FALL1N1 commented 1 month ago

theres this implementation for ascent that can be ported to AC

That repo's been updated for use with the TBC branch of CMaNGOS (PR pending), and includes no server code.

There are no opcode structure changes between TBC and WoTLK (at least not any major ones) therefore it should work out of the box.

https://github.com/celguar/voicechat-server is the new executable you need to "slap" into "src/server/apps" so it can build alongside with the world/auth servers (unless you want to separate it to another vps/dedi server if bandwidth is a problem).. and https://github.com/cmangos/mangos-tbc/pull/668/files is the "core" part, which handles the disabled (at the moment) opcodes alongside with their handlers.

celguar commented 1 month ago

Yes I tested same code with cmangos wotlk + 3.3.5 and it worked (video linked in cmangos PR is recorded on 3.3.5)

ReynoldsCahoon commented 1 month ago

I'm afraid that's not how Voice Chat works and worked back in the day, it's not an open world voice chat like in other games, but limited to Party, Raid and World channel(s).

Correct. @Foereaper and I have created a proof of concept using the open source software Mumble that allows for proximity voice chat. This unfortunately requires an external client, but works.

If the voice packets could be manipulated to match the format expected by Mumble, you might be able to utilize something like Mumble's server software without requiring players to use third party voice client software. The benefits being obvious (nothing extra required to install, voice settings/keybinds manageable from the UI, muting and disabling of voice within the client itself).

I acknowledge this is beyond the scope of this issue, but having the server properly handle these packets in a default way gets custom functionality like this one step closer to existing.