ikkentim / SampSharp

A framework for writing game modes for SA-MP in C#. SA-MP is a free Massively Multiplayer Online game mod for the PC version of Rockstar Games Grand Theft Auto: San Andreas.
https://sampsharp.net
Apache License 2.0
210 stars 42 forks source link

Bug when get Component values in GameModeExit #419

Closed joaoseidel closed 2 years ago

joaoseidel commented 2 years ago

When trying to get a component value inside GameModeExit event with IEntityManager, those values are always 0, at least with Vehicles entities.

Eg.:

[Event]
public void OnGameModeExit(IEntityManager entityManager)
{
    var vehicles = entityManager.GetComponents<Vehicle>();
    foreach (var vehicle in vehicles)
    {
        Console.WriteLine(vehicle.Health);  // always return 0
    }
}
ikkentim commented 2 years ago

I've tested this with this system: https://github.com/ikkentim/SampSharp/blob/master/src/TestMode.Entities/Systems/IssueTests/Issue419VehicleHealthOnGmx.cs

It seems to work just fine on both samp-server and open.mp.

I've tested it with GMX, how are you testing this?

joaoseidel commented 2 years ago

Yes, on GMX works, the problem only occurs when shutting down. Is that the correct behavior?

ikkentim commented 2 years ago

I've verified this is a bug with open.mp. Here's the simplest reproduction case for this:

#include <a_samp>

main() return;

new vid;

public OnGameModeInit()
{
    vid = CreateVehicle(520, 2109.1763, 1503.0453, 32.2887, 82.2873, -1, -1, 60);
    return 1;
}

public OnGameModeExit()
{
    new Float:h;
    GetVehicleHealth(vid, h);
    printf("health:  %f", h); // prints "health: 0" in open.mp, "health: 1000" in sa-mp
    return 1;
}

You can create an issue in the open.mp repo if you'd like to get this fixed.