Madjor Fix: New Player data overwrites old/connected players

This commit is contained in:
Afonso Clerigo Mendes de Sousa 2025-10-29 20:24:56 +00:00
parent 48091f826e
commit 32b496b596
2 changed files with 60 additions and 8 deletions

Binary file not shown.

View File

@ -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);