Admin setzen nur in der Datenbank?!?

In 10 Minuten startet der nächtliche Backupvorgang! Es kann währenddessen (ca. 10 Minuten) zu Einschränkungen bei der Nutzung des Forums kommen
Weitere Infos findet ihr im Thema Backup des Forums
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, ich habe ein Problem.


    Und zwar kann ich Admin Rang nur über Datenbank vergaben. Woran das liegt, weiß ich nicht.
    Denn ich gebe per Script jemanden Admin z.b durch meine Gutschein Codes / Befehl (setadmin).
    Aber wenn ich dann in der Datenbank F5 drücke, steht der Spieler immer noch auf 0.
    Und hat im Spiel trotzdem den Rang.


    Wenn ich reconnecte, bin ich wieder Spieler.



    if(dialogid==DIALOG_GUTSCHEIN)
    {
    if(response)
    {
    // Einlösen
    if(strlen(inputtext))
    {
    if(!strfind(inputtext,Gutscheine,true))
    {
    if(sInfo[playerid][eingeloggt]==0)return 1;
    sInfo[playerid][alevel]=7;
    SendClientMessage(playerid, FARBE_VERBOTEN, "Herzlichen Glückwunsch. Du hast einen * Admin Rang * Gutschein eingelöst. Du bist nun Stlv.Projektleiter!");
    return 1;
    }
    }
    else
    {
    SendClientMessage(playerid, FARBE_VERBOTEN, "Dieser Gutschein existiert nicht.");
    }
    }
    else
    {
    // Abbruch
    SendClientMessage(playerid, FARBE_VERBOTEN, "Du möchtest keinen Gutschein einlösen.");
    }
    }



    public OnPasswordResponse(playerid)
    {
    new welcome_text[128];
    new num_fields;
    new num_rows;
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid, name,sizeof(name));
    cache_get_data(num_rows,num_fields,dbhandle);
    if(num_rows==1)
    {
    // passwort richtig
    sInfo[playerid][eingeloggt] = 1;
    sInfo[playerid][level] = cache_get_field_content_int(0,"level",dbhandle);
    SetPlayerScore(playerid,sInfo[playerid][level]);
    sInfo[playerid][p_id] = cache_get_field_content_int(0,"id",dbhandle);
    SetPlayerMoney(playerid,cache_get_field_content_int(0,"money",dbhandle));
    sInfo[playerid][alevel] = cache_get_field_content_int(0,"alevel",dbhandle);
    format(welcome_text, sizeof(welcome_text),"Herzlich Willkommen, %s",name);
    SendClientMessageToAll(0x009F14FF, welcome_text);
    }
    else
    {
    // passwort falsch
    SendClientMessage(playerid, FARBE_ROT,"Dein Passwort ist falsch.");
    ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "iR","{FFFF00}Infinity Reallife{FFFFFF}!\n\nDein Account wurde in der Datenbank gefunden.\n\nBitte Logge dich ein:","Einloggen","Abbrechen");
    }
    return 1;
    }



    savePlayer(playerid)
    {
    if(sInfo[playerid][eingeloggt]==0)return 1;
    // Speichern level,money
    new query[256];
    format(query,sizeof(query),"UPDATE user SET level='%i',money='%i',alevel='%i'",sInfo[playerid][level],GetPlayerMoney(playerid),sInfo[playerid][alevel]);
    mysql_function_query(dbhandle,query,false,"","");
    return 1;
    }



    enum playerInfo {
    eingeloggt,
    level,
    p_id,
    alevel
    };



    new sInfo[MAX_PLAYERS][playerInfo];



    ocmd:setadmin(playerid,params[])
    {
    new pID,a_level;
    if(!isAdmin(playerid,7))return SendClientMessage(playerid, FARBE_VERBOTEN,"Du bist nicht berechtigt, den Befehl zu benutzen.");
    if(aDuty[playerid] == 0)return SendClientMessage(playerid, FARBE_GELB,"Du bist nicht im Dienst!");
    if(sscanf(params,"ui",pID,a_level))return SendClientMessage(playerid, -1,"Nutzung: /setadmin [ID] [RANG]");
    sInfo[pID][alevel]=a_level;
    savePlayer(pID);
    SendClientMessage(pID,FARBE_ROT,"Dein Adminrang wurde geändert.");
    SendClientMessage(playerid,FARBE_ROT,"Du hast den Adminrang geändert.");
    return 1;
    }

  • @Nils24hero



    [13:33:15] [WARNING] CMySQLConnection::Disconnect - no connection available
    [13:38:59] [WARNING] CMySQLConnection::Disconnect - no connection available
    [14:02:32] [WARNING] CMySQLConnection::Disconnect - no connection available
    [05:03:22] [WARNING] CMySQLConnection::Disconnect - no connection available
    [05:03:21] [WARNING] CMySQLConnection::Disconnect - no connection available
    [16:48:49] [WARNING] CMySQLConnection::Disconnect - no connection available
    [17:23:27] [WARNING] CMySQLConnection::Disconnect - no connection available
    [05:03:21] [WARNING] CMySQLConnection::Disconnect - no connection available
    [05:03:28] [WARNING] CMySQLConnection::Disconnect - no connection available
    [05:03:28] [WARNING] CMySQLConnection::Disconnect - no connection available
    [05:03:27] [WARNING] CMySQLConnection::Disconnect - no connection available
    [05:03:31] [WARNING] CMySQLConnection::Disconnect - no connection available
    [05:03:22] [WARNING] CMySQLConnection::Disconnect - no connection available
    [05:03:21] [WARNING] CMySQLConnection::Disconnect - no connection available
    [05:03:22] [WARNING] CMySQLConnection::Disconnect - no connection available
    [05:03:28] [WARNING] CMySQLConnection::Disconnect - no connection available
    [05:03:28] [WARNING] CMySQLConnection::Disconnect - no connection available
    [05:03:21] [WARNING] CMySQLConnection::Disconnect - no connection available
    [19:54:38] [WARNING] CMySQLConnection::Disconnect - no connection available
    [20:24:11] [WARNING] CMySQLConnection::Disconnect - no connection available


    Dieser Log ist scon älter, also nix neues, das habe ich schon behoben ^^


    @Dominik:)

    ocmd:setadmin(playerid,params[])
    {
    new pID,a_level;
    if(!isAdmin(playerid,7))return SendClientMessage(playerid, FARBE_VERBOTEN,"Du bist nicht berechtigt, den Befehl zu benutzen.");
    if(aDuty[playerid] == 0)return SendClientMessage(playerid, FARBE_GELB,"Du bist nicht im Dienst!");
    if(sscanf(params,"ui",pID,a_level))return SendClientMessage(playerid, -1,"Nutzung: /setadmin [ID] [RANG]");
    sInfo[pID][alevel]=a_level;
    ----------------------------> savePlayer(pID);
    SendClientMessage(pID,FARBE_ROT,"Dein Adminrang wurde geändert.");
    SendClientMessage(playerid,FARBE_ROT,"Du hast den Adminrang geändert.");
    return 1;
    }


    In Setadmin führe ich auch savePlayer aus, das selbe auch bei OnPlayerDisconnect.



    public OnPlayerDisconnect(playerid, reason)
    {
    // Spieler Speichern
    savePlayer(playerid);
    // Spieler Resetten
    resetPlayer(playerid);



    // Leave Nachricht
    new pname[MAX_PLAYER_NAME], string[128 + MAX_PLAYER_NAME]; // 22
    GetPlayerName(playerid, pname, sizeof(pname));
    format(string,sizeof(string), "{0FFF00}%s {005499}hat den Server verlassen" , pname);
    SendClientMessageToAll(0xFFFFFFFF, string);
    return 1;
    }



    savePlayer(playerid)
    {
    if(sInfo[playerid][eingeloggt]==0)return 1;
    // Speichern level,money
    new query[256];
    format(query,sizeof(query),"UPDATE user SET level='%i',money='%i',alevel='%i'",sInfo[playerid][level],GetPlayerMoney(playerid),sInfo[playerid][alevel]);
    mysql_function_query(dbhandle,query,false,"","");
    return 1;
    }


    So weit ich aber gemerkt habe, stimmt an savePlayer was nicht, denn nichts wird gespeichert.
    Es ist immer so, wie es in der datenbank eingetragen ist.

  • Code
    savePlayer(playerid)
    {
        if(sInfo[playerid][eingeloggt]==0)return 1;
        // Speichern level,money
        new query[256],naame[MAX_PLAYER_NAME];
        GetPlayerName(playerid,naame,sizeof(naame));
        format(query,sizeof(query),"UPDATE user SET level='%i',money='%i',alevel='%i' WHERE NAME='%s'",sInfo[playerid][level],GetPlayerMoney(playerid),sInfo[playerid][alevel],naame);
        mysql_function_query(dbhandle,query,false,"","");
        return 1;
    }

    Diesen NAME musst du noch anpassen falls du überhaupt in der Datenbank die namen speicherst...

  • Genau du musst der Datenbank sagen Speichere / Update x='%s' mit der bedingung WHERE y='%s'


    für prozent s kannst du auch einen integer oder ähnliches nehmen aber ohne bedingung funktioniert es nicht


    nur so als beispiel wie mein save player aufgebaut ist aber nicht für copy and paste
    sondern zum verstehen


    die DB_ID ist in meiner datenbank einmalig und somit kann nie entwas schief gehen