Beiträge von Austrianer

    Da ich gerade in der Schule bin und das bis 6. Kann ich dir leider nicht über Teamviewer helfen. Aber ich sag dir noch wie du Informationen aus Feldern ausliest.


    Erstmal erstellst du einen neuen String um dort immer die Werte einzulesen.
    new daten[128];


    Hier die Abfrage.


    format(query,sizeof(query),"SELECT * FROM `user` WHERE Name = '%s'",pName);
    mysql_query(query);
    Also mit der Select-Abfrage liefert er dir mal alle Werte aus der der Zeile wo der Name = pName. Das Limit 1 kannst du weglassen, ich weiß gar nicht ob das überhaupt hier funktioniert. Lass es mal weg, es sollte sowieso von der Registrierung her nicht gehen das es mehrere gleiche Namen gibt.


    Nun speicherst du die Werte.


    mysql_fetch_field("Adminlevel", daten);
    PlayerInfo[playerid][pAdmin] = strval(daten);
    mysql_fetch_field("Level", daten);
    PlayerInfo[playerid][pLevel] = strval(daten);
    Mit dem mysql_fetch_field holst du dir die Daten aus dem Feld und speicherst diese in den daten-String. Weiters machst du dann aus daten einen Int-Wert mit der strval-Methode und speicherst dies in dein enum.


    Falls du noch Fragen hast melde dich.

    Omg wie Kompliziert machst du das :S Hast du überhaupt eine Ahnung von MySQL ?(


    Du brauchst das nur einmal abfragen.


    format(query,sizeof(query),"SELECT * FROM `user` WHERE Name = '%s' LIMIT 1",pName);
    mysql_query(query);


    Damit kannst du nun alle anderen Werte abfragen, weil es gibt eh nur einen einzigen User mit dem Namen oder gar keinen. Dies erspart die alle anderen Querys. Das * bedeutet das du alle Werte dann davon bekommst. Versuchs mal damit.


    Und so speicherst du die Werte ab.


    mysql_fetch_field("Adminlevel", daten);
    PlayerInfo[playerid][pAdmin] = strval(daten);

    So ist es richtig.


    format(string,sizeof(string),"[Name: %s] [Level: %i] [Fraktion: %s]",SpielerName(playerid),GetPlayerScore(playerid),fraktname);


    fraktname ist ein String, jedoch hast du das so gemacht. das ist falsch.


    GetPVarInt(playerid,"Adminlevel",fraktname)


    Das sind schon 2 Fehler in einem. Erstens du brauchst nur zwei Parameter bei GetPVarInt und außerdem ist fraktname ein String.


    Deswegen ist bei dir immer eine Zahl gekommen.

    Mach mal ein paar Testausgaben wie


    printf("Test");


    Damit testest du ob diese Bedingung überhaupt ausgeführt wird oder ob der Befehl überhaupt ausgeführt wird usw.
    Dann siehst du deine Probleme leichter. Und kannst uns dann sagen was ausgeführt wird und was nicht.

    Du versuchst einen String in eine Int-PVariable zu speichern. Das funktioniert nicht.
    Grund ist ja ein String und keine Zahl :)


    SetPVarString(pID,"tbanGrund",grund);


    So funktioniert es.


    Das hier beim Laden.


    SetPVarString(playerid,"tbanGrund",dini_Get(Spielerdatei,"tbanGrund"));


    Das hier beim Speichern.


    new grund[128];
    GetPVarString(playerid,"tbanGrund", grund, sizeof(grund));
    dini_Set(Spielerdatei,"tbanGrund", grund);

    Ich hoffe du verwendest jetzt nicht enum, sondern PVar. Falls du enum verwendet, einfach die PVars umändern auf enums


    ocmd:punkt(playerid, params[]) {
    if(!isPlayerInFrakt(playerid, FID)) return SendClientMessage(playerid, ROT, "Du gehörst nicht dem Ordnungsamt an"); // Für FID die Fraktionsid des Ordnungsamtes angeben, das ist meine Methode um zu testen ob der Spieler in der Fraktion ist. Falls du eine andere hast, ersetzen.
    new pID, anzahl, grund[80], name[20], string[128];
    if (sscanf(params, "uis", pID, anzahl, grund)) return SendClientMessage(playerid, GRUEN, "/punkt [ID] [Anzahl] [Grund]");
    if (anzahl < 0 || anzahl > 15) return SendClientMessage(playerid, GRUEN, "Falsche Angabe für Punkte. (1-15)"); // Damit man nicht mehr Punkte als 15 setzen kann und nicht weniger als 0
    SetPVarInt(pID, "Punkte", GetPVarInt(pID, "Punkte")+anzahl); // Fügt der aktuellen Punktezahl die Anzahl der Punkte hinzu und wird gespeichert
    if (anzahl == 1) {
    format(string, sizeof(string), "Du hast von %s %i Punkt bekommen. Grund: %s", name, anzahl, grund);
    } else {
    format(string, sizeof(string), "Du hast von %s %i Punkte bekommen. Grund: %s", name, anzahl, grund);
    }
    SendClientMessage(pID, ROT, string); // Text für den Spieler wieviele Punkte er bekommen hat
    if (GetPVarInt(pID, "Punkte") >= 15) { // Wenn der Spieler mehr als oder gleich 15 hat, wird die Bedingung ausgeführt
    SetPVarInt(pID, "Lizens", 0); // 0 bedeutet die Lizens ist weg, 1 bedeutet er hat sie
    SetPVarInt(pID, "Punkte", 0); // Punkte wird wieder auf 0 gesetzt
    SendClientMessage(pID, ROT, "Deine Lizens wurde dir entzogen");
    }
    GetPlayerName(playerid, name, sizeof(name));
    return 1;
    }


    Habe es jetzt nicht ausprobiert, sollte aber funktionieren. Falls nicht melde dich bitte wieder über PN.

    3. Für die gleiche Fraktionsid darfst du nicht die ID von playerid setzen sonst bekommt er ja die ID als Fraktion die der andere als Spieler hat.


    SetPVarInt(pID,"Fraktion",GetPVarInt(playerid, "Fraktion"));


    So ist es richtig und er kommt in die gleiche Fraktion.

    Das IsPlayerConnected ist unnötig. Das kannst du weglassen.


    if(IsPlayerConnected(playerid) && !IsPlayerNPC(playerid)) {


    Mach mal eine Testausgabe.


    if(GetPVarInt(playerid,"Eingeloggt") == 1) { printf("Test");
    }


    Wenn es Test ausgibt auf deinem Server also in der RCON, dann wird die Bedingung ausgeführt. Wenn es nicht ausgegeben wird, dann ist der Fehler woanders.