Boombox Streaming

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
  • Undzwar möchte ich ein Neues System einbauen für Premium Spieler.
    Dies ist wenn sie /pboombox machen das sie dann eine Stream URL eingeben müssen.
    Wenn sie das Gemacht habe wird eine Kleine Musikbox gespawnt und darüber lauft der Stream und man kann es In Game hören.

    Einmal editiert, zuletzt von Trooper[Y] () aus folgendem Grund: Unzureichender Threadtitel

  • Hallo,


    Ich habe mich mal kurz hingesetzt und dir was gecodet. Info ( Ich habe es noch nicht getestet.)


    Oben im Script unter Incudes:


    #define DIALOG_RadioBox 344


    ocmd:pboombox(playerid)
    {
    // Hier musst du halt noch abfragen ob der User Premium hat oder nicht.
    ShowPlayerDialog(playerid,DIALOG_RadioBox,DIALOG_STYLE_INPUT,"Radio","Bitte gebe einen Link ein um\nden Radiosender abzuspielen:","Okay","Abbrechen");
    return 1;
    }


    Das noch unter OnDialogResponse:


    if(dialogid==DIALOG_RadioBox)
    {
    new string[128],Float:x,Float:y,Float:z;
    if(!response)return 1;
    PlayAudioStreamForPlayer(playerid,strval(inputtext));
    SendClientMessage(playerid,-1,"Du hast folgenden Link eingegeben:");
    format(string,sizeof(string),"%s",strval(inputtext));
    SendClientMessage(playerid,-1,string);
    GetPlayerPos(playerid,x,y,z);
    CreateObject(1841,x,y,z,0.0,0.0,0.0);
    return 1;
    }


    Mfg :thumbup:


    Mit freundlichen Grüßen
    German_ScripterHD


  • strval formiert den String in einer Zahl um, daher reicht nur inputtext. ;)


    @ Mencet
    Danke, habe es selber übersehen.


    Probier es mal so ;)


    if(dialogid==DIALOG_RadioBox)
    {
    new string[128],Float:x,Float:y,Float:z;
    if(response)
    {
    if(strlen(inputtext)>8)
    {
    PlayAudioStreamForPlayer(playerid,inputtext);
    SendClientMessage(playerid,-1,"Du hast folgenden Link eingegen:");
    format(string,sizeof(string),"%s",inputtext);
    SendClientMessage(playerid,-1,string);
    GetPlayerPos(playerid,x,y,z);
    CreateObject(1841,x,y,z,0.0,0.0,0.0);
    }
    else
    {
    SendClientMessage(playerid,-1,"Fehler! (Ungültiger Link)");
    }
    }
    return 1;
    }


    Mfg :thumbup:


    Mit freundlichen Grüßen
    German_ScripterHD

  • Beitrag von SLaYz ()

    Dieser Beitrag wurde gelöscht, Informationen über den Löschvorgang sind nicht verfügbar.
  • Beitrag von Smokey. ()

    Dieser Beitrag wurde gelöscht, Informationen über den Löschvorgang sind nicht verfügbar.

  • Ich habs jetzt mal auf die Art gemacht.
    Aber es Kommt kein Object und es wird auch keine Musik gestreamt.

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Soo, es ist nicht Perfekt und nicht zu 100% komplett Getestet, es sollte aber so ohne Probleme gehen.


    #include <a_samp>
    #include <streamer>
    #include <ocmd>



    /**
    * Enum der Dialoge
    *
    * DLG_MusikBox | Definiertes Dialog für die MusikBox um eine zu Erstellen
    * DLG_MusikBox_HAS_DELETE | Definiertes Dialog für das Löschen der MusikBox falls eine Vorhanden ist
    * DGL_MusikBox_DELETE | Definiertes Dialog für das Löschen der MusikBox falls eine Vorhanden ist
    * DGL_Info | Definiertes Dialog um eine Information an den Spieler zu geben
    **/
    enum{
    DLG_MusikBox = 1,
    DLG_MusikBox_HAS_DELETE,
    DLG_MusikBox_DELETE,
    DLG_Info,
    DLG_PWREQ,
    }


    /**
    * Enum für die MusikBoxen
    *
    * MB_Created | Prüft ob die MusikBox erstellt ist oder nicht | true/false
    * MB_URL | StreamURL der MusikBox (StreamURL)
    * MB_Pos | Position der MusikBox (X, Y, Z)
    * MB_AreaID | ID der Arena
    * MB_CadMdl | Erstelltes Objekt der MusikBox
    * MB_Label | Label der MusikBox
    **/
    enum MusikBoxen {
    bool:MB_Created = false,
    MB_URL[120],
    Float:MB_Pos[3],
    MB_AreaID,
    MB_CadMdl,
    Text3D:MB_Label[50],
    }
    new MusikBox[MAX_PLAYERS][MusikBoxen];



    /**
    * Befehl um eine MusikBox zu Erstellen
    **/
    ocmd:cmb(playerid, params[])
    {
    /**
    * Prüfen ob Spieler Premium hat
    */
    if(!SpielerInfo[playerid][HasPremium]) return SendClientMessage(playerid, -1, "Du hast kein Premium, und kannst keine MusikBox erstellen!");
    /**
    * Prüfen ob der Spieler eine MusikBox erstellt hat oder nicht | Ausgabe eines Dialoges mit der Frage auf Entfernung der MusikBox
    **/
    if(MusikBox[playerid][MB_Created]) return ShowPlayerDialog(playerid, DLG_MusikBox_HAS_DELETE, DIALOG_STYLE_MSGBOX, "Ihre MusikBox", "Sie haben bereits eine Musikbox, wollen Sie die Musikbox entfernen?", "Entfernen", "Ausblenden");
    /**
    * Sollte der Spieler keine MusikBox haben, und die Schleife ist nicht am Ende, wird der Durchlauf abgebrochen
    **/
    else if(!MusikBox[playerid][MB_Created]) return ShowPlayerDialog(playerid, DLG_MusikBox, DIALOG_STYLE_INPUT, "Ihre MusikBox", "Bitte geben Sie die URL an, die die MusikBox abspielen soll", "Erstellen", "Ausblenden");
    return 1;
    }


    public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
    {
    switch(dialogid)
    {
    case DLG_MusikBox:
    {
    if(!response) return 1;
    if(response)
    {
    /**
    * Der Musikbox die Position des Spielers geben
    **/
    GetPlayerPos(playerid, MusikBox[playerid][MB_Pos][0], MusikBox[playerid][MB_Pos][1], MusikBox[playerid][MB_Pos][2]);

    /**
    * Der MusikBox die URL zuweisen, die nachher Gestreamt wird
    **/
    format(MusikBox[playerid][MB_URL], 120, "%s", inputtext);
    /**
    * MusikBoxLabel erstellen
    **/
    new Label[50];
    format(Label, 50, "MusikBox von %s", returnName(playerid));
    MusikBox[playerid][MB_Label] = CreateDynamic3DTextLabel(Label, 0xE46343FF, MusikBox[playerid][MB_Pos][0], MusikBox[playerid][MB_Pos][1], MusikBox[playerid][MB_Pos][2], 50.0);
    /**
    * Spieler ein Dialog ausgeben, das er eine MusikBox erstellt hat
    **/
    ShowPlayerDialog(playerid, DLG_Info, DIALOG_STYLE_MSGBOX, "Ihre MusikBox", "Sie haben Erfolgreich eine MusikBox erstellt.", "Ausblenden", "");
    /**
    * Erstellen der MusikBox
    **/
    MusikBox[playerid][MB_CadMdl] = CreateDynamicObject(2226, MusikBox[playerid][MB_Pos][0], MusikBox[playerid][MB_Pos][1], MusikBox[playerid][MB_Pos][2]-1, 0, 0 , 0);
    AttachDynamicAreaToPlayer(MusikBox[playerid][MB_CadMdl], playerid);
    /**
    * Erstellen Der Arena, wenn Spieler diesen Bereich betreten wird der Stream abgespielt, verlässt Er ihn wird er Gestoppt
    **/
    MusikBox[playerid][MB_AreaID] = CreateDynamicCircle(MusikBox[playerid][MB_Pos][0], MusikBox[playerid][MB_Pos][1], 20.0);
    /**
    * Variabele setzen, das die MusikBox erstellt wurde
    **/
    MusikBox[playerid][MB_Created] = true;
    }
    }
    case DLG_MusikBox_HAS_DELETE:
    {
    if(!response) return 1;
    /**
    * Sollte der Spieler die MusikBox löschen wollen, wird Sie nun gelöscht
    **/
    if(response)
    {
    /**
    * URL der MusikBox resetten
    **/
    format(MusikBox[playerid][MB_URL], 120, "%s", "");
    /**
    * Variabele resetten das die MusikBox nicht mehr Erstellt ist
    **/
    MusikBox[playerid][MB_Created] = false;
    /**
    * MusikBox Label entfernen
    **/
    DestroyDynamic3DTextLabel(MusikBox[playerid][MB_Label]);
    /**
    * Area der MusikBox entfernen
    **/
    DestroyDynamicArea(MusikBox[playerid][MB_AreaID]);
    /**
    * Entfernen des MusikBox Objektes
    **/
    DestroyDynamicObject(MusikBox[playerid][MB_CadMdl]);
    /**
    * Nachricht an den Spieler ausgeben, das die MusikBox entfernt wurde
    **/
    ShowPlayerDialog(playerid, DLG_Info, DIALOG_STYLE_MSGBOX, "Ihre MusikBox", "Sie haben Erfolgreich eine MusikBox entfernt.", "Ausblenden", "");
    /**
    * Schleife für jeden Spieler durchgehen
    **/
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    /**
    * Prüfen ob ein Spieler in der Area ist
    **/
    if(IsPlayerInRangeOfPoint(playerid, 50.0, MusikBox[playerid][MB_Pos][0], MusikBox[playerid][MB_Pos][1], MusikBox[playerid][MB_Pos][2]))
    {
    /**
    * AudioStram für den Spieler stoppen, wenn er in der Area ist
    **/
    StopAudioStreamForPlayer(i);
    }
    }
    /**
    * Position der MusikBox resetten
    **/
    MusikBox[playerid][MB_Pos][0] = 0.0;
    MusikBox[playerid][MB_Pos][1] = 0.0;
    MusikBox[playerid][MB_Pos][2] = 0.0;
    }
    }
    }
    return 1;
    }


    public OnPlayerDisconnect(playerid, reason)
    {
    if(MusikBox[playerid][MB_Created])
    {
    /**
    * Position der MusikBox resetten
    **/
    MusikBox[playerid][MB_Pos][0] = 0.0;
    MusikBox[playerid][MB_Pos][1] = 0.0;
    MusikBox[playerid][MB_Pos][2] = 0.0;
    /**
    * URL der MusikBox resetten
    **/
    format(MusikBox[playerid][MB_URL], 120, "%s", "");
    /**
    * Variabele resetten das die MusikBox nicht mehr Erstellt ist
    **/
    MusikBox[playerid][MB_Created] = false;
    /**
    * MusikBox Label entfernen
    **/
    DestroyDynamic3DTextLabel(MusikBox[playerid][MB_Label]);
    /**
    * Area der MusikBox entfernen
    **/
    DestroyDynamicArea(MusikBox[playerid][MB_AreaID]);
    /**
    * Entfernen des MusikBox Objektes
    **/
    DestroyDynamicObject(MusikBox[playerid][MB_CadMdl]);
    /**
    * Nachricht an den Spieler ausgeben, das die MusikBox entfernt wurde
    **/
    ShowPlayerDialog(playerid, DLG_Info, DIALOG_STYLE_MSGBOX, "Ihre MusikBox", "Sie haben Erfolgreich eine MusikBox entfernt.", "Ausblenden", "");
    /**
    * Schleife für jeden Spieler durchgehen
    **/
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    StopAudioStreamForPlayer(i);
    }
    }
    return 1;
    }


    public OnPlayerEnterDynamicArea(playerid, areaid)
    {
    /**
    * Schleife durch alle MusikBoxen machen
    **/
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    /**
    * Prüfen ob der Spieler in der richtigen Area ist, wenn ja wird der AudioStream gestartet
    **/
    if(MusikBox[i][MB_AreaID] == areaid && MusikBox[i][MB_Created])
    {
    PlayAudioStreamForPlayer(playerid,MusikBox[i][MB_URL]);
    break;
    }
    }
    return 1;
    }


    public OnPlayerLeaveDynamicArea(playerid, areaid)
    {
    /**
    * Schleife durch alle MusikBoxen machen
    **/
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    /**
    * Prüfen ob der Spieler die Area verlassen hat, wenn ja wird der AudioStream gestoppt
    **/
    if(MusikBox[i][MB_AreaID] == areaid && MusikBox[i][MB_Created])
    {
    StopAudioStreamForPlayer(playerid);
    }
    break;
    }
    return 1;
    }





    returnName(playerid)
    {
    new name[24];
    GetPlayerName(playerid, name, 24);
    return name;
    }

  • /e Text


    Jetzt bekomme ich nur noch 2 Fehler.



    error 040: duplicate "case" label (value 1)
    error 040: duplicate "case" label (value 2)


    case DLG_MusikBox: // Hier 1 Fehler
    case DLG_MusikBox_HAS_DELETE: //Hier 2 Fehler.


    SLaYz:

    Einmal editiert, zuletzt von Smokey. ()

  • Du hast im Script deine Dialoge definiert z.b. Mit #define dialog_login 5, such es und füge die beiden DLG... Dort hinzu, die nummern dürfen nicht gleich sein



    Jetzt habe ich nur noch ein fehler



    enum{
    DLG_MusikBox = 1, //Hier ist der fehler.
    DLG_MusikBox_HAS_DELETE,
    DLG_MusikBox_DELETE,
    DLG_Info,
    DLG_PWREQ,
    }


    Hier das Error.
    error 001: expected token: "-identifier-", but found "-integer value-"


    /e User Hinzu.


    Jeffry:

    Einmal editiert, zuletzt von Smokey. ()

  • Zeig mal deine Dialog defines, die anderen die im Skript sind


    Ich habe das jetzt so definert



    #define DIALOG_BANKICK 19471
    #define DLG_MusikBox 360007
    #define DLG_MusikBox_HAS_DELETE 360006
    #define DLG_Info 360005



    Hier habe ich auch nochmal ein enum drüber.


    enum
    {
    DIALOG_REGISTER,
    DIALOG_LOGIN,
    }


  • Dialog IDs über enums zu steuern ist nicht gut, da die immer von vorne anfangen, sprich bei zwei enums hast du auch zwei mal die gleichen Werte, das führt zu Fehlern.
    Schreibe alle Dialoge in defines und gebe die ID dahinter an.

  • Dialog IDs über enums zu steuern ist nicht gut, da die immer von vorne anfangen, sprich bei zwei enums hast du auch zwei mal die gleichen Werte, das führt zu Fehlern.
    Schreibe alle Dialoge in defines und gebe die ID dahinter an.


    Das sind aber sehr viele #definerte Dialoge dann.

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