Payday Bug - Bitte hilfe.

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 habe einen kleinen (großen) Payday bug.
    undzwar sollte man jede volle stunde einen PayDay bekommen (GF-Like) und ja


    hier ist der AUsschnitt, nix passiert auch nicht Lotto oder sowas..


    ich hoffe ihr könnt mir helfen.



    public SyncTime()
    {
    new string[128];
    new tmphour;
    new tmpminute;
    new tmpsecond;
    gettime(tmphour, tmpminute, tmpsecond);
    if ((tmphour > ghour) || (tmphour == 0 && ghour == 23))
    {
    format(string, sizeof(string), "SERVER: Es ist jetzt %d:00 Uhr",tmphour);
    BroadCast(COLOR_WHITE,string);
    ghour = tmphour;
    PayDay();
    if (realtime)
    {
    SetWorldTime(tmphour+1);
    }
    format(string, sizeof(string), "~y~Lotto Zeit! ~n~~w~Waehle deine Nummer mit ~n~~p~/lotto 1-80 ~g~($100) ~n~~r~Preis: ~g~$%d", Jackpot);
    if(TD3D == 1)
    {
    KillTimer(HideTD4Timer);
    TextDrawHideForAll(TD3);
    TextDrawSetString(TD3, string);
    TextDrawShowForAll(TD3);
    HideTD4Timer = SetTimer("HideTD4", 8500, false);
    }
    else
    {
    TextDrawSetString(TD3, string);
    TextDrawShowForAll(TD3);
    TD3D = 1;
    HideTD4Timer = SetTimer("HideTD4", 8500, false);
    }
    SetTimer("StartLotto",20000,false);
    }
    }

  • Debug einfach mal deinen Code, um ermitteln zu können bis wohin der Code kommt & ob der Code überhaupt wie erwünscht aufgerufen wird. Debuggen kann man auf mehrere Arten - ich empfehle es via Konsolenausgabe (print & printf). Falls du nicht weißt, wie du etwas Debuggen kannst - hier kommt ein kleines, einfaches Beispiel: » Beispiel «. Falls du dies immer noch nicht verstanden hast, und ein besseres Beispiel o. genauere Erklärung möchtest - sende mir eine Nachricht mit dem Betreff: 'Debugerklärung'.


    Dein Code mit Inspizierung via Konsolenausgabe:
    pubic SyncTime()
    {
    print("[DEBUG] SyncTime() - 1");
    new string[128];
    new tmphour;
    new tmpminute;
    new tmpsecond;
    gettime(tmphour, tmpminute, tmpsecond);
    print("[DEBUG] SyncTime() - 2");
    if ((tmphour > ghour) || (tmphour == 0 && ghour == 23))
    {
    print("[DEBUG] SyncTime() - 3");
    format(string, sizeof(string), "SERVER: Es ist jetzt %d:00 Uhr",tmphour);
    BroadCast(COLOR_WHITE,string);
    ghour = tmphour;
    print("[DEBUG] SyncTime() - 4");
    PayDay();
    print("[DEBUG] SyncTime() - 5");
    if (realtime)
    {
    print("[DEBUG] SyncTime() - 6");
    SetWorldTime(tmphour+1);
    }
    print("[DEBUG] SyncTime() - 7");
    format(string, sizeof(string), "~y~Lotto Zeit! ~n~~w~Waehle deine Nummer mit ~n~~p~/lotto 1-80 ~g~($100) ~n~~r~Preis: ~g~$%d", Jackpot);
    if(TD3D == 1)
    {
    print("[DEBUG] SyncTime() - 8");
    KillTimer(HideTD4Timer);
    TextDrawHideForAll(TD3);
    TextDrawSetString(TD3, string);
    TextDrawShowForAll(TD3);
    HideTD4Timer = SetTimer("HideTD4", 8500, false);
    }
    else
    {
    print("[DEBUG] SyncTime() - 9");
    TextDrawSetString(TD3, string);
    TextDrawShowForAll(TD3);
    TD3D = 1;
    HideTD4Timer = SetTimer("HideTD4", 8500, false);
    }
    print("[DEBUG] SyncTime() - 10");
    SetTimer("StartLotto",20000,false);
    }
    }


    Advertising has us chasing cars and clothes, working jobs we hate so we can buy shit we don’t need.
    – Tyler Durden


    Sobald Werbung im Spiel ist, bist du, die Nutzerin, der Nutzer, das Produkt.


  • Ich habe vergessen zu erwähnen: Falls du dann nicht weiter kommst, bitte die Konsolenausgabe (meist aus der serverlog(.txt) Datei im Verzeichnis von der samp-server(.exe) Datei) hier posten.


    Advertising has us chasing cars and clothes, working jobs we hate so we can buy shit we don’t need.
    – Tyler Durden


    Sobald Werbung im Spiel ist, bist du, die Nutzerin, der Nutzer, das Produkt.


  • Durchsuch mal das Script nach SyncTime - müsste irgendwo eingebunden sein (warscheinlich in einem Timer).


    Advertising has us chasing cars and clothes, working jobs we hate so we can buy shit we don’t need.
    – Tyler Durden


    Sobald Werbung im Spiel ist, bist du, die Nutzerin, der Nutzer, das Produkt.



  • Zitat

    Durchsuch mal das Script nach SyncTime - müsste irgendwo eingebunden sein (warscheinlich in einem Timer).

    Zeig uns die Zeilen wo SyncTime eingebunden ist. Wenn nirgends, dann musst du einen Timer erstellen (Beispielsweise im Public OnGameModeInit ).


    Advertising has us chasing cars and clothes, working jobs we hate so we can buy shit we don’t need.
    – Tyler Durden


    Sobald Werbung im Spiel ist, bist du, die Nutzerin, der Nutzer, das Produkt.


  • Dann Debug doch auch die Funktion SyncUp - und schau ob diese jede Minute aufgerufen wird. Dazu wäre eine Wiedergabe das die Funktion bis zum Ende durchlief passend (return 1; o. return true;). Zusammengefasst:
    public SyncUp()
    {
    print("[DEBUG] SyncUp() Start");
    SyncTime();
    print("[DEBUG] SyncUp() Mitte");
    DollahScoreUpdate();
    print("[DEBUG] SyncUp() Ende");
    return true;
    }


    Advertising has us chasing cars and clothes, working jobs we hate so we can buy shit we don’t need.
    – Tyler Durden


    Sobald Werbung im Spiel ist, bist du, die Nutzerin, der Nutzer, das Produkt.


  • Letzte Chance:
    print("[DEBUG] SetTimer("SyncUp").. Start");
    synctimer = SetTimer("SyncUp", 60000, 1);
    print("[DEBUG] SetTimer("SyncUp").. Ende");


    Advertising has us chasing cars and clothes, working jobs we hate so we can buy shit we don’t need.
    – Tyler Durden


    Sobald Werbung im Spiel ist, bist du, die Nutzerin, der Nutzer, das Produkt.


  • Das heißt, du musst OnGameModeInit inspizieren, da dieser Public nicht komplett aufgerufen wird. Dies ist doch eigentlich logisch, zeig bitte ein wenig Eigeninitiative. ;)


    Advertising has us chasing cars and clothes, working jobs we hate so we can buy shit we don’t need.
    – Tyler Durden


    Sobald Werbung im Spiel ist, bist du, die Nutzerin, der Nutzer, das Produkt.


  • jap ist mir schon klar hab auch schon nach ner abfrage gekuckt ob die das stoppen könnte aber mal sehen wo es stoppt..
    werde es dann hier reinschreiben wenn ich mehr weiss


    wie kann dieser kollege OnGameModeInit stoppen? und wie kann ich das anders machen?


    /*for(new i=0; i< MAX_VEHICLES; i++)
    {
    SetVehicleNumberPlate(copcar[i], "SAPD");
    SetVehicleNumberPlate(armycar[i], "Army");
    SetVehicleNumberPlate(ambulance[i], "SAMD");
    SetVehicleNumberPlate(signatracar[i], "Yakuza");
    SetVehicleNumberPlate(governcar[i], "Regierung");
    }

    Einmal editiert, zuletzt von Niko1561 () aus folgendem Grund: added

  • Wie der das macht? Ganz einfach - es wird eine Variable erstellt in der for-Schleife die den Namen 'i' trägt. Diese Variable ist gleich Null bei der Erstellung und läuft von 0 auf 2000 (MAX_VEHICLES) hoch. Doch die Variablen copcar, armycar, ambulance, signatracar und governcar sind sicher nicht mit einem Array (Größe) von 2000 ausgestattet. Somit werden die Variablen, die garnicht existieren gesetzt - dies lässt den Code abschmieren, manchmal sogar direkt den Server - ich hoffe du verstehst was ich meine ;) Einfach mal logisch überdenken was das Script eigentlich macht. Hier die Lösung, damit es nichtmehr abschmiert!


    for(new i=0;i<sizeof copcar;i++)
    {
    SetVehicleNumberPlate(copcar[i], "SAPD");
    SetVehicleToRespawn(copcar[i]);
    }
    for(new i=0;i<sizeof armycar;i++)
    {
    SetVehicleNumberPlate(armycar[i], "Army");
    SetVehicleToRespawn(armycar[i]);
    }
    for(new i=0;i<sizeof ambulance;i++)
    {
    SetVehicleNumberPlate(ambulance[i], "SAMD");
    SetVehicleToRespawn(ambulance[i]);
    }
    for(new i=0;i<sizeof signatracar;i++)
    {
    SetVehicleNumberPlate(signatracar[i], "Yakuza");
    SetVehicleToRespawn(signatracar[i]);
    }
    for(new i=0;i<sizeof governcar;i++)
    {
    SetVehicleNumberPlate(governcar[i], "Regierung");
    SetVehicleToRespawn(governcar[i]);
    }


    Advertising has us chasing cars and clothes, working jobs we hate so we can buy shit we don’t need.
    – Tyler Durden


    Sobald Werbung im Spiel ist, bist du, die Nutzerin, der Nutzer, das Produkt.


  • Danke, :)
    jedoch ein problem besteht immer noch. Alles wird wieder aus geführt auch SyncTime aber dieser (entscheidene Teil) wird nicht mehr ausgeführt:
    if ((tmphour > ghour) || (tmphour == 0 && ghour == 23))
    {
    print("1");
    format(string, sizeof(string), "SERVER: Es ist jetzt %d:00 Uhr",tmphour);
    BroadCast(COLOR_WHITE,string);
    ghour = tmphour;
    PayDay();
    print("2");
    if (realtime)
    {
    SetWorldTime(tmphour+1);
    print("3");
    }
    format(string, sizeof(string), "~y~Lotto Zeit! ~n~~w~Waehle deine Nummer mit ~n~~p~/lotto 1-80 ~g~($100) ~n~~r~Preis: ~g~$%d", Jackpot);
    if(TD3D == 1)
    {
    KillTimer(HideTD4Timer);
    TextDrawHideForAll(TD3);
    TextDrawSetString(TD3, string);
    TextDrawShowForAll(TD3);
    HideTD4Timer = SetTimer("HideTD4", 8500, false);
    print("4");
    }
    else
    {
    TextDrawSetString(TD3, string);
    TextDrawShowForAll(TD3);
    TD3D = 1;
    HideTD4Timer = SetTimer("HideTD4", 8500, false);
    print("5");
    }
    SetTimer("StartLotto",20000,false);
    print("6");
    }

  • Entweder entfernst du die Zeile, durch die der Code gestoppt wird:
    if ((tmphour > ghour) || (tmphour == 0 && ghour == 23))
    Da dies aber zu Problemen führen könnte, lieber erstmal Debuggen. (Über die If-Abfrage folgendes:)
    printf("[DEBUG] tmphour: %d | ghour: %d",tmphour,ghour);


    Advertising has us chasing cars and clothes, working jobs we hate so we can buy shit we don’t need.
    – Tyler Durden


    Sobald Werbung im Spiel ist, bist du, die Nutzerin, der Nutzer, das Produkt.


  • Der Timer wird doch alle 60 Sekunden aufgerufen, wenn du es so Debugst wie ich vorgeschlagen habe - brauchst du nur eine Minute ;)

    Zitat

    (Über die If-Abfrage folgendes:)


    Advertising has us chasing cars and clothes, working jobs we hate so we can buy shit we don’t need.
    – Tyler Durden


    Sobald Werbung im Spiel ist, bist du, die Nutzerin, der Nutzer, das Produkt.