The reason the only player that hears the music is the player that activates the addaction is because ADDACTION is a local command, meaning anything the action runs will only be localised on the machine it was run on.
What you want to do is possible, however you will need to have your addaction create the following
1) Variable A
This will define which music track should be played
Lets call it tx_track
variable type would be a "Number"
eg tx_track = 3
2) Variable B
This will activate a trigger, which will run on everyones client
variable type would be a "Boolean"
lets call it tx_MusicOn
The trigger would be:
a) Repeating
b) Condition: tx_MusicOn
c) On Activation: [tx_track] exec Playmusic.sqs"
Playmusic.sqsif(tx_Playing)then{hint "Music is already playing"; exit} else {tx_Playing = true}
;;;
;;;add code here to temporarily remove all the select music addactions
;;;
_label = _this select 0
goto "LABEL"
;;(this basically means goto tx_track)
#1
Playmusic "Music1"
~ (Number of seconds it takes to play the track)
;;;; wait length of time it takes music track to play
goto "END"
#2
Playmusic "Music2"
~ (Number of seconds it takes to play the track)
;;;; wait length of time it takes music track to play
goto "END"
#3
Playmusic "Music3"
~ (Number of seconds it takes to play the track)
;;;; wait length of time it takes music track to play
goto "END"
#END
;;;
;;;add code here to re-add all the select music addactions
;;;no point in allowing players to select another track while any music is currently playing
;;;
tx_Playing = false
tx_MusicOn = false
;; this allows the resetting of the trigger ready for the next music requestexit
;; tx_Playing is used to check if any music is already playing, if it is, then simply exit
--------------------------------------------------------------------------------------------------
I would use 2 levels of addactions
Level 1This would simply be a "Select Music" action
Selecting this would then run a script that would remove this action and in its place add an action for each music track that you wanted to offer
so it would be something very basically like the following
tx_Selection = Player addaction ["Select Music", "select.sqs"]
The select.sqs would
a) Removeaction tx_selection
and add actions
Play track 1
play track 2
play track 3 etc
it would then run a "timeout loop", lets say allowing the player 20 seconds to select a music track, if after 20 seconds, no track was chose (eg a boolean hadnt come true "tx_Playing", then the script would remove all the "Play Track" actions and reinstate the "Select Music" action
The play track actions would run a script, this script would define
tx_track and make tx_MusicOn = true
----------------------------------------------------------------------------------------------------
So basically, every player would start with an action in his menu
1)
Select MusicSelecting this would then create a list of (addactions) music that could be chosen
If the player didnt select a choice of music within 20 seconds, the individual selections (action list) would revert back to Select music
If the player did select a choice within the time limit, then all the actions would be removed, the boolean tx_MusicOn would activate the trigger
the trigger would run the "Playmusic.sqs" jumping to the label which had the same number as the tx_track value
Hope that helps and gives you some iudea of the overall design you should be trying to create
NB>>>> You will have to publicvariable tx_Track so that all the other players clients have the same value for tx_track when they start the playmusic.sqs
It would also be a good idea to publicvariable the tx_MusicOn at the same time, just to make sure all client triggers are activated
eg
{publicvariable _x} foreach ["tx_track",tx_MusicOn"]