Beiträge von ChristianW

    Aufgerufen wird er ganz normal



    if(!strcmp(cmd,"/corpse",true))
    {
    if(PlayerInfo[playerid][pJob] == 36)
    {
    new vid = GetPlayerVehicleID(playerid);
    if(IsBestatterVeh(vid))
    {
    new str[100],endstr[1000], counter = 0;
    for(new i2 = 0; i2 < MAX_BESTATTER; i2++)
    {
    new Float:X1 = BestatterInfo[i2][Todx], Float:X2 = BestatterInfo[i2][Tody], Float:X3 = BestatterInfo[i2][Todz];
    if(counter <= MAX_BESTATTER)
    {
    if(IsPlayerInRangeOfPoint(playerid,200.0,X1,X2,X3))
    {
    format(str,sizeof(str),"Verstorbener: %s\n",BestatterInfo[i2][Opfer]);
    strcat(endstr,str);
    counter ++;
    }
    else if(BestatterInfo[i2][Angenommen] == 1)
    {
    format(str,sizeof(str),"Fall: %s in Bearbeitung von %s\n",BestatterInfo[i2][Opfer],BestatterInfo[i2][Auftragnehmer]);
    strcat(endstr,str);
    counter ++;
    }
    else
    {
    format(str,sizeof(str),"Slot nicht in Nutzung\n");
    strcat(endstr,str);
    counter ++;
    }
    }
    }
    ShowPlayerDialog(playerid,DIALOG_CORPSE,DIALOG_STYLE_LIST,"Aufträge von Pixel Roleplay",endstr,"Auswählen","Beenden");
    return 1;
    }
    return SendClientMessage(playerid,WHITE,"Du bist in keinem Leichenwagen!");
    }
    return SendClientMessage(playerid,WHITE,"Du bist kein Bestatter!");
    }

    Ist ja schön und gut, aber die return's müssen raus. Überleg dir doch einfach mal logisch, was passiert, wenn du den Befehl eingibst. Wenn ein return auftaucht, bricht die Schleife ab, ob du es glaubst oder nicht.
    Wie du es machen kannst:


    So?


    ocmd:takecorpse(playerid,params[])
    {
    new text[36];
    for(new i = 0; i < MAX_BESTATTER; i++)
    {
    if(PlayerInfo[playerid][pJob] == 36)
    {
    if(BestatterInfo[i][Bestatterid] != playerid)
    {
    if(IsPlayerInRangeOfPoint(playerid,5.0,BestatterInfo[i][Todx],BestatterInfo[i][Tody],BestatterInfo[i][Todz]))
    {
    if(BestatterInfo[i][Bestatterid] == playerid)
    {
    if(!IsPlayerInAnyVehicle(playerid))
    {
    if(sscanf(params,"s",text))
    {
    if(strcmp(text,BestatterInfo[i][Opfer],true))
    {
    SendClientMessage(playerid,COLOR_LIGHTBLUE,"** Du hast eine Leiche aufgesammelt!");
    SendClientMessage(playerid,COLOR_LIGHTBLUE,"** Gehe nun zum Kofferraum und gebe ein /laycorpse!");
    DestroyPickup(TotenKopf[bestattervar[playerid]]);
    Delete3DTextLabel(TotenLabeli[bestattervar[playerid]]);
    KillTimer(totentimer[BestatterInfo[i][Spielerid]]);
    hatleiche[playerid] = 1;
    bestatterpoint[playerid] = 1;
    }
    else { return SendClientMessage(playerid,WHITE,"Falscher Name, bitte schreibe vollständig den Namen!"); }
    }
    else { return SendClientMessage(playerid,WHITE,"Nutzung: /takecorpse [Name der Leiche]"); }
    }
    else { return SendClientMessage(playerid,WHITE,"Du darfst nicht in einem Fahrzeug sein!"); }
    }
    else { return SendClientMessage(playerid,WHITE,"Dieser Auftrag gehört dir nicht!"); }
    }
    else { return SendClientMessage(playerid,WHITE,"Du bist nicht bei der Leiche"); }
    }
    else { return SendClientMessage(playerid,WHITE,"Dieser Auftrag gehört dir nicht"); }
    }
    else { return SendClientMessage(playerid,WHITE,"Du bist kein Bestatter"); }
    }
    return 1;
    }


    Wenn da kein return ist dann kommt die MEssage 20 mal ?

    Hey Com,


    Wenn ciha uf ein Listitem klicke passiert rein garnichts?


    if(dialogid == DIALOG_CORPSE)
    {
    for(new i = 0; i < MAX_BESTATTER; i++)
    {
    if(!response)
    if(listitem == i)
    {
    if(hatauftragid[playerid] == 1) { SendClientMessage(playerid,WHITE,"Du hast noch einen Auftrag!"); }
    new Float:X1 = BestatterInfo[i][Todx], Float:X2 = BestatterInfo[i][Tody], Float:X3 = BestatterInfo[i][Todz];
    if(IsPlayerInRangeOfPoint(playerid,200.0,X1,X2,X3) && BestatterInfo[i][Angenommen] == 0)
    {
    new Namei[MAX_PLAYER_NAME], string[128];
    GetPlayerName(playerid,Namei,sizeof(Namei));
    BestatterInfo[i][Bestatterid] = playerid;
    BestatterInfo[i][Angenommen] = 1;
    format(BestatterInfo[i][Auftragnehmer],24,"%s", Namei);
    bestattervar[playerid] = BestatterInfo[i][Spielerid];
    format(string,sizeof(string),"** Du hast den Fall von %s angenommen!",BestatterInfo[i][Opfer]);
    SendClientMessage(playerid,COLOR_LIGHTBLUE,string);
    SetPlayerCheckpoint(playerid,BestatterInfo[i][Todx],BestatterInfo[i][Tody],BestatterInfo[i][Todz],5.0);
    KillTimer(totentimer[BestatterInfo[i][Spielerid]]);
    totentimer[BestatterInfo[i][Spielerid]] = SetTimerEx("totenkopfding",50000,0,"i",BestatterInfo[i][Spielerid]);
    hatauftragid[playerid] = 1;
    }
    else if(IsPlayerInRangeOfPoint(playerid,200.0,X1,X2,X3) && BestatterInfo[i][Angenommen] == 0) { SendClientMessage(playerid,WHITE,"Fehler, unaufrubarer Slot!" }
    }
    }
    }
    Woran liegt das

    Nein die return's raus. Damit brichst du die gesamte Schleife ab, wie beim break. Das break kannst du aber drin lassen. Musst den Code umschreiben, dass du alles ohne return's hast, außer du willst, dass die Schleife abbricht.


    Mfg


    Aber in meinen anderen gehts auch soll ich da dann else schreiben?

    und wo wird etwas in die bestatterinfo geschrieben


    Beim Tod


    for(new ix = 0; ix < MAX_BESTATTER; ix++)
    {
    if(BestatterInfo[ix][Inuse] == 0)
    {
    BestatterInfo[ix][Spielerid] = playerid;
    format(BestatterInfo[ix][Opfer],24,"%s",Namei);
    BestatterInfo[ix][Todx] = Tod[0];
    BestatterInfo[ix][Tody] = Tod[1];
    BestatterInfo[ix][Todz] = Tod[2];
    BestatterInfo[ix][TodesGeld] = floatround(ergebnis);
    BestatterInfo[ix][Angenommen] = 0;
    BestatterInfo[ix][Inuse] = 1;
    format(BestatterInfo[ix][Auftragnehmer],24,"No-One");
    break;
    }
    else print("A Fail has found, yet");
    }


    Edit bei der Bestatterid 0 gehts aj bei der darüber nicht?

    Hey Com,


    Immer wenn ich /takecorpse eingebe und die Bestatterid nicht 0 ist steht da du bist bei keiner Leiche


    Wieso ist das so :D


    Code:


    ocmd:takecorpse(playerid,params[])
    {
    new text[36];
    for(new i = 0; i < MAX_BESTATTER; i++)
    {
    if(PlayerInfo[playerid][pJob] != 36) return SendClientMessage(playerid,WHITE,"Du bist kein Bestatter!");
    if(BestatterInfo[i][Bestatterid] != playerid)
    if(!IsPlayerInRangeOfPoint(playerid,5.0,BestatterInfo[i][Todx],BestatterInfo[i][Tody],BestatterInfo[i][Todz])) return SendClientMessage(playerid,WHITE,"Du bist bei keiner Leiche!");
    if(BestatterInfo[i][Bestatterid] != playerid) return SendClientMessage(playerid,WHITE,"Dieser Auftrag gehört dir nicht!");
    if(IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid,WHITE,"Im Auto ist es nicht möglich eine Leiche aufzuheben!");
    if(sscanf(params,"s",text)) return SendClientMessage(playerid,WHITE,"Nutzung: /takecorpse [Name]");
    if(strcmp(text,BestatterInfo[i][Opfer],true)) return SendClientMessage(playerid,WHITE,"Falscher Name, schreibe den Namen bitte Vollständig aus!");
    {
    SendClientMessage(playerid,COLOR_LIGHTBLUE,"** Du hast eine Leiche aufgesammelt!");
    SendClientMessage(playerid,COLOR_LIGHTBLUE,"** Gehe nun zum Kofferraum und gebe ein /laycorpse!");
    DestroyPickup(TotenKopf[bestattervar[playerid]]);
    Delete3DTextLabel(TotenLabeli[bestattervar[playerid]]);
    KillTimer(totentimer[BestatterInfo[i][Spielerid]]);
    hatleiche[playerid] = 1;
    bestatterpoint[playerid] = 1;
    break;
    }
    }
    return 1;
    }


    Danke