| PayDay - Problem |

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
  • Liebe Community,
    Ich habe einen Timer bei den PayDay-System eingefügt, aber der PayDay wird nicht wenn 60min um sind aufgerufen, und der Timer geht nach 60min weiter (auf 61), aber ich möchte das es dann auf 0 wieder gesetzt wird.


    Der Timer

    SetTimer("ServerMinute",60000,1);//1 Minute


    Hier sollte es aufgerufen werden
    public ServerMinute()//Dieser Public wird jede Minute aufgerufen
    {
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(IsPlayerConnected(i))
    {
    SavePlayer(i); //Deine Definierung, dein Payday soll ja auch beim Disconnect gespeichert werden, bzw die Zeit zum nächsten
    PlayerInfo[i][pPayDayZeit] += 1;//Anpassen!
    if(PlayerInfo[i][pPayDayZeit] == 60)//Wenn dein Payday auf 60 ist, wird dein Public aufgerufen
    {
    PayDay(i);
    }
    }
    }
    return 1;
    }


    Der PayDay



    public PayDay(playerid)
    {
    new string[128];
    new account,interest,zuschuss;
    new rent = 0;
    if(IsPlayerConnected(playerid))
    {
    if(PlayerInfo[playerid][pLevel] > 0)
    {
    if(MoneyMessage[playerid]==1)
    {
    SendClientMessage(playerid, COLOR_LIGHTRED, "Du konntest deine Schulden nicht bezahlen und kommst in den Knast.");
    GameTextForPlayer(playerid, "~r~Gefangen!", 2000, 1);
    SetPlayerInterior(playerid, 6);
    SetPlayerPos(playerid, 264.6288,77.5742,1001.0391);
    PlayerInfo[playerid][pJailed] = 1;
    ResetPlayerWeapons(playerid);
    WantedPoints[playerid] = 0;
    PlayerInfo[playerid][pJailTime] = 240;
    format(string, sizeof(string), "Du musst für %d Sekunden in den Knast.", PlayerInfo[playerid][pJailTime]);
    SendClientMessage(playerid, COLOR_LIGHTBLUE, string);
    }
    new playername2[MAX_PLAYER_NAME];
    GetPlayerName(playerid, playername2, sizeof(playername2));
    account = PlayerInfo[playerid][pAccount];
    new key = PlayerInfo[playerid][pPhousekey];
    if(key != 255)
    {
    rent = HouseInfo[key][hRent];
    if(strcmp(playername2, HouseInfo[key][hOwner], true) == 0)
    {
    rent = 0;
    }
    else if(rent > GetPlayerMoney(playerid))
    {
    PlayerInfo[playerid][pPhousekey] = 255;
    SendClientMessage(playerid, COLOR_WHITE, "Sie wurden vertrieben.");
    rent = 0;
    }
    HouseInfo[key][hTakings] = HouseInfo[key][hTakings]+rent;
    }
    new tmpintrate;
    if (key != 255 && strcmp(playername2, HouseInfo[key][hOwner], true) == 0)
    {
    if(PlayerInfo[playerid][pDonateRank] > 0) { tmpintrate = intrate+4; }
    else { tmpintrate = intrate+2; }//HouseInfo[key][hLevel]
    }
    else
    {
    if(PlayerInfo[playerid][pDonateRank] > 0) { tmpintrate = 300; }
    else { tmpintrate = 300; }
    }
    if(PlayerInfo[playerid][pPayDayZeit] == 60)
    {
    Tax += TaxValue;//Should work for every player online
    PlayerInfo[playerid][pAccount] -= TaxValue;
    if(PlayerInfo[playerid][pDonateRank] > 0)
    {
    new bonus = PlayerInfo[playerid][pPayCheck] / 2;
    PlayerInfo[playerid][pPayCheck] += bonus;
    }
    new fraktion = 0;
    if(PlayerInfo[playerid][pMember] > 0) fraktion = PlayerInfo[playerid][pMember] - 1;
    if(PlayerInfo[playerid][pLeader] > 0) fraktion = PlayerInfo[playerid][pLeader] - 1;
    if(fraktion >= 0)
    {
    if(FraktionsKasse[fraktion] - PlayerInfo[playerid][pGehalt] < 0)
    {
    zuschuss = 1; //fucked up to 1
    GivePlayerMoney(playerid, zuschuss);
    }
    else if(FraktionsKasse[fraktion] - PlayerInfo[playerid][pGehalt] >= 0)
    {
    zuschuss = PlayerInfo[playerid][pGehalt];
    GivePlayerMoney(playerid, zuschuss);
    FraktionsKasse[fraktion] -= zuschuss;
    }
    }
    new checks = PlayerInfo[playerid][pPayCheck];
    new ebill = (PlayerInfo[playerid][pAccount]/10000)*(PlayerInfo[playerid][pLevel]);
    ConsumingMoney[playerid] = 1;
    GivePlayerMoney(playerid, checks);
    if(PlayerInfo[playerid][pAccount] > 0)
    {
    PlayerInfo[playerid][pAccount] -= ebill;
    SBizzInfo[4][sbTill] += ebill;
    }
    else
    {
    ebill = 0;
    }
    interest = (PlayerInfo[playerid][pAccount]/1000)*(tmpintrate);
    PlayerInfo[playerid][pExp]++;
    PlayerPlayMusic(playerid);
    PlayerInfo[playerid][pAccount] = account+interest+zuschuss;
    SendClientMessage(playerid, COLOR_WHITE, "{FFFF00}===============| {990000}Zahltag{FFFF00} |===============");
    format(string, sizeof(string), " Lohn: $%d Steuern: -$%d", checks, TaxValue);
    SendClientMessage(playerid, COLOR_GRAD1, string);
    if(PlayerInfo[playerid][pPhousekey] != 255 || PlayerInfo[playerid][pPbiskey] != 255)
    {
    format(string, sizeof(string), "* Stromrechnung: -$%d", ebill);
    SendClientMessage(playerid, COLOR_GRAD1, string);
    }
    format(string, sizeof(string), "* Fraktionslohn: $%d", zuschuss);
    SendClientMessage(playerid, COLOR_WHITE, string);
    format(string, sizeof(string), "* Kontostand: $%d", account);
    SendClientMessage(playerid, COLOR_WHITE, string);
    format(string, sizeof(string), "* Zinssatz: 0.%d Prozent",tmpintrate);
    SendClientMessage(playerid, COLOR_WHITE, string);
    format(string, sizeof(string), "* Zinsen: $%d", interest);
    SendClientMessage(playerid, COLOR_WHITE, string);
    SendClientMessage(playerid, COLOR_WHITE, "{FFFF00}===============| {990000}Zahltag{FFFF00} |===============");
    format(string, sizeof(string), "* Neuer Kontostand: $%d", PlayerInfo[playerid][pAccount]);
    SendClientMessage(playerid, COLOR_AGEBUHR, string);
    format(string, sizeof(string), "* Miete: -$%d", rent);
    SendClientMessage(playerid, COLOR_WHITE, string);
    format(string, sizeof(string), "~y~PayDay~n~~w~Paycheck");
    GameTextForPlayer(playerid, string, 5000, 1);
    rent = 0;
    PlayerInfo[playerid][pPayDay] = 0;
    PlayerInfo[playerid][pPayCheck] = 0;
    PlayerInfo[playerid][pConnectTime] += 1;
    if(PlayerInfo[playerid][pDonateRank] > 0)
    {
    PlayerInfo[playerid][pPayDayHad] += 1;
    if(PlayerInfo[playerid][pPayDayHad] >= 5)
    {
    PlayerInfo[playerid][pExp]++;
    PlayerInfo[playerid][pPayDayHad] = 0;
    }
    }
    }
    else
    {
    SendClientMessage(playerid, COLOR_LIGHTRED, "* Du hast nicht lange genug gespielt, um PayDay zu erhalten.");
    }
    }
    }
    Checkprop();
    return 1;
    }



    Ich hoffe ihr könnt helfen.




    MfG
    James.

  • Schreib es so:


    public ServerMinute()//Dieser Public wird jede Minute aufgerufen
    {
    for(new i; i < MAX_PLAYERS; i++) {
    if(!IsPlayerConnected(i) || IsPlayerNPC(i)) continue;
    PlayerInfo[i][pPayDayZeit]++;
    if(PlayerInfo[i][pPayDayZeit] == 60) PayDay(i),PlayerInfo[i][pPayDayZeit] = 0;
    }
    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

  • public ServerMinute()//Dieser Public wird jede Minute aufgerufen
    {
    for(new i; i < MAX_PLAYERS; i++) {
    if(!IsPlayerConnected(i) || IsPlayerNPC(i)) continue;
    printf("pPayDayZeit: %i",PlayerInfo[i][pPayDayZeit]);
    PlayerInfo[i][pPayDayZeit]++;
    printf("pPayDayZeit: %i",PlayerInfo[i][pPayDayZeit]);
    if(PlayerInfo[i][pPayDayZeit] == 60) PayDay(i),PlayerInfo[i][pPayDayZeit] = 0,printf("PAYDAY FÜR %i",i);
    }
    return 1;
    }
    Was kommt beim Debug raus?

  • Was kommt beim Debug raus?


    Der PayDay wird garnicht nach den 60min aufgerufen...


    Die ServerLog:



    [16:12:11] pPayDayZeit: 57
    [16:12:11] pPayDayZeit: 58
    [16:13:17] pPayDayZeit: 58
    [16:13:17] pPayDayZeit: 59
    [16:14:23] pPayDayZeit: 59
    [16:14:23] pPayDayZeit: 60
    [16:15:29] pPayDayZeit: 60
    [16:15:29] pPayDayZeit: 61


  • Versuch das mal so:
    public ServerMinute()
    {
    for(new i;i<MAX_PLAYERS;i++)
    {
    if(!IsPlayerConnected(i) || IsPlayerNPC(i))continue;
    PlayerInfo[i][pPayDayZeit] ++;
    if(PlayerInfo[i][pPayDayZeit] == 60)
    {
    PayDay(i);
    PlayerInfo[i][pPayDayZeit] = 0;
    print("PAYDAY-TIME");
    }
    }
    return 1;
    }


    EDIT:
    Kaliber:
    Ach, was laber ich denn da :wacko:
    Hahahahah :dash:

  • Der PayDay wird garnicht nach den 60min aufgerufen...


    Dann verwendest du nicht unseren Code...oder es kommt zu einem Run Time Error...(benutzte mal das crashdetect Plugin).


    Den Timer hast du auch nur auf einer Minute gestellt, das weißt du schon oder?


    Ist ja auch richtig...weil pro Minute ++..und 60 Minuten = 1ne Stunde :D


    mfg. :thumbup:

    ast2ufdyxkb1.png


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

  • (benutzte mal das crashdetect Plugin).


    Hab mal hinzugefügt:


    [16:33:57] [debug] Run time error 4: "Array index out of bounds"
    [16:33:57] [debug] Accessing element at index 17 past array upper bound 16
    [16:33:57] [debug] AMX backtrace:
    [16:33:57] [debug] #0 00100f8c in public PayDay (0) from LoR-1-0-0.amx
    [16:33:57] [debug] #1 0020b2f0 in public ServerMinute () from LoR-1-0-0.amx


    Das kommt raus

  • Run time error 4: "Array index out of bounds"


    Genau das dachte ich mir ^^


    Da hast du deinen Fehler, jetzt mach einen print-Debug in der PayDay Funktion bzw evtl weißt du ja, welches Array exakt 16 cells hat...und such dir da den Fehler :)


    Nur zur Verdeutlichung, der Fehler wird durch folgendes verursacht:


    new test[16];
    test[17] = 5; //Hier ist der Fehler


    mfg. :thumbup:

    ast2ufdyxkb1.png


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