Aller au contenu

Sky Diver


Dylan

Messages recommandés

Bonjour/Bonsoir à tous,

J'aimerais refaire la même chose que dans cette vidéo pour Vice City.

Mais je ne trouve pas le moyen de faire se refermer les "portes" a partir du main.scm,

Pour ce qui est de la partie 3D c'est bon, je ne voit juste pas comment "dire" au main.scm de faire se rapprocher ces deux portes.

( screen demain si besoin ).

 

Merci d'avance,

 

Dylan.

Lien vers le commentaire
Partager sur d’autres sites

Mais si, attends un peu une réponse ;)

 

:Objet

$X = 0.0

$Y = 0.0

Model.Load(#AD_FLATDOOR)

038B: load_requested_models

wait 1

0107: $portail = create_object #AD_FLATDOOR at $X $Y 4.0

0177: set_object $portail Z_angle_to 0.0

wait 2000

 

:Near_door

wait 1

if and

00ED: actor $PLAYER_ACTOR 0 near_point $X $Y radius 5.0 5.0 on_foot

not $X >= 5.0

jf @NOT_near_door

$X += 0.03

01BC: put_object $portail at $X $Y 4.0

jump @Near_door

 

:Not_near_door

wait 1

if and

80ED: not actor $PLAYER_ACTOR 0 near_point $X $Y radius 5.0 5.0 on_foot

$X >= 0.0

jf @Near_door

$X += -0.05

01BC: put_object $portail at $X $Y 4.0

jump @Near_door

 

http://www.macreacity.com/topic/33804-les-opcodes-de-sanny-builder/

Lien vers le commentaire
Partager sur d’autres sites

J'ai utiliser cela, juste pour voir si sa fonctionnait bien:

 


:test
wait 1
model.Load(#par)
038B: load_requested_models 
0054: store_player $PLAYER_CHAR position_to $899 $900 $901 
if
00E1:   key_pressed 0 19 
jf @test
0107: $portail = create_object #par at $899 $900 $901
wait 100    
jump @test

 

 

Et a mon grand étonnement, la porte apparaît, mais tombe et passe a travers le sol, pourquoi ? ph34r.gif

 

ps: "par" est le nom de mon objet

 

edit: le fichier de collision est bien la

Modifié par Dylan
Lien vers le commentaire
Partager sur d’autres sites

Déjà vire moi le Model.load et le load req de la boucle ;) Sinon à chaque fois qu'il vérifie la condition, il recharge ton model, étant donné qu'il le fait toutes les millisecondes, c'est pas terrible côté optimisation.

Tu le mets juste avant dans un autre label ca règle le problème.

 

Ensuite je sais pas pourquoi ca tombe, essaie avec un autre model voir ce que ca donne. La avec ton script, une porte apparait quand t'appuies sur une touche.

Accessoirement l'opcode : 0054: store_player $PLAYER_CHAR position_to $899 $900 $901 est pas très judicieux seul, tu spawn un objet sur le player, le jeu aime pas trop. Pour décaller l'objet utilises un truc du genre:

0009: $899 += 1.0

Lien vers le commentaire
Partager sur d’autres sites

T'es un génie! :P je teste ça :)

 

edit: J'ai tester avec ca:

 


:test_0
model.Load(#par)
038B: load_requested_models 

:test_1
0009: $899 += 1.0
0054: store_player $PLAYER_CHAR position_to $899 $900 $901 
if
00E1:   key_pressed 0 19 
jf @test_1
0107: $portail = create_object #par at $899 $900 $901
wait 100    
jump @test_1

et le jeu bloque au démarrage :(

Modifié par Dylan
Lien vers le commentaire
Partager sur d’autres sites

Un peu de logique voyons, tu essaies d'ajouter 1 à une coordonnée qui n'existe pas encore. Donc première chose j'ai inversé le store et le +1.

Ensuite j'ai mit le store et le 2e opcode dans la 2e partie.

 

Le jeu lis de cette manière: il lit le nom du label, jusqu'au IF, il vérifie la condition, si elle est fausse il repart du nom du label et recommence jusqu'à ce que la condition soit remplie.

Donc toi à chaque fois il store les coordonnées du joueurs, qui servent pas forcément, en les mettant après je JF (jump if false), il ne fera un Store des coordonnées que si la condition est vérifiée (et donc que tu auras besoin de ces coordonnées)

 

J'ai aussi remplacé le store player pos par un store actor pos qui marche beaucoup mieux.

 

:test_0

Model.Load(#AD_FLATDOOR)

038B: load_requested_models

wait 100

 

:test_1

wait 100

if

00E1: key_pressed 0 14 // TOUCHER SAUTER

jf @test_1

00A0: store_actor $PLAYER_ACTOR position_to $x $y $z

0172: $zA = actor $PLAYER_ACTOR Z_angle

wait 10

0009: $x += 1.0

0009: $zA += 90.0

wait 10

0107: $portail = create_object #AD_FLATDOOR at $x $y $z

0177: set_object $portail Z_angle_to $zA

wait 100

jump @test_1

 

A titre indicatif, le jeu créé un objet par défaut à l'angle 0.0. Si tu veux que l'angle de l'objet soit le même que l'acteur, suffit de faire un store angle et un set objet angle (évidement tu définis pas l'angle de l'objet avant de l'avoir créé!)

Lien vers le commentaire
Partager sur d’autres sites

C'est parfait ! Merci beaucoup :P je te tien au courant de l'avancée du projet :)

 

edit: J'ai juste un petit soucis, j'aimerais que les portes se referme, uniquement, si le player est dans la "sphere" ( que j'aurais créé entre les 2 portes). Mais je ne trouve pas l'opcode me permettant de le faire :(

Saurais-tu lequel utiliser ?

Modifié par Dylan
Lien vers le commentaire
Partager sur d’autres sites

Merci beaucoup! mais, j'ai un petit problème avec cette opcode: j'ai voulu tester quelque chose ;

<code>

 

:TEST

Model.Load(#BRASSKNUCKLE)

038B: load_requested_models

wait 100

 

:TEST_0

$PARACHUTE = Pickup.Create(#BRASSKNUCKLE, 1, 75.2059, -812.6706, 90.464)

03BC: $SPHERE1 = create_sphere 99.8955 -798.8403 10.4633 1.0

if and

00E1: key_pressed 0 19

00FE: actor $PLAYER_ACTOR sphere 0 in_sphere 99.8955 -798.8403 10.4633 radius 1.0 1.0 10.0

jf @TEST_0

0055: put_player $PLAYER_CHAR at 76.7232 -810.1667 90.464

wait 1000

jump @TEST_0

</code>

 

Le jeu démarre et se fige tout de suite :(

Modifié par Dylan
Lien vers le commentaire
Partager sur d’autres sites

Ton erreur est malheureusement un peu bête ! En fait dans ta condition :

 

Tu n'as oublié qu'une petite ligne, mais qui est fatale, le jeu vérifie la condition suivant un cycle, il vérifie tous les 10 ms, les 100ms, enfin ce que tu veux ! Encore faut-il lui préciser, sinon il est perdu, ne sait pas tous les combien de temps vérifier et bug.

Si on ne fait que rajouter le WAIT il va répéter tout ce qui est après (le wait) et avant le JF tous les X temps (X étant le temps indiqué dans le wait, ici 200 ms). Or a ce que je sache tu ne veux pas créé une infinité de marqueurs et de parachutes, juste un seul !

 

:Test

Model.Load(#BRASSKNUCKLE)

038B: load_requested_models

wait 100

$PARACHUTE = Pickup.Create(#BRASSKNUCKLE, 1, 76.7232, -810.1667, 90.464)

03BC: $SPHERE1 = create_sphere 99.89 -798.84 28.0 radius 1.0

 

:TEST_0

wait 100

if and

00E1: key_pressed 0 19

00FE: actor $PLAYER_ACTOR sphere 0 in_sphere 99.89 -798.84 28.0 radius 1.0 1.0 10.0

jf @TEST_0

fade 0 500

wait 500

00A1: put_actor $PLAYER_ACTOR at 76.7232 -810.1667 90.464

wait 100

fade 1 400

wait 1000

jump @TEST_0

 

Si j'ai bien comprit, tu veux que quand le joueur marche dans un marqueur, ca lui fasse un saut en parachute, déjà ta technique pour donner le parachute est loin d'être la meilleur, mieux vaut faire un GIVE WEAPON (le parachute est considéré par le jeu comme une arme), je te renvoie à mon joli tutoriel: Créer un saut en parachute

 

Pour la beauté de la chose, je t'ai rajouté des FONDUS (fade en anglais), le principe du fade est simple:

fade A X

A = 0 ou 1, 0 passe du jeu vers le noir, 1 du noir vers le jeu.

X = Durée, plus la durée est longue, plus ca mettra de temps à devenir noir/transparent.

On mets un petit fade avant la téléportation pour pas voir qu'on téléporte (mais pas long), et un petit après pour revenir en douceur. C'est plus agréable visuellement !

 

Et pour finir, j'ai modifié ton opcode PUT PLAYER par un PUT ACTOR (put player ca marche pas, put actor ca marche !)

 

PS: A l'avenir, soit un peu plus patient, laisse moi une semaine pour répondre.

Lien vers le commentaire
Partager sur d’autres sites

Merci infiniment ! Désolé de t'avoir pressé blush.gif

 

Je te tiens ( les autres aussi ) au courant de l'avancée du projet :)

 

 

 

Dylan.

Modifié par Dylan
Lien vers le commentaire
Partager sur d’autres sites

Et oui, c'est à nouveau moi rolleyes.gif

J'ai encore un problème :/

j'en suis a la partie ou le player tombe, et pour declencher le parachute, j'aie fais sa:

 

 

:para_0

thread 'para_0'

model.Load(#MAVERICK)

038B: load_requested_models

jump @para

end_thread

 

:para

thread 'para'

wait 100

0819: $distance = actor $PLAYER_ACTOR distance_from_ground

00A0: store_actor $PLAYER_ACTOR position_to $x $y $z

if and

0020: $distance > 1.0

00E1: key_pressed 0 17

01B8: set_player $PLAYER_CHAR armed_weapon_to 1

jf @para

00A5: $parachute = create_car #MAVERICK at $x $y $z

wait 10

036A: put_actor $PLAYER_ACTOR in_car $parachute

jump @para

end_thread

Seulement sa bug ( comme d'habitude ), enfin, juste le script bug, le jeu, pour sa part, tourne parfaitement ph34r.gif

Ce que je veux dire, c'est que le parachute ne se déclenche pas sad.gif ( ici c'est un hélico je sais, mais ne t'inquiète pas pour ca, la je sais ce que je fait ^^ )

Modifié par Dylan
Lien vers le commentaire
Partager sur d’autres sites

Il y à des choses que je t'ai déjà dit, tu fais pas attention du tout à ce que je te raconte !

 

01B8: set_player $PLAYER_CHAR armed_weapon_to 1

C'est pas une condition ca, ca veut dire que ca CHOISIT l'arme 1, donc ca n'a rien à faire dans le IF AND; je pense que tu voulais vérifier que le joueur à l'arme 1; l'opcode qui fait ca c'est:

02D8: actor $PLAYER_ACTOR current_weapon == 1

 

Pour une question de logique j'ai ajouté une condition, imagine que ton mec est dans le maverick et qu'il appuie sur la touche, les conditions sont réunis, le jeu va recréer un hélico ... Donc il faut bloquer si le joueur est dans un maverick :

80DD: not actor $PLAYER_ACTOR driving_car_with_model #MAVERICK

 

0819: $distance = actor $PLAYER_ACTOR distance_from_ground

Celui là tu as besoin de le renouveler, en fait la valeur $distance ne pas varie pas tant que tu ne l'actualises pas. (on la laisse donc ou elle est !)

 

00A0: store_actor $PLAYER_ACTOR position_to $x $y $z

Je t'ai déjà dit de le mettre juste après le JF, pas besoin de faire enregistrer au jeu ta position à chaque fois qu'il vérifie la condition, il y à besoin de l'enregistrer uniquement quand la condition est vérifiée, tu le mets donc après le JF.

 

Sauf que, le petit problème de ton script c'est qu'il marche sous l'eau, alors si tu veux qu'il marche sous l'eau fais pas la correction dans la suite, mais si tu veux pas que ca marche dans l'eau, il faut que la coordonnée z soit supérieure à 0 (niveau de la mer = 0). Donc il faut que la valeur s'actualise, donc il faut mettre le store entre le label et le IF cette fois ! De cette façon les coordonnées sont actualisés à chaque boucle (mais cette fois c'est justifié).

 

:para_0

thread 'para_0'

model.Load(#MAVERICK)

038B: load_requested_models

wait 10

jump @para

end_thread

 

:para

thread 'para'

wait 100

0819: $distance = actor $PLAYER_ACTOR distance_from_ground

00A0: store_actor $PLAYER_ACTOR position_to $x $y $z

if and

0020: $distance > 1.0

0020: $z > 0.5

00E1: key_pressed 0 17

02D8: actor $PLAYER_ACTOR current_weapon == 1

80DD: not actor $PLAYER_ACTOR driving_car_with_model #MAVERICK

jf @para

0009: $z += 0.5

wait 10

00A5: $parachute = create_car #MAVERICK at $x $y $z

wait 10

036A: put_actor $PLAYER_ACTOR in_car $parachute

jump @para

end_thread

Sous GTA SA ca marche parfaitement :)

 

Si tu comprends pas quelque chose que j'ai fait, n'hésites pas.

Lien vers le commentaire
Partager sur d’autres sites

Je suis vraiment désolé d'être SI LOURD :( Mais bon, comme on dit; c'est en faisant des erreurs qu'on apprend, non ? blush.gif

 

Ce qui m'embête le plus, c'est que, quand je lis ce que toi tu met, tout me parait on ne peut plus logique, et je me demande pourquoi je n'y aie pas penser :(

( le manque d'expérience sans doute rolleyes.gif )

 

Sinon, il y a une chose qui me perturbe : 0009: $z += 0.5

Pourquoi mettre le '+' avant le '=' ? ca signifie '>=' ?

 

edit: Il doit y avoir une erreur dans le script je pense, car rien ne se passe, j'ai beau sauter et appuyer sur la touche '17' le maverick n'apparait pas :(

Modifié par Dylan
Lien vers le commentaire
Partager sur d’autres sites

Le $z += 0.5 ca signifie qu'on prend l'actuelle valeur de Z et on y rajoute 0.5 c'est une façon de pas spawner le maverick pile sur toi (tu peux le supprimer mais ca peux buger de temps en temps)

En gros si $z = 5.0, après l'opcode $z vaut 5.5

 

"<=" c'est une condition, on vérifie qu'une valeur est inférieure ou égale. Mon opcode moi, c'est de l'incrémentation, on rajoute à une variable une valeur.

Comme type de conditions tu as:

 

== : Strictement égal

<= : Inférieur ou égal

not <= : N'est pas inférieure ou égal

 

Yen a d'autres mais avec ca on fait le principal.

 

Peut être que tu sautes pas assez haut, ou que l'opcode "distance from ground" ne fonctionne pas sous GTA VC ! Essaies de désactiver l'opcode distance from ground (tu te places sur la ligne puis tu fais Ctrl + Q) et ré essaies. Le problème vient certainement de là. (un opcode que tu prends dans GTA SA existe pas nécessairement dans GTA VC !)

 

Bye (si t'as des questions hésites pas, c'est pas moi que tu déranges)

Lien vers le commentaire
Partager sur d’autres sites

D'accord, merci beaucoup, je testerais ça directement après les cours.

Bonne journée.

 

edit: J'ai beau désactiver l'opcode, ça ne fonctionne toujours pas :(

Modifié par Dylan
Lien vers le commentaire
Partager sur d’autres sites

Sa y est !!! J'ai réussi :D

 

En faite, il y avait DEUX lignes à retirer ^^'

 

regarde:

 

:para_0

thread 'para_0'

model.Load(#MAVERICK)

038B: load_requested_models

wait 10

jump @para

end_thread

 

:para

thread 'para'

wait 100

//0819: $distance = actor $PLAYER_ACTOR distance_from_ground

00A0: store_actor $PLAYER_ACTOR position_to $x $y $z

if and

//0020: $distance > 1.0

0020: $z > 0.5

00E1: key_pressed 0 17

02D8: actor $PLAYER_ACTOR current_weapon == 1

80DD: not actor $PLAYER_ACTOR driving_car_with_model #MAVERICK

jf @para

0009: $z += 0.5

wait 10

00A5: $parachute = create_car #MAVERICK at $x $y $z

wait 10

036A: put_actor $PLAYER_ACTOR in_car $parachute

jump @para

end_thread

 

 

 

Maintenant sa marche parfaitement! :D encore juste quelque détails à régler ( comme la vitesse de démarrage du véhicule, son poid, ect .. )

Lien vers le commentaire
Partager sur d’autres sites

Pour démarrer les pales de l'hélico instantanément: (pas facile à trouver dans Ctrl + Alt + 2 quand on sait pas quoi chercher...)

0825: set_helicopter $ID instant_rotor_start

 

Pour le poids je vois pas ce que tu veux dire/régler.

 

En fait il suffit de désactiver 1 ligne, celle qui vérifie dans la condition que la hauteur par rapport au sol est supérieure à 1.0. Mais du coup celle d'avant devient inutile, autant la désactiver !

Lien vers le commentaire
Partager sur d’autres sites

Merci! c'est sa que je cherchais, et en parlant du poids, j'entendais par là, qu'il descende moins vite que si l'hélico tombait.

 

edit: l'opcode ne semble pas fonctionner sous gta vc

Modifié par Dylan
Lien vers le commentaire
Partager sur d’autres sites

J'ai voulu essayer quelque chose pour faire en sorte que l'hélico descende lentement, mais une fois que je suis dans l'hélico, après 1 ou 2 petites secondes, je meurt. peux-tu à nouveau m'éclairer ?

 

Je suppose que le problème doit venir du "00A6: destroy_car $parachute" non ?

 

 

 

 

:para_0

thread 'para_0'

model.Load(#MAVERICK)

038B: load_requested_models

wait 10

jump @para

end_thread

 

:para

thread 'para'

wait 100

00A0: store_actor $PLAYER_ACTOR position_to $x $y $z

if and

0020: $z > 12.0

00E1: key_pressed 0 17

02D8: actor $PLAYER_ACTOR current_weapon == 1

80DF: not actor $PLAYER_ACTOR driving

jf @para

0009: $z += 0.5

wait 10

00A5: $parachute = create_car #MAVERICK at $x $y $z

wait 10

036A: put_actor $PLAYER_ACTOR in_car $parachute

wait 10

jump @para_2

end_thread

 

:para_2

thread 'para_2'

04A2: heli $parachute fly_to $x $y $z speed 30

wait 1000

0009: $z += $z - 2.5

if

0020: $z < 10.5

jf @para_2

wait 100

00A6: destroy_car $parachute

jump @para

if

0020: $z > 10.5

jf @para_2

wait 10

jump @para_2

end_thread

 

Autre chose : Comment différencies-tu les opcodes de conditions des autres ?

Modifié par Dylan
Lien vers le commentaire
Partager sur d’autres sites

Je sais pas exactement ce que tu veux faire, mais c'est pas détruire l'hélico qui va ralentir sa chute ?! (et oui, quand tu détruis un véhicule alors que tu est dedans, ca te tue).

 

Ta condition veut rien dire, t'as toujours pas comprit comment on les construisait:

 

:Label

BOUCLE

if

CONDITION

jf @Label

RÉALISATION

En gros, BOUCLE se répète tous le temps tant que la CONDITION n'est pas remplie (si la CONDITION n'est pas remplie, ca boucle à l'infini par défaut).

RÉALISATION c'est ce qui se passe si CONDITION est vraie. (dans n'importe quel autre cas, ca boucle.

Remarque: BOUCLE doit impérativement comprendre au moins un wait sinon ca plante (wait 1 par exemple)

Lien vers le commentaire
Partager sur d’autres sites

Rejoindre la conversation

Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

Chargement
×
×
  • Créer...