Connecten aufeinmal nicht mehr möglich?

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
  • Guten Abend,
    ich habe ein kleines Problem..
    Sobald ich den Server starte, ist es nach ca. 2 Stunden allen Spielern nicht mehr möglich den Server zu betreten noch
    irgendwelche Befehle auszuführen. Wenn sich dann Spieler ausloggen, werden diese trotz dessen als eingelogt in der Liste angezeigt..
    So als würde alles hängen bleiben..

    Das Plugin Crashdetecte läuft auch schon bereits und meldet mehrmals NUR diesen Fehler:


    [18:02:09] [debug] Run time error 4: "Array index out of bounds"
    [18:02:09] [debug] Accessing element at negative index -400
    [18:02:09] [debug] AMX backtrace:
    [18:02:09] [debug] #0 000da0ec in public OnPlayerUpdateTacho () at C:\Users\Administrator\Desktop\ivn39dnw\neu12.pwn:7200
    [18:02:09] [debug] #1 00014754 in public HauptTimer () at C:\Users\Administrator\Desktop\ivn39dnw\neu12.pwn:1946


    Das ist die direkte Zeile 7200 wo der Fehler gemeldet wird:
    format(string, sizeof(string), "~b~%s~n~~n~~b~KM/H: ~w~%i~n~~b~Kraftstoff: ~w~%s~n~~b~Benzin: ~w~%d/%d L~n~~b~Zustand: ~w~%i~n~~b~Radio: ~w~%s", CarName[model-400], floatround(SpeedF), g_asKraftstoff[kraftstoff] , gGas[vehicleid], GetMaxTank(vehicleid), CarHealthIni, radios);


    Das ist die komplette Funktion:
    public OnPlayerUpdateTacho()
    {
    new
    radios[64],
    string[200],
    Float:CarHealth,
    Float:speed,
    Float:memory[3],
    kraftstoff,
    model,
    CarHealthIni,
    SpeedT,
    SpeedF,
    vehicleid;
    for(new i = 0 ; i < g_iMaxPlayers ; i++)
    {
    if(IsPlayerConnected(i))
    {
    vehicleid = GetPlayerVehicleID(i);
    if(vehicleid && IsPlayerInVehicle(i,vehicleid) ) {
    speed = GetVehicleSpeed_P(i);
    GetVehicleHealth(vehicleid, CarHealth);
    model = GetVehicleModel( vehicleid );
    CarHealth = CarHealth -250;
    CarHealth = CarHealth/10;
    CarHealth = CarHealth/75;
    CarHealth = CarHealth * 100;
    CarHealthIni = floatround(CarHealth, floatround_floor);
    if(CarHealthIni < 0){CarHealthIni = 0;}
    GetVehicleVelocity(vehicleid, memory[0], memory[1], memory[2]);
    SpeedT = floatround(speed)/2;
    SpeedF = (SpeedT*1000)/700;
    if(RadioSender[vehicleid] == 0){radios ="Kein Radio";}
    else if(RadioSender[vehicleid] == 1){radios ="1-Live";}
    else if(RadioSender[vehicleid] == 2){radios ="Technobase.FM";}
    else if(RadioSender[vehicleid] == 3){radios ="Hardbase.FM";}
    else if(RadioSender[vehicleid] == 4){radios ="I Love Radio";}
    else if(RadioSender[vehicleid] == 5){radios ="Breakz.us";}
    if(!IsAFahrrad(model))
    {
    kraftstoff = GetVehicleModelKraftstoff( model );
    format(string, sizeof(string), "~b~%s~n~~n~~b~KM/H: ~w~%i~n~~b~Kraftstoff: ~w~%s~n~~b~Benzin: ~w~%d/%d L~n~~b~Zustand: ~w~%i~n~~b~Radio: ~w~%s", CarName[model-400], floatround(SpeedF), g_asKraftstoff[kraftstoff] , gGas[vehicleid], GetMaxTank(vehicleid), CarHealthIni, radios);
    PlayerTextDrawSetString(i, TachoMessage[2][i], string);


    }
    else
    {
    format(string, sizeof(string), "~b~%s~n~~n~~b~KM/H: ~w~%i~n~~b~Benzin: ~w~-/- L~n~~b~Zustand: ~w~%i~n~~b~Radio: ~w~%s", CarName[model-400], floatround(SpeedF),CarHealthIni, radios);
    PlayerTextDrawSetString(i, TachoMessage[2][i], string);
    }
    if( SpeedF >= 210 ) {
    new
    t = gettime();
    if( t >= Spieler[i][punixSpeedhack] ) {
    format(string,sizeof(string),"[ACHTUNG] Spieler %s Speed-Warnung %dKm/h",GetName(i),SpeedF);
    SendAdminMessage(COLOR_LIGHTRED2,string);
    Spieler[i][punixSpeedhack] = t + 5; // Alle 5 Sekunden MAXIMAL die Nachricht senden
    }
    }
    }
    }
    }
    return 1;
    }



    Das ist die direkte Zeile 1946 wo der Fehler gemeldet wird:
    new Float:x, Float:y, Float:z;


    Die komplette Funktion davon:
    UpdateInfos();
    IntAndVwWFix();
    OnPlayerTachoShowHide();
    OnUpdateUhr();
    OnPlayerUpdateTacho();
    new Float:x, Float:y, Float:z;



    Ich bitte um Hilfe!!!

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

  • Also in der log steht es eigentlich schon
    Accessing element at negative index -400
    CarName[model-400]


    normalerweise kratzt der Server ab wenn negative zahlen an den array index zurück gegeben werden, also so kenne ich es :D aber nun gut
    das kommt daher zustande wenn deine modelid 0 ist 0-400 => -400

  • Ah ok..
    Was muss ich nun tun?
    Soll ich jetzt statt "CarName[model-400]" es in "CarName[model 0]" ändern, oder wie meinst du das?? 8|


    du kannst noch eine abfrage rein machen wenn model gleich null ist wird ganz einfach ein wert returnt
    jedoch würde ich an deiner stelle auf eine nummer sicher gehen und abfragen ob di emodelid nicht kleiner ist als 400 jedoch nicht gleich verwenden
    400-400 = 0 das bedeutet der erste name deiner array

  • du kannst noch eine abfrage rein machen wenn model gleich null ist wird ganz einfach ein wert returnt
    jedoch würde ich an deiner stelle auf eine nummer sicher gehen und abfragen ob di emodelid nicht kleiner ist als 400 jedoch nicht gleich verwenden
    400-400 = 0 das bedeutet der erste name deiner array



    Ich weiß leider noch immer nicht was ich tun soll und in wie fern du das meinst.
    Könntest du es nicht eventuell so wie du es meinst bearbeiten und hier drunter posten?

  • model = GetVehicleModel( vehicleid );
    if(model >= 400){


    }


    mach eine zusätzliche if abfrage das ist auch am einfachsten


    Ich habe Angst jetzt irgendetwas falsch zu machen.. :(
    Wie und wo soll ich es in meinem Fall jetzt einfügen?
    Oben beim ersten Beitrag habe ich die ganze Funktion vom Fehler hinzugefügt, das mit "public OnPlayerUpdateTacho()"


    Könntest du so wie du es meinst es da einbinden, damit ich es nur noch einfügen muss?
    Ich möchte bloß nichts falsch machen.. ?(

  • hier bitte


    public OnPlayerUpdateTacho()
    {
    new
    radios[64],
    string[200],
    Float:CarHealth,
    Float:speed,
    Float:memory[3],
    kraftstoff,
    model,
    CarHealthIni,
    SpeedT,
    SpeedF,
    vehicleid;
    for(new i = 0 ; i < g_iMaxPlayers ; i++)
    {
    if(IsPlayerConnected(i))
    {
    vehicleid = GetPlayerVehicleID(i);
    if(vehicleid && IsPlayerInVehicle(i,vehicleid) ) {
    speed = GetVehicleSpeed_P(i);
    GetVehicleHealth(vehicleid, CarHealth);
    model = GetVehicleModel( vehicleid );
    if(model >= 400){
    CarHealth = CarHealth -250;
    CarHealth = CarHealth/10;
    CarHealth = CarHealth/75;
    CarHealth = CarHealth * 100;
    CarHealthIni = floatround(CarHealth, floatround_floor);
    if(CarHealthIni < 0){CarHealthIni = 0;}
    GetVehicleVelocity(vehicleid, memory[0], memory[1], memory[2]);
    SpeedT = floatround(speed)/2;
    SpeedF = (SpeedT*1000)/700;
    if(RadioSender[vehicleid] == 0){radios ="Kein Radio";}
    else if(RadioSender[vehicleid] == 1){radios ="1-Live";}
    else if(RadioSender[vehicleid] == 2){radios ="Technobase.FM";}
    else if(RadioSender[vehicleid] == 3){radios ="Hardbase.FM";}
    else if(RadioSender[vehicleid] == 4){radios ="I Love Radio";}
    else if(RadioSender[vehicleid] == 5){radios ="Breakz.us";}
    if(!IsAFahrrad(model))
    {
    kraftstoff = GetVehicleModelKraftstoff( model );
    format(string, sizeof(string), "~b~%s~n~~n~~b~KM/H: ~w~%i~n~~b~Kraftstoff: ~w~%s~n~~b~Benzin: ~w~%d/%d L~n~~b~Zustand: ~w~%i~n~~b~Radio: ~w~%s", CarName[model-400], floatround(SpeedF), g_asKraftstoff[kraftstoff] , gGas[vehicleid], GetMaxTank(vehicleid), CarHealthIni, radios);
    PlayerTextDrawSetString(i, TachoMessage[2][i], string);


    }
    else
    {
    format(string, sizeof(string), "~b~%s~n~~n~~b~KM/H: ~w~%i~n~~b~Benzin: ~w~-/- L~n~~b~Zustand: ~w~%i~n~~b~Radio: ~w~%s", CarName[model-400], floatround(SpeedF),CarHealthIni, radios);
    PlayerTextDrawSetString(i, TachoMessage[2][i], string);
    }
    if( SpeedF >= 210 ) {
    new
    t = gettime();
    if( t >= Spieler[i][punixSpeedhack] ) {
    format(string,sizeof(string),"[ACHTUNG] Spieler %s Speed-Warnung %dKm/h",GetName(i),SpeedF);
    SendAdminMessage(COLOR_LIGHTRED2,string);
    Spieler[i][punixSpeedhack] = t + 5; // Alle 5 Sekunden MAXIMAL die Nachricht senden
    }
    }
    }
    }
    }
    }
    return 1;
    }

  • Vielen vielen Dank!
    Ich werde es direkt mal einspielen. :)


    Könnte durch diesen Fehler die ganzen Server Ausfälle passiert sein?


    Also ausfälle ja das ist mir selbst auch schonmal unter gekommen daher kenne ich das problem gut genug .
    Das ist auch nix anderes als bei diesem Problem von Logan hab ihn auch dort geholfen
    Array index out of bounds - Accessing element at negative index -1
    Man sollte halt aufpassen wenn es anzeichen gibt das man mit negativen Zahlen mit arrays arbeitet besser gesagt als index benutzt.


    Deine anzeichen sagen das selbe aus das der Server dadurch crasht, da keine Befehle gehen etc... .
    Wie schon gesagt kannst du das jetzt noch ein bissle länger im Auge behalten.