Beiträge von Jeffry

    Die Grafik im Wiki ist falsch. Richtig ist:
    MaxY
    v
    MinX > *-------------
    | |
    | gangzone |
    | center |
    | |
    -------------* < MaxX
    ^
    MinY


    Oder einfacher:
    MaxY
    v
    -------------* < MaxX
    | |
    | gangzone |
    | center |
    | |
    MinX > *-------------
    ^
    MinY

    Es geht um die Textdraws in der forschleife. Diese erstellst du für jeden Spieler, also MAX_PLAYERS mal, da bist du extrem schnell am Limit.
    Nutze dafür PlayerTextDraws und erstelle diese bei OnPlayerConnect.

    Die Textdraws wurden nicht erstellt, daher siehst du sie auch nicht.
    Ich vermute, dass du das Limit an Textdraws überschritten hast.


    Wenn du im Code Textdraws hast, die du pro Spieler erstellst, nutze dort PlayerTextDraws anstatt normale Textdraws, dann sollte das nicht passieren.

    Lass dir mal den Wert der Textdraws ausgeben, nach der Erstellung, ob diese überhaupt erstellt werden:
    printf("Textdraws: %d & %d", _:GfSystem[Zone][GFTextDraw1], _:GfSystem[Zone][GFTextDraw2]);

    Super! :)


    Denoch finde ich die Include auch nicht schlecht wenn man in sein GM platz sparen möchte

    Wie gesagt, in dem Fall dann eine Sammel Include nutzen, in die du alles auslagerst, was du aus Platzgründen nicht im Gamemode haben willst. Das ist besser als jede Funktion in eine eigene Include zu packen, spart den Hook Wahnsinn und ist deutlich sauberer.

    if(dialogid == DIALOG_VERWAHRSTELLE_FV)
    {
    if(response)
    {
    new count = 0;
    for(new fV;fV<MAX_FVEHS;fV++)
    {
    if(Spieler[playerid][pFraktion] == fVehicle[fV][vehFraktion])
    {
    if(fVehicle[fV][vehAbgeschleppt] == 1)
    {
    if(count == listitem)
    {
    //Fahrzeug fV ausgewählt zum Freikaufen
    return 1;
    }
    count++;
    }
    }
    }
    }
    return 1;
    }

    ocmd:freefrakcar(playerid, params[])
    {
    if(Spieler[playerid][pRank] < RANG_LEADER)return SendClientMessage(playerid, COLOR_WHITE, ERROR_FRAKTION);
    if(IsPlayerInRangeOfPoint(playerid, 5.0, 2262.1243, 2042.5981, 10.8203))
    {
    new count = 0;
    new string[1550] = "Fahrzeug\tAbschlepper\tKaution\n";
    for(new fV;fV<MAX_FVEHS;fV++)
    {
    if(Spieler[playerid][pFraktion] == fVehicle[fV][vehFraktion])
    {
    if(fVehicle[fV][vehAbgeschleppt] == 1)
    {
    format(string, sizeof(string), "%s%s\t%s\t%d$\n", string, VehicleName[fVehicle[fV][modelid]-400], fVehicle[fV][vehAbgeschlepptVon], fVehicle[fV][vehKaution]);
    count++;
    }
    }
    }
    if(count) ShowPlayerDialog(playerid, DIALOG_VERWAHRSTELLE_FV, DIALOG_STYLE_TABLIST_HEADERS, "Verwahrstelle", string, "Auswählen","Schließen");
    else SendClientMessage(playerid, COLOR_WHITE, "{AFAFAF}Es befindet sich kein Fraktions Fahrzeug bei der Verwahrstelle.");
    return 1;
    }
    return SendClientMessage(playerid, COLOR_WHITE, "{AFAFAF}Du befindest dich nicht bei der Verwahrstelle.");
    }

    Naja, dafür eine Include zu schreiben, erachte ich als doch wenig sinnvoll, vor allem weil es eigentlich einen passenden Thread für etwas in dieser Größe gibt: https://breadfish.de/index.php…%BCtzliche-codeschnipsel/
    Wenn jetzt jeder anfangen würde, eine einzige Funktion als Include zu basteln, dann herrscht das reine Chaos. Zudem eine einzelne Funktion ohne große Logik dahinter als Standalone-Include sinnlos ist.
    Davon abgesehen ist das ja bei weitem nichts neues, nur weil es jetzt in einer Include steht, macht es das nicht besser.


    Für solche Schnipsel macht man sich eine Sammel-Include und gut ist. Das ganze Gehooke (nur damit es überaus kompliziert aussieht mit den ganzen Sonderzeichen) kann man sich auch sparen.


    Außerdem noch zwei Punkte zum Code:
    1. Das Array drunk sollte nicht global sondern nur local static deklariert werden, es wird ja nur dort genutzt.
    2. Im Loop sollte noch abgefragt werden, ob der Spieler auch online ist, sonst führst du den Code auch für Spieler durch, die nicht online sind, das ist kein gutes Doing.



    Ich empfehle Folgendes:
    OnGameModeInit:
    SetTimer("FPS", 251, true);


    Und das hier in eine Sammel-Include (oder die Deklaration unter die normalen Include und den public ganz unten in den Gamemode).
    #define GetPlayerFPS(%0) public_fps{%0}
    new public_fps[MAX_PLAYERS char];


    forward FPS();
    public FPS()
    {
    static olddrunk[MAX_PLAYERS], d, fps;
    for(new i = GetPlayerPoolSize(); i > -1; i--)
    {
    if(!IsPlayerConnected(i)) continue;
    d = GetPlayerDrunkLevel(i);
    if(d < 100) SetPlayerDrunkLevel(i,2000);
    fps = olddrunk[i] - d;
    if(fps > 0) public_fps{i} = fps;
    olddrunk[i] = d;
    }
    return 1;
    }


    Mehr ist es nicht. Da braucht es keine Include.


    PS: OnPlayerUpdate wird nicht über 1000x pro Sekunde aufgerufen, im Gegenteil, sehr weit darunter (in der Regel zwischen 30 und 50 mal).

    er aht das 2x beim erstellen somit hat er tuning[17] bei factioncardbidoder so

    Ahh, ich werd' irre, darauf habe ich gar nicht geachtet! Gut gesehen, das ist es. Danke :)


    PS: Um einen solchen Fall zukünftig zu vermeiden, empfehle ich die Nutzung von mysql_format anstatt nur format, das würde in dem Fall eine Warnung ausgeben.

    Versuch mal, einfach nur aus Testzwecken folgendes:

    Das wäre ein Workaround, der das eigentliche Problem aber nicht behebt. Das wird funktionieren, wollte ich so aber vermeiden vorzuschlagen, da der Wert ja irgendwo zuvor aus der Variable gelöscht wird. Die Stelle gilt es zu finden.