diff --git a/PlayerTracker b/PlayerTracker index a03ba5f..b4bf780 100755 Binary files a/PlayerTracker and b/PlayerTracker differ diff --git a/source/main.cpp b/source/main.cpp index e42f37f..6aba801 100644 --- a/source/main.cpp +++ b/source/main.cpp @@ -17,7 +17,7 @@ #include "server_structs.h" #include "socket.h" -#define DEBUG_CAR_INFO 0 +#define DEBUG_CAR_INFO 1 const char *API_SOCKET_PATH = "/tmp/ACplayer_socket"; @@ -378,7 +378,21 @@ int main(int argc, char *argv[]) { // Store player player into the respective Index if (update.carID < MAX_PLAYERS) { - memcpy(&players[update.carID], &update, sizeof(carAtributes)); + players[update.carID].isConnected = update.isConnected; + players[update.carID].isLoading = update.isLoading; + players[update.carID].carID = update.carID; + + strncpy(players[update.carID].driver_GUID, update.driver_GUID, 63); + strncpy(players[update.carID].driver_name, update.driver_name, 63); + strncpy(players[update.carID].driver_team, update.driver_team, 63); + strncpy(players[update.carID].car_model, update.car_model, 63); + strncpy(players[update.carID].car_skin, update.car_skin, 63); + + players[update.carID].driver_GUID[63] = '\0'; + players[update.carID].driver_name[63] = '\0'; + players[update.carID].driver_team[63] = '\0'; + players[update.carID].car_model[63] = '\0'; + players[update.carID].car_skin[63] = '\0'; } update_api_packet(trackInfo, players); break; @@ -408,7 +422,7 @@ int main(int argc, char *argv[]) { update.isConnected = 0; // Mark as disconnected current_packet.connected_players--; - if (current_packet.connected_players < 0) { + if (current_packet.connected_players > MAX_PLAYERS) { current_packet.connected_players = 0; } @@ -420,7 +434,7 @@ int main(int argc, char *argv[]) { // Store player player into the respective Index if (update.carID < MAX_PLAYERS) { - players[update.carID].isConnected = 0; // Mark disconnected + players[update.carID].isConnected = 0; // Mark disconnected players[update.carID].isLoading = 0; } update_api_packet(trackInfo, players); @@ -457,6 +471,10 @@ int main(int argc, char *argv[]) { players[update.carID].carGear = update.carGear; players[update.carID].carRPM = update.carRPM; players[update.carID].normalizedSplinePos = update.normalizedSplinePos; + + players[update.carID].isConnected = update.isConnected; + players[update.carID].isLoading = update.isLoading; + players[update.carID].carID = update.carID; } update_api_packet(trackInfo, players); @@ -494,7 +512,22 @@ int main(int argc, char *argv[]) { // Store player player into the respective Index if (update.carID < MAX_PLAYERS) { - memcpy(&players[update.carID], &update, sizeof(carAtributes)); + + players[update.carID].isConnected = update.isConnected; + players[update.carID].isLoading = update.isLoading; + players[update.carID].carID = update.carID; + + strncpy(players[update.carID].driver_GUID, update.driver_GUID, 63); + strncpy(players[update.carID].driver_name, update.driver_name, 63); + strncpy(players[update.carID].driver_team, update.driver_team, 63); + strncpy(players[update.carID].car_model, update.car_model, 63); + strncpy(players[update.carID].car_skin, update.car_skin, 63); + + players[update.carID].driver_GUID[63] = '\0'; + players[update.carID].driver_name[63] = '\0'; + players[update.carID].driver_team[63] = '\0'; + players[update.carID].car_model[63] = '\0'; + players[update.carID].car_skin[63] = '\0'; } update_api_packet(trackInfo, players); @@ -574,7 +607,8 @@ int main(int argc, char *argv[]) { update.carID = read_uint8((const u_int8_t *)buffer, recv_bytes, &offset, &ok); // TEST: Possiblity of lap_time not behing correct - // TODO: Verify with actual server + // TODO: Verify with actual serve + // SOLUTION: Server sends all times, lap_times and lap counts in big-endian format update.lap_time = read_uint32((const u_int8_t *)buffer, recv_bytes, &offset, &ok); update.cuts = read_uint32((const u_int8_t *)buffer, recv_bytes, &offset, &ok); @@ -635,17 +669,35 @@ int main(int argc, char *argv[]) { // TODO: possible iRacing style impact severity system // With X velues and (e.g >5 m/s = 0x, >10 m/s = 2x, >15 m/s = 4x) && Blackflag limits (e.g x17 = DQ) - + + // FIX: read_float doesnt work, but memcpy does... weird... float impact_speed = read_float((const u_int8_t *)buffer, recv_bytes, &offset, &ok); postion world_pos = {0, 0, 0}; - world_pos.x = read_float((const u_int8_t *)buffer, recv_bytes, &offset, &ok); + /* world_pos.x = read_float((const u_int8_t *)buffer, recv_bytes, &offset, &ok); world_pos.y = read_float((const u_int8_t *)buffer, recv_bytes, &offset, &ok); world_pos.z = read_float((const u_int8_t *)buffer, recv_bytes, &offset, &ok); + */ + + memcpy(&world_pos.x, buffer + offset, sizeof(float)); + offset += sizeof(float); + memcpy(&world_pos.y, buffer + offset, sizeof(float)); + offset += sizeof(float); + memcpy(&world_pos.z, buffer + offset, sizeof(float)); + offset += sizeof(float); postion rel_pos = {0, 0, 0}; + /* rel_pos.x = read_float((const u_int8_t *)buffer, recv_bytes, &offset, &ok); rel_pos.y = read_float((const u_int8_t *)buffer, recv_bytes, &offset, &ok); rel_pos.z = read_float((const u_int8_t *)buffer, recv_bytes, &offset, &ok); + */ + + memcpy(&rel_pos.x, buffer + offset, sizeof(float)); + offset += sizeof(float); + memcpy(&rel_pos.y, buffer + offset, sizeof(float)); + offset += sizeof(float); + memcpy(&rel_pos.z, buffer + offset, sizeof(float)); + offset += sizeof(float); printf("\tImpact Speed: %.2f m/s\n", impact_speed); printf("\tWorld Position: X: %.2f Y: %.2f Z: %.2f\n", world_pos.x, world_pos.y, world_pos.z);