Beiträge von BlackFoX

    da fangen die ganzen nerds wieder an sich über mods von einfachen spielen zu unterhalten, ihr seid doch echt zu bemitleiden


    bist du schon so süchtig das eine welt für dich zusammenbricht wenns kein samp und mta mehr gibt?

    Das Forum ist zum diskutieren da, ich selber spiele weder das eine noch das andere, ich konzentriere mich da auf andere Dinge,
    du kannst die Leute nicht danach beurteilen, da du erstens selber dran hockst & zweitens selber spiele spielst , oder sehe ich das Falsch ?
    Aber deswegen ist man noch lange kein Nerd, dann sollten wir auch so schreiben wie diese Hinterwelt'ler

    Beides ist im Grund gleich schnell , das eine spart Arbeit , das andere bringt nichts, ich würde die Schleife verwenden.


    Nützlich in solchen Situationen


    new variable[] = {5,8,9,9};


    for(new v = 0;v<sizeof variable;v++)


    So musst du nicht jedes Element einzeln abfragen & du hast immer die kompletten Daten.

    Naja, wenn man sich mal die Geschichte mit Sebihunter anguckt, Peter anguckt, SATAN anguckt..... Die 3 Dinge sind mir jetzt in 0.5 Sekunden zum Thema eingefallen...

    Mag alles sein aber wenn man mir die ganze Zeit unsinnige Vorwürfe machen würde, wären meine Nerven auch irgendwann am Ende,
    schließlich ist jeder nur Mensch, zum Thema Satan, klar es ist auf den ersten Blick unfair aber in diesem Forum gelten auch einige Regeln
    die für andere Unfair erscheinen trotzdem erfordert es immer wieder hartes durchgreifen, es wird seine Gründe haben warum Kye
    nicht möchte das für MTA geworben wird, denn auch er weiß wie das ganze jedes mal ausgeht. Richtig es kommen neue Vorwürfe,
    Sprich es sind Regeln an die man sich halten muss, wenn es einem nicht passt sollte man sich einen neuen Ort suchen wo
    diese nicht herrschen & man nicht drum bangen muss sich gleich einen Bann oder eine Verwarnung zu fangen.

    Standard Variablen Struktur & Verwendung


    Code
    new [<Eigenschaft>] <Struktur> <Identifikator> [=] [Wert] ;


    Erweiterte Anwendung der Variablen




    Anwendung Funktionen



    Code
    <Eigenschaft> <Struktur> <Identifikator> ( [<Identifikator>] [,] [<Identifikator>][...] )
    [{]
        [<Identifikator>] ;
        [<Identifikator>] ;
        [...];
    
    
        [return <Wert(e)>];
    [}]



    Anwendung Enum


    Code
    enum <Identifikator>
    {
        [<Identifikator>] [=] [Wert][,]
        [<Identifikator>] [=] [Wert] [,]
        [<Identifikator>] [=] [Wert] [...]
    }



    Standard Abfrage




    Kopfgesteuerte Schleife & Normale While Schleife auch For


    Code
    do
    [{]
    	[<Identifikator>] ;
    	[<Identifikator>] ;
    	[...]
    [}]
    while(<Identifikator> [Boolean] [<Identifikator>])



    Code
    while(<Identifikator> [Boolean] [<Identifikator>])
    [{]
    	[<Identifikator>] ;
    	[<Identifikator>] ;
    	[...]
    [}]


    Code
    for([new] <Identifikator> [=] [Wert] ; [Boolean] ; [<Identifikator>])
    [{]
    	[<Identifikator>] ;
    	[<Identifikator>] ;
    	[...]	
    [}]



    Switch / Case Anwendung




    * MAP *


    • [] Kann vorhanden sein , muss nicht
    • ... Mehr Werte dieser Art ( Reihenfolge )
    • <Eigenschaft> Eigenschaften wie Öffentliche Funktion,Variable oder Statische Funktion , Variable
    • <Struktur> Eine Struktur ( Datentyp ) wie Float,Boolean,String usw.
    • <Identifikator> ident ein nicht Terminal Symbol , wie ein Name einer Variable


    So wen das verwirrt, das ist eine Map, sprich ein Plan wie das ganze Funktioniert, die Legende dazu steht ja hier,
    viele Begriffe sind so erkennbar, dies soll die Komplexe Bauweise der Sprache mal etwas besser darstellen.

    Direktiven / Makros


    Was ist das eigentlich und wozu ?
    Direktiven sind kurz gesagt Compiler Eigenschaften, sie geben definitionen an die extra für den Compiler sind,
    sie grenzen Bereiche ein , können bestimmen was in den Stack kommt, der Stack ist der Code Zwischenspeicher,
    sprich so kann man einfach bestimmen was der Compiler tun soll, worauf er achten soll, ja sogar der Speicher
    des Codes lässt sich Manipulieren.


    Wie beginnen Direktiven ?
    Sie beginnen immer mit der Raute, das gibt an , das diese Zeile eine bestimmte Option angibt.

    Code
    ( Raute : # )


    Hinter einer Direktive können Abfragen mit Variablen aus dem Code entstehen sowohl auch Variablen aus dem
    Präprozessor ( Präprozessor verarbeitet Direktiven und weist sie zu )


    Fangen wir mit ,,define´´ diese Option setzt eine feste Compiler Variable,
    die nur vom Präprozessor noch einmal verarbeitet werden kann, vom Code selber nicht!
    Wie jede andere Direktive, sie sind wie feste Variablen ( Kontanzen )


    Hier mal die wichtigsten Direktiven


    • #if
    • #else
    • #endif
    • #pragma
    • #include
    • #tryinclude
    • #undef


    Als erstes beginnen wir wie man sieht man #if #else und #endif , diese 3 Direktiven Funktionieren wie gewöhnliche Abfragen,
    Unterschied zum normalen Code ist im Präprozessor wie man sieht, man braucht keine Blocks / Brackets { } ,
    diese werden vom Präprozessor nicht beachtet sprich :

    #define VARIABLEFEST 50


    #if VARIABLEFEST == 50
    funktionbla()
    {
    #endif
    return 1;
    }



    So ist der Wert nun nicht 50 so wird der Code nicht mit in den Zwischenspeicher geschmissen und existiert in unserer Ausgabe auch nicht,
    also da aber jeder Block Vollständig sein muss und eine Anweisung besitzen muss, ergibt dies einen Fehler im Code,
    da der Kopf mit dem Anfang nicht existiert sobald die Variablen des Präprozessors nicht 50 ist.


    Da wir gerade bei den Variablen sind , diese können auch abgefragt werden, ob sie definiert wurden oder nicht,
    als Beispiel :



    #if defined VARIABLEFEST


    #endif

    Hier lässt sich ebenfalls wie bei er normalen Abfrage mit Boolean also dem Wahr/Falsch Prinzip arbeiten,
    die höchste Regel ! Immer wenn ich kein gleich benutzte also einen bestimmten Wert haben will muss
    die Negativ / Positiv Prüfung vo der Funktion stattfinden die Wahr / Falsch wiedergibt ,
    sont schlägt die Logik Fehler , es heißt ja nicht


    Code
    wenn definiert nicht gleich VARIABLEFEST


    sondern::


    Code
    wenn nicht definiert VARIABLEFEST


    Wenn man das mit Wörtern nachvollzieht kann man so gut wie nicht scheitern, da jeder die nötige Logik besitzen müsste
    um diese Sätze zu verstehen, denn auch die Sprache wurde von einem Menschen gemacht, also basiert alles auf
    Menschlicher Logik.


    Kommen wir zu ,,pragma´´ , diese Option stellt den Compiler ein und sagt ihm wie er konvertieren soll,
    sprich welche Koordierung genutzt werden soll, wie viel Speicher reserviert werden soll,
    wie viel Tabs verwendet werden für die Struktur , auch Variablen können als unnütz gekennzeichnet werden und
    so einfach entfernt werden, das gilt für die vom Code erstellte Variablen, für die Präprozessor Variablen
    benutzt man gewöhnlich ,,undef´´ als Option.


    #pragma unused VARIABLEN_NAME
    #pragma tabsize 2 // 2 tabs als Struktur nötig


    Da ich die Option ,,undef´´ schon währendessen erklärt habe, kommen wir zu den letzten 2 wichtigen
    Optionen die mehr oder weniger zusammegehören und jede hat ihre Funktion.


    ,,include´´ kennt jeder , damit bezieht man Externe Dateien ein die in den Code einbezogen werden,
    hierbei dienen Externe Dateien immer als Ablage um eine gewisse Übersicht zu behalten,
    groß Erklären müsste ich hoffentlich nichts.


    ,,tryinclude´´ wie der Begriff sagt, ausprobieren , Funktion vollkommen gleich ABER ,
    sobald diese Datei nicht vorhanden ist, wird kein Fehler ausgegeben und die Direktive wird
    ignoriert also nur wenn vorhanden.



    So zum Schluss eine kleine Zusammenfassung :


    Direktiven sind komplex aber während der Laufzeit nicht vom Code aufgreifbar, sprich sobald der Compiler
    diese einmal verarbeitet hat verschwinden sie für immer, im Quellcode bleiben sie jedoch vorhanden,
    nicht das dies Falsch verstanden wird.
    Die Ausgabe Übernimmt alle Einstellung die getroffen werden.



    Datentypen & Spezielle Fähigkeiten


    Direktiven im Bezug auf ,,define´´ haben noch Spezielle Merkmale


    • In ihnen können alle Datentypen Definiert werden ( float,boolean,Integer,String )
    • Es können Funktionen verbaut werden


    #define KOMMAZAHL 3.14


    Wenn man diese Variable nutzt muss die Empfänger Variable ebenfalls vom selben Typ sein.



    Da diese Art von Variablen jede Art von Datentyp wiedergeben können, können auch Locker Funktionen verbaut werden :

    #define FunktionX(a,b) if(a==b)


    Warum diese Art von Funktionen schneller sind ?
    Sie greifen Direkt ein sprich da der Präprozessor alles ersetzt und einarbeitet werden diese Abfragen Direkt getätigt & Direkt berechnet.

    Ich kann mich daran erinnern das man Diskussionen dieser Art mit dem zuständigen Administrator/Moderator per Privat Nachricht Regeln kann.

    Ja das klappt auch mit einer ,,stock´´ Eigenschaft, die Eigenschaft Float gibt nur die Struktur der Rückgabe an bzw. die Struktur des Inhaltes ,
    man unterscheidet bekanntlich zwischen 3 Eigenschaften.

    Ich habe nicht Direkt Neid angesprochen sondern eine ähnliche Verhaltensweise, Wut darauf das einem die Idee geklaut wurde,
    natürlich wird diese noch verstärkt wenn der andere es vor einem mach mal ganz abgesehen davon welche Methode besser ist.

    Die Mindestlänge ist durch die Native Funktion schon festgelegt , diese kannst du nicht mehr ändern außer du hast den Quellcode.


    new _string[][] = {"Hallo Welt","Teil Nummer 2","Slot 3 in Raum 2"};


    new _fstr[128];
    format(fstr,sizeof fstr,"%s%s%s",_string[0],_string[1],string[2]);

    Ich sehe da einen ganz anderen Hintergrund, der sich Teils Wut nennt, für mich sieht es im Moment nur so aus das
    einer einen Code raus gestellt hat & einem anderen somit die Tour dadurch kaputt gemacht hat,
    so kritisch muss man das nicht sehen, wie bereits einmal gesagt, nur weil ein anderer bereits was gemacht hat
    was seiner eigenen Idee entspricht, heißt es nicht das man es nicht auf seine eigene Methode machen darf,
    eventuell sogar besser aber nicht zwingend, das bemängeln das es dieses Werk bereits gibt ist hierbei total unnötig,
    jeder hat seinen Style, für mich gibt es dabei aber nur das eine Motiv , das sich Teils Neid nennt, was hier nicht selten ist.

    Ich finde es ehrlich gesagt übertrieben sich deswegen den Kopf zu zerbrechen was der andere schon hat & mit welcher Methode
    er es macht, müsst euch ja nicht gleich wegen einem simplen Skript anfauchen

    Zu empfehlen sind Timer mit einem höheren Intervall wie 800-1000 ms der Takt reicht vollkommen aus,
    und am besten so wenig Timer wie Möglich, so kannst du z.b. mehrere Abläufe in einen Timer packen
    ohne Extra eine neue Funktion darauf zu verweisen.

    Doch das weiß ich, der Fall das diese Funktion 0 wiedergibt liegt bei mindestens,
    ich bin mir da aber zu 100% sicher das dieser Fall nie eintreten wird, das wäre somit genau
    so Effektiv wie wenn ich die Abfrage im Kommando weglasse ob der Spieler verbunden ist.