Bienvenue invité ( Connexion | Inscription )

 
Reply to this topicStart new topic
> [Coding | VCS] Créer un cheat avancé
NRG500
posté Monday 27 November 2006 à 00:35
Message #1


Testeur / Newseur sur LCS & VCS
****

Groupe : Membre
Messages : 829
Inscrit : 28/12/2005
Membre no 54



Créer un cheat avancé pour VCS.



1.Prérequis:


Matériel:
- Une psp.
- CheatDevice et DevHook installés.
- L' iso de ViceCityStories.

Pour continuer ce tuto, vous devez savoir utiliser les outils de CheatDevice, donc je vous conseil de d'abord suivre le tutoriel qui explique comment créer un cheat sur lcs, la partie cheatMaker n'ayant pas été modifiée pour vcs. Accéder au tuto de CheatMaker



2.Syntaxe C:


CheatDevice peut utiliser une syntaxe C assez simplifiée pour faire un cheat plus intéressant. Si vous ne le savez pas, le C est un langage de programmation. Biensûr pour faire les cheats il est assez simplifié. Je vais essayer de vous expliquer tout ce qui est intéressant de savoir sur le C pour l'utiliser dans vos cheats. Il ne vous faut pas de connaissances en C pour pouvoir bien comprendre ce qui suit.

2.1. Les variables:

Les variables sont très importantes pour votre cheat. C'est en faite, une adresse mémoire contenant une valeur. Mais ici, cette adresse mémoir n'a rien a voir avec celles utilisées par vcs, on va seulement les utiliser pour que votre cheat puisse contenire certaines valeurs.


a) Déclarer une variable:

Tout d'abord, avant d'utiliser une variable, vous devez la déclarer. Si vous ne déclarez pas votre variable, CheatDevice ne comprendra pas que s'en est une et affichera une erreur. Pour déclarer votre variable, inscrivez la, suivit de = et de la valeur d'initialisation. Noubliez jamais de terminer chaque instruction par ";" comme toujours dans les cheats. Par exemple, pour créer une varibale argent, qui contiendra le nombre d'argent, ont va déclarer la variable comme cela:

CODE
#cheat testVariables
argent=1000;

Ici j'ai déclaré ma variable en l'initialisant a 1000. Vous voyez qu'il est donc très simple de déclarer une variable, meme si pour l'instant vous n'en voyez pas trop l'utilité. Seulement n'oubliez pas que une fois le cheat activé, il sera comme "lu" a chaque fois, donc a chaque passage dans le cheat, la ligne de déclaration comptera. Cela est assez embetant car si je veux augmenter ma variable plus tard, elle reviendra toujours a 1000 lors du passage suivant. Pour remédier a cela, vous pouvez déclarer vos variable avec le mot clé static.

Cette fois ci, vous n'initialisez plus la variable, mais avec le mot static devant, CheatDevice comprendra directement qu'il s'agit d'une déclaration. Lors du second passage, cette ligne sera simplement sautée et ne comptera plus. Donc voici comment déclarer la variable avec static:

CODE
#cheat testvariables
static argent;

Vous voyez que c'est également très simple.
Rmq: En static, la variable prend automatiquement la valeur de 0 au départ. Dans la première partie de ce tuto on ne s'en servira pas trop, mais elles seront plus utilisées dans les contitions et les boucles que l'on verra plus tard..


b)affecter une variables:

Pour affecter une variable, donc lui donner ou changer sa valeur, vous n'avez qu'à réécrit cette variable, suivit de = et du nombre (comme pour la déclaration). Cela ne vous est donc très facil pour les chiffres, mais nous allons voir maintenant comment affecter une variable avec la valeur d'une adresse mémoir. Cela vous sera très utile pour connaitre par exemple ou se trouve le personnage, ou a quelle vitesse il va.

Pour ce faire, nous allons utiliser une fonction, qui varie un peu suivant le type de valeur. Le mot clé est Get(qui signifie obtenir en anglais), suivit du type de la varibale. Comme vous le savez, il existe 5 types: char, short, long, int, float. Si vous ne vous souvenez plus de cela, allez relire le tuto pour créer un cheat avec lcs. Donc nous avons 5 fontions différentes:

CITATION
getchar
getshort
getlong
getint
getfloat


Donc pour chacune des fonctions, on demande un type de valeur différent. Vous allez donc utiliser la fonction selon le type de valeur que vous traitez. Maintenant que vous connaissez la fonction, vous allez donner l'adresse de la valeur que vous voulez obtenir entre parenthèse.
Donc par exemple: getchar(0x098B7840);

Ceci vous donnera la valeur que contient cette adresse. Vous pouvez mettre cette valeur dans une variable, vitesse par exemple. Ainsi cette variable, variera toujours et donnera la vitesse du personnage. Il vous suffit donc de trouver l'adresse qui contient la vitesse, encor une fois, cela fait référence au tuto pour créer un cheat avec cheatmaker.

Bon voici l'adresse qui détermine la vitesse: pcar + 0x140 et la valeur est un float. Donc, voici comment faire pour récupérer la valeur de l'adresse dans une variable:

CODE
#cheat testvariables

vitesse = getfloat(pcar + 0x140);

la variable vitesse contiendra donc la vitesse du véhicule.
Cette variable sera modifiée constemment, pour avoir a chaque fois une nouvelle valeur, celle de la vitesse.

Il existe des variable que l'on peu utiliser seulement pour qu'elle n'aie que 2 valeurs, 1 ou 0: les booléens. Ces variables seront surtout utilisées dans les conditions que l'on verra plus loin, vous comprendrez pourquoi.
Ces variables sont comme les autres en faite, on peut également exprimer leur 2 valeurs avec 2 variables constantes déja crées(donc pas a les déclarée), true et false. True est l'équivalent de 1 (true veut dire vrai) et false de 0 (false veut dire faux). Pour l'instant elle ne sont pas vraiement utile mais on s'en servira plus loin.


c)opérations sur les variables:

Maintenant nous allons voir les operations que l'on peut faire avec les variables, donc les additionner, soustraire... avec des nombres ou autres variables. Nous allons commencer par les 4 opérations de base: addition, soustration, division et multiplication.



Comme vous le voyez, c'est assez simple et on peut les utiliser avec des chiffres ou bien avec des variables.
Voici quelques exemples:

CODE
#cheat testVariable

vitesse = 50/10;
Dans ce cheat, simplement 2 nombres qui sont divisés. vitesse va donc valoir 5.

CODE
#cheat testVariable

vitesseInitiale = getfloat(pcar + 0x140);
vitesse = vitesseInitiale + 50;
Ici, j'ai utilisé 2 variables, une qui servira a mettre la vitesse initiale donc celle de la voiture en temps normal (en utilisant le getfloat de plus haut) et une autre qui contiendrait la vitesse modifiée. J'ai donc augmenté ma vitesse initiale pour trouver la vitesse finale.

CODE
#cheat testVariable

static coeficientVitesse;

vitesseInitiale = getfloat(pcar + 0x140);
vitesse = vitesseInitiale * coeficientVitesse;
Ici, j'ai repris en partie le cheat précedent, sauf que ici vitesse est égale au coeficient multiplié par la vitesse Initiale. C'est un peu plus compliqué car nous n'utilisons que des variable. On pourait imaginer que coeficient est une valeur déterminée par le joueur. Celui-ci choisirez donc en fonction de la vitesse qu'il veut avoir. Si il choisit 2, la vitesse sera 2 fois plus grande, ...

Rmq: jusqu'ici, on a juste cherché la valeur de la vitesse, mais on a pas encor modifié la vitesse de la voiture. Donc ce code ne fera rien du tout, mais c'est déja une partie qui est faite.


Notez que lorsque vous voulez augmenter une variable de 1, vous pouvez utiliser le ++, par exemple, pour augmenter notre variable vitesse de 1, nous pouvons faire comme ça:

CODE
#cheat testVariable

vitesse ++;
cette partie de code va augmenter de 1 vitesse, cela revient exactement à le noter comme ceci:

CODE
#cheat testVariable

vitesse = vitesse + 1;

C'est juste plus court en utilisant ++.Vous pouvez aussi utiliser -- qui enlève 1 à la variable.

Ces 4 opérations sont les plus utilisées mais il en existe d'autre aussi que vous serez peu être amené a utiliser.
Voici les plus importants:



Il en existe d'autres mais qui sont très peu utilisées voir jamais.


d) Modifier une adresse en utilisant les variables

Vous devez normalement savoir modifier les adresses mémoir par une valeur. pour rappel, on utilise le mot clé Set suivit du type de valeur (un peu comme le get) donc, setchar, setshort, setlong, setint, setfloat.

cette fonction prend 2 parametres, l'adresse a modifier et ensuite la valeur que l'on veut lui donner.
par exemple:

CODE
#cheat testAdresse

setchar(0x098B7840, 0x4E)
Cette ligne va donc mettre la valeur 0x4E à l'adresse 0x098B7840.

Vous pouvez exprimer la valeur soit en hexadécimal comme ici, ou bien en nombre décimaux (utilisez la calculatrice pour les convertions). Vous pouvez aussi mettre des lettres pour les textes: 'A', 'B'... ou aussi des binaires mais c'est très rare.

Normalement, vous connaissez déja ça, maintenant on va voir que l'on peut utiliser les variables pour déterminer la valeur de l'adresse.

Pour cela, vous devez simplement modifier le chiffre par la variable, Je vais prendre l'exemple pour le nombre d'argent, en le fesant augmenter( parce que la vitesse est un peu plus compliquée car ce sont plusieurs vecteur).
donc:

CODE
#cheat testVariable

argentInitial = getint(0x08bde55c);
argent = argentInitial + 1;
setint(0x08bde55c, argent);
Ce cheat fait augmenter continuellement le nombre d'argent, en effet argent initial contient le nombre d'argent que vous possédez. On ajoute 1 pour obtenir le nombre d'argent. Ensuite, on donne a l'adresse du nombre d'argent, la variable argent. Et comme le code est a chaque fois répété, votre somme d'argent monte.

Rmq: Ici j'ai utilisé des variables, pour vous montrer un peu comment elle s'utilisent. mais dans ce genre de code, assez court et simple, on aurez pu directement mettre le getint dans le setint sans avoir besoin de variable:

CODE
#cheat testVariable

setint(0x08bde55c, getint(0x08bde55c) + 1);
Dans ce code, la valeur donnée est getint(0x08bde55c) + 1, donc c'est bien la valeur initiale augmentée de 1. Pour ce genre de code c'est plus simple mais les variables restes très importantes, donc il faut absolumenent savoir les utiliser.


2.2. Les conditions:

a)Utiliser une condition

Les conditions sont très importantes dans votre cheat, c'est meme une des choses les plus importantes. Vous serez amené quasi tout le temps a les utiliser. Les conditions servent a effectuer certaines instructions seulement si la condition est vérifiée. Pour utiliser les conditions, il y a 3 mots clé a utiliser: if(si), else if(sinon, si), else(sinon).
Procédez comme ceci:

CODE
if( la condition )
{
   effectuer les instructions
}
else if( la condition )
{
   effectuer les instructions
}
else
{
   effectuer les instructions
}

Vous devez toujours commencer une condition par un if, il est indispensable. Par contre le else if et le else n'est pas indispensable si vous n'avez qu'une seule condition. Remarquez que vous devez a chaque fois mettre les {} pour délimiter la condition, sauf si elle ne comporte qu'une seule ligne.

Maintenant, la condition que l'on met entre parenthèses, peut en fait se noter avec des égalités ou des inégalités.

Voici les signes que l'on peut utiliser pour exprimer les conditions:



Ce sont géneralement les plus utilisées. Voici un petit exemple de condition:

CODE
#cheat testVariable

static argent;

if(argent <=10000)
{
   argentInitial = getint(0x08bde55c);
   argent = argentInitial + 1;
   setint(0x08bde55c, argent);
}
Danc ce cheat, l'argent ne sera augmenté que si il est plus petit ou égal a 10000 si l'argent vaut plus, les 3 lignes entre les {} sont ignorées et rien ne se passe.

On peut aussi compléter ce cheat pour par exemple faire que lorsque on arrive a 10000, le cheat se désactive tout seul:

CODE
#cheat testVariable

static argent;

if(argent <10000)
{
   argentInitial = getint(0x08bde55c);
   argent = argentInitial + 1;
   setint(0x08bde55c, argent);
}
else
{
   #off;
}
Vous voyez que c'est assez simple, vous pouvez vous entrainer à faire des conditions.


b)Conditions avec plusieurs élements:


Lorsque vous utilisez une condition, vous pouvez avoir a mettre 2 ou plusieurs élements dans votre condition. Géneralement on utilise 2 procédés:



un petit exemple:
je veux que l'argent augmente(je prend a nouveau l'argent parce que c'est simple a voir) lorsque mon argent est inférieur a 15000$ et supérieur a 1000$. Je vais donc devoir combiner 2 éléments dedans:

CODE
#cheat testConditions

static argent;

if(!argent)
argent = 2000;

if(argent<15000 && argent>1000)
{
   argentInitial = getint(0x08bde55c);
   argent = argentInitial + 5;
   setint(0x08bde55c, argent);
}
Donc on déclare la variable argent en static. Ensuite on va l'initialiser donc en utilisant la condition if(!argent). Une fois initialisée a 2000, on peut alors rentrer dans la condition suivante. Si argent est plus petit que 15000 et plus grand que 1000, alors on rentre dans la condition. Attention, faites bien la différence entre "et" et "ou". Avec et, il faut que les 2 soient vérifiés, alors qu'avec ou, si un des 2 est vérifié, on rentre alors dans la condition.


c)Les booléens:

Maintenant si on note une condition comme ceci:

CODE
#cheat testConditions

static argent;

if(argent)
{
   argentInitial = getint(0x08bde55c);
   argent = argentInitial + 1;
   setint(0x08bde55c, argent);
}
La condition sera vérifie si argent est différente de 0 et elle ne sera jamais vérifiée si argent vaut 0. C'est ici qu'intervient les booléens. en effet, si la valeur du booléen vaut 1, la condition sera vérifiée et les instructions exécutées. Si le booléen vaut 0, la condition ne sera pas éxécuter.
Dans l'exemple ici, argent est déclaré en static donc sa valeur de départ est 0. Donc la condition ne sera pas vérifiée.

Les booléens sont donc très utilent pour les conditions lorsque vous devez vérifier si quelque chose existe par exemple ou bien a chaque fois que vous devez vérifier quelque chose sans variable a noter. Vous créez alors un booléen pour vérifier la condition.
Voici un exemple utilisant un booléen, pour que la somme d'argent monte jusque 10000$:

CODE
#cheat testConditions

argentInitial = getint(0x08bde55c);

if(argentInitial<10000)
{
   argentMax = 0;
}
else
{
   argentMax = 1;
}

if(!argentMax)
{
   argent = argentInitial + 10;
   setint(0x08bde55c, argent);
}
Cet exemple est seulement pour bien montrer comment fonctionne les booléen, car il seront important plus tard, mais ce code aurai pu s'écrire plus simplement sans.

Comme vous le voyez, on commence directement a chercher la somme d'argent que l'on possède, en la mettant dans la variable argentInitial. Si cette somme est inférieur a 10000, cela veut dire que l'on peu l'augmenter.

La variable argentMax va donc prendre la valeur 0 (on aurait pu mettre false qui signifie faux. En effet si la somme est plus petite que 10000, on peu encor l'augmenter donc argentMax n'est pas "vrai".) Sinon (c'est que ca vaut plus que 10000), on met argentMax a 1. Ensuite on pose la condition.
Remarquez que j'ai utilisé le ! devant la variable. Le ! signifie "qui n'est pas". Donc cela reviendrait a noter if(argentMax == false) ou bien encor if(argentMax == 0). Ces 3 notations sont pareilles. La 3ème est plus facile a comprendre mais vous pouvez utiliser celle que vous voulez. Enfin, si cette condition est vérifiée, on incrémente l'argent, on lui ajoute 10.

Ce cheat était un peu plus long, mais les booléens sont très important, notemment pour connaitre les
boutons sur lequel le joueur appuie. C'est ce que l'on va voir maintenant.


c) Les boutons et les conditions.

Nous avons vu comment construire une condition, maintenant nous allons voir comment utiliser certaines variables déja crées pour savoir se que le joueur fait, récupérer les informations que la psp reçoit.

Comme je vous l'ai dit, certaines variables existe déja, et varient toute seule pour nous permettre de reçevoir certaines informations, voici la liste:



Vous voyez que les 5 premiers sont des booléens.
Voici un exemple simple qui augmente l'argent lorsque l'on appuie sur un bouton:

CODE
#cheat testConditions

argentInitial = getint(0x08bde55c);

if(buttons)
{
   argent = argentInitial + 10;
   setint(0x08bde55c, argent);
}
Donc dans la condition, on vérifie si buttons existe (différent de 0) et si il existe, on augmente l'argent.

Maintenant que vous savez comment voir si on appuie sur un bouttons, nous allons voir comment savoir
sur quel bouton on appuie. Il existe encor ici une série de booléens pour chaque bouton:



Si le joueur ne fait rien, tout ces booléens valent 0. Si par exemple le joueur appuie sur croix, le booléen CTRL_CROSS prendra automatiquement la valeur 1. Nous devons toujours attachée ces booléens avec ceux vus plus haut. Donc si on met seulement une condition avec if(CRTL_CROSS), ca sera toujours vrai car elle n'est pas liée au fait que l'on appuie sur un boutton. Pour lier les 2, c'est un peu comme on a vu plus haut sauf que l'on va utiliser & au lieu de &&.
Donc pour augmenter l'argent lorsque l'on appuie sur la touche haut:

CODE
#cheat testConditions

argentInitial = getint(0x08bde55c);

if(buttons & CTRL_UP)
{
   argent = argentInitial + 1;
   setint(0x08bde55c, argent);
}
Simplement on combine buttons et CTRL_UP et lorsque l'on appuie sur la touche haut, l'argent augmente.


3.1.Les boucles:

a) Les boucles avec While:


Tout d'abord nous allons voir qu'est ce qu'une boucle. Une boucle c'est lorsque l'on répète les mêmes instructions tant que une condition est vérifiée. Sa structure est donc assez semblable a celle des conditions.

Mais attention, les boucles ici peuvent fortement ralentir le jeu, notemment si on reste trop longtemps dedans. Donc soyez prudent avec, en géneral on peut les utiliser pour initialiser ou changer la valeur de plusieurs adresses. Nous allons d'abord voir les boucles avec le mot clé While qui peut se traduire par "tant que". Voici tout de suite un exemple, d'un code pour les munitions infinies, écrit sans boucle.

CODE
#cheat Infinite Ammo
setint(pplayer+0x5bc,  0x00ffffff);
setint(pplayer+0x5d8,  0x00ffffff);
setint(pplayer+0x5f4,  0x00ffffff);
setint(pplayer+0x610,  0x00ffffff);
setint(pplayer+0x62c,  0x00ffffff);
setint(pplayer+0x648,  0x00ffffff);
setint(pplayer+0x664,  0x00ffffff);

Il faut bien comprendre déja comment fonctionne le cheat. Chaque type d'arme a une adresse qui comporte le nombre de munitions. Il y a 7 types d'armes donc 8 adresses différentes. Donc pour avoir les munitions infinies, on doit mettre les 7 adresses a 0x00FFFFFF une par une. Vous voyez que l'on répete 7 fois presque la même chose et les 7 adresses se suivent. On va donc utiliser un boucle qui va mettre les 7 adresses a 0x00FFFFFF grace a une petite variable.
Voici le cheat que j'ai modifié pour avoir une boucle:

CODE
#cheat testBoucles
i = 0;
while(i<7)
{
   setint(pplayer+0x5BC+i*28,   0x00ffffff);
   i++;
}

Comme vous le voyez le code est beaucoup plus court comme ceci, et pourtant c'est le même. Mes adresses se suivent a intervalle régulier de 28. Donc on a la premiere puis la seconde est égal a la premiere + 28...
On va donc créer une petite variable i qui nous permet de modifier l'adresse lors de chaque passage dans la boucle.

Tout d'abord, la premiere ligne de la boucle, elle signifie que l'on rentre a nouveau dans la boucle lorsque i<7. Jusqu'ici c'est un peu comme une condition. Ensuite dans la boucle, on introduit le setint et comme adresse, on met l'adresse initiale à laquelle on rajoute le i fois 28. Lors de chaque passage, i est augmenté de 1.
Ainsi, si on retrace ce que le cheat lis: il commence a rentrer dans la boucle, puis l'adresse modifiée est pplayer+0x5BC+0*28 donc pplayer+0x5BC. ensuite il incrémente i, qui vaut maintenant 1. Lors du deuxieme passage, on aura comme adresse pplayer+0x5BC+1*28 ce qui vaut setint(pplayer+0x5d8, 0x00ffffff); puis ainsi de suite il va modifier les 7 adresses. Si vous n'avez pas compris, j'ai fait un schéma de ce qui se passe avec ce cheat, ICI.

Entrenez vous a faire quelques boucles mais faite toujours attention a ce qu'elle ne soient pas trop longues. Ici je n'ai que 7 passages dans ma boucle donc ça va. Rappellez vous aussi que le cheat lui même est une sorte de boucle puisqu'il est toujours répété, donc dans certains cas vous n'avez pas besoins de rajouter une boucle. Dans le cas présent, mettre une boucle est intéressant, car une fois les 8 adresses modifiées, il ne rentrera plus dedans et le jeu ne risque plus d'être ralenti.

Faites également attention a ce que la condition mise dans le while ne soit pas toujours vrai, parce que sinon vous aurez une boucle infinie et le jeu freez. Donc veillez bien a ce que la variable qui donne la condition varie dans la boucle (ici i varie puisqu'il est a chaque passage incrémenté).
Nous allons maintenant voir les boucles avec for.


b)Les boucles avec for:

Les boucles avec for sont plus utilisées que celle avec while. En effet elles ont une structure très interessante, notemment pour la variable à modifier. Avec le for, on a non plus une chose a noter dans les parenthèses mais 3:

-L'initialisation de la variable
-La condition à laquelle on reste dans la boucle
-La modification a apporter a la variable lors de chaques passages (souvent incrémenter)

Je vous montre un exemple avec for, le même cheat que plus haut mais avec un for:

CODE
#cheat testBoucles
static i;
for(i=0; i<7; i++)
{
   setint(pplayer+0x5BC+i*28,   0x00ffffff);
}
Avec le for, on a plus a initialiser la variable i a 0, car elle se fait dans la boucle. De la même manière on a plus a noter le i++ dans la boucle car il se met entre parenthèses. C'est donc une autre manière que le while. Le for est spécialement utilisé dans ce cas de figure. Lorsque l'on doit modifier plusieurs ou plusieurs variables, avec une petite variable i par exemple. Et comme je vous l'ai dit, c'est principalement pour cela que l'on utilise les boucles. Cette structure for est donc plus souvent utilisée que avec while.

Mais je vous rapelle de ne pas trop utiliser les boucles, du moins lorsqu'il y a trop de valeurs a prendre. Par exemple si il a 300 adresses a modifier, cela peut fortement ralentir le jeu.
Et vous pouvez dans certains cas vous en passer. Mais il peuvent cependant être quand meme intéressants.

Voila, vous savez partiquement tout sur la programmation avec syntaxe C pour vos cheats. Avec ça, vous pouvez faire de nombreux cheats intéressants. Dans le point suivant, je vais vous montrer quelques exemples de cheats pour que vous puissiez un peu mieux voir comment ils se construisent.



3. Exemples de cheats:

Ici, je vais vous montrer des cheats que vous êtes maintenant capable de faire, avec les commentaires pour vous permette de bien les comprendres. Ainsi vous pourrez voir comment se structure le code.

a)Modifier le niveau de recherche:

Un cheat assez simple, qui était une des fonctions de CheatDevice pour LCS. Il permet de modifier le niveau de recherche en appuiant sur la touche haut et bas + cercle.
Le code:

CODE
#cheat Niveau de recherche
static wanted

/*Si on appuie sur haut et que cercle est enfoncé et que wanted est inférieur a 6
(il n'y a que 6 étoiles), alors on augmente wanted de 1.*/
if ((press & CTRL_UP&&buttons & CTRL_CIRCLE&&Wanted<6))
{
Wanted=Wanted+1;
}
/*Si on appuie sur bas et que cercle est enfoncé et que wanted est superieur a 0,
, alors on diminue wanted de 1.*/
if ((press & CTRL_DOWN&&buttons & CTRL_CIRCLE&&Wanted>0))
{
Wanted=Wanted-1;
}
setint(pplayer+0x00000910,  Wanted); /*on modifie l'adresse du niveau de recherche avec
un nombre "wanted" d'étoiles.*/



b)Se téléporter a certains endroits:

Voici un cheat que j'ai fait et qui permet de se téléporter à certains endroits, mis dans le cheat.
Pour cet exemple j'en ai mis 3, mais on peut sans problèmes en rajouter. Le cheat est un peu plus long mais il n'est pas trop compliqué.
Le code:

CODE
#cheat testcheat
//By NRG500

static id; //on crée une variable id qui contiendra l'id de l'endroit.

if(id<1 || id>4)//Si l'id n'est pas dans la norme, on l'initialise a 1
id = 1;

if(id==1)//Si l'id vaut 1, c'est pour se téléporter chez mendez, on affiche cette phrase.
{
   setshort(0x08e90bd8,   1, ' ', 'T',  'e',  'l',  'e',  'p',  'o',  'r',  't',  'e',  'r',  ' ',  'c',  'h',  'e',  'z', ' ', 'm', 'e',  'n', 'd',  'e',  'z', ' ', '>', ' ',  0);
}
else if(id==2)//Si l'id vaut 2, c'est pour se téléporter dans le stade, on affiche cette phrase.
{
   setshort(0x08e90bd8,   1, ' ', '<', ' ', 'T',  'e',  'l',  'e',  'p',  'o',  'r',  't',  'e',  'r',  ' ',  'd',  'a',  'n',  's', ' ', 'l', 'e',  ' ', 's',  't',  'a', 'd', 'e', ' ', '>', ' ',  0);
}
else if(id==3)//Si l'id vaut 3, c'est pour se téléporter dans l'immeuble près du stade, on affiche cette phrase.
{
   setshort(0x08e90bd8,   1, ' ', '<', ' ', 'T',  'e',  'l',  'e',  'p',  'o',  'r',  't',  'e',  'r',  ' ',  'd',  'a',  'n',  's', ' ', 'l', ' ',  'i', 'm',  'm',  'e', 'u', 'b', 'l', 'e', ' ', 'p', 'r', 'e', 's', ' ', 'd', 'u', ' ', 's', 't', 'a', 'd', 'e', ' ', '>', ' ', 0);
}
else if(id==4)//Si l'id vaut 4, on affiche la phrase quitter, ca sera pour quitter le cheat.
{
   setshort(0x08e90bd8,   1, ' ', '<', ' ', 'Q',  'u',  'i',  't',  't',  'e',  'r', ' ',  0);
}


if((press & CTRL_LEFT) && id>1)//si on presse gauche et que l'id est suppérieur à 1, alors on le désincrémente de 1.
id--;
else if((press & CTRL_RIGHT) && id<4)//sinon, si on presse droite et que l'id est inférieur à 4, alors on incrémente l'id de 1
id++;
else if((press & CTRL_CROSS) && (press & CTRL_LTRIGGER))//sinon, si on appuie sur la croix et sur L, alors...
{
   if(id==1)//si l'id vaut 1, on se téléporte dans l'interieur de la maison de Mendez (l'interieur est sous la terre)( je n'ai pas utilisé la fonction "teleport" car cette fonction met automatiquement le cheat sur off )
   {
      setfloat(pplayer + 0x30, 17.18);
      setfloat(pplayer + 0x34, 1153.21);
      setfloat(pplayer + 0x38, -193.79);
   }
   else if(id==2)//si l'id vaut 2, on se téleporte dans le stade
   {
      setfloat(pplayer + 0x30, -1556.21);
      setfloat(pplayer + 0x34, 1260.59);
      setfloat(pplayer + 0x38, -234.75);
   }
   else if(id==3)//si l'id vaut 3, on se téleporte dans le batiment.
   {
      setfloat(pplayer + 0x30, -930.23);
      setfloat(pplayer + 0x34, 1330.36);
      setfloat(pplayer + 0x38, 75.18);
   }
   else if(id==4)//si l'id vaut 4, on quitte le cheat grace a l'instruction off();
   {
      off();
   }
}


c) dégradé de couleur:

Ce cheat est un peu plus compliqué a comprendre, en faite les couleurs de la voiture dans laquelle on est changent en faisant un degradé. Pour comprendre le cheat, il faut savoir qu'il y a 3 couleurs qui composent la couleur de la voiture: le rouge, le vert et le bleu. chaque couleur varie entre 0 et 255. Il y a donc 3 adresses mémoires, une pour chaque couleur, dont la valeur détermine la quantité de couleur.

Pour avoir un beau dégradé, on va passer d'une couleur a l'autre, en augmentant une tandis que l'autre diminue.
Les couleurs changeront comme ceci: rouge->vert->bleu->rouge.. et ainsi de suite. Donc nous démarrons avec le rouge a 255 et le reste a 0 .Ensuite, porgessivement le rouge va descendre et le vert augmenter. Arrivé a 255, le vert diminuera et ce sera le bleu qui augmente et ainsi de suite. Nous allons donc utiliser aussi des booléens pour savoir si on doit monter ou descendre.
Voici le code:

CODE
#cheat Degrade de couleur
//By NRG500

// on déclare les variables
static r;//la quantité de rouge
static rPlus;//un booléen qui vaut 1 si on doit augmenter la valeur r
static v;//la quantité de vert
static vPlus;//un booléen qui vaut 1 si on doit augmenter la valeur v
static b;//la quantité de bleu
static bPlus;//un booléen qui vaut 1 si on doit augmenter la valeur b

/* pour initialiser chaque variable de couleur on vérifie si elle sont toutes à 0,
si oui c'est que c'est la première fois que l'on rentre dans le cheat donc on initialise
rouge a 255 et les 2 autres a 0.*/
if(!r && !v && !b)
{
   r=255;
   v=0;
   b=0;
}

/*de la même manière, si les booléens sont tous a 0, on les intitialises: rPlus est a 0 (car au début r vaut 255) et les 2 autres a 1 ( car leur couleur est a 0)*/
if(!rPlus  && !vPlus && !bPlus)
{
   rPlus = 0;
   vPlus = 1;
   bPlus = 1;
}


if(vPlus && !rPlus)//si vplus est a 1 et que rPlus est a 0 (cas de départ)
{// alors on augmente la valeur de vert et on diminue celle de rouge.
   v++;
   r--;

   if(v==255)// si vert vaut 255 (le maximum)
   {//on met vPlus a 0(car il doit diminuer maintenant) et rPlus à 1 (en effet la valeur de rouge est a 0 maintenant)
  
      vPlus=0;
      rPlus=1;
   }
}
else if(bPlus && !vPlus)//sinon si on a bPlus à 1 et vPlus a 0 (donc après avoir fini avec la condition précedente)
{//comme pour plus haut, on augmente cette fois ci le bleu et diminue le vert
   b++;
   v--;

   if(b==255)// si le bleu est arrivé à 255
   {//on met bPlus à 0 et vPlus à 1

      bPlus=0;
      vPlus=1;
   }
}
else if(rPlus && !bPlus)//sinon, si rPlus est à 1, et bPlus à 0
{//on augmente la quantité de rouge et on baisse celle de bleu
   r++;
   b--;

   if(r==255)//lorsque le rouge arrive a 255
   {//on met rPlus a 0 et bPlus a 1.(lors du prochain passage, on rentrera à nouveau dans la première condition, et ainsi de suite.

      rPlus=0;
      bPlus=1;
   }
}


setchar(pcar+0x224, r);//on modifie la valeur de l'adresse de rouge avec la varialble r
setchar(pcar+0x225, v);//on modifie la valeur de l'adresse de rouge avec la varialble v
setchar(pcar+0x226, b);//on modifie la valeur de l'adresse de rouge avec la varialble b


Cet exemple est plus difficile mais j'ai mis les commentaires pour chaques lignes. Ainsi les valeurs des couleurs augmentent ou diminue toujours de 1 a chaque passage dans le cheat. Comme les passages vont très vite, on a une impression de dégradé.

Voila, c'est ici que se termine ce tuto. Avec ce que vous savez, vous êtes capable de faire des cheats beaucoup plus interessants qu'avant, surtout grace aux variables et aux conditions.


--------------------
Go to the top of the page
+Quote Post
 

Reply to this topicStart new topic
1 utilisateur(s) sur ce sujet (1 invité(s) et 0 utilisateur(s) anonyme(s))
0 membre(s) :

 

Version bas débit Nous sommes le : Thursday 27 April 2017 à 04:21