Problem Bankautomaten Transfer

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
  • Problem! :DAlso ich arbeite gerade daran, Spielern Geld überweisen zu können, irrelevant ob online/offline.
    Der Code für Online funktioniert perfekt.

    if(IsPlayerConnected(strval(inputtext)))
    {
    new playerID = gPlayerID(inputtext);
    PlayerInfo[playerID][pBank] += ATMAmount[playerid];
    PlayerInfo[playerid][pBank] -= ATMAmount[playerid];

    strdel(DialogString, 0, sizeof(DialogString));
    format(DialogString, sizeof(DialogString),""HTML_SERVER2"Willkommen bei der "HTML_SERVER1"Bank of SA"HTML_SERVER2",\n"HTML_SERVER2"du hast dem Spieler "HTML_SERVER1"%s "HTML_SERVER2"erfolgreich ("HTML_SERVER1"$%d"HTML_SERVER2") auf sein Bankkonto überwiesen.\n\n"HTML_SERVER1"Info: "HTML_SERVER2"Diese Transaktion ist nun ebenfalls in deiner Transaktionsübersicht vorhanden.", inputtext , ATMAmount[playerid]);
    ShowPlayerDialog(playerid, DIALOG_ATMTRANSLATEFINISH, DIALOG_STYLE_MSGBOX, ""#HTML_SERVER1""#SERVER_NAME" "HTML_SERVER2"- Bankautomat (Geld überweisen)", DialogString, "Schließen", "");

    new query[512], timestring[256], Day, Month, Year, Hour, Minute, Second;
    getdate(Year, Month, Day);
    gettime(Hour, Minute, Second);
    format(timestring, sizeof(timestring),"%02d.%02d.%d - %02d:%02d:%02d", Day, Month, Year, Hour, Minute, Second);
    mysql_format(MySQLConnection, query, sizeof(query),"INSERT INTO `server_atmlog`(`Absender`, `Empfänger`, `Zeit`, `Betrag`) VALUES ('%e', '%e', '%s', '%d')", PlayerInfo[playerid][pName], inputtext, timestring, ATMAmount[playerid]);
    mysql_query(MySQLConnection, query);


    new string[128];
    format(string, sizeof(string),"Bank of SA: "HTML_SERVER2"Sie haben eine Überweisung von "HTML_SERVER1"%s in Höhe von "HTML_SERVER2"$%d "HTML_SERVER1"erhalten.", PlayerInfo[playerid][pName], ATMAmount[playerid]);
    SendClientMessage(playerID, COLOR_SERVER1, string);

    ATMAmount[playerid] = 0;
    }
    else
    {
    printf("2");
    new query[128];
    mysql_format(MySQLConnection, query, sizeof(query), "SELECT ID FROM server_accounts WHERE Name = '%e'", inputtext);
    mysql_pquery(MySQLConnection, query, "Server_ATMTranslate", "d", playerid);

    }


    Jedoch sollte der Spieler offline sein, geht er nicht zu print2, somit kann ich die Funktion nicht weiter machen, dass auch offline Geld überwiesen wird. Wollte halt erstmal abfragen, ob der Account existiert, wenn ja, ihm das Geld auf das Bankkonto geben.


    Alles unter if(IsPlayerConnected(strval(inputtext))) funktioniert, unter dem else jedoch nicht.

  • Beitrag von BreadScript ()

    Dieser Beitrag wurde vom Autor aus folgendem Grund gelöscht: Falsch ().
  • Arbeitest du nicht mit


    PlayerInfo und pLogin?

    Doch, jedoch ist das System, wenn der Spieler online ist, fertig. Ich möchte jedoch auch gerne die Möglichkeit haben, Leuten die offline sind, Geld zu überweisen.
    Das wäre also ab hier, aber bis dato geht er gar nicht erst.

    [list=1][*] else
    [*] {
    [*] printf("2");
    [*] new query[128];
    [*] mysql_format(MySQLConnection, query, sizeof(query), "SELECT ID FROM server_accounts WHERE Name = '%e'", inputtext);
    [*] mysql_pquery(MySQLConnection, query, "Server_ATMTranslate", "d", playerid);
    [*]
    [*] }
    [/list]

    Hey,
    Was ist denn der inputtext?
    Kann ich in dem Dialog nur die ID eingeben oder auch den Namen?
    Weil wenn ich den Namen eingebe ist inputtext der Name gebe ich die ID ein ist es eine Zahl.


    Vielleicht mal überprüfen

    Im Dialog kann nur der Name eingegeben werden.

  • Probier es mal wie folgt




    new playerID = gPlayerID(inputtext);
    if(IsPlayerConnected(strval(playerID)))
    {
    PlayerInfo[playerID][pBank] += ATMAmount[playerid];
    PlayerInfo[playerid][pBank] -= ATMAmount[playerid];

    strdel(DialogString, 0, sizeof(DialogString));
    format(DialogString, sizeof(DialogString),""HTML_SERVER2"Willkommen bei der "HTML_SERVER1"Bank of SA"HTML_SERVER2",\n"HTML_SERVER2"du hast dem Spieler "HTML_SERVER1"%s "HTML_SERVER2"erfolgreich ("HTML_SERVER1"$%d"HTML_SERVER2") auf sein Bankkonto überwiesen.\n\n"HTML_SERVER1"Info: "HTML_SERVER2"Diese Transaktion ist nun ebenfalls in deiner Transaktionsübersicht vorhanden.", inputtext , ATMAmount[playerid]);
    ShowPlayerDialog(playerid, DIALOG_ATMTRANSLATEFINISH, DIALOG_STYLE_MSGBOX, ""#HTML_SERVER1""#SERVER_NAME" "HTML_SERVER2"- Bankautomat (Geld überweisen)", DialogString, "Schließen", "");

    new query[512], timestring[256], Day, Month, Year, Hour, Minute, Second;
    getdate(Year, Month, Day);
    gettime(Hour, Minute, Second);
    format(timestring, sizeof(timestring),"%02d.%02d.%d - %02d:%02d:%02d", Day, Month, Year, Hour, Minute, Second);
    mysql_format(MySQLConnection, query, sizeof(query),"INSERT INTO `server_atmlog`(`Absender`, `Empfänger`, `Zeit`, `Betrag`) VALUES ('%e', '%e', '%s', '%d')", PlayerInfo[playerid][pName], inputtext, timestring, ATMAmount[playerid]);
    mysql_query(MySQLConnection, query);


    new string[128];
    format(string, sizeof(string),"Bank of SA: "HTML_SERVER2"Sie haben eine Überweisung von "HTML_SERVER1"%s in Höhe von "HTML_SERVER2"$%d "HTML_SERVER1"erhalten.", PlayerInfo[playerid][pName], ATMAmount[playerid]);
    SendClientMessage(playerID, COLOR_SERVER1, string);

    ATMAmount[playerid] = 0;
    }
    else
    {
    printf("2");
    new query[128];
    mysql_format(MySQLConnection, query, sizeof(query), "SELECT ID FROM server_accounts WHERE Name = '%e'", inputtext);
    mysql_pquery(MySQLConnection, query, "Server_ATMTranslate", "d", playerid);

    }


    Einfach die ID als erstes auslesen und dann Abfragen ob er Online ist.

  • sehe ich alles als eher schlechte Methode
    Ich würde hier auxh auf sscanf zurückgreifen.


    if(sscanf(inputtext,"u",pID))
    So hast du die id oder den Namen


    Zumal wenn du sagst ich kann nur eine ID eingeben, wie sollte der Query dann funktionieren wenn %e der inputtext ist der eine Zahl ist. Der Name in deiner Datenbank wird kaum eine Zahl sein...

  • Problem behoben, eines besteht lediglich noch.


    Ich habe ein System, welches einen Spieler ermöglicht, Überweisungen auszuführen, während der Spieler offline ist.
    Das ganze funktioniert auch halb, ich überweise beispielweise den Spieler Finn Geld und es funktioniert, nehme ich einen anderen Spieler in der Datenbank bekomme ich die Meldung, dass der Account nicht gefunden wurde.



    [list=1][*]public Server_ATMTranslate(playerid)
    [*]{
    [*] new rows = cache_num_rows();
    [*] if(rows)
    [*] {
    [*] new ID, LastMoney, query[128], PIN;
    [*] cache_get_value_name_int(0, "ID", ID);
    [*] cache_get_value_name_int(0, "Bank", LastMoney);
    [*] cache_get_value_name_int(0, "PIN", PIN);
    [*]
    [*] if(PIN == 0)
    [*] {
    [*] strdel(DialogString, 0, sizeof(DialogString));
    [*] format(DialogString, sizeof(DialogString),""HTML_SERVER1"Fehler:"HTML_SERVER2" Der angegebene Spieler hat noch kein Konto bei der Bank of SA\n\n"HTML_SERVER2"Willkommen bei der "HTML_SERVER1"Bank of SA"HTML_SERVER2",\n"HTML_SERVER2"bitte gebe nun den gewünschten Spieler an, welchen du ("HTML_SERVER1"$%d"HTML_SERVER2") überweisen möchtest.\n\n", ATMAmount[playerid]);
    [*] strcat(DialogString, ""HTML_SERVER1"Info: "HTML_SERVER2"Bitte gebe nun in das untere Feld den Namen ein, hierbei ist es irrelevant ob er online oder offline ist.");
    [*] ShowPlayerDialog(playerid, DIALOG_ATMTRANSLATEPLAYER, DIALOG_STYLE_INPUT, ""#HTML_SERVER1""#SERVER_NAME" "HTML_SERVER2"- Bankautomat (Geld überweisen)", DialogString, "Bestätigen", "Zurück");
    [*] return 1;
    [*] }
    [*]
    [*] PlayerInfo[playerid][pBank] -= ATMAmount[playerid];
    [*] LastMoney += ATMAmount[playerid];
    [*]
    [*] mysql_format(MySQLConnection, query, sizeof(query), "UPDATE `server_accounts` SET `Bank` = '%d' WHERE `ID` = '%d' LIMIT 1", LastMoney, ID);
    [*] mysql_query(MySQLConnection, query);
    [*]
    [*] strdel(DialogString, 0, sizeof(DialogString));
    [*] format(DialogString, sizeof(DialogString),""HTML_SERVER2"Willkommen bei der "HTML_SERVER1"Bank of SA"HTML_SERVER2",\n"HTML_SERVER2"du hast dem offline Spieler "HTML_SERVER1"%s "HTML_SERVER2"erfolgreich ("HTML_SERVER1"$%d"HTML_SERVER2") auf sein Bankkonto überwiesen.\n\n"HTML_SERVER1"Info: "HTML_SERVER2"Diese Transaktion ist nun ebenfalls in deiner Transaktionsübersicht vorhanden.", ATMPlayer[playerid] , ATMAmount[playerid]);
    [*] ShowPlayerDialog(playerid, DIALOG_ATMTRANSLATEFINISH, DIALOG_STYLE_MSGBOX, ""#HTML_SERVER1""#SERVER_NAME" "HTML_SERVER2"- Bankautomat (Geld überweisen)", DialogString, "Schließen", "");
    [*]
    [*] new query1[512], timestring[256], Day, Month, Year, Hour, Minute, Second;
    [*] getdate(Year, Month, Day);
    [*] gettime(Hour, Minute, Second);
    [*] format(timestring, sizeof(timestring),"%02d.%02d.%d - %02d:%02d:%02d", Day, Month, Year, Hour, Minute, Second);
    [*] mysql_format(MySQLConnection, query1, sizeof(query1),"INSERT INTO `server_atmlog`(`Absender`, `Empfänger`, `Zeit`, `Betrag`) VALUES ('%e', '%e', '%s', '%d')", PlayerInfo[playerid][pName], ATMPlayer[playerid], timestring, ATMAmount[playerid]);
    [*] mysql_query(MySQLConnection, query1);
    [*] }
    [*] else
    [*] {
    [*] strdel(DialogString, 0, sizeof(DialogString));
    [*] format(DialogString, sizeof(DialogString),""HTML_SERVER1"Fehler:"HTML_SERVER2" Der angegebene Spieler existiert nicht in der Datenbank\n\n"HTML_SERVER2"Willkommen bei der "HTML_SERVER1"Bank of SA"HTML_SERVER2",\n"HTML_SERVER2"bitte gebe nun den gewünschten Spieler an, welchen du ("HTML_SERVER1"$%d"HTML_SERVER2") überweisen möchtest.\n\n"HTML_SERVER1"Info: "HTML_SERVER2"Bitte gebe nun in das untere Feld den Namen ein, hierbei ist es irrelevant ob er online oder offline ist.", ATMAmount[playerid]);
    [*] ShowPlayerDialog(playerid, DIALOG_ATMTRANSLATEPLAYER, DIALOG_STYLE_INPUT, ""#HTML_SERVER1""#SERVER_NAME" "HTML_SERVER2"- Bankautomat (Geld überweisen)", DialogString, "Bestätigen", "Zurück");
    [*] return 1;
    [*] }
    [*] return 1;
    [*]}
    [/list]



    [list=1][*]format(ATMPlayer[playerid], sizeof(ATMPlayer[]), inputtext);
    [*]
    [*] new query[128];
    [*] mysql_format(MySQLConnection, query, sizeof(query), "SELECT * FROM server_accounts WHERE Name = '%e' LIMIT 1", inputtext);
    [*] mysql_pquery(MySQLConnection, query, "Server_ATMTranslate", "d", playerid);
    [/list]

  • Hey,
    Du hast dort 2 mal stehen das der Spieler nicht existiert.
    Einmal beim PIN und einmal ob der Spieler nicht in der Datenbank ist.


    Wichtig wäre vielleicht das du einmal alle den PIN printest und auch ob der Spieler in der Datenbank existiert. Damit der Fehler gefunden werden kann.


    Das rate ich dir im allgemeinen, fang am wenn ein Fehler Auftritt die Sache printen zu lassen um zu sehen wo der Fehler genau liegt.
    So kannst du ihn häufig auch selbst finden

  • Beitrag von BreadScript ()

    Dieser Beitrag wurde vom Autor aus folgendem Grund gelöscht: Falsch gelesen ().