[Tutorial] Tore auf ein Befehl + NamensErkennung

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, liebe Community,
    Ich wurde oft gefragt (nicht im Forum) wie man Tore auf einen Befehl bekommt.
    [Ich weiss, diese Tutorials gibt es schon], aber nicht mit Namenserkennung.
    Deswegen, setzte ich jetzt ein komplettes [Tutorial] zu diesesm Thema rein.


    Also, wir fangen an:


    Als erstes wollen wir das [Funktion] Tor "forwarden"
    wenn wir also ein [Funktion] Tor Namens = "lspd" haben, nennen wir das Tor [zB] = "lspdtor".
    Das mach ich so, damit ich nicht durcheinander komme; ein wenig Ordnung im Script, ist auch nicht schlecht ;)
    Also, lspd:



    forward GateCloselspd();


    Somit haben wir die Funktion stehen, ...
    Aber nicht das Tor. Das Tor setzen wir oben in den new Bereich :



    new lspdtor;


    Dann muss das Script ja wissen, welches Objekt überhaupt an welchen Platz sollte ...
    Deswegen, sezten wir unter public OnGameModeInit das Objekt, mit allen Infos rein.
    [Ich nutze den bfx_oStreamer]:



    lspdtor = b_CreateObject(971,1589.0394,-1638.0865,12.7981,0.00,0.00,180.00);


    Das müssen die x,y,z, etc. Koordinaten sein, wo das Tor im geschlossenen Zustand ist!
    Kurze Erklärung, zu den Koordinaten, in der zeile:



    modelid = Die Objekt ID
    Float:bx = Die X-Koordinate, wo sich das Objekt befinden soll
    Float:by = Die Y-Koordinate, wo sich das Objekt befinden soll
    Float:bz = Die Z-Koordinate, wo sich das Objekt befinden soll
    Float:brx = Die Rotation des Objekts X
    Float:bry = Die Rotation des Objekts Y
    Float:brz = Die Rotation des Objekts Z


    Wenn wir also das Tor [im geschlossenen Zustand] unter public OnGameModeInit
    gespeichert haben, kommen wir jetzt zum Befehl, der das Tor öffnen soll:



    if(strcmp(cmdtext, "/DeinBefehl", true) == 0 || strcmp(cmdtext, "/Abkürung[wenn du willst!/Kein Muss]", true) == 0)
    {
    if(IsPlayerConnected(playerid))
    {
    new Float:x, Float:y, Float:z;
    GetPlayerPos(playerid, x, y, z);
    if(PlayerToPoint(20.0, playerid, 1596.8392,-1638.0865,12.7981)) // LSPD Tor 1
    {
    if(gTeam[playerid] == 2 || IsACop(playerid)||PlayerInfo[playerid][pAdmin] >= 1339)
    {
    b_MoveObject(LS,1596.8392,-1638.0865,12.7981, 3.5);
    SetTimer("GateCloseLS", 5000, 0);
    SendClientMessage(playerid, COLOR_YELLOW,"Willkommen beim LSPD, das Tor schliesst sich in 5 Sekunden !");
    return 1;
    }
    else
    {

    SendClientMessage(playerid, COLOR_GREY, " Du gehörst
    nicht zum Polizeirevier / S.W.A.T. / oder zur Army !");
    }
    }


    Das ist der Tor Befehl. Damit öffnest du ein Tor.
    Kommen wir zur Erklärung, was alles drinne vorhanden ist!:


    Das ist der allgemeine Tor Befehl, dort sieht man, welcher Command genutzt wird.

    if(strcmp(cmdtext, "/DeinBefehl", true) == 0 || strcmp(cmdtext, "/Abkürung[wenn du willst!/Kein Muss]", true) == 0)


    Wenn man diesen Befehl also nutzen will, muss der Server erst einmal wissen, ob du Online bist:

    if(IsPlayerConnected(playerid))


    So, dann kommen wir jetzt zu den x,y,z Koordinaten. Nur wenn du dort stehst, kannst du das Tor öffnen:
    Hier werden deine Koordinaten also abgerufen, und wenn du in der Nähe bist, von diesem Punkt:

    if(PlayerToPoint(20.0, playerid, 1596.8392,-1638.0865,12.7981)) // LSPD Tor 1

    Kannst du das Tor öffnen, also schreiben wir hier die Koordinaten des Tores hin, wenn es aufgemacht ist,:
    also im Geöffneten Zustand!

    new Float:x, Float:y, Float:z;
    GetPlayerPos(playerid, x, y, z);
    if(PlayerToPoint(20.0, playerid, 1596.8392,-1638.0865,12.7981)) // LSPD Tor 1


    Dann wollen wir ja noch bestimmen, für wen dieses Tor öffnungsfähig sein soll!:

    if(gTeam[playerid] == 2 || IsACop(playerid)||PlayerInfo[playerid][pAdmin] >= 1339)

    Da steht nicht viel mehr drinne, als das du in dem Team Cop, oder ein Admin Rang 1339 sein musst!, Ich habe

    IsACop

    Für Swat, army Cops und FBI, definiert.
    Das ist natürlich frei entscheidbar!


    Hier kommen nochmals die Koordinaten rein,wenn das Tor im geöffneten Zustand ist.
    Hier ist nun aber noch eine Funktion!
    Die
    Funktion des Timers. Diese sagt nur, wie lange die Torfunktion
    GateCloselspd in dem geöffneten Zustand bleiben soll!

    SetTimer("GateCloselspd", 5000, 0);

    Wir erinnern uns an:

    forward GateCloselspd();

    Und natürlich die Nachricht, wenn du Es aufgemacht hast!

    b_MoveObject(LS,1596.8392,-1638.0865,12.7981, 3.5);
    SetTimer("GateCloseLS", 5000, 0);
    SendClientMessage(playerid, COLOR_YELLOW,"Willkommen beim LSPD, das Tor schliesst sich in 5 Sekunden !");
    return 1;


    Wenn du allerdings nicht in der Fraktion sein solltest, tritt dieser Schritt in Kraft!:

    else
    {

    SendClientMessage(playerid, COLOR_GREY, " Du gehörst nicht zum
    Polizeirevier / S.W.A.T. / oder zur Army !");
    }


    Am Ende wollen wir das Tor noch publicieren!
    Das mach ich immer am Ende meines Scripts. Viele sagen, mach das irgendwo, ich sage,
    hab Ordnung in deinem Script, so findest du alles schneller! ;)


    Also, kommt unten das hin:

    public GateCloselspd()
    {
    b_MoveObject(lspdtor,923.520386, -1221.555054, 17.693405, 3.5);
    return 1;
    }

    Dort werden wieder die Koordinaten, des geschlossenen Tores, gefordert.
    Wie wir sehen können, ist die Tor Funktion publiciert, und das Tor ist drinne:

    public gateCloselspd

    und das Tor:

    b_MoveObject(lspdtor, .....);


    Wenn du also mehrere Tore unter diesem Command laufen lassen willst, musst du
    diesen erst forwarden, dann allgemein kennzeichnen und unter deinen Befehl stecken,
    Wie!?
    Also:
    Wenn du hier dein erstes Tor hast:

    if(strcmp(cmdtext, "/DeinBefehl", true) == 0 || strcmp(cmdtext, "/Abkürung[wenn du willst!/Kein Muss]", true) == 0)
    {
    if(IsPlayerConnected(playerid))
    {
    new Float:x, Float:y, Float:z;
    GetPlayerPos(playerid, x, y, z);
    if(PlayerToPoint(20.0, playerid, 1596.8392,-1638.0865,12.7981)) // LSPD Tor 1
    {
    if(gTeam[playerid] == 2 || IsACop(playerid)||PlayerInfo[playerid][pAdmin] >= 1339)
    {
    b_MoveObject(LS,1596.8392,-1638.0865,12.7981, 3.5);
    SetTimer("GateCloseLS", 5000, 0);
    SendClientMessage(playerid, COLOR_YELLOW,"Willkommen beim LSPD, das Tor schliesst sich in 5 Sekunden !");
    return 1;
    }
    else
    {

    SendClientMessage(playerid, COLOR_GREY, " Du gehörst
    nicht zum Polizeirevier / S.W.A.T. / oder zur Army !");
    }
    }

    musst du es nur drunter tun!
    Beispiel:



    if(strcmp(cmdtext, "/DeinBefehl", true) == 0 || strcmp(cmdtext, "/Abkürung[wenn du willst!/Kein Muss]", true) == 0)
    {
    if(IsPlayerConnected(playerid))
    {
    new Float:x, Float:y, Float:z;
    GetPlayerPos(playerid, x, y, z);
    if(PlayerToPoint(20.0, playerid, 1596.8392,-1638.0865,12.7981)) // LSPD Tor 1
    {
    if(gTeam[playerid] == 2 || IsACop(playerid)||PlayerInfo[playerid][pAdmin] >= 1339)
    {
    b_MoveObject(LS,1596.8392,-1638.0865,12.7981, 3.5);
    SetTimer("GateCloseLS", 5000, 0);
    SendClientMessage(playerid, COLOR_YELLOW,"Willkommen beim LSPD, das Tor schliesst sich in 5 Sekunden !");
    return 1;
    }
    else
    {

    SendClientMessage(playerid, COLOR_GREY, " Du gehörst
    nicht zum Polizeirevier / S.W.A.T. / oder zur Army !");
    }
    }
    //------------------------- neues Tor --------------------------------------------------------»
    if(PlayerToPoint(20.0, playerid, 923.516113, -1221.483154, 14.268457)) // LSADAC Tor 1
    {

    if(PlayerInfo[playerid][pHSMember]==24 ||
    PlayerInfo[playerid][pHSLeader]==24||PlayerInfo[playerid][pAdmin] >=
    1339)
    {
    if(IsPlayerConnected(playerid))
    b_MoveObject(LSADACtor,923.516113, -1221.483154, 14.268457, 3.5);
    SetTimer("GateCloseLSADAC", 5000, 0);

    SendClientMessage(playerid,
    COLOR_YELLOW,"Willkommen beim LS - ADAC, das Tor schliesst sich in 5
    Sekunden !");
    return 1;
    }
    else
    {
    SendClientMessage(playerid, COLOR_GREY, " Du gehörst nicht zum LS - ADAC !");
    }
    }
    }


    Nun haben wir ein zweites Tor drinne, aber vorsicht!
    Du musst mit dem 2ten Tor genau so verkehren, wie mit dem ersten!


    Hier bei dem 2ten, ist eine kleinigkeit anders!

    if(PlayerInfo[playerid][pMember]==24 ||
    PlayerInfo[playerid][pLeader]==24||PlayerInfo[playerid][pAdmin] >=
    1339)

    hier steht aber nur drinne, welche Fraktion das nutzen kann, und nicht, ob er ein Cop ist [IsACop]


    So, jetzt kommen wir zum letzten Part!
    In diesem Part, zeige ich euch, wie man ein Tor auf Personen beziehen kann!


    Das ist im Prinzip sehr easy, wenn man seinen Kopf mal anstrengt ;)
    Also, bei der Abfrage, welche Fraktion, oder ob er ein Cop ist, kommt hier einfach
    die Abfrage rein, welcher Spieler das Tor öffnen darf!:
    Also, anstelle, von dem hier:

    if(PlayerInfo[playerid][pMember]==24 ||
    PlayerInfo[playerid][pLeader]==24||PlayerInfo[playerid][pAdmin] >=
    1339)


    kommt da



    new szPlayername[MAX_PLAYER_NAME];
    GetPlayerName(playerid, szPlayername, sizeof(szPlayername));
    if(!strcmp(szPlayername, "fresh_latte", true))

    das rein!
    Erklärung:



    new szPlayername[MAX_PLAYER_NAME];

    Das ist die allgemeine Einstellung, das das Script nach dem Namen sucht!



    GetPlayerName(playerid, szPlayername, sizeof(szPlayername));

    Dann will das Script natürlich wissen, wo es suchen soll!
    Und zum Schluss:



    if(!strcmp(szPlayername, "fresh_latte", true))

    Muss das Script wissen, welcher Name es denn sein soll!



    Das wars im Prinzip schon von mir und meinem [Tutuorial]
    Bitte seit nicht soooo streng mit der Bewertung, es ist mein erstes [Tutorial]


    Mfg


    EDIT// Originaltext:
    [http://87.106.31.133/fresh-tap…?page=Thread&threadID=70&]


    ___________________________________________________________
    RolePlay - Selfmade:
    [ ||||||||||||||||||||||||||||||||||||| 00,10%]
    ___________________________________________________________

    Einmal editiert, zuletzt von fresh-latte ()

  • o, oke ... wieso schwer erklärt?
    dann kann ich es ja noch ausbessern ...


    Mfg


    ___________________________________________________________
    RolePlay - Selfmade:
    [ ||||||||||||||||||||||||||||||||||||| 00,10%]
    ___________________________________________________________

  • ich würde
    7/10
    geben...


    ich finde es zwar gut erklärt nur würde ich es mir noch ein wenig übersichtlicher wünschen. Mit Farben groß und klein und mit Fett gedruckten wichtigen Sachen.


    Ansonsten gute Arbeit.


    Mit freundlichen Grüßen
    Max