Ich schätze es liegt daran, dass die Zeilen nach den Ersetzungen (pl zu PlayerInfo[playerid]) zu lang sind (der Compiler macht das ja).
Kürze die Zeilen mal.
Beiträge von Jeffry
-
-
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");
} -
-
Das muss aus dem FraktionsSave raus:
dini_IntSet(Fraktionsdatei, "LeaderName", 0);
Damit setzt du es ja immer zu 0.Dann geht's.
-
Wie sieht der Befehl jetzt aus?
Wie sieht deine Speicherung aus? -
Das format für den Pfad der Fraktionsdatei fehlt.

(muss natürliche vor das dini_Set) -
Naja, du musst da das hinschreiben:
Spieler[playerid][pRespektPunkte]++;
pRespektPunkte = je nach dem wie es bei dir heißt. -
Speichern:
dini_Set(Fraktionsdatei, "LeaderName", SpielerName(pID));
^ Beim /makeleader Befehl muss das hin, sonst bringt es nichts.Laden:
format(frakLeaderName[fraktionsid], MAX_PLAYER_NAME, dini_Get(Fraktionsdatei, "LeaderName));Mit:
new frakLeaderName[MAX_FRAKS][MAX_PLAYER_NAME]; -
Nein, die playerid hat ja nichts mit dem Laden der Fraktion zu tun.
Du speicherst entweder den Namen des Leaders ab, oder gar nicht, weil du es ja in der Spielerdatei schon speicherst, da musst du es nicht nochmal in der Fraktion speichern, außer du arbeitest mit User-IDs, dann macht das vielleicht Sinn. -
Oh, dachte das geht. Meh.
Dann so:
frakGeschlossen[fraktionsid] = bool:dini_Int(Fraktionsdatei, "frakGeschlossen");Und wenn das auch nicht geht:
new geschlossen = dini_Int(Fraktionsdatei, "frakGeschlossen");
if(geschlossen != 0) frakGeschlossen[fraktionsid] = true;
else frakGeschlossen[fraktionsid] = false; -
Du Genie.
Hier:
public FraktionsLaden(fraktionsid)
{
new Fraktionsdatei[64];
format(Fraktionsdatei,sizeof(Fraktionsdatei),"/Fraktionen/%s.txt",FraktionsNamen(fraktionsid));
if(!dini_Exists(Fraktionsdatei)) dini_Create(Fraktionsdatei);
frakGeschlossen[fraktionsid] = dini_Int(Fraktionsdatei, "frakGeschlossen");
//Den Leader laden?...
return 1;
}Dann kannst du das FraktionsSave bei OnGameModeInit zu FraktionsLaden ändern, dann passt das, die Datei wird dann auch erstellt, falls sie nicht existiert.

-
Dann ist die Fraktion nicht geschlossen.
Hast du den Server nach dem Schließen der Fraktion neu gestartet?
Wenn ja, poste bitte dein FraktionLaden Code.Übrigens:
for(new i=0; i<26; i++) FraktionsSave(i);
muss nach dem Laden der Fraktionen hin, sonst geht es natürlich nicht, weil du dann alles überschreibst. Das kannst du theoretisch auch wieder weg machen, da die Dateien ja jetzt erstellt sind. Oder du lässt es, falls jemand sie löscht, aber dann muss es nach dem Laden hin. -
Dann füge mal unter:
new id = PlayerInfo[playerid][pFraktion];
das ein:
printf("id: %d / Geschlossen: %d", id, frakGeschlossen[id]);Was wird dann geprintet?
Wenn geschlossen als 0 geprintet wird, dann hast du die Fraktion nicht geschlossen.
-
Ah, da hab ich nicht drauf geschaut.
ICy.:
Du hast das return vergessen, sonst kommt die Nachricht wieder immer.
Also so:
ocmd:blitzer(playerid, params[])
{
new speed;
if(sscanf(params, "i", speed))return SendClientMessage(playerid, Rot, "Benutzung: /blitzer [Geschwindigkeit]");
if(speed >= 30 && speed <= 150)
{
AddBlitzer(playerid, speed);
return 1;
}
return SendClientMessage(playerid, Rot, "Die Geschwindigkeit muss zwischen 30 und 150 km/h sein.");
} -
Siehst du die Nachricht, wenn du dich einloggst?
SendClientMessage(playerid,Gelb,"** Die Fraktion in der du warst, wurde geschlossen! Du bist nun Zivilist."); -
Dann musst du beim Login abfragen:
if(frakGeschlossen[PlayerInfo[playerid][pFraktion]]) PlayerInfo[playerid][pFraktion] = 0; //Wenn die Fraktion geschlossen ist, fliegt der Spieler aus der Fraktion raus.Du kannst auch beim Schließen noch einen Loop einbauen:
for(new i=0; i<MAX_PLAYERS; i++) if(PlayerInfo[i][pFraktion] == fID) PlayerInfo[i][pFraktion] = 0; -
Da fehlt ein return.
ocmd:blitzer(playerid, params[])
{
new speed;
if(sscanf(params, "i", speed))return SendClientMessage(playerid, Rot, "Benutzung: /blitzer [Geschwindigkeit]");
if(speed < 30 || speed > 150)
{
AddBlitzer(playerid, speed);
return 1;
}
return SendClientMessage(playerid, Rot, "Die Geschwindigkeit muss zwischen 30 und 150 km/h sein.");
} -
Bei OnGameModeInit:
for(new i=0; i<26; i++) FraktionsSave(i);Und dort wo du die Fraktion sperrst:
FraktionsSave(frakid); -
Weil kann ja nicht 1 schleife haben und in der schleife noch eine machen oder?
Doch, kannst du.
So musst du es machen. Du musst ja für jede "i" suchen, wo der Wert in bsInfo gleich dem i ist. Das ist eine Schleife in einer Schleife. -
Alles klar.
Ich würde dir die Variante mit den Fremdschlüsseln empfehlen, also dass du die ID einfach in die Datenbank an die richtige Position schreibst, das ist am flexibelsten und du wirst die wenigsten Probleme haben.
Danach einfach den Wert mit aus der Datenbank laden und mit einer Schleife durch bsInfo schauen, dann die Fremd_ID gleich dem Index (i) von bdInfo ist.Wenn du Fragen hast, einfach melden.
