Befehl nur jeden Stunde benutzen

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,
    ich möchte das man den Befehl:
    if (strcmp("/kill", cmdtext, true) == 0)
    {
    SetPlayerHealth(playerid,0.0);
    SendClientMessage(playerid, 0xAA3333AA, "Selbstmord ist keine lösung...");
    return true;
    }


    Nur jede Stunde benutzen kann ;)
    Und den Befehl:
    if (strcmp("/heal", cmdtext, true) == 0)
    {
    SetPlayerHealth(playerid,100.0);
    SetPlayerArmour(playerid,100.0);
    SendClientMessage(playerid, 0x33AA33AA, "Du heilst dich.");
    SendClientMessage(playerid, 0x33AA33AA, "Du hast dir eine Schutzweste angezogen.");
    return true;
    }


    Den kann man auch nur jede Stunde benutzen und der Kostet immer 10k.
    thx im vorraus :love:

  • if(strcmp(cmdtext,"/heal",true)==0) {
    if(gemacht[playerid]==0) {
    gemacht[playerid]=1;
    SetTimerEx("machenweg",3600000,0,"d",playerid);
    ...
    Nach oben:
    new gemacht[MAX_PLAYERS]; forward machenweg(playerid);
    ganz nach unten:
    public machenweg(playerid) {
    if(IsPlayerConnected(playerid)) {
    gemacht[playerid]=0; }}
    OnPlayerDisconnect:
    gemacht[playerid]=0;

  • Thx wie mach ich den das wen man /heal macht und man noch warten muss das da kommt
    Du kannst dich erst wieder in [Hier die Minuten Anzahl] heilen.


    ??
    THX im vorraus

  • So sollte es gehen, allerdings rate ich dir hierzu nicht, wenn du den ganzen Aufwand nur wegen 2 Befehlen machst. Wenn du diesen Timer abr bereits in deinem Script hast bzw. einen Timer, der jede Minute durchläuft brauchst, kannst du es verwenden...
    KeksOfDeath: Ich denke du solltest bedenken, dass es durchaus Leute gibt, die sich nach dem Befehl ausloggen und andere Spieler dann dessen ID einnehmen...
    // ganz oben
    forward CheckTime();
    new
    CmdTime[MAX_PLAYERS];

    // in OnPlayerConnect
    CmdTime[playerid] = -1;


    // in OnGameModeInit
    SetTimer("CheckTime",60000,1); // globaler Timer der jede Minute aufgerufen wird


    // in dem Befehl, der nur nach einer bestimmten Zeit gehen sollen
    CmdTime[playerid] = 60; // 60 für 1 Stunde usw.


    // Die Überprüfung, z.B. in dem Befehl
    new
    string[64];
    if(CmdTime[playerid] > 0)
    {
    format(string,sizeof(string),"Du kannst den Befehl in %d wieder benutzen", CmdTime[playerid]);
    SendClientMessage(playerid,COLOR,string);
    return 1;
    }


    // Der public


    public CheckTime()
    {
    for(new i = 0; i < GetMaxPlayers(); i++)
    {
    if(IsPlayerConnected(i))
    {
    if(CmdTime[i] > 0)
    {
    CmdTime[i]--;
    }
    if(CmdTime[i] == 0)
    {
    CmdTime[i] = -1;
    }
    }
    }
    }

  • Ja das würde diesen Fehler beheben, allerdings wird "OnPlayerDisconnect" nicht zwangsweise aufgerufen für alle Spieler. Bei Logout/Kick/Ban oder Crash wird es zwar aufgerufen, allerdings gibt es noch andere Fälle, wie z.B. einen Internetausfall, was bei Wlan und Samp gerne vorkommt (Zu sehen an "Lost Connection to Server...").

  • Ööhhmm, das wird aufgerufen? Kann zwar auch sein, dass es bei mir Zufall war, aber als ich mit Kumpel auf LAN war (die Kabel sind ein wenig... nunja... da fehlt der Wiederharken und das Ding fällt des öfteren einfach so raus), ham wir auch sa:mp gezockt und meine Daten wurden gespeichert (durch OnPlayerDisconenct), als bei mir das Kabel die Verbindung verloren hatte

  • Das kann sein. Ich weiß nicht genau, wann es nicht aufgerufen wurde, habe es aber schon mehrmals erlebt bei Leuten mit Wlan z.B. Wann genau das der Fall ist weiß ich auch nicht und welche Voraussetzungen es geben muss, aber es geht