Ich will ein Dynamic Faction System machen,ich bin nun soweit(Am Anfang )
#define MAX_FRAKTIONEN 15
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];
ocmd:createfraktion(playerid,params[])
{
if(SpielerInfo[playerid][pAdminlevel] < 6) return SendClientMessage(playerid,Rot,"M�glich ab: "COLO" Adminrank 6");
if(sscanf(params,"s"))return SendClientMessage(playerid,Rot,""COLO"Verwendung: "COLR"/createfraktion [Fraktionsname]");
return 1;
}
Ich wollte /createfraktion Fraktionsname
und das er das dann in meiner Tabelle automatisch einspeichert mit fID usw. und beim fSpawn soll er das nehmen wo der Admin gerade steht.
Aber wie?
ocmd:createfraktion(Kein Plan wie weiter)
- [PeL]Smiley
- Geschlossen
- Erledigt
-
-
Mysql oder Dini ?!
-
MYSQL R5
-
MYSQL R5
Ich habe dir hier mal angefangen, für das was du beschrieben hast.
#define MAX_FRAKTIONEN 15
enum FrakDaten
{
fName[128],
fRang1[30],
fRang2[30],
fRang3[30],
fRang4[30],
fRang5[30],
fRang6[30],
Float:fSpawnX,
Float:fSpawnY,
Float:fSpawnZ,
fSpawnI
};
new FDaten[MAX_FRAKTIONEN][FrakDaten];ocmd:createfraktion(playerid,params[])
{
if(SpielerInfo[playerid][pAdminlevel] < 6) return SendClientMessage(playerid,Rot,"Möglich ab: "COLO" Adminrank 6");
new input[128];
if(sscanf(params,"s",input))return SendClientMessage(playerid,Rot,""COLO"Verwendung: "COLR"/createfraktion [Fraktionsname]");
new i = GetFreeFrakID();
if(i == -1) return SendClientMessage(playerid,Rot,"Es kann keine neue Fraktion erstellt werden. Maximum erreicht.");
format(FDaten[i][fName], 128, input);
GetPlayerPos(playerid, FDaten[i][fSpawnX], FDaten[i][fSpawnY], FDaten[i][fSpawnZ]);
FDaten[i][fSpawnI] = GetPlayerInterior(playerid);
new query[256];
format(query, sizeof(query), "INSERT INTO fraktionen (id, fname, fx, fy, fz, fi) VALUES ('%d', '%s', '%f', '%f', '%f', %d)",
i, FDaten[i][fName], FDaten[i][fSpawnX], FDaten[i][fSpawnY], FDaten[i][fSpawnZ], FDaten[i][fSpawnI]);
mysql_query(query);
return 1;
}
Hier darf AUTO_INCREMENT für die Spalte id nicht (!) verwendet werden, allerdings muss id den UNIQUE Key haben.Außerdem brauchst du natürlich:
stock GetFreeFrakID()
{
for(new i=0; i<MAX_FRAKTIONEN; i++)
{
if(!strlen(FDaten[i][fName])) return i;
}
return -1;
}Edit [PeL]Smiley: Habe die Tags hinzugefügt. Die SpielerInfo Variable musst du natürlich zu dem ändern wie es bei dir ist.
-
Danke erstmal für deine Hilfe:
GetPlayerPos(playerid,FDaten[i][fSpawnX],FDaten[i][fSpawnY],FDaten[i][fSpawnZ]);C:\Users\kevin\Desktop\server\gamemodes\selfneu.pwn(112) : error 017: undefined symbol "SpielerInfo"
C:\Users\kevin\Desktop\server\gamemodes\selfneu.pwn(118) : warning 213: tag mismatch
C:\Users\kevin\Desktop\server\gamemodes\selfneu.pwn(118) : warning 213: tag mismatch
C:\Users\kevin\Desktop\server\gamemodes\selfneu.pwn(118) : warning 213: tag mismatch
Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase1 Error.
if(SpielerInfo[playerid][pAdminlevel] < 6) return SendClientMessage(playerid,Rot,"Möglich ab: "COLO" Adminrank 6");
-
Ich habe dir hier mal angefangen, für das was du beschrieben hast.
#define MAX_FRAKTIONEN 15
enum FrakDaten
{
fName[128],
fRang1[30],
fRang2[30],
fRang3[30],
fRang4[30],
fRang5[30],
fRang6[30],
fSpawnX,
fSpawnY,
fSpawnZ,
fSpawnI
};
new FDaten[MAX_FRAKTIONEN][FrakDaten];ocmd:createfraktion(playerid,params[])
{
if(SpielerInfo[playerid][pAdminlevel] < 6) return SendClientMessage(playerid,Rot,"Möglich ab: "COLO" Adminrank 6");
new input[128];
if(sscanf(params,"s",input))return SendClientMessage(playerid,Rot,""COLO"Verwendung: "COLR"/createfraktion [Fraktionsname]");
new i = GetFreeFrakID();
if(i == -1) return SendClientMessage(playerid,Rot,"Es kann keine neue Fraktion erstellt werden. Maximum erreicht.");
format(FDaten[i][fName], 128, input);
GetPlayerPos(playerid, FDaten[i][fSpawnX], FDaten[i][fSpawnY], FDaten[i][fSpawnZ]);
FDaten[i][fSpawnI] = GetPlayerInterior(playerid);
new query[256];
format(query, sizeof(query), "INSERT INTO fraktionen (id, fname, fx, fy, fz, fi) VALUES ('%d', '%s', '%f', '%f', '%f', %d)",
i, FDaten[i][fName], FDaten[i][fSpawnX], FDaten[i][fSpawnY], FDaten[i][fSpawnZ], FDaten[i][fSpawnI]);
mysql_query(query);
return 1;
}
Hier darf AUTO_INCREMENT für die Spalte id nicht (!) verwendet werden, allerdings muss id den UNIQUE Key haben.Außerdem brauchst du natürlich:
stock GetFreeFrakID()
{
for(new i=0; i<MAX_FRAKTIONEN; i++)
{
if(!strlen(FDaten[i][fName])) return i;
}
return -1;
}Hier
#define MAX_FRAKTIONEN 15
enum FrakDaten
{
fName[128],
fRang1[30],
fRang2[30],
fRang3[30],
fRang4[30],
fRang5[30],
fRang6[30],
Float:fSpawnX,
Float:fSpawnY,
Float:fSpawnZ,
fSpawnI,
};
new FDaten[MAX_FRAKTIONEN][FrakDaten]; -
Danke erstmal für deine Hilfe:
GetPlayerPos(playerid,FDaten[i][fSpawnX],FDaten[i][fSpawnY],FDaten[i][fSpawnZ]);C:\Users\kevin\Desktop\server\gamemodes\selfneu.pwn(112) : error 017: undefined symbol "SpielerInfo"
C:\Users\kevin\Desktop\server\gamemodes\selfneu.pwn(118) : warning 213: tag mismatch
C:\Users\kevin\Desktop\server\gamemodes\selfneu.pwn(118) : warning 213: tag mismatch
C:\Users\kevin\Desktop\server\gamemodes\selfneu.pwn(118) : warning 213: tag mismatch
Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase1 Error.
if(SpielerInfo[playerid][pAdminlevel] < 6) return SendClientMessage(playerid,Rot,"Möglich ab: "COLO" Adminrank 6");
Probier es mal so :
ocmd:createfraktion(playerid,params[])
{
if(FDaten[playerid][pAdminlevel] < 6){
new input[128];
if(sscanf(params,"s",input))return SendClientMessage(playerid,Rot,""COLO"Verwendung: "COLR"/createfraktion [Fraktionsname]");
new i = GetFreeFrakID();
if(i == -1) return SendClientMessage(playerid,Rot,"Es kann keine neue Fraktion erstellt werden. Maximum erreicht.");
format(FDaten[i][fName], 128, input);
GetPlayerPos(playerid, FDaten[i][fSpawnX], FDaten[i][fSpawnY], FDaten[i][fSpawnZ]);
FDaten[i][fSpawnI] = GetPlayerInterior(playerid);
new query[256];
format(query, sizeof(query), "INSERT INTO fraktionen (id, fname, fx, fy, fz, fi) VALUES ('%d', '%s', '%f', '%f', '%f', %d)",
i, FDaten[i][fName], FDaten[i][fSpawnX], FDaten[i][fSpawnY], FDaten[i][fSpawnZ], FDaten[i][fSpawnI]);
mysql_query(query);
else return SendClientMessage(playerid,Rot,"Möglich ab: "COLO" Adminrank 6");
return 1;
}Achso und Hier :
enum FrakDaten
{
fName[128],
fRang1[30],
fRang2[30],
fRang3[30],
fRang4[30],
fRang5[30],
fRang6[30],
Float:fSpawnX,
Float:fSpawnY,
Float:fSpawnZ,
fSpawnI,
[color=#ff0000]pAdminlevel[/color]//Hier pAdminlevel auch noch definieren
};
new FDaten[MAX_FRAKTIONEN][FrakDaten];//Edit Fehler behoben im Code & Noch etwas hinzugefügt ++
-
Büttii<3:
Das ist falsch. FDaten haben nichts mit dem Spieler oder dem Admin Level zu tun.[PeL]Smiley:
Ich habe die Tags im enum hinzugefügt.
Die SpielerInfo Variable musst du mit dem ersetzen, wie das Admin Level bei dir ist. Ich weiß ja nicht, wie das bei dir heißt, ich habe es einfach nur von deinem Post übernommen. -
Büttii<3:
Das ist falsch. FDaten haben nichts mit dem Spieler oder dem Admin Level zu tun.[PeL]Smiley:
Ich habe die Tags im enum hinzugefügt.
Die SpielerInfo Variable musst du mit dem ersetzen, wie das Admin Level bei dir ist. Ich weiß ja nicht, wie das bei dir heißt, ich habe es einfach nur von deinem Post übernommen.Sry mein Fehler
[PeL]Smiley dann musst du dein Adminlevel halt Definieren
/*Spielerdateien*/
enum sInfo
{
pAdminlevel,
};
new SpielerInfo[MAX_PLAYERS][sInfo];mfg Bütti
-
-
-
Hast du die Tabelle in der Datenbank erstellt?
Poste bitte den MySQL Log, der kommt, wenn du eine Fraktion erstellst. -
[16:47:17] >> mysql_query( Connection handle: 1 )
[16:47:17] CMySQLHandler::Query(INSERT INTO fraktionen (id, fname, fx, fy, fz, fi) VALUES ('0', 'test', '2488.543457', '-1460.062622', '24.018003', 0)) - An error has occured. (Error ID: 1054, Unknown column 'id' in 'field list')
[16:47:17] OnQueryError() - Called.
-
Zitat
Unknown column 'id'
Du kannst doch bestimmt englisch, dann würde sich der Fehler in Sekunden aufklären.-> Dir fehlt die Spalte (column) 'id' in deiner Tabelle.
-
Und wie mache ich jetzt das hier?:
ocmd:delfraktion(playerid,params[])
{
if(SpielerInfo[playerid][pAdminlevel] < 6) return SendClientMessage(playerid,Rot,"Möglich ab: "COLO" Adminrank 6");
new input[128];
if(sscanf(params,"s",input))return SendClientMessage(playerid,Rot,""COLO"Verwendung: "COLR"/createfraktion [Fraktionsname]");
new i = GetFreeFrakID();
format(FDaten[i][fName], 128, input);
new query[256];
format(query,sizeof(query),"DELETE FROM 'fraktionen (id,fname,fx,fy,fz,fi) VALUES )'%d', '%s', '%f', '%f', '%f', %d)",
i,FDaten[i][fName], FDaten[i][fSpawnX], FDaten[i][fSpawnY], FDaten[i][fSpawnZ], FDaten[i][fSpawnI]);
mysql_query(query);
return 1;
} -
format(query,sizeof(query),"DELETE FROM 'fraktionen (id,fname,fx,fy,fz,fi) VALUES ('%d', '%s', '%f', '%f', '%f', %d)",
i,FDaten[i][fName], FDaten[i][fSpawnX], FDaten[i][fSpawnY], FDaten[i][fSpawnZ], FDaten[i][fSpawnI]);VALUES ) ??? :DDD
VALUES (
'fraktionen ist auch falsch
`fraktionen` muss es heißendavon abgesehen funktioniert das anders
fomat(query, sizeof(query), "DELETE FROM `fraktionen` WHERE `id` = '%d'", i);
-
Das funktioniert schonmal,aber wie baue ich das ganze in meinem makeleader befehl ein?
Das in der Tabelle Leader eingetragen wird und ich die Ranknamen ingame auch ändern kann? -
Probiere es doch bitte einmal selbst aus, wir können dir ja schlecht das ganze System schreiben, so sieht es nämlich grade aus.
Schau dir vielleicht vom Prinzip her mal dieses Tutorial an: http://forum.sa-mp.com/showthread.php?t=390214Wenn du am Code hängst kannst du den ja posten und erklären wo du hängst, aber fange wenigstens mal an.
-
Habe jetzt soangefangen:
ocmd:makeleader(playerid,params[])
{
new pID,string[128];
if(SpielerInfo[playerid][pAdminlevel] < 6) return SendClientMessage(playerid,Rot,"Möglich ab: "COLO" Adminrank 6");
if(sscanf(params,"us",pID))return SendClientMessage(playerid,Rot,""COLO"Verwendung: "COLR"/makeleader [playerid][Fraktionsname]");
format(string,sizeof(string),""servertag" %s hat %s zum Leader gemacht!",GetName(playerid),GetName(pID));
new query[256];
format(query,sizeof(query),"INSERT INTO fraktionen (Leader) VALUES ('%s')",GetName(pID));
return 1;
}
Kommen keine Errors,aber es funktioniert auch nicht -
Hast du denn schon einen Befehl bzw. eine Möglichkeit mit dem man einer Fraktion beitreten kann?
Wenn nein, dann solltest du erst das machen, da du dies als Grundlage brauchst, du kannst ja erst zum Leader einer Fraktion werden, wenn du in einer Fraktion bist.Außerdem:
INSERT INTO erstellt eine neue Zeile in der Datenbank, das machst du NUR beim erstellen der Fraktion.
Du musst hier UPDATE nutzen. -
Wie kann ich bei dem invite/uninvite und accept befehlen ambesten vorgehen?
Kannst du mir evtl. so eine kleine How-To Liste machen? -