Beiträge von Sharpadox

    Guten Abend,


    .:: Da die Tutorialsektion von MTA-SA momentan anscheinend am rumbuggen ist, schreibe ich mein MTA-Tutorial einfach mal hier in die MTA-SA Scripting Base ::.


    Da der Titel bereits alles sagt fange ich mal direkt an ;) ...
    Heute zeige ich euch, wie man einfach einen Befehl mit Parametern erstellen kann...


    Da es sich um einen Command handelt brauchen wir (wer hätts gedacht?) einen CommandHandler.
    Die Syntax dazu lautet wie folgt:


    Code
    bool addCommandHandler ( string commandName, function handlerFunction, [bool restricted = false, bool caseSensitive = true] )


    Also brauchen wir als erstes den Namen des Befehls. Wir erstellen und nun einen /veh bzw /v Befehl. Dazu erstellen wir uns 2 commandHandler:


    Code
    addCommandHandler( "veh", ...)
    addCommandHandler( "v", ...)


    Das wäre schonmal ein Anfang. Würde man einen Normalen /veh daraus machen, kann man es auch einfach so schreiben:


    Code
    addCommandHandler( "veh", ... )


    Und nun kommen wir zu der function, die bei Command folgende Syntax beinhaltet:


    Code
    function( playerid, cmdtext, [ args, ... ] )


    Ich habe nun bewusst playerid und cmdtext geschrieben, damit die, die PAWN können, sich leichter ein Bild machen können,
    da wahrscheinlich ein großteil hier immernoch PAWN-Fische sind :) ..


    Unter args kommen die Argumente bzw Parameter des Befehls rein. Wir brauchen vehid..
    Also würde due function so aussehen:


    Code
    function( playerid, cmdtext, vehid)


    Und in unseren commandHandler bauen wir es als handlerFunction (siehe Syntax oben) so nun rein:

    Code
    addCommandHandler( { "veh", "v" },
    	function( playerid, cmdtext, vehid )
    
    	end
    )


    Als nächstes werden wir abfragen, ob der Parameter ausgefüllt wurde mit einer einfachen If-Abfrage.
    Dabei wird nil verwendet, was soviel wie leer heißen soll.


    Code
    if vehid == nil then
    
    
    end


    Für die, die es nicht wissen: Hier gibt es keine {} Klammern für die Funktionen: end ist hier sozusagen die Klammer:

    Code
    function func( ... )
    
    
    end


    Bedeutet sozusagen das hier:

    Code
    function func( ... )
    {
    
    
    }


    Also unser Command hat nun eine Abfrage, ob der Parameter ausgefüllt wurde. Nun müssen wir dazu eine Error-Message ausgeben:
    Dazu verwenden wir:

    Code
    bool outputChatBox ( string text [, element visibleTo=getRootElement(), int r=231, int g=217, int b=176, bool colorCoded=false ] )


    Also hier unsere Error-Message, die in Grau erscheint:

    Code
    outputChatBox( "Fehler: [Verwende]:: /veh <ModelID>",playerid,150,150,150,false)


    Die 150,150,150 sind der Rot-Grün-Blau-Anteil. 150,150,150 == Grau..
    Höchste Zahl ist 255..
    255,255,255 ist demnach Weiß.


    Jetzt noch einen else reinhauen, falls die Parameter angegeben wurden.
    Der ganze Code müsste dann so aussehen momentan:


    Code
    addCommandHandler( { "veh", "v" },
    	function( playerid, cmdtext, vehid )
    		if vehid == nil then
    			outputChatBox( "Fehler: [Verwende]:: /veh <ModelID>",playerid,150,150,150,false)
    		else
    
    
    		end
    	end
    )


    Wie ihr seht, steht kein end vor dem else, da das end wirklich erst ganz am Ende der "Abfragen-Reihe" steht.


    Nun müssen wir als erstes die Position des Spieler abfragen, der den Command verwendet. Den Player fragen wir über (siehe commandHandler Parameter)
    playerid ab.. Die Position fragt mal mit getElementPosition ab... Das Element hierbei ist einfach der Spieler.


    Code
    local x, y, z = getElementPosition(playerid)


    Das local ist übrigend das selbe, wie das new in PAWN, damit werden Variablen erstellt.
    Und nun kommt endlich der Teil, an dem das Auto erstellt wird. Hier ist mal die Syntax dazu:


    Code
    vehicle createVehicle ( int model, float x, float y, float z [, float rx, float ry, float rz, string numberplate, bool bDirection, int variant1, int variant2 ] )


    Wir erstellen uns nun unser Auto mit der Variable check_create.. Weiter unten werden ihr sehen, warum ich es so mache.. Ihr könnt jedoch auch einfach nur das
    Auto erstellen, das ist keine Pflicht, ist aber mMn besser.


    Code
    local check_create = createVehicle( vehid, x, y, z )


    x,y,z wurden ja bereits definiert oben unter getElementPosition..
    Nun seht ihr, wozu das check_create gedacht ist:


    Damit könnt ihr nun abfragen, ob das Auto erstellt wurde (alles hat funktioniert) oder ob es nicht erstellt wurde (fehler in den Parametern)...


    Code
    if not check_create  then
    	outputChatBox( "Es gab ein Problem beim Erstellen des Fahrzeugs. Bitte überprüfe deine Parameter.",playerid,150,150,150,false)
    else
    	outputChatBox( "Du hast dir erfolgreich ein Fahrzeug gespawnt.",playerid,20,200,20,false)
    end


    Nun ist der Befehl so gut wie fertig, und damit hat man nun einen /veh Befehl. Wenn ihr alles verstanden habt, merkt ihr sicher, dass
    es Theoretisch viel leichter ist und vor allem nicht so umständlich wie in PAWN mit den params, sscanf usw..
    Das wurde alles spontan geschrieben, bitte schreibt hier drunter, wenn ich irgendwo einen Fehler in der Erklärung bzw. im Code habe.


    Das wars dann mit meinem #1 MTA-Tutorial..
    Danke fürs lesen, und viel Glück beim Scripten :thumbup:


    mfg,
    Sh13

    Guten Abend Leute,


    heute wollte ich für einen guten Freund von mir werben (ist nicht mein Kanal).
    Es ist der CoverSongsRealoadet-Kanal von meinem guten Freund Benni. Der Kanal
    hat am 17.07 seine Pforten eröffnet und er macht Covers zu Liedern, und ich finde
    die einfach genial, denn er ist ein Super Sänger ;) ..


    Er macht so 1-2 Lieder pro Woche, und ich würde ihn gerne unterstützen ein wenig
    bekannter zu werden, denn jeder Anfang ist schwer, wie ihr alle wisst. Da ich ein großer
    Fan von seiner Musik bin, wollte ich daher mal für ihn werben ...


    Wäre nett, wenn ihr hier ein wenig Feedback zum Kanal zurücklasst, oder besser
    bei seinen Videos und ihn liken, abonnieren könnten, wenn es euch gefällt. Wäre echt
    nett, und würde ihm gut helfen :3


    Also hier ist sein 1. Lied, das er gecovert hat:
    http://www.youtube.com/watch?v=JAz4fEgYh08


    Und hier der Link zu seinem Kanal:
    http://www.youtube.com/user/CoverSongsReloaded


    mfg,
    Sh13