KM Zähler funktioniert nicht so wie er soll...

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • KM Zähler funktioniert nicht so wie er soll...

    Moin / Nabend liebe Community,

    ich benutze auf Empfehlung das KM Include:

    forum.sa-mp.com/showthread.php?t=404367

    Meine Codeschnipsel:

    Hier wird der Timer zum Aktualisieren Gestartet beim Anschalten und gekillt beim abschalten.

    Quellcode

    1. ocmd:motor(playerid, params[]){
    2. if(GetPlayerState(playerid) != PLAYER_STATE_DRIVER)return SCM(playerid,COLOR_RED, "[FEHLER] {FFFFFF}Du bist kein Fahrer eines Fahrzeugs");
    3. new vID = getCarID(playerid), KMTimer[MAX_PLAYERS],
    4. tmp_lights,
    5. tmp_alarm,
    6. tmp_doors,
    7. tmp_bonnet,
    8. tmp_boot,
    9. tmp_objective;
    10. if(vID == INVALID_VEHICLE_ID) vID = GetPlayerVehicleID(playerid);
    11. GetVehicleParamsEx(vID, motor[vID], tmp_lights, tmp_alarm, tmp_doors, tmp_bonnet, tmp_boot, tmp_objective);
    12. if(motor[vID] == 0 || motor[vID] == -1){
    13. if(tank[vID] <= 0){
    14. tank[vID] = 0;
    15. SCM(playerid, COLOR_BLUE, "[INFO] {FFFFFF}Dieses Fahrzeug hat kein Kraftstoff mehr");
    16. }else{
    17. PlayerTextDrawHide(playerid, Tacho_TD[playerid][4]);
    18. PlayerTextDrawColor(playerid, Tacho_TD[playerid][4], COLOR_GREEN);
    19. PlayerTextDrawShow(playerid, Tacho_TD[playerid][4]);
    20. KMTimer[playerid] = SetTimerEx("setKiloMeter", 1000, true, "d", playerid);
    21. motor[vID] = 1;
    22. }
    23. }else{
    24. if(getVehicleSpeed(playerid) >= 30)return SCM(playerid, COLOR_BLUE, "[INFO] {FFFFFF}Du kannst den Motor nicht während der Fahrt aus machen");
    25. motor[vID] = 0;
    26. PlayerTextDrawHide(playerid, Tacho_TD[playerid][4]);
    27. PlayerTextDrawColor(playerid, Tacho_TD[playerid][4], COLOR_RED);
    28. PlayerTextDrawShow(playerid, Tacho_TD[playerid][4]);
    29. KillTimer(KMTimer[playerid]);
    30. }
    31. SetVehicleParamsEx(vID, motor[vID], tmp_lights, tmp_alarm, tmp_doors, tmp_bonnet, tmp_boot, tmp_objective);
    32. return 1;
    33. }
    Alles anzeigen

    Quellcode

    1. public setKiloMeter(playerid){
    2. for(new i = 0; i < MAX_PLAYERS; i++){
    3. if(!IsPlayerConnected(i) || !pInfo[i][pLoggedIn])continue;
    4. new vID = GetPlayerVehicleID(i);
    5. if(!IsPlayerInVehicle(i, vID)) continue;
    6. if(GetKilometers(vID) > 0){
    7. printf("%i, %0.2f", vID, kmstand[vID]);
    8. kmstand[vID] += GetKilometers(vID);
    9. setVehicleKM(playerid, vID);
    10. ResetMetersTraveled(vID);
    11. }
    12. }
    13. return 1;
    14. }
    Alles anzeigen
    Problem ist jetzt folgendes:

    Wenn ich als einziger Spieler (Playerid 0) auf dem Server bin und fahre läuft alles super, doch sobald ein zweiter Spieler (Sandbox) drauf ist, in einem Fahrzeug sitzt MOTOR ist allerdings AUS und ich fahre mit playerid 0 weiter zählt er mehr km als normal ist... Zumal wenn ich mit PlayerID 0 stehen bleibe (egal ob Motor an oder aus), der KM Stand geht immer weiter ...

    Ich hoffe es war einigermaßen verständlich ^^

    MfG
    XonarZ
  • XonarZ schrieb:

    kmstand[vID] += GetKilometers(vID);
    setVehicleKM(playerid, vID);
    Da setzt du das doch jeweils...wieso?

    Wieso +=?

    Das erhöht sich doch schon automatisch.


    XonarZ schrieb:

    new vID = GetPlayerVehicleID(i);
    if(!IsPlayerInVehicle(i, vID)) continue;
    Das ist übrigens auch eine sehr komische Abfrage ^^

    Schreib da einfach

    PAWN-Quellcode

    1. if(!vID) continue;


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. X/
  • Ich vermute mal, das liegt daran, dass du den Timer mehrfach startest.
    Wie und wo startest du denn den Timer? Vermutlich bei OnPlayerConnect?

    Grundsätzlich müsstest du setKiloMeter nur einmal bei OnGameModeInit starten, die playerid aus dem Kopf nehmen und im Code von setKiloMeter alle "playerid" mit "i" ersetzen. Zusätzlich müsstest du noch die Abfrage einbauen, ob der Motor auch an ist.

    Beitrag von Jeffry ()

    Dieser Beitrag wurde von Canna aus folgendem Grund gelöscht: Doppelpost ().
  • Kaliber schrieb:

    Da setzt du das doch jeweils...wieso?

    Wieso +=?

    Das erhöht sich doch schon automatisch.
    Naja nicht wirklich... kmstand[MAX_VEHICLES] ist ja eine globale Variable, diese wird auch gesetzt mit dem Wert aus der Datenkbank sobald der Spieler sich einloggt... Dann ist es so, dass ich mit GetKilometers(vehicleid) die distance "auslese" und meiner globalen Variable addiere ... ich glaube nämlich, dass GetKilometers auf 0 gesetzt wird sobald der Server restartet und dann wäre der KMStand ja immer 0... Desweiteren kommt nach meinem setVehicleKM, ein ResetMetersTraveled ... Sprich ich resette den auf 0 um einfach immer nur die 0... km zu addieren.

    Hier mal mein Stock setVehicleKM:

    PAWN-Quellcode

    1. stock setVehicleKM(playerid){
    2. new vID = getCarID(playerid), string[256];
    3. if(vID == INVALID_VEHICLE_ID) vID = GetPlayerVehicleID(playerid);
    4. format(string, sizeof(string), "%0.2f km", kmstand[vID]);
    5. PlayerTextDrawSetString(playerid, Tacho_TD[playerid][6], string);
    6. return 1;
    7. }
    Ich rufe den Stock nur auf wenn ich ein Fahrzeug betrete damit er den Textdraw setzt ...


    Jeffry schrieb:

    Ich vermute mal, das liegt daran, dass du den Timer mehrfach startest.
    Wie und wo startest du denn den Timer? Vermutlich bei OnPlayerConnect?
    Ne nur beim Motor starten, ansonsten rufe ich den Stock auf beim einsteigen wie gesagt...


    Jeffry schrieb:

    Grundsätzlich müsstest du setKiloMeter nur einmal bei OnGameModeInit starten, die playerid aus dem Kopf nehmen und im Code von setKiloMeter alle "playerid" mit "i" ersetzen. Zusätzlich müsstest du noch die Abfrage einbauen, ob der Motor auch an ist.
    Hm okay, aber würde es nicht mehr sinn machen, den Timer nur dann laufen zu lassen, wenn der Motor auch startet ? Weil ich hab ja schon den Timer mit dem tankLost ... geht das nicht iwie auf die Perfomance wenn ich 2 Timer permanent laufen lasse? Immerhin sollen ja nur KM gezählt werden, sobald der Motor an ist... Versteh ich irgendwas falsch ?

    //EDIT Mir ist auch aufgefallen, dass sobald 1 Spieler im Auto sitzt und rumfährt, dass beim Spieler 2 der auch rumfährt, dass der KM Stand nicht addiert wird, da passiert einfach gar nix.

    MfG
    XonarZ

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von XonarZ ()

  • Ist schon n bisschen her, aber ich hatte sowas auch mal geschrieben gehabt: Kilometer Anzeige / Berechnung

    Da wird das automatisch in SQLite (gespeichert + geladen) & berechnet ^^

    Dort brauchst du nur über die jeweilige Funktion dem Spieler das anzeigen lassen :D

    Dann brauchste aber kein eigenes Schnick Schnack :)


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. X/
  • Kaliber schrieb:

    Ist schon n bisschen her, aber ich hatte sowas auch mal geschrieben gehabt: Kilometer Anzeige / Berechnung

    Da wird das automatisch in SQLite (gespeichert + geladen) & berechnet ^^

    Dort brauchst du nur über die jeweilige Funktion dem Spieler das anzeigen lassen :D

    Dann brauchste aber kein eigenes Schnick Schnack :)
    Danke dir ... aber ich kann nicht versichern, dass die Vehicle ID's gleich bleiben, da ich gerade noch am Anfang bin und vorallem, die KM Stände von Jobcars die ich später Implementiere sollen nicht gespeichert werden ... :whistling:
  • XonarZ schrieb:

    Immerhin sollen ja nur KM gezählt werden, sobald der Motor an ist... Versteh ich irgendwas falsch ?
    Das stimmt schon, nur hast du im Callback eine Schleife durch alle Spieler. Hast du den Timer jetzt für mehrere Spieler gestartet, dann wird das alles mehrmals für alle Spieler gemacht.

    Das Callback sollte so aussehen:

    PAWN-Quellcode

    1. forward setKiloMeter();
    2. public setKiloMeter()
    3. {
    4. for(new i = 0; i < MAX_PLAYERS; i++)
    5. {
    6. if(!IsPlayerConnected(i) || !pInfo[i][pLoggedIn])continue;
    7. if(GetPlayerState(i) != PLAYER_STATE_DRIVER) continue;
    8. new vID = GetPlayerVehicleID(i);
    9. if(vID && GetKilometers(vID) > 0)
    10. {
    11. printf("%i, %0.2f", vID, kmstand[vID]);
    12. kmstand[vID] += GetKilometers(vID);
    13. setVehicleKM(playerid, vID);
    14. ResetMetersTraveled(vID);
    15. }
    16. }
    17. return 1;
    18. }
    Alles anzeigen

    Und dann kannst du den Timer bei OnGameModeInit starten:

    PAWN-Quellcode

    1. SetTimer("setKiloMeter", 1000, true);

    Sonst bitte nirgends.
    Dann brauchst du ihn auch nirgends beenden.

  • Jeffry schrieb:

    XonarZ schrieb:

    Immerhin sollen ja nur KM gezählt werden, sobald der Motor an ist... Versteh ich irgendwas falsch ?
    Das stimmt schon, nur hast du im Callback eine Schleife durch alle Spieler. Hast du den Timer jetzt für mehrere Spieler gestartet, dann wird das alles mehrmals für alle Spieler gemacht.
    Das Callback sollte so aussehen:

    PAWN-Quellcode

    1. forward setKiloMeter();public setKiloMeter(){ for(new i = 0; i < MAX_PLAYERS; i++) { if(!IsPlayerConnected(i) || !pInfo[i][pLoggedIn])continue; if(GetPlayerState(i) != PLAYER_STATE_DRIVER) continue; new vID = GetPlayerVehicleID(i); if(vID && GetKilometers(vID) > 0) { printf("%i, %0.2f", vID, kmstand[vID]); kmstand[vID] += GetKilometers(vID); setVehicleKM(playerid, vID); ResetMetersTraveled(vID); } } return 1;}

    Und dann kannst du den Timer bei OnGameModeInit starten:

    PAWN-Quellcode

    1. SetTimer("setKiloMeter", 1000, true);

    Sonst bitte nirgends.
    Dann brauchst du ihn auch nirgends beenden.
    Hab ich jetzt so probiert, wie du es vorgeschlagen hast...

    Leider ist es immer noch nicht so ganz... Ich versuchs mal zu Beschreiben xD^^ (vielleicht sollte ich ein Video machen xD)

    Wenn nur 1 Spieler Online ist, dann funktioniert es so wie es soll... Motor an und sobald man fährt, steigt der kmstand.

    Ab 2 Spieler:

    Spieler 1 Sitzt im Auto (Spieler 2 NICHT) und ist paar Meter gefahren (kmstand erhöht sich)
    Spieler 1 & 2 Sitzen jeweils in einem Auto als Fahrer. Der Motor bei Spieler 1 ist aus, fahre ich nun mit Spieler 2 los passiert gar nix. Wenn ich mit Spieler 1 Fahre, dann ist der KMStand auf einmal der, den Spieler 2 haben müsste (also wird kleiner).

    Man ist das kompliziert zu erklären oder / und ich bin einfach zu dumm :D
  • Gut erklärt, ich verstehe das Problem, kann es nur am Code nicht wirklich nachvollziehen.
    Kannst du es bitte mal so schreiben:

    PAWN-Quellcode

    1. forward setKiloMeter();
    2. public setKiloMeter()
    3. {
    4. for(new i = 0; i < MAX_PLAYERS; i++)
    5. {
    6. if(!IsPlayerConnected(i) || !pInfo[i][pLoggedIn])continue;
    7. if(GetPlayerState(i) != PLAYER_STATE_DRIVER) continue;
    8. new vID = GetPlayerVehicleID(i);
    9. if(vID && GetKilometers(vID) > 0)
    10. {
    11. kmstand[vID] += GetKilometers(vID);
    12. printf("%d / vID: %i, Total: %0.2f, Add: %0.2f, i: %i", GetTickCount(), vID, kmstand[vID], GetKilometers(vID), i);
    13. setVehicleKM(i, vID);
    14. ResetMetersTraveled(vID);
    15. }
    16. }
    17. return 1;
    18. }
    Alles anzeigen


    Was wird dann im Log geprintet, wenn du obigen Fehlerfall nochmal durchspielst?
  • Jeffry schrieb:

    Gut erklärt, ich verstehe das Problem, kann es nur am Code nicht wirklich nachvollziehen.
    Kannst du es bitte mal so schreiben:

    PAWN-Quellcode

    1. forward setKiloMeter();public setKiloMeter(){ for(new i = 0; i < MAX_PLAYERS; i++) { if(!IsPlayerConnected(i) || !pInfo[i][pLoggedIn])continue; if(GetPlayerState(i) != PLAYER_STATE_DRIVER) continue; new vID = GetPlayerVehicleID(i); if(vID && GetKilometers(vID) > 0) { kmstand[vID] += GetKilometers(vID); printf("%d / vID: %i, Total: %0.2f, Add: %0.2f, i: %i", GetTickCount(), vID, kmstand[vID], GetKilometers(vID), i); setVehicleKM(i, vID); ResetMetersTraveled(vID); } } return 1;}


    Was wird dann im Log geprintet, wenn du obigen Fehlerfall nochmal durchspielst?


    Brainfuck-Quellcode

    1. ----------
    2. Loaded log file: "server_log.txt".
    3. ----------
    4. SA-MP Dedicated Server
    5. ----------------------
    6. v0.3.DL-R1, (C)2005-2018 SA-MP Team
    7. [11:34:45] filterscripts = "" (string)
    8. [11:34:45]
    9. [11:34:45] Server Plugins
    10. [11:34:45] --------------
    11. [11:34:45] Loading plugin: mysql
    12. [11:34:45] >> plugin.mysql: R41-4 successfully loaded.
    13. [11:34:45] Loaded.
    14. [11:34:45] Loading plugin: crashdetect
    15. [11:34:45] CrashDetect plugin 4.19.4
    16. [11:34:45] Loaded.
    17. [11:34:45] Loading plugin: tde
    18. [11:34:45]
    19. TDEditor Plugin loaded, thank you for using.
    20. [11:34:45] Loaded.
    21. [11:34:45] Loading plugin: sscanf
    22. [11:34:45]
    23. [11:34:45] ===============================
    24. [11:34:45] sscanf plugin loaded.
    25. [11:34:45] Version: 2.8.2
    26. [11:34:45] (c) 2012 Alex "Y_Less" Cole
    27. [11:34:45] ===============================
    28. [11:34:45] Loaded.
    29. [11:34:45] Loaded 4 plugins.
    30. [11:34:45]
    31. [11:34:45] Filterscripts
    32. [11:34:45] ---------------
    33. [11:34:45] Loaded 0 filterscripts.
    34. [11:34:45] [MYSQL] Verbindungsaufbau...
    35. [11:34:45] [MYSQL] Verbindung Erfolgreich! Verbindungsversuche: 1
    36. [11:34:45]
    37. ----------------------------------
    38. [11:34:45] Projektname Selfmade Script
    39. [11:34:45] ----------------------------------
    40. [11:34:45] Number of vehicle models: 1
    41. [11:35:00] [connection] incoming connection: 127.0.0.1:50954 id: 0
    42. [11:35:00] [join] XonarZ has joined the server (0:127.0.0.1)
    43. [11:35:33] [connection] incoming connection: 127.0.0.1:50957 id: 1
    44. [11:35:33] [join] testuser has joined the server (1:127.0.0.1)
    45. [11:36:28] [part] XonarZ has left the server (0:1)
    46. [11:36:31] [part] testuser has left the server (1:1)
    47. Console input: gmx
    48. [11:42:37] [MYSQL] Verbindungsaufbau...
    49. [11:42:37] [MYSQL] Verbindung Erfolgreich! Verbindungsversuche: 1
    50. [11:42:37]
    51. ----------------------------------
    52. [11:42:37] Projektname Selfmade Script
    53. [11:42:37] ----------------------------------
    54. [11:42:37] Number of vehicle models: 1
    55. [11:42:51] [connection] incoming connection: 127.0.0.1:54312 id: 0
    56. [11:42:51] [join] XonarZ has joined the server (0:127.0.0.1)
    57. Console input: gmx
    58. [11:52:21] [MYSQL] Verbindungsaufbau...
    59. [11:52:21] [MYSQL] Verbindung Erfolgreich! Verbindungsversuche: 1
    60. [11:52:21]
    61. ----------------------------------
    62. [11:52:21] Projektname Selfmade Script
    63. [11:52:21] ----------------------------------
    64. [11:52:21] Number of vehicle models: 1
    65. [11:52:37] 10616089 / vID: 2, Total: 9.29, Add: 0.01, i: 0
    66. [11:52:38] 10617798 / vID: 2, Total: 9.31, Add: 0.02, i: 0
    67. [11:52:40] 10619480 / vID: 2, Total: 9.35, Add: 0.03, i: 0
    68. [11:52:42] 10621176 / vID: 2, Total: 9.36, Add: 0.01, i: 0
    69. [11:53:22] [connection] incoming connection: 127.0.0.1:58263 id: 1
    70. [11:53:22] [join] testuser has joined the server (1:127.0.0.1)
    71. [11:54:39] 10708176 / vID: 2, Total: 9.40, Add: 0.04, i: 0
    72. [11:54:39] 10737996 / vID: 3, Total: 2.12, Add: 0.04, i: 1
    73. [11:54:39] [part] testuser has left the server (1:1)
    74. [11:54:40] 10739773 / vID: 2, Total: 9.44, Add: 0.04, i: 0
    Alles anzeigen
    Als ich dann mit "testuser" los gefahren bin, hing der Server komplett erst als ich den Server mit "testuser" verlassen habe, kamen die sachen ab Zeile 85

    MfG
    XonarZ
  • Kannst du es bitte hiermit nochmals testen:

    PAWN-Quellcode

    1. forward setKiloMeter();
    2. public setKiloMeter()
    3. {
    4. printf("Call: %d", gettime());
    5. for(new i = 0; i < MAX_PLAYERS; i++)
    6. {
    7. if(!IsPlayerConnected(i) || !pInfo[i][pLoggedIn])continue;
    8. if(GetPlayerState(i) != PLAYER_STATE_DRIVER) continue;
    9. new vID = GetPlayerVehicleID(i);
    10. if(!vID) continue;
    11. printf("vID: %d, Motor: %d", vID, motor[vID]);
    12. if(motor[vID] == 0 || motor[vID] == -1) continue;
    13. if(GetKilometers(vID) > 0)
    14. {
    15. kmstand[vID] += GetKilometers(vID);
    16. printf("vID: %i, Total: %0.2f, Add: %0.2f, i: %i", vID, kmstand[vID], GetKilometers(vID), i);
    17. setVehicleKM(i, vID);
    18. ResetMetersTraveled(vID);
    19. }
    20. }
    21. return 1;
    22. }
    Alles anzeigen


    Bitte auch etwas länger für den zweiten User.
    Aufhängen sollte sich der Server dadurch eigentlich nicht.


    Du startest den Timer auch wirklich nur noch unter OnGameModeInit?
  • Jeffry schrieb:

    Kannst du es bitte hiermit nochmals testen:

    PAWN-Quellcode

    1. forward setKiloMeter();public setKiloMeter(){ printf("Call: %d", gettime()); for(new i = 0; i < MAX_PLAYERS; i++) { if(!IsPlayerConnected(i) || !pInfo[i][pLoggedIn])continue; if(GetPlayerState(i) != PLAYER_STATE_DRIVER) continue; new vID = GetPlayerVehicleID(i); if(!vID) continue; printf("vID: %d, Motor: %d", vID, motor[vID]); if(motor[vID] == 0 || motor[vID] == -1) continue; if(GetKilometers(vID) > 0) { kmstand[vID] += GetKilometers(vID); printf("vID: %i, Total: %0.2f, Add: %0.2f, i: %i", vID, kmstand[vID], GetKilometers(vID), i); setVehicleKM(i, vID); ResetMetersTraveled(vID); } } return 1;}


    Bitte auch etwas länger für den zweiten User.
    Aufhängen sollte sich der Server dadurch eigentlich nicht.


    Du startest den Timer auch wirklich nur noch unter OnGameModeInit?

    Brainfuck-Quellcode

    1. ----------
    2. Loaded log file: "server_log.txt".
    3. ----------
    4. SA-MP Dedicated Server
    5. ----------------------
    6. v0.3.DL-R1, (C)2005-2018 SA-MP Team
    7. [12:09:01] filterscripts = "" (string)
    8. [12:09:01]
    9. [12:09:01] Server Plugins
    10. [12:09:01] --------------
    11. [12:09:01] Loading plugin: mysql
    12. [12:09:01] >> plugin.mysql: R41-4 successfully loaded.
    13. [12:09:01] Loaded.
    14. [12:09:01] Loading plugin: crashdetect
    15. [12:09:01] CrashDetect plugin 4.19.4
    16. [12:09:01] Loaded.
    17. [12:09:01] Loading plugin: tde
    18. [12:09:01]
    19. TDEditor Plugin loaded, thank you for using.
    20. [12:09:01] Loaded.
    21. [12:09:01] Loading plugin: sscanf
    22. [12:09:01]
    23. [12:09:01] ===============================
    24. [12:09:01] sscanf plugin loaded.
    25. [12:09:01] Version: 2.8.2
    26. [12:09:01] (c) 2012 Alex "Y_Less" Cole
    27. [12:09:01] ===============================
    28. [12:09:01] Loaded.
    29. [12:09:01] Loaded 4 plugins.
    30. [12:09:01]
    31. [12:09:01] Filterscripts
    32. [12:09:01] ---------------
    33. [12:09:01] Loaded 0 filterscripts.
    34. [12:09:01] [MYSQL] Verbindungsaufbau...
    35. [12:09:01] [MYSQL] Verbindung Erfolgreich! Verbindungsversuche: 1
    36. [12:09:01]
    37. ----------------------------------
    38. [12:09:01] Projektname Selfmade Script
    39. [12:09:01] ----------------------------------
    40. [12:09:01] Number of vehicle models: 1
    41. [12:09:03] Call: 1538820543
    42. [12:09:04] Call: 1538820544
    43. [12:09:06] Call: 1538820546
    44. [12:09:08] Call: 1538820548
    45. [12:09:10] Call: 1538820550
    46. [12:09:12] Call: 1538820552
    47. [12:09:14] Call: 1538820554
    48. [12:09:16] Call: 1538820556
    49. [12:09:17] Call: 1538820557
    50. [12:09:19] Call: 1538820559
    51. [12:09:21] Call: 1538820561
    52. [12:09:23] Call: 1538820563
    53. [12:09:25] Call: 1538820565
    54. [12:09:26] [connection] incoming connection: 127.0.0.1:49420 id: 0
    55. [12:09:26] [join] XonarZ has joined the server (0:127.0.0.1)
    56. [12:09:26] Call: 1538820566
    57. [12:09:28] Call: 1538820568
    58. [12:09:30] Call: 1538820570
    59. [12:09:32] Call: 1538820572
    60. [12:09:33] Call: 1538820573
    61. [12:09:35] Call: 1538820575
    62. [12:09:37] Call: 1538820577
    63. [12:09:39] Call: 1538820579
    64. [12:09:40] Call: 1538820580
    65. [12:09:42] Call: 1538820582
    66. [12:09:44] Call: 1538820584
    67. [12:09:46] Call: 1538820586
    68. [12:09:46] vID: 2, Motor: 0
    69. [12:09:47] Call: 1538820587
    70. [12:09:47] vID: 2, Motor: 1
    71. [12:09:47] vID: 2, Total: 9.45, Add: 0.00, i: 0
    72. [12:09:49] Call: 1538820589
    73. [12:09:49] vID: 2, Motor: 1
    74. [12:09:49] vID: 2, Total: 9.49, Add: 0.03, i: 0
    75. [12:09:51] Call: 1538820591
    76. [12:09:51] vID: 2, Motor: 1
    77. [12:09:51] vID: 2, Total: 9.54, Add: 0.04, i: 0
    78. [12:09:53] Call: 1538820593
    79. [12:09:53] vID: 2, Motor: 1
    80. [12:09:53] vID: 2, Total: 9.57, Add: 0.03, i: 0
    81. [12:09:54] Call: 1538820594
    82. [12:09:54] vID: 2, Motor: 1
    83. [12:09:54] vID: 2, Total: 9.61, Add: 0.03, i: 0
    84. [12:09:56] Call: 1538820596
    85. [12:09:56] vID: 2, Motor: 1
    86. [12:09:56] vID: 2, Total: 9.64, Add: 0.03, i: 0
    87. [12:09:58] Call: 1538820598
    88. [12:09:58] vID: 2, Motor: 0
    89. [12:09:59] Call: 1538820599
    90. [12:09:59] vID: 2, Motor: 0
    91. [12:10:01] Call: 1538820601
    92. [12:10:01] vID: 2, Motor: 0
    93. [12:10:03] Call: 1538820603
    94. [12:10:03] vID: 2, Motor: 0
    95. [12:10:05] Call: 1538820605
    96. [12:10:05] vID: 2, Motor: 0
    97. [12:10:06] Call: 1538820606
    98. [12:10:06] vID: 2, Motor: 0
    99. [12:10:08] Call: 1538820608
    100. [12:10:08] vID: 2, Motor: 0
    101. [12:10:10] Call: 1538820610
    102. [12:10:10] vID: 2, Motor: 0
    103. [12:10:12] Call: 1538820612
    104. [12:10:12] vID: 2, Motor: 0
    105. [12:10:14] Call: 1538820614
    106. [12:10:14] vID: 2, Motor: 0
    107. [12:10:16] Call: 1538820616
    108. [12:10:16] vID: 2, Motor: 0
    109. [12:10:17] Call: 1538820617
    110. [12:10:17] vID: 2, Motor: 0
    111. [12:10:19] Call: 1538820619
    112. [12:10:19] vID: 2, Motor: 0
    113. [12:10:21] Call: 1538820621
    114. [12:10:21] vID: 2, Motor: 0
    115. [12:10:23] Call: 1538820623
    116. [12:10:23] vID: 2, Motor: 0
    117. [12:10:25] Call: 1538820625
    118. [12:10:25] vID: 2, Motor: 0
    119. [12:10:26] Call: 1538820626
    120. [12:10:26] vID: 2, Motor: 0
    121. [12:10:28] Call: 1538820628
    122. [12:10:28] vID: 2, Motor: 0
    123. [12:10:30] Call: 1538820630
    124. [12:10:30] vID: 2, Motor: 0
    125. [12:10:32] Call: 1538820632
    126. [12:10:32] vID: 2, Motor: 0
    127. [12:10:34] Call: 1538820634
    128. [12:10:34] vID: 2, Motor: 0
    129. [12:10:35] Call: 1538820635
    130. [12:10:35] vID: 2, Motor: 0
    131. [12:10:37] [connection] incoming connection: 127.0.0.1:49428 id: 1
    132. [12:10:37] [join] testuser has joined the server (1:127.0.0.1)
    133. [12:10:37] Call: 1538820637
    134. [12:10:37] vID: 2, Motor: 0
    135. [12:10:39] Call: 1538820639
    136. [12:10:39] vID: 2, Motor: 0
    137. [12:10:41] Call: 1538820641
    138. [12:10:41] vID: 2, Motor: 0
    139. [12:10:42] Call: 1538820642
    140. [12:10:42] vID: 2, Motor: 0
    141. [12:10:44] Call: 1538820644
    142. [12:10:44] vID: 2, Motor: 0
    143. [12:10:46] Call: 1538820646
    144. [12:10:46] vID: 2, Motor: 0
    145. [12:10:48] Call: 1538820648
    146. [12:10:48] vID: 2, Motor: 0
    147. [12:10:49] Call: 1538820649
    148. [12:10:49] vID: 2, Motor: 0
    149. [12:10:51] Call: 1538820651
    150. [12:10:51] vID: 2, Motor: 0
    151. [12:10:53] Call: 1538820653
    152. [12:10:53] vID: 2, Motor: 0
    153. [12:10:53] vID: 3, Motor: 0
    154. [12:10:55] Call: 1538820655
    155. [12:10:55] vID: 2, Motor: 0
    156. [12:10:55] vID: 3, Motor: 1
    157. [12:10:55] vID: 3, Total: 2.17, Add: 0.04, i: 1
    158. [12:10:56] Call: 1538820656
    159. [12:10:56] vID: 2, Motor: 0
    160. [12:10:56] vID: 3, Motor: 1
    161. [12:10:56] vID: 3, Total: 2.22, Add: 0.04, i: 1
    162. [12:10:58] Call: 1538820658
    163. [12:10:58] vID: 2, Motor: 0
    164. [12:10:58] vID: 3, Motor: 1
    165. [12:10:58] vID: 3, Total: 2.25, Add: 0.04, i: 1
    166. [12:11:00] Call: 1538820660
    167. [12:11:00] vID: 2, Motor: 0
    168. [12:11:00] vID: 3, Motor: 1
    169. [12:11:00] vID: 3, Total: 2.26, Add: 0.00, i: 1
    170. [12:11:02] Call: 1538820662
    171. [12:11:02] vID: 2, Motor: 0
    172. [12:11:02] vID: 3, Motor: 1
    173. [12:11:02] vID: 3, Total: 2.31, Add: 0.04, i: 1
    174. [12:11:03] Call: 1538820663
    175. [12:11:03] vID: 2, Motor: 0
    176. [12:11:03] vID: 3, Motor: 1
    177. [12:11:03] vID: 3, Total: 2.38, Add: 0.07, i: 1
    178. [12:11:05] Call: 1538820665
    179. [12:11:05] vID: 2, Motor: 0
    180. [12:11:05] vID: 3, Motor: 1
    181. [12:11:05] vID: 3, Total: 2.46, Add: 0.07, i: 1
    182. [12:11:07] Call: 1538820667
    183. [12:11:07] vID: 2, Motor: 0
    184. [12:11:07] vID: 3, Motor: 1
    185. [12:11:07] vID: 3, Total: 2.53, Add: 0.06, i: 1
    186. [12:11:08] Call: 1538820668
    187. [12:11:08] vID: 2, Motor: 0
    188. [12:11:08] vID: 3, Motor: 1
    189. [12:11:08] vID: 3, Total: 2.60, Add: 0.07, i: 1
    190. [12:11:10] Call: 1538820670
    191. [12:11:10] vID: 2, Motor: 0
    192. [12:11:10] vID: 3, Motor: 1
    193. [12:11:10] vID: 3, Total: 2.67, Add: 0.07, i: 1
    194. [12:11:12] Call: 1538820672
    195. [12:11:12] vID: 2, Motor: 0
    196. [12:11:12] vID: 3, Motor: 1
    197. [12:11:12] vID: 3, Total: 2.74, Add: 0.07, i: 1
    198. [12:11:14] Call: 1538820674
    199. [12:11:14] vID: 2, Motor: 0
    200. [12:11:14] vID: 3, Motor: 1
    201. [12:11:14] vID: 3, Total: 2.81, Add: 0.07, i: 1
    202. [12:11:15] Call: 1538820675
    203. [12:11:15] vID: 2, Motor: 0
    204. [12:11:15] vID: 3, Motor: 1
    205. [12:11:15] vID: 3, Total: 2.88, Add: 0.07, i: 1
    206. [12:11:17] Call: 1538820677
    207. [12:11:17] vID: 2, Motor: 0
    208. [12:11:17] vID: 3, Motor: 1
    209. [12:11:17] vID: 3, Total: 2.95, Add: 0.07, i: 1
    210. [12:11:19] Call: 1538820679
    211. [12:11:19] vID: 2, Motor: 0
    212. [12:11:19] vID: 3, Motor: 1
    213. [12:11:19] vID: 3, Total: 3.02, Add: 0.07, i: 1
    214. [12:11:21] Call: 1538820681
    215. [12:11:21] vID: 2, Motor: 0
    216. [12:11:21] vID: 3, Motor: 1
    217. [12:11:21] vID: 3, Total: 3.09, Add: 0.07, i: 1
    218. [12:11:22] Call: 1538820682
    219. [12:11:22] vID: 2, Motor: 0
    220. [12:11:22] vID: 3, Motor: 1
    221. [12:11:22] vID: 3, Total: 3.16, Add: 0.07, i: 1
    222. [12:11:24] Call: 1538820684
    223. [12:11:24] vID: 2, Motor: 0
    224. [12:11:24] vID: 3, Motor: 1
    225. [12:11:24] vID: 3, Total: 3.21, Add: 0.05, i: 1
    226. [12:11:26] Call: 1538820686
    227. [12:11:26] vID: 2, Motor: 0
    228. [12:11:26] vID: 3, Motor: 1
    229. [12:11:26] vID: 3, Total: 3.25, Add: 0.03, i: 1
    230. [12:11:27] Call: 1538820687
    231. [12:11:27] vID: 2, Motor: 0
    232. [12:11:27] vID: 3, Motor: 1
    233. [12:11:27] vID: 3, Total: 3.26, Add: 0.01, i: 1
    234. [12:11:29] Call: 1538820689
    235. [12:11:29] vID: 2, Motor: 0
    236. [12:11:29] vID: 3, Motor: 0
    237. [12:11:31] Call: 1538820691
    238. [12:11:31] vID: 2, Motor: 0
    239. [12:11:31] vID: 3, Motor: 0
    240. [12:11:31] [part] testuser has left the server (1:1)
    241. [12:11:33] Call: 1538820693
    242. [12:11:33] vID: 2, Motor: 0
    Alles anzeigen
    Ab Total: 2.67 bin ich stehen geblieben und er hat weiter gezählt.

    Ja ich starte den nur bei OnGameModeInit ^^

    MfG
    XonarZ
  • Ich habe mir die Include grade mal angeschaut. Der Fehler liegt dort. Selbstverständlich werde ich auf diese auch nicht mehr verweisen.
    Die Include funktioniert nur mit einem Fahrzeug. Ich spare mir, diese umzuschreiben, da dein Timer das meiste schon von sich erledigen kann:

    Wirf bitte die Include aus deinem Code und versuche folgendes:
    Unter den Includes:

    PAWN-Quellcode

    1. new Float:v_oldPos[MAX_VEHICLES][3];


    Timer:

    PAWN-Quellcode

    1. forward setKiloMeter();
    2. public setKiloMeter()
    3. {
    4. printf("Call: %d", gettime());
    5. new Float:km;
    6. for(new i = 0; i < MAX_PLAYERS; i++)
    7. {
    8. if(!IsPlayerConnected(i) || !pInfo[i][pLoggedIn])continue;
    9. if(GetPlayerState(i) != PLAYER_STATE_DRIVER) continue;
    10. new vID = GetPlayerVehicleID(i);
    11. if(!vID) continue;
    12. printf("vID: %d, Motor: %d", vID, motor[vID]);
    13. if(motor[vID] == 0 || motor[vID] == -1) continue;
    14. if(GetKilometers(vID) > 0)
    15. {
    16. km = GetVehicleDistanceFromPoint(vID, v_oldPos[vID][0], v_oldPos[vID][1], v_oldPos[vID][2]) * 0.001;
    17. kmstand[vID] += km;
    18. printf("vID: %i, Total: %0.2f, Add: %0.2f, i: %i", vID, kmstand[vID], km, i);
    19. setVehicleKM(i, vID);
    20. GetVehiclePos(vID, v_oldPos[vID][0], v_oldPos[vID][1], v_oldPos[vID][2]);
    21. }
    22. }
    23. return 1;
    24. }
    Alles anzeigen


    OnPlayerStateChange:

    PAWN-Quellcode

    1. if(newstate == PLAYER_STATE_DRIVER)
    2. {
    3. new vID = GetPlayerVehicleID(playerid);
    4. if(vID) GetVehiclePos(vID, v_oldPos[vID][0], v_oldPos[vID][1], v_oldPos[vID][2]);
    5. }
  • Jeffry schrieb:

    Ich habe mir die Include grade mal angeschaut. Der Fehler liegt dort. Selbstverständlich werde ich auf diese auch nicht mehr verweisen.
    Die Include funktioniert nur mit einem Fahrzeug. Ich spare mir, diese umzuschreiben, da dein Timer das meiste schon von sich erledigen kann:

    Wirf bitte die Include aus deinem Code und versuche folgendes:
    Unter den Includes:

    PAWN-Quellcode

    1. new Float:v_oldPos[MAX_VEHICLES][3];


    Timer:

    PAWN-Quellcode

    1. forward setKiloMeter();public setKiloMeter(){ printf("Call: %d", gettime()); new Float:km; for(new i = 0; i < MAX_PLAYERS; i++) { if(!IsPlayerConnected(i) || !pInfo[i][pLoggedIn])continue; if(GetPlayerState(i) != PLAYER_STATE_DRIVER) continue; new vID = GetPlayerVehicleID(i); if(!vID) continue; printf("vID: %d, Motor: %d", vID, motor[vID]); if(motor[vID] == 0 || motor[vID] == -1) continue; if(GetKilometers(vID) > 0) { km = GetVehicleDistanceFromPoint(vID, v_oldPos[vID][0], v_oldPos[vID][1], v_oldPos[vID][2]) * 0.001; kmstand[vID] += km; printf("vID: %i, Total: %0.2f, Add: %0.2f, i: %i", vID, kmstand[vID], km, i); setVehicleKM(i, vID); GetVehiclePos(vID, v_oldPos[vID][0], v_oldPos[vID][1], v_oldPos[vID][2]); } } return 1;}


    OnPlayerStateChange:

    PAWN-Quellcode

    1. if(newstate == PLAYER_STATE_DRIVER){ new vID = GetPlayerVehicleID(playerid); if(vID) GetVehiclePos(vID, v_oldPos[vID][0], v_oldPos[vID][1], v_oldPos[vID][2]);}

    Okay... Also leider hast du nen minimalen Denkfehler ^^ GetKilometers gibt es nicht mehr (include ist ja raus^^)
    beim Compilen:

    Quellcode

    1. ...selfmade.pwn(922) : error 017: undefined symbol "GetKilometers"
    2. Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase
    3. 1 Error.


    PAWN-Quellcode

    1. public setKiloMeter()
    2. {
    3. printf("Call: %d", gettime());
    4. new Float:km;
    5. for(new i = 0; i < MAX_PLAYERS; i++)
    6. {
    7. if(!IsPlayerConnected(i) || !pInfo[i][pLoggedIn])continue;
    8. if(GetPlayerState(i) != PLAYER_STATE_DRIVER) continue;
    9. new vID = GetPlayerVehicleID(i);
    10. if(!vID) continue;
    11. printf("vID: %d, Motor: %d", vID, motor[vID]);
    12. if(motor[vID] == 0 || motor[vID] == -1) continue;
    13. -> das ist die Zeile: if(GetKilometers(vID) > 0)
    14. {
    15. km = GetVehicleDistanceFromPoint(vID, v_oldPos[vID][0], v_oldPos[vID][1], v_oldPos[vID][2]) * 0.001;
    16. kmstand[vID] += km;
    17. printf("vID: %i, Total: %0.2f, Add: %0.2f, i: %i", vID, kmstand[vID], km, i);
    18. setVehicleKM(i, vID);
    19. GetVehiclePos(vID, v_oldPos[vID][0], v_oldPos[vID][1], v_oldPos[vID][2]);
    20. }
    21. }
    22. return 1;
    23. }
    Alles anzeigen
    Mein OnPlayerStateChange sieht nun so aus... ist das so richtig?:

    PAWN-Quellcode

    1. if(newstate == PLAYER_STATE_DRIVER){
    2. new vID = GetPlayerVehicleID(playerid);
    3. if(vID) GetVehiclePos(vID, v_oldPos[vID][0], v_oldPos[vID][1], v_oldPos[vID][2]);
    4. if(vID == INVALID_VEHICLE_ID) vID = GetPlayerVehicleID(playerid);
    5. new vModel = getModelIdx(GetVehicleModel(vID));
    6. if(vModel == -1) return 0;
    7. if(!isCarAnAhCar(vID)){
    8. new string[128];
    9. format(string, sizeof(string), "%s", mInfo[vModel][mName]);
    10. PlayerTextDrawSetString(playerid, Tacho_TD[playerid][9], string);
    11. PlayerTextDrawSetPreviewModel(playerid, Tacho_TD[playerid][1], GetVehicleModel(vID));
    12. format(string, sizeof(string), "%s", mInfo[vModel][fuelTyp]);
    13. PlayerTextDrawSetString(playerid, Tacho_TD[playerid][13], string);
    14. format(string, sizeof(string), "%0.2f / %0.2f", tank[vID], mInfo[vModel][maxTank]);
    15. PlayerTextDrawSetString(playerid, Tacho_TD[playerid][15], string);
    16. if(motor[vID] == 0){
    17. PlayerTextDrawColor(playerid, Tacho_TD[playerid][4], COLOR_RED);
    18. }else{
    19. PlayerTextDrawColor(playerid, Tacho_TD[playerid][4], COLOR_GREEN);
    20. }
    21. setVehicleKM(playerid, vID);
    22. loadTacho(playerid);
    23. }else{
    24. for(new i = 0; i < sizeof(ahCars); i++){
    25. if(ahCars[i][id_x] != vID) continue;
    26. SetPVarInt(playerid, "autoKaufID", i);
    27. if(mInfo[vModel][mID] != GetVehicleModel(vID)) continue;
    28. new text[1024], caption[128];
    29. format(text, sizeof(text), "{00AFFF}Fahrzeug: {FFFFFF}%s\n{00AFFF}Batterie Spannung: {FFFFFF}%iV\n{00AFFF}Kraftstoff: {FFFFFF}%s\n{00AFFF}Tankgröße: {FFFFFF}%0.2f Liter\n{00AFFF}Liter im Leerlauf: {FFFFFF}%0.2f\n\n{00AFFF}Preis: {FFFFFF}%i$", mInfo[vModel][mName], mInfo[vModel][mBat], mInfo[vModel][fuelTyp], mInfo[vModel][maxTank], mInfo[vModel][lpm], ahCars[i][c_preis]);
    30. format(caption, sizeof(caption), "%s", ahInfo[ahCars[i][ah_id]][ah_name]);
    31. SPD(playerid, DIALOG_AUTOKAUF, DIALOG_STYLE_MSGBOX, caption, text, "Kaufen", "Abbrechen");
    32. break;
    33. }
    34. }
    Alles anzeigen
    //EDIT oder ich hab den denkfehler^^
  • XonarZ schrieb:

    Okay... Also leider hast du nen minimalen Denkfehler GetKilometers gibt es nicht mehr (include ist ja raus^^)
    Oh, natürlich, das habe ich übersehen:

    PAWN-Quellcode

    1. forward setKiloMeter();
    2. public setKiloMeter()
    3. {
    4. printf("Call: %d", gettime());
    5. new Float:km;
    6. for(new i = 0; i < MAX_PLAYERS; i++)
    7. {
    8. if(!IsPlayerConnected(i) || !pInfo[i][pLoggedIn])continue;
    9. if(GetPlayerState(i) != PLAYER_STATE_DRIVER) continue;
    10. new vID = GetPlayerVehicleID(i);
    11. if(!vID) continue;
    12. printf("vID: %d, Motor: %d", vID, motor[vID]);
    13. if(motor[vID] == 0 || motor[vID] == -1) continue;
    14. km = GetVehicleDistanceFromPoint(vID, v_oldPos[vID][0], v_oldPos[vID][1], v_oldPos[vID][2]) * 0.001;
    15. if(km > 0)
    16. {
    17. kmstand[vID] += km;
    18. printf("vID: %i, Total: %0.2f, Add: %0.2f, i: %i", vID, kmstand[vID], km, i);
    19. setVehicleKM(i, vID);
    20. GetVehiclePos(vID, v_oldPos[vID][0], v_oldPos[vID][1], v_oldPos[vID][2]);
    21. }
    22. }
    23. return 1;
    24. }
    Alles anzeigen


    XonarZ schrieb:

    Mein OnPlayerStateChange sieht nun so aus... ist das so richtig?:
    Ja, das sollte passen.