Hallo
Ich wollte mal fragen ob es möglich ist,
eine Sirene(Martinshorn) von einem
Fahrzeug abzuspielen, welche nur Spieler in einem
bestimmten Radius des Fahrzeug's hören?
Wäre das umsetzbar? Wenn ja, wie?
Wäre euch sehr dankbar.
Liebe Grüße
Tobias
Hallo
Ich wollte mal fragen ob es möglich ist,
eine Sirene(Martinshorn) von einem
Fahrzeug abzuspielen, welche nur Spieler in einem
bestimmten Radius des Fahrzeug's hören?
Wäre das umsetzbar? Wenn ja, wie?
Wäre euch sehr dankbar.
Liebe Grüße
Tobias
http://wiki.sa-mp.com/wiki/PlayAudioStreamForPlayer
In Kombination mit einer for Schleife und einem Timer.
Ich gehe mal davon aus, dass es sich um kein normales Einsatzfahrzeug handelt, denn bei Einsatzfahrzeugen kann man das Martinshorn auch mit der Hupen-Taste einschalten.
Ja es ist möglich. Habe es noch nie gemacht, aber ich denke mal du definierst das Fahrzeug , und fragst ab das wenn der spieler in der nähe des fahrzeugs ist, und dann einfach
PlayAudioStreamForPlayer(playerid, "url");
Weiß nicht ob das 100% geht , denke aber schon
MFG
In Kombination mit einer While Schleife und einem Timer.
ou ou ou
Also das geht zwar nur der Ton wäre dann unsynchron
Weiß nicht ob das 100% geht , denke aber schon
Da sind viel mehr Parameter vonnöten, also würde Dein Beispiel nicht funktionieren.
@NicoWiss: Ja, das stimmt, der Timer müsste dann besonders hoch eingestellt sein, was sich aber wiederrum auf die Performance des Servers auswirken kann.
Schaut euch doch mal die Funktion an ..
http://wiki.sa-mp.com/wiki/PlayAudioStreamForPlayer
die liefert direkt die Funktion mit ...
Das heißt einfach einen Timer erstellen der sich alle 2-3 Sekunden updatet ..
Die Spieler Position neu abfragen & alle die in der Range sind den Sound abspielen
Sollte nicht wirklich serverlastig sein..
die liefert direkt die Funktion mit ...
Das heißt einfach einen Timer erstellen der sich alle 2-3 Sekunden updatet ..
Die Spieler Position neu abfragen & alle die in der Range sind den Sound abspielen
Sollte nicht wirklich serverlastig sein..
Bedeutet aber du musst den audiostream abbrechen bei jedem spieler da sich die position verändert, bzw alle koordianten zwischenspeichern undsoweiter nix für anfänger
Wofür Koordinaten zwischenspeichern ? ..
Bsp:
for(new i; i<MAX_PLAYERS; i++)
{
new Float:Pos[3];
GetPlayerPos(playerid,Pos[0],Pos[1],Pos[2]);
if(!IsPlayerInRangeOfPoint(i,10,Pos[0],Pos[1],Pos[2] && GetPVarInt(playerid,"Sound") == 1)return StopAudioStreamForPlayer(i);
SetPVarInt(i,"Sound",1);
return PlayAudioStreamForPlayer(i,"URL");
}
Sollte funktionieren
@lovelins12: Jetzt aber
for(new i; i<MAX_PLAYERS; i++)
{
new Float:Pos[3];
GetPlayerPos(playerid,Pos[0],Pos[1],Pos[2]);
if(!IsPlayerInRangeOfPoint(i,10,Pos[0],Pos[1],Pos[2] && GetPVarInt(playerid,"Sound") == 1)return StopAudioStreamForPlayer(i);
if(GetPVarInt(playerid,"Sound") == 0)return PlayAudioStreamForPlayer(i,"URL");
SetPVarInt(i,"Sound",1);
return 1;
}
Edit: lovelins hatte eben noch nen kleinen Denkfehler das der Stream ja dann immer wiederholt wird ..
Alles anzeigenWofür Koordinaten zwischenspeichern ? ..
Bsp:
for(new i; i<MAX_PLAYERS; i++)
{
new Float:Pos[3];
GetPlayerPos(playerid,Pos[0],Pos[1],Pos[2]);
if(!IsPlayerInRangeOfPoint(i,10,Pos[0],Pos[1],Pos[2] && GetPVarInt(playerid,"Sound") == 1)return StopAudioStreamForPlayer(i);
SetPVarInt(i,"Sound",1);
return PlayAudioStreamForPlayer(i,"URL");
}
Sollte funktionieren
Wie gehsagt deine Funktion ist unsynchron
@lovelins12: Jetzt aber
Und jetzt spielt er die Serene nur einmal ab
@NicoWiss: Jo das mag sein, aber so müsste man schon mal nicht schwachsinnige Koordinaten zwischenspeichern
.Kevin: (zu deinem Code)
Aber warum jedesmal die Position von Spieler in der Schleife abfragen?
Einmal abfragen reicht auch und return in einer Schleife? Nicht so gut
new Float:Pos[3];
GetPlayerPos(playerid, Pos[0], Pos[1], Pos[2]);
for(new player=0, maxplayers=GetMaxPlayers(); player<maxplayers; player++){
if(!IsPlayerConnected(player) || !IsPlayerInRangeOfPoint(player, 35, Pos[0], Pos[1], Pos[2])) continue;
PlayAudioStreamForPlayer(player,"URL");
}
Ist zwar unsynchron, da hat NicoWiss schon recht, aber ich denke mal, das ist kein großes Problem.
Muss ja nicht synchron sein mMn
und return in einer Schleife?
Da kann ich wieder was lernen
Wieso ist ein return in einer schleife denn nicht so gut ?
& Nein einmal abfragen reicht nicht.. der Spieler bewegt vllt das Fahrzeug ?
Da kann ich wieder was lernen
Wieso ist ein return in einer schleife denn nicht so gut ?
Weil das die komplette Schleife abbricht, denn return beendet ja die Funktion.
Dann würde deine Schleife nur durch den ersten Spieler laufen. (also ID 0)
In Schleifen nutzt man daher "continue". Natürlich kommt es darauf an, wofür die Schleife genutzt wird
& Nein einmal abfragen reicht nicht.. der Spieler bewegt vllt das Fahrzeug ?
Das ist natürlich richtig. Ich dachte eher daran, dass die Schleife so schnell durchgeht, dass der Spieler sich in der Zeit eh nicht groß wegbewegen kann,
daher ist es natürlich besser Funktionen in einer Schleife auszulassen, da sonst 500x die Position abgefragt wird, obwohl 1x auch reichen "kann".
& Nein einmal abfragen reicht nicht.. der Spieler bewegt vllt das Fahrzeug ?
son fahrzeug kommt nicht weit bis die shcleife durch ist nur so zur info
@NicoWiss: Das das Fahrzeug nicht weit kommt ist mir schon bewusst, deswegen sage ich ja das man das ganze auch nur alle 2-3 Sekunden
aufrufen sollte, kann man oben nachlesen.. Nur so zur Info
& Komm mir nicht das ich die Position oben in der schleife abfrage.. das war nur ein Beispiel.