Wie sieht der Befehl jetzt aus?
Wie sieht deine Speicherung aus?
Fraktion schließen
- TheTutoFreak
- Geschlossen
- Erledigt
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...
-
Das muss aus dem FraktionsSave raus:
dini_IntSet(Fraktionsdatei, "LeaderName", 0);
Damit setzt du es ja immer zu 0.Dann geht's.
-
Achso aber es steht trotzdem nichts in den Datein...
-
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");
} -
Dank die jetzt macht es alles so wie ich will Kann ich das jetzt auch mit der leaderliste machen wo ich mal wollte ?
-
Ja!
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;
} -
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?
-
Ah jetzt klappt es schon bissel besser. du hast das new Fraktionsdatei[64]; oben hingeschrieben aber es sieht jetzt ungefähr so aus...
Zivilist: Niemand // Des soll weg
LSPD: Niemand
Hitman: TheTutoFreak
... -
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?
-
Also es soll Zivilist nur nicht angezeigt werden und Niemand soll bleiben aber bei den geschlossenen kann dahinter iwie geschlossen sthen ?
-
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;
} -
Ah hat geklappt und wie mache ich das mit Online und Offline ?
-
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;
} -