Partagez
Aller en bas
avatar
Alej
Membre

Nombre de messages : 128
Distinction : aucune
Date d'inscription : 08/01/2016

Comment fonctionne la fuite ?

le Ven 29 Avr 2016 - 10:46
Coucou,

J'ai un petit souci par rapport à la fuite sur les combats aléatoires. J'aimerai comprendre comment elle fonctionne, comment elle est calculée pour éventuellement limiter les possibilités de fuite du joueur, et même les interdire.

Pouvez-vous éclairer ma lanterne ?
avatar
Jiscal
Membre

Nombre de messages : 14
Age : 34
Distinction : aucune
Date d'inscription : 03/02/2014

Re: Comment fonctionne la fuite ?

le Ven 29 Avr 2016 - 10:50
Salut,

Je me suis pas pencher sur le calcul en lui même de la fuite.

Mais avec des déclencheurs j'ai constaté que tu peux annuler la possibilité de la fuite dans les combats. Utile pour les boss ou monstre particulier.
avatar
Alej
Membre

Nombre de messages : 128
Distinction : aucune
Date d'inscription : 08/01/2016

Re: Comment fonctionne la fuite ?

le Ven 29 Avr 2016 - 11:23
Oui mais sauf que c'est sur les combats aléatoires que je voudrais interdire ou limiter la fuite. Sur les boss ou les combat avec déclencheur c'est bon y a une option.
avatar
tonyryu
Membre

Nombre de messages : 895
Age : 38
Localisation : Près de Nantes
Distinction : aucune
Date d'inscription : 27/05/2010
http://www.tonyryudev.com

Re: Comment fonctionne la fuite ?

le Ven 29 Avr 2016 - 11:30
géré via cette fonction :

Code:
BattleManager.processEscape = function() {
    $gameParty.performEscape();
    SoundManager.playEscape();
    var success = this._preemptive ? true : (Math.random() < this._escapeRatio);
    if (success) {
        this.displayEscapeSuccessMessage();
        this._escaped = true;
        this.processAbort();
    } else {
        this.displayEscapeFailureMessage();
        this._escapeRatio += 0.1;
        $gameParty.clearActions();
        this.startTurn();
    }
    return success;
};

Math.random() retourne une valeur entre 0 et 1. Donc si attaque préemptive la fuite résussie obligatoirement, sinon la valeur random doit être inférieur au ratio de fuite.
En cas d'echec, le ratio augmente de 0.1

le ratio est initialisé de la sorte :
Code:
BattleManager.setup = function(troopId, canEscape, canLose) {
    this.initMembers();
    this._canEscape = canEscape;
    this._canLose = canLose;
    $gameTroop.setup(troopId);
    $gameScreen.onBattleStart();
    this.makeEscapeRatio();
};
Code:
BattleManager.makeEscapeRatio = function() {
    this._escapeRatio = 0.5 * $gameParty.agility() / $gameTroop.agility();
};

donc le ratio de fuite, en début de combat, vaut 0.5 * (agilité du groupe / agilité de la troupe ennemie)

Game_Troup et Game_Party partage la même classe mère : Game_Unit :
Code:
Game_Unit.prototype.agility = function() {
    var members = this.members();
    if (members.length === 0) {
        return 1;
    }
    var sum = members.reduce(function(r, member) {
        return r + member.agi;
    }, 0);
    return sum / members.length;
};
Bref ça retourne la moyenne de l'agilité de tous les membres du groupe ou de la troupe.

Voila, voila!!
avatar
Alej
Membre

Nombre de messages : 128
Distinction : aucune
Date d'inscription : 08/01/2016

Re: Comment fonctionne la fuite ?

le Ven 29 Avr 2016 - 15:05
Merci pour l'explication, je vais essayer de bien décortiquer tout ça.

De prime abord, et juste en survolant sans mettre réellement penchée sur la question et sans connaissance de Java, je constate que le calcul est à base de multiplications et divisions, donc en toute logique, si une des valeurs de la multiplication est = à 0 la fuite échoue. Par conséquent, si le ratio est égal à 0 la fuite échoue.

Est-ce que ce ratio correspond à ce qui est appelé "Taux d'évasion"?
Si tel est le cas, il est réglé à 0% par défaut par personnage. Donc il faudrait que je le mette à -100% non ? (enfin si c'est possible, là j'ai pas accès au logiciel).
avatar
tonyryu
Membre

Nombre de messages : 895
Age : 38
Localisation : Près de Nantes
Distinction : aucune
Date d'inscription : 27/05/2010
http://www.tonyryudev.com

Re: Comment fonctionne la fuite ?

le Ven 29 Avr 2016 - 15:45
Au vue du code, l'évasion semble lié à l'esquive d'une attaque ou d'une compétence.

Je peux faire un plugin rapidement pour modifier cette gestion de fuite, en ajoutant la possibilité de bloquer la fuite, selon la map (avec la possibilité de détailler les régions) ou les ennemis. Le tout en jouant sur 2 nouveau paramètres :

une valeur diminuant ou augmentant le ratio de début de combat.
une valeur définissant la hausse en cas d'echec.

et je fait la moyenne mobs, maps/région à chaque combat

Plus l'ajout de commande pour activer ou desactiver le plugin.

Est-ce que ça te tente?
avatar
Alej
Membre

Nombre de messages : 128
Distinction : aucune
Date d'inscription : 08/01/2016

Re: Comment fonctionne la fuite ?

le Ven 29 Avr 2016 - 20:50
Ben oui et non, je m'explique: Tout d'abord, il me semble que tu as beaucoup de demandes en cours et du coup ça m'embête un peu d'en rajouter. Ensuite le code que tu m'as montré, tout en restant très complexe pour moi, me parle un peu tout de même, et en plus tu sembles évoquer un plugin très rapide à faire (j'en conclue que c'est simple) du coup, comme j'aimerai essayer de me mettre un peu au javascript je me demandais si je ne pouvais pas essayer de le faire moi même (euh, avec ton aide un peu ou celle d'une bonne âme charitable...) après c'est peut-être trop complexe pour débuter... Je ne sais pas, tu en penses quoi ?
avatar
tonyryu
Membre

Nombre de messages : 895
Age : 38
Localisation : Près de Nantes
Distinction : aucune
Date d'inscription : 27/05/2010
http://www.tonyryudev.com

Re: Comment fonctionne la fuite ?

le Ven 29 Avr 2016 - 21:25
pour commencer, il vaut mieux faire un ajout de fonctionnalité, plutôt qu'une modification. Mais oui, le plugin auxquelles je pensais pour la gestion de fuite n'est pas complexe, il faut juste se poser les bonnes questions :

* Comment modifier le comportement du plugin de façon paramétrable, tout en conservant son comportement d'origine?
-> avec des metatag dans les remarques des ennemies et des maps :
Code:
- <RunAwayArea:[liste des régions séparées par ','> si pas de liste de régions, on utilise le paramétrage sur tous les combats de la map.
- <RunAwayStartMod:[valeur à ajouter au ratio au début du combat]>
- <RunAwayFailMod:[valeur à ajouter en cas d'échec de fuite]>

* Quels sont les programmes à modifier?
->Logiquement j'ai du tout mettre au dessus.

En regardant le plugin pour la gestion des compétences sur les armes, tu devrais trouver les différentes fonctions utiles.

Et si tu as des difficultés, je peux te transmettre mon skype


Dernière édition par tonyryu le Sam 30 Avr 2016 - 0:05, édité 1 fois
avatar
Alej
Membre

Nombre de messages : 128
Distinction : aucune
Date d'inscription : 08/01/2016

Re: Comment fonctionne la fuite ?

le Ven 29 Avr 2016 - 22:19
Génial ! Merci ! Mon cher et tendre m'a dit, que je devais pouvoir y arriver, il ne connait pas javascript mais d'autres langages malheureusement, mais il va m'accompagner un peu et si je galère et qu'il ne connait pas, je me tournerai vers toi si ça ne t'ennuie pas. Par contre du coup je voudrais bien mettre mon avancée ici, histoire que tu me réorientes si je fais fausse route.
avatar
tonyryu
Membre

Nombre de messages : 895
Age : 38
Localisation : Près de Nantes
Distinction : aucune
Date d'inscription : 27/05/2010
http://www.tonyryudev.com

Re: Comment fonctionne la fuite ?

le Sam 30 Avr 2016 - 0:06
J'ai édité mon post précédent, je me suis encore faire avoir avec les tag xml.

Pas de soucis pour le suivi dans ce topic.
avatar
Alej
Membre

Nombre de messages : 128
Distinction : aucune
Date d'inscription : 08/01/2016

Re: Comment fonctionne la fuite ?

le Mer 18 Mai 2016 - 10:27
Me revoilà, après une petite absence pour ben euh... jouer... (voui ça m'arrive aussi de temps en temps...)

Donc avant de m'attaquer à l'écriture du plugin, si je suis le cheminement que tu avais donné sur le sujet concernant le plugin des munitions, il faut d'abord une étude précise du besoin et des fonctions du plugin.

Donc je m'y attèle en espérant qu'elle sera suffisamment complète.

Je veux donc un plugin qui sera capable de:

- Désactiver ou modifier la difficulté de la fuite sur l'ensemble des rencontres aléatoire du jeu
- Désactiver ou modifier la difficulté de la fuite sur des troupes apparaissant aléatoirement et qui possèdent donc un ID
- Désactiver ou modifier la difficulté de la fuite sur des rencontres aléatoires ayant lieu dans certaines régions prédéfinies. (je n'avais pas pensé à cette option mais pourquoi pas c'est une bonne bonne idée).

Est-ce que c'est suffisamment complet ou est-ce trop évasif ?

Ce que je ne comprends pas c'est pourquoi tu conseilles d'utiliser des metatag plutôt qu'un paramétrage du plugin directement dans le gestionnaire ?

Je vais commencer l'écriture du début du plugin en attendant ta réponse.
avatar
tonyryu
Membre

Nombre de messages : 895
Age : 38
Localisation : Près de Nantes
Distinction : aucune
Date d'inscription : 27/05/2010
http://www.tonyryudev.com

Re: Comment fonctionne la fuite ?

le Mer 18 Mai 2016 - 12:30
tu peux déjà faire une analyse en se basant sur ces fonctionnalités. L'utilisation des métaTag permettent un paramétrage plus fin sur les éléments directement dans la base de données. Ce qui permet de rendre moins lourd le paramétrage du plugin dans le gestionnaire. Si tu veux qu'une troupe d'ennemie puisse être facilement fuit, il vaut mieux directement le paramétrer sur la troupe.
avatar
Alej
Membre

Nombre de messages : 128
Distinction : aucune
Date d'inscription : 08/01/2016

Re: Comment fonctionne la fuite ?

le Mer 18 Mai 2016 - 17:53
Merci.

@tonyryu a écrit:tu peux déjà faire une analyse en se basant sur ces fonctionnalités.
Qu'est-ce que tu appelles une analyse ?

EDIT:

Bon j'ai fait le plus simple, à voir si déjà ça , c'est bon ...

Code:
   //=============================================================================
    // imper.js
    //=============================================================================

    /*:
     * @plugindesc Plugin permettant de gerer les chances de fuite lors des rencontres aleatoires.
     * @author Laurak
     *
     * @param Interdire la fuite
     * @desc Interdire la fuite sur les rencontres aleatoires
     * @default false
     *
     *
     * @help Texte d'aide du plugin de test.
     */
    
     (function() {

        var parameters = PluginManager.parameters('imper');
        var Interdirelafuite = String(parameters['Interdire la fuite'] || 'false');

        // Code de votre plugin

    })();/*

Le plus dur reste à faire...

RE-EDIT: je crois que j'ai ma réponse à la question concernant l'analyse:

cours de l'openclassroom a écrit:Sauf dans des cas très simples, on ne crée pas un programme en se lançant directement dans
l'écriture du code source. Il est d'abord nécessaire d'analyser le problème pour trouver la suite d'opérations à réaliser pour le résoudre.

Donc globalement, mon problème est défini, l'analyse sera terminée lorsque j'aurai défini une suite opératoire me permettant de le résoudre. C'est bien cela ?
avatar
Alej
Membre

Nombre de messages : 128
Distinction : aucune
Date d'inscription : 08/01/2016

Re: Comment fonctionne la fuite ?

le Ven 27 Mai 2016 - 11:27
Bon, je viens de finir le cours de l'Openclassroom sur le javascript. J'arrive mieux à comprendre le code, mais je ne suis pas beaucoup plus avancée... Je ne sais pas trop par quel bout m'y prendre.

Ce qui me semblerait judicieux dans premier temps, ce serait d'interdire purement et simplement la fuite sur tous les combats aléatoires (ce qui en plus serait suffisant pour mon utilisation, mais pas pour les autres utilisateurs sans doute...). Ceci dans le paramétrage du plugin. Pour affiner par région ou difficulté du coup, ce serait via métaTag.

Je me suis demandée comment était interdite la fuite sur les combats qui ne sont pas aléatoire, pour l'instant je n'ai pas trouvé le code, je continue à chercher, mais ça doit être une bonne base logiquement...

Edit: c'est pas ça par hasard ?:

Code:
BattleManager.initMembers = function() {
    this._phase = 'init';
    this._canEscape = false;
    this._canLose = false;
    this._battleTest = false;
    this._eventCallback = null;
    this._preemptive = false;
    this._surprise = false;
    this._actorIndex = -1;
    this._actionForcedBattler = null;
    this._mapBgm = null;
    this._mapBgs = null;
    this._actionBattlers = [];
    this._subject = null;
    this._action = null;
    this._targets = [];
    this._logWindow = null;
    this._statusWindow = null;
    this._spriteset = null;
    this._escapeRatio = 0;
    this._escaped = false;
    this._rewards = {};
};

Re-Edit: non ça doit pas être ça, la commande doit simplement être bloquée, il faut juste que je trouve comment la bloquer.

Code:
Scene_Battle.prototype.createPartyCommandWindow = function() {
    this._partyCommandWindow = new Window_PartyCommand();
    this._partyCommandWindow.setHandler('fight',  this.commandFight.bind(this));
    this._partyCommandWindow.setHandler('escape', this.commandEscape.bind(this));
    this._partyCommandWindow.deselect();
    this.addWindow(this._partyCommandWindow);
avatar
tonyryu
Membre

Nombre de messages : 895
Age : 38
Localisation : Près de Nantes
Distinction : aucune
Date d'inscription : 27/05/2010
http://www.tonyryudev.com

Re: Comment fonctionne la fuite ?

le Ven 27 Mai 2016 - 11:57
Tu y es presque ^_^. Regardes la "création de la liste des commandes" dans Window_PartyCommand, tu y trouveras un appel d'une fonction de BattleManager, etc...

je te cache le cheminement, pour que tu tentes de trouver par toi même :
Spoiler:
Window_PartyCommand.prototype.makeCommandList
BattleManager.canEscape()
variable this._canEscape initialisée dans la fonction BattleManager.setup, regarde le second paramètre
appelée soit dans Game_Player.prototype.executeEncounter, certainement celle que tu devras surcharger
ou Game_Interpreter.prototype.command301
avatar
Alej
Membre

Nombre de messages : 128
Distinction : aucune
Date d'inscription : 08/01/2016

Re: Comment fonctionne la fuite ?

le Ven 27 Mai 2016 - 20:39
ah ben j'ai trouvé autre chose que ta solution pour le coup puisque je n'ai pas regardé le spoiler... c'est un truc un peu plus radical si on veut empêcher complètement la fuite:

Code:
Window_PartyCommand.prototype.makeCommandList = function() {
    this.addCommand(TextManager.fight,  'fight');
    this.addCommand(TextManager.escape, 'escape', BattleManager.canEscape());

en enlevant la dernière ligne tout simplement. J'ai fait un test pour voir si ça marchait et ça semble bon, maintenant il faut que je trouve une solution pour surcharger la fonction et non enlever la ligne pour en faire un joli plugin...

J'apprends, j'apprends... (à moins qu'on ne puisse pas faire ça...)

Edit: je ne comprends pas la relation entre le plugin et le code d'origine... Et oui oui j'ai bien vu le tuto sur la création de fenêtre et je vais encore le relire, parce que je pense que la réponse est dedans.

Re-Edit: ah ben si en fait c'est la même que toi XD...
avatar
Alej
Membre

Nombre de messages : 128
Distinction : aucune
Date d'inscription : 08/01/2016

Re: Comment fonctionne la fuite ?

le Sam 28 Mai 2016 - 12:55
Donc l'idée serait d'écrire quelque comme ça dans mon plugin mais pour une fonction à moi (je sais pas trop comment dire ça...)

Code:
Window_PartyCommand.prototype.makeCommandList = function() {
    this.addCommand(TextManager.fight,  'fight');
    if (interdireLaFuite === false)
    {
        this.addCommand(TextManager.escape, 'escape', BattleManager.canEscape());
    }

};

EDIT:
Bon j'arrive à un truc comme ça:
Code:
    //=============================================================================
    // imper.js
    //=============================================================================

    /*:
    * @plugindesc Plugin permettant de gerer les chances de fuite lors des rencontres aleatoires. Parce que ce qui est imperméable empêche les fuites.
    * @author Laurak
    *
    * @param Interdire la fuite
    * @desc Interdire la fuite sur les rencontres aleatoires
    * @default false
    *
    *
    * @help Texte d'aide du plugin de test.
    */
   
    (function() {

        var parameters = PluginManager.parameters('imper');
        var interdireLaFuite = String(parameters['Interdire la fuite'] || 'false');

    // *************************************************
    // Création d'une nouvelle classe Window_PartyCommandImpermeable
    // hérite de la classe Window_PartyCommand
    // *************************************************
   
    function Window_PartyCommandImpermeable()
    {
        this.initialize.apply(this, arguments);
    }
   
    Window_PartyCommandImpermeable.prototype = Object.create(Window_PartyCommand.prototype);
    Window_PartyCommandImpermeable.prototype.constructor = Window_PartyCommandImpermeable;
   
    //******************************************************
    //Méthode: Initialize
    //Fonction: initialisation de la classe WindowPartyCommandImpermeable
    //Params:--
    //******************************************************
   
    Window_PartyCommandImpermeable.prototype.initialize = function()
    {
        Window_PartyCommand.prototype.initialize.call(this);   
    };
   
    Window_PartyCommandImpermeable.prototype.makeCommandList = function()
    {
        this.addCommand(TextManager.fight, 'fight');
        if (interdireLaFuite === false)
        {
            this.addCommand(TextManager.escape, 'escape', BattleManager.canEscape());
        }
    };
   
    //******************************************************
    //Méthode:
    //Fonction: remplacement de Window_PartyCommand.prototype.makeCommandList
    //        par Window_PartyCommandImpermeable.prototype.makeCommandList
    //Param: --
    //******************************************************
   
   

Mon mari m'a aidé pour le contenu, mais je bloque complètement pour le remplacement et j'ai pas franchement compris ce que j'ai fait pour l'initialisation... Mais bon, ça passe encore...
avatar
tonyryu
Membre

Nombre de messages : 895
Age : 38
Localisation : Près de Nantes
Distinction : aucune
Date d'inscription : 27/05/2010
http://www.tonyryudev.com

Re: Comment fonctionne la fuite ?

le Sam 28 Mai 2016 - 16:45
oula non, tu n'as pas besoin de refaire une classe, il faut simplement redéfinir la fonction dans ton plugin
Window_PartyCommand.prototype.makeCommandList

Cependant, en faisant comme cela, c'est terminé, la commande fuite sera désactiver pour tous les combats. C'est pas très friendly user.

J'aurais plus cherché à modifier les endroits où sont appelé BattleManager.setup
avatar
Alej
Membre

Nombre de messages : 128
Distinction : aucune
Date d'inscription : 08/01/2016

Re: Comment fonctionne la fuite ?

le Sam 28 Mai 2016 - 18:03
ok, donc je vais tenter comme ça.

Ben en fait, je n'ai pas envie que l'on puisse fuir les combats aléatoire sinon la difficulté de mon jeu est déséquilibrée et le joueur se retrouve à faire du leveling pour pouvoir poursuivre le scénario.
En revanche pour le plugin lui-même, le fait d'interdire la fuite est une option, mais j'aimerai, même si ce n'est pas utille pour moi, continuer l'écriture dans le sens que tu indiques.

Edit: ce qui serait intéressant par la suite, c'est de créer un objet craftable qui à l'utilisation permettrait la fuite du joueur du coup le nombre d'utilisation serait limité. Mais ça je verrai par la suite...
avatar
Alej
Membre

Nombre de messages : 128
Distinction : aucune
Date d'inscription : 08/01/2016

Re: Comment fonctionne la fuite ?

le Dim 29 Mai 2016 - 12:28
Je vais devenir folle !!!!!!!!!!!!! Shocked ça fait je sais pas combien de temps que j'essai de comprendre remplacer ce fichu bout de code par un autre avec des démarches complètement tordues..., alors qu'en fait ben .... il suffit juste d'écrire le bout de code dans le plugin sans rien faire de plus.... je suis bleue... pourtant il me semblait que c'était ce que j'avais essayé de faire au départ... bizarre... à tous les coup, j'avais modifié le nom de la fonction... Bref, bon ben c'était pas sorcier et ça marche...

Voilà le code pour ceux que ça pourrait intéresser:

Code:
   //=============================================================================
    // imper.js
    //=============================================================================

    /*:
     * @plugindesc Plugin permettant de gerer les chances de fuite lors des
     * rencontres aleatoires. Parce que ce qui est imperméable empêche les fuites.
     * @author Laurak
     *
     * @param Interdire la fuite
     * @desc Interdire la fuite sur les rencontres aleatoires
     * @default false
     *
     *
     * @help Pour interdire la fuite sur les rencontres aléatoires, modifier la
    * valeur "Interdire la fuite" de "false" en "true".
     */
    
     (function() {

        var parameters = PluginManager.parameters('imper');
        var interdireLaFuite = String(parameters['Interdire la fuite'] || 'false');

    
   //**********************************************************************
   //                    Redéfinition de la fonction
   //**********************************************************************
  
    Window_PartyCommand.prototype.makeCommandList = function()
     {
         this.addCommand(TextManager.fight, 'fight');
         if (interdireLaFuite === false)
         {
             this.addCommand(TextManager.escape, 'escape', BattleManager.canEscape());
         }
     }
    
    })();

Je vais essayer par la suite de l'améliorer et de le compléter, mais je retourne avancer un peu mon jeu avant...
Contenu sponsorisé

Re: Comment fonctionne la fuite ?

Revenir en haut
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum