Vicolaships Posté(e) le 6 octobre 2006 Signaler Partager Posté(e) le 6 octobre 2006 1. Matériel et conaissances nécessaires 1.1 Matériel : Vous aurez besoin de SannyBuilder et de San Andreas 1.2 Conaissances : Vous pouvez très bien partir de rien, moi même n'ayant absolument aucune autre notion de code que le SCM 2. Création d'un SCM basic 2.1 Démarrage : Démarrer SannyBuilder, charger le fichier main.scm contenu dans le dossier */San Andreas/data/script Un chargement va s'effectuer le le main.scm sera chargé, vous pouvez constater la longueur considérable du code (Environ 535.000 lignes). Mais nous n'allons pas travailler sur ce main là, nous allons supprimer l'intégrallité du contenu du fichier (Ctrl + A > Supprimer). Nous allons maintenant inserez ce que j'apelle un Main Basic, c'est un code très court qui ne contient aucune missions aucun paquet cachés etc... On à seulement gardé le scrict minimum. {$VERSION 3.1.0000} DEFINE OBJECTS 0 DEFINE MISSIONS 0 DEFINE EXTERNAL_SCRIPTS 0 // Use -1 in order not to compile AAA script DEFINE UNKNOWN_EMPTY_SEGMENT 0 DEFINE UNKNOWN_THREADS_MEMORY 0 //-------------MAIN--------------- thread 'MAIN' 042C: set_total_missions_to 0 01F0: set_max_wanted_level_to 6 00C0: set_current_time 8 0 0997: (unknown) 1339 set_weather 0 set_wb_check_to 0 fade 0 10 select_interior 0 04E4: unknown_refresh_game_renderer_at 2488.5623 -1666.8645 Camera.SetAtPos(2488.5623, -1666.8645, 13.3757) $PLAYER_CHAR = Player.Create(#NULL, 2488.56, -1668.86, 12.87) 07AF: $PLAYER_GROUP = player $PLAYER_CHAR group $PLAYER_ACTOR = Actor.EmulateFromPlayer($PLAYER_CHAR) Camera.SetBehindPlayer Actor.Angle($PLAYER_ACTOR) = 262.0 wait 1 Player.SetClothes($PLAYER_CHAR, "VEST", "VEST", Torso) Player.SetClothes($PLAYER_CHAR, "JEANSDENIM", "JEANS", Legs) Player.SetClothes($PLAYER_CHAR, "SNEAKERBINCBLK", "SNEAKER", Shoes) Player.SetClothes($PLAYER_CHAR, "PLAYER_FACE", "HEAD", Head) Player.Build($PLAYER_CHAR) wait 1 016C: restart_if_wasted at 2027.77 -1420.52 15.99 angle 137.0 unknown 0 016D: restart_if_busted at 1550.6801 -1675.49 14.51 angle 90.0 unknown 0 07FB: set_interior 'MADDOGS' accessible 0 // Madd Dogg's Crib 07FB: set_interior 'MDDOGS' accessible 0 // Madd Dogg's Crib fade 1 1000 Inserez ce code dans le main et compliez (F7), cela permet d'enregistrer votre fichier en quelque sorte. Démarrez une partie (F8 dans Sanny) ou par un racourci (SannyBuilder et le main peuvent rester ouvert). Comme vous pouvez le voir vous commencez près de la maison de CJ et tout est normal sauf qu'il n'y à pas de video d'intro, de missions etc... 2.2 Premiers abords : Nous allons maintenant de tenter de comprendre ce language, tout d'abord on remarque qu'il est en Anglais (logique) donc si vous avez du mal avec l'anglais utilisez un outil de traduction. Prennons les choses dans l'ordre : {$VERSION 3.1.0000} DEFINE OBJECTS 0 DEFINE MISSIONS 0 DEFINE EXTERNAL_SCRIPTS 0 // Use -1 in order not to compile AAA script DEFINE UNKNOWN_EMPTY_SEGMENT 0 DEFINE UNKNOWN_THREADS_MEMORY 0 > Sans grand interet {$VERSION 3.1.0000} DÉFINIR LES OBJETS 0 DÉFINIR LES MISSIONS 0 DÉFINIR l'utilisation -1 de scripts externes 0 // pour ne pas compiler le manuscrit de D.C.A. DÉFINISSENT UNKNOWN_EMPTY_SEGMENT 0 DÉFINIR UNKNOWN_THREADS_MEMORY 0 On passe à la suite qui va être plus qu'interessante, maintenant je ne fais plus une traduction Google (qui reste limité) mais je la fais moi même. Je ne garde que les lignes que j'ai compris / qui sont importantes 042C: set_total_missions_to 0 01F0: set_max_wanted_level_to 6 00C0: set_current_time 8 0 set_weather 0 fade 0 10 select_interior 0 $PLAYER_CHAR = Player.Create(#NULL, 2488.56, -1668.86, 12.87) $PLAYER_ACTOR = Actor.EmulateFromPlayer($PLAYER_CHAR) Camera.SetBehindPlayer Actor.Angle($PLAYER_ACTOR) = 262.0 wait 1 Player.SetClothes($PLAYER_CHAR, "VEST", "VEST", Torso) Player.SetClothes($PLAYER_CHAR, "JEANSDENIM", "JEANS", Legs) Player.SetClothes($PLAYER_CHAR, "SNEAKERBINCBLK", "SNEAKER", Shoes) Player.SetClothes($PLAYER_CHAR, "PLAYER_FACE", "HEAD", Head) Player.Build($PLAYER_CHAR) wait 1 016C: restart_if_wasted at 2027.77 -1420.52 15.99 angle 137.0 unknown 0 016D: restart_if_busted at 1550.6801 -1675.49 14.51 angle 90.0 unknown 0 07FB: set_interior 'MADDOGS' accessible 0 // Madd Dogg's Crib fade 1 1000 042C: set_total_missions_to 0 042C : C'est le préfixe du code, parfois il n'y est pas car SannyBuilder raccourci l'Opcode set_total_mission_to 0 : Il n'y a aucune mission 01F0: set_max_wanted_level_to 6 : Le niveau maximal de recherche est de 6 (si la valeur est à zero on ne peut plus avoir de police au trousses) [...] fade 0 10 : Fade = fondu, un fondu c'est quand on passe du transparent vers une couleur, d'une couleur vers du transparent ou d'une couleur vers du transparent. C'est une sorte de calque qu'on rajoute par dessus l'écran. Un fade 0 sera un fondu qui ira du transparent vers le noir. Un fade 1 sera un fondu qui ira du noir vers le transparent (par défault). La deuxième valeur est exprimé en milisecondes (1000 ms = 1s) fade 0 10 : Fondu du transparent vers le noir en 10 milisecondes fade 1 1000 : Fondu du noir vers le transparent en 1 seconde [...] $PLAYER_CHAR = Player.Create(#NULL, 2488.56, -1668.86, 12.87) $PLAYER_CHAR = Joueur (nous) Cet opcode détermine l'endroit ou vous apparaitrez dans le jeu, les coordonées se font suivants les axe X Y et Z. (Dans l'exemple on apparaissera devant la maison de CJ) [...] 016C: restart_if_wasted at 2027.77 -1420.52 15.99 angle 137.0 unknown 0 016D: restart_if_busted at 1550.6801 -1675.49 14.51 angle 90.0 unknown 0 Wasted = Mort Busted = "Choppé" -- De cette facon, la plupart des Opcodes sont compréhensibles, même si certains restent de mystères pour vous et aussi pour moi. (Vous pouvez toujours me demander par MP au cas ou je saurais) -- Les valeurs de temps sont exprimées en milisecondes. Opcode = Syntaxe d'une ligne, action ou constation, ensembles de toutes les choses possibles dans San Andreas. By Vicolaships ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ Une suite est à venir, en attendant, j'aimerais avoir des commentaires. Mais si vous prenez le droit de critiquer mon tutorial, alors vous prenez le devoir d'expliquer pourquoi. Cela dit, dire que c'est bien fait toujours plaisir... Merci d'avance ! Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Brezho Posté(e) le 6 octobre 2006 Signaler Partager Posté(e) le 6 octobre 2006 Déjà merci pour ce tuto, c'est très clair, je suis d'accord qu'on le déplace dans la partie tuto, mais je ne sais plus comment le faire. :-/ Ton explication est très claire, simple et efficace, j'ai tout pigé, donc on peut dire que n'importe qui devrait y arriver. J'aurais cependant aimé un peu plus d'explication en ce qui concerne : select_interior 0 Player.SetClothes($PLAYER_CHAR, "VEST", "VEST", Torso) J'ai pigé que c'est la veste qu'il a, mais je ne pige pas vraiment comment et d'où viennent les variables et qu'on termine en validant sa tenue par Player.Build($PLAYER_CHAR) Vala, vivement la suite! Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Vicolaships Posté(e) le 6 octobre 2006 Auteur Signaler Partager Posté(e) le 6 octobre 2006 select_interior 0 Cet Opcode veut dire : Choisir interieur 0 c'est a dire dehors, chaque batiment a un numero d'gnterieur. Donc si tu teleportes ton joueur dans un batiment il ne faut pas oublier de charger l'interieur batiment ou sinon ca affichera que dehors et tu marcheras sur des objets non affiches. Pour avoir ce genre de renseignements il faut fouiller dans data, par exemple on peut trouver les IDs vehicule etc... Bin je pense que ce dernier opcode fait juste la liaison entre les elements. Merci ! Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
dedepc Posté(e) le 7 octobre 2006 Signaler Partager Posté(e) le 7 octobre 2006 Merci pour avoir encore raccourci mon main.scm basic ! mais je tient à signaler que les coders ne pourrons plus utiliser des opcodes du genre : Créer un objet Créer un pickup (vies,étoiles,...) Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Vicolaships Posté(e) le 7 octobre 2006 Auteur Signaler Partager Posté(e) le 7 octobre 2006 Merci pour avoir encore raccourci mon main.scm basic ! mais je tient à signaler que les coders ne pourrons plus utiliser des opcodes du genre : Créer un objet Créer un pickup (vies,étoiles,...) Si mais il faut juste rajouter la définition de l'objet, ca fait quand même économiser 300 lignes Je pense que mon deuxième tutorial sera publié ce soir, le thème sera : Création d'une mission simple Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
mimiduchat Posté(e) le 8 octobre 2006 Signaler Partager Posté(e) le 8 octobre 2006 http://forum.macreators.com/index.php?showtopic=4777 :bye: Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Masta Posté(e) le 9 octobre 2006 Signaler Partager Posté(e) le 9 octobre 2006 merci, tranquillement je vais commencer à jouer avec le main.scm, cela semble intéressant et pas trop compliqué. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Vicolaships Posté(e) le 10 octobre 2006 Auteur Signaler Partager Posté(e) le 10 octobre 2006 merci, tranquillement je vais commencer à jouer avec le main.scm, cela semble intéressant et pas trop compliqué. Salut ! Cool ca fait un codder de plus Si t'as besoin d'aide envoie moi un MP/Mail ou rajoutes moi à tes contacts MSN ya pas de problème Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Vicolaships Posté(e) le 11 octobre 2006 Auteur Signaler Partager Posté(e) le 11 octobre 2006 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 500 wait 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 mission ... A venir... -- La partie 2 du tutorial est a venir, mais c'est très long de faire ce genre de chose (j'y ai passé mon mercredi après midi). Si vous avez repéré quelque chose de fau, dites le moi par MP que je corrige ca dans le tutorial que j'enverai à Mimiduchat en entier plus tard. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Masta Posté(e) le 11 octobre 2006 Signaler Partager Posté(e) le 11 octobre 2006 ça l'air bien, ça se complique un peu, jai pas encore vraiment testé, jai pas beaucoup de temps de libre. j'ai hâte d'essayer tout ça Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Vicolaships Posté(e) le 14 octobre 2006 Auteur Signaler Partager Posté(e) le 14 octobre 2006 ça l'air bien, ça se complique un peu, jai pas encore vraiment testé, jai pas beaucoup de temps de libre. j'ai hâte d'essayer tout çaSi t'as un problème hésite pas à poser de questions. Autrement ce que je voulais savoir c'est si vous préferiez la présentation du premier tutorial ou du second ? (C'est pas facile à présenter mine de rien...) Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
novservant Posté(e) le 19 octobre 2006 Signaler Partager Posté(e) le 19 octobre 2006 salut, BRAVO ! :clap: pour ces tutos jusqu'ici j'ai tout compris (enfin je croit ) en plus cé tout très bien expliqué et bien organisé. Encore bravo ! Puisque tu voulait le savoir je trouve que le second tutorial est mieux au niveau de la présentation. Tu fait comme tu veut de moment qu'on arrive à comprendre Continu comme ça car il me tarde la suite pour faire du contenu dans les missions. Pour l'instant j'ai essayé de comprendre comment on fait les développeurs de GTA mais j'ai rien pigé à leur code. Ils sont pas logique ou alors cé moi qui le suis pas Bonne continuation... Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Vicolaships Posté(e) le 20 octobre 2006 Auteur Signaler Partager Posté(e) le 20 octobre 2006 Continu comme ça car il me tarde la suite pour faire du contenu dans les missions. Pour l'instant j'ai essayé de comprendre comment on fait les développeurs de GTA mais j'ai rien pigé à leur code. Ils sont pas logique ou alors cé moi qui le suis pas Bonne continuation... Salut ! Merci, bin je présenterais mes prochains tutoriaux à la facon du 2e. Moi aussi je trouve que les codes sont parfois pas très logiques, mais ya pas besoin d'atteindre leur niveau pour faire une mission assez complexe... PS: Bienvenue sur Macreacity 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.