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
  • Hallo Leute.


    Ich habe ein Problem.
    Wenn ein Spieler 60 Minuten voll hat, dann kommt es manchmal vor, dass die Paydayzeit nicht auf 0 zurück gesetzt wird, und die Zeit über 60 geht und der Spieler jede Minute 1 Payday kriegt.


    Hier mal der Code



    forward PayDayCount(playerid);
    public PayDayCount(playerid)
    {
    PlayerInfo[playerid][pPayDayTime] ++;
    PlayerInfo[playerid][pConnectTimeM] ++;
    if(PlayerInfo[playerid][pPayDayTime] > 60)
    {
    PayDay(playerid);
    PlayerInfo[playerid][pPayDayTime] = 0;
    }
    }


    //OnPlayerLogin
    paydaycount[playerid] = SetTimerEx("PayDayCount", 60000, true, "i", playerid);


    Kann jemand helfen? :S


    //Edit


    Da war noch ein /pwn .. :S

  • Dann solltest du noch "PayDay(playerid);" zeigen.
    Ansonsten füg Debugnachrichten ein.


    forward PayDayCount(playerid);
    public PayDayCount(playerid)
    {
    print("PayDayCount Debug #1");
    PlayerInfo[playerid][pPayDayTime] ++;
    PlayerInfo[playerid][pConnectTimeM] ++;
    print("PayDayCount Debug #2");
    if(PlayerInfo[playerid][pPayDayTime] > 60)
    {
    print("PayDayCount Debug #3");
    PayDay(playerid);
    print("PayDayCount Debug #4");
    PlayerInfo[playerid][pPayDayTime] = 0;
    print("PayDayCount Debug #5");
    }
    print("PayDayCount Debug #6");
    }


    //OnPlayerLogin
    paydaycount[playerid] = SetTimerEx("PayDayCount", 60000, true, "i", playerid);
    Du zerstörst den Timer aber auch Irgendwann wieder,oder ?

  • Die Timer werden ab folgenden Stellen entfernt und hinzugefügt:



    OnPlayerDisconnect
    KillTimer(paydaycount[playerid]);
    SetPlayerSpawn
    if(PlayerInfo[playerid][pJailed] == 2)// PRISON INTERRIOR NACH EINLOGGEN
    {
    SetPlayerInterior(playerid,1);
    SetPlayerPos(playerid,2144.3718,1617.5007,993.6882);
    KillTimer(paydaycount[playerid]);
    return 1;
    }
    /prison Befehl
    KillTimer(paydaycount[giveplayerid]);


    Das mit Debug probier ich jetzt aus. ;)


    //Edit


    Debug-Ergebnisse:



    Hier noch PayDay public. ;)



    public PayDay(playerid)
    {
    new string[128];
    new interest;
    new playername2[MAX_PLAYER_NAME];
    new key = PlayerInfo[playerid][pPhousekey];


    if(IsPlayerConnected(playerid))
    {
    PlayerInfo[playerid][pAccount] -= TaxValue;
    if(PlayerInfo[playerid][pDonateRank] > 0)
    {
    new bonus = PlayerInfo[playerid][pPayCheck] / 2;
    PlayerInfo[playerid][pPayCheck] += bonus;
    }


    new checks = PlayerInfo[playerid][pPayCheck];
    new ebill = (PlayerInfo[playerid][pAccount]/1000000)*(PlayerInfo[playerid][pLevel]);
    new rent = (PlayerInfo[playerid][pAccount]/1000000) *(PlayerInfo[playerid][pLevel]);
    ConsumingMoney[playerid] = 1;
    PlayerMoney[playerid] = PlayerMoney[playerid] += checks;
    if(PlayerInfo[playerid][pAccount] > 0)
    {
    PlayerInfo[playerid][pAccount] -= ebill;
    SBizzInfo[4][sbTill] += ebill;
    ExtortionSBiz(4, ebill);
    }
    else
    {
    ebill = 0;
    rent = 0;
    }
    new tmpintrate;
    if (key != 255 && strcmp(playername2, HouseInfo[key][hOwner], true) == 0)
    {
    if(PlayerInfo[playerid][pDonateRank] > 0) { tmpintrate = intrate+4; }
    else { tmpintrate = intrate+1; }//HouseInfo[key][hLevel]
    }
    else
    {
    if(PlayerInfo[playerid][pDonateRank] > 0) { tmpintrate = 3; }
    else { tmpintrate = 1; }
    }
    interest = (PlayerInfo[playerid][pAccount]/1000)*(tmpintrate);
    PlayerInfo[playerid][pExp]++;
    PlayerPlayMusic(playerid);
    GivePlayerMoney(playerid, 15000);
    SendClientMessage(playerid, COLOR_GREEN, "|___ PAYDAY/ZAHLTAG ___|");
    format(string, sizeof(string), " Gehalt: $15000 Steuern: -$%d", Tax);
    SendClientMessage(playerid, COLOR_WHITE, string);
    if(PlayerInfo[playerid][pPhousekey] != 255 || PlayerInfo[playerid][pPbiskey] != 255)
    {
    format(string, sizeof(string), " Stromkosten: -$%d", ebill);
    SendClientMessage(playerid, COLOR_WHITE, string);
    }
    format(string, sizeof(string), " Kontostand: $%d", PlayerInfo[playerid][pAccount]);
    SendClientMessage(playerid, COLOR_WHITE, string);
    format(string, sizeof(string), " Zinssrate: 0.%d Prozent",tmpintrate);
    SendClientMessage(playerid, COLOR_WHITE, string);
    format(string, sizeof(string), " Zinsen erhalten: $%d", interest);
    SendClientMessage(playerid, COLOR_WHITE, string);
    PlayerInfo[playerid][pAccount] += interest;
    if(PlayerInfo[playerid][pPhousekey] != 255 || PlayerInfo[playerid][pPbiskey] != 255)
    {
    format(string, sizeof(string), " Miete: -$%d", rent);
    SendClientMessage(playerid, COLOR_WHITE, string);
    GivePlayerMoney(playerid, -HouseInfo[key][hRent]);
    HouseInfo[key][hTakings] = HouseInfo[key][hTakings]+HouseInfo[key][hRent];
    }
    if(PlayerInfo[playerid][pDonateRank] >= 2)
    {
    SendClientMessage(playerid,COLOR_GOLD," Respektpunkte erhalten: 2");
    PlayerInfo[playerid][pExp] += 2;


    }
    else
    {
    SendClientMessage(playerid,COLOR_WHITE," Respektpunkte erhalten: 1");
    PlayerInfo[playerid][pExp] ++;
    }
    SendClientMessage(playerid, COLOR_WHITE, "|--------------------------------------|");
    format(string, sizeof(string), " Neuer Kontostand: $%d", PlayerInfo[playerid][pAccount]);
    SendClientMessage(playerid, COLOR_WHITE, string);
    if(PlayerInfo[playerid][pZollPass] == 1)
    {
    PlayerInfo[playerid][pZollPassTime] += 1;
    format(string, sizeof(string), "* Du nutzt deinen Zollpass nun schon seit %d PayDays.", PlayerInfo[playerid][pZollPassTime]);
    SendClientMessage(playerid, COLOR_LIGHTBLUE, string);
    }
    if(PlayerInfo[playerid][pZollPassTime] >= 25)
    {
    PlayerInfo[playerid][pZollPass] = 0;
    PlayerInfo[playerid][pZollPassTime] = 0;
    format(string, sizeof(string), "* Dein Zollpass ist nun nicht mehr gültig und vom Staat als ungültig anerkannt.");
    SendClientMessage(playerid, COLOR_LIGHTRED, string);
    }
    if(PlayerInfo[playerid][pKrankenkasse] == 1)
    {
    PlayerInfo[playerid][pKrankenkasseTime] += 1;
    format(string, sizeof(string), "* Du besitzt nun schon seit %d PayDays eine Krankenversicherung.", PlayerInfo[playerid][pKrankenkasse]);
    SendClientMessage(playerid, COLOR_LIGHTBLUE, string);
    }
    if(PlayerInfo[playerid][pKrankenkasseTime] >= 20)
    {
    PlayerInfo[playerid][pKrankenkasse] = 0;
    PlayerInfo[playerid][pKrankenkasseTime] = 0;
    format(string, sizeof(string), "* Deine Krankenversicherung ist abgelaufen. Du kannst dir am Krankenhaus jederzeit eine neue besorgen.");
    SendClientMessage(playerid, COLOR_LIGHTRED, string);
    }
    if(PlayerInfo[playerid][pWarns] >= 1)
    {
    PlayerInfo[playerid][pWarnTime] += 1;
    }
    if(PlayerInfo[playerid][pWarnTime] == 150)
    {
    PlayerInfo[playerid][pWarns] = -1;
    }
    if(PlayerInfo[playerid][pPunkte] >= 10)
    {
    SendClientMessage(playerid,COLOR_WHITE,"");
    SendClientMessage(playerid,RED,":::::::::::: STRAFE ::::::::::::");
    SendClientMessage(playerid,COLOR_WHITE,"");
    SendClientMessage(playerid,RED,"Du hast 10 Strafpunkte, somit wurde dir dein Führerschein + Bikeschein entzogen!");
    SendClientMessage(playerid,RED,"Nun musst du als Strafe eine Geldsumme von 50.000$ bezahlen!");
    PlayerInfo[playerid][pPunkte] = 0;
    PlayerInfo[playerid][pMotoLic] = 0; // Bikeschein
    PlayerInfo[playerid][pCarLic] = 0; // Autoschein
    GivePlayerMoney(playerid,-50000);
    }

    format(string, sizeof(string), "~y~Zahltag");
    GameTextForPlayer(playerid, string, 5000, 1);
    PlayerInfo[playerid][pJobzeit] += 1;
    // rent = 0;
    PlayerInfo[playerid][pPayCheck] = 0;
    PlayerInfo[playerid][pConnectTime] += 1;
    if(PlayerInfo[playerid][pDonateRank] > 0)
    {
    PlayerInfo[playerid][pPayDayHad] += 1;
    if(PlayerInfo[playerid][pPayDayHad] >= 2)
    {
    //PlayerInfo[playerid][pExp]++;
    PlayerInfo[playerid][pPayDayHad] = 0;
    }
    }
    new nxtlevel = PlayerInfo[playerid][pLevel]+1;
    new expamount = nxtlevel*levelexp;
    if(PlayerInfo[playerid][pExp] == expamount)
    {
    SendClientMessage(playerid, COLOR_LIGHTBLUE, "* Du kannst dir nun dein nächstes Level erkaufen, /buylevel.");
    }
    // PlayerUpdate(playerid);
    }
    return 1;
    }

    Wäre nett wenn du, oder irgendwer hier mir hilft. :)

    Einmal editiert, zuletzt von Ap0llinaris ()

  • Hast du dir die Ausgabe mal genauer angesehen ? Weiter als Debug #3 geht es nie.
    Deswegen fügst du Debugnachrichten jetzt auch noch bei "PayDay(playerid)" ein, zeigst den Code und die Ausgabe.
    Denn bei den 155 Zeilen findet sicherlich keiner auf Anhieb den Fehler ;).

  • Der Debug kommt nur bis Debug 3 und weiter nicht:



    print("Debug3");
    format(string, sizeof(string), " Kontostand: $%d", PlayerInfo[playerid][pAccount]);
    SendClientMessage(playerid, COLOR_WHITE, string);
    format(string, sizeof(string), " Zinssrate: 0.%d Prozent",tmpintrate);
    SendClientMessage(playerid, COLOR_WHITE, string);
    format(string, sizeof(string), " Zinsen erhalten: $%d", interest);
    SendClientMessage(playerid, COLOR_WHITE, string);
    PlayerInfo[playerid][pAccount] += interest;
    if(PlayerInfo[playerid][pPhousekey] != 255 || PlayerInfo[playerid][pPbiskey] != 255)
    {
    format(string, sizeof(string), " Miete: -$%d", rent);
    SendClientMessage(playerid, COLOR_WHITE, string);
    GivePlayerMoney(playerid, -HouseInfo[key][hRent]);
    HouseInfo[key][hTakings] = HouseInfo[key][hTakings]+HouseInfo[key][hRent];
    }
    print("Debug4");


    hmm ,ich verstehs nicht. :S

  • Es gibt keine Beschränkung bei der Anzahl an print's.
    Also nochmal,
    print("Debug 3.1");
    format(string, sizeof(string), " Kontostand: $%d", PlayerInfo[playerid][pAccount]);
    print("Debug 3.2");
    SendClientMessage(playerid, COLOR_WHITE, string);
    print("Debug 3.3");
    format(string, sizeof(string), " Zinssrate: 0.%d Prozent",tmpintrate);
    print("Debug 3.4");
    SendClientMessage(playerid, COLOR_WHITE, string);
    print("Debug 3.5");
    format(string, sizeof(string), " Zinsen erhalten: $%d", interest);
    print("Debug 3.6");
    SendClientMessage(playerid, COLOR_WHITE, string);
    print("Debug 3.7");
    PlayerInfo[playerid][pAccount] += interest;
    print("Debug 3.8");
    if(PlayerInfo[playerid][pPhousekey] != 255 || PlayerInfo[playerid][pPbiskey] != 255)
    {
    print("Debug 3.8.1");
    format(string, sizeof(string), " Miete: -$%d", rent);
    print("Debug 3.8.2");
    SendClientMessage(playerid, COLOR_WHITE, string);
    print("Debug 3.8.3");
    GivePlayerMoney(playerid, -HouseInfo[key][hRent]);
    print("Debug 3.8.4");
    HouseInfo[key][hTakings] = HouseInfo[key][hTakings]+HouseInfo[key][hRent];
    print("Debug 3.8.5");
    }
    print("Debug4");


    0.%d
    Das soll funktionieren :-0 ?

  • Zitat

    Was soll denn sonst dahin, anstatt 0.%d? :D


    Schon gut.

    Zitat

    Ab Debug 3.8.3 hängt er sich auf.
    Ich hab mal die GivePlayerMoney Zeile ausgeklammert und schaue jetzt nach. ;)


    Wird wohl an "key" liegen.
    Mach folgendes rein:
    printf("Debug 3.8.3 key = %d",key);

  • Habe mal



    //GivePlayerMoney(playerid, -HouseInfo[key][hRent]);
    print("Debug 3.8.4");
    //HouseInfo[key][hTakings] = HouseInfo[key][hTakings]+HouseInfo[key][hRent];
    print("Debug 3.8.5");


    Ausgeklammert.
    Nun geht alles.
    Aber ich will trotzdem noch die beiden Sachen drin haben, sonst gibts ja garkeine Miete und so. :(


  • Wird wohl an "key" liegen.
    Mach folgendes rein:
    printf("Debug 3.8.3 key = %d",key);


    Dann mach doch mal das.


    Langsam solltest du aber das Prinzip hinter Debugnachrichten verstanden haben ... . Das es wohl an "key" liegt sollte dir wohl klar sein,denn in Beiden Zeilen kommt "key" vor. Ist bestimmt ein "Index out of Array Bounce".Daher zeig was key ausgibt. Musst einfach den Weg zurück verfolgen bis du den Fehler findest.
    In meiner Signatur ist übrigens noch ein Link zu einem Debugnachrichten-Tutorial.

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Ist schlimm,dass man dir alles vor machen muss.
    key = 255.
    Ist "HouseInfo" überhaupt so groß,dass man als Index 255 verwenden kann ? Ich nehme an nicht.
    Denn du kannst ja mal irgendwo probieren folgendes zu machen:
    HouseInfo[255][hRent] = 24;
    // array index out of bounds



    Du hast in deinem PayDay() folgende Zeile:
    new key = PlayerInfo[playerid][pPhousekey];
    Vielleicht liegt das Problem hier.


    Könnte aber auch an folgende Abfrage liegen:
    if(PlayerInfo[playerid][pPhousekey] != 255 || PlayerInfo[playerid][pPbiskey] != 255)
    Ich weiss nicht wie es bei dir funktionieren soll,eventuell musst du anstatt dem || ODER auch einfach nur && UND machen.
    Gut möglich das der 2. Teil einfach nur raus muss aus der Abfrage, " PlayerInfo[playerid][pPbiskey] != 255" da er nicht direkt in Beziehung zu "key" steht.
    Denn selbst wenn "key" 255 ist ( "PlayerInfo[playerid][pPhousekey]" ) , wird der Code ausgeführt, wenn "PlayerInfo[playerid][pPbiskey]" nicht 255 ist.
    Ich denke es liegt an Letzterem.

  • "Hiermit ernenne ich dich, Goldkiller, zum Wunderknaben." :)


    Hat an der zweiten Abfrage gelegen.
    Aber jetzt hab ich noch 1 Problem.


    Ich habe ein Tank-System im Script drin.
    Wenn man bei tEntranceX, tEntranceY, tEntranceZ ist soll man /fill machen können.
    Nur das geht nicht, ich bekomme immer angezeigt bei einer Tankstelle "Du bist an keiner Tankstelle."


    Keine Ahnung was das ist. -.-

  • Ist das dein ernst?
    Ohne den Code geht sowieso nichts. Ich hab dir jetzt erklärt, wie du den Fehler selber findest. Klatsch den Code voll mit den Debugnachrichten und versuch herauszufinden wo es nicht so funktioniert, wie du es möchtest.