Abend.
Kaum ist der erste Fehler beseitigt, kommt auch schon der nächste & letzte Fehler, bei dem ich leider auch so gut wie keine Ahnung habe, woran es liegt.
In manchen Fällen, wenn ich den Server neustarte, kommen eine Reihe an Fehlermeldungen in der Server Konsole (MySQL-Debug):
[20:25:00] [debug] Run time error 8: "Heap underflow"
[20:25:00] [debug] Heap pointer (HEA) is 0x5569B0, heap bottom (HLW) is 0x819A0C
[20:25:00] [debug] AMX backtrace:
[20:25:00] [debug] #0 00000008 in public RefuelCheck () from script.amx
Die obere Meldung wird ununterbrochen geprintet, bis der Server gestoppt wird. Sobald das kommt, kann man auch keine Befehle mehr schreiben. Der Server ist quasi tot, läuft aber noch.
Da aber selbst Google kaum Ergebnisse zu dem Run time error 8 ausspuckt, wollte ich euch mal fragen, ob ihr eine Lösung hättet, wo der Fehler liegen könnte.
Der Public unten bewirkt lediglich, dass er überprüft, wie viel Treibstoff das Fahrzeug bereits getankt hat und das entsprechend bei dem Geschäft dieser Treibstoff abgerechnet wird.
Was vermutlich der Fehler sein könnte, wäre meiner Theorie nach, dass es an der Foreach Include liegen könnte. Oder an der Abfrage, ob der Spieler online ist. Sicher bin ich mir da allerdings nicht.
//OnGameModeInit
SetTimer("RefuelCheck", 500, true);
//Unten im Script
forward RefuelCheck();
public RefuelCheck()
{
static
string[128];
foreach (new i : Player)
{
if (!PlayerData[i][pLogged] || PlayerData[i][pRefill] == INVALID_VEHICLE_ID)
continue;
if (PlayerData[i][pRefill] != INVALID_VEHICLE_ID && PlayerData[i][pGasPump] != -1)
{
PlayerData[i][pRefillPrice]++;
CoreVehicles[PlayerData[i][pRefill]][vehFuel] ++;
PumpData[PlayerData[i][pGasPump]][pumpFuel] --;
if (PumpData[PlayerData[i][pGasPump]][pumpExists])
{
format(string, sizeof(string), "Zapfsäule (%d)\n{FFFFFF}Inhalt: %d Liter", PlayerData[i][pGasPump], PumpData[PlayerData[i][pGasPump]][pumpFuel]);
UpdateDynamic3DTextLabelText(PumpData[PlayerData[i][pGasPump]][pumpText3D], COLOR_DARKBLUE, string);
}
if (CoreVehicles[PlayerData[i][pRefill]][vehFuel] >= 100 || GetEngineStatus(PlayerData[i][pRefill]) || !PumpData[PlayerData[i][pGasPump]][pumpExists] || PumpData[PlayerData[i][pGasPump]][pumpFuel] < 0)
{
CoreVehicles[PlayerData[i][pRefill]][vehFuel] = 100;
GiveMoney(i, -PlayerData[i][pRefillPrice]);
SendServerMessage(i, "Du hast dein Fahrzeug für $%d betankt.", PlayerData[i][pRefillPrice]);
if (PumpData[PlayerData[i][pGasPump]][pumpExists])
{
if (PumpData[PlayerData[i][pGasPump]][pumpFuel] < 0)
PumpData[PlayerData[i][pGasPump]][pumpFuel] = 0;
BusinessData[PlayerData[i][pGasStation]][bizVault] += PlayerData[i][pRefillPrice];
Business_Save(PlayerData[i][pGasStation]);
Pump_Save(PlayerData[i][pGasPump]);
}
StopRefilling(i);
}
}
}
return 1;
}
Ich habe lediglich ein einziges Thema auf dem englischen SAMP-Forum entdeckt, wo jemand so ziemlich den gleichen Fehler gehabt hat.
Einige Beiträge darunter meinten, dass man das MySQL-Plugin updaten sollte von R7 auf R8. So hatte es bei denen jedenfalls geholfen.
Bei mir war es allerdings ergebnislos und die Fehler kommen weiterhin.