Fraktionskasse MySQL

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
  • Hab es geändert, sorry :/


    Hab es ja nun ganz runter ins Script, also müsste es doch jetzt als letztes aufgerufen werden oder?



    Die heutigen Noobs, sind die Profis von morgen! :thumbup:


    Danke an Jeffry für seine ständige Hilfsbereitschaft und freundliche Art. 8)

  • Nein BlackAce, dann erstellt es ja bei jedem Server-Start die Fraktionen. Er prüft ja, wie viele Fraktionen existieren und erstellt dann ggf. die, die noch nicht existieren.



    TVPikachu, du rufst den Code gar nicht auf. Poste doch bitte mal dein gesamtes OnGameModeInit, und zwar auch den Teil, mit dem du die Verbindung zur Datenbank herstellst (Passwort entfernen!).
    Und ändere das wieder zurück, das war schon richtig, sonst hätte ich es dir nicht gesagt.

  • Hab es ja nun ganz runter ins Script, also müsste es doch jetzt als letztes aufgerufen werden oder?


    Nur weil es ganz unten im Script ist, heißt es nicht das es auch als letztes aufgerufen wird.
    Pawn ist es im endeffekt egal wo es steht, es geht nur daraum wann es aufgerufen wird.


    Du kannst uns ja mal den Code Zeigemn von dem du dein "public" verbindung aufrufst


    Jeffry: Das kann aber in dem Code abschnitt gar nicht sein, schließlich steht das mysqwl_num_rows dort völlig alleine ohne werde Funktion

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski

  • Ich habe Maddins system da steht nichts unter OnGamemodeinit :)


    aber bei Onplayerrequestetclass


    public OnPlayerRequestClass(playerid, classid)
    {
    SetPlayerPos(playerid, 1958.3783, 1343.1572, 15.3746);
    SetPlayerCameraPos(playerid, 1958.3783, 1343.1572, 15.3746);
    SetPlayerCameraLookAt(playerid, 1958.3783, 1343.1572, 15.3746);
    if(GetPVarInt(playerid,"Eingeloggt") == 0)
    {
    if(mysql_CheckAccount(playerid) == 0)
    {
    SendClientMessage(playerid, 0xFFFFFFFF,"________Herzlich Wilkommen auf San Francisco Reallife________");
    SendClientMessage(playerid, 0xFFFFFFFF,"Datenbank: Akte konnte nicht gefunden werden. Bitte Registrieren Sie sich!");
    ShowPlayerDialog(playerid,DIALOG_REGISTER,DIALOG_STYLE_INPUT,"Registrieren","Bitte gib dein Persöhnliches Passwort ein:","Register","Abbrechen");
    }
    else if(mysql_CheckAccount(playerid) == 1)
    {
    SendClientMessage(playerid, 0xFFFFFFFF,"________Herzlich Wilkommen auf San Francisco Reallife________");
    SendClientMessage(playerid, 0xFFFFFFFF,"Datenbank: Akte wurde gefunden. Bitte Loggen Sie sich ein!");
    ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_INPUT,"Einloggen","Bitte gib dein Passwort ein:","Login","Abbrechen");
    }
    }
    return 1;
    }


    dann bei dialog
    switch(dialogid)
    {
    case DIALOG_REGISTER:
    {
    if(response)
    {
    if(strlen(inputtext) == 0)
    {
    ShowPlayerDialog(playerid,DIALOG_REGISTER,DIALOG_STYLE_INPUT,"Regestration","Datenbank: Das angegebene Passwort ist zu kurz!","Register","Abbrechen");
    return 1;
    }
    else
    {
    CreateAccount(playerid, inputtext);
    SetPVarInt(playerid,"Eingeloggt",1);
    SpawnPlayer(playerid);
    SetSpawnInfo(playerid, 0, 0, -1982.5010,140.7040,27.6875,89.0363, 0, 0, 0, 0, 0, 0 );
    return 1;
    }
    }
    else
    {
    Kick(playerid);
    }
    }
    case DIALOG_LOGIN:
    {
    if(response)
    {
    if(strlen(inputtext) == 0)
    {
    ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_INPUT,"Einloggen","Datenbank: Das angegebene Passwort ist falsch!","Login","Abbrechen");
    return 1;
    }
    else
    {
    new PlayerName[MAX_PLAYER_NAME];
    GetPlayerName(playerid, PlayerName, MAX_PLAYER_NAME);
    if(!strcmp(inputtext, mysql_ReturnPasswort(PlayerName), true))
    {
    SetPVarInt(playerid,"Eingeloggt",1);
    LoadPlayer(playerid);
    SpawnPlayer(playerid);
    return 1;
    }
    else
    {
    ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_INPUT,"Einloggen","Datenbank: Das war das falsche Passwort!","Login","Abbrechen");
    return 1;
    }
    }
    }
    else
    {
    Kick(playerid);
    }
    }
    }


    und nun noch da wo die verbindung hergestellt wird


    stock Connect_To_Database()
    {
    mysql_connect(SQL_HOST, SQL_USER, SQL_DATA, SQL_PASS); //Wir versuchen mit den Angaben die wir oben im Script gemacht haben uns mit dem MySQL Server zu verbinden.
    if(mysql_ping() == 1) //Es wird überprüft ob die Verbindung steht.
    {
    //Falls ja wird das in die Console geschrieben und die Funktion wird beendet.
    print("<-| [MYSQL] Verbindung zur Datenbank wurde erfolgreich hergestellt!");
    return true;
    }
    else
    {
    //Falls nicht wird erneut versucht eine verbindung aufzubauen.
    print("<-| [MYSQL] Es konnte keine Verbindung zur Datenbank hergestellt werden!");
    print("<-| [MYSQL] Es wird erneut versucht eine Verbindung zur Datenbank herzustellen!");
    mysql_connect(SQL_HOST, SQL_USER, SQL_DATA, SQL_PASS);
    if(mysql_ping() == 1)
    {
    print("<-| [MYSQL] Es konnte im 2 Versuch eine Verbindung hergestellt werden!");
    return true;
    }
    else
    {
    //Falls das auch nicht Funktioniert wird der Server zur Sicherheit wieder heruntergefahren.
    print("<-| [MYSQL] Es konnte keine Verbindung zur Datenbank hergestellt werden!");
    print("<-| [MYSQL] Der Server wird nun beendet!");
    SendRconCommand("exit");
    return true;
    }
    }
    }


    Falls ich irgendwas ausgelassen habe oder du andere sachen brauchst sag es, dann sorry :/


    PS Danke für die hilfe :)



    Die heutigen Noobs, sind die Profis von morgen! :thumbup:


    Danke an Jeffry für seine ständige Hilfsbereitschaft und freundliche Art. 8)

  • Es ist allerdings egal, ob da jetzt 0 steht, oder mysql_num_rows 0 ausgibt, das kommt im Endeffekt auf das gleiche raus.
    Natürlich muss es so aussehen:
    mysql_query("SELECT * FROM Kassen");
    mysql_store_result();
    new rows = mysql_num_rows();
    for(new i=rows; i < MAX_FRAKTION; i++)
    {
    if(mysql_CheckKasse(i) == 0)
    {
    switch(i)
    {
    case 1: mysql_query("INSERT INTO Kassen (Name) VALUES ('ADAC');");
    case 2: mysql_query("INSERT INTO Kassen (Name) VALUES ('Staatskasse');");
    case 3: mysql_query("INSERT INTO Kassen (Name) VALUES ('Test');");
    }
    }
    }


    Und das "Connect_To_Database();" muss vor dem Code stehen.
    Schreibe am besten "Connect_To_Database();" in die erste Zeile nach public OnGameModeInit.

  • Ist es Jeffry, dass war es die ganze Zeit sorry :D


    Ich habe jetzt den Code mit dem von deinem getauscht und das in der MySQL log steht jetzt so



    Edit:


    Fortschritte!
    ich habe den Public gelöscht und es wieder unter OnGameModeInit geschrieben jetzt erstellt er eine ADAC Kasse

  • Es ist allerdings egal, ob da jetzt 0 steht, oder mysql_num_rows 0 ausgibt, das kommt im Endeffekt auf das gleiche raus.


    Das schon, nur kann ich leider nicht Hellsehen :D


    Aber so ist der Code doch total murks.


    Wenn die Kassen von Fraktion 2 und 3 exisitieren und die von Fraktion 1 nicht, wird die niemals eine Kasse bekommen und der Rest dafür aber mehr als eine.
    Also müsste der Select Query weg und man müsste von 0 anfangen zu zählen.

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski

  • Debug ist jetzt ganz oben bei OnGameModeinit


    Und die logg spuckt das aus




    Die heutigen Noobs, sind die Profis von morgen! :thumbup:


    Danke an Jeffry für seine ständige Hilfsbereitschaft und freundliche Art. 8)

  • [17:46:06] CMySQLHandler::Query(SELECT * FROM `Kassen` WHERE `Name` = '') - Successfully executed.


    Das hier das Where leer ist, sollte eigentlich nicht so sein.
    Hast du die Fraktionsnamen nicht geladen/gespeichert im Array ?

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski

  • Doch natürlich
    Hier einfach der komplette Code, ist übersichtlicher
    enum KassenDaten
    {
    fName,
    fGeld,
    fDrogen,
    fWaffen
    }
    new KassenInfo[MAX_FRAKTION][KassenDaten];


    mysql_query("SELECT * FROM Kassen");
    mysql_store_result();
    new rows = mysql_num_rows();
    for(new i=rows; i < MAX_FRAKTION; i++)
    {
    if(mysql_CheckKasse(i) == 0)
    {
    switch(i)
    {
    case 1: mysql_query("INSERT INTO Kassen (Name) VALUES ('ADAC');");
    case 2: mysql_query("INSERT INTO Kassen (Name) VALUES ('Staatskasse');");
    case 3: mysql_query("INSERT INTO Kassen (Name) VALUES ('Test');");
    }
    }
    }


    stock SaveKassen()
    {
    new string[3];
    for(new i=0; i < MAX_FRAKTION; i++)
    {
    format(string, sizeof string, "%d", i);
    mysql_SetInt("Kassen", "Geld", Kasseninfo[i][fGeld], "fName", SpielerInfo[playerid][fName]);
    mysql_SetInt("Kassen", "Drogen", Kasseninfo[i][fDrogen], "fName", SpielerInfo[playerid][fName]);
    mysql_SetInt("Kassen", "Waffen", Kasseninfo[i][fWaffen], "fName", SpielerInfo[playerid][fName]);
    }
    return 1;
    }



    Die heutigen Noobs, sind die Profis von morgen! :thumbup:


    Danke an Jeffry für seine ständige Hilfsbereitschaft und freundliche Art. 8)

  • Oh Gott der Code stimmt doch vorne und hinten nicht.


    hier mal ein beispiel:
    stock SaveKassen()
    {
    new string[3];
    for(new i=0; i < MAX_FRAKTION; i++)
    {
    format(string, sizeof string, "%d", i);
    mysql_SetInt("Kassen", "Geld", Kasseninfo[i][fGeld], "fName", SpielerInfo[playerid][fName]);
    Wo kommt denn hier bitte "playerid" her ?
    Das istüberhaupt nicht vorhanden.


    Hier sollte Kasseninfo[i][fName] stehen, da haben wir aber gleich das nächste Problem.
    Du hast den Namen der Fraktion in einem Integer also einer Zahl gespeichert.
    Du kannst aber nicht bspw. 7 Zeichen in eine Zahl quetschen.


    Ich weiß nur nicht was du dir dabei jetzt gedacht hast.
    Willst du das wirklich als ID haben, so wie es jetzt ist oder als richten Fraktionsnamen ?
    Wenn du das als ID haben willst musst du aber woanders den Namen der Fraktion haben


    Willst du aber in deinem Array den Namen speichern musst du fName als Array anpassen, aber trotzdem irgendwoher den Namen der Fraktion haben.


    Aber nun musst du aber irgendwie an den Namen der Fraktion kommen - ich weiß nicht wie das bei dir im Script genau aussieht :D

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski

  • Ups das hab ich von Oben Kopiert gehabt und vergessen zu ändern :O


    Also wie man auf dem Screen sieht will ich das jede Kasse ihre ID hat und ihren Namen!


    Das heisst adac kasse ist bsp id 1 heisst aber adac kasse!


    ich verzweifle das ist das erste mal wo ich so mit mysql arbeite könnt ihr mir helfen :D?


    Danke :/



    Die heutigen Noobs, sind die Profis von morgen! :thumbup:


    Danke an Jeffry für seine ständige Hilfsbereitschaft und freundliche Art. 8)

  • Also wie man auf dem Screen sieht will ich das jede Kasse ihre ID hat und ihren Namen!


    Dann musst du doch aber trotzdem wissen wie die Fraktion heißt, wie willst du die denn sonst laden ?


    Wenn ich nicht weiß was ich suche, kann ich auch nicht wissen ob ich es gefunden habe.


    ich verzweifle das ist das erste mal wo ich so mit mysql arbeite könnt ihr mir helfen :D?


    Nunja, wirklich was mit MySQL hat das jetzt nicht zu tun, eher mit dem aufbau deines Scriptes.
    Du kannst nicht ADAC laden wenn du nicht danach suchst.


    Also musst du deinem Query sagen, dass er danach suchen soll, aber wie willst du das machen wenn du nicht weißt wie die Fraktion heißt ?
    Wo speicherst du den Namen der Fraktion denn überhaupt ?
    Fangen wir mal so an

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski

  • Habe es ihm per TeamViewer kurz gemacht.
    Das Haupt-Problem, dass es nicht richtig ging war der AI-Key in der Datenbank und falsche Zugriffe auf die Variablen.


    Es funktioniert nun alles, auch wenn man Fraktionen aus der Mitte löscht, werden diese wieder eingefügt.

  • Thema erledigt.
    Dank Jeffry seine Hilfe per Teamviewer !


    Noch mals vielen dank an dich Jeffry, bist echt nett! :)


    Mit freundlichen Grüßen


    TVPikachu :thumbup:



    Die heutigen Noobs, sind die Profis von morgen! :thumbup:


    Danke an Jeffry für seine ständige Hilfsbereitschaft und freundliche Art. 8)