Pickups mithilfe eines Enums & einer Schleife erstellen & laden

This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.

  • Pickups mithilfe eines Enums & einer Schleife erstellen & laden

    Guten Abend,
    in diesem Tutorial werden wir uns damit befassen, wie man mithilfe eines Enums leicht & schnell Objekte, Autos, 3Dtextlabel oder Pickups erstellen kann.
    Ich erkläre euch das mal an dem Beispiel "Pickups". Weiter unten werdet ihr das Beispiel "3DTextLabel" finden.

    Fangen wir also an.

    Pickups

    Wir wollen Pickups erstellen, welche mit einer Schleife bei "OnGameModeInit" geladen werden.
    -Extra Teil -> mit "N" kann man, während man in dem Pickup ist, ein Interior betreten

    Was brauchen wir?
    Wir brauchen einen Editor, Grundkenntnisse und logisches Denkvermögen.

    Schritt 1 - Enum erstellen

    Da wir die Pickups ja mithilfe eines Enums erstellen wollen, müssen wir erstmal ein Enum erstellen.
    Dafür schauen wir uns mal die Parameter von [pwn]CreatePickup[/pwn]an.
    Diese sind

    -Model
    wie das Pickup aussehen soll
    -Type
    Die "Art" des Pickups
    -x, y & z Koordinate
    Damit das Script weiß, wo das Pickup erscheinen soll
    -virtual world
    In welcher Virtuellen Welt soll es createt werden? ( 0 = standart )

    Diese Parameter tragen wir nun in unser Enum ein
    [pwn]enum e_pickup{
    Float:exp,//x pos
    Float:eyp,//y pos
    Float:ezp,// z pos
    vw// virtuelle welt
    }[/pwn]
    Nun müssen wir natürlich noch Werte irgendwie in das Script eintragen, damit man überhaupt Pickups erstellen kann.
    Dafür verwenden wir [pwn]static const[/pwn]

    static
    Wenn man etwas als "static" deaklariert, ist es, einfach gesagt, für andere Scripts & Plugins "unsichtbar"

    const
    const verwenden wir, da die Koordinaten & weitere Parameter des Pickups immer die selben sind & bleiben.

    bsp:
    [pwn]const variable = 5;
    variable = 4;
    // Würde einen Fehler hervorrufen, da wir den Wert nicht ändern dürfen.( const =~ konstant )[/pwn]


    Wir schreiben also
    [pwn]static const
    e_PickupData[][e_pickup] = {
    };[/pwn]

    Darauf werde ich nicht weiter eingehen, sollte eigentlich alles klar sein.
    Nun müssen wir das oben geschriebene noch mit Informationen füttern. (Model, Type, X - Y & Z-Achse, Virtuelle Welt)

    [pwn]static const
    e_PickupData[][e_pickup] = {
    {}//Schritt 1: Informationen werden innerhalb einer geschweiften Klammer geschrieben. Sollten mehrere Zeilen vorhahden sein, werden sie mit einem "," getrennt
    };[/pwn]

    [pwn]static const
    e_PickupData[][e_pickup] = {
    {345.2345,215.2356,1235.2345}//Schritt 2: Eintragen der x,y & z Koordinaten
    };[/pwn]
    [pwn]static const
    e_PickupData[][e_pickup] = {
    {345.2345,215.2356,1235.2345,0}//Schritt 3: Eintragen der virtuellen Welt
    };[/pwn]

    Nun hätten wir Teil 1 abgschlossen.
    Wir haben die von uns vorgegebenen Parameter in dem Enum via [pwn]static const [/pwn]mit Infos gefüttert

    Wenn wir jetzt den Server starten würden, würden noch keine Pickups erscheinen, da wir diese erste erstellen müssen.
    Dafür gehen wir zu "OnGameModeInit" und schreiben folgendes

    [pwn]new i;
    for(; i < sizeof(e_PickupData); i++)
    {
    CreatePickup(1559, 23, e_PickupData[exp], e_PickupData[i][eyp], e_PickupData[i][ezp]);
    }[/pwn]

    Erklärung.
    Wir gehen mit der Schleife die Daten in "[pwn]static const ...[/pwn]" durch und lassen diese mithilfe von [pwn]CreatePickup[/pwn]In-Game laden & erstellen.



    Somit hätten wir auch "Teil 2" abgeschlossen. Es folgt nun ein kleiner "Extra-Bereich", in dem wir die Pickups als Interior Enter & Exit punkte verwenden.




    Pickups - Extra

    Nun sollen die Pickups also als Enter & Exit Point fungieren.
    Dafür brauchen wir noch ein paar andere Parameter in unserem Enum.



    [pwn]enum eLCoordVars{
    Float:exp,
    Float:eyp,
    Float:ezp,
    vw,
    Float:eesx,//enter spawn pos
    Float:eesy,
    Float:eesz,
    interior//interior
    }
    [/pwn]
    Soweit alles klar?
    Natürlich müssen wir
    [pwn]static const[/pwn] dementsprechend anpassen.
    [pwn]static const
    e_PickupData[][e_pickup] = {
    {345.2345,215.2356,1235.2345,0,1245.2356,2345.234,1245.1245,1}//Wir haben nun die Daten um "spawnx,spawny, spawnz & interior erweitert"
    };[/pwn]

    Nun wollen wir mit der Taste "N" das Interior betreten.

    Dazu gehen wir zu [pwn]OnPlayerKeyStateChange[/pwn]

    Hier fragen wir ab, ob der Spieler die Taste "N" gedrückt hat.
    [pwn]if(newkeys & KEY_NO)[/pwn]

    Nun müssen wir überprüfen, ob er sich in der Nähe eines Pickups befindet.
    [pwn]for(new i; i < sizeof(e_PickupData); i++)[/pwn]
    Sollte klar sein.

    Nun müssen wir die Positionen des Spielers mit den Positionen des Pickups vergleichen
    [pwn]if(!IsPlayerInRangeOfPoint(playerid,0.5,e_PickupData[i][exp],e_PickupData[i][eyp],e_PickupData[i][ezp]))continue;[/pwn]

    Erklärung.
    [pwn]if(istNichtSpielerInUmgebungVonPunkt(spieler,Radius,x-positionAusStaticConst,y-posistionAusStaticConst,z-positionAusStaticConst))[/pwn]

    Nun müssen wir dem Spieler zu der richtigen Position porten.
    Außerdem müssen wir ihn noch in das richtige Interior setzen.
    [pwn]SetPlayerInterior(playerid,g_CoordSets[i][interior]);[/pwn]
    &
    [pwn] SetPlayerPos(playerid,e_PickupData[i][eesx],e_PickupData[i][eesy],e_PickupData[i][eesz]);[/pwn]

    Das war der Erste Teil des Tutorials, ich werde im Laufe des Tages noch "3DTextLabel" hinzufügen.


    Teil 2: 3DTextLabel

    Nun kommen wir zu dem 2. Teil des Tutorials. Mithilfe eines Enums und einer Schleife ein 3DTextLabel erstellen.
    Im Grund funktioniert dies genauso wie mit den Pickups.

    Wir erstellen also wieder ein Enum für "static const".


    [pwn]enum e_3DLabels{
    dtext[100],//ich weiß nicht genau, was das limit ist.
    color,//farbe des textes
    Float:tx,//pos x
    Float:ty,//pos y
    Float:tz,//pos z
    dd,//draw distance
    vw,//virtual world
    los//line of sight -> durch objekte sehbar (1/0)
    }[/pwn]
    Nun geht es wieder mit [pwn]static const[/pwn] weiter
    [pwn]static const
    e_3DLabel[][e_3DLabels] = {
    {"Hello World\nIch bin weiß & bin ein Textlabel",-1,1965.3351,1623.2197,12.8620,7,0,0},
    };[/pwn]

    Erklärung
    [pwn]{"Text",farbe,x,y,z,drawdistance,virtualworld,line of sight}[/pwn]

    Um die TextLabel zu laden, müssen wir wieder unter [pwn]OnGameModeInit[/pwn]eine Schleife erstellen.
    [pwn]for(new i;i<sizeof(g_3DLabel); i++)
    {
    Create3DTextLabel(g_3DLabel[i][dtext],g_3DLabel[i][color],g_3DLabel[i][tx],g_3DLabel[i][ty],g_3DLabel[i][tz],g_3DLabel[i][dd],g_3DLabel[i][vw],g_3DLabel[i][los]);
    }[/pwn]

    Erklärung
    Mit der Schleife holen wir die Daten aus [pwn]static const[/pwn]. Mit der native [pwn]Create3DTextLabel[/pwn] erstellen wir die Label(s?)

    Ist, wie gesagt, genau das selber wie oben. Wollte nur nochmal ein weiteres Beispiel vorzeigen.


    Ich hoffe ich habe alles richtig und verständlich erklärt &
    ich freue mich auf Kritik, Feedback & Verbesserungsvorschläge.
    Sollten Fehler vorhanden sein, bitte mich informieren, damit ich diese ausbessern kann.

    MFG
    Manniac

    The post was edited 1 time, last by Manniac ().