Hilfe beim Waffenkaufsystem

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
  • Habe folgendes Problem:
    Ich möchte, dass sich der Waffenkaufdialog nur öffnet, wenn ein Spieler an einem bestimmten Punkt/en steht.
    Habe auch schon ein Stock mit bisher nur einer Koordinate erstellt.




    Hier der Befehl.



    ocmd:waffekaufen(playerid,params[])
    {
    new outstr[(sizeof(WeapBuy)*24)+(sizeof(WeapBuy)*11)], addstr[34];
    for(new i=0;i<sizeof(WeapBuy);i++)
    {
    format(addstr, sizeof(addstr), "%s (%i$)\n", WeapBuy[i][wbI_weapName], WeapBuy[i][wbI_weapPrice]);
    strcat(outstr, addstr);
    ShowPlayerDialog(playerid, DIALOG_BUYWEAPON, DIALOG_STYLE_LIST, "Waffenkauf", outstr, "Kaufen", "Abbrechen");
    }
    SendClientMessage(playerid,ORANGE,"Du bist nicht im Waffensymbol eines Ammunations.");


    }


    Hier der Stock:



    stock isPlayerInAmmu(playerid)
    {
    IsPlayerInRangeOfPoint(playerid,295.8211,-38.4289,1001.5156);
    return 1;
    }

  • Ich denke schon dass das dies hier nicht funktioniert.


    Klar funktioniert das. sizeof ist eine Art Konstante, keine Variable. Der Compiler wandelt den sizeof-Wert vor dem kompilieren in eine Zahl um.


    ----


    ocmd:waffekaufen(playerid,params[])
    {
    if(isPlayerInAmmu(playerid))
    {
    new outstr[(sizeof(WeapBuy)*24)+(sizeof(WeapBuy)*11)], addstr[34];
    for(new i=0;i<sizeof(WeapBuy);i++)
    {
    format(addstr, sizeof(addstr), "%s (%i$)\n", WeapBuy[i][wbI_weapName], WeapBuy[i][wbI_weapPrice]);
    strcat(outstr, addstr);
    }
    ShowPlayerDialog(playerid, DIALOG_BUYWEAPON, DIALOG_STYLE_LIST, "Waffenkauf", outstr, "Kaufen", "Abbrechen");
    }
    else SendClientMessage(playerid,ORANGE,"Du bist nicht im Waffensymbol eines Ammunations.");
    return 1;
    }


    stock isPlayerInAmmu(playerid)
    {
    if(IsPlayerInRangeOfPoint(playerid,20.0,295.8211,-38.4289,1001.5156)) return 1;
    return 0;
    }

    3HZXdYd.png

    Einmal editiert, zuletzt von Jeffry ()


  • [i][i]Denke mal das die Waffen untereinander im Dialog stehen sollten:


    format(addstr, sizeof(addstr), "%s (%i$)\n", WeapBuy[wbI_weapName], WeapBuy[wbI_weapPrice]);[i][i]
    zu:
    format(addstr, sizeof(addstr), "%s\n%s (%i$)", addstr,WeapBuy[wbI_weapName], WeapBuy[wbI_weapPrice]);

    stock isPlayerInAmmu(playerid)
    {
    IsPlayerInRangeOfPoint(playerid,295.8211,-38.4289,1001.5156);
    return 1;
    }

    zu:
    stock isPlayerInAmmu(playerid){
    IsPlayerInRangeOfPoint(playerid,295.8211,-38.4289,1001.5156)return 1; // ausgegeben wird 1 > bedeutet der Spieler ist in der nähe vom Punkt
    return 0;
    }


  • Jeffry: Jetzt steht ingame auf einmal Server unknown Command , wenn man den Befehl eingibt. ?(

  • Ich sehe gerade, dass da der Range gar nicht eingetragen war. Schreib es so:
    stock isPlayerInAmmu(playerid)
    {
    if(IsPlayerInRangeOfPoint(playerid,20.0,295.8211,-38.4289,1001.5156)) return 1;
    return 0;
    }


    Im Kompiler dürfen keine Warnungen/Errors sein!



    @CIBERKILLER: Was habe ich da gesagt?
    Sowas hier geht nicht:
    new var = 10;
    new str[var + 5];


    Aber das geht:
    new var[10];
    new sr[sizeof(var) + 5]; // => str[10 + 5] => str[15]

  • Ich sehe gerade, dass da der Range gar nicht eingetragen war. Schreib es so:


    PAWN Quelltext



    Ok das klappt jetzt, aber es kommt jetzt trotzdem die Fehlermeldung, dass man nicht im ammu ist
    Hier nohcmal der geänderte Stock. Der Befehl ist immernoch der, den du geändert hast.

    stock isPlayerInAmmu(playerid)
    {
    if(IsPlayerInRangeOfPoint(playerid,295.8211,-38.4289,1001.5156,10))return 1;
    return 0;
    }

  • Wenn ja, foldendes setzen:

    #pragma dynamic 10000 // oder höher


    Außerdem bisschen resourcensparender:

    ocmd:waffekaufen(playerid,params[])
    {
    #pragma unused params
    if(!isPlayerInAmmu(playerid))return SendClientMessage(playerid,ORANGE,"Du bist nicht im Waffensymbol eines Ammunations.");
    new outstr[(sizeof(WeapBuy)*24)+(sizeof(WeapBuy)*11)], addstr[34];
    for(new i=0;i<sizeof(WeapBuy);i++)
    {
    format(addstr, sizeof(addstr), "%s (%i$)\n", WeapBuy[i][wbI_weapName], WeapBuy[i][wbI_weapPrice]);
    strcat(outstr, addstr);
    }
    ShowPlayerDialog(playerid, DIALOG_BUYWEAPON, DIALOG_STYLE_LIST, "Waffenkauf", outstr, "Kaufen", "Abbrechen");
    return 1;
    }


    Musst es halt noch richtig einrücken.
    Außerdem fehlt die Range.


    Edit beim Schreiben: Jeffry war schneller. ;)


  • Immeroch das selbe. Ich steh im Symbol, aber es wird trotzdem gesagt, dass ich nicht im Symbol stehen würde. :pinch:

  • waffenkauf=CreatePickup(1239,1,295.8211,-38.4289,1001.5156);



    //edit: Ok hab den Fehler gefunden^^ Habe die Range aus Versehen am Ende eingefügt. 8|


    Danke euch für die Hilfe :thumbup:
    Hier nochmal der richtige stock.^^


    stock isPlayerInAmmu(playerid)
    {
    if(IsPlayerInRangeOfPoint(playerid,10,295.8211,-38.4289,1001.5156))return 1;
    return 0;
    }