Aller au contenu

[tuto]création D'une Mission Simple


Messages recommandés

Créér une mission simple

 

Ce tutorial est la suite du tutorial "Le language SCM". Il est conseillé de l'avoir lu pour pouvoir faire ce tutorial.

 

1. Création du SCM

  • Démarrez Sanny Builder
  • Crééz un SCM Basic (cf: tuto précédent)
  • Il va falloir ajouter une mission, c'est à dire un marqueur rouge de début de mission, mais aussi du contenu et une fin.
2. Création de la mission
  • Pour créér une mission, nous n'allons pas utilisez la ligne "DEFINE MISSIONS 0" et créé une mission comme dans le jeu, car pour certaines choses le jeu bug (je ne sais pas pourquoi), le genre de bug peut être par exemple lors de la création d'un personnage, on veut en créér un seul et le jeu en créér 3 :ph34r: (Ce qui entraine des bugs si vous dites à celui de monter dans un véhicule)

     

  • Nous allons tout simplement mettre notre mission (ou script) juste derrière le main et entre le "end_thread" qui signale la fin de lecture (si la mission est mise après elle ne sera pas lue).

     

    Mais on ne va pas mettre notre mission comme ca, entre 2 paragraphes, il va falloir créé ce que l'on appelle un "Label". Pour le créér, rien de plus simple > ":Nomdulabel123" (Lettres et chiffres acceptées).

    Pour une meilleur relecture on l'appellera : ":Mission01"

     

  • Pour créér une mission avec un marqueur il faut chercher l'ocpode qui permet de créé un marqueur, on pourrait chercher "marker" qui serait logique mais dans cas ce n'est pas logique, il faut chercher dans "sphere" jusqu'a trouver la ligne : "03BC: 20@ = create_sphere 2009.0 -1491.30 3.45 5.0"
Note: Pour chercher un Opcode, soit vous faites la combinaison Ctrl + Alt + 2 dans SannyBuilder soit vous faites la recherche dans le bloc note en ouvrant le fichier des Ocpodes (contenu dans le dossier de Sanny Builder)
  • Nous allons transformer l'ocpode en ce que j'appellerais un opcode "litéral" qui ne marche pas dans le jeu. Le principe est simple, transformer toutes les valeurs numériques en lettres.

     

    Ce qui donne : "03BC: X@ = create_sphere X Y Z B"

     

    X = Numero du marqueur (/de la sphere)

    X Y Z = Coordonées du marqueur

    B = Rayon de la sphere

Note: Les coordonnées sont toujours notées X, Y et Z qui corresepondent au 3 axes qui permettent de placer un objet dans un espace par rapport à un repère 0
  • Nous allons maintenant transformer l'opcode pour qu'il puisse marcher dans le jeu, un opcode littéral permet seulement d'y voir plus clair quand on ne le comprend pas.

    On prendra :

    X= 1

    X Y Z = 2485.5 -1658.86 12.88

    B = 2.0

Il faut ensuite inserez cette ligne derrière (et à la ligne) ":Mission01" mais avant "end_thread"

On rajouteras aussi un "wait 100" entre le label et l'opcode, dès fois sans le wait le jeu bug...

 

Note: Pour créér des coordonnées, j'utilise SA Place Manager qui est utilie mais il faut lancer le jeu à chaque foi pour créér des coordonées, ce qui est long...

  • Nous avons créé notre marqueur, si vous démarrez le jeu (Coordonnées de création de CJ :2480.0 -1658.86 12.88) et que vous allez dans le marqueur, rien ne se passe, logique...

  • Nous allons maintenant créér une condition, c'est un point essentiel pour coder, si vous ne savez pas créér une condition vous n'arriverez pratiquement à rien...

     

    Voici le mode de fonctionement d'une condition :

     

    :X

    if

    CONDITION

    jf @X

    EXECUTION

     

    X= Nom du label

     

    On créé toujours un nouveau label pour une condition. (on le met à la suite). Si le nom de label est "C123" alors la ligne "jf @Label" deviendra "jf @C123"

     

    En fait si je traduis en français "compréhensible" cela donne : Si la condition est remplie, alors passer à l'execution/ Si la condition est remplie, alors faire les actions.

    Un exemple : Si le joueur marche, alors donner au joueur 100$ (ce qui est un peu bête je le reconnais)

     

  • Maintenant, il faut adapter ce "script" pour qu'il fonctionne sous San Andreas, notre but (ce que vous ne savez pas encore) c'est de créér :

     

    Si le joueur est arreté sur le marqueur (a pied), alors démarrer une mission

    Mais "démarer une mission" c'est un peu simple, cela se traduit par : Fondu vers le noir, destruction du marqueur pendant le fondu, et fondu vers le transparent.

     

    Cela donne en cherchant dans les opcodes (J'ai pas tout mis en litéral)

     

    :Label

    wait 100

    if

    0101: actor A stopped_near_point X Y Z radius B B B' sphere 1

    jf @Label

    wait 250

    fade 0 500wait 1000

    03BD: destroy_sphere X@

    wait 1000

    fade 1 500

     

    A= Acteur dont la condition dépendra

    X Y Z = C'est les coordonées ou on à créé le marqueur

    B B B' = Là vous me direz que c'est bizarre un diamètre avec 3 coordonées. En fait les 2 premières on met la même chose, le dernier ce sera le plan Z (la hauteur) on met donc 10 comme ca même si la coordonée Z qu'on à prise est pas très précise ca marchera.

     

  • Passons aux valeurs numériques : (Même s'il y en avait déjà avant)

    :ConditionMission

    wait 100

    if

    0101: actor $PLAYER_ACTOR stopped_near_point 485.5 -1658.86 12.88 radius 2.0 2.0 10.0 sphere 1

    jf @ConditionMission

    wait 250

    fade 0 500

    wait 1000

    03BD: destroy_sphere 1@

    wait 1000

    fade 1 500

     

    Voilà qui est fait, on insere le label avant le "end_thread" et après le label "Mission01"

     

  • Du début jusqu'ici on obitient le petit (très petit) script suivant :

     

    :Mission01

    wait 100

    03BC: 1@ = create_sphere 2485.5 -1658.86 12.88 radius 2.0

     

    :ConditionMission

    wait 100

    if

    0101: actor $PLAYER_ACTOR stopped_near_point 2485.5 -1658.86 12.88 radius 2.0 2.0 10.0 sphere 1

    jf @ConditionMission

    wait 250

    fade 0 500

    wait 1000

    03BD: destroy_sphere 1@

    wait 1000

    fade 1 500

3. Contenu de la mission
  • Maintenant que nous avons notre début de missions il faut y ajouter du contenu, je vous propose quelque chose de très simple: Un personnage est créé et on doit se battre contre lui, si le joueur tue l'enemi il remporte 500$ et un Uzi et s'il se fait tuer il réapparait avec seulement 50 de vies

     

  • Tout d'abord il va falloir créér l'enemi, on va le créér pendant le fade pour ne pas le voir se créé, voilà la suite d'opcodes :

    Model.Load(#X)

    038B: load_requested_models

    wait 10

    009A: $A = create_actor 23 #X at X Y Z

    Pour savoir quel personnage prendre on va utiliser le fichier peds.ide (GTA SA > Data). On choisira le piéton BALLAS1.

     

    Ce qui nous donnera la suite d'ocpodes :

    Model.Load(#BALLAS1)

    038B: load_requested_models

    wait 10

    009A: $ENNEMI = create_actor 23 #BALLAS1 at 2485.5 -1650.0 13.0

     

  • Maintenant il faut donner à l'acteur une arme et lui dire d'attaquer, pour donner une arme on utilisera la suite d'ocpode suivante :

    Model.Load(#X)

    038B: load_requested_models

    wait 10

    01B2: give_actor $ENNEMI weapon X ammo Z

     

    On charge le model de l'arme avant de l'utiliser sinon l'arme n'apparaitra pas et dès que le joueur essayera de l'utiliser le jeu buggera.

    Pour savoir les noms d'armes on utilise le fichier "[sA] Weapon numbers.txt" fourni avec SannyBuilder (Dossier help)

     

    On donnera a l'enemi une bate :

    Model.Load(#BAT)

    038B: load_requested_models

    wait 10

    01B2: give_actor $ENNEMI weapon 5 ammo 1

     

  • Autant regrouper le tout pour faire plus court et plus lisible, ce qui donne :

    Model.Load(#BALLAS1)

    Model.Load(#BAT)

    038B: load_requested_models

    wait 10

    009A: $ENNEMI = create_actor 23 #BALLAS1 at 2485.5 -1650.0 13.0

    01B2: give_actor $ENNEMI weapon 5 ammo 1

     

  • Maintenant nous allons dire à cet enemi d'attaquer le joueur car pour l'instant il ne fait rien. On crééra aussi un marker sur celui-ci pour voir la cible

    On utilisera l'opcode :05E2: AS_actor $ENNEMI kill_actor $PLAYER_ACTOR

    Il est préférable de le placer après le fade pour ne pas se faire attaquer pendant que l'écran est noir

     

    On utilisera l'opcode : 0187: $MARKER_ENNEMI = create_marker_above_actor $ENNEMI

    On le met avant ou après le fade, comme on veut...

     

    > Ne pas oublier de mettre des "wait 10" ou sinon le jeu buggera

     

  • Maintenant il va falloir faire 2 conditions en même temps, c'est là que ce compliquent les choses...

    Si le joueur tue l'enemi alors mission accomplie et le joueur gagne 500$ et un UZI et s'il se fait tuer il réaparait avec seulement 50 de vies.

     

    On va utiliser la suite d'opcode ci-dessou :

    ...

    Create_thread @Joueur_gagne

    Create_thread @Joueur_perd

     

    :Joueur_gagne

    03A4: name_thread 'GAGNE'

    wait 100

    if

    Actor.Dead($ENNEMI)

    jf @Joueur_gagne

    wait 10

    Marker.Disable($MARKER_ENNEMI)

    wait 1000

    Model.Load(#MICRO_UZI)

    038B: load_requested_models

    wait 10

    01B2: give_actor $PLAYER_ACTOR weapon 28 ammo 1000

    jump @Fin

     

    :Joueur_perd

    03A4: name_thread 'PERD'

    wait 100

    if

    Actor.Dead($PLAYER_ACTOR)

    jf @Joueur_perd

    wait 10

    Marker.Disable($MARKER_ENNEMI)

    00BA: text_styled 'M_FAIL' 5000 ms 1 // Mission ratée !

    wait 10000

    0223: set_actor $PLAYER_ACTOR health_to 50

    wait 500

    jump @Fin

     

    :Fin

    wait 100

    end_thread_named 'GAGNE'

    wait 100

    end_thread_named 'PERD'

    wait 100

    05BE: AS_kill_actor $ENNEMI

     

  • Le create_thread sert à lire plusieurs labels en même temps (d'habitude ils sont lus à la suite). C'est à dire que les labels Joueur_gagne et Joueur_perd seront lus en même temps

     

  • Le jump @Fin sert à ce que si le label Joueur_gagne est activé le label Joueur_perd ne soit pas lu 2 fois. E le label @Fin désactive les deux labels précédents grace à la fonction end_thread_label
Ce tutorial est finni, vous pouvez télécharger le SCM complet ICI et retrouver mes tutoriaux sur Vicolaships Modifié par vicolaships
Lien vers le commentaire
Partager sur d’autres sites

 

Merci beaucoup, ce tutorial j'ai mit environ 2 heures a le faire ! C'est vraiment super long a faire !

 

J'espere qu'il vous servira et que vous le trouvez bien expliqué.

 

J'aimerais bien avoir quelques comentaires, mais pour l'instant les critiques recues sont bonnes :D

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...