Partagez
Aller en bas
avatar
Hermoni
Membre

Nombre de messages : 930
Localisation : Quelque part entre la cuisine et le clavier.
Distinction : - Hermomo' le Chat. Noir et sarcastique mais chat tout de même é_è [Shamu' :3]
Poisson 2018 [Amal']
Date d'inscription : 07/09/2015

[script] Soucis de perte d'information d'un module à un autre

le Mar 5 Sep 2017 - 21:44
Hello, désolé pour le titre pas clair car je savais pas comment résumer le soucis.

J'utilise deux modules qui me permettent d'ajouter des formules aux états qui sont actif.
Le 1er permet de rajouter une formule de dégât à l'état (pour en faire un dot quoi, comme une brûlure), et qui conserve l'information du lanceur de l'état pour faire ce calcul.
Spoiler:

Code:
// Place file inside /js/plugins
// Remember to save after adding plugins or changing parameters.
//=============================================================================
// Ellye's States Damage
//=============================================================================
/*:
 * Version: 2015-11-20-2232
 *
 * CHANGE LOG:
 * 2015-11-20-2232 - Normal attack states should also get the caster paramaters properly now.
 * 2015-11-19-2359 - Fixed decimal damage.
 * 2015-11-19-0021 - Release of Version 2 Beta - changed how the damage is applied, needs a lot of testing.
 * 2015-11-08-0156 - Changed the _stateCaster array to no longer store direct object references, that could easily result in infinite data loops. Thanks, Bobstah.
 * 2015-11-05-1029 - Added tags <drain>, <mp_drain>, <mp_heal>, <mp_damage>, <can_critical>.
 * 2015-11-04-2327 - Made this compatible with Yanfly's Cooldowns (that plugin wasn't expecting the possibility of its attributes being undefined in a skill)
 * 2015-11-03-3442 - Fixed _stateCaster information being unintentionaly shared between battlers.
 * 2015-11-03-0948 - Fixed an issue that could cause compatibility problems.
 * 2015-11-01-1141 - Added collapse animation for enemies that die due to status effects.
 * 2015-10-31-2112 - Some combinations of plugins would cause the damage popup to appear twice. So I added a compatibility parameter.
 * 2015-10-31-1802 - Fixed a bug that made the plugin not work properly in many cases.
 * 2015-10-31-1434 - Fixed a crash at turn end.
 * 2015-10-31-1225 - Fixed a few potential crashes.
 * 2015-10-31-0221 - Beta Release.
 *
 *
 *
 * @plugindesc Ver.2015-11-20-2232. Customized state damage/healing. See help.
 * <Ellye SD>
 * @author https://ellyeblog.wordpress.com/ || http://steamcommunity.com/id/Ellye
 *
 * @param Damage Popup Compatibility
 * @desc Change this to "1" if you're having an issue that causes damage numbers to appear twice per turn (compatibility).
 * @default 0
 *
 *
 * @help This plugin allows you to set up custom damage or healing for States.
 * Use the notes field, and swap FORMULA_HERE for the formula you want to use (exactly like you'd do for a Skill).
 * <formula:FORMULA_HERE>
 * <element:ELEMENT_ID>
 * <variance:VARIANCE_PERCENT>
 *
 *
 * You can also set the following flags (mutually exclusive):
 * <heal>
 * <drain>
 * <mp_damage>
 * <mp_heal>
 * <mp_drain>
 *
 * For example, let's say we want to create a "Burning" state:
 * <formula:a.mat/(1+(b.mdf/100))>
 * <element:2>
 * <variance:20>
 *
 * Or a "Regeneration" state:
 * <formula:a.mat>
 * <element:6>
 * <variance:10>
 *
 * Keep in mind, "a" is always the person who have casted the state, and "b" is always the afflicted person.
 * Sometimes they might both be the same (if a person casts Regeneration on himself, for an easy example).
 */
(function() {

    var parameters = $plugins.filter(function(p) {
        return p.description.contains('<Ellye SD>');
    })[0].parameters; //Thanks to Iavra
    var damage_popup_compatibility = Number(parameters['Damage Popup Compatibility'] || 0);

    //Let's add a new property for battlers, called "_stateCaster". It will be array holding the caster of each state we have.
    Object.defineProperties(Game_Battler.prototype, {
        _stateCasterIndex: {
            writable: true,
            value: [],
            configurable: true,
            enumerable: true
        }
    });

    Game_Battler.prototype.stateCasters = function() {
        var stateCasters = [];
        this._stateCasterIndex.forEach(function(index, state) {
            //Actors receive a positive id on the array
            if (index > 0 && $gameActors._data.length >= index - 1 && typeof $gameActors._data[index] !== 'undefined')
            {
                stateCasters[state] = $gameActors._data[index];
            }
            else
            {
                index *= -1;
                if ($gameTroop._enemies.length >= index - 1 && typeof $gameTroop._enemies[index] !== 'undefined')
                {
                    stateCasters[state] = $gameTroop._enemies[index];
                }
            }
        }, this);
        return stateCasters;
    };

    //We need to initialize _stateCaster for our Game Battlers:
    _alis_gb_init = Game_Battler.prototype.initMembers;
    Game_Battler.prototype.initMembers = function() {
        _alis_gb_init.call(this);
        this._stateCasterIndex = [];
    };


    //We modify the function that adds states, so that it shall pass the caster as a parameter:
    Game_Action.prototype.itemEffectAddNormalState = function(target, effect) {
        var caster = this.subject();
        var chance = effect.value1;
        if (!this.isCertainHit()) {
            chance *= target.stateRate(effect.dataId);
            chance *= this.lukEffectRate(target);
        }
        if (Math.random() < chance) {
            target.addState(effect.dataId, caster);
            this.makeSuccess(target);
        }
    };

    //And also this one:
    Game_Action.prototype.itemEffectAddAttackState = function(target, effect) {
        this.subject().attackStates().forEach(function(stateId) {
            var chance = effect.value1;
            chance *= target.stateRate(stateId);
            chance *= this.subject().attackStatesRate(stateId);
            chance *= this.lukEffectRate(target);
            if (Math.random() < chance) {
                target.addState(stateId, this.subject());
                this.makeSuccess(target);
            }
        }.bind(this), target);
    };

    //We start receiving a parameter:
    Game_Battler.prototype.addState = function(stateId, caster) {
        if (typeof caster === 'undefined') {
            caster = this;
        }
        if (this.isStateAddable(stateId)) {
            if (!this.isStateAffected(stateId)) {
                this.addNewState(stateId);
                this.refresh();
            }
            this.resetStateCounts(stateId);
            this._result.pushAddedState(stateId);
        }
        //We could also override AddNewState() to make it receive the parameter and assign values, but we might be compromising compatibility a bit too much.
        //So we are going to add those values here. This also means that receiving a second Poison will override the values from the first one.
        if (caster.isActor())
        {
            this._stateCasterIndex[stateId] = $gameActors._data.indexOf(caster);
        }
        else
        {
            this._stateCasterIndex[stateId] = -$gameTroop._enemies.indexOf(caster);
        }
    };

    //At end of turn, we need to call our method that will deal with those parameters:
    _game_battler_onTurnEnd_alias = Game_Battler.prototype.onTurnEnd;
    Game_Battler.prototype.onTurnEnd = function() {
        this.ProcessEllyeStatesDamage();
        _game_battler_onTurnEnd_alias.call(this);
    };

    //And our method:
    Game_Battler.prototype.ProcessEllyeStatesDamage = function() {
        this.states().forEach(function(state) {
            if (typeof state.meta !== 'undefined' && state.meta !== null && typeof state.meta.formula !== 'undefined')
            {
                var caster = this;
                var element = 1;
                var variance = 0;
                var formula = state.meta.formula;
                var stateCasters = this.stateCasters();
                var damageOrHeal = -1;
                if (typeof stateCasters[state.id] !== 'undefined') {
                    caster = stateCasters[state.id];
                }
                if (typeof state.meta.element !== 'undefined')
                {
                    element = Number(state.meta.element || 1);
                }
                if (typeof state.meta.variance !== 'undefined')
                {
                    variance = Number(state.meta.variance || 0);
                }
                if (state.meta.heal || state.meta.mp_recover || state.meta.mp_heal)
                {
                    damageOrHeal = 1;
                }
                var value = EllyeSD_EvalFormula(formula, caster, this, damageOrHeal, element, variance);
                if (state.meta.mp_damage || state.meta.mp_drain)
                {
                    this.gainMp(value);
                    if (state.meta.mp_drain && caster.isAlive())
                    {
                        caster.gainMp(-value);
                    }
                }
                else
                {
                    this.gainHp(value);
                    if (state.meta.drain && caster.isAlive())
                    {
                        caster.gainHp(value);
                    }
                }
                BattleManager.refreshStatus();
                if (damage_popup_compatibility !== 1)
                {
                    this.startDamagePopup();
                }
                if (this.isActor())
                {
                    BattleManager._spriteset._actorSprites.forEach(function(sprite)
                    {
                        if (typeof sprite._battler !== 'undefined' && sprite._battler === this)
                        {
                            sprite.update();
                        }
                    }, this);
                }
                else
                {
                    BattleManager._spriteset._enemySprites.forEach(function(sprite)
                    {
                        if (typeof sprite._battler !== 'undefined' && sprite._battler === this)
                        {
                            sprite.update();
                        }
                    }, this);
                }
                if (this.isDead())
                {
                    this.performCollapse();
                }
            }
        }, this);
    };

    //-1 for damage, 1 for heal
    EllyeSD_EvalFormula = function(formula, caster, target, damageOrHeal, elementId, variance) {
        try {
            var a = caster;
            var b = target;
            var v = $gameVariables._data;
            var elementRate = target.elementRate(elementId);
            var damage = Math.floor(Math.max(eval(formula), 0) * damageOrHeal * elementRate);
            var amp = Math.floor(Math.max(Math.abs(damage) * variance / 100, 0));
            var v = Math.floor(Math.randomInt(amp + 1) + Math.randomInt(amp + 1) - amp);
            return damage >= 0 ? damage + v : damage - v;
        } catch (e) {
            return 0;
        }
    };

    //Clear everything on battle end:
    _alias_gb_obe = Game_Battler.prototype.onBattleEnd;
    Game_Battler.prototype.onBattleEnd = function() {
        _alias_gb_obe.call(this);
        this._stateCasterIndex = [];
    };
}());


Le second permet diverses formules, et pour cet état je lui fait modifier les états actif (je vire le 1er etat pour en mettre un autre qui lui aussi a une formule de dégat).
Spoiler:

Code:
/*:
-------------------------------------------------------------------------
@title State Damage Modifiers
@author Hime --> HimeWorks (http://himeworks.com)
@date Jun 1, 2015
@version 1.4
@filename HIME_StateDamageModifiers.js
@url http://himeworks.com/2015/11/state-damage-modifiers/

If you enjoy my work, consider supporting me on Patreon!

* https://www.patreon.com/himeworks

If you have any questions or concerns, you can contact me at any of
the following sites:

* Main Website: http://himeworks.com
* Facebook: https://www.facebook.com/himeworkscom/
* Twitter: https://twitter.com/HimeWorks
* Youtube: https://www.youtube.com/c/HimeWorks
* Tumblr: http://himeworks.tumblr.com/

-------------------------------------------------------------------------------
@plugindesc v1.4 - Allows you to create states that will alter damage received
based on a formula
@help
-------------------------------------------------------------------------------
== Description ==

In RPG Maker MV, damage calculations are performed when one battler uses an
action on another battler (including themselves).

So for example, let's say your actor attacked an enemy using skill #3. The
game would look at skill #3's damage formula and use that to determine the
base damage that the skill can deal.

In addition to this "base damage", we also have some extra damage modifiers,
such as the guard effect which halves the damage received, as well as the
critical hit modifier, which increases damage based on a critical multiplier.

This plugin allows you to further apply additional damage modifiers, which
essentially allows you to change the damage even further. These modifiers
will be applied to states, so whenever the state is active, the damage
modifiers will be used.

State damage modifiers can be applied to both the attacker as well as the
target. Attacker damage modifiers are applied before the target damage
modifiers.

== Terms of Use ==

- Free for use in non-commercial projects with credits
- Contact me for commercial use

== Change Log ==
1.4 - Jun 1, 2016
  * Fixed regex to support multiple note-tags
1.3 - Jan 16, 2016
  * fixed bug where 0 damage returns previous damage
1.2 - Dec 3, 2015
  * bug fix: defender states were evaluated twice
  * Formulas that return no value assume they do not change the current damage
1.1 - Dec 2, 2015
  * separated damage modifiers into attacker and defender formulas
  * evaluate formulas in context of current action
1.0 - Nov 28, 2015
  * initial release

== Usage ==

State damage modifiers are similar to damage formulas, except they have an
extra variable available to use: the current damage.

Because there may be multiple damage modifiers involved, you might want to
apply the modifier on top of the results of previously modified damages.

There are two types of damage modifiers: attacker modifiers, and
defender modifiers. Attack modifiers are used when a battler is
attacking someone. On the other hand, defender modifiers are used when
they are on the receiving end of an attack.

If a battler targets themselves, both attacker and defender modifers are
used for the same battler.

To apply a state damage modifier to a state, note-tag states with the
appropriate modifier. If you want to add an attacker modifier, use

  <state damage modifier: attacker>
     FORMULA
  </state damage modifier>
  
If you want to add a defender modifier, use
  
  <state damage modifier: defender>
     FORMULA
  </state damage modifier>

Where the FORMULA is any valid javascript expression that evaluates to a
number. The following formula variables are available

  a - the attacker
  b - the target
  v - game variables
  d - current damage (after previous modifiers are applied)
  
So for example, let's say you wanted to make it so that this state will simply
cancel out any damage. You can use a simple formula

  0
  
And the damage will now be 0.

Similarly, you could change the damage so that it will leave you with 1 HP.

  b.hp - 1
  
Which means the target's current HP, less one. This might be useful if you
wanted your state to always leave 1 HP when it's active.

You might make it so that this state will double the damage dealt. You can
say

  d * 2
  
Which will multiply the current damage by 2.

The possibilities are endless. You are limited by your javascript knowledge.
If you need help coming up with a formula, many people could potentially help.

-------------------------------------------------------------------------------
 */
var Imported = Imported || {} ;
var TH = TH || {};
Imported.StateDamageModifiers = 1;
TH.StateDamageModifiers = TH.StateDamageModifiers || {};

(function ($) {

  $.AtkRegex = /<state[-_ ]damage[-_ ]modifier:\s*attacker>([\s\S]*?)<\/state[-_ ]damage[-_ ]modifier>/im
  $.DefRegex = /<state[-_ ]damage[-_ ]modifier:\s*defender>([\s\S]*?)<\/state[-_ ]damage[-_ ]modifier>/im

  $.stateDamageModifierAtk = function(state) {
    if (state.damageModifierAtk === undefined ) {
      $.loadNotetagStateDamageModifiers(state);
    }
    return state.damageModifierAtk;
  };
  
  $.stateDamageModifierDef = function(state) {
    if (state.damageModifierDef === undefined ) {
      $.loadNotetagStateDamageModifiers(state);
    }
    return state.damageModifierDef;
  };
  
  $.loadNotetagStateDamageModifiers = function(state) {
    state.damageModifierAtk = null;
    state.damageModifierDef = null;
    var res = $.AtkRegex.exec(state.note);
    if (res) {
      var formula = res[1];
      state.damageModifierAtk = new Function("a", "b", "v", "d", formula);
    }
    
    res = $.DefRegex.exec(state.note);
    if (res) {
      var formula = res[1];
      state.damageModifierDef = new Function("a", "b", "v", "d", formula);
    }
  };

  var TH_GameAction_makeDamageValue = Game_Action.prototype.makeDamageValue;
  Game_Action.prototype.makeDamageValue = function(target, critical) {
    var value = TH_GameAction_makeDamageValue.call(this, target, critical);
    value = this.applyAttackerStateDamageModifiers(target, critical, value);
    value = this.applyDefenderStateDamageModifiers(target, critical, value);
    return value;
  };
  
  Game_Action.prototype.applyAttackerStateDamageModifiers = function(target, critical, value) {
    var states = this.subject().states();
    for (var i = 0, len = states.length; i < len; i++) {
      var fn = $.stateDamageModifierAtk(states[i])
      value = this.applyStateDamageModifier(target, critical, value, fn);
    }
    return value;
  };
  
  Game_Action.prototype.applyDefenderStateDamageModifiers = function(target, critical, value) {
    var states = target.states();
    for (var i = 0, len = states.length; i < len; i++) {
      var fn = $.stateDamageModifierDef(states[i])
      value = this.applyStateDamageModifier(target, critical, value, fn);
    }
    return value;
  };
  
  Game_Action.prototype.applyStateDamageModifier = function(target, critical, value, fn) {
    if (fn) {
      var a = this.subject();
      var b = target;
      var v = $gameVariables;
      var d = value;
      value = fn.call(this, a, b, v, d)
    }
    return value;
  };
})(TH.StateDamageModifiers);

Sauf qu'en faisant ça le 1er perd l'information de qui avait posé le 1er état. Du coup impossible de faire fonctionner ma formule de dégât sur le 2nd état vu que l'information des stats du lanceur originel sont perdues.

Du coup, si quelqu'un saurait comment je pourrais modifier ça pour que ces informations restent.
Car ça me permettrait certains effets comme un poison aggravé si on le relance.
avatar
Ashala
Membre

Nombre de messages : 531
Age : 26
Localisation : L'Antre-Deux-Mondes.
Distinction : "A une araignée au plafond" [Nowa]
Date d'inscription : 09/06/2016

Re: [script] Soucis de perte d'information d'un module à un autre

le Mar 5 Sep 2017 - 22:34
Que veux-tu faire exactement avec ces deux plugins ? Tu as parlé de poison aggravé, tu veux donc qu'après un premier état "poison", il empire et le dot aussi ?

En gros, tu voudrai que le nouveau ait encore en mémoire les données du lanceur de sort pour calculer la formule, c'est bien ça ?
Tu as un exemple de ton code pour voir comment tu l'utilises ?

-> Si c'est ainsi la solution est peut-être juste de stocker les informations concernant les stats du lanceurs dans une variable et de la ressortir pour le passage au second état.
avatar
Hermoni
Membre

Nombre de messages : 930
Localisation : Quelque part entre la cuisine et le clavier.
Distinction : - Hermomo' le Chat. Noir et sarcastique mais chat tout de même é_è [Shamu' :3]
Poisson 2018 [Amal']
Date d'inscription : 07/09/2015

Re: [script] Soucis de perte d'information d'un module à un autre

le Mar 5 Sep 2017 - 23:44
En gros oui, l'idée c'est d'avoir un état "évolutif".
Le soucis d'enregistrer dans des variables certaines données c'est que soit ça ferait foirer le multi-dot (j'y avais pensé à faire un seul dot dont la formule est fonction d'une variable qui s'incrémente, mais en cas de multi-dot ça marcherait pas), soit ça poserait soucis si plusieurs dot sont lancés par divers personnages (genre moi j'en mets un sur l'ennemi, lui en met un sur un de mes personnage).

Normalement si j'ai bien pigé, le 1er plugin enregistre pour chaque état concerné qui est le lanceur. Mais lors de l'ajout via le second le lanceur originel n'est pas repris (aucune idée de c'que ça prend exactement, mais tout est mit à 0 du coup).
Du coup faudrait juste que la pose du 2nd état soit fait par le même, mais aucune idée de comment ainsi.


Code:
<formula:(4*(a.level+10)+a.mat*5-b.mdf*2)*0.3>
<state damage modifier: defender>
if (this.item().damage.elementId === 3) {
  b.removeState(8)
}
if (this.item().damage.elementId === 2) {
  b.removeState(8)
  b.addState(44)
}
return d
</state damage modifier>

Voila à quoi ça ressemble dans le 1er dot (une brûlure).
La 1ère ligne c'est la formule qui gère le dégat à la fin du tour (oui, ma formule est compliquée).

Le reste c'est le 2eme plugin qui en gros si on prend une attaque d'eau ça vire la brulure, si on lance une attaque de feu ça renforce le dot de la brûlure en changeant l'état par l'état 44 qui lui aura une formule plus puissante.
avatar
Ashala
Membre

Nombre de messages : 531
Age : 26
Localisation : L'Antre-Deux-Mondes.
Distinction : "A une araignée au plafond" [Nowa]
Date d'inscription : 09/06/2016

Re: [script] Soucis de perte d'information d'un module à un autre

le Mer 6 Sep 2017 - 7:54
C'est pas forcément la solution, prend ça plutôt comme un cheminement de pensée pour qu'on puisse tout les deux continuer à réfléchir sur comment optimiser ça :

Tu prends le plugin d'Hime suivant : Formula effect
Il permet juste d'écrire du js directement dans les notetag des compétences (et de récupérer directement les valeurs a et b au lancement).
Je te le conseille car lorsque j'essayais de récupérer les valeurs d'a et b par un call d'event commun initié par une compétence, ils étaient devenu undefined entre temps...

Tu crée deux variables : celle avec l'ID "X" qui stockera a.level, "Y" pour a.mat et b.mdf tu n'en aura pas besoin en toute logique.

Du coup, dans la -compétence- (pas l'état !) qui lance la première altération tu met :

Code:
<formula effect>
$gameVariables.setValue(X, a.level);
$gameVariables.setValue(Y, a.mat);
</formula effect>

En remplaçant bien sûr X et Y

(Et à partir de là je pars en réflexion totale car j'ai juste tilté pour le problème rencontré )

puis tu va à la page du state 44 et tu remplaces a.level et a.mat par V[X] et V[Y] dans la formule héritée du premier plugin.
Si tu avais besoin de réutiliser le state 44 seul, il suffit d'en créer une instance différente avec la formule initiale.

Après, vient le problème du multiple dot, comme tu l'avais dis. Ca devient tout de suite plus dense, mais c'est pas impossible:

Pour ça, tu récupères la valeur de b.isActor() et de b.index() de la même façon. Ensuite il te reste à mettre un double if dans le formula effect (une pour l'actor lancée, puis pour le lanceur)... Ça fait beaucoup de variables par contre, un couple par combinaison d'Actor et d'ennemi lanceur...

Pour éviter de remplacer l'état par un autre, tu vérifie que l'acteur est toujours affecté par l'état avec isStateAffected(stateId)
A partir de là tu peux soit empêcher de "réaffecter" l'état. Soit le combiner avec une autre instance de l'état si le lanceur b.index était différent... Soit, pourquoi pas, rallonger l'état de base avec resetStateCounts(stateId)

Hypothèse, je peux totalement me gourrer :
Je pense que si il y a un reset des données qu'utilise le plugin, ce n'est pas inhérent au plugin lui-même. Le système de base de RM a l'air de vouloir clairement nettoyer ses variables usuelles lorsqu'il en a l'occasion. Du coup, à moins de partir sur une solution totalement différente, je pense qu'il faudra automatiquement sauvegarder ces valeurs dans une variable :/
avatar
Hermoni
Membre

Nombre de messages : 930
Localisation : Quelque part entre la cuisine et le clavier.
Distinction : - Hermomo' le Chat. Noir et sarcastique mais chat tout de même é_è [Shamu' :3]
Poisson 2018 [Amal']
Date d'inscription : 07/09/2015

Re: [script] Soucis de perte d'information d'un module à un autre

le Mer 6 Sep 2017 - 18:43
Merci pour le coup de patte.
En fait après réflexion je pense que je vais rester "simple", car j'avais un peu oublié un truc : Les ennemis n'ont PAS de lvl, donc je serais obligé de leur créer des attaques et statuts spécifiques (j'ai mis un moment à faire ma formule de dégât pour mes personnages donc je vais pas la changer).
Du coup ça évite certains soucis. Après du coup ya le cas où il y aurait plusieurs personnages jouable qui utilisent le même dot mais je pense pas laisser cette possibilité (ou sinon je ferais un état pour chacun).

En tout cas la 1ère partie, de mettre dans des variables résout mon problème principal^^
avatar
Ashala
Membre

Nombre de messages : 531
Age : 26
Localisation : L'Antre-Deux-Mondes.
Distinction : "A une araignée au plafond" [Nowa]
Date d'inscription : 09/06/2016

Re: [script] Soucis de perte d'information d'un module à un autre

le Mer 6 Sep 2017 - 19:08
Ah mais les ennemis -peuvent- avoir des lvl grâce aux plugins de Yanfly ou Hime xD
M'enfin, ravie d'avoir pu t 'aider quoiqu'il en soit, bonne continuation !
avatar
Hermoni
Membre

Nombre de messages : 930
Localisation : Quelque part entre la cuisine et le clavier.
Distinction : - Hermomo' le Chat. Noir et sarcastique mais chat tout de même é_è [Shamu' :3]
Poisson 2018 [Amal']
Date d'inscription : 07/09/2015

Re: [script] Soucis de perte d'information d'un module à un autre

le Mer 6 Sep 2017 - 19:13
Ouais, mais c'est pas le genre de truc que j'ajouterais. J'ai jamais été particulièrement fan des ennemis qui montent en lvl.
En tout cas j'pense que ça m'aidera sur d'autres sorts que j'avais pas encore mis en place^^
Contenu sponsorisé

Re: [script] Soucis de perte d'information d'un module à un autre

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