Ich versuche ein Dynamisches Fraktionssystem zumachen mit allem drum und dran Fraktionsname ändern Ränge ändern.
Bis jetzt bin ich so weit:
#define MAX_FRAKTIONEN 15
enum FrakDaten
{
pFID,
pFName,
pLeader,
pCoLeader,
pRang1[30],
pRang2[30],
pRang3[30],
pRang4[30],
pRang5[30],
pRang6[30]
};
new FDaten[MAX_FRAKTIONEN][FrakDaten];
Ist nicht viel ich weiß,aber ich hoffe ihr könnt mir helfen wie ich weiter machen kann?
Danke im voraus
Dynamisches Fraktionsystem(KP wie weiter)
- [PeL]Smiley
- 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
-
-
pFName,
pLeader,
pCoLeader,
Bist du dir sicher, dass du Namen (Strings) als Integer speichern willst? -
Nicht sicher,habs grade mal geändert
-
Mal zu dein enum.
Das könntest du mal so ändern
enum FrakDaten
{
pFID,
pFName[64], //Der Name der Fraktion darf höchstens 64 Zeichen haben
pLeader[MAX_PLAYER_NAME],
pCoLeader[MAX_PLAYER_NAME],
pRang1,
pSkin,
pColor,
Float:s_x,//s_ spawn
Float:s_y,
Float:s_z
};
Dann habe ich noch eine Funktion für dich, dass ist für deine Rang namen.
GetRangName(playerid)
{
new name[70];
new fID = pInfo[playerid][pFraktion];
if(fID == 1) //bsp SAPD
{
if(FDaten[fID][pRang] == 1) format(name, sizeof(name), "Streife 1");
else if(FDaten[fID][pRang] == 2) format(name, sizeof(name), "Streife 2");
else if(FDaten[fID][pRang] == 3) format(name, sizeof(name), "Streife 3");
else if(FDaten[fID][pRang] == 4) format(name, sizeof(name), "Streife 4");
else if(FDaten[fID][pRang] == 5) format(name, sizeof(name), "Ausbilder");
else if(FDaten[fID][pRang] == 6) format(name, sizeof(name), "Leader");
}
return name;
}bsp:
format(string,128,"Du hast dein Member den Rang (%d - %s) vergeben.",pInfo[playerid][pRang],GetRangName(playerid)); -
Vielleicht bist du ja einer von den Leuten, die besser lernen, wenn sie ein Beispiel vor augen haben.
Kannst dir ja das von mir mal als "Lernobjekt" nehmen und versuchen es zu verstehen.[ FILTERSCRIPT ] Dynamisches Fraktionssystem V1 | SQLite
-
Bist du dir sicher, dass du Namen (Strings) als Integer speichern willst?Es ist intelligenter die Personen mittels bspw. UserID, die der Account in der Tabelle oder Ähnliches hat, zu ermitteln. Denn so hat man bspw. keine Probleme bei einer Änderung des Namens.
-
Wie baue ich diesen Befehl denn:
ocmd:makeleader(playerid, params[])
{
if(SpielerInfo[playerid][pAdminlevel] < 6) return SendClientMessage(playerid,Rot,"M�glich ab: "COLO" Adminrank 6");
new pID, fID;
if(!IsPlayerConnected(pID)) return SendClientMessage(playerid,Rot,"Keiner ist Verbunden mit dieser ID!");
if(sscanf(params,"ui",pID,fID))return SendClientMessage(playerid,Rot, ""COLO"Verwendung: "COLR"/makeleader [playerid] [Fraktionsid]");
if(fID >= sizeof(fInfo))return SendClientMessage(playerid,Rot, ""COLO""servertag""COLR"Fraktion existiert nicht.");
SpielerInfo[pID][pFraktion] = fID;
SpielerInfo[pID][pLeader] =fID;
if(fID != 0) SpielerInfo[pID][pRang] = 6;
else SpielerInfo[pID][pRang] = 0;
SavePlayer(pID);
new string[128];
format(string,sizeof(string),""COLO"[%s]%s "COLR"hat dich zum Leader der Fraktion "COLO"%s"COLR" gemacht.",adminrang(playerid),GetName(playerid), fInfo[fID][f_name]);
SendClientMessage(pID, Rot, string);
SendClientMessage(playerid, Rot, ""COLO""servertag"""Du hast einen Spieler zum Leader gemacht.");
return 1;
}Nun zu meinem Fraktions Enum um?
enum FrakDaten
{
fID,
fName[128],
fRang1[30],
fRang2[30],
fRang3[30],
fRang4[30],
fRang5[30],
fRang6[30],
fSpawnX,
fSpawnY,
fSpawnZ,
fSpawnI
};
new FDaten[MAX_FRAKTIONEN][FrakDaten]; -
Mal paar kleine Anhaltspunkte:
- Array erstellen mit allen benötigten Variablen
- Du benötigst eine Lade- und Speicherfunktion für deine Werte.
- Die benötigten Befehle schreiben
Am besten stellst du dir die Werte in einer Tabelle vor, wenn du eine Zeile füllen willst musst du immer erst ermitteln , welche Zeile frei ist das geht über eine Schleife,
dazu pickst du dir eine variable raus , welche du überprüfst ob diese leer ist wie zum beispiel einen String oder einen anderen wert der auf jeden Fall leer sein muss, wenn diese Zeile nicht belegt ist. Wenn du einen Wert abfragen möchtest musst du die Zeilen rasufiltern, du verwendest dazu auch wieder eine Schleife und ermittelst darüber den entsprechenden index.
[table=4]
[*]fID[*]fName[*]fRang1[*]weiteres
[*]1 [*]Ballas[*]Anwerber[*]...
[*]2 [*]Grove[*]Anwerber[*]...
[*]...[*]...[*]...[*]...
[/table]
Beispiel: du willst abfragen ob eine Fraktion existiert
stock fractionExist(fid){
for(new i; i != MAX_FRAKTIONEN;++i){
if(!FDaten[i][fName][0])continue;
if(FDaten[i][fID] == fid)return 1;
}
return 0;
}[/table]
-
Mal paar kleine Anhaltspunkte:
- Array erstellen mit allen benötigten Variablen
- Du benötigst eine Lade- und Speicherfunktion für deine Werte.
- Die benötigten Befehle schreiben
Am besten stellst du dir die Werte in einer Tabelle vor, wenn du eine Zeile füllen willst musst du immer erst ermitteln , welche Zeile frei ist das geht über eine Schleife,
dazu pickst du dir eine variable raus , welche du überprüfst ob diese leer ist wie zum beispiel einen String oder einen anderen wert der auf jeden Fall leer sein muss, wenn diese Zeile nicht belegt ist. Wenn du einen Wert abfragen möchtest musst du die Zeilen rasufiltern, du verwendest dazu auch wieder eine Schleife und ermittelst darüber den entsprechenden index.
[table=4]
[*]fID[*]fName[*]fRang1[*]weiteres
[*]1 [*]Ballas[*]Anwerber[*]...
[*]2 [*]Grove[*]Anwerber[*]...
[*]...[*]...[*]...[*]...
[/table]
Beispiel: du willst abfragen ob eine Fraktion existiert
stock fractionExist(fid){
for(new i; i != MAX_FRAKTIONEN;++i){
if(!FDaten[i][fName][0])continue;
if(FDaten[i][fID] == fid)return 1;
}
return 0;
}[/table]
Naja man muss nicht extra ein stock machen um abfragen zu können ob diese Fraktion existiert.
Er könnte das ja in sein Befehl einbauen
if(fID >= sizeof(fInfo))return SendClientMessage(playerid,COLOR_GRAU, " Info: Fraktion existiert nicht."); -
Naja man muss nicht extra ein stock machen um abfragen zu können ob diese Fraktion existiert.
Er könnte das ja in sein Befehl einbauenDu frägst nur ab ob die fID größer sei als die Anzahl der Indexe des Array's. Schon mal dran gedacht das ein Index nicht belegt sein kann, zum Beispiel du kannst 10 Fraktionen erstellen und nur 5 hast du erstellt und machst den Spieler zum Leader der Fraktion 6.
Ebenfalls ist bei mir das Problem auf negative Indexe zuzugreifen gelöst, das ist bei deiner einfachen Abfrage nicht der Fall.
Solltest du auf einen negativen Index eines Arrays zugreifen so schmiert dir der Server ab.
-
breadfish.de
Hat das Thema geschlossen.