Hey,
habe derzeit ein kleines Problem mit meinem Timer/Tank System. Ich habe einen Timer mit einem Interval von einer Sekunde aufgesetzt. Alle meine Fahrzeuge haben bestimmt Eigenschaften. Das wären meine Arrays FuelDropValue und FuelDropRate. FuelDropRate sagt wie viele Sekunden es braucht, dass das Fahrzeug Benzin verliert. FuelDropValue sagt wie viel Benzin jeweils verbraucht wird.
Eigentlich funktioniert das alles auch ganz gut nur ist es oft sehr ungenau.
Zum Beispiel wenn das Fahrzeug alle 2 Sekunden Benzin verlieren soll, veliert es z.B 3 mal im Abstand von 2 Sekunden Benzin, danach braucht es dann einmal fünf Sekunden, dann einmal vier, dann wieder zwei, usw. Das Timer System von SAMP ist ja manchmal etwas ungenau aber 3 Sekunden ?
Ich habe dann mal den eigentlichen Timer debuggt und er wird fast immer jede Sekunde abgerufen, nur ganz selten braucht er zwei Sekunden. Es passiert aber nie, dass er mehr als eine Sekunde mehr braucht.
Also muss es fast an meinem Code liegen. P.S.: Ich habe auch schon alle möglichen TimerFix Includes oder Plugins benutzt.
Dieser Code wird jede Sekunde ausgeführt: (Irgendwie bringen die Pawn Tags die Einrückung von meinem Code durcheinander)
new FuelDropVar = GetPVarInt(playerid,"FuelDrop");
SetPVarInt(playerid,"FuelDrop",FuelDropVar+1);
if(FuelDropRate[vehicleid] == FuelDropVar)
{
//printf("%i",gettime());
SetPVarInt(playerid,"FuelDrop",0);
centerTank[vehicleid] -= FuelDropValue[vehicleid];
if(centerTank[vehicleid] < 0) centerTank[vehicleid] = 0;
if(wingTankLimit[vehicleid] != 0)
{
leftTank[vehicleid] -= FuelDropValue[vehicleid];
if(leftTank[vehicleid] < 0) leftTank[vehicleid] = 0;
rightTank[vehicleid] -= FuelDropValue[vehicleid];
if(rightTank[vehicleid] < 0) rightTank[vehicleid] = 0;
}
}
![](https://breadfish.de/wcf/images/avatars/f6/4871-f67b9175442230f6dfd4fe5b6e3186400395d383.jpg)
Timerinterval Problem
- Oskaar1994
- Geschlossen
- Erledigt
-
-
Wie sieht es aus, wenn du es so debuggst?
new FuelDropVar = GetPVarInt(playerid,"FuelDrop");
printf("Aufruf: %d playerid: %d FuelDropVar: %d (soll: %d)",gettime(),playerid,FuelDropVar,FuelDropRate[vehicleid]);
SetPVarInt(playerid,"FuelDrop",FuelDropVar+1);
if(FuelDropRate[vehicleid] == FuelDropVar)
{
printf("Tank runter");
SetPVarInt(playerid,"FuelDrop",0);
centerTank[vehicleid] -= FuelDropValue[vehicleid];
if(centerTank[vehicleid] < 0) centerTank[vehicleid] = 0;
if(wingTankLimit[vehicleid] != 0)
{
leftTank[vehicleid] -= FuelDropValue[vehicleid];
if(leftTank[vehicleid] < 0) leftTank[vehicleid] = 0;
rightTank[vehicleid] -= FuelDropValue[vehicleid];
if(rightTank[vehicleid] < 0) rightTank[vehicleid] = 0;
}
} -
Wie sieht es aus, wenn du es so debuggst?
new FuelDropVar = GetPVarInt(playerid,"FuelDrop");
printf("Aufruf: %d playerid: %d FuelDropVar: %d (soll: %d)",gettime(),playerid,FuelDropVar,FuelDropRate[vehicleid]);
SetPVarInt(playerid,"FuelDrop",FuelDropVar+1);
if(FuelDropRate[vehicleid] == FuelDropVar)
{
printf("Tank runter");
SetPVarInt(playerid,"FuelDrop",0);
centerTank[vehicleid] -= FuelDropValue[vehicleid];
if(centerTank[vehicleid] < 0) centerTank[vehicleid] = 0;
if(wingTankLimit[vehicleid] != 0)
{
leftTank[vehicleid] -= FuelDropValue[vehicleid];
if(leftTank[vehicleid] < 0) leftTank[vehicleid] = 0;
rightTank[vehicleid] -= FuelDropValue[vehicleid];
if(rightTank[vehicleid] < 0) rightTank[vehicleid] = 0;
}
}
Also ich kopiere jetzt mal ein paar Zeilen hier rein:
Code[13:34:08] Aufruf: 1415536448 playerid: 0 FuelDropVar: 0 (soll: 3)[13:34:09] Aufruf: 1415536449 playerid: 0 FuelDropVar: 1 (soll: 3)[13:34:10] Aufruf: 1415536450 playerid: 0 FuelDropVar: 2 (soll: 3)[13:34:11] Aufruf: 1415536451 playerid: 0 FuelDropVar: 3 (soll: 3)[13:34:11] Tank runter[13:34:12] Aufruf: 1415536452 playerid: 0 FuelDropVar: 0 (soll: 3)[13:34:13] Aufruf: 1415536453 playerid: 0 FuelDropVar: 1 (soll: 3)[13:34:15] Aufruf: 1415536455 playerid: 0 FuelDropVar: 2 (soll: 3)[13:34:16] Aufruf: 1415536456 playerid: 0 FuelDropVar: 3 (soll: 3)[13:34:16] Tank runter[13:34:17] Aufruf: 1415536457 playerid: 0 FuelDropVar: 0 (soll: 3)[13:34:18] Aufruf: 1415536458 playerid: 0 FuelDropVar: 1 (soll: 3)[13:34:19] Aufruf: 1415536459 playerid: 0 FuelDropVar: 2 (soll: 3)[13:34:20] Aufruf: 1415536460 playerid: 0 FuelDropVar: 3 (soll: 3)[13:34:20] Tank runter[13:34:21] Aufruf: 1415536461 playerid: 0 FuelDropVar: 0 (soll: 3)[13:34:22] Aufruf: 1415536462 playerid: 0 FuelDropVar: 1 (soll: 3)[13:34:23] Aufruf: 1415536463 playerid: 0 FuelDropVar: 2 (soll: 3)[13:34:25] Aufruf: 1415536465 playerid: 0 FuelDropVar: 3 (soll: 3)[13:34:25] Tank runter[13:34:26] Aufruf: 1415536466 playerid: 0 FuelDropVar: 0 (soll: 3)[13:34:27] Aufruf: 1415536467 playerid: 0 FuelDropVar: 1 (soll: 3)[13:34:28] Aufruf: 1415536468 playerid: 0 FuelDropVar: 2 (soll: 3)[13:34:29] Aufruf: 1415536469 playerid: 0 FuelDropVar: 3 (soll: 3)[13:34:29] Tank runter[13:34:30] Aufruf: 1415536470 playerid: 0 FuelDropVar: 0 (soll: 3)[13:34:31] Aufruf: 1415536471 playerid: 0 FuelDropVar: 1 (soll: 3)[13:34:32] Aufruf: 1415536472 playerid: 0 FuelDropVar: 2 (soll: 3)[13:34:33] Aufruf: 1415536473 playerid: 0 FuelDropVar: 3 (soll: 3)[13:34:33] Tank runter[13:34:35] Aufruf: 1415536475 playerid: 0 FuelDropVar: 0 (soll: 3)[13:34:36] Aufruf: 1415536476 playerid: 0 FuelDropVar: 1 (soll: 3)[13:34:37] Aufruf: 1415536477 playerid: 0 FuelDropVar: 2 (soll: 3)[13:34:38] Aufruf: 1415536478 playerid: 0 FuelDropVar: 3 (soll: 3)[13:34:38] Tank runter[13:34:39] Aufruf: 1415536479 playerid: 0 FuelDropVar: 0 (soll: 3)[13:34:40] Aufruf: 1415536480 playerid: 0 FuelDropVar: 1 (soll: 3)[13:34:41] Aufruf: 1415536481 playerid: 0 FuelDropVar: 2 (soll: 3)[13:34:42] Aufruf: 1415536482 playerid: 0 FuelDropVar: 3 (soll: 3)[13:34:42] Tank runter[13:34:44] Aufruf: 1415536484 playerid: 0 FuelDropVar: 0 (soll: 3)[13:34:45] Aufruf: 1415536485 playerid: 0 FuelDropVar: 1 (soll: 3)[13:34:46] Aufruf: 1415536486 playerid: 0 FuelDropVar: 2 (soll: 3)[13:34:47] Aufruf: 1415536487 playerid: 0 FuelDropVar: 3 (soll: 3)[13:34:47] Tank runter[13:34:48] Aufruf: 1415536488 playerid: 0 FuelDropVar: 0 (soll: 3)[13:34:49] Aufruf: 1415536489 playerid: 0 FuelDropVar: 1 (soll: 3)[13:34:50] Aufruf: 1415536490 playerid: 0 FuelDropVar: 2 (soll: 3)[13:34:51] Aufruf: 1415536491 playerid: 0 FuelDropVar: 3 (soll: 3)[13:34:51] Tank runter[13:34:53] Aufruf: 1415536493 playerid: 0 FuelDropVar: 0 (soll: 3)[13:34:54] Aufruf: 1415536494 playerid: 0 FuelDropVar: 1 (soll: 3)[13:34:55] Aufruf: 1415536495 playerid: 0 FuelDropVar: 2 (soll: 3)[13:34:56] Aufruf: 1415536496 playerid: 0 FuelDropVar: 3 (soll: 3)[13:34:56] Tank runter[13:34:57] Aufruf: 1415536497 playerid: 0 FuelDropVar: 0 (soll: 3)[13:34:58] Aufruf: 1415536498 playerid: 0 FuelDropVar: 1 (soll: 3)[13:34:59] Aufruf: 1415536499 playerid: 0 FuelDropVar: 2 (soll: 3)[13:35:00] Aufruf: 1415536500 playerid: 0 FuelDropVar: 3 (soll: 3)[13:35:00] Tank runter[13:35:01] Aufruf: 1415536501 playerid: 0 FuelDropVar: 0 (soll: 3)[13:35:03] Aufruf: 1415536503 playerid: 0 FuelDropVar: 1 (soll: 3)[13:35:04] Aufruf: 1415536504 playerid: 0 FuelDropVar: 2 (soll: 3)[13:35:05] Aufruf: 1415536505 playerid: 0 FuelDropVar: 3 (soll: 3)[13:35:05] Tank runter[13:35:06] Aufruf: 1415536506 playerid: 0 FuelDropVar: 0 (soll: 3)[13:35:07] Aufruf: 1415536507 playerid: 0 FuelDropVar: 1 (soll: 3)[13:35:08] Aufruf: 1415536508 playerid: 0 FuelDropVar: 2 (soll: 3)[13:35:09] Aufruf: 1415536509 playerid: 0 FuelDropVar: 3 (soll: 3)[13:35:09] Tank runter
-
Passt doch alles, oder? Alle 4 Sekunden geht der Tank um 1 runter. Oder was genau ist da jetzt falsch?
-
Eigentlich sollte er alle 3 Sekunden runter gehen.
-
Dann ändere:
if(FuelDropRate[vehicleid] == FuelDropVar)
zu:
if(FuelDropRate[vehicleid]-1 == FuelDropVar) -
Sowas ähnliches hab ich ja schon, nur habe ich mich gefragt ob es and mir oder am Timer System von SAMP liegt.
-
Es liegt an deinem Code, weil von 0 -> 3 es eben 4 Schritte sind.
Prüfe 0 = 3
Prüfe 1 = 3
Prüfe 2 = 3
Prüfe 3 = 3Oder du setzt die Zählervariable eben zu 1 anstatt zu 0 wenn es von vorne beginnen soll.
-
Ups da habe ich mal wieder nicht mitgedacht
Ich bin es irgendwie einfach gewohnt Variablen wieder auf 0 zurückzusetzen. Danke für deine Hilfe -
breadfish.de
Hat das Thema geschlossen.