Dynamisches Konfigurationssystem | MySQL R5

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,


    Mein Name lautet CIBERKILLER.
    Und zwar brauche ich mal eure Hilfe.
    Ich habe ein Dynamisches Konfigurationssystem in meinem Gamemode in­te­g­riert.
    Es wird alles aus der Datenbank ausgelesen, aber es steht nichts im Dialog und der z.B Servername wird auch nicht gesetzt!


    Quellcode:


    @UpdateServerSettings(); @UpdateServerSettings(){
    print("test");
    new tmp_var[100][100], str[100];
    mysql_query("SELECT * FROM `Einstellungen` WHERE 1");
    mysql_store_result();
    while(mysql_retrieve_row())
    {
    mysql_fetch_field_row(tmp_var[0], "Servername");
    mysql_fetch_field_row(tmp_var[1], "Serverversion");
    mysql_fetch_field_row(tmp_var[2], "Serverrelease");
    mysql_fetch_field_row(tmp_var[3], "Serverkarte");
    mysql_fetch_field_row(tmp_var[4], "Servermode");
    }
    if(strcmp(tmp_var[1], Server[1], false)){
    format(Server[1], 100, "%s", tmp_var[1]);
    }
    if(strcmp(tmp_var[2], Server[2], false)){
    format(Server[2], 100, "%s", tmp_var[2]);
    }
    if(strcmp(tmp_var[0], Server[0], false)){
    format(Server[0], 100, "%s %s%s ", tmp_var[0], tmp_var[1], tmp_var[2]);
    format(str, 100, "hostname %s", Server[0]), SendRconCommand(str);
    }
    if(strcmp(tmp_var[3], Server[3], false)){
    format(Server[3], 100, "%s", tmp_var[3]);
    format(str, 100, "mapname %s", Server[3]), SendRconCommand(str);
    }
    if(strcmp(tmp_var[4], Server[4], false)){
    format(Server[4], 100, "%s", tmp_var[4]);
    format(str, 100, "gamemodetext %s", Server[4]), SendRconCommand(str);
    }
    mysql_free_result();
    }


    command(seinstellungen, playerid, params[])
    {
    if(sStats[playerid][Eingeloggt]==0)return SendClientMessage(playerid, Rot, "Du bist nicht Eingeloggt!");
    if(sStats[playerid][sADuty] == 0)return SendClientMessage(playerid, Rot, "Du bist nicht im Dienst!");
    if(sStats[playerid][sAdmin] < 7)return SendClientMessage(playerid, Rot, "Du bist entweder kein Administrator oder dein Rang ist zu niedrig!");
    new count[2], str[12], result, string[150]; count[0] = GetPlayers(), count[1] = GetServerVarAsInt("maxplayers");
    mysql_query("SELECT `Whitelist` FROM `Einstellungen`");
    mysql_store_result();
    result=mysql_fetch_int();
    mysql_free_result();
    if(!result){str="Deaktiviert";} else str="Aktiviert";
    format(string, sizeof(string), "Servername: %s\nServerversion: %s\nServerrelease: %s\nServerkarte: %s\nServermode: %s\nSpieler: %i/%i\nWhitelist: %s", Server[0], Server[1], Server[2], Server[3], Server[4], count[0], count[1], str);
    ShowPlayerDialog(playerid, DIALOG_SEINTELLUNGEN, DIALOG_STYLE_LIST, ".:Server Einstellungen:.", string, "Auswählen", "Schließen");
    return 1;
    }


    Whitelist Funktioniert einwandfrei!


    Ich lass die Variable so erstellen!
    new Server[10][100];


    Mit freundlichen Grüßen,


    CIBERKILLER

  • if(strcmp(tmp_var[4], Server[4], false)){


    du lädst das ganze aus und vergleichst es danach mit zum beispiel Server[4] ist das eine konstante oder ist der string leer sollte er leer sein
    so wird die funktion auch nicht aufgerufen sondern nur wenn die string nicht gleich sind.


    Ebenfalls hast du mehrere Zeilen in der Datenbank ? Falls nicht könntest du deinem code einiges gutes tun

  • Ich habe in der Tabelle Einstellungen nur ein Row(Zeile).
    Hör zu das System ist so aufgebaut:
    Es wird alles ausgelesen was in der Datenbank steht und einem string zugewiesen.
    Enspricht der der Hostname, frisch ausgelesen nicht mit dem String Server[0] überein, soll sich das ganze updaten.
    Hier mal der Dialog an sich!
    if(dialogid == DIALOG_SEINTELLUNGEN)
    {
    if(!response)return 1;
    //Servername: %s\nServerversion: %s\nServerrelease: %s\nServerkarte: %s\nServermode: %s\nSpieler: %i/%i\nWhitelist: %s
    switch(listitem)
    {
    case 0:ShowPlayerDialog(playerid, DIALOG_SEINSTELLUNGEN_HOST, DIALOG_STYLE_INPUT, ".:Servername ändern:.", "{FFFFFF}Gebe nun den neuen Servernamen ein!", "Einstellen", "");
    case 1:ShowPlayerDialog(playerid, DIALOG_SEINSTELLUNGEN_VERS, DIALOG_STYLE_INPUT, ".:Serverversion ändern:.", "{FFFFFF}Gebe nun die neue Serverversion ein!", "Einstellen", "");
    case 2:ShowPlayerDialog(playerid, DIALOG_SEINSTELLUNGEN_REAL, DIALOG_STYLE_INPUT, ".:Serverrelease ändern:.", "{FFFFFF}Gebe nun den neuen Serverrelease ein!", "Einstellen", "");
    case 3:ShowPlayerDialog(playerid, DIALOG_SEINSTELLUNGEN_MAPS, DIALOG_STYLE_INPUT, ".:Serverkarte ändern:.", "{FFFFFF}Gebe nun die neue Serverkarte an!", "Einstellen", "");
    case 4:ShowPlayerDialog(playerid, DIALOG_SEINSTELLUNGEN_MODE, DIALOG_STYLE_INPUT, ".:Servermode ändern:.", "{FFFFFF}Gebe nun den neuen Servermode ein!", "Einstellen", "");
    case 6:ShowPlayerDialog(playerid, DIALOG_SEINSTELLUNGEN_WHIT, DIALOG_STYLE_MSGBOX, ".:Serverwhitelist ändern:.", "{FFFFFF}Gebe nun ob die Whitelist vom Server aktiviert sein soll!", "Aktiviert", "Deaktiviert");
    }
    }
    if(dialogid == DIALOG_SEINSTELLUNGEN_HOST)
    {
    if(!response)return 1;
    if(!strlen(inputtext))return 1;
    mysql_real_escape_string(inputtext, inputtext);
    new string[60], query[65];
    format(query,sizeof(query),"UPDATE `Einstellungen` SET `Servername`='%s' WHERE 1", inputtext);
    mysql_query(query);
    ClearChat(playerid), PlayerPlaySound(playerid, 1139, 0.0, 0.0, 0.0);
    format(string,sizeof(string), "Du hast den Servername auf [%s] umgestellt.", inputtext);
    SendClientMessage(playerid, Weis, string);
    }
    if(dialogid == DIALOG_SEINSTELLUNGEN_VERS)
    {
    if(!response)return 1;
    if(!strlen(inputtext))return 1;
    mysql_real_escape_string(inputtext, inputtext);
    new string[60], query[65];
    format(query,sizeof(query),"UPDATE `Einstellungen` SET `Serverversion`='%s' WHERE 1", inputtext);
    mysql_query(query);
    ClearChat(playerid), PlayerPlaySound(playerid, 1139, 0.0, 0.0, 0.0);
    format(string,sizeof(string), "Du hast die Serverversion auf [%s] umgestellt.", inputtext);
    SendClientMessage(playerid, Weis, string);
    }
    if(dialogid == DIALOG_SEINSTELLUNGEN_REAL)
    {
    if(!response)return 1;
    if(!strlen(inputtext))return 1;
    mysql_real_escape_string(inputtext, inputtext);
    new string[60], query[65];
    format(query,sizeof(query),"UPDATE `Einstellungen` SET `Serverrelease`='%s' WHERE 1", inputtext);
    mysql_query(query);
    ClearChat(playerid), PlayerPlaySound(playerid, 1139, 0.0, 0.0, 0.0);
    format(string,sizeof(string), "Du hast den Serverrelease auf [%s] umgestellt.", inputtext);
    SendClientMessage(playerid, Weis, string);
    }
    if(dialogid == DIALOG_SEINSTELLUNGEN_MAPS)
    {
    if(!response)return 1;
    if(!strlen(inputtext))return 1;
    mysql_real_escape_string(inputtext, inputtext);
    new string[60], query[65];
    format(query,sizeof(query),"UPDATE `Einstellungen` SET `Serverkarte`='%s' WHERE 1", inputtext);
    mysql_query(query);
    ClearChat(playerid), PlayerPlaySound(playerid, 1139, 0.0, 0.0, 0.0);
    format(string,sizeof(string), "Du hast die Serverkarte auf [%s] umgestellt.", inputtext);
    SendClientMessage(playerid, Weis, string);
    }
    if(dialogid == DIALOG_SEINSTELLUNGEN_MODE)
    {
    if(!response)return 1;
    if(!strlen(inputtext))return 1;
    mysql_real_escape_string(inputtext, inputtext);
    new string[60], query[65];
    format(query,sizeof(query),"UPDATE `Einstellungen` SET `Servermode`='%s' WHERE 1", inputtext);
    mysql_query(query);
    ClearChat(playerid), PlayerPlaySound(playerid, 1139, 0.0, 0.0, 0.0);
    format(string,sizeof(string), "Du hast die Servermode auf [%s] umgestellt.", inputtext);
    SendClientMessage(playerid, Weis, string);
    }
    if(dialogid == DIALOG_SEINSTELLUNGEN_WHIT)
    {
    new query[65];
    format(query,sizeof(query),"UPDATE `Einstellungen` SET `Whitelist`=%i WHERE 1", response);
    mysql_query(query);
    ClearChat(playerid), PlayerPlaySound(playerid, 1139, 0.0, 0.0, 0.0);
    switch(response)
    {
    case 0:SendClientMessage(playerid,Weis,"Du hast die Whitelist Deaktiviert.");
    case 1:SendClientMessage(playerid,Weis,"Du hast die Whitelist Aktiviert.");
    }
    }

  • An sich macht dein code nicht viel Sinn, du rufst hier ebenso deine Funktion @UpdateServerSettings() nicht auf, daher wird auch nix geändert.
    auch die genutzten variabeln Server[0] werden nicht geändert



    new Server[5][100];



    @UpdateServerSettings();
    @UpdateServerSettings(){
    new tmp_var[5][100];
    mysql_query("SELECT * FROM `Einstellungen`;");
    mysql_store_result();


    mysql_fetch_field_row(Server[0], "Servername");
    mysql_fetch_field_row(Server[1], "Serverversion");
    mysql_fetch_field_row(Server[2], "Serverrelease");
    mysql_fetch_field_row(Server[3], "Serverkarte");
    mysql_fetch_field_row(Server[4], "Servermode");
    new str[100];
    format(Server[0], 100, "%s %s%s ", Server[0], Server[1], Server[2]);
    format(str, 100, "hostname %s", Server[0]), SendRconCommand(str);
    format(str, 100, "mapname %s", Server[3]), SendRconCommand(str);
    format(str, 100, "gamemodetext %s", Server[4]), SendRconCommand(str);
    return mysql_free_result();
    }


    Das würde schon reichen


    Nach deinen UPDATE -queries kannst du die funktion nochmal erneut aufrufen oder du passt das direkt bei OnDialogResponse an.

  • kleiner tipp es wird aufgerufen...
    test wird geprintet, und so wie dus hast möchte ich es nicht, da er dann alles ändert aber keine veränderung da ist:


    new query[48];
    format(query,sizeof(query),"SELECT `Servername` FROM `Einstellungen` WHERE 1"), mysql_query(query),
    mysql_store_result(),
    mysql_fetch_row(query),
    mysql_free_result();
    if(strlen(query) != 0 && STimer == 255){
    STimer=SetTimer("@UpdateServerSettings", 4500, true);
    }
    else STimer=255;

  • So fern du nicht vor hast die Daten via phpmyadmin oder sonst einem Programm zu ändern wäre das egal.
    Da du die Daten dahe rnur 1 mal auslesen müsstest.


    Du könntest ebenfalls das ganze schon via mysql checken und noch eine extra Spalte mit Aenderung hinzufügen , welche du auf 1 setzt, wenn du ein Datensatz geändert hast.


    Aber du kannst ja ein print hier setzen

    if(strcmp(tmp_var[1], Server[1], false)){
    print("test 2");
    format(Server[1], 100, "%s", tmp_var[1]);
    }


    um zu checken ob das aufgerufen wird beim hochfahren des Servers