[MySQL] Ingame Firmen erstellen | Laden & Speichern Problem

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
  • Guten Tag Com,


    ich bin gerade dabei ein System zu schreiben, wo man Ingame Firmen erstellen kann. Diese sollen durch MySQL geladen und gespeichert werden. Nun habe ich leider keine Idee, wie ich diese speicher bzw. laden kann.
    das System basiert auf dem Register & Loginsystem von maddin und nutzt daher folgendes zum speicher bzw. laden.


    Spoiler anzeigen
    stock mysql_GetInt(Table[], Field[], Where[], Is[])
    {
    new query[128];
    mysql_real_escape_string(Table, Table);
    mysql_real_escape_string(Field, Field);
    mysql_real_escape_string(Where, Where);
    mysql_real_escape_string(Is, Is);
    format(query, 128, "SELECT `%s` FROM `%s` WHERE `%s` = '%s'", Field, Table, Where, Is);
    mysql_query(query);
    mysql_store_result();
    new sqlint = mysql_fetch_int();
    mysql_free_result();
    return sqlint;
    }
    stock mysql_GetString(Table[], Field[], Where[], Is[])
    {
    new query[128], Get[128];
    mysql_real_escape_string(Table, Table);
    mysql_real_escape_string(Field, Field);
    mysql_real_escape_string(Where, Where);
    mysql_real_escape_string(Is, Is);
    format(query, 128, "SELECT `%s` FROM `%s` WHERE `%s` = '%s'", Field, Table, Where, Is);
    mysql_query(query);
    mysql_store_result();
    mysql_fetch_row(Get);
    mysql_free_result();
    return Get;
    }
    stock Float:mysql_GetFloat(Table[], Field[], Where[], Is[])
    {
    new query[128], Float:sqlfloat;
    mysql_real_escape_string(Table, Table);
    mysql_real_escape_string(Field, Field);
    mysql_real_escape_string(Where, Where);
    mysql_real_escape_string(Is, Is);
    format(query, 128, "SELECT `%s` FROM `%s` WHERE `%s` = '%s'", Field, Table, Where, Is);
    mysql_query(query);
    mysql_store_result();
    mysql_fetch_float(sqlfloat);
    mysql_free_result();
    return sqlfloat;
    }
    stock mysql_SetInt(Table[], Field[], To, Where[], Where2[])
    {
    new query[128];
    mysql_real_escape_string(Table, Table);
    mysql_real_escape_string(Field, Field);
    mysql_real_escape_string(Where, Where);
    mysql_real_escape_string(Where2, Where2);
    format(query, 128, "UPDATE `%s` SET `%s` = '%d' WHERE `%s` = '%s'", Table, Field, To, Where, Where2);
    mysql_query(query);
    return true;
    }
    stock mysql_SetString(Table[], Field[], To[], Where[], Where2[])
    {
    new query[128];
    mysql_real_escape_string(Table, Table);
    mysql_real_escape_string(Field, Field);
    mysql_real_escape_string(To, To);
    mysql_real_escape_string(Where, Where);
    mysql_real_escape_string(Where2, Where2);
    format(query, 128, "UPDATE `%s` SET `%s` = '%s' WHERE `%s` = '%s'", Table, Field, To, Where, Where2);
    mysql_query(query);
    return true;
    }
    stock mysql_SetFloat(Table[], Field[], Float:To, Where[], Where2[])
    {
    new query[128];
    mysql_real_escape_string(Table, Table);
    mysql_real_escape_string(Field, Field);
    mysql_real_escape_string(Where, Where);
    mysql_real_escape_string(Where2, Where2);
    format(query, 128, "UPDATE `%s` SET `%s` = '%f' WHERE `%s` = '%s'", Table, Field, To, Where, Where2);
    mysql_query(query);
    return true;
    }
    stock mysql_CheckAccount(playerid)
    {
    new Query[128],Name[MAX_PLAYER_NAME],count;
    GetPlayerName(playerid, Name, MAX_PLAYER_NAME);
    mysql_real_escape_string(Name, Name);
    format(Query, sizeof(Query), "SELECT * FROM `accounts` WHERE `Name` = '%s'", Name);
    mysql_query(Query);
    mysql_store_result();
    count = mysql_num_rows();
    mysql_free_result();
    return count;
    }
    stock mysql_ReturnPasswort(Name[])
    {
    new query[130], Get[130];
    mysql_real_escape_string(Name, Name);
    format(query, 128, "SELECT `passwort` FROM `accounts` WHERE `Name` = '%s'", Name);
    mysql_query(query);
    mysql_store_result();
    mysql_fetch_row(Get);
    mysql_free_result();
    return Get;
    }


    So, grundsätzlich habe ich ein Enum mit vorerst allen relevanten Daten erstellt.


    #define MAX_FIRMEN 100
    enum FirmenDaten
    {
    fID,
    fBesitzer[64],
    Float:fEntrancex,
    Float:fEntrancey,
    Float:fEntrancez,
    Float:fExitx,
    Float:fExity,
    Float:fExitz,
    fInt,
    fArt,
    fBank,
    fOpen,
    Text3D:flabel
    }
    new FirmenInfo[MAX_FIRMEN][FirmenDaten];


    Damit sollten Ingame die Firmen erstellt werden. //Wird natürlich noch mit wichtigen Infos ausgeschmückt.
    stock CreateFirma(playerid)
    {
    new query[256],Name[MAX_PLAYER_NAME];
    new Tag, Monat, Jahr, Stunde, Minute;
    getdate(Jahr,Monat,Tag); gettime(Stunde,Minute); GetPlayerName(playerid,Name,sizeof(Name));
    mysql_real_escape_string(Name,Name);
    format(query,sizeof(query),"INSERT INTO `firmen`(`Besitzer`) VALUES ('%s')",Name);
    mysql_query(query);
    return true;
    }


    Ich bitte nicht um eine komplett geschriebe Lösung sondern lediglich um Ansätze oder Hinweiße, sodass ich mit eurer Hilfe auf die Lösung komme und so noch etwas dazu lerne.


    MfG


    Spoiler anzeigen
    Edit: stock CreateFirma hinzugefügt
    Edit: Fehler im stock CreateFirma behoben

    Glaub keinem, der Dir sagt, dass Du nichts verändern kannst.
    Die, die das behaupten, haben nur vor der Veränderung Angst.
    Es sind dieselben, die erklären, es sei gut so, wie es ist.
    Und wenn Du etwas ändern willst, dann bist Du automatisch Terrorist (Die Ärzte - Deine Schuld)

    Einmal editiert, zuletzt von Ryan_Crawley ()

  • Ich nehme an, dass ich mit einer Schleife alle Unternehmen durchgehe und die Daten auslese bzw speichere.


    Allerdings weiß ich nicht, was ich in der Schleife eintragen muss.


    MfG

    Glaub keinem, der Dir sagt, dass Du nichts verändern kannst.
    Die, die das behaupten, haben nur vor der Veränderung Angst.
    Es sind dieselben, die erklären, es sei gut so, wie es ist.
    Und wenn Du etwas ändern willst, dann bist Du automatisch Terrorist (Die Ärzte - Deine Schuld)

  • Ich nehme an, dass ich mit einer Schleife alle Unternehmen durchgehe und die Daten auslese bzw speichere.


    Allerdings weiß ich nicht, was ich in der Schleife eintragen muss.


    MfG



    for(new i;i<MAX_FIRMEN;i++) //Schleife kleinre als alle Firmen? Bis 100 zählen, alle durchlaufen.
    {
    //Code
    }


    Engelsflügel am Astonkühler, als Schutz vor dem Teufel!

  • Laden.
    FirmenInfo[i][Besitzer] = mysql_GetString("firmen","Besitzer",i,FirmenInfo);


    Speichern
    mysql_SetString("firmen","Besitzer",i,FirmenInfo,FirmenInfo[i][Besitzer]);


    dann so??


    Edit:
    So gibts keinerlei Warnings

    Spoiler anzeigen
    stock LoadFirma()
    {
    for(new i;i<MAX_FIRMEN;i++)
    {
    FirmenInfo[i][fID] = mysql_SetInt("firmen","id",i,FirmenInfo);
    FirmenInfo[i][fBesitzer] = mysql_SetString("firmen","Besitzer",i,FirmenInfo);
    FirmenInfo[i][fEntrancex] = mysql_SetFloat("firmen","EingangX",i,FirmenInfo);
    FirmenInfo[i][fEntrancey] = mysql_SetFloat("firmen","EingangY",i,FirmenInfo);
    FirmenInfo[i][fEntrancez] = mysql_SetFloat("firmen","EingangZ",i,FirmenInfo);
    FirmenInfo[i][fExitx] = mysql_SetFloat("firmen","AusgangX",i,FirmenInfo);
    FirmenInfo[i][fExity] = mysql_SetFloat("firmen","AusgangY",i,FirmenInfo);
    FirmenInfo[i][fExitz] = mysql_SetFloat("firmen","AusgangZ",i,FirmenInfo);
    FirmenInfo[i][fInt] = mysql_SetInt("firmen","Interrior",i,FirmenInfo);
    FirmenInfo[i][fArt] = mysql_SetInt("firmen","Art",i,FirmenInfo);
    FirmenInfo[i][fBank] = mysql_SetInt("firmen","Bank",i,FirmenInfo);
    FirmenInfo[i][fOpen] = mysql_SetInt("firmen","Offen",i,FirmenInfo);
    }
    return 1;
    }
    stock SaveFirma()
    {
    for(new i;i<MAX_FIRMEN;i++)
    {
    mysql_SetInt("firmen","id",i,FirmenInfo,FirmenInfo[i][fID]);
    mysql_SetString("firmen","Besitzer",i,FirmenInfo,FirmenInfo[i][fBesitzer]);
    mysql_SetFloat("firmen","EingangX",i,FirmenInfo,FirmenInfo[i][fEntrancex]);
    mysql_SetFloat("firmen","EingangY",i,FirmenInfo,FirmenInfo[i][fEntrancey]);
    mysql_SetFloat("firmen","EingangZ",i,FirmenInfo,FirmenInfo[i][fEntrancez]);
    mysql_SetFloat("firmen","AusgangX",i,FirmenInfo,FirmenInfo[i][fExitx]);
    mysql_SetFloat("firmen","AusgangY",i,FirmenInfo,FirmenInfo[i][fExity]);
    mysql_SetFloat("firmen","AusgangZ",i,FirmenInfo,FirmenInfo[i][fExitz]);
    mysql_SetInt("firmen","Interrior",i,FirmenInfo,FirmenInfo[i][fInt]);
    mysql_SetInt("firmen","Art",i,FirmenInfo,FirmenInfo[i][fArt]);
    mysql_SetInt("firmen","Bank",i,FirmenInfo,FirmenInfo[i][fBank]);
    mysql_SetInt("firmen","Offen",i,FirmenInfo,FirmenInfo[i][fOpen]);
    }
    return 1;
    }


    aber wenn ich dann


    for(new i=0;i<MAX_FIRMEN;i++)
    {
    LoadFirma(i);
    }


    unter OnGameModeInit eingebe, kommen folgende Warnings.


    C:\Users\Freggel\Desktop\Samp Server\gamemodes\Roleplay.pwn(380) : warning 202: number of arguments does not match definition //Zeile unter OnGameModeInit Load Firma
    C:\Users\Freggel\Desktop\Samp Server\gamemodes\Roleplay.pwn(778) : error 048: array dimensions do not match // geht ab hier los unter stock LoadFirma FirmenInfo[i][fID] = mysql_SetInt("firmen","id",i,FirmenInfo);
    C:\Users\Freggel\Desktop\Samp Server\gamemodes\Roleplay.pwn(779) : error 035: argument type mismatch (argument 3)
    C:\Users\Freggel\Desktop\Samp Server\gamemodes\Roleplay.pwn(780) : error 048: array dimensions do not match
    C:\Users\Freggel\Desktop\Samp Server\gamemodes\Roleplay.pwn(781) : error 048: array dimensions do not match
    C:\Users\Freggel\Desktop\Samp Server\gamemodes\Roleplay.pwn(782) : error 048: array dimensions do not match
    C:\Users\Freggel\Desktop\Samp Server\gamemodes\Roleplay.pwn(783) : error 048: array dimensions do not match
    C:\Users\Freggel\Desktop\Samp Server\gamemodes\Roleplay.pwn(784) : error 048: array dimensions do not match
    C:\Users\Freggel\Desktop\Samp Server\gamemodes\Roleplay.pwn(785) : error 048: array dimensions do not match
    C:\Users\Freggel\Desktop\Samp Server\gamemodes\Roleplay.pwn(786) : error 048: array dimensions do not match
    C:\Users\Freggel\Desktop\Samp Server\gamemodes\Roleplay.pwn(787) : error 048: array dimensions do not match
    C:\Users\Freggel\Desktop\Samp Server\gamemodes\Roleplay.pwn(788) : error 048: array dimensions do not match
    C:\Users\Freggel\Desktop\Samp Server\gamemodes\Roleplay.pwn(789) : error 048: array dimensions do not match

    Glaub keinem, der Dir sagt, dass Du nichts verändern kannst.
    Die, die das behaupten, haben nur vor der Veränderung Angst.
    Es sind dieselben, die erklären, es sei gut so, wie es ist.
    Und wenn Du etwas ändern willst, dann bist Du automatisch Terrorist (Die Ärzte - Deine Schuld)

    5 Mal editiert, zuletzt von Ryan_Crawley ()