Simpeler Befehl mit Zeitangabe

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 weiß echt nicht, wie man einen Befehl mit Zeitangabe macht.


    Ich möchte Das wenn man /deliver [ID] [Zeit] einen Spieler in Alcatraz einsperren kann. Das mit der /deliver [ID] kann ich, aber wie mache ich eine Zeit? Wäre nett, wenn mir jmd, einen Beispielbefehl senden könnte.


    MfG


    [NGR]DirectX

  • Du solltest den Timer auf 1 Minuten setzen dem Spieler eine Variable z.b. Time[playerid] geben, und in diese eintragen wie viele Minuten er noch drin sein muss Bsp.:


    CMD:deliver(playerid, params[])
    {
    new pID, Time;
    if(sscanf(params,"ui", pID, Time))return SendClientMessage(playerid, Farbe, "Benutze ...");//Abfragen ob alle Parameter stimmen
    Time[pID] = Time;//Die Zeit in eine Variable setzen
    SetPlayerKanstPos//Die Position setzten ins Jail
    SetTimerEx("JailTimer", 60000, true, "i", pID);//Den Timer auf 1 Minute stellen
    return 1;
    }


    public JailTimer(playerid)
    {
    if(Time[playerid] > 0)//Wenn größer als 1 Minute 1 Minute abziehen
    {
    Time[layerid] --;
    } else if(Time[playerid] == 0)//Wenn die Variable auf 0 ist rauslassen
    {
    //Aus dem Knast herauskommen
    }
    return 1;
    }


    Beim Timer weiß ich nicht ob die if Abfrage richtig ist, aber ein bisschen Eigeninitiative ist auch nicht Schlimm :)


  • Also, wie der Jailtimer geht, habe ich schon.


    Aber ich möchte einen CMD z.b. /deliver wo man die Zeit eingibt, und das: sSpieler[playerid][Jailtime]; automatisch auf die angegebende Zeit gesetzt wird.

  • Ein Beispielbefehl steht doch oben oder bin ich Blind?


    Spoiler anzeigen
    CMD:deliver(playerid, params[])
    {
    new pID, Time;
    if(sscanf(params,"ui", pID, Time))return SendClientMessage(playerid, Farbe, "Benutze ...");//Abfragen ob alle Parameter stimmen
    Time[pID] = Time;//Die Zeit in eine Variable setzen
    SetPlayerKanstPos//Die Position setzten ins Jail
    SetTimerEx("JailTimer", 60000, true, "i", pID);//Den Timer auf 1 Minute stellen
    return 1;
    }


    Der einzige unterschied ist vielleicht das CMD: aber das musst du dann einfach nur ändern der Rest bleibt gleich.

  • Ich habe das jetzt so gemacht:


    if(strcmp("/deliver", cmd, true) == 0)
    {
    if(IstSpielerAdmin(playerid, 1)) { //wird dann noch zur Copfraktion gesetzt.
    tmp = strtok(cmdtext,idx);
    if(!strlen(tmp) || strlen(tmp) > 5) {
    return SendClientMessage(playerid,ADMINFS_MESSAGE_COLOR,"Benutze /deliver [ID] [Zeit]");
    }


    new id = strval(tmp);


    if(!IsPlayerConnected(id)) {
    SendClientMessage(playerid,COLOR_RED,"~> Spieler nicht gefunden.");
    return 1;
    }
    new zeit = strval(tmp);
    if(zeit < 0 || zeit > 120)
    {
    SendClientMessage(playerid,COLOR_WHITE," Zeit nur zwischen 0 und 120 Minuten!");
    return 1;
    }


    gMessage = strrest(cmdtext,idx);


    sSpieler[id][Jailtime] = zeit; //Hier das was Gesetzt werden soll (Funktioniert nicht!)
    SetPlayerPos(id,-2302.9690,1926.7751,7.0480);
    SetTimer("jailtimer", 0000, id);
    SendClientMessage(id,ADMINFS_MESSAGE_COLOR,"Du bist nun im Knast :("); //Testbefehl funktionert
    return 1;
    } else {
    SendClientMessage(playerid,COLOR_RED,"Zugriff verweigert! Du benötigst mindestens den Adminrang: {00A500}Supporter "); //Natürlich für Cops :)
    return 1;
    }
    }

    Aber die Jailtime wird nicht auf die Zeit gesetzt :(
    Was ist der Fehler?

    Einmal editiert, zuletzt von Indec ()

  • Dein Befehl wird so nicht funktionieren, da du die Parameter falsch verwenden willst bzw es falsch splittest.


    Hier, mach es einfach so:


    if(!strcmp("/deliver", cmd, true))
    {
    if(!IstSpielerAdmin(playerid, 1)) return SendClientMessage(playerid,COLOR_RED,"Zugriff verweigert! Du benötigst mindestens den Adminrang: {00A500}Supporter ");
    tmp = strtok(cmdtext,idx);
    if(!tmp[0]) return SendClientMessage(playerid,ADMINFS_MESSAGE_COLOR,"Benutze /deliver [ID] [Zeit]");
    new id = strval(tmp);
    if(!IsPlayerConnected(id)) return SendClientMessage(playerid,COLOR_RED,"~> Spieler nicht gefunden.");
    tmp = strtok(cmdtext,idx);
    new zeit = strval(tmp);
    if(zeit < 0 || zeit > 120) return SendClientMessage(playerid,COLOR_WHITE," Zeit nur zwischen 0 und 120 Minuten!");
    //gMessage = strrest(cmdtext,idx); //WAS DAS?!
    sSpieler[id][Jailtime] = zeit; //Hier das was Gesetzt werden soll (Funktioniert nicht!)
    SetPlayerPos(id,-2302.9690,1926.7751,7.0480);
    SetTimerEx("jailtimer", 1000, 1, "i", id); //Den Timer evtl überarbeiten
    SendClientMessage(id,ADMINFS_MESSAGE_COLOR,"Du bist nun im Knast :("); //Testbefehl funktionert
    return 1;
    }


    mfg. :thumbup:

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S