Crashdetect meldet Fehler in Log

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
  • Vom Haupttimer:


    forward HauptTimer();


    public HauptTimer()
    {
    TextDrawSetString(Fight, "Gangfight:~n~_~n~_~n~_~n~_~n~_");
    UhrzeitZeiger();
    for(new i=1;i<MAX_BIZES;i++)
    {
    UpdateBizText(i);
    }
    for(new i=1;i<MAX_HOUSES;i++)
    {
    UpdateHouseText(i);
    }
    for(new i=1;i<MAX_TANKEN;i++)
    {
    UpdateTankeText(i);
    }
    for(new i=1;i<MAX_APLATZ;i++)
    {
    UpdateAngelText(i);
    }
    automsg ++;
    if(automsg == 600)
    {
    SendClientMessageToAll(COLOR_YELLOW, "|______________ Live your Dream ______________|");
    SendClientMessageToAll(COLOR_WHITE, "Du möchtest dem Server behilflich sein?");
    SendClientMessageToAll(COLOR_WHITE, "Dann kaufe dir den Donator Rang!");
    SendClientMessageToAll(COLOR_WHITE, "Dieser ermöglicht dir einige Bonusse!");
    SendClientMessageToAll(COLOR_WHITE, "Weitere Informationen im Forum www.LyD-Roleplay.de");
    }
    else if(automsg == 1200)
    {
    SendClientMessageToAll(COLOR_YELLOW, "|______________ Live your Dream ______________|");
    SendClientMessageToAll(COLOR_WHITE, "Du brauchst Hilfe oder hast Probleme?");
    SendClientMessageToAll(COLOR_WHITE, "Dann verwende /sup. Du kannst mit allen");
    SendClientMessageToAll(COLOR_WHITE, "Spielern reden indem du /gc verwendest.");
    SendClientMessageToAll(COLOR_WHITE, "Durch /liste siehst du eine Liste der");
    SendClientMessageToAll(COLOR_WHITE, "Fraktionen o.ä und welche Spieler davon");
    SendClientMessageToAll(COLOR_WHITE, "Online sind. Benutze /help für andere Befehle.");
    }
    else if(automsg == 1800)
    {
    SendClientMessageToAll(COLOR_YELLOW, "|______________ Live your Dream ______________|");
    SendClientMessageToAll(COLOR_WHITE, "Wir besitzen auch ein Forum, dieses findest");
    SendClientMessageToAll(COLOR_WHITE, "Du unter folgender URL: www.LyD-Roleplay.de!");
    SendClientMessageToAll(COLOR_WHITE, "Dort kannst du dich dann für Fraktionen o.ä bewerben.");
    SendClientMessageToAll(COLOR_WHITE, "Unsere Teamspeak IP lautet: 88.198.8.45:5555");
    automsg = 0;
    }
    UpdateInfos();
    IntAndVwWFix();
    OnPlayerTachoShowHide();
    OnUpdateUhr();
    OnPlayerUpdateTacho();
    new Float:x, Float:y, Float:z;
    for(new i=0;i<GetMaxPlayers();i++)
    {
    if(IsPlayerConnected(i) && gPlayerLogged[i])
    {
    GetPlayerPos(i, x, y, z);
    if(Spieler[i][pWanteds] < 1)
    {
    Update3DTextLabelText(Spieler[i][pWantedLabel], COLOR_RED, " ");
    Spieler[i][pWanteds] = 0;
    PlayerTextDrawHide(i, Gesucht[i]);
    }
    if(IsAFK[i] == 1)
    {
    Update3DTextLabelText(Spieler[i][pAFKLabel], COLOR_PURPLE, "Away from Keyboard");
    }
    else if(IsAFK[i] == 0)
    {
    Update3DTextLabelText(Spieler[i][pAFKLabel], COLOR_PURPLE, " ");
    }


    OnPlayerTot(i);
    OnPlayerJail(i);
    OnPlayerMute(i);
    if(!IsAFightFaction(GetPlayerFaction(i)))
    {
    for(new fs;fs<sizeof(FightSystem);fs++)
    {
    TextDrawHideForPlayer(i, Fight);
    TextDrawHideForPlayer(i, FightUnderline);
    TextDrawHideForPlayer(i, FightUnderline2);
    TextDrawHideForPlayer(i, FightSystem[fs][fsWinFaction]);
    TextDrawHideForPlayer(i, FightSystem[fs][fsLoseFaction]);
    TextDrawHideForPlayer(i, FightSystem[fs][fsWinKills]);
    TextDrawHideForPlayer(i, FightSystem[fs][fsLoseKills]);
    TextDrawHideForPlayer(i, FightSystem[fs][fsTime]);
    }
    }
    if(Spieler[i][pWanteds] > 0)
    {
    Update3DTextLabelText(Spieler[i][pWantedLabel], COLOR_RED, "Gesucht");
    new str[12];
    format(str, sizeof(str), "~y~] ~w~%i", Spieler[i][pWanteds]);
    PlayerTextDrawSetString(i, Gesucht[i], str);
    PlayerTextDrawShow(i, Gesucht[i]);
    }
    if(IsPlayerSpectating[i] == 1)
    {
    SetPlayerInterior(i, GetPlayerInterior(SpectatedPlayer[i]));
    SetPlayerVirtualWorld(i, GetPlayerVirtualWorld(SpectatedPlayer[i]));
    new SpecStr[155];
    new weaponStr[32];
    GetWeaponName(GetPlayerWeapon(SpectatedPlayer[i]), weaponStr, 32);
    new Float:pHealth, Float:pArmor;
    GetPlayerHealth(SpectatedPlayer[i], pHealth);
    GetPlayerArmour(SpectatedPlayer[i], pArmor);
    format(SpecStr, sizeof(SpecStr), "~y~Name: ~w~%s~n~~y~Leben:~w~ %.f~n~~y~Ruestung:~w~ %.f~n~~y~Level:~w~ %d~n~~y~Waffe: ~w~%s", GetName(SpectatedPlayer[i]), pHealth, pArmor, Spieler[SpectatedPlayer[i]][pLevel], weaponStr);
    PlayerTextDrawSetString(i, Spectate[1][i], SpecStr);
    PlayerTextDrawShow(i, Spectate[0][i]);
    PlayerTextDrawShow(i, Spectate[1][i]);
    PlayerTextDrawShow(i, Spectate[2][i]);
    PlayerTextDrawShow(i, Spectate[3][i]);
    }
    else
    {
    PlayerTextDrawHide(i, Spectate[0][i]);
    PlayerTextDrawHide(i, Spectate[1][i]);
    PlayerTextDrawHide(i, Spectate[2][i]);
    PlayerTextDrawHide(i, Spectate[3][i]);
    }
    }
    }
    for(new vehicleid=0;vehicleid<MAX_VEHICLES;vehicleid++)
    {
    for(new i=0;i<sizeof(drogen);i++){
    if(vehicleid == drogen[i]) {
    gGas[drogen[i]] = GetMaxTank(vehicleid);
    gMaxGas[drogen[i]] = GetMaxTank(vehicleid);
    if(!IsVehicleOccupied(drogen[i]))
    {
    UnLockCar(drogen[i]);
    }
    }
    }
    for(new i=0;i<sizeof(wdealer);i++){
    if(vehicleid == wdealer[i]) {
    gGas[wdealer[i]] = GetMaxTank(vehicleid);
    gMaxGas[wdealer[i]] = GetMaxTank(vehicleid);
    if(!IsVehicleOccupied(wdealer[i]))
    {
    UnLockCar(wdealer[i]);
    }
    }
    }
    for(new i=0;i<sizeof(combines);i++){
    if(vehicleid == combines[i]) {
    gGas[combines[i]] = GetMaxTank(vehicleid);
    gMaxGas[combines[i]] = GetMaxTank(vehicleid);
    if(!IsVehicleOccupied(combines[i]))
    {
    UnLockCar(combines[i]);
    }
    }
    }
    for(new i=0;i<sizeof(bus);i++){
    if(vehicleid == bus[i]) {
    gGas[bus[i]] = GetMaxTank(vehicleid);
    gMaxGas[bus[i]] = GetMaxTank(vehicleid);
    if(!IsVehicleOccupied(bus[i]))
    {
    UnLockCar(bus[i]);
    }
    }
    }
    for(new i=0;i<sizeof(flug);i++){
    if(vehicleid == flug[i]) {
    gGas[flug[i]] = GetMaxTank(vehicleid);
    gMaxGas[flug[i]] = GetMaxTank(vehicleid);
    if(!IsVehicleOccupied(flug[i]))
    {
    UnLockCar(flug[i]);
    }
    }
    }
    for(new i=0;i<sizeof(truck);i++){
    if(vehicleid == truck[i]) {
    gGas[truck[i]] = GetMaxTank(vehicleid);
    gMaxGas[truck[i]] = GetMaxTank(vehicleid);
    if(!IsVehicleOccupied(truck[i]))
    {
    UnLockCar(truck[i]);
    }
    }
    }
    }
    return 1;
    }

    Dies liegt bei OnGameModeInit

    SetTimer("HauptTimer", 1000, 1);



    Vom OnPlayerStateChange:


    Das passte hier nicht mehr hinein.
    Ich habe es in Pastebin eingefügt http://pastebin.com/H1fytzSJ

  • Da dein Code recht strukturiert ist, kommentierst Du mal die ganze HauptTimer Funktion aus. Nun fügst Du Stück für Stück wieder ein und testest es - so kommst Du mit wenig Mühe recht schnell zum Ergebnis - Du kannst zuerst auch schauen ob es in der Player-For Schleife liegt (50% auskommentieren und schauen ob es in den Systemen oder der Player-For Schleife liegt)

  • Da dein Code recht strukturiert ist, kommentierst Du mal die ganze HauptTimer Funktion aus. Nun fügst Du Stück für Stück wieder ein und testest es - so kommst Du mit wenig Mühe recht schnell zum Ergebnis - Du kannst zuerst auch schauen ob es in der Player-For Schleife liegt (50% auskommentieren und schauen ob es in den Systemen oder der Player-For Schleife liegt)


    Was für Folgen würde eigentlich so ein Fehler auslösen?
    Eventuell auf Server laggs?

  • Es geht darum den Fehler zu lokalisieren, sprich wo tritt der Fehler im Callback (OnPlayerStateChange) und der Funktion (HauptTimer) auf. Sollte alles auskommentiert sein, sollte in diesen 2 Funktionen nichts laufen, sprich crashdetect sollte keine Fehler mehr anzeigen (Eventuell gibt es an anderer Stelle, aber das würd ich zuerst mal ignorieren und als Anzeichen nehmen/im Hinterkopf behalten). Nun aktivierst Du jedes Codestück wieder, sprich Du aktivierst


    TextDrawSetString(Fight, "Gangfight:~n~_~n~_~n~_~n~_~n~_");
    dann
    UhrzeitZeiger();


    Und so weiter. Nun kommst Du an eine Stelle, wo crashdetect plötzlich wieder Fehler ausspuckt und Du merkst, dort läuft was schief, dann kannst Du dieses Codestück genauer untersuchen. Zu deiner Frage - die Textdraws, Tankanzeige, Automessages etc werden nicht erscheinen, aber Du willst ja den Fehler finden, nachdem Du diesen gefunden hast, kannst Du ihn beheben und alles wieder aktivieren


    Gruss

  • Hallo, ich habe die zwei genannten Sachen von dir mal entfernt.
    Es werden keine Fehler mehr in den Logs angezeigt.
    Er zeigt nur noch das als Fehler an:


    [19:17:54] [debug] AMX backtrace:
    [19:17:54] [debug] #0 000d2e30 in public OnPlayerStateChange () from neu.amx
    [19:17:55] [debug] Run time error 4: "Array index out of bounds"
    [19:17:55] [debug] Accessing element at index 555 past array upper bound 4
    [19:17:55] [debug] AMX backtrace:
    [19:17:55] [debug] #0 000d2e30 in pu

    Einmal editiert, zuletzt von SA:MP () aus folgendem Grund: Text bearbeitet