Problem mit CreateClan

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
  • 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 ..

  • 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..

    Mit freundlichen Grüßen
    ErikSon



    Scripte kleine Systeme auf Anfrage umsonst!
    Per PN könnt ihr mir gerne Scriptingfragen stellen.

    Einmal editiert, zuletzt von ErikSon ()

  • 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;
    }

  • 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.
  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • 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..?

  • Hab ich doch, mehr ist das nicht. :D
    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.

    Einmal editiert, zuletzt von heyhooo ()

  • 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;
    }

  • 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

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen