/ticket und /accept ticket - Frage

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 Liebe Fishe(keine beleidigung)


    Ich habe keine Ahnung wie ich das machen soll woher soll das script in einem anderen befehl wissen welche Strafe und welchen Grund?(


    So war mein Plan :



    --> Ein Cop/O-Amt geht zum Spieler und macht /ticket [id] [Strafe] [Grund]


    Spieler sieht text "blabla Beamter %s gibt dir ein Ticket in höhe von %i Grund : %s" Spieler bezahlt das Ticket mit /accept ticket<----

  • Du kannst den Grund in einem PVar speichern und auf diesem von überall aus zugreifen.


    Im /ticket-Befehl speicherst du die strafe und grund in die SpielerID, jene die Strafe erhält:



    SetPVarString(giveplayerid, "PlayerTicketStrafe", strafe);
    SetPVarString(giveplayerid, "PlayerTicketGrund", grund);


    und bei Accept nimmst du normal die playerid her, da die playerid in dem Fall die vorherige giveplayerid war:



    new grund[128],strafe[128];
    GetPVarString(playerid,"PlayerTicketStrafe",strafe,sizeof(strafe));
    GetPVarString(playerid,"PlayerTicketGrund,"grund,sizeof(grund));


    Gerne zeige ich dir ein kleines fertiges Script, wenn du nicht weiterkommst. Dachte ich helf dir nur kurz auf die Sprünge, da man selbst der Programmierer ist.

    Mfg Templer


    >>Dein Breadfish-Thema im Unterforum ScriptingBase / Scriptingwünsche wurde nicht richtig beantworter?<<
    >>Es handelt sich um ein Programmier Problem und du nicht einfach weiter kommst wo der Fehler sein könnte?<<
    Dann melde dich bei mir über die PN-Funktion indem du den Link zu deinem Breadfish-Themen Problem schickst.
    Voraussetzung:
    Thema älter als 1 Tag und im Breadfish Forum gespostet!

  • Entschuldige, womöglich ist ein Fehler drinnen. Ich hab nur leider grad keine Zeit es durchzutesten, aber von der Logik her stimmt es. Solltest du weitere Fragen haben oder Probleme mit dem Code, einfach schreiben.



    // SetPVarString(giveplayerid, "PlayerTicketStrafe", strafe);
    // SetPVarString(giveplayerid, "PlayerTicketGrund", grund);


    #include <a_samp>
    #include <ocmd>
    #include <sscanf2>


    #define TICKET_DISTANCE 25.0


    // Farben
    #define COLOR_GREY (0xAFAFAFAA)
    #define COLOR_GREEN (0x33AA33AA)
    #define COLOR_RED (0xAA3333AA)
    #define COLOR_ORANGE (0xFF9900AA)
    #define COLOR_LIGHTRED (0xFF6347AA)
    #define COLOR_BLUE (0x33CCFFAA)
    #define COLOR_LIGHTBLUE (0x33CCFFAA)
    #define COLOR_LIGHTGREEN (0x9ACD32AA)
    #define COLOR_YELLOW (0xFFFF00AA)
    #define COLOR_WHITE (0xFFFFFFAA)


    ocmd:accept(playerid, params[])
    {
    new new_params[128],
    error[128];


    // --- AB HIER KOMPLIZIERTE (eigentlich nicht) ABFRAGE NACH EINEM ZWISCHEN PARAMTER ---


    // Finde in den Paramter das erste Leerzeichen
    if(strfind(params," ",false)!=-1) {
    // Lagere ab dem Leerzeichen die Parameter in 'new_params'
    strmid(new_params,params,strfind(params, " ", false)+1,strlen(params));


    // Lösche von 'params' alle Parameter, bis auf den ersten
    strdel(params,strfind(params, " ", false),strlen(params));
    }


    // Wenn keine Paramtereingabe erfolgt ist...
    if(strlen(params) < 1) {
    SendClientMessage(playerid,COLOR_GREY,"VERWENDUNG: /accept [Objekt]");
    return SendClientMessage(playerid,COLOR_GREY,"* Mögliche Objekte: ticket");
    }


    // Wenn die Option 'ticket' gewählt worden ist
    if(!strcmp(params,"ticket",true)) {


    new price = GetPVarInt(playerid,"PlayerTicketPrice"),
    copid = GetPVarInt(playerid,"PlayerTicketCopID"),
    Float:PlayerPos[3],
    grund[32],
    copname[MAX_PLAYER_NAME],
    playername[MAX_PLAYER_NAME];



    GetPlayerName(copid,copname,MAX_PLAYER_NAME); // Lagere Namen vom Wachmann
    GetPlayerName(playerid,playername,MAX_PLAYER_NAME); // Lagere Namen von Spieler, der das Ticket bezahlen muss
    GetPVarString(playerid,"PlayerTicketGrund",grund,sizeof(grund)); // Lagere den Grund für das Ticket
    GetPlayerPos(playerid,PlayerPos[0],PlayerPos[1],PlayerPos[2]); // Speichere die Position vom Spieler, der das Ticket bezahlen muss


    // Wenn beim Spieler kein Ticketpreis gespeichert ist, so muss er auch kein Ticket zahlen, oder? >:D
    if(price < 0) format(error,sizeof(error)," Sie haben keinen Ticket erhalten, zum bezahlen...");


    // Wenn der Wachmann nicht mehr am Server ist, so sei kulant und lösche das Ticket
    if(!IsPlayerConnected(copid)) {
    format(error,sizeof(error)," Der Wachmann ist nicht mehr auf dem Server, weßhalb Ihr Ticket gelöscht wird...");
    DeletePVar(playerid,"PlayerTicketPrice");
    }


    // Wenn der Wachmann nicht in der Nähe ist...
    if(!IsPlayerInRangeOfPoint(playerid,TICKET_DISTANCE,PlayerPos[0],PlayerPos[1],PlayerPos[2])) format(error,sizeof(error)," Sie sind nicht in der Nähe vom Wachmann %s(%d)...", copname, copid);


    // Wenn der Spieler das Geld Bar nicht aufbringen kann
    if(GetPlayerMoney(playerid) < price) format(error,sizeof(error)," Sie haben keine %d$ um das Ticket zu bezahlen...", price);


    GivePlayerMoney(playerid,-price); // Ziehe das Ticketpreis vom Spieler, der das Ticket bezahlen muss (Logisch oder? xD)
    GivePlayerMoney(copid,price); // Gebe dem Wachmann den Ticketpreis (Schmiergeld)


    // Ausgabe der Meldung für den gewählten Spieler (Wer? Wieviel? Warum?)
    format(error,sizeof(error),"* Spieler %s(%d) hat das Ticket von %d$ mit dem Grund %s bezahlt.", playername, playerid, price, grund);
    SendClientMessage(copid,COLOR_ORANGE,error);
    SendClientMessage(copid,COLOR_WHITE,"INFO: Schreiben Sie (/accept ticket) um das Ticket zu bezahlen.");


    // Ausgabe der Meldung für den Wachmann, der diesen Befehl ausführt (Wer? Wieviel? Warum?)
    format(error,sizeof(error),"* Sie haben dem Wachmann %s(%d) das Ticket um %d$ für den Grund '%s' bezahlt.", copname, copid, price, grund);
    SendClientMessage(playerid,COLOR_ORANGE,error);


    return 1;
    }


    // Fehlermeldung, wenn der Parameter nicht mit einem vorhandenen übereinstimmt
    SendClientMessage(playerid,COLOR_GREY,"VERWENDUNG: /accept [Objekt]");
    SendClientMessage(playerid,COLOR_GREY,"* Mögliche Objekte: ticket");


    return true;
    }


    ocmd:ahelp(playerid,params[])
    {
    new giveplayerid,
    grund[32], // string, wo der Grund eingelagert wird
    Float:PlayerPos[3], // array für Positionsablagerung
    error[128], // string, wo der fehler vorhanden ist (wenn es einen gibt)
    giveplayername[MAX_PLAYER_NAME], // name vom gewählten spieler
    playername[MAX_PLAYER_NAME], // name vom spieler, der diesen Befehl ausführt
    price; // variable für ticketpreis


    // Empfangen der eingegeben Paramter über 'sscanf'
    if(!sscanf(params,"uds[32]",giveplayerid,price,grund)) return SendClientMessage(playerid,COLOR_GREY,"VERWENDUNG: /ticket [SpielerID/Name] [TicketPreis] [Grund]");


    // Allgemeine Abfrage-Informationen
    GetPlayerPos(playerid,PlayerPos[0],PlayerPos[1],PlayerPos[2]); // Position vom Spieler, der diesen Befehl ausführt
    GetPlayerName(playerid,playername,MAX_PLAYER_NAME); // Name von Spieler, der diesen Befehl ausführt
    GetPlayerName(giveplayerid,giveplayername,MAX_PLAYER_NAME); // Name von gewählten Spieler (giveplayerid)


    // Sofern der gewählte Spieler nicht verbunden ist...
    if(!IsPlayerConnected(giveplayerid)) format(error,sizeof(error)," Spieler ist nicht mit dem Server verbunden...");


    // Sofern der gewählte Spieler nicht in der Nähe vom Spieler (der diesen Befehl ausführt) ist
    if(!IsPlayerInRangeOfPoint(giveplayerid,TICKET_DISTANCE,PlayerPos[0],PlayerPos[1],PlayerPos[2])) format(error,sizeof(error)," Spieler %s(%d) ist nicht in Ihrer Nähe...", giveplayername, giveplayerid);


    // Sofern der gewählte Spieler bereits einen Ticket bezahlen muss...
    if(GetPVarInt(giveplayerid,"PlayerTicketPrice") > 0) format(error,sizeof(error)," Spieler %s(%d) muss bereits eine Ticketstrafe von %d$ bezahlen...", giveplayername, giveplayerid, GetPVarInt(giveplayerid,"PlayerTicketPrice"));


    // Wenn der string-'error' einen Inhalt (Fehler) enthält, so gebe Ihn aus und brich den Befehl ab.
    if(strlen(error)) {
    return SendClientMessage(playerid,COLOR_GREY,error); // Ausgabe der Fehlermeldung
    }


    SetPVarInt(giveplayerid,"PlayerTicketPrice",price); // Speichere den Ticketpreis für den gewählten Spieler (giveplayerid)
    SetPVarString(giveplayerid,"PlayerTicketGrund",grund); // Speichere den Ticketgrund für den gewählten Spieler (giveplayerid)


    // Ausgabe der Meldung für den gewählten Spieler (Wer? Wieviel? Warum?)
    format(error,sizeof(error),"* Wachmann %s(%d) schreibt Ihnen ein Ticket von %d$ mit dem Grund %s.", playername, playerid, price, grund);
    SendClientMessage(giveplayerid,COLOR_ORANGE,error);
    SendClientMessage(giveplayerid,COLOR_WHITE,"INFO: Schreiben Sie (/accept ticket) um das Ticket zu bezahlen.");


    // Ausgabe der Meldung für den Wachmann, der diesen Befehl ausführt (Wer? Wieviel? Warum?)
    format(error,sizeof(error),"* Sie haben %s(%d) ein Ticket um %d$ für den Grund '%s' geschrieben.", giveplayername, giveplayerid, price, grund);
    SendClientMessage(playerid,COLOR_ORANGE,error);


    return 1;
    }


    //EDIT: Habe es nun mim Compiler getestet und Fehler ausgemerzt.

    Mfg Templer


    >>Dein Breadfish-Thema im Unterforum ScriptingBase / Scriptingwünsche wurde nicht richtig beantworter?<<
    >>Es handelt sich um ein Programmier Problem und du nicht einfach weiter kommst wo der Fehler sein könnte?<<
    Dann melde dich bei mir über die PN-Funktion indem du den Link zu deinem Breadfish-Themen Problem schickst.
    Voraussetzung:
    Thema älter als 1 Tag und im Breadfish Forum gespostet!

    Einmal editiert, zuletzt von Templer () aus folgendem Grund: Fehlerbhebung mit Compiler