Beiträge von Haxler

    huGGy:
    for(new _i=1;_i<MAX_FRAKS;_i++)
    wo wir wieder genau an dem Punkt wären, den ich vorher erläutert habe.
    FInfo[_i][iFrak] = _i;
    und das auch...


    Das Beste wäre meiner Meinung nach (sofern der auto_increment Wert sich nicht auf 0 setzen lässt)

    for(new id = 0; id < MAX_FRAKS; id++)
    // ...
    FInfo[id][iKasse] = mysql_GetInt("FInfo","iKasse","iFrak",id+1);
    // ...
    zu verwenden. Wobei du das beim Speichern dann auch machen musst:



    new query[128];
    format(query,sizeof(query),"UPDATE `FInfo` SET `iKasse` = '%d', `iDrogen` = '%d' `iWaffen` = '%d' WHERE `iFrak` = '%d'",
    FInfo[id][iKasse],FInfo[id][iDrogen], id+1);
    iFrak kannst du aus deiner Enum-Struktur löschen, da du eh keine Verwendung dafür hast. (Der Array-Index hat den gleichen Wert).
    Du musst nur beachten, dass die ID's in der Tabelle immer einen Wert höher sind (Arrays fangen bei 0 an, deine Einträge in der Tabelle bei 1), weshalb du +1 rechnen musst.

    [iFrak] ist eigentlich unnötig, da die ID gleichzeitig der Array-Index ist. Außerdem halte ich es für "unschön" einen Array zu erstellen und erst ab Index 1 zu verwenden. Falls der Wert von iFrak in der Tabelle nicht durch auto_increment zugewiesen wird, könntest du ihn auch bei 0 'starten' lassen, was dir das Laden erleichtern würde. Ich bin mir leider nicht sicher ob du den auto_increment Wert auch von 0 starten kannst.

    for(new id; id < MAX_FRAKS; id++)
    Deine Schleife fängt bei 0 an, deine Einträge in der Datenbank bei 1. Des Weiteren bin ich mir über den Sinn des Eintrags "id" nicht ganz bewusst. Wird dieser Wert überhaupt benötigt und wieso fängt er bei 220 an?


    FInfo[id][iKasse] = mysql_GetInt("FInfo","iKasse","iFrak",FInfo[id][iFrak]);
    FInfo[id][iFrak] wird in diesem Fall immer 0 sein, da kein Wert zugewiesen wurde. Versuch stattdessen id+1 zu verwenden.


    edit: Kleinigkeit verbessert :D

    Du könntest in OnPlayerSpawn per gettime den aktuellen TimeStamp herausfinden und speichern und wenn er stirbt mit zeit = gettime() - alterTimestamp die Sekunden errechnen, wie lange er gelebt hat.
    edit: Schreibfehler :D

    if(PlayerInfo[playerid][pAutoschein])
    trifft zu, wenn PlayerInfo[playerid][pAutoschein] nicht 0 ist.
    Um dir das ganze mit dem "bestanden/nicht bestanden" zu erleichtern, könntest du auch
    #define YN(%0) ((%0 == 1)?("Ja"):("Nein"))
    //..
    printf("Autoschein: %s",YN(PlayerInfo[playerid][pAutoSchein]));

    verwenden. Mein Beispiel würde "Autoschein: Ja" bzw "Autoschein: Nein" ausgeben, abhängig von PlayerInfo[playerid][pAutoschein].

    @Arendium: er kommt damit klar.


    ShowPlayerDialog(playerid,DIALOG_STATUS,DIALOG_STYLE_MSGBOX,"Statistik","Name: %s\nLevel: %d\nFraktion: %s","Schließen","",SpielerName(playerid),GetPlayerScore(playerid),frakname);
    ist das Problem, die letzten 3 Parameter (SpielerName(playerid),GetPlayerScore(playerid),frakname) sind an dieser Stelle falsch. Versuch den Text zuerst mit format zu formatieren.

    Zitat

    wenn ich die aktuelle FA nehme sind ja 180.10 und dann +180 hinschreibe, drehe ich mich um 180°, also wozu deine Komplizierte Variante mit floatsub?


    Wenn du Floats addierst bzw subtrahierst wird zwangsläufig floatadd bzw. floatsub ausgeführt, demnach ist " + " bei Floats das gleiche wie floatadd. Ob du jetzt +180° oder -180° rechnest kommt aufs gleiche raus.



    /*float.inc*/
    stock Float:operator+(Float:oper1, oper2)
    return floatadd(oper1, float(oper2));


    stock Float:operator-(Float:oper1, oper2)
    return floatsub(oper1, float(oper2));


    public OnPlayerConnect(playerid) {
    //...
    #define m_players HighestID
    }


    public OnPlayerDisconnect(playerid,reason) {
    //...
    #define m_players HighestID
    }


    was soll hieran bitte sinnvoll sein? Auch wenn du das #undef wieder entfernt hast ergibt es dennoch keinen Sinn.
    #edit:

    Zitat

    Das er nicht weiß wie die prä-prozessoren genau funktionieren

    genau darauf wollte ich hinaus. @Schwabbel guck dir am besten den Link an, den ich ein paar Beiträge früher gepostet habe :)

    Zitat

    Nein, das ist notwendig, da der Callback ja immer wieder aufgerufen wird und somit das Makro wieder undefined werden muss...

    und was wollte er mir damit sagen? :whistling:


    #define m_players 0
    //...
    #undef m_players
    #define m_players HighestID

    ist sinnlos, da du Defines nicht zur Laufzeit ändern kannst.
    #define m_players HighestID würde reichen.

    Die 1 bedeutet nur, dass der Timer wiederholt wird. Das ändert nichts an der Tatsache, dass deine Funktion "LV" einen Parameter benötigt. Mit SetTimer("LV",66,1); startest du einen Timer, der aber keinen playerid Parameter and die Funktion weitergibt.
    SetTimerEx("LV",66,1,"d",playerid); wäre in diesem Fall die richtige Lösung, um den Timer zu starten. Wobei ich trotzdem der Meinung bin, dass 66 ms zu schnell sind.

    Mit SetTimer wird das nur funktionieren, wenn du in deiner Funktion dann ne Schleife durchlaufen lässt und für alle Spieler abfragst, ob sie an dem Punkt sind. Alternativ kannst du auch mit SetTimerEx arbeiten, wo du eigene Parameter wie z.b. playerid übergeben kannst. (http://wiki.sa-mp.com/wiki/SetTimerEx). Der Code von lcp9 ist eine Mischung aus beidem und wird nicht funktionieren. Edit: Des Weiteren sind 66 ms viel zu schnell. Falls der Spieler nicht genau an dem Punkt sein muss reicht dir auch 1Sek oder mehr.