Invité UZI-I

Le language SCM

Recommended Posts

Invité UZI-I

Voila je poste ce topic pour vous vous présenter sous une autre forme le language SCM...
Ici seront diffusés plusieurs tuto sur ce language encore mysterieux pour vous mais ne vous inquiéter pas ça va pas durer lontemps...
Pour ce tuto il ne vous faudra aucune connaissance en coding, vous pouvez partir de rien.

Je vais vous livrer un code SCM basic, sans mission. Il sera la base de tout mes tutos !!!

Bon sans plus attendre voici la liste du matériel...

1. Matériel utile :

Sanny Builder : Plus simple que SA Builders ( Vous conprendrez vite en l'utilisant )
GXT Editor : Je vous direz quand l'utiliser car il ne sert que a modifier les texte à afficher dans le jeu...
SA Place manager : Pour prendre les position ou vous allez poser votre véhicule, point de sauvegarde, vie, armure... bref vous m'avez conpris !!!

2. Un SCM Basic :


Faites un back-up de votre main.scm qui se trouve dans le dossier data/script/
Ouvrer le main.scm de votre jeu puis selectionnez tous (ctrl+A) et supprimer... et oui on par de rein. Copier le code suivant et coller le dans la fentre de Sanny Builder, puis lisez les explications pour conprendre comment sa maarche...

{$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 2504.05 -1685.014
Camera.SetAtPos(2504.05, -1685.014, 14.54688)
$PLAYER_CHAR = Player.Create(#NULL, 2504.05, -1685.014, 13.54688)
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 2504.05 -1685.014 13.54688 angle 137.0 unknown 0
016D: restart_if_busted at 2504.05 -1685.014 13.54688 angle 90.0 unknown 0
fade 1 1000
end_thread

Alors voila ci-dessus le code de base qui vous sera demander pour chaque utilisation de mon tuto...
Maintenant expliquons le un peu !!!

DEFINE OBJECTS 0
En dessous de cette commande on définiré les objet que l'on utilise style la disquette du point de sauvegarde...

thread 'MAIN'
Alors cette commandes veut dire que nous allons ouvrir un thread qui ce nomera "main".
Pourquoi "main" ?
Parce que dans un code la fonction main est la fonction qui sera lu en premier par le jeu meme si elle est placé en dernier... Et oui un script sera lu comme vous et moi : de Haut en bas a l'exception de "Main"...
Bon passons...

01F0: set_max_wanted_level_to 6
Cette commande qui est tres explicite :
"set" : modifier
"max_wanted_level_to 6" : Beh maximum niveau de recherche a 6, ce qui veut dire que ici on dit combien "d'étoile" on peut avoir durant le jeu... 0 = pas rechercher.

00C0: set_current_time 8 0
"set" vous connaissez et current_time c'est le temp actuel donc ici 8Heure lors du spawn du joueur !

set_weather 0
Cette commande sert a gérer la meteo je vous donnerai plus tard le détails de chaque meteo pour le moment on rest a 0 qui est le soleil !!

fade 0 10
Fade est un calque que l'on va appliquer sur l'écran, expliquation :
  • 0 = Du transparent vers le noir
  • 1 = Du noir vers le transparent
  • 10 est le temps en milliseconde que met kle jeu a changé de calque... Vous conprendrez avec le temps

 

select_interior 0
Cette commandes sert a gérer dans quel intérieur on va apparaitre... Une liste sera bientot dispo...
Ici 0 est l'extérieur!

$PLAYER_CHAR = Player.Create(#NULL, 2488.56, -1668.86, 12.87)
La commande ultime qui vous permet d'apparaitre sur la map !!!
Alors on va passer un peu plus de temps ici :
Remplacons les valeur numérique par des valeur alphabetique :

$PLAYER_CHAR = Player.Create(#NULL, X, Y, Z)

X = Valeur X
Y = Valeur Y
Z = Valeur Z

Comment récupérer ces valeurs ?
On va récupérer ces valeur grace a SA Place Manager(lien de téléchargement plus haut)
Lancer l'application puis ensuite lancer votre jeu... aller a l'endroit ou vous voulez récupérer les données X Y Z et revenez sous Windows a l'aide de la touche "windows" de votre clavier ou par tout autre moyen sans fermer le jeu...
La reprenez votre fenetre SA Place Manager et cliquez sur "Add", une nouvelle fenetre s'affiche : Mettez le nom que vous voulez et cliquez sur le bouton "Click here to insert you..."
Revenez a votre jeu et fermer le !!! Vous pouvez voir vos coordonnées X Y Z dans place manager en cliquant sur le nom de votre position... voila
Ici nous apparaissont devant la maison a CJ !

Actor.Angle($PLAYER_ACTOR) = 262.0
Cette commande gere l'angle du joueur lors du spawn sur la map !

016C: restart_if_wasted at X Y Z angle 137.0 unknown 0
016D: restart_if_busted at X Y Z angle 90.0 unknown 0
Ces deux commandes permette la réapparition du joueur si il est chopé ou si il meur a la position X Y Z

Voila je vous en direz pas plus pour éviter de vous embrouiller mais si vous souhaitez avoir plus d'info sur une commande faite votre demande sur ce topic ou par MP !!! voila !!!

end_thread

Les seul truc que vous pourrez modifier sur ce code c'est :
  • La position du joueur lors du spawn
  • L'angle
  • L'heure
  • La meteo

Les positions du spawn si le joueur meurt ou se fait choper


Voila ce qui indique la fin de notre code, la fin de la fonction "Main"

Tuto a venir : Point de sauvegarde...

Comme promis voila le tuto pour poser un point de sauvegarde sur vos map...

Petit rappel sur notre script basic...

Souvenez vous de "DEFINE OBJECTS 0"
Maintenant nous allons utiliser un objet : La disquette de sauvegarde.

Si vous ne le mettez pas dans la ligne DEFINE OBJECTS beh elle apparaitra pas ce qui est génant quand on souhaite sauvegarder... alors voila comment procéder a l'insertion de l'objet dans cette ligne...

DEFINE OBJECTS 2
DEFINE OBJECT (noname) // Object number 0
DEFINE OBJECT PICKUPSAVE // Object number -1

Alors, DEFINE OBJECTS 0 devient DEFINE OBJECTS 2.
Mais pourquoi ?
Tous simplement car nous avons mis deux objets un qui est vide (Je ne sais pas pourquoi encore je sais que le main original contient cet objet vide), et notre disquette de sauvegarde...
Voila, maintenant que nous avons procédé au chargement de notre disquette nous allons la poser dans le jeu et faire quelle réagisse avec le joueur (vous me suivez ?) : si le joueur marche dessus faire...

alors comme d'habitude je vous donne le code et je vous explique !!!

:SAVEPOINT
0001: wait 5000
0213: $866 = create_pickup #PICKUPSAVE type 3 at 2508.955 -1688.581 13.53458
0002: jump @SAVEDONE

:SAVEDONE
0001: wait 1000
00D6: if
0214: pickup $866 picked_up
004D: jump_if_false @SAVEDONE
0001: wait 100
01B4: set_player $PLAYER_CHAR frozen_state 0
03D8: show_save_screen
0001: wait 100
01B4: set_player $PLAYER_CHAR frozen_state 1
0002: jump @SAVEPOINT

Oula ça se complique !!!
Mais non pas du tout...

Oui mais ou mettre ce coode ?
Beh souvenez vous... quelle est la fonction qui tourne en permanence dans le jeu ? Vous vous souvenez plus ? La fonction qui est lu en premiere !!!

Ah la fonction main ?
Oui tout a fait nous allons glisser ce mini script entre la fin de la fonction main : "end_thread" et la derniere commandes de cette fonction (Main)...

Voila tout est fait mais je vais quand meme vous expliquer ce petit code bien utile.

0001: wait 5000
Alors encore un peu de rappel...
Wait c'est la commande "attendre", ici le jeu va attendre 5000ms soit 5 s avant d'executer la suite du code.

0213: $866 = create_pickup #PICKUPSAVE type 3 at 2508.955 -1688.581 13.53458
Et nous voila 5s plus tard sur cette ligne...
Mais kezako !
Beh tout betement c'est la ligne qui va créer le point de save...

Remettons tout ceci en valeur alphabetique...
0213: $866 = create_pickup W type 3 at X Y Z

$866 = Numéro d'identification de l'objet (Nous l'utiliserons plus tard)
W = Le nom de l'objet que l'on va utiliser, préceder de #. Si on remonte un peu plus haut on a mis un truc dans le code : "DEFINE OBJECT PICKUPSAVE". Eh beh ça nous sert ici !!! Et sa donne #PICKUPSAVE
X Y Z = Vous connaissez mantenant pas besoin de vous réexpliqué comment trouver ces valeur !! Et oui c'est la position de la disquette de save !!!

0002: jump @SAVEDONE
La on indique au code d'aller voir ailleur en quelque sorte... d'ou l'expression "jump" (sauter)

Apres avoir "jumper" avec a commande précédente le script arrive a ce qu'on appelle une condition.
00D6: if
CONDITION
004D: jump_if_false @SAVEDONE
CODE A EXECUTER
If en anglais veut dire "si"
Alors si on traduit ce texte "Si" la CONDITION est rempli alors on lance CODE A EXECUTER
Vous conprenez ?
Oui mais que vient faire "004D: jump_if_false @SAVEDONE" en plein milieu ?
Alors si on se souvient de ce que veut dire "jump" et "if", on connait la moitié de cette commande.
"False" en anglais c'est "faux"

En quelque sorte ici on di au script "Si CONDITION est faux va a @SAVEDONE"
Que veut dire "si condition est faux" ?
Tous simplement que si le condition n'est pas executé le script nous renvoie ailleur...
Ne vous préoccuper pas trop de ceci car je referais un tuto consacrer au condition car c'est une partie essentielle du jeu...

0214: pickup $866 picked_up
Ce code nous indique que le pick $866 (notre disquette souvenez vous bien de son numéro d'identification !!!) a été ramassé...

Je n'expliquerai rien de plus car je pense que le reste est assez conpréhensible !!!
Mais n'hésiter pas a relire ou a posez vos question !!!

Voila un petit screen de ma disquette...

http://img141.imageshack.us/img141/6981/gtasagk7.jpg


Tuto a venir : spawn de voiture, armes, divers pick-up (tout ceci étant plus simple qu'un point de save... apres l'éffort le réconfort !!!)
J'attend un epu avant de vous délivrer le prochain tuto. J'attend vos commentaires !!!

Amusez vous bien et dite vous que c'est en trafiquant son code que l'on apprend.

Partager ce message


Lien à poster
Partager sur d’autres sites

Merci beaucoup, enfin une aide claire pour le SCM!!! :D

 

-------------------------------------------------------------------------------------

 

J'ai un problème avec le Place manager, il veut pas fonctionner... Au démarrage, il met "System Error &H8007007E (-2147024770). Le module spécifié est introuvable.". Qu'est-ce que ça veut dire???

 

Help, please!!!

 

Et aussi, est-ce que c'est normal que l'éditeur veuille pas compiler le script de base (il dit qu'il manque des éléments sur certaines lignes)???

 

:D;);)

 

PS : Ton tuto est vraiment pas mal, j'en avais déjà cherché, mais les autres étaient faibles sur d'autres sites...

---------------------------------------

EDIT Punicher: messages combinés. Evite à l'avenir les doubles-post STP.

Merci.

 

-------------------------------------------------------------------------------

 

Okay pour les double-post...

 

J'avais une autre question pour UZI-I... Est-ce que c'est possible de créer des emplacements de sauvegarde à d'autres endroits du jeu, cette fois avec le main.scm d'origine (ou de Lost Angelz), et donc en plus des 535000 et quelques lignes de script existantes???

 

Merci d'av' ;)

-------------------------------------------

EDIT Punicher: messages combinés.

Modifié par Punicher

Partager ce message


Lien à poster
Partager sur d’autres sites
Okay pour les double-post...

 

J'avais une autre question pour UZI-I... Est-ce que c'est possible de créer des emplacements de sauvegarde à d'autres endroits du jeu, cette fois avec le main.scm d'origine (ou de Lost Angelz), et donc en plus des 535000 et quelques lignes de script existantes???

 

Merci d'av' ;)

 

Oui tu peu mais faut savoir ou le metre le mieu c'est que tu repér les autres et tu le met a la suite

 

PS : c'est pas encore sa pour les double post

Partager ce message


Lien à poster
Partager sur d’autres sites

Oki Punicher, j'essaye d'éviter les doubles-post, mais des fois ça se fait tt seul, alors ke j'ai même pas mis "éditer" (mais jme débrouille pr faire gaff qd même).

 

El Barto, est-ce que c'est possible que tu me donne une tite suggestion pr créer un script pr un nouveau lieu de sauvegarde, stp? ;) Et sinon, t'as pas une idée du pourquoi mon Place Manager bug au lancement?

 

J'ai un peu du mal ac les scripts, mais j'essaye de comprendre! :D

Partager ce message


Lien à poster
Partager sur d’autres sites

Pour le script débrouille toi avec le tuto je suis pas un pro du scm

 

Sinn pour ton lace manager essé de le rinstaller ou de le re télécharger

sinn lis le read-me

Partager ce message


Lien à poster
Partager sur d’autres sites
Invité UZI-I

Euh pour le place manager sa a bugger une fois pour moi aussi, ta bien le SP2 ? avec netframework 2.0 ? Sinon il manque un fichier alors Re DL le !

 

Et oui tu peut créer un point de save en plus, mais c'est plus conpliquer dans le script d'origine, étant donner que R* le disperse un peu partout, en plus il faut créer le thread alors...

 

Voila,

 

 

PS : Pour le pseudo tu t'est pas foulé lol !

 

PS 2 : Euh je peut plus éditer mon post pour récupérer le code de mon tuto pour le poster ailleur alors is quelque a la soluce ou si un admin peut me le filer par MP merci !

Modifié par UZI-I

Partager ce message


Lien à poster
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant