Fahrzeugsirene per Stream?

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • 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

    █████████] 99%

  • 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

    Mit freundlichen Grüßen
    [color=#696969][i][b]Maxi
    [tabmenu]
    [tab='Signatur!']

    [tab='Mein Computer System']

    • Gehäuse Delux SH891 Midi-Tower (ATX) schwarz
    • Netzteil 650 Watt Corsair VS650
    • Festplatte 1000GB SATA III 7200upm
    • Mainboard AM3 Gigabyte GA-970A-UD3P (Chipsatz:AMD 970/SB950/ATX)
    • NVIDIA Geforce GTX 770 Gainward Phantom
    • 8192MB DDR3 Single Channel 1600MHz
    • Prozessor AM3+ (FX-Serie) AMD FX-8350 8x 4.0 GHz


    [tab='Meine Handys']

    • HTC ONE M8
    • Samsung S3 mini
    • Vll bald HTC ONE M7


    [tab='Mein Steam Account = 1']

  • 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 8)

  • @lovelins12: Jetzt aber 8)



    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 ..

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen

  • Wie gehsagt deine Funktion ist unsynchron :)

  • .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 :P


  • Da kann ich wieder was lernen :P


    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 ;)


  • 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".

  • @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.