Spieler loggt sich aus -> Server crasht

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 eine großes Problem!
    Immer wenn sich ein Spieler ausloggt dann crasht der Server!
    In den Server log steht auch nichts drin über den Crash...
    Brauche dringent hilfe...


    ich weiß jetzt auch nicht genau welchen code ich jetzt zur fehler behebung hier posten muss..
    wenn ihr villt wisst wie man das problem behebt sagt mir bitte bescheid.
    wichtig! ;(


    mfg


    /edit schaut euch das an: [ SUCHE ] Jemand der mir ein Problem behebt :)

  • Poste mal den Public OnPlayerDisconnect

    Wer ist der Mensch hinter der Uniform? Ist euch das bekannt?
    Es ist der selbe der noch eben in Zivil neben euch stand.
    Warum wird er gehasst und so selten respektiert?
    Warum ist er derjenige der seinen Hals für euch riskiert?
    Trägt der Bulle eine Weste, das hat er früher nie gemacht,
    die Zeiten haben sich geändert und jeder Dienst ist ein Kampf!
    Warum gibt’s das SEK und warum sind sie so brutal?
    Und wieso hat wieder einer mit seinem Leben bezahlt?

  • ok, OnPlayerDisconnect hätte ich mir denken können :D
    hier:


    Function OnPlayerDisconnect(playerid,reason)
    {
    NeedHelp[playerid]=0;
    GW_OnPlayerDisconnect(playerid);
    if(Desktop_Timer_Started[playerid] == 1) { KillTimer(Desktop_Timer[playerid]); }
    for(new i=0; i<MAX_Objekt; i++) // beim Offline gehen verschwinden die Sperren
    {
    DestroyObject(Sperre[playerid][i]);
    sperrespawned[i] = 0;
    Sperre[playerid][i] = 0;
    #if defined Aktiv_3DText
    Delete3DTextLabel(SperreLabel[playerid][i]);
    #endif
    }
    if(supmobil[playerid] != 0) DestroyVehicle(supmobil[playerid]);
    /*
    new namestr[100], spname[MAX_PLAYER_NAME];
    GetPlayerName(playerid, spname, sizeof(spname));
    format(namestr, sizeof(namestr), "Spieler ~r~~h~~h~%s~w~,", spname);
    TextDrawSetString(TdSpielerName, namestr);


    new msgstr[255];
    format(msgstr, sizeof(msgstr), "hat den Server verlassen.");
    TextDrawSetString(TdNachricht, msgstr);
    ShowDiscInfo();
    SetTimer("HideDiscInfo", TIME_to_HIDE, false);
    */
    /* new spname[MAX_PLAYER_NAME];
    GetPlayerName(playerid, spname, sizeof(spname));
    new namestr[100];
    format(namestr, sizeof(namestr), "Spieler ~r~~h~~h~%s~w~,", spname);
    TextDrawSetString(TdSpielerName, namestr);
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(PlayerInfo[i][pMeldung] == 1)
    {
    if(reason == 0)
    {
    format(ALLSTRING, sizeof(ALLSTRING), "%s hat den Server verlassen (Timeout).", spname);
    }
    else if(reason == 1)
    {
    format(ALLSTRING, sizeof(ALLSTRING), "%s hat den Server verlassen.", spname);
    }
    else if(reason == 2)
    {
    format(ALLSTRING, sizeof(ALLSTRING), "%s hat den Server verlassen (Exe-Crash).", spname);
    }
    SendClientMessage(i, COLOR_LIGHTGREEN, ALLSTRING);
    }
    }
    new msgstr[255];
    format(msgstr, sizeof(msgstr), "hat den Server verlassen.");
    FrakMatsHolding[playerid] = 0;
    TextDrawSetString(TdNachricht, msgstr);
    ShowDiscInfo();
    SetTimer("HideDiscInfo", TIME_to_HIDE, false);
    if(Maske[playerid] == 1)
    {
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    ShowPlayerNameTagForPlayer(i, playerid, 1);
    }
    }*/


    DeletePVar(playerid,"Spawned");
    if(ReportCall[playerid] != 999)
    {
    new sendername[MAX_PLAYER_NAME], string[80];
    GetPlayerName(playerid, sendername, sizeof(sendername));
    format(string, sizeof(string), "[REPORT-SYSTEM] %s hat den Server verlassen! /report geschlossen", sendername);
    SendClientMessage(playerid, COLOR_LIGHTGREEN,string);
    ReportCall[playerid] = 999;
    }
    // new spname[MAX_PLAYER_NAME];
    // GetPlayerName(playerid, spname, sizeof(spname));


    /* new namestr[100];
    format(namestr, sizeof(namestr), "Spieler ~r~~h~~h~%s~w~,", spname);
    TextDrawSetString(TdSpielerName, namestr);


    new msgstr[255];
    format(msgstr, sizeof(msgstr), "hat den Server verlassen.");
    TextDrawSetString(TdNachricht, msgstr);
    ShowDiscInfo();
    SetTimer("HideDiscInfo", TIME_to_HIDE, false);
    if(Maske[playerid] == 1)
    {
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    ShowPlayerNameTagForPlayer(i, playerid, 1);
    }
    }*/
    PlayerInfo[playerid][pAdjustable] = 1;
    if(IsPlayerNPC(playerid))
    {
    ConnectNPC("NeuerBot", "NeuerBot");
    }
    if(AdminDuty[playerid] == 1)
    {
    Delete3DTextLabel(Admin[playerid]);
    Delete3DTextLabel(Supermod[playerid]);
    Delete3DTextLabel(Mod[playerid]);
    Delete3DTextLabel(Supporter[playerid]);
    SetPlayerColor(playerid,TEAM_HIT_COLOR);
    AdminDuty[playerid] = 0;
    }
    if(IsPlayerNPC(playerid))
    {
    ConnectNPC("Busbot1", "Busbot1");
    }
    if(BlindFold[playerid] == 1)
    {
    BlindFold[playerid] = 0;
    }
    if(Noobi[playerid] == 1)
    {
    Delete3DTextLabel(Noob[playerid]);
    Noobi[playerid] = 0;
    }
    if(PlayerInfo[playerid][pMauled] == 1)
    {
    PlayerInfo[playerid][pMauled] = 0;
    }
    if(PlayerInfo[playerid][pMember] == 24 || PlayerInfo[playerid][pLeader] == 24 && BlitzerErstellt[playerid] == 1)
    {
    RemoveBlitzer(playerid);
    }
    if(PlayerTied[playerid] == 1)
    {
    PlayerInfo[playerid][pGangJailed] = 1;
    PlayerTied[playerid] = 0;
    }
    if(IsTowTrucker[playerid] == 1)
    {
    IsTowTrucker[playerid] = 0;
    TowTruckers--;
    }
    new sendername[MAX_PLAYER_NAME];
    new string[200];
    GetPlayerName(playerid,sendername,sizeof(sendername));
    OnPlayerCarUpdate(playerid);
    MoneySpam[playerid] = 0;
    DestroyObject(sSperre[playerid][0]);
    DestroyObject(sSperre[playerid][1]);
    DestroyObject(sSperre[playerid][2]);
    DestroyObject(sSperre[playerid][3]);
    DestroyObject(sSperre[playerid][4]);
    Sperrebit[playerid]=0;
    // Pylonenbit[playerid]=0;
    // Barrierenbit[playerid]=0;
    if(reason == 1)
    {
    if(PlayerCuffed[playerid] >= 1)
    {
    OfflineFlucht[playerid] = 1;
    format(string,sizeof(string),"Warnung %s ist Gefesselt Offline gegangen!(evtl. Offline-Flucht))",sendername);
    ABroadCast(COLOR_YELLOW,string,1);
    //mepmöp
    }
    }
    if(reason == 0)
    {
    if(PlayerCuffed[playerid] >= 1)
    {
    //OfflineFlucht[playerid] = 2;
    format(string,sizeof(string),"Warnung %s hatte gefesselt einen Exe-Crash! Er wird nicht ins Auto-Jail kommen.",sendername);
    ABroadCast(COLOR_YELLOW,string,1);
    //mepmöp
    }
    }
    /*switch(reason)
    {
    case 0://time
    {


    }
    case 1://discon
    {
    if(PlayerCuffed[playerid] >= 1)
    {
    OfflineFlucht[playerid] = 1;
    format(string,sizeof(string),"Warnung %s ist Gefesselt Offline gegangen!(Offline-Flucht))",sendername);
    ABroadCast(COLOR_YELLOW,string,1);
    //mepmöp
    }
    }
    case 2://kick
    {



    }
    }*/
    gActivePlayers[playerid]--;
    numplayers--;
    PlayerInfo[playerid][pAdjustable] = 1;
    PlayerUpdate(playerid);
    new playerIP[16];
    GetPlayerIp(playerid,playerIP,sizeof(playerIP));
    GetPlayerName(playerid,sendername,sizeof(sendername));
    format(string,sizeof(string),"%s war nun %d Minuten online! (ID: %d | IP: %s)",sendername,PlayerInfo[playerid][pMinutesSinceLogin],playerid,playerIP);
    Log("Online.txt",string);


    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(IsPlayerConnected(i))
    {
    if(TaxiAccepted[i] < 999)
    {
    if(TaxiAccepted[i] == playerid)
    {
    TaxiAccepted[i] = 999;
    GameTextForPlayer(i, "~w~Kunde~n~~r~Hat das Spiel Verlassen", 5000, 1);
    TaxiCallTime[i] = 0;
    DisablePlayerCheckpoint(i);
    }
    }
    else if(BusAccepted[i] < 999)
    {
    if(BusAccepted[i] == playerid)
    {
    BusAccepted[i] = 999;
    GameTextForPlayer(i, "~w~Kunde~n~~r~Hat Spiel Verlassen", 5000, 1);
    BusCallTime[i] = 0;
    DisablePlayerCheckpoint(i);
    }
    }
    }
    }



    /* if(ReportCall[playerid] != 999)
    {
    new sendername[MAX_PLAYER_NAME], string[80];
    GetPlayerName(playerid, sendername, sizeof(sendername));
    format(string, sizeof(string), "[REPORT-SYSTEM] %s Hat den Server verlassen! /report geschlossen", sendername);
    SendClientMessage(playerid, COLOR_LIGHTGREEN,string);
    ReportCall[playerid] = 999;
    }*/
    if(GettingCK[playerid] < 999)
    {
    if(IsPlayerConnected(GettingCK[playerid]))
    {
    SendClientMessage(GettingCK[playerid], COLOR_YELLOW, "Dein Abschuss hat den Server verlassen, versuch es später nochmal.");
    OnCK[GettingCK[playerid]] = 999;
    }
    }
    if(TransportCost[playerid] > 0 && TransportDriver[playerid] < 999)
    {
    if(IsPlayerConnected(TransportDriver[playerid]))
    {
    TransportMoney[TransportDriver[playerid]] += TransportCost[playerid];
    TransportTime[TransportDriver[playerid]] = 0;
    TransportCost[TransportDriver[playerid]] = 0;
    format(string, sizeof(string), "~w~Kunde ist ausgestiegen~n~~g~Verdienst: $%d",TransportCost[playerid]);
    GameTextForPlayer(TransportDriver[playerid], string, 5000, 1);
    }
    }
    if(GotHit[playerid] > 0)
    {
    if(GetChased[playerid] < 999)
    {
    if(IsPlayerConnected(GetChased[playerid]))
    {
    SendClientMessage(GetChased[playerid], COLOR_YELLOW, "Das Opfer hat WCR verlassen!");
    GoChase[GetChased[playerid]] = 999;
    }
    }
    }
    if(PlayerPaintballing[playerid] != 0)
    {
    PaintballPlayers --;
    }
    if(PlayerKarting[playerid] > 0 && PlayerInKart[playerid] > 0)
    {
    KartingPlayers --;
    }
    if(PlayersChannel[playerid] < 999)
    {
    IRCInfo[PlayersChannel[playerid]][iPlayers] -= 1;
    }
    if(HireCar[playerid] != 299)
    {
    gLastDriver[HireCar[playerid]] = 300;
    gCarLock[HireCar[playerid]] = 0;
    UnLockCar(HireCar[playerid]);
    }
    if (gLastCar[playerid] > 0)
    {
    gLastDriver[gLastCar[playerid]] = 300;
    if(PlayerInfo[playerid][pPhousekey] != gLastCar[playerid]-1)
    {
    gCarLock[gLastCar[playerid]] = 0;
    UnLockCar(gLastCar[playerid]);
    }
    }
    if(PlayerBoxing[playerid] > 0)
    {
    if(Boxer1 == playerid)
    {
    if(IsPlayerConnected(Boxer2))
    {
    PlayerBoxing[Boxer2] = 0;
    SetPlayerPos(Boxer2, 765.8433,3.2924,1000.7186);
    SetPlayerInterior(Boxer2, 5);
    GameTextForPlayer(Boxer2, "~r~Kampf unterbrochen", 5000, 1);
    }
    }
    else if(Boxer2 == playerid)
    {
    if(IsPlayerConnected(Boxer1))
    {
    PlayerBoxing[Boxer1] = 0;
    SetPlayerPos(Boxer1, 765.8433,3.2924,1000.7186);
    SetPlayerInterior(Boxer1, 5);
    GameTextForPlayer(Boxer1, "~r~Kampf unterbrochen", 5000, 1);
    }
    }
    InRing = 0;
    RoundStarted = 0;
    Boxer1 = 255;
    Boxer2 = 255;
    TBoxer = 255;
    }
    if(TransportDuty[playerid] == 1)
    {
    TaxiDrivers -= 1;
    }
    else if(TransportDuty[playerid] == 2)
    {
    BusDrivers -= 1;
    }
    if(IsPlayerInFrac(playerid, 4))
    {
    if(JobDuty[playerid] == 1)
    {
    Medics -= 1;
    }
    }
    else if(PlayerInfo[playerid][pLeader] == 24 || PlayerInfo[playerid][pMember] == 24)
    {
    if(JobDuty[playerid] == 1) { Mechanics -= 1; }
    }
    if (PlayerInfo[playerid][pRoadblock] != 0)
    {
    RemoveRoadblock(playerid);
    }


    return 1;
    }


    bitte helft mir bin echt am verzweifeln! :(



    /edit: text
    /edit²: text

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen

  • Man kann diese durch eine vorher definierte Funktion ersetzen.


    In diesem Fall müsstest du nur Function blabla verwenden.


    Bei einem neuen Public musst du


    forward blabla
    public blabla v


    verwenden, hier sind zwei Funktionen enthalten "Function" = Forward und Public :D


    Der kann auch Crashen wenn er keinen Zugriff auf Dateien hat, schau ob du Online.txt im Ordner hast.

  • [17:54:19] [debug] Run time error 4: "Array index out of bounds"
    [17:54:19] [debug] Accessing element at index 65535 past array upper bound 499
    [17:54:19] [debug] AMX backtrace:
    [17:54:19] [debug] #0 00020834 in public OnPlayerDeath () from script.amx
    hmmm und jetzt? :D


    Jetzt wissen wir schonmal, dass das Problem mit einem Array zu tun hat, welcher einen zu hohen Index verwendet.
    Eigentlich müsste in der server log auch noch eine Zeile des Scripts mit bei stehen. Steht da zufällig eine? Und wenn ja, wie heißt die Zeile im Script?

  • Jetzt wissen wir schonmal, dass das Problem mit einem Array zu tun hat, welcher einen zu hohen Index verwendet.
    Eigentlich müsste in der server log auch noch eine Zeile des Scripts mit bei stehen. Steht da zufällig eine? Und wenn ja, wie heißt die Zeile im Script?


    nein sonst stand da nichts....
    und jetzt klappt das mit dem crashdetector irgendwie wieder nicht :/ das zeigt nichts in den logs an....
    kannste villt per tv helfen?