Beiträge von Jeffry

    Mache es so:
    public LoadFraktionDutyPoints()
    {
    mysql_function_query(dbhandle, "SELECT * FROM dutypoints", true, "OnFraktionDutyPointsLoad", "");
    return 1;
    }
    public OnFraktionDutyPointsLoad()
    {
    new num_rows, num_fields;
    cache_get_data(num_rows, num_fields, dbhandle);
    for(new i = 0; i < num_rows; i++)
    {
    DutyInfo[i][Duty_X] = cache_get_field_content_float(i, "DutyX", dbhandle);
    DutyInfo[i][Duty_Y] = cache_get_field_content_float(i, "DutyY", dbhandle);
    DutyInfo[i][Duty_Z] = cache_get_field_content_float(i, "DutyZ", dbhandle);

    CreatePickup(1247, 1, DutyInfo[i][Duty_X], DutyInfo[i][Duty_Y], DutyInfo[i][Duty_Z], 0);
    }
    return 1;
    }


    Das hier löschen:
    //Dutypoints laden
    for(new i=0; i<sizeof(DutyInfo); i++)
    {
    CreatePickup(1247, 1, DutyInfo[i+1][Duty_X], DutyInfo[i+1][Duty_Y], DutyInfo[i+1][Duty_Z], 0);
    /*if(i < 4)
    {
    //Cop-Duty-Points
    CreatePickup(1247, 1, DutyInfo[i][Duty_X], DutyInfo[i][Duty_Y], DutyInfo[i][Duty_Z], 0);
    Create3DTextLabel("/duty - In den Dienst gehen\n\
    /equip - Ausrüstung entnehmen\n\
    /clothes - Kleidung ändern", COLOR_RED, DutyInfo[i][Duty_X], DutyInfo[i][Duty_Y], DutyInfo[i][Duty_Z], 10, i, 1);
    }
    else
    {
    //Medic- & Ordnungsamt-Duty-Points
    CreatePickup(1239, 1, DutyInfo[i][Duty_X], DutyInfo[i][Duty_Y], DutyInfo[i][Duty_Z], 0);
    Create3DTextLabel("/duty - In den Dienst gehen\n\
    /clothes - Kleidung ändern", COLOR_RED, DutyInfo[i][Duty_X], DutyInfo[i][Duty_Y], DutyInfo[i][Duty_Z], 10, i, 1);
    }*/
    }

    gibt es eine Funktion womit man die TextDraws auf jede Resolution gleich anzeigen lassen kann?

    Nein, sowas gibt es nicht, da die Auflösung des Spielers nicht abgefragt werden kann.


    Was du maximal machen könntest (ziemlicher Aufwand), wäre, für jede Auflösung die Textdraws anzulegen und dem Spieler einen Befehl zu geben, mit dem er seine Auflösung festlegen kann.
    Anhand dessen bekommt er dann das der Auflösung entsprechende Textdraw angezeigt.

    Nimm das
    new idx;
    aus dem Befehl raus und schreibe es direkt unter OnPlayerCommandText hin, also direkt in der Zeile nach der ersten Klammer auf ({).


    Dazu dann noch direkt drunter
    new cmd[256];
    cmd = strtok(cmdtext, idx);


    Dann sieht dein Befehl so aus:
    if(strcmp(cmd, "/veh", true) == 0)

    Dann versuche es mal so:
    if(sscanf(params, "s", entry))return SendClientMessage(playerid, COLOR_GREY, "{247BA6}* Benutze {009933}/gov [Nachricht]");


    Das wäre dann, wenn du die Funktion anstatt dem Plugin nutzt.

    if(!sscanf(params, "s[96]", entry))return SendClientMessage(playerid, COLOR_GREY, "{247BA6}* Benutze {009933}/gov [Nachricht]");
    zu:
    if(sscanf(params, "s[96]", entry))return SendClientMessage(playerid, COLOR_GREY, "{247BA6}* Benutze {009933}/gov [Nachricht]");


    format(string, sizeof(string), "%s: %s", PlayerInfo[playerid][pRank], GetName(playerid), entry);
    zu:
    format(string, sizeof(string), "[%s] %s: %s", PlayerInfo[playerid][pRank], GetName(playerid), entry);
    Sofern pRank ein String ist, ansonsten [%d].

    Da reicht sogar eine Tabelle:


    FahrzeugID Name Preis
    411 Porsche 18000
    560 Audi 60000


    Zum auslesen:
    SELECT * FROM fahrzeuge WHERE FahrzeugID = 411;


    Beim enum, wenn du alle auslesen willst, dann ohne die where Bedingung, und per Schleife in das enum schreiben. So wie gewohnt, wie immer.

    Hat er nicht deutlich gesagt, dass er keine 150 Spalten will? (was absolut verständlich ist, korrekt ist und auch immer so gemacht werden sollte, denn Spaltenbezeichner mit Nummern dabei sind völliger Humbug [Normalisierung!])


    -------------------------


    Was du vor hast kann über zwei Tabellen gelöst werden. Das Vorgehen findet über die Normalisierung statt.
    Was willst du denn genau in der Tabelle für Werte speichern? Kannst du da mal ein zwei Beispiele machen, was du speichern willst?



    Anbei noch eine gut Erklärung zum Prinzip der Normalisierung von Datenbanken:
    https://hosting.1und1.de/digit…ql-lernen-leicht-gemacht/
    (siehe Punkt Normalisierung)



    Als Beispiel mal mit Alben und Liedern darauf:
    Anstatt eine Tabelle zu machen mit Albumname und Song1, Song2, etc macht es mehr Sinn, zwei Tabellen zu machen, Tabelle 1 enthält die AlbumID und den Name dazu. Tabelle 2 enthält als Primärschlüssel sowohl die AlbumID als auch die SongID und den Name des Songs.


    So sieht dann ein Eintrag aus:
    Tab1:
    5 / Mein Album


    Tab2:
    5 / 1 / Mein Song
    5 / 2 / Mein anderer Song


    Dies wären dann zwei Songs aus dem Album 5. Da der Primärschlüssel aus Album und Song ID besteht, kann kein doppelter Eintrag vorkommen.

    Sobald ich jemanden als pLeader 1 mit Onduty tötet und dieser Wanteds hat, wird dieser in den knast teleportiert. Kurze Zeit später, 1-2 Sek. Stirbt die Person erneut im Knast.

    Das liegt daran, dass du den Spieler bei OnPlayerDeath in den Knast setzt, das darf aber erst beim Spawn passieren.
    Setze daher an der Stelle wo du aktuell das Setzen in den Knast hast (in OnPlayerDeath) eine Spielervariable auf 1 für den Spieler:
    PlayerInfo[playerid][SpawnInKnast] = 1;


    Und frage diese bei OnPlayerSpawn ab, wenn diese 1 ist, setzt du ihn dort in den Knast.

    Hier geht was schief.


    Das Problem liegt hier:
    mysql_format(handle, query, 200, "INSERT INTO `timeban` (`Spieler`, `Grund`, `Admin`, `Dauer`) VALUES ('%e', '%e', '%e', '%d)", name, reason, admin, dauer);
    zu:
    mysql_format(handle, query, 200, "INSERT INTO `timeban` (`Spieler`, `Grund`, `Admin`, `Dauer`) VALUES ('%e', '%e', '%e', '%d')", name, reason, admin, dauer);
    (Ganz hinten nach %d ein ' eingefügt)