Fraktionen erstellen (No gf)

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
  • Hey Brotfische :)
    Ich erkläre euch heute mal wie man ganz einfach Fraktionen erstellen kann.
    Ich habe nochmal alles mit einem Kommentar kommentiert, damit ihr es auch versteht ;)
    Nun, zuerst solltet ihr euch Farben definieren, falls ihr noch keine in eurem Script habt, das geht so:
    #define Blau 0x0087FFFF //Definiert die Farbe Blau,
    dann bräuchtet ihr noch zwei includes, die ihr unter #include <a_samp> einfügt,
    einmal ocmd und sscanf.
    Das sollte so aussehen:
    #include <a_samp>
    #include <ocmd>
    #include <sscanf>
    Ihr braucht auch Spielervariablen, wofür man enum oder PVar's nimmt.
    Ich benutze dafür enum's, da ich lieber mit der Funktion arbeite.
    Ein neuen enum erstellt ihr mit
    enum Name
    {
    Name1,
    Name2
    }
    new SpielerInfo[MAX_PLAYERS][Name];
    Nun zur Erklärung, mit enum erstellt ihr halt einen neuen enum mit dem Namen "Name".
    Dann kommt eine geschweifte Klammer ({) , dann die Spielervariable Name1 und Name2, dann kommt halt die andere geschweifte Klammer (}).
    Nun könnt ihr zbsp die Variable Name1 des Spielers auf den Wert 1 setzen:
    SpielerInfo[playerid][Name1] = 1;
    abfragen kann man es so:
    if(SpielerInfo[playerid][Name1] == 1).
    Ich erstelle nun einen Enum für den Spieler.
    enum Spieler //erstellt den enum mit den Namen Spieler
    {
    pLeader, //Erstellt die Spielervariable pLeader
    pMember, //Erstellt die Spielervariable pMember
    pAdmin, //Erstellt die Spielervariable pAdmin
    eingeladen
    }
    new sInfo[MAX_PLAYERS][Spieler]; //deklariert die Variable sInfo, [MAX_PLAYERS] steht für Spieler, also das jeder seine eigenen Variablen hat und [Spieler] für den enum Spieler


    Nun wollen wir jemanden zu einem Leader machen können, dass geht so:
    ocmd:makeleader(playerid,params[])
    {
    if(sInfo[playerid][pAdmin]>=4)
    {
    new frakid, pID; //Deklariert die Variablen frakid und pID
    if(sscanf(params,"us",pID,frakid))return SendClientMessage(playerid,0xFF0000,"Richtige Benutzung: /makeleader [id] [frakid]"); //Falls er /makeleader unvollständig eingibt
    sInfo[pID][pLeader]=frakid; //Setzt die Variable pLeader auf den Wert den man eingegeben hat.
    SendClientMessage(pID,Blau,"Du wurdest Leader einer Fraktion gemacht.");
    }
    else //Falls er nicht das Adminlevel 4 besitzt
    {
    SendClientMessage(playerid,Blau,"Du hast nicht die benötigten Adminrechte!");
    }
    return 1;
    }
    Als nächstes erkläre ich euch den invite Befehl:
    ocmd:invite(playerid,params[])
    {
    if(sInfo[playerid][pLeader]==1) //Fragt ab ob die Spielervariable pLeader den Wert 1 hat
    {
    new pID; //Deklariert die Variable pID
    if(sscanf(params,"u",pID))return SendClientMessage(playerid,0xFF0000,"Richtige Benutzung: /invite [id]"); //Fragt ab ob der Leader den Befehl /invite vollständig eingegeben hat
    SendClientMessage(pID,Blau,"Du wurdest zur Fraktion LSPD eingeladen. Benutze /annehmen um der Fraktion beizutreten.");// Sendet dem Spieler pID die Nachricht
    sInfo[playerid][eingeladen]=1; //Setzt die Spielervariable "eingeladen" auf 1
    }
    return 1;
    }
    Nun brauchen wir natürlich auch einen Befehl zum annehmen :)
    ocmd:annehmen(playerid,params[])
    {
    if(sInfo[playerid][eingeladen]==1) //Fragt ob die Spielervariable eingeladen den Wert 1 hat
    {
    sInfo[playerid][pMember]=1; //Setzt die Spielervariable pMember auf 1
    SendClientMessage(playerid,Blau,"Du hast die Einladung angenommen."); // Schickt dem Spieler die Nachricht
    }
    /*
    if(sInfo[playerid][eingeladen]==2)//Beispiel für die Abfrage für frak 2
    */
    return 1;
    }
    Um jemanden wieder zu uninviten, brauchen wir natürlich auch wiederum einen Befehl ^^
    ocmd:uninvite(playerid,params[]) {
    if(sInfo[playerid][pLeader]==1) { ////Fragt ab, ob die Variable pLeader den Wert 1 hat und führt eine Aktion aus wenn er leader ist
    new pID; //Deklariert die Variable pID
    if(sscanf(params,"u",pID))return SendClientMessage(playerid,0xFF0000,"Richtige Benutzung: /uninvite [id]"); // Grobe Übersetzung: Wenn sscanf im params keine spielerid/name findet returnt es... wenn doch wird der wert von pID zum wert des ersten paramenters gemacht
    if(sInfo[pID][pMember] != sInfo[playerid][pLeader]) //Fragt ab ob der Spieler in der gleichen Fraktion ist
    { return SendClientMessage(playerid,Blau,"Der Spieler ist nicht in ihrer Fraktion); }
    sInfo[pID][pMember]=0;//Uninvitet ihn letzendlich
    }
    return 1;
    }
    Um im LSPD intern zu schreiben, erstelle ich den Befehl "/d"
    ocmd:d(playerid,params[])
    {
    if(sInfo[playerid][pMember]==1 || sInfo[playerid][pLeader]==1) //Fragt ab ob die Spielervariable pMember oder pLeader den Wert 1 besitzen
    {
    new text, //Deklariert die Variable text und name
    name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,sizeof(name));
    if(sscanf(params,"s",text))return SendClientMessage(playerid,0xFF0000,"Richtige Benutzung: /d [TEXT]"); //Fragt ab ob die Person "/d" vollständig eingegeben hat
    for(new i = 0; i < MAX_PLAYERS; i++) //Startet eine Schleife durch alle Spieler
    {
    if(sInfo[i][pMember]==1 || sInfo[i][pLeader]==1) //fragt ab wer Leader oder Member des LSPD's ist
    {
    new string[128];
    format(string,sizeof(string),"%s: %s",name,text);
    SendClientMessage(i,Blau,string); //Schickt jedem Mitglied des LSPDs die Nachricht
    }
    }
    }
    return 1;
    }
    Damit man auch direkt in der Base spawnt, muss man im Callback OnPlayerSpawn abfragen ob die Person in der Fraktion ist:
    public OnPlayerSpawn(playerid)
    {
    if(sInfo[playerid][pMember]==1 || sInfo[playerid][pLeader]==1) //Wenn die Spielervariable bei dem Spieler pMember oder pLeader auf 1 steht, soll dass passieren:
    {
    SetPlayerPos(playerid,288.745971,169.350997,1007.171875);//Den Spieler zu den Koordinaten teleportieren, die das stehen
    SetPlayerInterior(playerid,3); //Den Spieler ins Interior mit der ID 3 teleportieren
    }
    return 1;
    }

    So, dass war ja nun auch schon das meiste.
    Nun möchten wir aber auch noch Autos für das LSPD einfügen, das geht so:
    1) Eine Variable deklarieren (Bsp: new LSPDv[2];
    2) unter OnGameModeInit das Fahrzeug zu der Variable LSPDv zuzuordnen (Bsp:
    LSPDv[0] = CreateVehicle(520, 2109.1763, 1503.0453, 32.2887, 82.2873, 0, 1, 60); //Erstellt ein Fahrzeug mit der ID 520 und weist es LSPDv hinzu. weswegen [0]? Weil man immer mit 0 beim zählen bei Pawn anfängt.
    LSPDv[1] = CreateVehicle(520, 2109.1763, 1503.0453, 32.2887, 82.2873, 0, 1, 60); //Das gleiche wie Oben)
    3) Beim einsteigen kontrollieren, ob der Spieler in der Fraktion LSPD ist:
    public OnPlayerStateChange(playerid, newstate, oldstate)
    {
    for(new i = 0; i < sizeof(LSPDv); i++)//erstellt eine Schleife, die überprüft ob der Spieler sich in ein Auto setzt, welches der Variable LSPDv zugewiesen wurde
    {
    if(newstate == PLAYER_STATE_DRIVER && GetPlayerVehicleID(playerid) == LSPDv[i])//fragt ab ob er fahrer ist und das auto LSPDv[i] ist
    {
    if(sInfo[playerid][pMember] == 0 || sInfo[playerid][pLeader]==0) //Fragt ob die Spielervariable pMember oder pLeader 0 ist
    {
    SendClientMessage(playerid,Blau,"Du bist kein Beamter der LSPD und darfst nicht mit diesem Auto fahren!"); //Schickt diese Nachricht aus
    RemovePlayerFromVehicle(playerid); //Schmeisst den Spieler aus dem Fahrzeug
    }
    else if(sInfo[playerid][pMember]==1 || sInfo[playerid][pLeader]==1) //Fragt ob die Spielervariable pMember oder pLeader 1 ist
    {
    SendClientMessage(playerid,Blau,"Du hast ein Auto des LSPD betreten, fahr vorsichtig!"); //Schickt diese Nachricht aus
    }
    }
    }
    return 1;
    }
    So, das war nun mein kleines und erstes Tutorial.
    Ich hoffe ich konnte jemanden helfen, der noch nicht wusste wie man Fraktionen scriptet.
    Bewertungen und Kritik sind gerne erwünscht, mfg Skypolee :)

    2 Mal editiert, zuletzt von Skypolee ()

  • Bei mir kommen leider diese Fehler !


    C:\Users\Ahmad El-Zain\Desktop\GTA San Andreas\2Live_Server by Ahmad\gamemodes\2L.pwn(576) : error 017: undefined symbol "sInfo"
    C:\Users\Ahmad El-Zain\Desktop\GTA San Andreas\2Live_Server by Ahmad\gamemodes\2L.pwn(576) : warning 215: expression has no effect
    C:\Users\Ahmad El-Zain\Desktop\GTA San Andreas\2Live_Server by Ahmad\gamemodes\2L.pwn(576) : error 001: expected token: ";", but found "]"
    C:\Users\Ahmad El-Zain\Desktop\GTA San Andreas\2Live_Server by Ahmad\gamemodes\2L.pwn(576) : error 029: invalid expression, assumed zero
    C:\Users\Ahmad El-Zain\Desktop\GTA San Andreas\2Live_Server by Ahmad\gamemodes\2L.pwn(576) : fatal error 107: too many error messages on one line

  • Bei mir kommen leider diese Fehler !


    C:\Users\Ahmad El-Zain\Desktop\GTA San Andreas\2Live_Server by Ahmad\gamemodes\2L.pwn(576) : error 017: undefined symbol "sInfo"
    C:\Users\Ahmad El-Zain\Desktop\GTA San Andreas\2Live_Server by Ahmad\gamemodes\2L.pwn(576) : warning 215: expression has no effect
    C:\Users\Ahmad El-Zain\Desktop\GTA San Andreas\2Live_Server by Ahmad\gamemodes\2L.pwn(576) : error 001: expected token: ";", but found "]"
    C:\Users\Ahmad El-Zain\Desktop\GTA San Andreas\2Live_Server by Ahmad\gamemodes\2L.pwn(576) : error 029: invalid expression, assumed zero
    C:\Users\Ahmad El-Zain\Desktop\GTA San Andreas\2Live_Server by Ahmad\gamemodes\2L.pwn(576) : fatal error 107: too many error messages on one line


    Hast du evt. im enum pInfo gemacht?
    Hast ja sInfo geschrieben ;)
    EDIT: Fehler gefunden?
    2: Wie gefällt euch das tut?

    2 Mal editiert, zuletzt von Skypolee ()

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Nicht so gutes Tutorial
    Jeder Leader könnte jeden Member uninviten könnte man alles etwas besser machen...

    [tabmenu][tab='Angebote','http://cdn3.iconfinder.com/data/icons/glyph/227/Tag-48.png']

    + Die Preise liegen bei 5-100+€ Ablauf:
    + Entweder ihr addet mich in Skype (PN vorher Schreiben) oder Ihr schreibt eine PN an mich (Betreff - Euer Wunsch z.B. Filterscript)
    + So nun schreibt ihr mir was ihr alles in dem Script haben wollt ich werd euch dann sagen ob ich es hinbekomme.
    + Dann machen wir ein groben Preis aus. Ich werde das Script erstellen und es zusammen mit dem Kunden Testen.



    [tab='Kontakt','http://cdn3.iconfinder.com/data/icons/line/36/person_add-48.png']
    edmix23

    + Bitte beim Adden angeben wer ihr seit oder per PN bescheid sagen!
    [tab='Zahlungs Methoden','https://cdn3.iconfinder.com/data/icons/line/36/check_money-32.png']
    +Paypal!
    +Direkte Banküberweisung

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