Hallo ich hab mal wieder ein Problem und zwar ich habe ein Befehl /createclan .. dieser sieht so aus:
COMMAND:createclan(playerid, params[])
{
new name[32],tag[8],rank[32],rank1[32],rank2[32],rank3[32],rank4[32],rank5[32];
SendClientMessage(playerid,-1,"Der Clan-Name sowie die Rank-Namen können 32 Zeichen enthalten! Der Clan-Tag allerdings nur 8!");
if(sscanf(params,"ssssssss",name,tag,rank,rank1,rank2,rank3,rank4,rank5))return SendClientMessage(playerid, COLOR_RED, "Benutze /createclan [Clan-Name] [Clan-Tag] [Rank-Name1] [Rank-Name2] [Rank-Name3] [Rank-Name4] [Rank-Name5] [Rank-Name6]");
if(PlayerInfo[playerid][pGeld] == 100000)return SendClientMessage(playerid, COLOR_RED, "Du brauchst $100.000 !");
CreateClan(name, tag, rank,rank1,rank2,rank3,rank4,rank5);
SaveClans();
return 1;
}
Wenn ich InGame alles ausfülle also so "/createclan Bossige-Bosse BB eins zwei drei vier fuenf sechs" dann zeigt der mir an das mein Befehl NICHT existiert ..
Problem mit CreateClan
- tobialvarez
- Geschlossen
- Erledigt
-
-
bei jeden s fehlt die länge also s[32]s[8] etc. Dann ist deine Geld Abfrage falsch denn er bekommt die Nachricht das er 100000 braucht wenn er genau 100000 hat. == ändern in <. Dann sollteste die länger überprüfen (weiß gerade nicht ob das sscanf von sich aus macht).
-
bei jeden s fehlt die länge also s[32]s[8] etc. Dann ist deine Geld Abfrage falsch denn er bekommt die Nachricht das er 100000 braucht wenn er genau 100000 hat. == ändern in <. Dann sollteste die länger überprüfen (weiß gerade nicht ob das sscanf von sich aus macht).
Also, hab alles geändert .. jetzt sieht es so aus:
COMMAND:createclan(playerid, params[])
{
new name[32],tag[8],rank[32],rank1[32],rank2[32],rank3[32],rank4[32],rank5[32];
SendClientMessage(playerid,-1,"Der Clan-Name sowie die Rank-Namen können 32 Zeichen enthalten! Der Clan-Tag allerdings nur 8!");
if(sscanf(params,"s[32]s[8]s[32]s[32]s[32]s[32]s[32]s[32]",name,tag,rank,rank1,rank2,rank3,rank4,rank5))return SendClientMessage(playerid, COLOR_RED, "Benutze /createclan [Clan-Name] [Clan-Tag] [Rank-Name1] [Rank-Name2] [Rank-Name3] [Rank-Name4] [Rank-Name5] [Rank-Name6]");
if(PlayerInfo[playerid][pGeld] < 100000)return SendClientMessage(playerid, COLOR_RED, "Du brauchst $100.000 !");
CreateClan(name, tag, rank,rank1,rank2,rank3,rank4,rank5);
SaveClans();
return 1;
}
Aber es passiert immer noch das gleiche und mit der Länge ist mir das grad egal da ich ja erstmal nur testen will ob er den Clan created ... -
Hier mal ein wenig besser:
COMMAND:createclan(playerid, params[]){
new name[32],tag[8],rank[32][6];
SendClientMessage(playerid,-1,"Der Clan-Name sowie die Rank-Namen können 32 Zeichen enthalten! Der Clan-Tag allerdings nur 8!");
if(sscanf(params,"ssssssss",name,tag,rank[0],rank[1],rank[2],rank[3],rank[4],rank[5]))return SendClientMessage(playerid, COLOR_RED, "Benutze /createclan [Clan-Name] [Clan-Tag] [Rank-Name1] [Rank-Name2] [Rank-Name3] [Rank-Name4] [Rank-Name5] [Rank-Name6]");
if(PlayerInfo[playerid][pGeld] < 100000)return SendClientMessage(playerid, COLOR_RED, "Du brauchst $100.000 !");
for(new i = 0; i<6; i++)if(strlen(name) > 32 || strlen(tag) > 8 || strlen(rank[i]) > 32)return SendClientMessage(playerid,-1,"Der Clan-Name sowie die Rank-Namen können 32 Zeichen enthalten! Der Clan-Tag allerdings nur 8!");
CreateClan(name, tag, rank[0],rank[1],rank[2],rank[3],rank[4],rank[5]);
return SaveClans();
}Debugge doch alles, dann findest du den Fehler sicherlich.. Wenn man einen Befehl falsch scriptet ( iein Fehler im Code ist ), dann zeigt er an, dass der Code nicht existiert..
tobialvarez: @Post unten:
Änder mal das:
stock CreateClan(name[], Tag[], CRank1[], CRank2[], CRank3[], CRank4[], CRank5[], CRank6[])
zu
stock CreateClan(name[32], Tag[8], CRank1[32], CRank2[32], CRank3[32], CRank4[32], CRank5[32], CRank6[32])
...
Du verschwendest so unnötige Ressourcen, falls ich nicht falsch informiert bin.. -
Beitrag von tobialvarez ()
Dieser Beitrag wurde gelöscht, Informationen über den Löschvorgang sind nicht verfügbar. -
Ich hab alles weg bekommen, sprich es kommt kein Error in der Server-Log aber der Befehl sprich der Clan wird nicht in die Tabelle eingespeichert ... vielleicht kann mir dort jemand noch helfen...
stock CreateClan(name[], Tag[], CRank1[], CRank2[], CRank3[], CRank4[], CRank5[], CRank6[])
{
new str[512];
print("create 1");
for(new i = 0; i < MAX_CLANS; i ++)
{
if(!sClanInfo[i][ciCreated])
{
print("create 2");
format(sClanInfo[i][ClanName], 32, name);
print("create 3");
format(sClanInfo[i][ClanTag], 8, Tag);
print("create 4");
format(sClanInfo[i][ClanRank1], 32, CRank1);
print("create 5");
format(sClanInfo[i][ClanRank2], 32, CRank2);
print("create 6");
format(sClanInfo[i][ClanRank3], 32, CRank3);
print("create 7");
format(sClanInfo[i][ClanRank4], 32, CRank4);
print("create 8");
format(sClanInfo[i][ClanRank5], 32, CRank5);
print("create 9");
format(sClanInfo[i][ClanRank6], 32, CRank6);
print("create 10");
sClanInfo[i][ciCreated] = true;format(str, sizeof(str), "INSERT INTO `clans` ( \
`id`, \
`name`, \
`tag`, \
`ClanRank1`, \
`ClanRank2`, \
`ClanRank3`, \
`ClanRank4`, \
`ClanRank5`, \
`ClanRank6` \
) VALUES ( %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s')", i, escape(name), escape(Tag), escape(CRank1), escape(CRank2), escape(CRank3), escape(CRank4), escape(CRank5), escape(CRank6));mysql_function_query(MySQLHandle, str, false, "", "");
break;
}
}
return 1;
} -
Da fehlen Gänsefüßchen nach VALUES
-
Da fehlen Gänsefüßchen nach VALUES
Nein fehlt nicht, guck oben im format vor INSERT INTO .. -
Und warum ist dann nur eins dort..?
) VALUES ( %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s')", i, escape(name), escape(Tag), escape(CRank1), escape(CRank2), escape(CRank3), escape(CRank4), escape(CRank5), escape(CRank6));
Kenne mich damit nicht aus, aber muss das dann nicht eher so?:
) VALUES "( %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s')[size=18]"[/size], i, escape(name), escape(Tag), escape(CRank1), escape(CRank2), escape(CRank3), escape(CRank4), escape(CRank5), escape(CRank6)); -
Beitrag von tobialvarez ()
Dieser Beitrag wurde gelöscht, Informationen über den Löschvorgang sind nicht verfügbar. -
So und jetzt hab ich ein Problem und zwar:
stock CreateClan(name[],Tag[],CRank1[],CRank2[],CRank3[],CRank4[],CRank5[],CRank6[])
{
new string[515];
print("create 1");
for(new i=0;i<MAX_CLANS;i++)
{
print("create 2");
if(sClanInfo[i][ciCreated])continue;
format(sClanInfo[i][ClanName],32,name);
print("create 2");
printf("%s",name);
format(sClanInfo[i][ClanTag],8,Tag);
print("create 3");
printf("%s",Tag);
format(sClanInfo[i][ClanRank1],32,CRank1);
print("create 4");
format(sClanInfo[i][ClanRank2],32,CRank2);
print("create 5");
printf("%s",CRank2);
format(sClanInfo[i][ClanRank3],32,CRank3);
print("create 6");
format(sClanInfo[i][ClanRank4],32,CRank4);
print("create 7");
format(sClanInfo[i][ClanRank5],32,CRank5);
print("create 8");
format(sClanInfo[i][ClanRank6],32,CRank6);
print("create 9");
sClanInfo[i][ciCreated] = true;
print("create 10");
format(string,515,"INSERT INTO `clans` (id,name,tag,ClanRank1,ClanRank2,ClanRank3,ClanRank4,ClanRank5,ClanRank6) VALUES (%i,'%s','%s','%s','%s','%s','%s','%s','%s')",
i,escape(name),escape(Tag),escape(CRank1),escape(CRank2),escape(CRank3),escape(CRank4),escape(CRank5),escape(CRank6));
printf("%s,%s,%s,%s,%s,%s,%s,%s",name,Tag,CRank1,CRank2,CRank3,CRank4,CRank5,CRank5);
mysql_function_query(MySQLHandle, string, false, "", "");
}
return 1;
}
Habe es nun so und das printet / debuggt:
[17:17:01] create 1
[17:17:01] create 2
[17:17:01] create 2
[17:17:01] tobiboss
[17:17:01] create 3
[17:17:01] tb
[17:17:01] create 4
[17:17:01] create 5
[17:17:01] killernonameamateuboss
[17:17:01] create 6
[17:17:01] create 7
[17:17:01] create 8
[17:17:01] create 9
[17:17:01] create 10
"/createclan tobiboss tb profi killer noname amateur boss coboss"Kann man das irgendwie "spitten" also Teilen oder so..?
-
Klar kannste das splitten.
http://wiki.sa-mp.com/wiki/StrtokNehmen wir an params heißt deine Parameter-Variable vom Cmd-Prozessor:
new idx, tmp[20], tmp1[20], ... usw hier.
tmp = strtok(params, idx);
tmp1 = strtok(params, idx);
...usw. -
Klar kannste das splitten.
http://wiki.sa-mp.com/wiki/StrtokNehmen wir an params heißt deine Parameter-Variable vom Cmd-Prozessor:
new idx, tmp[20], tmp1[20], ... usw hier.
tmp = strtok(params, idx);
tmp1 = strtok(params, idx);
...usw.Würdest du mir vielleicht davon irgendwas kleines vormachen ... weil ich kenn mich damit nicht aus ...
-
Hab ich doch, mehr ist das nicht.
Aber gut, ich kanns dir auch kurz ganz machen, wenn du mir den Befehl gibst, wie du ihn grade hast. -
Hab ich doch, mehr ist das nicht.
Aber gut, ich kanns dir auch kurz ganz machen, wenn du mir den Befehl gibst, wie du ihn grade hast.
COMMAND:createclan(playerid,params[])
{
new name[32],tag[8],rank[32][6],string[144];
print("1");
if(sscanf(params,"s[32]s[8]s[32]s[32]s[32]s[32]s[32]s[32]",name,tag,rank[0],rank[1],rank[2],rank[3],rank[4],rank[5]))return SendClientMessage(playerid,COLOR_RED,"Benutze: /createclan [Clan-Name] [Clan-Tag] [Rank-Name1] [Rank-Name2] [Rank-Name3] [Rank-Name4] [Rank-Name5] [Rank-Name6]");
if(PlayerInfo[playerid][pGeld] < 100000)return SendClientMessage(playerid,COLOR_RED,"Du brauchst $100.000");
for(new i=0;i<6;i++)
{
if(strlen(name) > 32 || strlen(tag) > 8 || strlen(rank[i]) > 32)return SendClientMessage(playerid,-1,"Der Clan-Name sowie die Rank-Name können 32 Zeichen enthalten! Der Clan-Tag allerdings nur 8!");
}
print("2");
CreateClan(name,tag,rank[0],rank[1],rank[2],rank[3],rank[4],rank[5]);
format(string,144,"Du hast ein Clan names '%s' [Tag: %s] erstellt! Viel Glück!",name,tag);
SendClientMessage(playerid,COLOR_YELLOW,string);
print("3");
printf("Name: %s | Tag: %s | Rank0: %s | Rank1: %s | Rank2: %s | Rank3: %s | Rank4: %s | Rank5: %s | Rank6: %s",name,tag,rank[0],rank[1],rank[2],rank[3],rank[4],rank[5]);
SaveClans();
return 1;
}
Ich blick mit dem strtok oder so nicht durch O.o xd -
Ich weiß, dass Jeffry nicht gerne sscanf mag, aber verwende das lieber
new name[32],tag[8], Rank[6][32];
if(sscanf(params,"s[32]s[32]s[32]s[32]s[32]s[32]s[32]s[32]",name,tag,rank[0],rank[1],rank[2],rank[3],rank[4],rank[5]))return SendClientMessage(playerid, COLOR_RED, "Benutze /createclan [Clan-Name] [Clan-Tag] [Rank-Name1] [Rank-Name2] [Rank-Name3] [Rank-Name4] [Rank-Name5] [Rank-Name6]");L.G.
/e1: Jeffry: Wieso verwendest du eigentlich strtok? (http://forum.sa-mp.com/showpost.php?p=831918&postcount=11)
L.G.
-
So sieht's aus.
Entweder mit sscanf (*hust*), oder strtok:COMMAND:createclan(playerid,params[])
{
new name[32],tag[32],rank[6][32],string[144], idx;
name = strtok(params, idx);
tag = strtok(params, idx);
rank[0] = strtok(params, idx);
rank[1] = strtok(params, idx);
rank[2] = strtok(params, idx);
rank[3] = strtok(params, idx);
rank[4] = strtok(params, idx);
rank[5] = strtok(params, idx);
if(!strlen(rank[5])return SendClientMessage(playerid,COLOR_RED,"Benutze: /createclan [Clan-Name] [Clan-Tag] [Rank-Name1] [Rank-Name2] [Rank-Name3] [Rank-Name4] [Rank-Name5] [Rank-Name6]");
if(PlayerInfo[playerid][pGeld] < 100000)return SendClientMessage(playerid,COLOR_RED,"Du brauchst $100.000");
for(new i=0;i<6;i++)
{
if(strlen(name) > 32 || strlen(tag) > 8 || strlen(rank[i]) > 32)return SendClientMessage(playerid,-1,"Der Clan-Name sowie die Rank-Name können 32 Zeichen enthalten! Der Clan-Tag allerdings nur 8!");
}
CreateClan(name,tag,rank[0],rank[1],rank[2],rank[3],rank[4],rank[5]);
format(string,144,"Du hast ein Clan names '%s' [Tag: %s] erstellt! Viel Glück!",name,tag);
SendClientMessage(playerid,COLOR_YELLOW,string);
printf("Name: %s | Tag: %s | Rank0: %s | Rank1: %s | Rank2: %s | Rank3: %s | Rank4: %s | Rank5: %s | Rank6: %s",name,tag,rank[0],rank[1],rank[2],rank[3],rank[4],rank[5]);
SaveClans();
return 1;
}stock CreateClan(name[32],Tag[32],CRank1[32],CRank2[32],CRank3[32],CRank4[32],CRank5[32],CRank6[32])
Irgendwo ganz unten im Code:
strtok(const string[], &index)
{
new length = strlen(string);
while ((index < length) && (string[index] <= ' '))
{
index++;
}new offset = index;
new result[32];
while ((index < length) && (string[index] > ' ') && ((index - offset) < (sizeof(result) - 1)))
{
result[index - offset] = string[index];
index++;
}
result[index - offset] = EOS;
return result;
} -
So sieht's aus.
Entweder mit sscanf (*hust*), oder strtok:Jetzt hab ich wieder das Problem, das der Server den Befehl ich sag mal "nicht anerkennt" ... er gibt mir die ganze Zeit aus das der Befehl angeblich nicht existieren soll... aber alle anderen gehen.
-
Dann musst du die print's zum debuggen noch mal rein machen, ich sehe da auf Anhieb nichts. Bis zu welcher Zeile kommt er?
-
ErikSon
deine aussage über die Funktion ist CreateClan mit den strings
ist totaler bullshit der einzige vorteil hierbei wäre das dabei
die strlen direkt angegeben werden kann.Zum Problem es liegt an sscanf wenn dir Unknown Command
zurück gegeben wird sondern eher das was noch aufgerufen wird.
wie hier CreateClan bei deinem Befehl den du gepostet hast würden falls du das sscanf plugin verwendest nur die längenangabe der strings fehlen.
den obrigen code solltest du einfach nur debugen ich glaub eher das er wich bei CreateClan aufhängt.
SaveClan müsste nicht umbedungt ausgeführt werden wenn der clan direkt eingetragen wird in die datenbank