Beiträge von BlackFoX

    Nimm system("PAUSE"); dann beendet sich die Konsole nicht mehr ohne eine Bestätigung aber es ist nicht die beste Methode ansonsten versuch mal den Buffer der Eingabe zurückzusetzen oder
    per While Schleife zu warten bis eine neue Linie bestätigt wird. ^^


    aso das brauchst du nicht

    setvbuf(stdin,NULL,_IONBF,0);
    setvbuf(stdin,NULL,_IOFBF,BUFSIZ);


    eigentlich reicht


    getchar();
    oder
    getch();

    Ich meine wenn er ein Taxifahrer ist darf er nichts ins Fahrzeug oder wie ? ^^


    Muss so aussehen
    if(!IsATaxiFahrer(playerid) && !ispassenger)
    {
    SendClientMessage(playerid,COLOR_GREY," Du hast kein Zugriff auf dieses Fahrzeug!");
    TogglePlayerControllable(playerid, 0);
    TogglePlayerControllable(playerid, 1);
    }

    öpö , das was ich dir da gegeben hab ist eine Funktion die in den Lokalen Skript Bereich gehört danach kannst du dann eine Abfrage erstellen


    if(IsPlayerInZone(...))
    {
    // Weitere Aktionen...
    }

    Najo kommt darauf an wie viel Speicher die Ausgabe reserviert , das hängt meist davon ab wie viele Variablenplätze reserviert wurden,
    Arrays, Funktionen , Makros alle brauchen ihren Platz da sie in der Datei registriert werden wie eine kleine Datenbank.
    Die Amx wird kleiner als der Quellcode da der Quellcode beim Übergang ins Binäre komprimiert wird bzw. in eine andere Kodierung gewandelt wird ( 8Bit )

    Versuch es mal mit einer Zone


    IsPlayerInZone(playerid,Float:minx,Float:maxx,Float:miny,Float:maxy)
    {
    Float:pos[3];
    GetPlayerPos(playerid,pos[0],pos[1],pos[2]);
    return (pos[0] >= minx && pos[0] <= maxx && pos[1] >= miny && pos[1] <= maxy);
    }



    Zone


    Y
    |
    |
    |
    |>>>>>>>>>>>>> X


    Wenn Spieler über der Minimalen Grenze der Zone & unter der Maximalen Grenze der Zone das bei beiden Achsen.

    Gehört hier erstens nicht rein & zweiten kann dir ohne Code niemand genau sagen wo der Fehler ist,
    da manche Warnungen Mehrdeutig sein können.

    Cleo Library 3 holen & die Dateien in den GTA SA Ordner , dort die Script in den Ordner Cleo & eventuell den Rest so rein setzen wie es gehört,
    steht meist in der Readme der Mods

    if(!IsPlayerConnected(i)) continue;
    if(IsPlayerAdmin(i)) continue;
    Kick(i);

    Tipp so etwas muss nicht immer schneller sein also immer schauen, überspringen sollte man nur wenn mehr als 3 Linien folgen sprich
    immer Logisch denken


    if(IsPlayerConnected (i) && IsPlayerAdmin(i))Kick(i);


    Zugriff


    • Schauen ob Spieler verbunden ( Wenn dies schon nicht stimmt & der Operator && gefunden wurde wird die Abfrage als Falsch erkannt also wird Falsch wiedergegeben & es wird der nächste Schritt eingeleitet )
    • Als nächstes Administrator Status prüfen , wenn der vorige Status stimmt
    • Spieler vom Server werfen.


    Deine Zugriffe

    if(!IsPlayerConnected(i)) continue;
    if(IsPlayerAdmin(i)) continue;
    Kick(i);


    • Überprüfen ob Spieler verbunden ist ( wenn nicht überspringen )
    • ggf. überspringen
    • Prüfen Ob Spieler Administrator ist
    • ggf. überspringen
    • Spieler vom Server werfen

    Im Endeffekt können diese Schritte schneller sein aber nicht in allen fällen.


    Wollte nur mal zeigen wie einfach das ganze ist ohne Schritte einzuleiten die nicht gebraucht werden & das ganze letztendlich langsamer machen als es sein kann.


    Genau das gleichen bei solchen Rückgaben


    if(Statement(...))return 1;
    else return 0;


    Zu lang ...


    return Statement(...); // << Gibt Direkt wieder ob Wahr oder Falsch


    Genau das gleiche wieder hier

    if(Statement(...))
    {
    DoSomething();
    }
    else
    {
    Test();
    }


    Bei Kommandos sprich Direkten Aktionen braucht man keine Bereiche eingrenzen da es sich hierbei nicht um mehrere Aktionen hintereinander handelt sprich
    Array Bereiche weisen immer darauf hin das mehrere Werte folgen.


    if(Statement(...))DoSomething();
    else Test();


    Direkt & schneller


    Hier mal ein Hinweis auf auf Dinge dieser Art ...

    if(!strlen(string))
    {
    SendClientMessage(...);
    return 1;
    }


    Zu indirekt & zu viele Schritte ...


    if(!strlen(string))return SendClientMessage(...); // SendCMessage gibt bei erfolgreichem ausführen 1 wieder


    soll der Wert umgekehrt wiedergegeben werden also aus 1 , 0 werden aus Wahr > Falsch


    if(!strlen(string))return !SendClientMessage(...); // << Wie man es gewohnt ist den Umkehr Operator verwenden


    Fakten dazu


    new var = (wert1 == wert2) // << Wird in Boolean gewandelt als Wahr / Falsch gibt je nach dem 0 & 1 wieder


    wie man sieht die Sprache selber kann auch selber etwas nachdenken & entscheidet dann bei gewissen zusammenhängen selber.

    stock StreamObject_OnPlayerUpdate(playerid)
    {
    updatespassed[playerid]++;
    if( updatespassed[playerid] == MAXUPDATES)
    {
    ObjectCheck(playerid);
    updatespassed[playerid] = 0;
    }
    }



    öpö , da hatte wohl jemand was vergessen