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
  • Befehl:

    ocmd:makeleader(playerid,params[])
    {
    new pID,Fraktion;
    if(PlayerInfo[playerid][pEingeloggt] < 1 ) return SendClientMessage(playerid,Rot,"Du kannst diesen Befehl nicht nutzen, weil du nicht eingeloggt bist.");
    if(PlayerInfo[playerid][pAdminlevel] <= 1337)return SendClientMessage(playerid,Grau,"Du bist nicht befugt, diesen Befehl zu nutzen!");
    if(sscanf(params,"ui",pID,Fraktion))
    {
    SendClientMessage(playerid,Gelb,"Benutze: /makeleader [playerid/PartOfName] [Fraktion]");
    SendClientMessage(playerid,Gelb,"1 = LSPD, 2 = FBI, 3 = Army, 4 = Medic, 5 = News, 6 = T-GmbH,");
    SendClientMessage(playerid,Gelb,"7 = Abfallwirtschaft, 8 = Hitman, 9 = Grove Street, 10 = Al-Qaida,");
    SendClientMessage(playerid,Gelb,"11 = Ballas, 12 = Fahrschule, 13 = La Cosa Nostra, 14 = Taxi,");
    SendClientMessage(playerid,Gelb,"15 = Yakuza, 16 = Staatsverwaltung, 17 = SAPD, 18 = Aztecas,");
    SendClientMessage(playerid,Gelb,"19 = Rifas, 20 = RS, 21 = Cripz, 22 = Russische Mafia, 23 = SFBC,");
    SendClientMessage(playerid,Gelb,"24 = Vagos, 25 = Wheelmen");
    return 1;
    }
    if(!IsPlayerConnected(pID))return SendClientMessage(playerid,Grau,"Der angegebene Spieler ist nicht Online!");
    if(frakGeschlossen[Fraktion] == true) return SendClientMessage(playerid,Grau,"Die Fraktion ist geschlossen!");
    if(Fraktion < 0 || Fraktion > 26) return SendClientMessage(playerid,Grau,"Bitte nimm eine Fraktion zwischen 0 und 5!");
    PlayerInfo[pID][pLeader] = Fraktion;
    PlayerInfo[pID][pFraktion] = Fraktion;
    PlayerInfo[pID][pMember] = Fraktion;
    PlayerInfo[pID][pRank] = 7;
    new Fraktionsdatei[64];
    format(Fraktionsdatei,sizeof(Fraktionsdatei),"/Fraktionen/%s.txt",FraktionsNamen(Fraktion));
    dini_Set(Fraktionsdatei, "LeaderName", SpielerName(pID));
    SpawnPlayer(pID);
    if(Fraktion == 0)
    {
    Leaders--;
    }
    else if(Fraktion >= 1)
    {
    Leaders++;
    }
    new string[128],name[MAX_PLAYER_NAME];
    GetPlayerName(pID,name,sizeof(name));
    GetPlayerName(playerid,name,sizeof(name));
    format(string,sizeof(string),"Du hast %s Leader der Fraktion %s gemacht.",name,LeaderRank(pID));
    SendClientMessage(playerid,Blau,string);
    format(string,sizeof(string),"%s hat dich Leader der Fraktion %s gemacht.",name,LeaderRank(pID));
    SendClientMessage(pID,Blau,string);
    return 1;
    }

    Speicherung und Laden:

    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, "LeaderName", 0);
    return 1;
    }


    public FraktionsLaden(fraktionsid)
    {
    new Fraktionsdatei[64];
    new frakLeaderName[MAX_FRAKTIONEN][MAX_PLAYER_NAME];
    format(Fraktionsdatei,sizeof(Fraktionsdatei),"/Fraktionen/%s.txt",FraktionsNamen(fraktionsid));
    if(!dini_Exists(Fraktionsdatei)) dini_Create(Fraktionsdatei);
    frakGeschlossen[fraktionsid] = bool:dini_Int(Fraktionsdatei, "frakGeschlossen");
    format(frakLeaderName[fraktionsid], MAX_PLAYER_NAME, dini_Get(Fraktionsdatei, "LeaderName"));
    return 1;
    }


    PS: Ich habe alle Fraktionsdateien nochmal gelöscht. Jetzt hat es neue erstellt und da steht gar nichts innen...

  • Da steht erst was drin, wenn du sie sperrst, oder ihr einen Leader zuweist.
    Solange du keinen Daten vergeben hast, muss ja auch nichts drin stehen. ;)


    Falls du unbedingt was drin stehen haben willst, nachdem die Dateien erstellt worden sind, dann ändere:
    if(!dini_Exists(Fraktionsdatei)) dini_Create(Fraktionsdatei);
    zu:
    if(!dini_Exists(Fraktionsdatei))
    {
    dini_Create(Fraktionsdatei);
    dini_Set(Fraktionsdatei, "LeaderName", "Niemand");
    dini_Set(Fraktionsdatei, "frakGesperrt", "0");
    }

  • Ja! :thumbup:


    Vom Prinzip her so:
    new string[512];
    for(new i=0; i<26; i++)
    {
    format(Fraktionspfad, ...
    format(string, sizeof(string), "%sFraktion: %s | Leader: %s\n", FrakName(i), dini_Get(Fraktionspfad, "LeaderName"));
    }
    ShowPlayerDialog...


    Den Rest bekommst du sicher hin. Ansonsten einfach fragen!

  • Das habe ich ja bis jetzt schon...

    ocmd:leaderliste(playerid,params[])
    {
    if(PlayerInfo[playerid][pEingeloggt] < 1 ) return SendClientMessage(playerid,Rot,"Du kannst diesen Befehl nicht nutzen, weil du nicht eingeloggt bist.");
    new string[1024];
    for(new i=0; i<MAX_PLAYERS; i++)
    {
    if(PlayerInfo[i][pLeader] == 0) continue;
    format(string, sizeof(string), "%s%s Leader: %s\n", string, LeaderRank(i), SpielerName(i));
    }
    ShowPlayerDialog(playerid,DIALOG_LEADERS,DIALOG_STYLE_MSGBOX,"Leader Liste",string,"Schliesen","");
    return 1;
    }

    ich will aber das alle Leader angezeigt werden. Egal ob sie Online oder Offline sind. Wenn sie Offline sind soll dahinter (Offline) stehen und wenn sie Online sind soll (Online) dahinter stehen.

  • Nein, schau dir meinen Post an. Da steht nichts mit MAX_PLAYERS. Du sollst durch die Fraktionen loopen (deshalb die 26). Und dann auf die Datei zugreifen (i = Fraktions ID).
    Passe deinen Befehl dahingehend an.


    Ich will es dir nicht einfach hinschreiben, weil es eigentlich ziemlich einfach ist, und du die Grundlagen lernen sollst und sicher willst.

  • Meinst du so ?

    ocmd:leaderliste(playerid,params[])
    {
    if(PlayerInfo[playerid][pEingeloggt] < 1 ) return SendClientMessage(playerid,Rot,"Du kannst diesen Befehl nicht nutzen, weil du nicht eingeloggt bist.");
    new string[1024];
    for(new i=0; i<26; i++)
    {
    if(PlayerInfo[i][pLeader] == 0) continue;
    format(string, sizeof(string), "%s%s Leader: %s\n", string, LeaderRank(i), SpielerName(i));
    }
    ShowPlayerDialog(playerid,DIALOG_LEADERS,DIALOG_STYLE_MSGBOX,"Leader Liste",string,"Schliesen","");
    return 1;
    }

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Nein.
    Das muss aus der Schleife raus:
    if(PlayerInfo[i][pLeader] == 0) continue;


    Dann musst du das Format so schreiben wie ich es geschrieben habe. Das dini_Get muss da drin sein, du willst es ja aus der Datei lesen.
    Außerdem musst du den Fraktionspfad in die Schleife packen.
    Den FraktionsName bekommst du mit deinem stock über i zwischen den ( ).


    Mach das mal.

  • So ?

    ocmd:leaderliste(playerid,params[])
    {
    if(PlayerInfo[playerid][pEingeloggt] < 1 ) return SendClientMessage(playerid,Rot,"Du kannst diesen Befehl nicht nutzen, weil du nicht eingeloggt bist.");
    new string[1024];
    for(new i=0; i<26; i++)
    {
    new Fraktionsdatei[64];
    format(Fraktionsdatei,sizeof(Fraktionsdatei),"/Fraktionen/%s.txt",FraktionsNamen(i));
    dini_Get(Fraktionsdatei, "LeaderName");
    format(string, sizeof(string), "%s%s Leader: %s\n", string, LeaderRank(i), SpielerName(i));
    }
    ShowPlayerDialog(playerid,DIALOG_LEADERS,DIALOG_STYLE_MSGBOX,"Leader Liste",string,"Schliesen","");
    return 1;
    }

  • Fast.
    So:
    ocmd:leaderliste(playerid) //params kannst du weg lassen
    {
    if(PlayerInfo[playerid][pEingeloggt] < 1 ) return SendClientMessage(playerid,Rot,"Du kannst diesen Befehl nicht nutzen, weil du nicht eingeloggt bist.");
    new string[1024];
    new Fraktionsdatei[64];
    for(new i=0; i<26; i++)
    {
    format(Fraktionsdatei,sizeof(Fraktionsdatei),"/Fraktionen/%s.txt",FraktionsNamen(i));
    format(string, sizeof(string), "%s%s Leader: %s\n", string, FraktionsNamen(i), dini_Get(Fraktionsdatei, "LeaderName"));
    }
    ShowPlayerDialog(playerid,DIALOG_LEADERS,DIALOG_STYLE_MSGBOX,"Leader Liste",string,"Schliesen","");
    return 1;
    }


    Erkennst du die Unterschiede?

  • for(new i=0; i<26; i++)
    zu:
    for(new i=1; i<26; i++)



    Willst du die Niemande auch weg haben, oder soll das bleiben? Ich persönlich finde es besser wenn es da ist, dann weiß man es. Ansonsten, sollen Fraktionen ohne Leader nicht angezeigt werden? Und was ist mit den Geschlossenen?

  • ocmd:leaderliste(playerid) //params kannst du weg lassen
    {
    if(PlayerInfo[playerid][pEingeloggt] < 1 ) return SendClientMessage(playerid,Rot,"Du kannst diesen Befehl nicht nutzen, weil du nicht eingeloggt bist.");
    new string[1024];
    new Fraktionsdatei[64];
    for(new i=1; i<26; i++)
    {
    format(Fraktionsdatei,sizeof(Fraktionsdatei),"/Fraktionen/%s.txt",FraktionsNamen(i));
    if(frakGeschlossen[i]) format(string, sizeof(string), "%s%s Leader: %s [Geschlossen]\n", string, FraktionsNamen(i), dini_Get(Fraktionsdatei, "LeaderName"));
    else format(string, sizeof(string), "%s%s Leader: %s\n", string, FraktionsNamen(i), dini_Get(Fraktionsdatei, "LeaderName"));
    }
    ShowPlayerDialog(playerid,DIALOG_LEADERS,DIALOG_STYLE_MSGBOX,"Leader Liste",string,"Schliesen","");
    return 1;
    }

  • ocmd:leaderliste(playerid) //params kannst du weg lassen
    {
    if(PlayerInfo[playerid][pEingeloggt] < 1 ) return SendClientMessage(playerid,Rot,"Du kannst diesen Befehl nicht nutzen, weil du nicht eingeloggt bist.");
    new string[1024];
    new Fraktionsdatei[64], leadername[MAX_PLAYER_NAME];
    for(new i=1; i<26; i++)
    {
    format(Fraktionsdatei,sizeof(Fraktionsdatei),"/Fraktionen/%s.txt",FraktionsNamen(i));
    format(leadername, MAX_PLAYER_NAME, dini_Get(Fraktionsdatei, "LeaderName"));
    if(ReturnPlayerID(leadername) != INVALID_PLAYER_ID)
    {
    if(frakGeschlossen[i]) format(string, sizeof(string), "%s%s Leader: %s [Online] [Geschlossen]\n", string, FraktionsNamen(i), leadername);
    else format(string, sizeof(string), "%s%s Leader: %s [Online]\n", string, FraktionsNamen(i), dini_Get(Fraktionsdatei, "LeaderName"));
    }
    else
    {
    if(frakGeschlossen[i]) format(string, sizeof(string), "%s%s Leader: %s [Offline] [Geschlossen]\n", string, FraktionsNamen(i), leadername);
    else format(string, sizeof(string), "%s%s Leader: %s [Offline]\n", string, FraktionsNamen(i), dini_Get(Fraktionsdatei, "LeaderName"));
    }
    }
    ShowPlayerDialog(playerid,DIALOG_LEADERS,DIALOG_STYLE_MSGBOX,"Leader Liste",string,"Schliesen","");
    return 1;
    }



    stock ReturnPlayerID(l_PlayerName[]) //©Jeffry
    {
    new l_name[MAX_PLAYER_NAME];
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(GetPlayerName(i, l_name, MAX_PLAYER_NAME))
    {
    if(!strcmp(l_name,l_PlayerName, true)) return i;
    }
    }
    return INVALID_PLAYER_ID;
    }



    Man könnte es auch noch etwas anders schreiben, aber so ist es besser für dich verständlich, daher lasse ich es so.

  • Meinst du etwar so ? ;)

    stock ReturnPlayerID(l_PlayerName[]) //©Jeffry
    {
    new l_name[MAX_PLAYER_NAME];
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(GetPlayerName(i, l_name, MAX_PLAYER_NAME))
    {
    if(!strcmp(l_name,l_PlayerName, true)) return i;
    }
    }
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(GetPlayerName(i, l_name, MAX_PLAYER_NAME))
    {
    if(strfind(l_name,l_PlayerName,true)!=-1) return i;
    }
    }
    return INVALID_PLAYER_ID;
    }