Frage wegen Dialog und SetPlayerHealth

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

  • Sehr geehrte Community,
    und zwar habe ich eine Frage ich möchte das der Spieler durch ein Command beim Snack-Automaten Leben erhält aber dies möchte ich auch mit ein, Dialog Gestalten.
    Aber wie genau soll dies dann klappen und der Code ist bisschen falsch.

    [pwn=1337]ocmd:snack(playerid,params[])
    {
    if(IsPlayerInRangeOfPoint(playerid, 7.0, 252.2642,70.2172,1003.6406))
    {
    SendClientMessage(playerid,COLOR_GREY,"Du bist nicht, an den Snack-Automaten!");
    }
    SetPlayerHealth(playerid, 100.0);
    return 1;
    }[/pwn]


    Mit hochachtungsvollen Grüßen,

    John_Alvarez!

  • ocmd:snack(playerid,params[])
    {
    if(!IsPlayerInRangeOfPoint(playerid,7,252.2642,70.2172,1003.6406))return SendClientMessage(playerid,COLOR_GREY,"Du bist nicht an den Snack-Automaten!");
    ShowPlayerDialog(playerid,DIALOG_SNACK,DIALOG_STYLE_LIST,"Snack Automat","...","Weiter","Beenden");
    return 1;
    }
    //Vielleicht musst du den DIALOG_STYLE anpassen, ich weiß ja nicht was du damit machen willst :)

  • hi, erst mal bedanke ich mir herzlich bei dir das du mir hilfst und zwar, soll dies so ablaufen.

    Mann kann von drei Getränken auswählen was mann möchte, z.B Cola Eistee, Cuapion, Tee.

    Bei allen dieser Getränke soll mann 100 HP Bekommen.
    deshalb.

    Und alles dieser Getränke sollen 100 $ doller kosten.

    Den Dialog habe ich definiert.

    SetPlayerHealth(playerid, 100.0);

  • ocmd:snack(playerid,params[])
    {
    if(!IsPlayerInRangeOfPoint(playerid,7,252.2642,70.2172,1003.6406))return SendClientMessage(playerid,COLOR_GREY,"Du bist nicht an den Snack-Automaten!");
    ShowPlayerDialog(playerid,DIALOG_SNACK,DIALOG_STYLE_LIST,"Snack Automat","Cola Eistee\nCuapion\nTee","Weiter","Beenden");
    return 1;
    }
    //Unter OnDialogResponse


    //Man hat am Ende insgesamt 100 HP.
    if(dialogid == DIALOG_SNACK)
    {
    if(response)
    {
    switch(listitem)
    {
    case 0:SendClientMessage(playerid,-1,"Du hast dir eine Cola Eistee gekauft!");
    case 1:SendClientMessage(playerid,-1,"Du hast dir ein Cuapion gekauft!");
    case 2:SendClientMessage(palyerid,-1,"Du hast dir einen Tee gekauft!");
    }
    SetPlayerHealth(playerid,100.0);
    GivePlayerMoney(playerid,-100);
    }
    return 1;
    }
    //Man bekommt 100 HP dazu
    if(dialogid == DIALOG_SNACK)
    {
    if(response)
    {
    new Float:leben;
    switch(listitem)
    {
    case 0:SendClientMessage(playerid,-1,"Du hast dir eine Cola Eistee gekauft!");
    case 1:SendClientMessage(playerid,-1,"Du hast dir ein Cuapion gekauft!");
    case 2:SendClientMessage(palyerid,-1,"Du hast dir einen Tee gekauft!");
    }
    GetPlayerHealth(playerid,leben);
    SetPlayerHealth(playerid,leben+100.0);
    GivePlayerMoney(playerid,-100);
    }
    return 1;
    }
    Soll man 100 HP dazu bekommen, oder insgesamt 100 HP dann haben?
    Ich habe dir dazu beide Möglichkeiten angefertigt :lach:

  • hi alles hat geklappt, und zwar habe ich jetzt noch eine Frage ich möchte diesen Command bzw, befehl an vielen Stellen benutzen wie mach ich das dann

    Mit dem IsPlayerInRangeOfPoint? bzw, wie trage ich dann die anderen Positionen ein?

  • ich würde das so machen:


    if (strcmp("/snack", cmdtext, true, 6) == 0)
    {
    if(IsPlayerInRangeOfPoint(playerid,4.0,X,Y,Z))
    {
    // AKTION
    }
    if(IsPlayerInRangeOfPoint(playerid,4.0,X,Y,Z))
    {
    // AKTION
    }
    if(IsPlayerInRangeOfPoint(playerid,4.0,X,Y,Z))
    {
    // AKTION
    }
    }
    }


    #edit bearbeitet (command)


    Nutzt du nur ocmd?

  • Du kannst das auch einfach alles in einem Array abfragen, und dann mit einer Schleife durchlaufen. :)

  • Einfacher wäre es, wenn man oben als Enum alle Koordinaten, wo man den Befehl eingeben kann, definiert und entsprechend mit einer If(IsPlayerInRangeOfPoint) Abfrage durchläuft, ob er an einer der Koordinaten und der Reichweite sich befindet.
    Wenn ja, gibt er den Dialog aus, wenn nicht, kommt eine Fehlermeldung.
    So muss man bei vielen Snackautomaten auch keine unnötig langen und aufwendigen Abfragen reinballern. ^^


  • Da ich gerade am Handy bin und keinen Code hier tippen kann/werde, schicke ich dir einfach mal ein Link zu einem Tutorial.
    Dort wird die Verwendung von Arrays an einem Enter/Exit-System präsentiert.
    Das gleiche kannst du auch für die SnackAutomaten anpassen. ( https://www.youtube.com/watch?v=W7Gn3bMkcAw )


    Bei allem Respekt, er kann noch nicht einmal (nicht böse gemeint @TE) Abfragen korrekt ausführen, da wäre es ineffizient direkt mit Arrays anzufangen, die verwirren ihn nur noch mehr.

  • enum varData{Float:x,Float:y,Float:z,};


    new snackautomaten[][varData] = {
    {0.0,0.0,0.0},
    };


    if(!strcmp(cmdtext,"/snack"))){
    for(new x, o = sizeof snackautomaten; x != o;
    if(GetPlayerDistanceFromPoint(playerid, snackautomaten[x][x], snackautomaten[x][y], snackautomaten[x][z]) <= 2.1)return ShowPlayerDialog(playerid,DIALOG_SNACK,DIALOG_STYLE_LIST,"Snack Automat","...","Weiter","Beenden");
    if((x == o && o == sizeof snackautomaten))break;
    }
    return SendClientMessage(playerid,-1,"Du bist nicht in der Nähe eines Snack ATMS!");
    }


    @John_Alvarez


    Dies ist nur ein Beispiel code!



    mfg :thumbup:

  • Bei allem Respekt, er kann noch nicht einmal (nicht böse gemeint @TE) Abfragen korrekt ausführen, da wäre es ineffizient direkt mit Arrays anzufangen, die verwirren ihn nur noch mehr.

    mhm, jetzt habe ich das Problem das ich Fehler bekomme, aber wieso?
    Wo liegt der Fehler?


    if(IsPlayerInRangeOfPoint(playerid,5.0,252.2642,70.2172,1003.6406) || if(IsPlayerInRangeOfPoint(playerid,7,252.2642,70.2172,1003.6406))return SendClientMessage(playerid,COLOR_GREY,"Du bist nicht an den Snack-Automaten!");


    Fehler Code:


    C:\Users\suleyman\Desktop\ Script\gamemodes\John.pwn(32492) : error 029: invalid expression, assumed zeroC:\Users\suleyman\Desktop\Script\gamemodes\John.pwn(32492) : error 001: expected token: ";", but found "return"C:\Users\suleyman\Desktop\Script\gamemodes\John.pwn(32495) : warning 225: unreachable code



  • if(IsPlayerInRangeOfPoint(playerid,5.0,252.2642,70.2172,1003.6406) || if(IsPlayerInRangeOfPoint(playerid,7,252.2642,70.2172,1003.6406))return SendClientMessage(playerid,COLOR_GREY,"Du bist nicht an den Snack-Automaten!");

    zu



    if(IsPlayerInRangeOfPoint(playerid,5.0,252.2642,70.2172,1003.6406) || IsPlayerInRangeOfPoint(playerid,7,252.2642,70.2172,1003.6406))return SendClientMessage(playerid,COLOR_GREY,"Du bist nicht an den Snack-Automaten!");


    mfg :thumbup: