Fraktionsfahr zeuge unzugänglich machen für nichtmember

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 zusammen


    in diesem Tutorial stelle ich euch das Fraktionsfahrzeugsystem vor.


    in dieser V.1.0 werde ich die Fahrzeuge im Script definieren
    in der kommenden V.1.1 werde ich das ganze auf MYSQL umschreiben was ggf einfacher ist


    beide Tutorials werde ich auch aufnehmen damit, wenn fragen aufkommen diese dort ggf gelöst werden




    Ihr benötigt folgende Dinge!
    - ein Fraktionssystem -> Ränge und Leader definiert


    Also wir fangen an!


    Inhaltsverzeichnis


    1. Autos speichern
    1.1 Fahrzeuge speichern
    1.2 Daten abrufen
    1.3 Fahrzeuge im Script festlegen
    2. Fahrzeuge unzugänglich machen



    1. Ihr geht ingame und erstellt ein Fahhrzeug


    ihr fahrt mit diesem an die Position wo das Fahrzeug stehen soll
    dann speichert ihr es mit /save
    bsp: /save PDcar1


    damit ist das Fahrzeug gespeichert und ihr könnt es nun auslesen


    1.2
    Ihr geht in Dokumente -> GTA San Andreas User Files -> SAMP -> savedpositions


    Dort müsste dann (bei ggf mehreren gespeicherten Positionen ganz unten) eine so aussehende Zeile stehen


    AddStaticVehicle(407,1724.4451,-1122.1180,24.3219,184.6226,3,1); // Firetruck 2


    Diese Zeile gibt die genaue Poistion, die Fahrzeug iD, die Virtuelle Welt und die Farben an


    ihr kopiert sie erstmal mit STRG + C und braucht sie erst gleich


    1.3 Im Script



    Ihr öffnet euer Script,


    anschließend legt ihr bei euren news die Fahrzeuge fest


    bsp : new firecars[20];


    die 20 gibt die maximale Anzahl der Fahrzeuge an
    es ist immer 1 mehr als in der Klammer angegeben


    also 20 =21
    30 = 31
    usw



    dann geht ihr zu public Ongamemodeinit


    dort definiert ihr das Fahrzeug und erstellt es zugleich beim Server start


    z.B.
    firecars[0] = AddStaticVehicle(407,1733.4854,-1118.9666,24.3227,181.7693,3,1); // Firetruck 1


    dabei erhöht ihr die Zahl in der Klammer immer um 1 (bei jedem Fahrzeug!)



    nun ist das Fahrzeug definiert und erstellt



    3. Fahrzeug unzugägnlich machen!



    Geht in das Public OnPlayerStateChange


    Dort habt ihr if(newstate == PLAYER_STATE_DRIVER)
    oder
    if(oldstate == PLAYER_STATE_ONFOOT && newstate == PLAYER_STATE_DRIVER)


    wo ihr das einfügt ist eig egal, ich habe es bei
    if(newstate == PLAYER_STATE_DRIVER)



    anschließend erstellt ihr dort eine Schleife


    for(new i=0; i<sizeof(firecars); i++)
    {
    //die schleife fragt die maximale zahl der definierten Fahrzeuge ab
    if(GetPlayerVehicleID(playerid) == firecars[i])
    {
    if(isPlayerInFrak(playerid,1)) //Hier fragt ihr ab in welcher Fraktion der Spieler sein soll , 1 ist bei mir die Feuerwehr
    {
    return 1;
    }
    else //Spieler ist nicht in feuerwehr Frak //sollte er nicht in der Fraktion sein schmeißt ihr ihn aus dem Fahrzeug
    {
    RemovePlayerFromVehicle(playerid);
    SendClientMessage(playerid,RED,"Du bist kein Member/Leader der Feuerwehr");
    return 1;
    }
    }

    }




    Nun habt ihr eine Schleife die abfragt ob er das Fahrzeug betreten darf


    dies könnt ihr nun mit allen Fraktionen machen


    Natürlich könnt ihr hier noch ein Einbruchsystem und allem drum und dran einbauen was ich ggf auch noch machen werde



    Ich freue mich über jede Bewertung



    MFG


    Ultimatrum

  • Ich finde, dass dies nichts neues bzw. atemberaubendes ist. Außerdem sieht es so aus,
    als hättest du diesen Code irgendwo abgeschaut, ein wenig verändert und einfach so
    eingefügt. Kann man anhand deiner Schleife erkennen, da du die Schleife ohne diverser
    Erklärungen reingesteckt hast und bitte sehr. Dort müsste stehen, wie so eine Schleife
    funktioniert, weil wenn ein Spieler/Skripting-Anfänger mal anschaut, dann fragt er sich
    ob er Chinesisch lernt.


    Nicht jeder würde verstehen was zum Beispiel das "i" bedeutet und schon gar nicht, wenn
    dort danach die nächste Kopfnuss kommt, wo steht i<sizeof(firecars); Was bedeutet dieses
    Zeichen "<" musst du zum Beispiel erklären, oder das sizeof(firecars); Und was hat das i++ überhaupt
    zu bedeuteten.


    Trainier selber etwas zu skripten und nicht zu kopieren, man sieht es doch direkt.


    for(new i=0; i<sizeof(firecars); i++)

  • Hey,


    es wäre gut, wenn du mehr erklären würdest.
    Beispielsweise hier:

    Zitat

    die 20 gibt die maximale Anzahl der Fahrzeuge an
    es ist immer 1 mehr als in der Klammer angegeben


    also 20 =21
    30 = 31


    Warum ist das so?


    Außerdem ist das Ganze ziemlich unübersichtlich :wacko:
    Mal abgesehen von den Rechtschreibfehlern.


    Des Weiteren ist die Erklärung der Schleife falsch, bitte nochmal überarbeiten.


    Grüße

  • Sagen wir mal so, dies ist in so gut wie jedem Script.
    Man kann ja jederzeit einfach von "Aus dem Fahrzeug gekickt werden" bis " gar nicht erst einsteigen können" entscheiden.


    Trotzdem schönes Tutorial. 8)


    Vielleicht zeigst du ja mal beide Möglichkeiten?


    MfG

  • Ich will mal eine andere Methode vorstellen.


    Es geht viel leichter, viel schneller und man spart jede Menge Ressourcen :)


    new lspd[2],medic[2];


    Also, man brauch einfach nur ein Array mit 2 Feldern.


    Code
    0 = Anfang der Liste
    1 = Ende der Liste


    Jetzt erstellt man z.B. so die Fahrzeuge:


    lspd[0] = CreateVehicle(...); //LSPD Fahrzeug (erstes Fahrzeug)
    CreateVehicle(...); //LSPD Fahrzeug
    CreateVehicle(...); //LSPD Fahrzeug
    CreateVehicle(...); //LSPD Fahrzeug
    CreateVehicle(...); //LSPD Fahrzeug
    CreateVehicle(...); //LSPD Fahrzeug
    lspd[1] = CreateVehicle(...); //LSPD Fahrzeug (letztes Fahrzeug)


    medic[0] = CreateVehicle(...); //Medic Fahrzeug (erstes Fahrzeug)
    CreateVehicle(...); //Medic Fahrzeug
    CreateVehicle(...); //Medic Fahrzeug
    CreateVehicle(...); //Medic Fahrzeug
    CreateVehicle(...); //Medic Fahrzeug
    CreateVehicle(...); //Medic Fahrzeug
    medic[1] = CreateVehicle(...); //Medic Fahrzeug (letztes Fahrzeug)


    Und dann einfach folgendes (man braucht nicht einmal eine Schleife!):


    public OnPlayerStateChange(playerid, newstate, oldstate)
    {
    if(newstate == PLAYER_STATE_DRIVER)
    {
    new vehicleid = GetPlayerVehicleID(playerid);
    if(lspd[0] <= vehicleid <= lspd[1]) return SendClientMessage(playerid,-1,"Sie sitzen in einem LSPD Fahrzeug!");
    else if(medic[0] <= vehicleid <= medic[1]) return SendClientMessage(playerid,-1,"Sie sitzen in einem Medic Fahrzeug!");
    }
    return 1;
    }


    Viel Spaß mit diesem System ;)


    mfg. :thumbup:


    //Edit: Fehler

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

    2 Mal editiert, zuletzt von Kaliber ()

  • Es ist immer 1 mehr als in der Klammer angegeben?
    Nein es ist immer 1 weniger =)
    Heißt 20-1 = 19.
    Warum erstellst du die Fahrzeuge via Script? (Kann man machen) Dann könnte man sie gleich Dynamisch erstellen.
    Ist ja jetzt auch nichts schweres.

  • Hey, habe mir das mal durchgelesen und verstehe es jetzt nicht @Kaliber Was passiert in deinem System was du hier geschrieben hast?



    public OnPlayerStateChange(playerid, newstate, oldstate)
    {
    if(newstate == PLAYER_STATE_DRIVER)
    {
    new vehicleid = GetPlayerVehicleID(playerid);
    if(lspd[0] <= vehicleid <= lspd[1]) return SendClientMessage(playerid,-1,"Sie sitzen in einem LSPD Fahrzeug!");
    else if(medic[0] <= vehicleid <= medic[1]) return SendClientMessage(playerid,-1,"Sie sitzen in einem Medic Fahrzeug!");
    }
    return 1;
    }


    Verstehe jetzt nicht ob dadurch der Zivilist raus geschmissen wird? Nein oder? Es kommt ja nur die ClientMessage an den Spieler das dieser in einem LSPD oder Medic wagen sitzt. Wo wird da einer aus dem Auto geschmissen weil er nicht in der Fraktion ist? Oder habe ich das übersehen? ?(

  • Verstehe jetzt nicht ob dadurch der Zivilist raus geschmissen wird? Nein oder?

    Willkommen auf Breadfish!


    Nein, der Spieler wird nicht aus dem Fahrzeug geworfen, dazu fehlt RemovePlayerFromVehicle.
    Das kannst du dazu noch einfügen bzw. die SendClientMessage dadurch ersetzen, allerdings muss ich dazu sagen, dass die angewendete Methode um die Fahrzeuge zu prüfen extrem schlecht ist, da dies mit ziemlicher Wahrscheinlichkeit zu Fehlern führt, spätestens dann, wenn man ein Medic-Fahrzeug entfernt und wieder erstellt, wenn zuvor ein Fahrzeug mit einer kleineren ID entfernt wurde. Das so zu machen empfehle ich nicht.


    Ich empfehle dir eines der beiden Tutorials anzuschauen:


    [jTuT] Fraktions-Fahrzeug-System mit Dini 1.6
    [jTuT] Fraktions-Fahrzeug-System mit MySQL R39-2


    Die sind zum einen dynamisch aufgebaut und zum anderen komplett funktionsfähig.