Vicolaships Posté(e) le 27 octobre 2006 Signaler Partager Posté(e) le 27 octobre 2006 (modifié) 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 SCMDé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 missionPour 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: 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 sphereNote: 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.0Il 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 5003. Contenu de la missionMaintenant 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_labelCe tutorial est finni, vous pouvez télécharger le SCM complet ICI et retrouver mes tutoriaux sur Vicolaships Modifié le 27 octobre 2006 par vicolaships Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
mimiduchat Posté(e) le 27 octobre 2006 Signaler Partager Posté(e) le 27 octobre 2006 et hop http://forum.macreators.com/index.php?showtopic=4777 :bye: Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Vicolaships Posté(e) le 27 octobre 2006 Auteur Signaler Partager Posté(e) le 27 octobre 2006 et hop http://forum.macreators.com/index.php?showtopic=4777 :bye: 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 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Nisabest Posté(e) le 28 octobre 2006 Signaler Partager Posté(e) le 28 octobre 2006 super génial merci, exactement ce que je recherchais !! :clap: Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés
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.