Mein Selfmade Befehl komme nicht weiter

  • Mein Selfmade Befehl komme nicht weiter

    Nun ja,

    Ich habe ein /giverank Befehl gemacht.
    Die Abfrage ob er Rang 6 hat bedeutet ob er der Leader ist.

    Nun kann der Leader aber jeden einen Rang geben.
    Ich möchte nur das jeder Leader das für seine Fraktion kann.

    [pwn]ocmd:giverank(playerid,params[])
    {
    if(!PlayerRang(playerid,6))return SendClientMessage(playerid,Grau,"Du hast nicht den gebrauchten Rang dazu.");
    new pID,rangid,string[125];
    if(sscanf(params,"ui",pID,rangid))return SendClientMessage(playerid,Grau,"Nutzung: /giverank [ID/Teilname] [Rangnr.]");
    SetPVarInt(pID,"Fraktionsrang",rangid);
    format(string,sizeof(string),"%s hat dir einen neuen Rang geben",SpielerName(playerid));
    SendClientMessage(pID,Grau,string);
    return 1;
    }[/pwn]
  • [pwn]
    ocmd:giverank(playerid,params[])
    {
    if(!PlayerRang(playerid,6))return SendClientMessage(playerid,Grau,"Du hast nicht den gebrauchten Rang dazu.");
    new pID,rangid,string[125];
    if(sscanf(params,"ui",pID,rangid))return SendClientMessage(playerid,Grau,"Nutzung: /giverank [ID/Teilname] [Rangnr.]");
    SetPVarInt(pID,"Fraktionsrang",rangid);
    format(string,sizeof(string),"%s hat dir einen neuen Rang geben",SpielerName(playerid));
    SendClientMessage(pID,Grau,string);
    return 1;
    }
    [/pwn]

    du musst eine Abfrage starten, in welcher Fraktion pID ist und in welcher fraktion playerid ist und dann vergleichen,
    also
    if(FRAKTIONSRANG(pID) != FRAKTIONSRANG(plyaerid))return SendClientMessage(playerid, FARBE, "Der Spieler ist nicht in deiner Fraktion!");

    Da ich nicht weiß,
    wie du die Fraktionen im Script definiert hast, also wie du abfragst, welche Frak welcher User hat, kann ichs dir nicht fertig schicken.
    Wenn du z.B. mit PVars die Variable "Fraktion" hast, einfach mit
    [pwn] if(GetPVarInt(pID,"Fraktion") != GetPVarInt(playerid,"Fraktion")return SendClientMessage(playerid, FARBE, "Der Spieler ist nicht in deiner Fraktion!");[/pwn]
    Gruß,
    Dennis

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Dennis321 ()

  • Okay nun habe ich eine Frage und weiß nicht ob das geht da ich keinen zum Testen habe mein Selfmade Arrest System:

    [pwn]ocmd:knast(playerid,params[])
    {
    new pID;
    if(isPlayerInFrakt(playerid,1))
    if(sscanf(params,"u",pID))return SendClientMessage(playerid,ROT,"Benutze /knast [id]");
    if(GetPlayerWantedLevel(pID)>=1)
    if(!IsPlayerInRangeOfPoint(playerid,5,1603.3605,-1617.3046,13.5016) || !IsPlayerInRangeOfPoint(pID,5,1603.3605,-1617.3046,13.5016))return SendClientMessage(playerid,ROT,"Du und der Gefangene müssen beide am Knastpunkt sein!");
    Jailer(playerid,pID);
    return 1;
    }

    stock Jailer(playerid,knastid)
    {
    SetPlayerPos(knastid,268.0708,76.5376,1001.0391);
    SetPlayerInterior(knastid,6);
    switch(GetPlayerWantedLevel(knastid))
    {
    case 1:
    {
    SetTimerEx("Unjail",500000,false,"i",knastid);
    SendClientMessage(knastid,ROT,"Du wurdest für 500Sekunden ins Gefängnis gebracht!");
    GivePlayerMoney(playerid,1000);
    jailed[knastid]=1;
    }
    case 2:
    {
    SetTimerEx("Unjail",1000000,false,"i",knastid);
    SendClientMessage(knastid,ROT,"Du wurdest für 1000Sekunden ins Gefängnis gebracht!");
    GivePlayerMoney(playerid,2000);
    jailed[knastid]=1;
    }
    case 3:
    {
    SetTimerEx("Unjail",1500000,false,"i",knastid);
    SendClientMessage(knastid,ROT,"Du wurdest für 1500Sekunden ins Gefängnis gebracht!");
    GivePlayerMoney(playerid,3000);
    jailed[knastid]=1;
    }
    case 4:
    {
    SetTimerEx("Unjail",2000000,false,"i",knastid);
    SendClientMessage(knastid,ROT,"Du wurdest für 2000Sekunden ins Gefängnis gebracht!");
    GivePlayerMoney(playerid,4000);
    jailed[knastid]=1;
    }
    case 5:
    {
    SetTimerEx("Unjail",2500000,false,"i",knastid);
    SendClientMessage(knastid,ROT,"Du wurdest für 2500Sekunden ins Gefängnis gebracht!");
    GivePlayerMoney(playerid,5000);
    jailed[knastid]=1;
    }
    case 6:
    {
    SetTimerEx("Unjail",3000000,false,"i",knastid);
    SendClientMessage(knastid,ROT,"Du wurdest für 3000Sekunden ins Gefängnis gebracht!");
    GivePlayerMoney(playerid,6000);
    jailed[knastid]=1;
    }
    }
    return 1;
    }

    forward Unjail(playerid);
    public Unjail(playerid)
    {
    jailed[playerid]=0;
    SetPlayerPos(playerid,1538.8953,-1672.9465,13.5469);
    SendClientMessage(playerid,BLAU,"[Entlassen] ");
    SendClientMessage(playerid,BLAU,"Sei in Zukunft ein guter Mensch!");
    return 1;
    }[/pwn]

    [pwn]new jailed[MAX_PLAYERS];[/pwn]

    Würde der Funktionieren`?
  • Nun,
    das man fehler übersieht kann immer mal passieren,
    daherr würde ich einen Test früher oder später auf jeden Fall empfehlen ;)

    [pwn]
    if(!isPlayerInFrakt(playerid,1))return SendClientMessage(playerid, ROT, "Du bist kein Cop!");
    if(sscanf(params,"u",pID))return SendClientMessage(playerid,ROT,"Benutze /knast [id]");
    if(GetPlayerWantedLevel(pID)<=1)return SendClientMessage(playerid, ROT, "Der user hat keine Wanteds!");
    [/pwn]

    Nun gibt er Fehler aus, wenn der User kein Cop ist, oder der Häftling nicht mehr als 1 WTD hat.

    [pwn]forward Unjail(playerid);[/pwn]
    Sollte oben im Script rein

    Und spätestens in Unjail(playerid) solltest du dem Verbrecher seine WTDs auch wieder resetten,
    da er nach dem Knastaufenthalt sonst immer noch seine Wanteds hat.
    Also SetPlayerWantedLevel(knastid, 0);


    An sonsten sehe ich auf dem ersten Blick keine Fehler,
    kann sich ja noch mal wer anders ansehen^^
    Gruß,
    Dennis


    //EDIT:
    @Vincent,
    ich habe da auch gerade etwas überlegen müssen,
    aber an sich könnte das Jailer(playerid,knastid) funktionieren, da er beide playerids dahin übergibt und die pID einfach weiter verarbeitet.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Dennis321 ()

  • Dennis321 schrieb:

    Nun,
    das man fehler übersieht kann immer mal passieren,
    daherr würde ich einen Test früher oder später auf jeden Fall empfehlen ;)

    [pwn]
    if(!isPlayerInFrakt(playerid,1))return SendClientMessage(playerid, ROT, "Du bist kein Cop!");
    if(sscanf(params,"u",pID))return SendClientMessage(playerid,ROT,"Benutze /knast [id]");
    if(GetPlayerWantedLevel(pID)<=1)return SendClientMessage(playerid, ROT, "Der user hat keine Wanteds!");
    [/pwn]

    Nun gibt er Fehler aus, wenn der User kein Cop ist, oder der Häftling nicht mehr als 1 WTD hat.

    [pwn]forward Unjail(playerid);[/pwn]
    Sollte oben im Script rein

    Und spätestens in Unjail(playerid) solltest du dem Verbrecher seine WTDs auch wieder resetten,
    da er nach dem Knastaufenthalt sonst immer noch seine Wanteds hat.
    Also SetPlayerWantedLevel(knastid, 0);


    An sonsten sehe ich auf dem ersten Blick keine Fehler,
    kann sich ja noch mal wer anders ansehen^^
    Gruß,
    Dennis


    //EDIT:
    @Vincent,
    ich habe da auch gerade etwas überlegen müssen,
    aber an sich könnte das Jailer(playerid,knastid) funktionieren, da er beide playerids dahin übergibt und die pID einfach weiter verarbeitet.

    Sofern nicht falsch, Dennis, dennoch gibt er ja nirgens eine knastid an, unnötiger Parameter. ;)
  • Nun ja, meint er mit Knastid nicht die ID des Users, der in den Knast gesteckt wurde?
    Denn im Befehl: Jailer(playerid,pID);

    Da hat er schonmal playerid und die pID übergeben,
    die dann natürlich im stock Jailer(playerid,knastid) landet, wo sie unter playerid und knastid wiederzufinden ist.
    Und in dem stock arbeitet er dann ja mit beiden.

    Oder stehe ich jetzt echt so aufm Schlauch?