GTAOnline.net

San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Showroom SA:MP => Discussion démarrée par: Ssk le 14 Juillet 2010, 19:02:31

Titre: [FS] Ejection
Posté par: Ssk le 14 Juillet 2010, 19:02:31
Un petit FS, qui permet de poser des zones où on sera éjecté.



La présentation sur les vidéos, la qualité est bizarre, mais bon ^^

http://fr.xfire.com/video/309346/ (http://fr.xfire.com/video/309346/)

http://fr.xfire.com/video/30938b/ (http://fr.xfire.com/video/30938b/)

Lien sur Pastebin (http://pastebin.gtaonline.fr/pastebin.php?show=841)
Titre: Re : [FS] Ejection
Posté par: Nesik le 14 Juillet 2010, 19:42:56
GG c'est trop fort mas bon pas sur que sur les RP ça soit très recommandé !!
Titre: Re : [FS] Ejection
Posté par: D0os-Nox le 14 Juillet 2010, 20:30:33
Bonjour, Très original comme idées de FS, mais il y a quelque souci qui géne un peu :

- Une fois que on est éjecter dans les air, il est impossible d'y sortir, donc forcément une commande de téléportation s'impose !

J'imagine qu'il soit facile d'en remédier autrement (( A moins que tu veuille le modifier à ta manière, Sinon je suis prenable  ;) ))


 :happy D0os-Nox   :closedeyes
Titre: Re : Re : [FS] Ejection
Posté par: Ssk le 14 Juillet 2010, 20:33:33
Bonjour, Très original comme idées de FS, mais il y a quelque souci qui géne un peu :

- Une fois que on est éjecter dans les air, il est impossible d'y sortir, donc forcément une commande de téléportation s'impose !

J'imagine qu'il soit facile d'en remédier autrement (( A moins que tu veuille le modifier à ta manière, Sinon je suis prenable  ;) ))


 :happy D0os-Nox   :closedeyes

Béh si tu met une force d'éjection non nul le joueur sera éjecté ^^

(En faites j'avais codé ça pour un truc d'explosion donc c'est parfait pour les RP, ta une voiture qui pète tu crée la zone pour 1 seconde ce qui sont à coté décolle et tu supprime la zone =)

Merci Gz' <3 loul
Titre: Re : [FS] Ejection
Posté par: D0os-Nox le 14 Juillet 2010, 20:47:25
RE : Tu n'a pas trop compris ce que je voulait dire Sasuke  :-[

Citer
J'aurais juste une suggestion, enfin j'ai pas regardé ton code vraiment donc je ne sais pas si ça y est déjà, mais sur les vidéos je ne l'ai pas vu : pouvoir donner  un angle, et lorsque le joueur serait éjecté, changer les vecteurs Z, mais également X et Y en fonction de cet angle pour qu'il soit éjecté dans le sens inverse du point d'éjection (je ne sais pas si tu as bien compris).

Non, Voilà ce que je penser faire lors que le joueur est éjecter dans les air  :)


 :happy D0os-Nox  :closedeyes
Titre: Re : [FS] Ejection
Posté par: Ssk le 14 Juillet 2010, 20:49:34
ça je l'ai dans un autre FS lol, c'est pour faire genre les speedboost de trackmania,

Mais en faite moi je fais quoi,

J'éjecte le joueur du centre de la sphère que l'ont crée, avec l'angle suivant la position de la sphère et du joueur.

Un schéma serai mieux ^^

EDIT: Voila dans la vidéo

http://fr.xfire.com/video/30938b/ (http://fr.xfire.com/video/30938b/)
Titre: Re : [FS] Ejection
Posté par: D0os-Nox le 14 Juillet 2010, 21:24:37
RE : Voilà, Je trouve c'est plus pratique comme sa  :D

Maintenant =, j'ai une autre suggestion :

- Il fraudait une autre commande pour faire genre une bombe atomique qui ferai envoler tout les joueur connecté dans les air mais le problème c'est que tout le monde resterai dans les air jusqu'à qu'il arrive à la limite (( Genre dans le Pole Nord ^^ ))

Je pense que un timer de 3 seconde max serai parfait  :)


 :happy D0os-Nox  :closedeyes
Titre: Re : Re : [FS] Ejection
Posté par: Ssk le 14 Juillet 2010, 21:46:33
RE : Voilà, Je trouve c'est plus pratique comme sa  :D


Béh il est comme ça le FS depuis le début


Sinon pour la bombe atomique tu peut le codé en faisant une zone a la position 0 0 0 et avec un radius de 50000 ^^
Titre: Re : [FS] Ejection
Posté par: Aegoss le 14 Juillet 2010, 21:49:04
Sur le jeu, il n'y avait pas moyen de faire une sorte de trampoline comme, j'ai déjà jouer sur un serveur ou y'avait le même principe y'a bien deux ans.
Titre: Re : Re : [FS] Ejection
Posté par: Ssk le 14 Juillet 2010, 21:50:20
Sur le jeu, il n'y avait pas moyen de faire une sorte de trampoline comme, j'ai déjà jouer sur un serveur ou y'avait le même principe y'a bien deux ans.

En faite le vrai principe du FS se trouve dans la seconde Vidéo ^^
Titre: Re : Re : [FS] Ejection
Posté par: Ssk le 14 Juillet 2010, 23:09:48
RE : Tu n'a pas trop compris ce que je voulait dire Sasuke  :-[

Citer
J'aurais juste une suggestion, enfin j'ai pas regardé ton code vraiment donc je ne sais pas si ça y est déjà, mais sur les vidéos je ne l'ai pas vu : pouvoir donner  un angle, et lorsque le joueur serait éjecté, changer les vecteurs Z, mais également X et Y en fonction de cet angle pour qu'il soit éjecté dans le sens inverse du point d'éjection (je ne sais pas si tu as bien compris).

Non, Voilà ce que je penser faire lors que le joueur est éjecter dans les air  :)


 :happy D0os-Nox  :closedeyes

Comme cela ?

http://fr.xfire.com/video/3097e5/ (http://fr.xfire.com/video/3097e5/)
Titre: Re : [FS] Ejection
Posté par: S!m le 15 Juillet 2010, 00:56:33
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++
Titre: Re : [FS] Ejection
Posté par: Mr_C30 le 15 Juillet 2010, 02:28:08
j'ai pas trop compris ; ya moyen avec ton fs de faire des zone interdite et d'être éjecter ;mais exactement de même façon qu'un worldbound ? moins violente :S ^^


++
Titre: Re : [FS] Ejection
Posté par: Ssk le 15 Juillet 2010, 12:37:02
Ok, merci de tes suggestions Sim.

Mais en faites au départ ce script n'étais pas vraiment fait pour le partage, pour cela que j'ai change le MAX_PLAYERS ^^


Sinon, pour ton calcule, je pense que faire avec les angles, et avec une division par la distance horizontal, et un peu la même chose niveau vitesse d'exécution ?

Je testerai avec un benchmark (Deux petit GetTicketCounts() ^^ ).

@ Gz': Béh comme je le disais, ça servirai plutôt pour émuler un souffle d'explosion, ou un truc dans le genre, mais on peut toujours modifier le script pour en faire des pavé, au lieu de Sphère ^^


@ C30: Ouais c'est une genre de WorldBoundarie local, en forme de sphère ^^