Salut,
très beau script, bravissimo sasuke
par contre, j'ai un commentaire/suggestion qui pourrait permettre de rendre le script + efficace (moins de calculs quoi...)
concernant le coeur du script:
public CheckEjectZone();
public CheckEjectZone()
{
float x = 0.0; float y = 0.0; float z = 0.0;
for( int i = 0; i < MAX_PLAYERS; i++ )
{
if( !IsPlayerConnected( i )){continue;} // On recommence la boucle si le joueur " i " n'est pas connecté
for( int a = 0; a < MAX_EJECTION_ZONE; a++)
{
if( !IsEjectionZoneCreated( a )){continue;}
GetEjectionZonePos( a, x, y, z );
if( IsPlayerInRangeOfPoint( i, GetEjectionZoneRadius( a ), x, y, z ))
{
float ax = 0.0; float ay = 0.0; float az = 0.0;
float angle = 0.0;
GetPlayerPos( i, ax, ay, az );
angle = atan2(y - ay, x - ax );
float force = GetEjectionZoneForce( a );
if( IsPlayerInAnyVehicle( i ) )
{
SetVehicleVelocity( GetPlayerVehicleID( i ),force * floatsin(angle, degrees) ,force * floatcos(angle, degrees) , 1 );
}
SetPlayerVelocity( i,force * floatsin(angle, degrees) ,force * floatcos(angle, degrees) , 1 );
}
}
}
}
Tu aurais pu éviter d'utiliser un angle en trouvant la norme de la distance entre le joueur et le centre de la zone. Ensuite suffit de diviser (x - ax) par la norme et (y - ay) par la norme aussi.
En gros le code deviendrais:
public CheckEjectZone();
public CheckEjectZone()
{
float x = 0.0; float y = 0.0; float z = 0.0;
for( int i = 0; i < MAX_PLAYERS; i++ )
{
if( !IsPlayerConnected( i )){continue;} // On recommence la boucle si le joueur " i " n'est pas connecté
for( int a = 0; a < MAX_EJECTION_ZONE; a++)
{
if( !IsEjectionZoneCreated( a )){continue;}
GetEjectionZonePos( a, x, y, z );
if( IsPlayerInRangeOfPoint( i, GetEjectionZoneRadius( a ), x, y, z ))
{
float ax = 0.0; float ay = 0.0; float az = 0.0;
float norme = 0.0;
GetPlayerPos( i, ax, ay, az );
ax -= x;
ay -= y;
norme = floatsqroot(ax * ax + ay* ay);
ax /= norme;
ay /= norme;
float force = GetEjectionZoneForce( a );
if(IsPlayerInAnyVehicle(i))
{
SetVehicleVelocity( GetPlayerVehicleID(i),force * ax ,force * ay , 1 );
}
else
{
SetPlayerVelocity( i,force * ax ,force * ay , 1 );
}
}
}
}
}Il faudrait vérifier si ce code est plus rapide (et encore, ce sera minime). Mais, il évite de passer par les angles.
Aussi j'ai vu que tu remplaçais MAX_PLAYERS par GetMaxPlayers(). Je préfère ne pas faire ça car cela peut invalider la déclaration de variables (tableaux pour joueurs mais bon...), surtout que dans tes boucles tu appèle cette fonction à chaque itération.
++Sim++