Viel zu kompliziert was ihr dort macht.
Wäre einfacher, wenn der Dateiname die Nummer + ".txt" o.Ä. ist.
zB.
/Crews/1043.cfg
/Crews/3423.cfg
Das sind dann die Crew Dateien. Zu prüfen ob eine Nummer dann noch frei ist, reicht über fexist().
/Crews/maps.cfg:
Zitat
1043 = breadfish Crew
3423 = MÖP Crew
Für den Fall, man möchte wissen hinter welcher Nummer welche Crew steckt.
Gibt natürlich noch genug andere Möglichkeiten sowas umzusetzen, man sollte es aber nicht unnötig kompliziert gestalten.
Bei AvailableNR(nr) hast du übrigens ein Memory Leak.
stock AvailableNR(nr){
new dir:dHandle = dir_open("./scriptfiles/Crews/");
new item[40], type,datei[20];
while(dir_list(dHandle, item, type))
{
if(type == FM_FILE)
{
format(datei,20,"/Crews/%s",item);
if(dini_Int(datei,"CrewNR") == nr)return false; // <--- dir_close fehlt wenn du hier return'st
else return true; // <--- dir_close fehlt wenn du hier return'st
}
}
return dir_close(dHandle);
}
- - - - - - - - - -
//Edit: Ich wäre mir auch nicht sicher,dass "return dir_close(dHandle)" so klug ist.
Zitat
Function: dir_close(dir:handle);
Description: Closes a directory
Params:
dir:handle - The handle of the directory to close that was previously opened.
Returns: Nothing.
Alles anzeigen
Steht zwar "nothing", dass geht aber gar nicht. Sollest lieber "return false" machen und dir_close() davor.
dir_close(dHandle);
return true;// muss true sein
Noch etwas:
stock AvailableNR(nr){
new dir:dHandle = dir_open("./scriptfiles/Crews/");
new item[40], type,datei[20];
while(dir_list(dHandle, item, type))
{
if(type == FM_FILE)
{
format(datei,20,"/Crews/%s",item);
if(dini_Int(datei,"CrewNR") == nr)return false;
else return true; // <--- das ist falsch. Das muss dort weg. Würde ja bedeuten, sobald die Zahl in einer (von X Vielen) Dateien nicht steht, ist sie frei. Das stimmt aber nicht
}
}
return dir_close(dHandle);
}
Gefixt wäre es dann so:
stock AvailableNR(nr){
new dir:dHandle = dir_open("./scriptfiles/Crews/");
new item[40], type,datei[20];
while(dir_list(dHandle, item, type))
{
if(type == FM_FILE)
{
format(datei,20,"/Crews/%s",item);
if(dini_Int(datei,"CrewNR") == nr)
{
dir_close(dHandle);
return false;
}
}
}
dir_close(dHandle);
return true;
}
Ein break + bool:variable geht natürlich auch :-0