Jump to content
×
×
  • Create New...

Créer une missions simple


Iskla

Recommended Posts

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 (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: [email protected] = 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: [email protected] = 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 500

wait 1000

03BD: destroy_sphere [email protected]

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 [email protected]

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: [email protected] = 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 [email protected]

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

 

Cordialement

Iskla

Link to comment
  • 3 weeks later...
  • Replies 2
  • Created
  • Last Reply

Top Posters In This Topic

Top Posters In This Topic

  • 2 weeks later...

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now


  • Flux d'Activité

    1. 8

      Canal général

    2. 8

      Canal général

    3. 8

      Canal général

    4. 8

      Canal général

    5. 8

      Canal général

    6. 8

      Canal général

    7. 8

      Canal général

    8. 8

      Canal général

    9. 8

      Canal général

  • Recently Browsing

    No registered users viewing this page.

Important Information

Terms of Use / Privacy Policy / Guidelines / We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.