Problem mit switch + case

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
  • Hey, Com!
    Ich hab ein Problem mit meinem /makeleader Command.
    Zur Zeit wird immer nur die 6. case abgerufen, egal, welche Zahl ich angebe.
    Kann mir jmd. weiterhelfen? hier mein Command:
    dcmd_makeleader(playerid,params[])
    {
    new pID, Team;
    if(sscanf(params,"ud",pID,Team))return SendClientMessage(playerid,0xC8C8C8FF,"/makeleader [ID/Name] [FraktionsID]");
    if(!IsPlayerConnected(pID))return SendClientMessage(playerid,0xC8C8C8FF,"Dieser Spieler ist nicht online!");
    if(Team < 0 || Team > 6) return SendClientMessage(playerid,0xC8C8C8FF, "Die FraktionsID muss zwischen 0 [Uninvite] und 6 liegen!");
    if(pInfo[playerid][AdminLevel] > 4)
    {
    new string[128] ,string2[128] ,teamsetter[MAX_PLAYER_NAME], playername[MAX_PLAYER_NAME];
    new gang = 6;
    GetPlayerName(playerid,playername,sizeof playername);
    format(string, sizeof(string),"Leaders/%s.sav",playername);
    GetPlayerName(playerid,teamsetter,sizeof(teamsetter));
    switch(gang)
    {
    case 1: format(string,sizeof(string),"%s hat dich zum Leader der Grove Street Families gemacht!",playername);
    case 2: format(string,sizeof(string),"%s hat dich zum Leader der Jefferson 82's Ballas gemacht!",playername);
    case 3: format(string,sizeof(string),"%s hat dich zum Leader der Los Santos Vagos gemacht!",playername);
    case 4: format(string,sizeof(string),"%s hat dich zum Leader des LSPD gemacht!",playername);
    case 5: format(string,sizeof(string),"%s hat dich zum Leader der Varrios Los Aztecas gemacht!",playername);
    case 6: format(string,sizeof(string),"%s hat dich zum Leader der Triaden gemacht!",playername);
    }
    GetPlayerName(pID,playername,sizeof playername);
    switch(gang)
    {
    case 1: format(string2, sizeof(string2),"Du hast %s zum Leader der Grove Street Families gemacht!",playername);
    case 2: format(string2, sizeof(string2),"Du hast %s zum Leader der Jefferson 82's Ballas gemacht!",playername);
    case 3: format(string2, sizeof(string2),"Du hast %s zum Leader der Los Santos Vagos gemacht!",playername);
    case 4: format(string2, sizeof(string2),"Du hast %s zum Leader des LSPD gemacht!",playername);
    case 5: format(string2, sizeof(string2),"Du hast %s zum Leader der Varrios Los Aztecas gemacht!",playername);
    case 6: format(string2, sizeof(string2),"Du hast %s zum Leader der Triaden gemacht!",playername);
    }
    pInfo[pID][Leader] = Team;
    dini_IntSet(string,"Leader",Team);
    SendClientMessage(pID,0x00F0F0FF,string);
    SendClientMessage(playerid,0xC8C8C8FF,string2);
    }
    else return SendClientMessage(playerid, 0xC8C8C8FF, "Dein Adminrank reicht nicht aus!");
    return 1;
    }


    mfG
    Walker

  • new gang = 6;
    Du sagst ja auch das gang 6 ist und nix anderes. Wenn du musst switch schon mit Team benutzen wenn du die eingabe benutzen willst.
    Also so:
    dcmd_makeleader(playerid,params[])
    {
    new pID, Team;
    if(sscanf(params,"ud",pID,Team))return SendClientMessage(playerid,0xC8C8C8FF,"/makeleader [ID/Name] [FraktionsID]");
    if(!IsPlayerConnected(pID))return SendClientMessage(playerid,0xC8C8C8FF,"Dieser Spieler ist nicht online!");
    if(Team < 0 || Team > 6) return SendClientMessage(playerid,0xC8C8C8FF, "Die FraktionsID muss zwischen 0 [Uninvite] und 6 liegen!");
    if(pInfo[playerid][AdminLevel] > 4)
    {
    new string[128] ,string2[128] ,teamsetter[MAX_PLAYER_NAME], playername[MAX_PLAYER_NAME];
    //new gang = 6;
    GetPlayerName(playerid,playername,sizeof playername);
    format(string, sizeof(string),"Leaders/%s.sav",playername);
    GetPlayerName(playerid,teamsetter,sizeof(teamsetter));
    switch(Team)
    {
    case 1: format(string,sizeof(string),"%s hat dich zum Leader der Grove Street Families gemacht!",playername);
    case 2: format(string,sizeof(string),"%s hat dich zum Leader der Jefferson 82's Ballas gemacht!",playername);
    case 3: format(string,sizeof(string),"%s hat dich zum Leader der Los Santos Vagos gemacht!",playername);
    case 4: format(string,sizeof(string),"%s hat dich zum Leader des LSPD gemacht!",playername);
    case 5: format(string,sizeof(string),"%s hat dich zum Leader der Varrios Los Aztecas gemacht!",playername);
    case 6: format(string,sizeof(string),"%s hat dich zum Leader der Triaden gemacht!",playername);
    }
    GetPlayerName(pID,playername,sizeof playername);
    switch(Team)
    {
    case 1: format(string2, sizeof(string2),"Du hast %s zum Leader der Grove Street Families gemacht!",playername);
    case 2: format(string2, sizeof(string2),"Du hast %s zum Leader der Jefferson 82's Ballas gemacht!",playername);
    case 3: format(string2, sizeof(string2),"Du hast %s zum Leader der Los Santos Vagos gemacht!",playername);
    case 4: format(string2, sizeof(string2),"Du hast %s zum Leader des LSPD gemacht!",playername);
    case 5: format(string2, sizeof(string2),"Du hast %s zum Leader der Varrios Los Aztecas gemacht!",playername);
    case 6: format(string2, sizeof(string2),"Du hast %s zum Leader der Triaden gemacht!",playername);
    }
    pInfo[pID][Leader] = Team;
    dini_IntSet(string,"Leader",Team);
    SendClientMessage(pID,0x00F0F0FF,string);
    SendClientMessage(playerid,0xC8C8C8FF,string2);
    }
    else return SendClientMessage(playerid, 0xC8C8C8FF, "Dein Adminrank reicht nicht aus!");
    return 1;
    }

    The fact is, I am right. And if you think I'm wrong, you are wrong.

  • Ahhhh, danke. :)
    War das erste Mal,dass ich mit switch u. case gearbeitet hab.
    Außer in der Skinwahl
    mfG
    Walker
    Edit:
    So, wollte das jetzt unbedingt noch auf andere Befehle anwenden, aber leider hab ich schon wieder ein Problem. <.<
    Die Zeilen:
    dcmd_undercover(playerid,params[])
    {
    new uid;
    if(sscanf(params, "u",uid))return SendClientMessage(playerid,0xC8C8C8FF,"/undercover [Nr.]");
    if(IsPlayerInRangeOfPoint(playerid,2,255.1183,77.2086,1003.6406) && gTeam[playerid] == TEAM_COPS)
    {
    new string[128], Cop[MAX_PLAYER_NAME];
    GetPlayerName(playerid, Cop, sizeof(Cop));
    format(string,sizeof(string),"**%s ist nun im Dienst als Undercover Cop**",Cop);
    switch(uid)
    {
    case 1:
    {
    ResetPlayerWeapons(playerid);
    SetPlayerArmour(playerid,0);
    SetPlayerHealth(playerid,100);
    GivePlayerWeapon(playerid,24,200);
    GivePlayerWeapon(playerid,25,100);
    GivePlayerWeapon(playerid,29,350);
    GivePlayerWeapon(playerid,41,500);
    GivePlayerWeapon(playerid,43,50);
    SetPlayerSkin(playerid,186);
    }
    case 2:
    {
    ResetPlayerWeapons(playerid);
    SetPlayerArmour(playerid,0);
    SetPlayerHealth(playerid,100);
    GivePlayerWeapon(playerid,24,200);
    GivePlayerWeapon(playerid,25,100);
    GivePlayerWeapon(playerid,29,350);
    GivePlayerWeapon(playerid,41,500);
    GivePlayerWeapon(playerid,43,50);
    SetPlayerSkin(playerid,185);
    }
    case 3:
    {
    ResetPlayerWeapons(playerid);
    SetPlayerArmour(playerid,0);
    SetPlayerHealth(playerid,100);
    GivePlayerWeapon(playerid,24,200);
    GivePlayerWeapon(playerid,25,100);
    GivePlayerWeapon(playerid,29,350);
    GivePlayerWeapon(playerid,41,500);
    GivePlayerWeapon(playerid,43,50);
    SetPlayerSkin(playerid,240);
    }
    }
    SendClientMessage(playerid,0x00F0F0FF,"Du bist nun im Dienst als Undercover Cop!");
    for(new i=0;i<MAX_PLAYERS;i++)
    {
    if(gTeam[i] == TEAM_COPS)
    {
    SendClientMessage(i,0x4848FFFF, string);
    }
    }
    }
    return 1;
    }


    Ingame kommt jetzt immer nur, dass ich im Dienst bin, aberWaffen erhalte ich nicht.
    Was ist da falsch?


    mfG
    Walker

  • Versuch mal anstatt
    if(sscanf(params, "u",uid))return SendClientMessage(playerid,0xC8C8C8FF,"/undercover [Nr.]");
    "d" zu nehmen. Also das er auch wirklich weiss das es ein integer ist. Weil u ja eigentlich für Spieler ist und somit ID (integer) oder Name (string) enthalten kann.
    Also:
    if(sscanf(params, "d",uid))return SendClientMessage(playerid,0xC8C8C8FF,"/undercover [Nr.]");

    The fact is, I am right. And if you think I'm wrong, you are wrong.

  • Lol das klappt. :O
    Hätte ich jetzt irgendwie nicht erwartet.
    Egal, wenigstens komm ich jetzt mit switch und case zurecht.
    DANKE!!


    Edit:
    Boch ich schon wieder :whistling:
    Also, ich hab es jetzt mind. 3x mal versucht, es kommt immer das Gleiche herraus.
    Ich finde meinen Fehler einfach nicht.
    Hier der Befehl:
    dcmd_invite(playerid,params[])
    {
    new pID,Team;
    if(sscanf(params,"u",pID,Team))return SendClientMessage(playerid,0xC8C8C8FF,"/invite [ID/Name]");
    if(!IsPlayerConnected(pID))return SendClientMessage(playerid,0xC8C8C8FF,"Dieser Spieler ist nicht online!");
    if(pInfo[playerid][Leader])
    {
    new string[128] ,string2[128] ,teamsetter[MAX_PLAYER_NAME], playername[MAX_PLAYER_NAME];
    GetPlayerName(playerid,playername,sizeof playername);
    format(string, sizeof(string),"Fraktions/%s.sav",playername);
    GetPlayerName(playerid,teamsetter,sizeof(teamsetter));
    switch(Team)
    {
    case 1: format(string,sizeof(string),"%s hat dich zum Member der Grove Street Families gemacht!",playername);
    case 2: format(string,sizeof(string),"%s hat dich zum Member der Jefferson 82's Ballas gemacht!",playername);
    case 3: format(string,sizeof(string),"%s hat dich zum Member der Los Santos Vagos gemacht!",playername);
    case 4: format(string,sizeof(string),"%s hat dich zum Member des LSPD gemacht!",playername);
    case 5: format(string,sizeof(string),"%s hat dich zum Member der Varrios Los Aztecas gemacht!",playername);
    case 6: format(string,sizeof(string),"%s hat dich zum Member der Triaden gemacht!",playername);
    }
    GetPlayerName(pID,playername,sizeof playername);
    format(string2,sizeof(string2),"Du hast %s aus der Familie geworfen!",playername);
    SendClientMessage(pID,0x00F0F0FF,string);
    SendClientMessage(playerid,0xC8C8C8FF,string2);
    dini_IntSet(string, "Fraktion", pInfo[playerid][Fraktion]);
    pInfo[pID][Fraktion] = pInfo[playerid][Fraktion];
    }
    else return SendClientMessage(playerid, 0xC8C8C8FF, "Du bist kein Leader!");
    return 1;
    }


    Ingame wird jedoch nur das hier gesendet:
    GetPlayerName(playerid,playername,sizeof playername);
    format(string, sizeof(string),"Fraktions/%s.sav",playername);
    Und:
    GetPlayerName(pID,playername,sizeof playername);
    format(string2,sizeof(string2),"Du hast %s aus der Familie geworfen!",playername);


    Was ist hier noch falsch?!


    mfG
    Walker

  • Kurze frage warum nutzt du teamsetter nicht? Du müsstest das eig in deiner switch funktion verwenden.
    case 1: format(string,sizeof(string),"%s hat dich zum Member der Grove Street Families gemacht!",playername/*<- hier*/);
    Das fällt nur nicht auf wenn du es alleine ausprobierts, denn dann gibt er eh nur deinen Namen aus. Wenn du mir nicht glaubst probiers mit nem zweiten Spieler aus.


    //Edit: ersten Teil entfernt war Blödsinn^^

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski

  • Irgendwie ist dein Befehl nicht ganz durchdacht. Zunächst vergisst du ein paar ( und ) Klammern, dann rufst du 2 mal den Namen von demjenigen ab, der den Befehl eingegeben hat einmal als playername und einmal als teamsetter.
    Dann gibst du dem Inviter die Mitteilung das er jemanden eingeladen hat, und zwar sich selber, und dem eingeladen schreibst du, dass er aus der Familie gekickt wurde. Wo ist da der Sinn?


    Dann ist da noch ein Punkt, du verwendest sehr oft den gleichen string. Das geht auf die dauer nicht gut.
    BSP:
    format(string, sizeof(string),"Fraktions/%s.sav",playername);
    ...
    case 1: format(string,sizeof(string),"%s hat dich zum Member der Grove Street Families gemacht!",playername);
    Das geht so nicht wenn du den später nochmal abrufst.
    Mach das dann lieber so:
    format(string, sizeof(string),"Fraktions/%s.sav",playername);
    dini_IntSet(string, "Fraktion", pInfo[playerid][Fraktion]);


    Dann kannst du den string gerne wieder überschreiben, solange du das was vorher drin gespeichert war nicht mehr brauchst.

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski

  • Also jetzt, wo ich mir den Befehl nochmal anschaue, denk ich mir auch, was ich da für ein Schrott gescriptet habe. xD
    Also ich hab's jetzt nochmal versucht, jedoch wird nun überhaupt nichts gesendet.


    dcmd_invite(playerid,params[])
    {
    new pID,Team;
    if(sscanf(params,"u",pID,Team))return SendClientMessage(playerid,0xC8C8C8FF,"/invite [ID/Name]");
    if(!IsPlayerConnected(pID))return SendClientMessage(playerid,0xC8C8C8FF,"Dieser Spieler ist nicht online!");
    if(pInfo[playerid][Leader])
    {
    new string[128], string2[128], pname[MAX_PLAYER_NAME];
    GetPlayerName(playerid,pname,sizeof pname);
    format(string, sizeof(string),"Fraktions/%s.sav",pname);
    dini_IntSet(string, "Fraktion", pInfo[playerid][Fraktion]);
    GetPlayerName(playerid,pname,sizeof(pname));
    switch(Team)
    {
    case 1: format(string2,sizeof(string2),"%s hat dich zum Member der Grove Street Families gemacht!",pname);
    case 2: format(string2,sizeof(string2),"%s hat dich zum Member der Jefferson 82's Ballas gemacht!",pname);
    case 3: format(string2,sizeof(string2),"%s hat dich zum Member der Los Santos Vagos gemacht!",pname);
    case 4: format(string2,sizeof(string2),"%s hat dich zum Member des LSPD gemacht!",pname);
    case 5: format(string2,sizeof(string2),"%s hat dich zum Member der Varrios Los Aztecas gemacht!",pname);
    case 6: format(string2,sizeof(string2),"%s hat dich zum Member der Triaden gemacht!",pname);
    }
    SendClientMessage(pID,0x00F0F0FF,string2);
    pInfo[pID][Fraktion] = pInfo[playerid][Fraktion];
    }
    else return SendClientMessage(playerid, 0xC8C8C8FF, "Du bist kein Leader!");
    return 1;
    }


    Edit:
    Befehl nochmal geändert.
    Trotzdem keine Veränderung..kann mir keiner helfen? Maddin konnte das doch super..

  • if(sscanf(params,"u",pID,Team))return SendClientMessage(playerid,0xC8C8C8FF,"/invite [ID/Name]");
    Also erstmal fällt mir auf, das du nur einen parameter benutzt (u) aber auf 2 varibalen verteilen willst. Da du also so "u" an pID übergibst, bleibt Team ja leer.
    Das heisst das Team leer ist, bzw 0. Da 0 aber bei switch nicht abgefragt wird, kommt auch keine antwort.


    Du musst dir jetzt überlegen ob du /invite [ID/Name] [Fraktion] machen willst (was ja eher nich so der bringer ist), oder du musst irgendwie an die Fraktions ID von playerid kommen und diese dann bei switch benutzen.
    Versuchs mal so:
    dcmd_invite(playerid,params[])
    {
    new pID;
    if(sscanf(params,"u",pID))return SendClientMessage(playerid,0xC8C8C8FF,"/invite [ID/Name]");
    if(!IsPlayerConnected(pID))return SendClientMessage(playerid,0xC8C8C8FF,"Dieser Spieler ist nicht online!");
    if(pInfo[playerid][Leader])
    {
    new string[128], string2[128], pname[MAX_PLAYER_NAME];
    GetPlayerName(playerid,pname,sizeof pname);
    format(string, sizeof(string),"Fraktions/%s.sav",pname);
    dini_IntSet(string, "Fraktion", pInfo[playerid][Fraktion]);
    GetPlayerName(playerid,pname,sizeof(pname));
    new Team = pInfo[playerid][Fraktion];//Hier bekommt Team dann die Fraktions ID um sie bei switch zu verwenden
    switch(Team)
    {
    case 1: format(string2,sizeof(string2),"%s hat dich zum Member der Grove Street Families gemacht!",pname);
    case 2: format(string2,sizeof(string2),"%s hat dich zum Member der Jefferson 82's Ballas gemacht!",pname);
    case 3: format(string2,sizeof(string2),"%s hat dich zum Member der Los Santos Vagos gemacht!",pname);
    case 4: format(string2,sizeof(string2),"%s hat dich zum Member des LSPD gemacht!",pname);
    case 5: format(string2,sizeof(string2),"%s hat dich zum Member der Varrios Los Aztecas gemacht!",pname);
    case 6: format(string2,sizeof(string2),"%s hat dich zum Member der Triaden gemacht!",pname);
    }
    SendClientMessage(pID,0x00F0F0FF,string2);
    pInfo[pID][Fraktion] = Team ;
    }
    else return SendClientMessage(playerid, 0xC8C8C8FF, "Du bist kein Leader!");
    return 1;
    }


    Und was mir noch auffällt: Warum speicherst du wenn jemand /invite benutzt desssen fraktion in seiner Spieler datei?


    Mfg.

    The fact is, I am right. And if you think I'm wrong, you are wrong.

  • Naja hier:
    format(string, sizeof(string),"Fraktions/%s.sav",pname);
    dini_IntSet(string, "Fraktion", pInfo[playerid][Fraktion]);
    Du nimmst die Spieler datei von dem Spieler der den Befehl benutzt, und speicherst seine Fraktion. Ist ja eigentlich sinnlos ^^

    The fact is, I am right. And if you think I'm wrong, you are wrong.

  • Nenene versteh mich nicht falsch. Der Code ist so schon richtig^^ Ich versteh nur nicht den Sinn dahinter also warum du das machen willst^^
    Probier lieber mal den Befehl aus und sag obs so funktioniert.


    Mfg.

    The fact is, I am right. And if you think I'm wrong, you are wrong.

  • Du musst das angeben was du speichern möchtest ;) schau Beispiel von Maddin

  • Naja, im normal fall reicht es den Account eines Spielers zu Speichern wenn er sich ausloggt. Und am besten jede stunde alle Accounts speichern falls der Server mal abstürtzt.
    Und wenn du das machst, brauchste das nicht noch extra im befehl machen.

    The fact is, I am right. And if you think I'm wrong, you are wrong.