Fraktion schließen

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,
    ich wollte heute zwei Befehle machen, die bewirken das man eine Fraktion öffnen und schließen kann. Das heißt mit /frakopen => Fraktion auf. /frakclose => Fraktion zu. Aber wie mache ich das, dass wenn sie zu ist und man connectet, dass man dann als Zivi gespawnt wird ? Ich habe bis jetzt noch nichts weil ich nicht weiß wie das geht.

  • Ich habe bis jetzt noch nichts weil ich nicht weiß wie das geht.


    Naja, einfach so:


    #define MAX_FRAKS 15 //Halt wie viele du hast


    new bool:frak[MAX_FRAKS char]; //Da alles mit false (0x00) initialisiert wird in Pawn, sind alle Fraktionen am Anfang offen


    //Dann wenn der Spieler sich eingeloggt hat
    const id = SpielerInfo[playerid][Fraktion]; //Halt mit deiner Speicherung anpassen
    if(frak{id} && id != 0)
    {
    //Hier ist die Fraktion geschlossen.
    SpielerInfo[playerid][Fraktion] = 0; //Hier setzt du ihn zum Zivi
    SpawnPlayer(playerid);//damit er nochmal spawnt als Zivi
    }


    //In deinem FrakClose command:
    frak{frakid} = true;


    //In deinem FrakOpen command:
    frak{frakid} = false;


    //Und dann halt noch Speichern.


    Hoffe das hilft dir als grobe Richtung ;)


    mfg. :thumbup:

    ast2ufdyxkb1.png


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

  • wie bzw. wo ich es speichern soll.


    Naja...entweder in einer Datenbank oder in einem File...


    Sieht dann z.B. so aus:


    Frak1 = 0 //ist offen
    Frak2 = 1 //ist geschlossen
    Frak3 = 0 //ist offen
    ...


    und dann halt wieder in die Variable frak schreiben ^^


    mfg. :thumbup:

    ast2ufdyxkb1.png


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

  • Mit der Leaderliste habe ich es mit Dini nicht geschafft und mit MySQL hat der Server das Script nicht geladen. Das habe ich auch mit Dini nicht weiter gemacht, weil ich es nicht richtig verstanden habe.


    //EDIT
    Ich habe das was Kaliber geschrieben mal in mein Script eingefügt und ich bekomme diese zwei Errors:

    C:\Users\Florian\Desktop\SA-MP Server\gamemodes\Evolution.pwn(444) : error 008: must be a constant expression; assumed zero
    C:\Users\Florian\Desktop\SA-MP Server\gamemodes\Evolution.pwn(467) : error 008: must be a constant expression; assumed zero
    Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase



    2 Errors.

    Die Zeilen dazu sind diese:

    const id = PlayerInfo[playerid][pFraktion];
    const id = PlayerInfo[playerid][pFraktion];

  • Schreibe einen Code niemals wie du ihn nicht verstehst. Diese Methode mit den gepackten Variablen macht es für Anfänger nur unnötig kompliziert und führt nur zu Fehlern. Die Einsparungen an Ressourcen sind so gering, da lohnt sich er Aufwand nicht, wenn man es in Relation zu den Fehlern sieht, wie man hier wunderschön sieht.


    Schreibe es so:
    #define MAX_FRAKS 15


    new bool:frakGeschlossen[MAX_FRAKS];


    //Dann wenn der Spieler sich eingeloggt hat
    new id = SpielerInfo[playerid][Fraktion];
    if(frakGeschlossen[id] && id != 0)
    {
    //Hier ist die Fraktion geschlossen.
    SpielerInfo[playerid][Fraktion] = 0;
    SpawnPlayer(playerid);
    }


    //In deinem FrakClose command:
    frakGeschlossen[frakid] = true;


    //In deinem FrakOpen command:
    frakGeschlossen[frakid] = false;

  • Jetzt bekomme ich diese zwei Errors:

    C:\Users\Florian\Desktop\SA-MP Server\gamemodes\Evolution.pwn(1115) : error 017: undefined symbol "frakid"
    C:\Users\Florian\Desktop\SA-MP Server\gamemodes\Evolution.pwn(1126) : error 017: undefined symbol "frakid"
    Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase



    2 Errors.

    Zeilen:

    frakGeschlossen[frakid] = true;
    frakGeschlossen[frakid] = false;

  • Achso danke ich habe das Problem gelöst :D aber wenn ich das dann inGame ausführe steht da dann immer: Du hast die Fraktion Zivilist geschlossen!
    Befehle:

    ocmd:frakclose(playerid,params[])
    {
    if(PlayerInfo[playerid][pEingeloggt] < 1 ) return SendClientMessage(playerid,Rot,"Du kannst diesen Befehl nicht nutzen, weil du nicht eingeloggt bist.");
    if(PlayerInfo[playerid][pAdminlevel] <= 1338)return SendClientMessage(playerid,Grau,"Du bist nicht befugt, diesen Befehl zu nutzen!");
    new fID,string[128];
    if(sscanf(params,"d",fID)) return SendClientMessage(playerid,Grau,"Benutze: /frakclose [Fraktion]");
    if(frakGeschlossen[fID] == true) return SendClientMessage(playerid,Grau,"Die Fraktion ist bereits geschlossen!");
    frakGeschlossen[fID] = true;
    format(string,sizeof(string),"Du hast die Fraktion %s geschlossen.",FraktionsNamen(fID));
    SendClientMessage(playerid,Blau,string);
    return 1;
    }
    ocmd:frakopen(playerid,params[])
    {
    if(PlayerInfo[playerid][pEingeloggt] < 1 ) return SendClientMessage(playerid,Rot,"Du kannst diesen Befehl nicht nutzen, weil du nicht eingeloggt bist.");
    if(PlayerInfo[playerid][pAdminlevel] <= 1338)return SendClientMessage(playerid,Grau,"Du bist nicht befugt, diesen Befehl zu nutzen!");
    new fID,string[128];
    if(sscanf(params,"d",fID)) return SendClientMessage(playerid,Grau,"Benutze: /frakopen [Fraktion]");
    if(frakGeschlossen[fID] == false) return SendClientMessage(playerid,Grau,"Die Fraktion ist bereits geöffnet!");
    frakGeschlossen[fID] = false;
    format(string,sizeof(string),"Du hast die Fraktion %s geöffnet.",FraktionsNamen(fID));
    SendClientMessage(playerid,Blau,string);
    return 1;
    }


    EDITS

    Spoiler anzeigen

    //EDIT: Zurecht gerückt!

  • da lohnt sich er Aufwand nicht, wenn man es in Relation zu den Fehlern sieht, wie man hier wunderschön sieht.


    Zu deiner Information die Fehler entstanden nicht durch das packen der Variablen, sondern durch das const...was als Beispiel dienen sollte.


    FraktionsNamen


    Zeig mal wie du diese Funktion geschrieben hast ;)

    ast2ufdyxkb1.png


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

  • Bitte sehr ;)

    stock FraktionsNamen(playerid)
    {
    new rankname[32];
    switch(PlayerInfo[playerid][pFraktion])
    {
    case 0: rankname="Zivilist";
    case 1: rankname="LSPD";
    case 2: rankname="FBI";
    case 3: rankname="Army";
    case 4: rankname="Medic";
    case 5: rankname="News Reporter";
    case 6: rankname="T-GmbH";
    case 7: rankname="Abfallwirtschaft";
    case 8: rankname="Hitman";
    case 9: rankname="Grove Street";
    case 10: rankname="Al-Qaida";
    case 11: rankname="Ballas";
    case 12: rankname="Fahrschule";
    case 13: rankname="La Cosa Nostra";
    case 14: rankname="Taxi";
    case 15: rankname="Yakuza";
    case 16: rankname="Staatsverwaltung";
    case 17: rankname="SAPD";
    case 18: rankname="Aztecas";
    case 19: rankname="Rifas";
    case 20: rankname="RS";
    case 21: rankname="Cripz";
    case 22: rankname="Russische Mafia";
    case 23: rankname="SFBC";
    case 24: rankname="Vagos";
    case 25: rankname="Wheelmen";
    }
    return rankname;
    }

  • //Edit:


    Schreib die Funktion mal so:


    stock FraktionsNamen(fID)
    {
    new rankname[32];
    switch(fID)
    {
    case 0: rankname="Zivilist";
    case 1: rankname="LSPD";
    case 2: rankname="FBI";
    case 3: rankname="Army";
    case 4: rankname="Medic";
    case 5: rankname="News Reporter";
    case 6: rankname="T-GmbH";
    case 7: rankname="Abfallwirtschaft";
    case 8: rankname="Hitman";
    case 9: rankname="Grove Street";
    case 10: rankname="Al-Qaida";
    case 11: rankname="Ballas";
    case 12: rankname="Fahrschule";
    case 13: rankname="La Cosa Nostra";
    case 14: rankname="Taxi";
    case 15: rankname="Yakuza";
    case 16: rankname="Staatsverwaltung";
    case 17: rankname="SAPD";
    case 18: rankname="Aztecas";
    case 19: rankname="Rifas";
    case 20: rankname="RS";
    case 21: rankname="Cripz";
    case 22: rankname="Russische Mafia";
    case 23: rankname="SFBC";
    case 24: rankname="Vagos";
    case 25: rankname="Wheelmen";
    }
    return rankname;
    }


    mfg. :thumbup:

    ast2ufdyxkb1.png


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

  • public FraktionsSave(fraktionsid)
    {
    new Fraktionsdatei[64];
    format(Fraktionsdatei,sizeof(Fraktionsdatei),"/Fraktionen/%s.txt",FraktionsNamen(fraktionsid));
    if(dini_Exists(Fraktionsdatei))
    {
    //Würde ich ein Einlogg Dialog machen
    }
    else
    {
    //Ein Registrieren Dialog damit er sich registriert oder nicht?
    }
    return 1;
    }

  • Warum den einen Einlogg und Register System habe ich doch schon. Es geht mir lediglich darum zu speichern, wer Leader ist und ob die Fraktion offen oder geschlossen ist.


    Kannst du so schreiben:
    public FraktionsSave(fraktionsid)
    {
    new Fraktionsdatei[64];
    format(Fraktionsdatei,sizeof(Fraktionsdatei),"/Fraktionen/%s.txt",FraktionsNamen(fraktionsid));
    if(!dini_Exists(Fraktionsdatei)) dini_Create(Fraktionsdatei);
    dini_IntSet(Fraktionsdatei, "frakGeschlossen", frakGeschlossen[frakid]);
    return 1;
    }

  • Ich habe jetzt folgendes gemacht:

    //Oben im Script
    forward FraktionsSave(fraktionsid);


    //Bei OnGamemodeInit()
    FraktionsSave(MAX_FRAKTIONEN);


    //Unten im Script
    public FraktionsSave(fraktionsid)
    {
    new Fraktionsdatei[64];
    format(Fraktionsdatei,sizeof(Fraktionsdatei),"/Fraktionen/%s.txt",FraktionsNamen(fraktionsid));
    if(!dini_Exists(Fraktionsdatei)) dini_Create(Fraktionsdatei);
    dini_IntSet(Fraktionsdatei, "frakGeschlossen", frakGeschlossen[fraktionsid]);
    dini_IntSet(Fraktionsdatei, "Leader", 0);
    return 1;
    }

    Ich bekomme keine Errors oder Warnings aber es erstellt keine Datei z.B. Namens LSPD, LCN, Ballas, Hitman,...

  • Ahh danke die Dateien hat es jetzt schon mal erstellt. Allerdings wenn ich z.B. /frakclose 25 eingebe steht da zwar das ich sie geschlossen habe aber wenn ich den Server restarte, bin ich trotzdem noch in der Fraktion.

    ocmd:frakclose(playerid,params[])
    {
    if(PlayerInfo[playerid][pEingeloggt] < 1 ) return SendClientMessage(playerid,Rot,"Du kannst diesen Befehl nicht nutzen, weil du nicht eingeloggt bist.");
    if(PlayerInfo[playerid][pAdminlevel] <= 1338)return SendClientMessage(playerid,Grau,"Du bist nicht befugt, diesen Befehl zu nutzen!");
    new fID,string[128];
    if(sscanf(params,"d",fID)) return SendClientMessage(playerid,Grau,"Benutze: /frakclose [Fraktion]");
    if(frakGeschlossen[fID] == true) return SendClientMessage(playerid,Grau,"Die Fraktion ist bereits geschlossen!");
    frakGeschlossen[fID] = true;
    FraktionsSave(fID);
    format(string,sizeof(string),"Du hast die Fraktion %s geschlossen.",FraktionsNamen(fID));
    SendClientMessage(playerid,Blau,string);
    return 1;
    }
    ocmd:frakopen(playerid,params[])
    {
    if(PlayerInfo[playerid][pEingeloggt] < 1 ) return SendClientMessage(playerid,Rot,"Du kannst diesen Befehl nicht nutzen, weil du nicht eingeloggt bist.");
    if(PlayerInfo[playerid][pAdminlevel] <= 1338)return SendClientMessage(playerid,Grau,"Du bist nicht befugt, diesen Befehl zu nutzen!");
    new fID,string[128];
    if(sscanf(params,"d",fID)) return SendClientMessage(playerid,Grau,"Benutze: /frakopen [Fraktion]");
    if(frakGeschlossen[fID] == false) return SendClientMessage(playerid,Grau,"Die Fraktion ist bereits geöffnet!");
    frakGeschlossen[fID] = false;
    FraktionsSave(fID);
    format(string,sizeof(string),"Du hast die Fraktion %s geöffnet.",FraktionsNamen(fID));
    SendClientMessage(playerid,Blau,string);
    return 1;
    }