Ok so here is one possible way of doing it in ScriptCards: !script {{
--/|CONFIGURATION VARIABLES
--&GibberishTableName|gibberishText
--&reentrySeparator|%%
--#title|Whisper in Language
--#whisper|gm
--#reentrant|Whisper[&SendingPlayerID]
--/|Get PC tokens
--/|Currently this uses the PC tokens on the current page with the player ribbon
--/|PC tokens means tokens linked to a character and that character is controlled by a player
--~|array;pagetokens;PCArray;[*P:id];pc
--/|Throw an error if no PC tokens are found
--?[@PCArray(length)] -eq 0|>LogMessage;fatal;No PC Tokens Found;ERROR;No PC tokens found on page [*P:name]
--~|array;define;LangArray
--~|hash;define;LangHash
--%tid|foreach;PCArray
--~|array;fullrepeatingsection;_ProfArr;[*[&tid]:t-represents];repeating_proficiencies;prof_type:name;:
--%_Prof|foreach;_ProfArr
--?"[&_Prof]" -ninc "language:"|%
-->libArray_Push|LangArray;[&_Prof(after,:)]
-->libHash_Push|LangHash;[&_Prof(after,:)];[*[&tid]:character_name]
--%|
--%|
--&RQ|? --&RQ|+{
--&msg|
--%lang|foreach;LangArray
--&msg|+ [rbutton][&lang]::WhisperInLanguage;[&RQ]Enter message for [&lang]}[&reentrySeparator][&lang][/rbutton]
--%|
--+|[c][&msg][/c]
--:Done|
--X|
--:WhisperInLanguage|MessageTextFromRollQuery;Language
--~|array;define;UnspokenArray
--&msgText|[&reentryval(split,[&reentrySeparator],0)]
--&language|[&reentryval(split,[&reentrySeparator],1)]
--#title|Message in [&language]
--#whisper|gm,[:LangHash("[&language]")]
--+|[&msgText]
--%_wilTID|foreach;PCArray
--?"[:LangHash("[&language]")]" -ninc "[*[&_wilTID]:character_name]"|>libArray_Push;UnspokenArray;[*[&_wilTID]:character_name]
--%|
--?[@UnspokenArray(length)] -eq 0|ENDWHISPER
--~UnspokenList|array;stringify;UnspokenArray;,
--*|Send Gibberish to remaining players [&UnspokenList] [rbutton]Send Gibberish::SendGibberish;[&UnspokenList][/rbutton]
--:ENDWHISPER|
--^Done|
--:SendGibberish|
--#title|Message in ?
--#whisper|gm,[&reentryval]
--=gibberish|[T#[&GibberishTableName]]
--+|[$gibberish.tableEntryText]
--^Done|
--:LogMessage|MessageLevel;EmoteText;MessageTag;MessageContent
--#emoteText|[%2%]
--+[%3%]|[%4%]
--?"[%1%]" -eq "fatal"|Done
--<|
--/|Will check if the entry is already present
--/|This will avoid duplicate entries from the path functions
--:libArray_Push|ArrayName;StringToPush;AllowDuplicatesBoolean(optional,default:0)
--?[%3%] -eq 1|_lapPUSH
--~_lapArrChk|array;indexof;[%1%];[%2%]
--?"[&_lapArrChk]" -ne "ArrayError"|<
--:_lapPUSH|
--~|array;add;[%1%];[%2%]
--<|
--:libHash_Push|HashName;Key;Value
--?"[:[%1%]("[%2%]")]X" -ne "X" -and "[:[%1%]("[%2%]")]" -ne "undefined"|&_lhpNewValue;[:[%1%]("[%2%]")],[%3%]|&_lhpNewValue;[%3%]
--h:[%1%]("[%2%]")|[&_lhpNewValue]
--<|
}} For the setup, you set the variable at the top of the ScriptCard `--&GibberishTableName|` to the name of your rollable table, currently the name in my testing was gibberishText. This does assume that the currently active page, ie the one with the player ribbon, has your player's tokens on it and the tokens are setup so they are linked to a character and that character has a player set in the controlledby field. The Scriptcard will grab all the PC tokens setup that way and go through them to get a list of all the languages spoken and whisper it to the GM, presumably you: When you click on one of the language buttons, it will pop up a roll query textbox to input your message: Note that there is a variable at the top of the Scriptcard named `--&reentrySeparator|` with a current value of %%. This is used to separate the message you enter from the language you chose. That means your message cannot contain the sequence %%. If for some reason you want to include %% in your messages, change that variable to some sequence you won't use. When you enter your message it will then whisper to the players that speak that language: Right now the script also includes the GM in the whisper of these messages, that can be changed by removing gm from --#whisper lines in the WhisperInLanguage and the SendGibberish procedures. Due to some limitations in how ScriptCards composes messages, if there are players that do not speak the language, a whisper to the GM will appear with a button to send gibberish message to the remaining players. Click the Send Gibberish button and the Scriptcard will roll on the table set in GibberishTableName and then whisper to the gm and remaining players a message like: Hopefully that is helpful to you. Let me know if you have any questions about this.