Fraktions System Angefangen

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
  • Nabend.
    Ich habe jetzt mal ein Fraktion System angefangen.
    Habe es so Versucht umzusetzen:



    Fraktion #Define
    //Fratkionen//#define FRAKTION_NAME_1 "LSPD"#define FRAKTION_NAME_2 "Sanitäter"


    Fraktion Enum
    enum fDaten{f_ID,fLeader, ///Erstellt die Spielervariable pLeaderfMember,fAdmin,eingeladen}new fInfo[MAX_PLAYERS][fDaten]


    Makeleader Befehl
    CMD:makeleader(playerid,params[])
    {
    if(PlayerInfo[playerid][pAdmin]>=1 && PlayerInfo[playerid][pFraktion]>=1)return SendClientMessage(playerid, 0x00FF00,"Du kannst diesen Befehl nicht ausführen");
    {
    new frakid, p_ID, name[MAX_PLAYER_NAME], string[128];
    if(sscanf(params,"us", p_ID, frakid))return SendClientMessage(playerid, 0x00FF00, "[ Info ]Benutzung: /makeleader [id][frakid]");
    GetPlayerName(playerid, string, MAX_PLAYER_NAME);
    GetPlayerName(p_ID, name, MAX_PLAYER_NAME);
    PlayerInfo[p_ID][pFraktion] = frakid;
    format(string, sizeof(string), "[ ! ]Admin: %s hat %s zum Leader einer Fraktion: %d gemacht!", string, name, GetFraktionRang(p_ID));
    mysql_format(handle, string, sizeof(string), "UPDATE `users` SET `fraktion` = '%d' WHERE `id` = '%d'", frakid, PlayerInfo[p_ID][p_id]);
    mysql_pquery(handle, string);
    SendClientMessage(playerid, -1, string);
    }
    return 1;
    }


     OnUserRegister(playerid)
    forward OnUserRegister(playerid);
    public OnUserRegister(playerid)
    {
    //Der Spieler wurde in die Datenbank eingetragen, es wird die id ausgelesen
    PlayerInfo[playerid][p_id] = cache_insert_id();
    PlayerInfo[playerid][pLoggedIn] = true;
    PlayerInfo[playerid][pAdmin] = 0;
    PlayerInfo[playerid][pKills] = 0;
    PlayerInfo[playerid][pBan] = 0;
    PlayerInfo[playerid][pMoney] = 10000;
    GivePlayerMoney(playerid, 10000);
    PlayerInfo[playerid][pLevel] = 1;
    PlayerInfo[playerid][pDeaths] = 0;
    //PlayerInfo[playerid][pFraktion] = 0;
    fInfo[playerid][f_ID] = 0;
    fInfo[playerid][fLeader] = 0;
    fInfo[playerid][fMember] = 0;
    fInfo[playerid][fAdmin] = 0;
    fInfo[playerid][eingeladen] = 0;
    SendClientMessage(playerid, 0x00FF00FF, "[Konto] Registration erfolgreich.");
    return 1;
    }


    OnUserLogin

    public OnUserLogin(playerid)
    {
    //Query wurde ausgeführt und das Ergebnis im Cache gespeichert
    new rows;
    cache_get_row_count(rows);
    if(rows == 0)
    {
    //Der Spieler hat ein falsches Passwort eingegeben
    ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Anmeldung", "Bitte logge Dich ein:\n{FF0000}Falsches Passwort!", "Ok", "Abbrechen");
    }
    else
    {
    //Es existiert ein Ergebnis, das heißt der Spieler hat das richtige Passwort eingegeben
    //Wir lesen nun die erste Zeile des Caches aus (ID 0)
    cache_get_value_name_int(0, "id", PlayerInfo[playerid][p_id]);
    cache_get_value_name_int(0, "level", PlayerInfo[playerid][pLevel]);
    cache_get_value_name_int(0, "money", PlayerInfo[playerid][pMoney]);
    cache_get_value_name_int(0, "kills", PlayerInfo[playerid][pKills]);
    cache_get_value_name_int(0, "deaths", PlayerInfo[playerid][pDeaths]);
    cache_get_value_name_int(0, "ban", PlayerInfo[playerid][pBan]);
    cache_get_value_name_int(0, "admin", PlayerInfo[playerid][pAdmin]);
    //cache_get_value_name_int(0, "fraktion", PlayerInfo[playerid][pFraktion]);
    cache_get_value_name_int(0, "ID", fInfo[playerid][f_ID]);
    cache_get_value_name_int(0, "Leader", fInfo[playerid][fLeader]);
    cache_get_value_name_int(0, "Admin", fInfo[playerid][fAdmin]);
    cache_get_value_name_int(0, "Member", fInfo[playerid][fMember]);
    cache_get_value_name_int(0, "eingeladen", fInfo[playerid][eingeladen]);
    PlayerInfo[playerid][pLoggedIn] = true;
    SendClientMessage(playerid, 0x00FF00FF, "[Konto] Eingeloggt.");
    GivePlayerMoney(playerid, PlayerInfo[playerid][pMoney]);
    }
    return 1;
    }


    SafeUserStats

    stock SaveUserStats(playerid)
    {
    //Wenn der Spieler nicht eingeloggt ist, dann speichere seine Statistiken nicht
    if(!PlayerInfo[playerid][pLoggedIn]) return 1;


    //Ansonsten speichere sie
    new query[1024];
    mysql_format(handle, query, sizeof(query), "UPDATE `users` SET `level` = '%d', `money` = '%d', `kills` = '%d', `deaths` = '%d',`ban` = '%d', `admin` = '%d', `fraktion` = '%d' WHERE `id` = '%d'",
    PlayerInfo[playerid][pLevel], PlayerInfo[playerid][pMoney], PlayerInfo[playerid][pKills], PlayerInfo[playerid][pDeaths], PlayerInfo[playerid][p_id], PlayerInfo[playerid][pBan], PlayerInfo[playerid][pAdmin], PlayerInfo[playerid][pFraktion]);
    mysql_format(handle, query, sizeof(query), "UPDATE `fraktion` SET `Leader` = '%d', `Admin` = '%d', `Member` = '%d', `eingeladen` = '%d' WHERE `id` = '%d'",fInfo[playerid][fLeader], fInfo[playerid][fAdmin], fInfo[playerid][fMember], fInfo[playerid][eingeladen], fInfo[f_ID]);


    //Das Query wird abgesendet
    mysql_pquery(handle, query);
    return 1;
    }
    Hab auch extra eine Datenbank für Fratkion erstellt
    Leider wird dort nix Gespeichert und der Befehl CMD:makeleader scheint auch nicht richtig zu Funktioniere.


    Findet ihr dort irgendwo einen Fehler?

    Einmal editiert, zuletzt von PlayEasy ()

  • Ich hab mal die gröbsten Fehler aus deinem /makeleader Befehl entfernt.


    CMD:makeleader(playerid,params[])
    {
    if(PlayerInfo[playerid][pAdmin]>=1 && PlayerInfo[playerid][pFraktion]>=1)
    {
    new frakid, p_ID, name[MAX_PLAYER_NAME], string[128];
    if(sscanf(params,"ui", p_ID, frakid))return SendClientMessage(playerid, 0x00FF00FF, "[ Info ]Benutzung: /makeleader [id][frakid]");
    GetPlayerName(playerid, string, MAX_PLAYER_NAME);
    GetPlayerName(p_ID, name, MAX_PLAYER_NAME);
    PlayerInfo[p_ID][pFraktion] = frakid;
    mysql_format(handle, string, sizeof(string), "UPDATE `users` SET `fraktion` = '%d' WHERE `id` = '%d'", frakid, PlayerInfo[p_ID][p_id]);
    mysql_pquery(handle, string);
    format(string, sizeof(string), "[ ! ]Admin: %s hat %s zum Leader einer Fraktion: %d gemacht!", string, name, GetFraktionRang(p_ID));
    SendClientMessage(playerid, -1, string);
    } else SendClientMessage(playerid, 0x00FF00FF,"Du kannst diesen Befehl nicht ausführen");
    return 1;
    }

  • Ich hab mal die gröbsten Fehler aus deinem /makeleader Befehl entfernt.


    CMD:makeleader(playerid,params[]){ if(PlayerInfo[playerid][pAdmin]>=1 && PlayerInfo[playerid][pFraktion]>=1) { new frakid, p_ID, name[MAX_PLAYER_NAME], string[128]; if(sscanf(params,"ui", p_ID, frakid))return SendClientMessage(playerid, 0x00FF00FF, "[ Info ]Benutzung: /makeleader [id][frakid]"); GetPlayerName(playerid, string, MAX_PLAYER_NAME); GetPlayerName(p_ID, name, MAX_PLAYER_NAME); PlayerInfo[p_ID][pFraktion] = frakid; mysql_format(handle, string, sizeof(string), "UPDATE `users` SET `fraktion` = '%d' WHERE `id` = '%d'", frakid, PlayerInfo[p_ID][p_id]); mysql_pquery(handle, string); format(string, sizeof(string), "[ ! ]Admin: %s hat %s zum Leader einer Fraktion: %d gemacht!", string, name, GetFraktionRang(p_ID)); SendClientMessage(playerid, -1, string); } else SendClientMessage(playerid, 0x00FF00FF,"Du kannst diesen Befehl nicht ausführen"); return 1;}

    Werde es später mal testen.
    Wo hatte ich den genau da Fehler ?
    Damit ich das für die Zukunft weiß.

    • bei der if Abfrage hattest du die Fehlermeldung direkt hinten dran als return, obwohl es drunter als else gehört
    • im sscanf hast du frakid als string deklariert
    • die Farbcodes waren unvollständig
    • mit SendClientMessage hättest du die MySQL query und nicht die Chatmeldung ausgegeben
  • Danke für die Erklärung.
    Habe es jetzt soweit hinbekommen das es Klappt.
    Das einzige was noch nicht Funktioniert ist, das es richtig Gespeichert wird.


    Und zwar soll es in MySqL in der Kategorie: Fraktion gespeichert werden.
    Leider funktioniert das nicht richtig.


    SavefToDB(playerid)

    SaveFToDB(playerid)
    {
    new string[128];
    //mysql_format(handle, string, sizeof(string), "INSERT INTO fraktion(Leader, Admin, Member, eingeladen, id, fraktion) VALUES('%d', '%d, '%s','%d','%d','%d')", fInfo[playerid][fLeader], fInfo[playerid][fAdmin],fInfo[playerid][fMember],fInfo[playerid][eingeladen],fInfo[playerid][f_ID],fInfo[playerid][fFraktion]);
    mysql_format(handle, string, sizeof(string), "INSERT INTO `fraktion`(`leader`, `admin`, `Member`, `eingeladen`, `id`, `fraktion`) VALUES ([value-1],[value-2],[value-3],[value-4],[value-5],[value-6])",fInfo[playerid][fLeader], fInfo[playerid][fAdmin],fInfo[playerid][fMember],fInfo[playerid][eingeladen],fInfo[playerid][f_ID],fInfo[playerid][fFraktion]);
    mysql_pquery(handle, string);
    return 1;
    }


    Habe extra zum Speicher einen Stock erstellt. Leider werden die Daten nicht Gespeichert.
    Die Struktur der Datenbank sieht so aus: db.PNG
    SafeUserStats(playerid)

    stock SaveUserStats(playerid)
    {
    //Wenn der Spieler nicht eingeloggt ist, dann speichere seine Statistiken nicht
    if(!PlayerInfo[playerid][pLoggedIn]) return 1;


    //Ansonsten speichere sie
    new query[1024];
    mysql_format(handle, query, sizeof(query), "UPDATE `users` SET `level` = '%d', `money` = '%d', `kills` = '%d', `deaths` = '%d',`ban` = '%d', `admin` = '%d', `fraktion` = '%d' WHERE `id` = '%d'",
    PlayerInfo[playerid][pLevel], PlayerInfo[playerid][pMoney], PlayerInfo[playerid][pKills], PlayerInfo[playerid][pDeaths], PlayerInfo[playerid][p_id], PlayerInfo[playerid][pBan], PlayerInfo[playerid][pAdmin], PlayerInfo[playerid][pFraktion]);
    SaveFToDB(playerid);


    //Das Query wird abgesendet
    mysql_pquery(handle, query);
    return 1;
    }


    Gespeichert wird aber nix...
    Weiß einer wo der Fehler liegt?


    Keine Sorge ich weiß das diese Art von Variante INSERT INTO `fraktion`(`leader`, `admin`, `Member`, `eingeladen`, `id`, `fraktion`) VALUES ([value-1],[value-2],[value-3],[value-4],[value-5],[value-6])",fInfo[playerid][fLeader], fInfo[playerid][fAdmin],fInfo[playerid][fMember],fInfo[playerid][eingeladen],fInfo[playerid][f_ID],fInfo[playerid][fFraktion]); Komisch ist ^^

  • Bei deinem stock SaveUserStats hast du im mysql_format die Variablen vertauscht.
    Im stock SafeFToDB erzeugst du jedes mal einen neuen Tabelleneintrag. (Ich glaube nicht, dass du das willst)

    Wo genau hab ich den die Variablen vertauscht?
    Hab ich grade auch gemerkt das ich mit INSERT immer neue Einträge erstelle ^^
    Hab es grade nochmals geändert.
    Aber leider werden die Daten noch immer nicht Gespeichert.

  • mysql_format(handle, query, sizeof(query), "UPDATE `users` SET `level` = '%d', `money` = '%d', `kills` = '%d', `deaths` = '%d',`ban` = '%d', `admin` = '%d', `fraktion` = '%d' WHERE `id` = '%d'", PlayerInfo[playerid][pLevel], PlayerInfo[playerid][pMoney], PlayerInfo[playerid][pKills], PlayerInfo[playerid][pDeaths], PlayerInfo[playerid][p_id], PlayerInfo[playerid][pBan], PlayerInfo[playerid][pAdmin], PlayerInfo[playerid][pFraktion]);
    Die ID gehört natürlich an den Schluss