SA-MP Scripting Tutorial 1

In 10 Minuten startet der nächtliche Backupvorgang! Es kann währenddessen (ca. 10 Minuten) zu Einschränkungen bei der Nutzung des Forums kommen
Weitere Infos findet ihr im Thema Backup des Forums
Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • Hallo ein kleines Tutorial für alle die ab 0 anfangen wollen.
    Also als erstes müsst ihr euren Pawn Editor starten und am besten die "new.pwn" öffnen.
    So ihr seht jetzt die includes ganz oben, die braucht der Compiler.
    Hm, wenn ihr das Script anschaut dann sieht es am Anfang ziemlich kompliziert aus nicht? Wenn ihr euch erstmal eingearbeitet hat dann schaut es ziemlich einfach aus.


    1. Die Defines


    Dann gibts #define man könnte das als Variablen bezeichnen. Sie werden häufig als Farben benutzt.
    Die werden so eingesetzt( Ein Farb beispiel):

    Code
    #define blau 0x33AAFFAA
    SendClientMessage(playerid, blau, "Farben Test");


    Dies Sendet einen text "farben test" an playerid in blau. was das mit Playerid auf sich hat kommt gleich.
    Es gibt noch die spezielle Definition

    Code
    #define FILTERSCRIPT


    Das muss ihr reinmachen wenn ihr ein Filterscript macht.


    2. Das Script intalasieren und alle Spawns und AutoSpawns


    So jetzt wollen wir den Gamemode/filterscript starten (also das machen was am starten des Scripts passiert.
    Es gibt jetzt erstmal einen Allgemeinen Start

    Code
    main()
    {
    }


    Er intaliersirt das was drin ist egal ob Gamemode oder Filterscript.
    So aber das wollen wir nicht verwenden.
    Wir verwenden das:

    Code
    public OnGameModeInit()
    {
    }


    bzw.

    Code
    public OnFilterScriptInit()
    {
    }


    Hier könnt ihr nun allles reintun was intaalisirt werden sollen.
    Um euren Script namen zu setzen benutz das( nur für gamemode):

    Code
    SetGameModeText("Euer name des Scripts");


    Das Spawnt ein Auto bzw. Player (oder macht besser gersagt ein Player Spawn):

    Code
    AddStaticVehicle(Modelid,x Axis, y axis, z axis, z rotation, farbe 1, farbe2);
    AddPlayerClass(skinid,x axis, y axis, z axis, z rotation, waffe 1, waffe2, waffe 3, w 4, w5, w6);


    Dabei gibts ein Auto Limit von 700 autos, und 50 - 70 verschiedene Auto Models.


    Wo krieg ich die Coordinaten her?
    Ganz einfach geht in den SA:MP debug. Geht zum euren Ort wo ein Spawn gemacht werden soll. (Mit gewünschten Auto für auto Spawn oder mit Player für Player Spawn).
    Wenn ihr da seit gibt /save ein.
    Ihr könnt mit /vsel ein auto auswählen.
    Der Fertige code wird dann in die Datei namens "savedpositions.txt" in deinen sa ordner gespeichert


    3. Die Commandos


    Was wäre denn ein Server ohne Commandos?
    So jetzt kommen wir dazu.


    Also mit um die überhaupt zu machen, fangen wir mit denn Callback an.

    Code
    public OnPlayerCommandText(playerid, cmdtext[])
    {
    return 0;
    }


    Hier kommt alles rein was passieren soll, wenn irgendein Befehl, also mit / angegeben wird. Egal welcher befehl.
    Aber da wir bestimmte Befehle Filtern wollen, benutzen wir:

    Code
    if (strcmp("/befehl", cmdtext, true) == 0)
    {
    // Hier kommt der Code rein was passieren soll bei den Befehl.
    }


    Ein beispiel mit den /kill befehl.

    Code
    if (strcmp(cmdtext, "/kill", true)==0)
    {
    SetPlayerHealth(playerid, 0);
    return 1;
    }


    So jetzt wollen wir mal ein /me befehl machen

    Code
    if(strcmp(cmdtext, "/me", true)==0) { 
    new str[256], sname[256];
    GetPlayerName(playerid, sname, 256);
    format(str, 256, "%s %s", sname, cmdtext[4]);
    SendClientMessageToAll(0x33CCFFAA, str);
    return 1;
    }


    So das schaut ja am Anfang ziemlich komplex aus, ist es aber nicht wirklich wenn man es sich näher anschaut.


    Als erstes erstellen wir neue variablen: str Das benutzen wir als Text und pname für denn namen des Spielers.
    Jetzt müssen wir natürlich herausfinden, wie der Spieler Name überhaupt heißt.
    GetPlayerName(playerid, sname, 256); tut herausfinden wie der Player heißt, und tut ihn in dieser Variable abspeichern.
    Das format tut jetzt den Text generieren, sname und cmdtext tuen jetzt definieren was statt %s rein soll (es geht nicht anders), in der Reihenfolge wie sname oder cmdtext.
    Cmdtext ist der restliche Text, sonst wird es nur ein Wort oder Zahl verwendet.
    Jetzt wird das genierte Format ausgegeben, in leutblau. Unswar mit SendClientMessageToAll.


    Wie man es mit z.b. /spawn id macht kommt noch.


    So das Tut ist noch nicht ganz fertig. Weist mich bitte auf Fehler aufmerksam, wenn ich einen gemacht habe.

    3 Mal editiert, zuletzt von Sapd ()

  • Hmm ich fange bei 0 an, aber von dein TuT, sorry auch wie es klingt ich kapier dar gar nichts ?(
    Na ist auch noch nicht fertig lass dir Zeit und mach ein gutes.
    Für was ist die TuT um eine eigene Gamemode zu machen oder was?!
    Doch eine Sache habe ich gelernt ich darf/kann nur bis 700 Auto Spawnpunkte haben und 50 verschiedene Modelle, das mit
    den Debug konnte ich schon.


    Aber ich gebe den Anfängern ein Tipp probiert bisschen an paar Gamemodes herumzubasteln, dadurch lernt man sehr viel,
    habe auch schon ein bisschen die Gamemode Area51 geändert.

  • Schön und gut wenn du Tutorials erstellst aber solltest du dich dafür nicht etwas besser auskennen?
    zB wofür steht hier

    Code
    if (strcmp("/befehl", cmdtext, true, 10) == 0)

    ...die 10 ?


    Und wieso benutzt du hier

    Code
    if(strcmp(cmdtext, "/me", true)==0) {

    die "10" oder was auch immer nicht :/ ?
    Glaube nur ungern das der /me cmd von dir ist ;)


    Nimms' nicht böse,will ja nur helfen :cursing:

  • Hi erstma


    ich hab das noch nicht ganz kapiert mit den erstellen von autos und waffenund so.


    Könntet ihr mir das mal richtig erklären?! ***


    Hab ja auch noch eine frage wenn man sich jez einloggt wie kann man das denn so machen das wenn mein ein spieler nimmt z.B Rider das der dann bei Grove Street spawnt


    PLSSS ANTWORTEN :thumbup: :thumbup: :thumbup: danke im vorraus



    ***Meine icq numma 359-499-238***

  • also zu den Autos... es gibt 2 Möglichkeiten zum erstellen von Autos....:


    1.
    Im GameModeInit() kannst du "AddStaticVehicle" benutzen...
    Du erstellst so ein "statisches" Fahrzeug, dass nachdem es nur eine kurze Zeit nicht benutzt wieder zu diesem Punkt wandert xD
    ...
    Die Befehle innerhale von AddStaticV. findest du hier
    http://wiki.sa-mp.com/index.php/AddStaticVehicle



    2.
    Jederzeit kannst du ein CreateVehicle benutzen...
    Wie der Name schon sagt "kreierst" du ein Fahrzeug...
    Dieses Fahrzeug verschwindet nur nach laaaaaaaaaaaaaaanger Zeit und respawned nachdem es tot ist, nach der zeit die du möchtest...
    Sie Befehle innerhalb davon findest du hier:
    http://wiki.sa-mp.com/index.php/CreateVehicle



    Jetzt macht ma ein anderer weiter :D

    Einmal editiert, zuletzt von MiniYoda ()

  • bei dem /kill befehl, da kommt ja cmdtext vor. aber wenn ich das so schreibe meldet pawn beim compilen an der stelle ein error, da steht dann "error 017: undefined symbol "cmdtext" "
    und bei OnPlayerDeath kommt folgendes: "warning 209: function "OnPlayerDeath" should return a value"
    so sieht mein /kill befehl bis jetzt aus:


    Code
    public OnPlayerDeath(playerid, killerid, reason)
    	if (strcmp(cmdtext, "/kill", true)==0)
    	{
    	SetPlayerHealth(playerid, 0);
    	return 1;
    	}
  • Habe mal ne frage.


    Bei mir gibts nen eroor:



    Iwas stimmt mit dem Heal nicht. Könnt ihr mir helfen?

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen