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
  • Hey leute :D
    Schon wieder ich, brauch diesmal nur nen kleinen Denkstoß !


    Ich habe jetzt angefangen für mein ADAC System eine Fraktionskasse zu scripten.


    Momentan lass ich sie nur Speichern und Laden und zwar so:
    #define MAX_FRAKTION 2
    enum KassenDaten
    {
    fFraktion,
    fGeld,
    fDrogen,
    fWaffen
    }
    new KassenInfo[MAX_FRAKTION][KassenDaten];
    stock LoadKassen()
    {
    mysql_query("SELECT NULL FROM Kassen");
    mysql_store_result();
    new rows = mysql_num_rows();
    mysql_free_result();
    new string[3];
    for(new i=0; i < rows; i++)
    {
    format(string, sizeof string, "%d", i);
    KassenInfo[i] = mysql_GetInt("Kassen", "Geld", "ID", string);
    }
    return 1;
    }


    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], "ID", string);
    }
    return 1;
    }


    Dieses kleine System habe ich mit gefundenen Codeschnipseln erstellt.
    So, jetzt kommt mein Problem. Wie erstelle ich nun die ADAC Kasse?
    Wie ich da dann rein zahlen und auszahlen kann weiß ich ja, aber die muss ja auch erst erstellt werden.
    Und wie sage ich per Befehl dann, dass sie in die ADAC Kasse einzahlen sollen und nicht in die Staatskasse?
    versteht ihr was ich meine?


    Paar tipps wären nett.


    Achja und danke für die ständig schnelle Hilfe :thumbup:



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


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

  • Du hast beides mal
    KassenInfo[i]
    geschrieben, ändere das zu
    KassenInfo[i][fGeld]


    Dann gehe ich davon aus, dass dein ADAC eine Fraktion ist. Diese Fraktionen würde ich halb-automatisiert anlegen, indem du beim Server Start prüfst, welche Fraktion noch nicht in der Tabelle steht und die entsprechenden Fraktionen dann hinzufügst. Heißt, wie beim Laden das SELECT und dann:
    for(new i=rows; i < MAX_FRAKTION; i++)
    In der Schleife dann ein query welches einen INSERT macht, mit dem Fraktionsnamen (den findest du über einen switch heraus, über i).
    Beispiel:
    case 1: mysql_query("INSERT INTO Kassen (frakName) VALUES ('ADAC');");


    Oder eben mit dem Fraktionsname über eine Variable, ich weiß ja nicht, wie dein restliches System aufgebaut ist.


    Und erst danach kommt dann der LoadKassen Teil.

  • Ich hab mich an dir und an meinem Register/Login System Orientiert.


    Ich hab jetzt 2 neue Stocks, Checkkasse(ob es schon die Kasse gibt) und CreateKasse(Falls nein eine erstellen?)
    So pass auf hier der Code
    stock CreateKasse(playerid, pass[])
    {
    new query[256];
    mysql_real_escape_string(fName,fName);
    format(query, sizeof(query), "INSERT INTO `Kassen` (`Name`) VALUES ('%s')", fName);
    mysql_query(query);
    return true;
    }
    stock mysql_CheckKasse(playerid)
    {
    new Query[128],count;
    format(Query, sizeof(Query), "SELECT * FROM `Kassen` WHERE `Name` = '%s'", fName);
    mysql_query(Query);
    mysql_store_result();
    count = mysql_num_rows();
    mysql_free_result();
    return count;
    }


    Ist das jetzt richtig?
    Ich will das so haben wie wenn ich mir einen neuen Account erstelle, bloß für die Fraktionskasse mit dem Inhalt Name, Geld,Waffen und Drogen
    in der DB dann
    Name Geld Waffen Drogen
    ADAC 5000 250 0


    'Waffen' sind Materialien also nicht wundern.


    Wenn das alles richtig wäre, wie mach ich dann einen Befehl zum erstellen einer neuen 'Spalte' oder wie man das nennt, mit einem Dialog wo ich den Name der Kasse angeben kann(als RCon admin einfach)
    Wie soll ihre neue Fraktionskasse heißen? (Staatskasse)
    Sie haben eine neue Kasse angelegt sie heißt 'Staatskasse'
    Name Geld Waffen Drogen
    Staatskasse 0 0 0


    Verstehst du was ich meine?


    Und dann im Befehl geht das ja einfach so, zb als Leader von ADAC da rein zuzahlen
    ocmd:feinzahlen(playerid,params[])
    {
    new fsumme,fgeld,string[128];
    fgeld = GetPlayerMoney(playerid);
    if(sscanf(params,"i",fsumme))return SendClientMessage(playerid, Color_Green,"/feinzahlen [Summe]");
    else if (fsumme >= fgeld) return SendClientMessage(playerid, Color_Red, "Du hast nicht soviel Geld auf deiner Hand.");
    if(SpielerInfo[playerid][pLeader] != 5)
    {
    for(new i=0; i < MAX_FRAKTION; i++)
    {
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid, name, sizeof(name));
    KassenInfo[i][fGeld] += fsumme;
    format(string, sizeof(string),"Du hast i%€ in die Fraktionskasse eingezahlt! Du hast nun noch i%€ auf der Hand.",fsumme,fgeld);
    SendClientMessage(playerid, Color_Green, string);
    }
    }
    else
    {
    SendClientMessage(playerid, Color_Red, "Du gehörst nicht zu den ADAC Leadern!");
    }
    return 1;
    }
    Aber ich will ja nur in die ADAC Kasse einbezahlen, dass ist jetzt für mich alles verwirrend da ich bei MySQL noch wirklich mega mega der Noob bin...


    Hoffentlich verstehst du was ich meine :/



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


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

  • Ist ja im Compiler auch Fehlerfrei.
    Aber trotzdem verstehe ich noch nicht wie ich jetzt eine neue Kasse erstelle.
    Oder wie ich dann nur in die ADAC Kasse einbezahle statt in die Staatskasse.


    Ich will per Befehl eine neue Kasse erstellen lassen(Rcon admin)
    In der ich dann den namen eintippen kann.


    so gut, und dann will ich damit ich mit dem befehl feinzahlen jetzt zb nur in die ADAC kasse einbezahle, wie wär der code?



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


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

  • Wieso kommentierst du dann, wenn du mir nicht helfen kannst?
    Sinnlos ;)


    Ps an die, die Ahnung haben und mir helfen können.
    Wenn ich unter Ongamemodeinit abfrage ob die Kassen noch nicht Exestieren und ich sie dann erstellen möchte, kommen Errors.
    Ich bräuchte wirklich Professionelle hilfe


    for(new i=rows; i < MAX_FRAKTION; i++)
    {
    if(mysql_CheckKasse(i) == 0)
    {
    CreateKasse(i);
    }
    }



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


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

  • C:\Users\Tobi\Desktop\samp03z_svr_R1_win32\gamemodes\newrl.pwn(159) : error 035: argument type mismatch (argument 2)
    C:\Users\Tobi\Desktop\samp03z_svr_R1_win32\gamemodes\newrl.pwn(1599) : error 035: argument type mismatch (argument 1)
    C:\Users\Tobi\Desktop\samp03z_svr_R1_win32\gamemodes\newrl.pwn(1600) : warning 219: local variable "i" shadows a variable at a preceding level
    C:\Users\Tobi\Desktop\samp03z_svr_R1_win32\gamemodes\newrl.pwn(1600) : error 017: undefined symbol "rows"
    C:\Users\Tobi\Desktop\samp03z_svr_R1_win32\gamemodes\newrl.pwn(1603) : error 014: invalid statement; not in switch
    C:\Users\Tobi\Desktop\samp03z_svr_R1_win32\gamemodes\newrl.pwn(1603) : warning 215: expression has no effect
    C:\Users\Tobi\Desktop\samp03z_svr_R1_win32\gamemodes\newrl.pwn(1603) : error 001: expected token: ";", but found ":"
    C:\Users\Tobi\Desktop\samp03z_svr_R1_win32\gamemodes\newrl.pwn(1603) : error 029: invalid expression, assumed zero
    C:\Users\Tobi\Desktop\samp03z_svr_R1_win32\gamemodes\newrl.pwn(1603) : fatal error 107: too many error messages on one line


    Compilation aborted.Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase



    7 Errors.


    for(new i=rows; i < MAX_FRAKTION; i++)
    {
    if(mysql_CheckKasse(i) == 0)
    {
    CreateKasse(i, MAX_FRAKTION);//159
    }
    }


    stock CreateKasse(i, pass[])
    {
    new query[256];
    mysql_real_escape_string(fName,fName);//1599
    for(new i=rows; i < MAX_FRAKTION; i++)//1600
    {
    //format(query, sizeof(query), "INSERT INTO `Kassen` (`Name`) VALUES ('%s')", fName);
    case 1: mysql_query("INSERT INTO Kassen (fName) VALUES ('ADAC');");//1603
    case 2: mysql_query("INSERT INTO Kassen (fName) VALUES ('Staatskasse');");
    case 3: mysql_query("INSERT INTO Kassen (fName) VALUES ('Test');");
    mysql_query(query);
    }
    return true;
    }


    Macht das überhaupt sinn was ich gemacht hab :D



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


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

  • Das kannst du einfach so schreiben.


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


    Den Stock brauchst du gar nicht.

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Okay nur noch 2 Warnings


    stock mysql_CheckKasse(i)//1615
    {
    new Query[128],count;
    format(Query, sizeof(Query), "SELECT * FROM `Kassen` WHERE `Name` = '%s'", fName);//1618
    mysql_query(Query);
    mysql_store_result();
    count = mysql_num_rows();
    mysql_free_result();
    return count;
    }


    C:\Users\Tobi\Desktop\samp03z_svr_R1_win32\gamemodes\newrl.pwn(1618) : warning 213: tag mismatch
    C:\Users\Tobi\Desktop\samp03z_svr_R1_win32\gamemodes\newrl.pwn(1615) : warning 203: symbol is never used: "i" //Ist klar wird nicht benutzt
    Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase



    2 Warnings.


    Brauch ich den Stock ?


    Und Wie greif ich jetzt mit nem Befehl auf die ADAC kasse zu? und mit einem anderen auf die Staatskasse?



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


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

  • Ich schätze mal, fName steht in deinem enum, also dann so:
    stock mysql_CheckKasse(i)
    {
    new query[128],count;
    format(query, sizeof(query), "SELECT * FROM `Kassen` WHERE `Name` = '%s'", fInfo[i][fName]); //fInfo eben so wie es bei dir heißt.
    mysql_query(query);
    mysql_store_result();
    count = mysql_num_rows();
    mysql_free_result();
    return count;
    }


    Dann sollte es passen.

  • Keine Errors/Warnings.
    Aber starte ich den Server werden keine Kassen erstellt, leider.
    Und wie gesagt, kannst du mir noch schnell erklären wie ich dann in die ADAC Kasse einzahlen würde und wie dann in die Staatskasse also wie ich die Unterscheiden lasse im Script.

  • 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 (fName) VALUES ('ADAC');");
    case 2: mysql_query("INSERT INTO Kassen (fName) VALUES ('Staatskasse');");
    case 3: mysql_query("INSERT INTO Kassen (fName) VALUES ('Test');");
    }
    }
    }


    Das ist mein Onegamemodeinit mit dem system mehr hab ich nicht nur createobjecte und so


    und warte
    meine mysql log




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


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

  • Das ist der Server Log, und nicht der MySQL Log.


    Aber schreib den switch mal so:
    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');");


    Auf dem Bild heißt es ja "Name" und nicht "fName". Der Rest müsste passen. Wenn es immer noch nicht geht, poste bitte den MySQL Log.

  • Oh tut mir leid :/


    Geht leider immer noch nicht :/




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


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

  • Okey ich hab jetzt ein public erstellt und das INSERT ganz runter ins script


    forward verbindung();
    public verbindung() {
    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');");
    }
    }
    }
    }




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


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

  • new rows = mysql_num_rows();
    for(new i=rows; i < MAX_FRAKTION; i++)


    Was machst du hier überhaupt ?


    Das gehört da so nicht hin.


    for(new i=0; i < MAX_FRAKTION; i++)
    Das reicht vollkommen aus ;)


    Aber Jeffry hat recht, du rufst diese Funktion auf bevor überhaupt deine MySQL Connection steht.

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

    Margarete Stokowski