Day.png);">
Apprendre


Vous êtes
nouveau sur
Oniromancie?

Visite guidée
du site


Découvrir
RPG Maker

RM 95
RM 2000/2003
RM XP
RM VX/VX Ace
RM MV/MZ

Apprendre
RPG Maker

Tutoriels
Guides
Making-of

Dans le
Forum

Section Entraide

Tutos: Checklist de la composition (...) / Sorties: Dread Mac Farlane - episode 8 / Sorties: Dread Mac Farlane - episode 7 / Jeux: Ce qui vit Dessous / News: Quoi de neuf sur Oniromancie (...) / Chat

Bienvenue
visiteur !




publicité RPG Maker!

Statistiques

Liste des
membres


Contact

Mentions légales

438 connectés actuellement

29375476 visiteurs
depuis l'ouverture

4843 visiteurs
aujourd'hui



Barre de séparation

Partenaires

Indiexpo

Akademiya RPG Maker

Blog Alioune Fall

Fairy Tail Constellations

Leo-Games

Guelnika & E-magination

Lunae - le bazar d'Emz0

Tous nos partenaires

Devenir
partenaire



forums

Index du forum > Entraide > [RESOLU] [RPG MAKER MV 1.5] Avoir des nombres décimaux


mikapoil - posté le 28/08/2017 à 19:15:57 (43 messages postés)

❤ 0

Domaine concerné: .
Logiciel utilisé: RPG MAKER MV 1.5
Bon, c'est peut etre la 3e fois que je fais ce post mais je ne retrouve jamais les traces du post d'origine...

J'aimerai pouvoir stocker des nombres décimaux
Or les varibale sont des INTEGER (enfin des entiers)

Une solution contre ça ?


François Berhn - posté le 28/08/2017 à 20:22:20 (5402 messages postés)

❤ 0

Tonton Hellper

Portion de code : Tout sélectionner

1
$gameVariables.setValue(id, value)


À noter que pour que RM considère une valeur comme un float (aka un decimal, il faut toujours mettre un . pour représenter la virgule sinon ce sera un integer.

La liste des raisons pour lesquelles le making se meurt, la cinquième va vous étoner | Des projets abandonnés, source d'inspiration :D | Mes jeux


mikapoil - posté le 29/08/2017 à 12:30:24 (43 messages postés)

❤ 0

AH !

Génial :)

Merci pour l'info


mikapoil - posté le 02/09/2017 à 17:01:26 (43 messages postés)

❤ 0

euh...j'ai quand même une problème

voici ce que je lui donne $gameVariables.setValue(200, 3.14)

et quand je lui fait afficher il m'affiche 3

alors du coup, je reprend ma question :
Comment affecter un décimal puis comment l'afficher ?


HuLijin - posté le 04/09/2017 à 15:08:15 (997 messages postés)

❤ 0

Yeoun, mage-archère-louve

Le pourquoi du comment de l'écrasement des virgules, il est là :

Portion de code : Tout sélectionner

1
2
3
4
5
6
7
8
9
Game_Variables.prototype.setValue = function(variableId, value) {
    if (variableId > 0 && variableId < $dataSystem.variables.length) {
        if (typeof value === 'number') {
            value = Math.floor(value);
        }
        this._data[variableId] = value;
        this.onChange();
    }
};



Le fameux "Math.floor" empêche d'avoir des décimaux.

Du coup si c'est juste un truc que tu veux afficher quelque part, t'en fais un string (tu mets des "" autour).

Sinon, si tu fais des calculs, faut ruser, il faut que tu fasses tous tes calculs en décalant la virgule vers la droite (ex, en multipliant ton 3.14 par 100), puis à la fin tu stockes ça :

Portion de code : Tout sélectionner

1
$gameVariables.setValue(ID1, ($gameVariables.value(ID2)/100).toString())



ID1 et ID2 peuvent être égaux.
ID2 c'est al variable que tu utilises pour tes calculs, et ID1 celle que tu utilises pour ton affichage.

Sinon tu te crées un plugin et tu réécris la fonction setValue. À toi de voir. Faudra juste te souvenir que X/Y ne renverra plus un entier comme sur les vieilles versions de RM.

M.V.


mikapoil - posté le 05/09/2017 à 14:20:44 (43 messages postés)

❤ 0

ok...

je vais essayer le ToString mais par contre comme je voulais générer des nombres aléatoires ayant parfois 1, parfois 2, parfois 3 chiffres après la virgule. Ca me parait pas simple...

écrire un plugin me parait un peu au delà de ce que je peux faire
d'autant plus que dans le reste du jeu, c’était appréciable d'avoir des nombres entiers...

D'autres idées ?

ou encore un endroit ou je peux trouver un plugin pour des nombres décimaux ?
(et qui si possible ne désactiverait pas les nombres entiers...)


HuLijin - posté le 05/09/2017 à 21:24:18 (997 messages postés)

❤ 0

Yeoun, mage-archère-louve

Ben c'est pas un problème ça, pour des nombres à 1, 2 ou 3 chiffres après la virgule. Tu prends ton maximum (3 chiffres), donc tu dois faire tous tes calculs en multipliant par 10^3 au début, puis en divisant par 10^3 quand tu veux afficher le résultat final.

Faire un plugin, ici, ça revient plus ou moins à créer un fichier JS, à formater un peu l'entête comme ce que tu vois dans les autres plugins et à réécrire la fonction en virant le Math.floor.

Un truc dans ce style :

Portion de code : Tout sélectionner

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//=============================================================================
// nom_du_plugin.js
//=============================================================================
 
/*:
 * @plugindesc Plugin pour manipuler des décimaux
 * @author ton_pseudo
 * 
 * @help  /!\ Il ne sera plus possible d'obtenir un résultat entier
 * pour une division. /!\
 *
 
(function() {
    
    Game_Variables.prototype.setValue = function(variableId, value) {
        if (variableId > 0 && variableId < $dataSystem.variables.length) {
            this._data[variableId] = value;
            this.onChange();
        }
    };
    
})();



Si quelqu'un de plus calé que moi trouve d'autres alternatives, ne pas hésiter !

Regarde par ici si tu trouves ton bonheur avec une alternative (toFixed au lieu de toString)

M.V.


mikapoil - posté le 06/09/2017 à 20:01:31 (43 messages postés)

❤ 0

Comme dans le reste du jeu j'ai besoin de division avec un résultats entier
est-il possible de créer un plugin activable pour juste une séquence de jeu ?


HuLijin - posté le 06/09/2017 à 20:34:29 (997 messages postés)

❤ 0

Yeoun, mage-archère-louve

Techniquement, oui c'est possible de faire ça. Après, je te le déconseille, c'est horriblement casse-gueule.

Imagine que tu oublies ce système d'interrupteur pour activer/désactiver ton plugin, que tu codes un event parallèle qui calcule une division en même temps que ton système de chiffres aléatoires. Cet event parallèle ne te retournera aps un résultat entier. Et tu ne sauras probablement pas pourquoi.

Techniquement, je sais faire un tel plugin (et toi aussi, c'est pas compliqué à faire en soi, il suffit de rajouter une condition et de faire appel à la variable $gameSwitches). Mais je ne le ferai pas parce que c'est vraiment la porte ouverte à des effets de bord monstrueux.

Tu choisis quel mode tu souhaites utiliser : division euclidienne (type RM) ou division habituelle (type calculatrice) et tu adaptes le reste :
- en division euclidienne : tu utilises ce que j'ai dit avec les décalages de virgule et une fonction de conversion
- en division habituelle : tu installes le plugin et à chaque fois que tu veux calculer une division euclidienne, tu passes en script et tu rajoutes Math.floor.

Ou alors t'es du genre très maniaque et t'es sûr que tu n'auras jamais d'effets de bord gênants : tu étends le plugin pour qu'il s'active à l'aide d'un interrupteur géré in game.





Edit du lendemain. J'ai pris conseil auprès de Hellper et je peux te proposer ceci comme plugin :

Portion de code : Tout sélectionner

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
//=============================================================================
// HL_VarIsDecimal.js
//=============================================================================
 
/*:
 * @plugindesc Plugin pour manipuler des décimaux
 * @author Hu Lijin
 * 
 * @help  Commande pour stocker un nombre décimal
 * Plugin command : stockDecimal variableID valeur
 *
 * Par exemple, pour stocker 0.5 dans la variable 0003:
 * stockDecimal 3 0.5
 *
 */
 
(function() {
    
    Game_Variables.prototype.HL_setDecimalValue = function(variableId, value) {
        if (variableId > 0 && variableId < $dataSystem.variables.length) {
            this._data[variableId] = value;
            this.onChange();
        }
    };
 
    var HLold_pluginCommand = Game_Interpreter.prototype.pluginCommand;
    Game_Interpreter.prototype.pluginCommand = function(command, args) {
        HLold_pluginCommand.apply(this);
        if (command === 'stockDecimal') {
            $gameVariables.HL_setDecimalValue(parseInt(args[0]),eval(args[1]));
        }
    };
    
})();



ATTENTION : dès que tu utiliseras les commandes habituelles de RM, tu te retrouveras avec des entiers.

Je ne suis pas très familière avec la fonction eval, donc ne m'en veux pas si ça fait des trucs pas attendus. Elle te permet de ne pas mettre seulement une valeur, mais carrément une formule de calcul. Ça, c'est pour pallier le fait que tu ne puisses plus utiliser les commandes RM. ATTENTION cependant : aucun espace n'est toléré dans ta formule de calcul (c'est prévu pour s'arrêter au premier espace rencontré).

Si tu aimes faire des appels de script, c'est ceci qu'il faut écrire :

Portion de code : Tout sélectionner

1
$gameVariables.HL_setDecimalValue(ID,formule_de_calcul);



Pas d'eval, donc pas les restrictions et le comportement parfois bizarre qui vont avec !

M.V.


mikapoil - posté le 09/09/2017 à 09:01:52 (43 messages postés)

❤ 0

OK

finalement je crois que je vais opter pour un plugin simple qui transforme toute les divisions en décimales et faire un Math.Floor sur tous les résultats.

Du coup, c'est bien ça qu'il faut que je mette dans mon dossier plugin ?

Portion de code : Tout sélectionner

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//=============================================================================
// nom_du_plugin.js
//=============================================================================
 
/*:
 * @plugindesc Plugin pour manipuler des décimaux
 * @author ton_pseudo
 * 
 * @help  /!\ Il ne sera plus possible d'obtenir un résultat entier
 * pour une division. /!\
 *
 
(function() {
    
    Game_Variables.prototype.setValue = function(variableId, value) {
        if (variableId > 0 && variableId < $dataSystem.variables.length) {
            this._data[variableId] = value;
            this.onChange();
        }
    };
    
})();




HuLijin - posté le 09/09/2017 à 10:26:31 (997 messages postés)

❤ 0

Yeoun, mage-archère-louve

Oui, c'est celui-ci.
J'avais oublié de refermer mon commentaire, donc la bonne version c'est ceci :

Portion de code : Tout sélectionner

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//=============================================================================
// nom_du_plugin.js
//=============================================================================
 
/*:
 * @plugindesc Plugin pour manipuler des décimaux
 * @author ton_pseudo
 * 
 * @help  /!\ Il ne sera plus possible d'obtenir un résultat entier
 * pour une division. /!\
 */
 
(function() {
    
    Game_Variables.prototype.setValue = function(variableId, value) {
        if (variableId > 0 && variableId < $dataSystem.variables.length) {
            this._data[variableId] = value;
            this.onChange();
        }
    };
    
})();



(il faut rajouter un / à la ligne 11)

M.V.


mikapoil - posté le 09/09/2017 à 10:40:04 (43 messages postés)

❤ 0

OK

Merci pour toutes ces informations,

je garde tout ça sous le coude histoire de voir quelle solution sera la mieux.



- un petit edit quand même pour ma culture général :

Que faut-il ajouter à un script pour qu'il soit activable via un interrupteur in-game ?


- deuxième edit (mais sans cresson) :
Voici ce que j'entre quand j'appelle le script (en l'ayant activé)

Game_Variables.prototype.setValue(199,7/2)

histoire de mettre 3,5 dans la variable 199
sauf que ça me renvoie une erreur : "cannot set property '199' of undefined"

...euh quoi ça ?

- Troisième edit (sans être à Nantes) :

Noob inside j'ai trouvé il faut marquer : $gameVariables.setValue(199,7/2);

- Quatrième edit (en règle général celui de Diana) :

maintenant que mes divisions renvoient forcement un nombre décimal,
je me suis dis je vais juste faire un Math.floor

mais ça :
$gameVariables.setvalue(200,Math.floor($gameVariables.Value(200)));

ça ne marche pas ...

comment dois je le modifier ?


HuLijin - posté le 09/09/2017 à 17:46:18 (997 messages postés)

❤ 0

Yeoun, mage-archère-louve

Pour la culture générale, pour qu'un script soit activé via un interrupteur, il faut écrire ceci :

Portion de code : Tout sélectionner

1
2
3
if $gameSwitches.value(ID_de_ton_interrupteur) {
// Morceau de code à faire
}



Pour ton quatrième édit, la majuscule à "Value". Elle ne doit pas exister cette méthode.
Tu peux écrire tout en une fois si tu veux : $gameVariables.setValue(199,Math.floor(7/2));
Tu peux aussi faire l'opération 7/2 avec les commandes d'event habituelles, c'est le but du plugin, de ne pas avoir à écrire de ligne de code dans tes events.
Et ensuite, pour récupérer la valeur entière, là il faudra passer par la ligne de code : $gameVariables.setValue(X,Math.floor($gameVariables.value(X)));

Edit : j'ai ptet oublié de mettre des parenthèses après le if, je me rappelle plus si ça passe écrit comme ça en JS.

M.V.


SquonK - posté le 09/09/2017 à 17:47:38 (51 messages postés)

❤ 0

javascript est sensible à la casse (aux majsucules / minuscules)

$gameVariables.setValue(200, Math.floor($gameVariables.value(200)));


mikapoil - posté le 09/09/2017 à 19:20:16 (43 messages postés)

❤ 0

J'ai bidouillé un truc dont voici le code :

Portion de code : Tout sélectionner

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
//=============================================================================
// valuedeciswitch.js
//=============================================================================
 
/*:
 * @plugindesc Plugin pour manipuler des décimaux avec un switch
 * @author Hujilin
 * 
 * @help  /!\ Il ne sera plus possible d'obtenir un résultat entier
 * pour une division. /!\
 */
 
 if $gameSwitches.value(65) {
(function() {
    
    Game_Variables.prototype.setValue = function(variableId, value) {
        if (variableId > 0 && variableId < $dataSystem.variables.length) {
            this._data[variableId] = value;
            this.onChange();
        }
    };
    
})();
}



mais visiblement que l'interrupteur 65 soit ON ou OFF ça ne change rien...

edit :

et même avec des parenthèses ça ne change rien...

Portion de code : Tout sélectionner

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
//=============================================================================
// valuedeciswitch.js
//=============================================================================
 
/*:
 * @plugindesc Plugin pour manipuler des décimaux avec  un switch
 * @author hujilin
 * 
 * @help  /!\ Il ne sera plus possible d'obtenir un résultat entier
 * pour une division. /!\
 */
 
 if ($gameSwitches.value(65)) {
function() {
    
    Game_Variables.prototype.setValue = function(variableId, value) {
        if (variableId > 0 && variableId < $dataSystem.variables.length) {
            this._data[variableId] = value;
            this.onChange();
        }
    };
    
})();
}



et comme ça non plus

Portion de code : Tout sélectionner

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
//=============================================================================
// valuedeciswitch.js
//=============================================================================
 
/*:
 * @plugindesc Plugin pour manipuler des décimaux avec  un switch
 * @author hujilin
 * 
 * @help  /!\ Il ne sera plus possible d'obtenir un résultat entier
 * pour une division. /!\
 */
 
 if ($gameSwitches.value(65)) {
(function() {
    
    Game_Variables.prototype.setValue = function(variableId, value) {
        if (variableId > 0 && variableId < $dataSystem.variables.length) {
            this._data[variableId] = value;
            this.onChange();
        }
    };
    
})();
}




HuLijin - posté le 09/09/2017 à 19:32:10 (997 messages postés)

❤ 0

Yeoun, mage-archère-louve

Je m'en doutais que tu l'utiliserais pour ça. C'est vraiment une mauvaise idée.
J'ai beaucoup de fièvre et beaucoup de mal à réfléchir. Je regarderai ça plus tard. Désolée.

Edit : merci SquonK

M.V.


SquonK - posté le 09/09/2017 à 21:15:17 (51 messages postés)

❤ 0

Portion de code : Tout sélectionner

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
    var MemoFonc = MemoFonc || ();
    MemoFonc.GameVariablessetValue = Game_Variables.prototype.setValue;
    
    Game_Variables.prototype.setValue = function(variableId, value) {
        if ($gameSwitches.value(65)) {
            if (variableId > 0 && variableId < $dataSystem.variables.length) {
                this._data[variableId] = value;
                this.onChange();
            }
        } else {
            MemoFonc.GameVariablessetValue.call(this, variableId, value);
        }
    };
 




mikapoil - posté le 10/09/2017 à 11:15:34 (43 messages postés)

❤ 0

OK

autant j'ai des bases de programmation
mais rien en javascript
donc la plupart du temps je le lis, je le comprend mais je ne sais pas l'écrire...
(d'ailleurs j’étais à mille lieux d'en etre la...)

Merci à SquonK pour le code.

et au passage, encore merci à Hujilin, je pense utiliser le code de Hellper
qui m'a l'air d'avoir beaucoup d'avantages pour moi
mais je ferai des tests pour etre sur que eval ne fasse pas des trucs bizarres.

Index du forum > Entraide > [RESOLU] [RPG MAKER MV 1.5] Avoir des nombres décimaux

repondre up

Suite à de nombreux abus, le post en invités a été désactivé. Veuillez vous inscrire si vous souhaitez participer à la conversation.

Haut de page

Merci de ne pas reproduire le contenu de ce site sans autorisation.
Contacter l'équipe - Mentions légales

Plan du site

Communauté: Accueil | Forum | Chat | Commentaires | News | Flash-news | Screen de la semaine | Sorties | Tests | Gaming-Live | Interviews | Galerie | OST | Blogs | Recherche
Apprendre: Visite guidée | RPG Maker 95 | RPG Maker 2003 | RPG Maker XP | RPG Maker VX | RPG Maker MV | Tutoriels | Guides | Making-of
Télécharger: Programmes | Scripts/Plugins | Ressources graphiques / sonores | Packs de ressources | Midis | Eléments séparés | Sprites
Jeux: Au hasard | Notre sélection | Sélection des membres | Tous les jeux | Jeux complets | Le cimetière | RPG Maker 95 | RPG Maker 2000 | RPG Maker 2003 | RPG Maker XP | RPG Maker VX | RPG Maker VX Ace | RPG Maker MV | Autres | Proposer
Ressources RPG Maker 2000/2003: Chipsets | Charsets | Panoramas | Backdrops | Facesets | Battle anims | Battle charsets | Monstres | Systems | Templates
Ressources RPG Maker XP: Tilesets | Autotiles | Characters | Battlers | Window skins | Icônes | Transitions | Fogs | Templates
Ressources RPG Maker VX: Tilesets | Charsets | Facesets | Systèmes
Ressources RPG Maker MV: Tilesets | Characters | Faces | Systèmes | Title | Battlebacks | Animations | SV/Ennemis
Archives: Palmarès | L'Annuaire | Livre d'or | Le Wiki | Divers