LUA Tutorial No.1 [German]

A new update is now available, introducing seasons and more!
Latest hotfix: 0.8.0.1 (2024-12-20)
  • Hallo liebe Community,


    Ein Englisches Tutorial wird folgen, sobald ich dafür Zeit habe.


    Da ich sehr viele Anfragen in Skype erhalten habe, und ich da nicht hinterherkomme, habe ich mich dazu entschlossen hier im Forum ein Tutorial zu schreiben.


    Dies ist das erste Tutorial. Weitere werden folgen.



    Schauen wir uns erstmal den Quellcode an, um erstmal einen einblick zu bekommen, wie das ungefähr aussehen muss.


    Dies ist erstmal ein kleines Tutorial um die Funktionen erstmal kennen zu lernen.


    INFO: Der Quelltext darf weiter gegeben werden! Nur soll im Quelltext mein Name darin stehen bleiben.


    Um in LUA Programmieren zu können, empfehle ich den Editor Notepad++



    So dann fangen wir mal, mit den einfachsten Befehlen an;



    [lua]print("Hallo, Welt!")[/lua]


    Hier haben wir der Befehl "print" Der Befehl "print" dient dazu das etwas auf dem Bildschirm ausgegeben wird. Deshalb haben wir hier


    [lua]print("Hallo Welt!")
    -- Hier haben wir den Befehl print("Hallo Welt!") in den Klammern kann auch dein Belibiger Text stehen z.B.
    [/lua]


    hier zeigen wir das hier dein weiterer Text stehen könnte


    [lua]print("Hallo liebe Welt!")
    -- Hier haben wir einfach Hallo Welt mit einem Wort erweitert und zwar "liebe"
    [/lua]


    Hier sehen wir das ich in dem Quelltext einige Kommentare mit rein geschrieben habe.


    Sehen wir uns erstmal wieder den Befehl dazu an:


    [lua]-- Dies ist ein Kommentar[/lua]


    Da sehen wir das ich -- genommen habe um ein beliebiges Kommentar zu schreiben. Achtet aber darauf das es nur eine Zeile geht. Um über mehrere Zeilen ein Kommentar zu schreiben benutzen wir den Befehl:


    [lua]
    --[[
    Dies ist ein Kommentar.
    Dieses Kommentar geht über mehrere Zeilen.
    Du kannst es gerne mal ausprobieren.
    ]][/lua]


    Herzlichen Glückwunsch! Du hast gerade dein eigenes kleines Programm geschrieben, wo du einige kleine Grundlagen erstmal gelernt hast!


    Nun machen wir etwas Komplexeres, und zwar "Programmieren" wir jetzt einige Funktionen.
    Ich versuche es so gut wie möglich zu erklären. Also wenn ich etwas auslassen sollte, dass euch aufgefallen ist, so schreibt mir doch bitte eine PN damit ich das umändern kann.


    Nun Programmieren wir etwas komplexes. Keine Sorge wir gehen jeden einzelnen Code durch. Ich nehme jetzt einen Quelltext, von einem anderem Projekt was ich mal geschrieben habe.


    Gucken wir uns das Gewurstel mal an:


    [lua]function OnPlayerCommandText(playerid, cmdtext)


    local cmd,params = GetCommand(cmdtext);


    if cmdtext == "/ahelp" then
    CMD_AdminHelp(playerid);


    elseif cmd == "/kick" then
    CMD_Kick(playerid,params);


    elseif cmd == "/ban" then
    CMD_Ban(playerid,params);


    elseif cmd == "/kill" then
    CMD_Kill(playerid,params);


    elseif cmd == "/tp" then
    CMD_Teleport(playerid,params);


    elseif cmd == "/giveitem" then
    CMD_GiveItem(playerid,params);

    elseif cmd == "/time" then
    CMD_Time(playerid,params);

    elseif cmd == "/name" then
    CMD_Name(playerid,params);

    elseif cmd == "/color" then
    CMD_Color(playerid,params);
    end
    end


    function CMD_AdminHelp(playerid)


    if IsPlayerAdmin(playerid) == 1
    then
    for i = 0, 8
    do
    SendPlayerMessage(playerid,255,255,255,"");
    end


    SendPlayerMessage(playerid,255,255,255,"Admin help:");
    SendPlayerMessage(playerid,255,250,200,"/kick /ban /kill /tp /giveitem /name /color");
    else
    SendPlayerMessage(playerid,255,250,200,"(Server): You are not admin!");
    end
    end


    function CMD_Kick(playerid, params)


    if IsPlayerAdmin(playerid) == 1
    then
    local result,id,reason = sscanf(params,"ds");


    if result == 1
    then
    if IsPlayerConnected(id) == 1
    then
    for i = 0, MAX_SLOTS - 1
    do
    SendPlayerMessage(i,255,0,0,string.format("%s %s %s %s%s %s %s","(Server):",GetPlayerName(id),"has been kicked by",GetPlayerName(playerid),".","Reason:",reason));
    end


    Kick(id);
    else
    SendPlayerMessage(playerid,255,250,200,string.format("%s %d %s","(Server): Player ID",id,"is not connected with server."));
    end
    else
    SendPlayerMessage(playerid,255,250,200,"Use: /kick (playerid) (reason)");
    end
    else
    SendPlayerMessage(playerid,255,250,200,"(Server): You are not admin!");
    end
    end


    function CMD_Ban(playerid, params)


    if IsPlayerAdmin(playerid) == 1
    then
    local result,id,reason = sscanf(params,"ds");


    if result == 1
    then
    if IsPlayerConnected(id) == 1
    then
    for i = 0, MAX_SLOTS - 1
    do
    SendPlayerMessage(i,255,0,0,string.format("%s %s %s %s%s %s %s","(Server):",GetPlayerName(id),"has been banned by",GetPlayerName(playerid),".","Reason:",reason));
    end


    Ban(id);
    else
    SendPlayerMessage(playerid,255,250,200,string.format("%s %d %s","(Server): Player ID",id,"is not connected with server."));
    end
    else
    SendPlayerMessage(playerid,255,250,200,"Use: /ban (playerid) (reason)");
    end
    else
    SendPlayerMessage(playerid,255,250,200,"(Server): You are not admin!");
    end
    end


    function CMD_Kill(playerid, params)


    if IsPlayerAdmin(playerid) == 1
    then
    local result,id = sscanf(params,"d");


    if result == 1
    then
    if IsPlayerConnected(id) == 1
    then
    SendPlayerMessage(id,255,250,200,string.format("%s %s","You have been killed by",GetPlayerName(playerid)));
    SendPlayerMessage(playerid,255,250,200,string.format("%s %s","You killed",GetPlayerName(id)));
    SetPlayerHealth(id,0);
    else
    SendPlayerMessage(playerid,255,250,200,string.format("%s %d %s","(Server): Player ID",id,"is not connected with server."));
    end
    else
    SendPlayerMessage(playerid,255,250,200,"Use: /kill (playerid)");
    end
    else
    SendPlayerMessage(playerid,255,250,200,"(Server): You are not admin!");
    end
    end


    function CMD_Teleport(playerid, params)


    if IsPlayerAdmin(playerid) == 1
    then
    local result,from_id,to_id = sscanf(params,"dd");


    if result == 1
    then
    if IsPlayerConnected(from_id) == 1
    then
    if IsPlayerConnected(to_id) == 1
    then
    SendPlayerMessage(from_id,255,250,200,string.format("%s %s","You have been teleported to",GetPlayerName(to_id)));
    SendPlayerMessage(to_id,255,250,200,string.format("%s %s","To you has teleported",GetPlayerName(from_id)));


    local x,y,z = GetPlayerPos(to_id);
    SetPlayerPos(from_id,x + 50,y,z);
    else
    SendPlayerMessage(playerid,255,250,200,string.format("%s %d %s","(Server): Player ID",to_id,"is not connected with server."));
    end
    else
    SendPlayerMessage(playerid,255,250,200,string.format("%s %d %s","(Server): Player ID",from_id,"is not connected with server."));
    end
    else
    SendPlayerMessage(playerid,255,250,200,"Use: /tp (fromplayerid) (toplayerid)");
    end
    else
    SendPlayerMessage(playerid,255,250,200,"(Server): You are not admin!");
    end
    end[/lua]


    Ich musste alles leider erstmal kürzen, da es nur 10.000 Zeichen zur Verfügung stehen.
    Im Anhang könnt ihr euch das Script Herunterladen.


    Weitere Erklärungen im weiteren Beitrag.

    Files

    • admin.lua

      (7.41 kB, downloaded 677 times, last: )

    Edited once, last by -AVATAR- ().

  • [lua]function CMD_GiveItem(playerid, params)


    if IsPlayerAdmin(playerid) == 1
    then
    local result,id,item,amount = sscanf(params,"dsd");


    if result == 1
    then
    if IsPlayerConnected(id) == 1
    then
    SendPlayerMessage(id,255,250,200,string.format("%s %d %s %s %s","You have received",amount,item,"from",GetPlayerName(playerid)));
    SendPlayerMessage(playerid,255,250,200,string.format("%s %d %s %s %s","You gave",amount,item,"for",GetPlayerName(id)));
    GiveItem(id,item,amount);
    else
    SendPlayerMessage(playerid,255,250,200,string.format("%s %d %s","(Server): Player ID",id,"is not connected with server."));
    end
    else
    SendPlayerMessage(playerid,255,250,200,"Use: /giveitem (playerid) (iteminstance) (amount)");
    end
    else
    SendPlayerMessage(playerid,255,250,200,"(Server): You are not admin!");
    end
    end


    function CMD_Time(playerid, params)


    if IsPlayerAdmin(playerid) == 1
    then
    local result,hour,minute = sscanf(params,"dd");

    if result == 1
    then
    SendMessageToAll(255,250,200,string.format("%s %s %s %d:%02d","(Server):",GetPlayerName(playerid),"set time at",hour,minute));
    SetTime(hour,minute);
    else
    SendPlayerMessage(playerid,255,250,200,"Use: /time (hour) (minute)");
    end
    else
    SendPlayerMessage(playerid,255,250,200,"(Server): You are not admin!");
    end
    end


    function CMD_Name(playerid, params)


    if IsPlayerAdmin(playerid) == 1 then
    local result,id,name = sscanf(params,"ds");


    if result == 1 then

    if IsPlayerConnected(id) == 1 then

    local adminname = GetPlayerName(playerid);
    local beforename = GetPlayerName(id);
    if SetPlayerName(id,name) == 1 then

    SendMessageToAll(0,255,0,string.format("%s %s %s %s %s %s","Admin",adminname,"set name player",beforename,"to",name));
    else
    SendPlayerMessage(playerid,255,250,200,"(Server) Can't set name.");
    end
    else
    SendPlayerMessage(playerid,255,250,200,string.format("%s %d %s","(Server): Player ID",id,"is not connected with server."));
    end
    else
    SendPlayerMessage(playerid,255,250,200,"Use: /name (playerid) (name)");
    end
    else
    SendPlayerMessage(playerid,255,250,200,"(Server) You are not admin!");
    end
    end


    function CMD_Color(playerid, params)


    if IsPlayerAdmin(playerid) == 1 then

    local result,id,r,g,b = sscanf(params,"dddd");

    if result == 1 then
    if IsPlayerConnected(id) == 1 then

    local adminName = GetPlayerName(playerid);
    SendPlayerMessage(id,255,250,200,string.format("%s %d %d %d %s %s","Your color was changed to",r,g,b,"by",adminName));
    SetPlayerColor(id,r,g,b);
    end
    else
    SendPlayerMessage(playerid,255,250,200,"Use: /color (playerid) (r) (g) (b)");
    end
    else
    SendPlayerMessage(playerid,255,250,200,"(Server) You are not admin!");
    end
    end[/lua]


    Im weiteren Beitrag werde ich den Quelltext auseinander nehmen, um das ganze zu Verstehen.

  • So hier erkläre ich mal die ganzen Funktionen:


    [lua]


    function OnPlayerCommandText(playerid, cmdtext)


    local cmd,params = GetCommand(cmdtext);


    if cmdtext == "/ahelp" then
    CMD_AdminHelp(playerid);


    elseif cmd == "/kick" then
    CMD_Kick(playerid,params);


    elseif cmd == "/ban" then
    CMD_Ban(playerid,params);


    elseif cmd == "/kill" then
    CMD_Kill(playerid,params);


    elseif cmd == "/tp" then
    CMD_Teleport(playerid,params);


    elseif cmd == "/giveitem" then
    CMD_GiveItem(playerid,params);

    elseif cmd == "/time" then
    CMD_Time(playerid,params);

    elseif cmd == "/name" then
    CMD_Name(playerid,params);

    elseif cmd == "/color" then
    CMD_Color(playerid,params);
    end
    end




    [/lua]


    Hier sehen wir wenn der Administrator einen Befehl ein gibt kann er bestimme Funktionen ausführen.
    Erklären wir erstmal diesen Teil



    [lua]function OnPlayerCommandText(playerid, cmdtext)
    end
    [/lua]


    So bei diesem Befehl "function OnPlayerCommandText(playerid, cmdtext)" setzen wir eine Funktion das man im Spiel einige Befehle nutzen kann.



    Nun zu einigen Befehlen die man im Spiel eingeben kann


    [lua]



    if cmdtext == "/ahelp" then


    CMD_AdminHelp(playerid);


    elseif cmd == "/kick" then


    CMD_Kick(playerid,params);


    elseif cmd == "/ban" then


    CMD_Ban(playerid,params);


    elseif cmd == "/kill" then


    CMD_Kill(playerid,params);


    elseif cmd == "/tp" then


    CMD_Teleport(playerid,params);


    elseif cmd == "/giveitem" then


    CMD_GiveItem(playerid,params);



    elseif cmd == "/time" then


    CMD_Time(playerid,params);



    elseif cmd == "/name" then


    CMD_Name(playerid,params);



    elseif cmd == "/color" then


    CMD_Color(playerid,params);


    end




    [/lua]


    Hier haben wir einige Befehle gesetzt um später Funktionen zu schreiben, dass diese umsetzt.



    Nehmen wir hier mal einen einfachen Befehl den jeder Server Besitzer kennen sollte



    [lua]


    elseif cmd == "/kick" then


    CMD_Kick(playerid,params);


    [/lua]


    hier können wir schon herauslesen das der Spieler bei diesen Befehl vom Server gekickt werden soll.


    Jetzt müssen wir noch die dazu gehörende Funktion Programmieren, dass zeige ich euch hier im Beispiel:


    [lua]


    function CMD_Kick(playerid, params)


    if IsPlayerAdmin(playerid) == 1
    then
    local result,id,reason = sscanf(params,"ds");


    if result == 1
    then
    if IsPlayerConnected(id) == 1
    then
    for i = 0, MAX_SLOTS - 1
    do
    SendPlayerMessage(i,255,0,0,string.format("%s %s %s %s%s %s %s","(Server):",GetPlayerName(id),"has been kicked by",GetPlayerName(playerid),".","Reason:",reason));
    end


    Kick(id);
    else
    SendPlayerMessage(playerid,255,250,200,string.format("%s %d %s","(Server): Player ID",id,"is not connected with server."));
    end
    else
    SendPlayerMessage(playerid,255,250,200,"Use: /kick (playerid) (reason)");
    end
    else
    SendPlayerMessage(playerid,255,250,200,"(Server): You are not admin!");
    end
    end


    [/lua]



    Ich werde das Tutorial später vervollständigen, da ich gerade keine Zeit mehr habe.


    Für Fragen könnt ihr mich per PN anschreiben und bitte nur per PN. Damit dieser Thread übersichtlich bleibt.


    Grüße,

Participate now!

Don’t have an account yet? Create a new account now and be part of our community!