Jobsperre einbauen

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 zusammen,


    ich möchte für die jeweiligen Job IDs eine Zeitsperre einbauen, welche beim /quitjob ausgelöst wird, bzw die Zeit ab dann abgezogen wird!



    bisher habe ich die Zeiten für die Jobs definiert


    //Jobsperren in Minuten


    #define PROBE_LS_GELD 0
    #define PROBE_LS_BUS 15
    #define PROBE_LV_BUS 15


    anschließend habe ich beim /startjobs die abfrage der ID eingebaut (0 == KEIN JOB)


    und beim /quitjob
    soll die Zeit angegeben werden und die ID auf 0 gesetzt werden per Timer (hab das momentan zum testen noch direkt drinne)


    ocmd:startjobs(playerid,params[])
    {
    if(sInfo[playerid][job_id] != 0) return SendClientMessage(playerid,RED,"Du hast bereits einen Nebenjob!");
    ShowPlayerDialog(playerid,ANMELDUNGEN,DIALOG_STYLE_LIST,"Anmeldestellen","Geldtransportservice Los Santos Bank \nBusfahrer/in Los Santos \nBusfahrer Las Venturas","Anmeldung","Abbrechen");
    return 1;
    }


    ocmd:quitjob(playerid,params[])
    {
    new string[128];
    if(sInfo[playerid][job_id] == 0) return SendClientMessage(playerid,RED,"Du hast keinen Nebenjob den du kündigen kannst!");
    switch (sInfo[playerid][job_id])
    {
    case 1: { //Geldtransporter
    format(string,sizeof(string),"Du hast den Geldtransporterjob gekündigt! Es liegt eine Pflichtzeit von %i Minuten vor!",PROBE_LS_GELD);
    SendClientMessage(playerid,RED,string);
    sInfo[playerid][job_id] = 0;
    }
    case 2:{ //Busfahrer LS
    format(string,sizeof(string),"Du hast den Busfahrerjob in Los Santos gekündigt! Es liegt eine Pflichtzeit von %i Minuten vor!",PROBE_LS_BUS);
    SendClientMessage(playerid,RED,string);
    sInfo[playerid][job_id] = 0;
    }
    case 3:{ //Busfahrer LV
    format(string,sizeof(string),"Du hast den Busfahrerjob in Las Venturas gekündigt! Es liegt eine Pflichtzeit von %i Minuten vor!",PROBE_LV_BUS);
    SendClientMessage(playerid,RED,string);
    sInfo[playerid][job_id] = 0;
    }
    case 4:{ //KEIN JOB
    format(string,sizeof(string),"");
    SendClientMessage(playerid,RED,string);
    sInfo[playerid][job_id] = 0;
    }
    case 5:{ //KEIN JOB
    format(string,sizeof(string),"");
    SendClientMessage(playerid,RED,string);
    sInfo[playerid][job_id] = 0;
    }
    case 6:{ //KEIN JOB
    format(string,sizeof(string),"");
    SendClientMessage(playerid,RED,string);
    sInfo[playerid][job_id] = 0;
    }
    }

    return 1;
    }



    nun möchte ich ja die zeitsperren einbauen, halt das bei /startjobs kein Job angenommen werden kann sobald eine Sperre noch aktiv ist


    wie mache ich das am besten?


    Jeffry kannst du mir nen Anstups geben?



    hatte schonmal dran gedacht die Zeitsperren in der DB zu speichern... ist das ne gute idee?

  • Ich würde das via timestamp lösen und nicht mit dem Timer bedeutet:


    • Du erweiterst dein Enum für das Array sInfo um einen Eintrag

    Bei /quitjob machst das ganze so


    sInfo[playerid][job_delay] = gettime() + (PROBE_LS_BUS * 60 );


    (PROBE_LS_BUS * 60 ) steht für 15 Minuten 15 * 60s



    und bei startjobs die Abfrage


    if(sInfo[playerid][job_delay] >= gettime())return SendClientMessage(playerid,-1,"Du kannst den Job noch nicht ausführen");


    weitere Infos zu timestamps und gettime


    http://wiki.sa-mp.com/wiki/Gettime

  • Ich könnte dir helfen würde aber etwas dauern und am besten per Teamviewer wegen der Anordnung. Lässt halt abspeichern das er eine Sperre hat und erstellst einen Timer. Nach dem Ablauf wird die Variable wieder auf den beliebigen Wert gesetzt. Ist halt die einfachste Art für mich.