Beiträge von Kaliber

    Irgendwie bringst du da den Index für VehicleInfo ständig durcheinander.


    Mal nutzt du FrakFahrzeugInfo[vehicleid][frakfahrzeug_VehicleID] und mal nur die vehicleid...


    Was willst du denn jetzt nutzen?


    Kein wunder dass da nichts funktioniert ^^


    Und der String ist auch am Anfang leer, du kannst kein leeres 3DTextLabel erstellen :c



    Soo könntest du es z.B. machen..


    Aber ich weiß nicht genau, was genau du machen willst bzw welche Indizes richtig sind, da ich deinen Code nicht kenne ^^

    Abgesehen davon, dass dein Code nur so vor Redundanz und Unübersichtlichkeit strotzt, liegt der Fehler vermutlich daran, dass du einfach 2x gespawnt wirst.


    Nach OnPlayerRequestClass wird er vermutlich gespawnt, das musst du abfangen, damit das nicht 2x aufgerufen wird.

    Das geht so nicht, da du sonst eine 4 Dimensionale Variable benötigen würdest und das kann dieser Pawn-Compiler nicht.


    Es gibt ein Update, der kann das.


    Alternativ, musst du das in eine andere Variable tun, sowas wie:


    new FrakRang[MAX_FRAKS][MAX_RÄNGE][MAX_RANG_LEN];

    Jetzt werden alle als Offline angezeigt obwohl man Online ist und bei dem ersten in der Liste wird der Rang nicht angezeigt

    Ahja, stimmt, machs mal so:



    C
    stock GetPlayerFromAdminName(const pName[])
    {
        new playerid,n[MAX_PLAYER_NAME] = "[ARP]";
        strcat(n,pName),sscanf(n, "u", playerid);
        return (playerid==INVALID_PLAYER_ID) ? GetPlayerIdFromName(pName) : playerid;
    }

    Und es wird kein Rang angezeigt?


    Das liegt dann daran, dass er einen ungültigen besitzt?!


    Welchen Wert hat denn der Rang in der DB, prüf das doch mit deinem Rang-System gegen.

    Das gleiche kannst dir ja dann noch einmal für ein Motorrad Basteln, dann hast eine Funktion ohne Include.

    So kann man das zwar lösen, aber eigentlich ist die Funktion nicht so gut.


    Das liegt daran, dass:


    • Immer eine Schleife durchlaufen werden muss, je mehr Fahrzeuge, desto länger dauert es.
    • Du jedes mal eine Model Abfrage machst in der Schleife.

    Besser wäre es da mit switch zu arbeiten, was als Jump-Table fungiert.


    Dort wird dann direkt hingesprungen oder nicht.


    Immer O(1), anstatt O(n) und du hast nur eine Model Abfrage (wobei es schon sinnvoller wäre, das Modell im eigentlichen Code in einer Variable zu speichern und dann nur zu übergeben).


    Code sähe dann so aus:


    C
    stock IsVehicleBoat(vehicleid)
    {
        switch(GetVehicleModel(vehicleid))
        {
            case 472, 473, 493, 495, 484, 430, 453, 452, 446, 454, 595:  return 1;
        }
        return 0;
    }


    Eventuell noch 2 Dinge als Info:


    1. Es ist nicht schlimm Includes zu inkludieren, wenn sie richtig geschrieben sind. Sprich überall stock oder defines verwendet wurden. Falls man diese dann nämlich nicht nutzt, werden alle Dinge die nicht benötigt werden vom Compiler ignoriert und es gelangt nix unerwünschtes in die .amx Datei.


    2.


    new Boat[] = { 472, 473, 493, 495, 484, 430, 453, 452, 446, 454, 595};

    So denkt der Compiler, dass es sich hierbei um eine Variable handelt.
    Sprich, dass eventuell später (während der Server läuft) noch Dinge geändert werden, was ja aber nicht der Fall ist.
    Zeig ihm das, indem man es als const deklariert, dadurch kann der Compiler das besser optimieren.


    stock const Boat[] = { 472, 473, 493, 495, 484, 430, 453, 452, 446, 454, 595};




    @Allrounder18
    Schreib es mal nur so:



    In der Funktion GetPlayerStatus ändere mal die String-Größe von 500 auf 32.


    Selbst 32 wäre noch zu groß, 16 würde da vollkommen ausreichen, musst die nicht immer so riesig machen xD


    Und nutze da nicht GetPlayerIdFromName, sondern meine Funktion:



    C
    stock GetPlayerFromAdminName(const pName[])
    {
        new playerid,n[MAX_PLAYER_NAME] = "[ARP]";
        strcat(n,pName),sscanf(n, "u", playerid);
        return playerid;
    }