Alles anzeigenDie Namen über den Köpfen der Spieler werden durch Altis_Life.Altis/core/functions/fn_playerTags.sqf erzeugt. Um ein Mikrofon-icon vor den Text zu machen, wird <img image='\A3\ui_f\data\igui\rscingameui\rscdisplayvoicechat\microphone_ca.paa'></img> vor den Namen geschrieben.
Das Schwierige ist jetzt, herauszufinden ob ein Spieler spricht oder nicht. Es gibt zwar den Befehl getPlayerChannel, der das kann, aber ausgerechnet den "Direct"-Channel unterstützt dieser Bfehl nicht.
Die (gezwungene) Alternative:
Soetwas ähnliches hat Just4FunGaming auch getan:
Zuerst wurde ein Eventhandler für keyDown/keyUp angelegt, der mit player setVariable["mic", true/false, true] für jeden anderen PC abfragbar macht, ob ein Spieler gerade redet oder nicht. Das ganze wird hier ähnlich wie bei Killzonekid anhand der Icons festgemacht (!(isNull findDisplay 55) && { !(isNull findDisplay 63) }).
C: https://github.com/kupferkarpfen/kk-altis-life/blob/master/Scripts/Client/functions/fn_noside.sqf Alles anzeigen// Written by Kupferkarpfen // License: CC BY-NC-SA 4.0 // Anti-Side-Talking Script // Inspired by http://www.armaholic.com/page.php?id=28897 private _fncCheckVoice = { if( !(isNull findDisplay 55) && { !(isNull findDisplay 63) } ) then { // User is speaking, check channel... if( !(currentChannel in [3, 4, 5]) ) then { titleCut [" BITTE NICHT IM SIDECHAT REDEN ", "BLACK IN", 15]; // Talking side/globally/command, switch to direct: setCurrentChannel 5; }; if( currentChannel == 5 && { !(player getVariable["mic", false]) } ) then { player setVariable["mic", true, true]; [] spawn { waitUntil { sleep 0.5; isNull (findDisplay 55) || isNull (findDisplay 63) }; player setVariable["mic", false, true]; }; }; }; false }; waitUntil { sleep 1; !(isNull (findDisplay 46)) }; (findDisplay 46) displayAddEventHandler ["KeyDown", _fncCheckVoice]; (findDisplay 46) displayAddEventHandler ["KeyUp", _fncCheckVoice];
Dann kann schonmal jeder Spieler für jeden anderen Spieler abfragen, ob er/sie gerade redet.
if(_targetPlayer getVariable ["mic",false])then{ /* _targetPlayer redet gerade */ };
Wenn X also redet, wird nur noch das Symbol vor den Namen geschrieben:
C: https://github.com/kupferkarpfen/kk-altis-life/blob/master/Scripts/Client/functions/fn_playerTags.sqfif( _unit getVariable ["mic", false] ) then { _text = format["<img image='\A3\ui_f\data\igui\rscingameui\rscdisplayvoicechat\microphone_ca.paa'></img> %1", _text]; };
Und siehe da, du hast den Mikrofonstatus in den Nametags.
MfG Stig
Holy... vielen Dank!