Exploiter la formule custom par Fomar0153, autorisation obtenue par MP
Ce tutoriel peut aussi être trouvé sur son blog à l'adresse http://cobbtocs.co.uk/wp/?p=271 ( à vérifier si maintenance)
aussi présent sur https://forums.rpgmakerweb.com/index.php?threads/how-to-make-the-most-of-custom-formulae-part-1.1143/
et sur https://www.rpgmakercentral.com/topic/2340-how-to-make-the-most-of-custom-formulae-part-1/ (merci kvk )
----------
Plus tôt aujourd'hui sur le salon irc de rpg maker, la conversation en est venue au script que quelqu'un désirait pour son jeu incluant ceci :
plats préférés - Je peux spécifier le plat préféré de chaque acteur et quand l'objet est utilisé sur lui, ça lui soigne plus de vie ou quelque chose comme ça.
Bref, j'ai très vite réalisé qu'un script n'était pas nécessaire pour implémenter cette fonction. RPG Maker Ace prouve une fois de plus combien il est versatile parce que cette fonction peut être implémentée dans un seul champ de texte.
En particulier, celui-ci :
note de Ulis : on remarquera qu'il y a un choix du type d'effet en haut à gauche. Dans la suite des exemple, ce choix est adapté, d'où les dommages ET les soins qui apparaissent avec un signe positif dans les formules. Lors de vos créations de formules, pensez à adapter le type. A vérifier si la version lite accepte l'ajout de script dans ce champ-là ...
Ce champ de formule à lui tout seul a un immense potentiel ! J'offre deux solutions à ce problème :
Regardons en premier ce qu'elles font exactement. Les deux vérifient une condition énoncée, à savoir
Quoiqu'il en soit, ce que nous vérifions est que le destinataire a une ID égale à 1. Notez que cet exemple concerne un objet qui ne devrait être utilisable que sur les membres de l'équipe et par conséquent, "b" sera toujours un acteur. Ainsi dans l'essentiel, on vérifie que la personne sur qui l'objet est utilisé est le premier de la base de données (par défaut : Eric).
Maintenant, regardons le reste de ces lignes :
Voilà qui conclut la partie explication de ce tutoriel. Je trouve personnellement qu'avoir beaucoup d'exemples à partir desquels travailler est bien utile donc la section suivante sera une section de problèmes et solutions, en espérant que l'un d'entre eux sera assez proche de ce que vous espérez réussir pour pouvoir l'adapter.
--
Scenario : la moitié de votre équipe sont des semi-humains ou robots et ont besoin d'objets de soin différents du reste de l'équipe.
Il y a des solutions très créatives à ce problème mais pour le bien de ce tutoriel, je veux que ça reste simple. Ainsi la solution que j'offre est simplement de vérifier à nouveau les ID.
--
Scenario : Le plat préféré d'un personnage est le sandwich au beurre de cacahuètes mais un autre personnage est allergique aux cacahuètes.
Donc la façon dont je vais implémenter ça est que Eric aura un bonus de 100 de vie quand il mangera le sandwich mais Nathalie aura le statut poison infligé si elle en mange un.
si Eric, gagner 200 PV ; si Nathalie, ajouter le statut numéro 2 (poison) sinon, rendre 100 PV.
note de Ulis : exemple en version condensée avec un elsif. Je ne crois pas que le 0; soit obligatoire à remplir pour la compétence mais je n'ai pas testé sans.
--
Scenario : vous avez une compétence tonnerre qui inflige plus de dommages quand on se trouve en extérieur, ce que vous contrôlez avec un interrupteur.
C'est juste un exemple d'interrupteur.
condition ? true : false.
Sans RMEx, il ne sera pas possible de mieux condenser cette formule. Avec RMEx, le to_i permet de gérer les deux éventualités d'un coup :
200+300*S[x].to_i +a.mat * 4 - b.mdf * 2
J'ai aussi inclus dedans un exemple de comment inclure la formule par défaut pour que vous puissiez voir comment l'incorporer.
--
Scenario : J'ai une compétence dont je veux contrôler la puissance au moyen d'une variable.
Très facile. Voici comment rendre 10 fois la valeur de la variable.
--
Scenario : J'ai un parieur et je veux qu'il utilise une compétence avec des dés, c'est à dire : il lance deux dés à six faces, la compétence fait 100 fois la somme des nombres sur les faces. Ça fait le double du résultat normal si le lancer donne un double et 10 000 s'il fait double-un.
Il y a beaucoup de choses dans cette formule alors nous la regarderons de près. Nous utiliserons la méthode "if" et ensuite nous utiliserons la méthode rand(x) qui donne un chiffre entre 0 et x-1, ce qui signifie que nous devrons lui ajouter 1 pour simuler un vrai dé. Il va aussi nous falloir créer des variables locales, j'utiliserai c et d (NE PAS UTILISER a et b).
cx2 (car on compte la somme de c et d dans un cas où ils sont égaux)
x 2 (encore car on a dit qu'on obtenait le double dans le cas d'un double)
x 100 (résultat normal).
On notera l'ordre dans lequel sont vérifiées les conditions, de la plus à la moins restrictive.
Ce n'est pas parfait, j'aimerais bien savoir ce qu'a donné le lancer plutôt que de juste voir les dommages. Pas d'inquiétude, la solution à ce nouveau problème sera montrée dans le prochain tutoriel.
--
Scenario : Nous voulons une compétence comme "White Wind" (un mouvement de final fantasy qui restaure autant de PV que la cible en a).
Plus facile pour une fois, on veut les PV de la cible (b)
hp, mp, tp, mhp (Maximum Hit Points), mmp (Maximum Magic Points), atk, def, mat (Magic ATtack power), mdf, agi, luk
note de Ulis : c'est directement la valeur, avec le type "soin de PV"
--
Scenario : Et pour Demi ?
Demi était un mouvement qui prenait [à l'adversaire] un quart de votre [l'auteur dit votre mais en réalité c'est *sa*] santé du moment.
--
Scenario : Je veux une compétence qui utilise le statut de quelqu'un d'autre, c'est à dire, ma princesse dirige son garde.
C'est plus facile que vous le pensez, tant qu'il s'agit d'un personnage en particulier :
note de Ulis : : La formule est celle de base mais utilise la valeur d'attaque d'Eric !
-------------
Sur le sujet et sur son blog, l'auteur se propose à vous créer et à expliquer les skills que vous demanderez !
Les premiers commentaires soulignent que v[n] est utilisable dans ce champ.
Avec RME, on peut utiliser les V[] dans ce champ. On peut aussi utiliser les interrupteurs et même les combiner :
Soit en français :
effet avec une valeur de base qui est la valeur dans la variable 1 puis si le premier interrupteur est activé, y ajouter 100 fois la valeur dans la variable 2 (sinon, rien en plus).
Ne pas oublier le .to_i après l'interrupteur pour passer de true à 1 et de false à 0, autrement la compétence apparaît mais ne produit aucun dommage, il n'y aura pas de message d'erreur dans le cas de la compétence.
Ce tutoriel peut aussi être trouvé sur son blog à l'adresse http://cobbtocs.co.uk/wp/?p=271 ( à vérifier si maintenance)
aussi présent sur https://forums.rpgmakerweb.com/index.php?threads/how-to-make-the-most-of-custom-formulae-part-1.1143/
et sur https://www.rpgmakercentral.com/topic/2340-how-to-make-the-most-of-custom-formulae-part-1/ (merci kvk )
----------
Plus tôt aujourd'hui sur le salon irc de rpg maker, la conversation en est venue au script que quelqu'un désirait pour son jeu incluant ceci :
plats préférés - Je peux spécifier le plat préféré de chaque acteur et quand l'objet est utilisé sur lui, ça lui soigne plus de vie ou quelque chose comme ça.
Bref, j'ai très vite réalisé qu'un script n'était pas nécessaire pour implémenter cette fonction. RPG Maker Ace prouve une fois de plus combien il est versatile parce que cette fonction peut être implémentée dans un seul champ de texte.
En particulier, celui-ci :
note de Ulis : on remarquera qu'il y a un choix du type d'effet en haut à gauche. Dans la suite des exemple, ce choix est adapté, d'où les dommages ET les soins qui apparaissent avec un signe positif dans les formules. Lors de vos créations de formules, pensez à adapter le type. A vérifier si la version lite accepte l'ajout de script dans ce champ-là ...
Ce champ de formule à lui tout seul a un immense potentiel ! J'offre deux solutions à ce problème :
- Code:
if b.id == 1; 500; else; 100; end;
- Code:
b.id == 1 ? 500 : 100
Regardons en premier ce qu'elles font exactement. Les deux vérifient une condition énoncée, à savoir
- Code:
b.id == 1
Quoiqu'il en soit, ce que nous vérifions est que le destinataire a une ID égale à 1. Notez que cet exemple concerne un objet qui ne devrait être utilisable que sur les membres de l'équipe et par conséquent, "b" sera toujours un acteur. Ainsi dans l'essentiel, on vérifie que la personne sur qui l'objet est utilisé est le premier de la base de données (par défaut : Eric).
Maintenant, regardons le reste de ces lignes :
- Code:
if b.id == 1; 500; else; 100; end;
- Code:
if b.id == 1
500
else
100
end
- Code:
b.id == 1 ? 500 : 100
- Code:
condition ? true : false
Voilà qui conclut la partie explication de ce tutoriel. Je trouve personnellement qu'avoir beaucoup d'exemples à partir desquels travailler est bien utile donc la section suivante sera une section de problèmes et solutions, en espérant que l'un d'entre eux sera assez proche de ce que vous espérez réussir pour pouvoir l'adapter.
--
Scenario : la moitié de votre équipe sont des semi-humains ou robots et ont besoin d'objets de soin différents du reste de l'équipe.
Il y a des solutions très créatives à ce problème mais pour le bien de ce tutoriel, je veux que ça reste simple. Ainsi la solution que j'offre est simplement de vérifier à nouveau les ID.
- Code:
(b.id==1 or b.id==3 or b.id==4) ? 500 : 0
--
Scenario : Le plat préféré d'un personnage est le sandwich au beurre de cacahuètes mais un autre personnage est allergique aux cacahuètes.
Donc la façon dont je vais implémenter ça est que Eric aura un bonus de 100 de vie quand il mangera le sandwich mais Nathalie aura le statut poison infligé si elle en mange un.
- Code:
if b.id==1;200;elsif b.id==2;b.add_state(2);0;else;100;end;
si Eric, gagner 200 PV ; si Nathalie, ajouter le statut numéro 2 (poison) sinon, rendre 100 PV.
note de Ulis : exemple en version condensée avec un elsif. Je ne crois pas que le 0; soit obligatoire à remplir pour la compétence mais je n'ai pas testé sans.
--
Scenario : vous avez une compétence tonnerre qui inflige plus de dommages quand on se trouve en extérieur, ce que vous contrôlez avec un interrupteur.
C'est juste un exemple d'interrupteur.
- Code:
$game_switches[x] ? 500 + a.mat * 4 - b.mdf * 2 : 200 + a.mat * 4 - b.mdf * 2
condition ? true : false.
Sans RMEx, il ne sera pas possible de mieux condenser cette formule. Avec RMEx, le to_i permet de gérer les deux éventualités d'un coup :
200+300*S[x].to_i +a.mat * 4 - b.mdf * 2
J'ai aussi inclus dedans un exemple de comment inclure la formule par défaut pour que vous puissiez voir comment l'incorporer.
--
Scenario : J'ai une compétence dont je veux contrôler la puissance au moyen d'une variable.
Très facile. Voici comment rendre 10 fois la valeur de la variable.
- Code:
$game_variables[x] * 10
--
Scenario : J'ai un parieur et je veux qu'il utilise une compétence avec des dés, c'est à dire : il lance deux dés à six faces, la compétence fait 100 fois la somme des nombres sur les faces. Ça fait le double du résultat normal si le lancer donne un double et 10 000 s'il fait double-un.
Il y a beaucoup de choses dans cette formule alors nous la regarderons de près. Nous utiliserons la méthode "if" et ensuite nous utiliserons la méthode rand(x) qui donne un chiffre entre 0 et x-1, ce qui signifie que nous devrons lui ajouter 1 pour simuler un vrai dé. Il va aussi nous falloir créer des variables locales, j'utiliserai c et d (NE PAS UTILISER a et b).
- Code:
c=1+rand(6);d=1+rand(6);if c==1 and d==1;10000;elsif c==d;c*400;else;(c+d)*100;end;
cx2 (car on compte la somme de c et d dans un cas où ils sont égaux)
x 2 (encore car on a dit qu'on obtenait le double dans le cas d'un double)
x 100 (résultat normal).
On notera l'ordre dans lequel sont vérifiées les conditions, de la plus à la moins restrictive.
Ce n'est pas parfait, j'aimerais bien savoir ce qu'a donné le lancer plutôt que de juste voir les dommages. Pas d'inquiétude, la solution à ce nouveau problème sera montrée dans le prochain tutoriel.
--
Scenario : Nous voulons une compétence comme "White Wind" (un mouvement de final fantasy qui restaure autant de PV que la cible en a).
Plus facile pour une fois, on veut les PV de la cible (b)
- Code:
b.hp
hp, mp, tp, mhp (Maximum Hit Points), mmp (Maximum Magic Points), atk, def, mat (Magic ATtack power), mdf, agi, luk
note de Ulis : c'est directement la valeur, avec le type "soin de PV"
--
Scenario : Et pour Demi ?
Demi était un mouvement qui prenait [à l'adversaire] un quart de votre [l'auteur dit votre mais en réalité c'est *sa*] santé du moment.
- Code:
b.hp / 4
--
Scenario : Je veux une compétence qui utilise le statut de quelqu'un d'autre, c'est à dire, ma princesse dirige son garde.
C'est plus facile que vous le pensez, tant qu'il s'agit d'un personnage en particulier :
- Code:
$game_actors[1].atk * 4 - b.def * 2
note de Ulis : : La formule est celle de base mais utilise la valeur d'attaque d'Eric !
-------------
Sur le sujet et sur son blog, l'auteur se propose à vous créer et à expliquer les skills que vous demanderez !
Les premiers commentaires soulignent que v[n] est utilisable dans ce champ.
Avec RME, on peut utiliser les V[] dans ce champ. On peut aussi utiliser les interrupteurs et même les combiner :
- Code:
V[1]+S[1].to_i*V[2]*100
Soit en français :
effet avec une valeur de base qui est la valeur dans la variable 1 puis si le premier interrupteur est activé, y ajouter 100 fois la valeur dans la variable 2 (sinon, rien en plus).
Ne pas oublier le .to_i après l'interrupteur pour passer de true à 1 et de false à 0, autrement la compétence apparaît mais ne produit aucun dommage, il n'y aura pas de message d'erreur dans le cas de la compétence.
Dernière édition par Ulis le Mer 9 Mai - 13:30, édité 10 fois