Parameter übertragen?

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
  • Hey ^^


    Ich weiß nicht recht wie ich es anstellen soll , dass man Parameter aus einem Befehl irgendwo ausliest.


    In diesem Fall möchte ich machen , dass ein Cop einem Spieler einen Strafzettel geben kann, mit dem Befehl /strafzettel [ID] [Grund] [Preis].
    So , nun soll dem Spieler ein Dialog angezeigt werden , in dem halt der Grund und der Preis steht.


    Nun aber ist mein Problem , wie ich ihm den Preis abziehe.
    Also wenn er auf [zahlen] drückt , dass ihm der im Command angegebene Preis abgezogen wird , und bei [abbrechen] halt nicht!


    Edit: Hier nochmal als Code



    ocmd:strafzettel(playerid,params[])
    {
    if(isPlayerACop(playerid))return SendClientMessage(playerid,Rot,"Du bist kein Polizist!");
    new pID,grund[128],strafe,string[128];
    if(sscanf(params,"us[128]i",pID,grund,strafe))return SendClientMessage(playerid,Rot,"Fehler: /strafzettel [ID/Name] [Grund] [Preis]");
    {
    format(string,sizeof(string),"Polizist %s gibt dir einen Strafzettel.\nGrund: %s\nPreis: %i",PlayerName(playerid),grund,strafe);
    ShowPlayerDialog(pID,Dialog_Strafzettel,DIALOG_STYLE_MSGBOX,"Strafzettel",string,"Zahlen","Abbrechen");
    }
    return 1;
    }


    if(dialogid == Dialog_Strafzettel)
    {
    if(response==0)
    {
    //Hier soll dem Cop, der den Strafzettel ausgestellt hat , eine Nachricht gesendet werden , dass der Spieler den Strafzettel nicht bezahlt hat ! (HILFE)
    }
    if(response==1)
    {
    //Hier soll dem Spieler das Geld des Strafzettels abgezogen werden , und dem Cop gegeben werden! (HILFE)
    }
    }

  • Da brauchst du 2 globale Variablen. Die eine setzt du auf den Preis und die andere auf die ID des Ticket-Gebers. (bsp:
    new TicketPreis[MAX_PLAYERS], TicketID[MAX_PLAYERS];)
    Beim connecten den Preis auf 0 setzen und die ID auf -255.
    Und beachten, beim setzen der Variable im Command nicht von playerid setzen, sondern von pID. ;)

  • Aah :D


    Also wäre es so richtig?



    new TicketPreis[MAX_PLAYERS], TicketGeber[MAX_PLAYERS];


    OnPlayerConnect
    TicketPreis[playerid]=0;
    TicketGeber[playerid]=-255;


    ocmd:strafzettel(playerid,params[])
    {
    if(isPlayerACop(playerid))return SendClientMessage(playerid,Rot,"Du bist kein Polizist!");
    new pID,grund[128],strafe,string[128];
    if(sscanf(params,"us[128]i",pID,grund,strafe))return SendClientMessage(playerid,Rot,"Fehler: /strafzettel [ID/Name] [Grund] [Preis]");
    {
    format(string,sizeof(string),"Polizist %s gibt dir einen Strafzettel.\nGrund: %s\nPreis: %i",PlayerName(playerid),grund,strafe);
    ShowPlayerDialog(pID,Dialog_Strafzettel,DIALOG_STYLE_MSGBOX,"Strafzettel",string,"Zahlen","Abbrechen");
    TicketPreis[pID]=strafe;
    TicketGeber[pID]=playerid;
    }
    return 1;
    }


    if(dialogid == Dialog_Strafzettel)
    {
    if(response==0)
    {
    new string[128];
    format(string,sizeof(string),"%s hat den Strafzettel nicht bezahlt bezahlt!");
    SendClientMessage(TicketGeber[playerid],Hellblau,string);
    TicketPreis[playerid]=0;
    TicketGeber[playerid]=-255;
    }
    if(response==1)
    {
    GivePlayerMoney(playerid,-TicketPreis[playerid]);
    GivePlayerMoney(TicketGeber[playerid],TicketPreis[playerid]);
    new string[128];
    format(string,sizeof(string),"%s hat den Strafzettel bezahlt!");
    SendClientMessage(TicketGeber[playerid],Hellblau,string);
    TicketPreis[playerid]=0;
    TicketGeber[playerid]=-255;
    }
    }


    Edit:
    Wie kann ich machen , dass man mehrere Wörter bei grund schreiben kann?


    zB. /strafzettel xSpeciiaL Zu schnelles fahren 5000


    Da würde ein Fehler kommen , da er "schnelles" als den Preis ansieht!