Le Deal du moment : -50%
-50% Baskets Nike Dunk Low
Voir le deal
64.99 €

Aller en bas
Hermoni
Hermoni
Membre

Nombre de messages : 1042
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']
Rat de mon zoo sur le thème des rats [Ministre de la Culture]
Date d'inscription : 07/09/2015

Ajouter un effet à la perte d'un état Empty Ajouter un effet à la perte d'un état

Jeu 6 Juil 2017 - 4:57
Hey,
"Petite" question : Est-il possible quelconque d'ajouter un effet à la perte d'un état ?

Disons que j'ai un sort qui pose un état. Cet état dure 5 tours et à la fin de ces 5 tours quand il se barre je voudrais pouvoir définir quelque chose (dmg, pose d'un autre etat, gains vie/mana/tp, etc).
Exemple random parmi d'autres que j'ai en tête : l'état est une bombe à retardement, au bout des 5 tours ça lui file des dmg et un état de brûlure (exemple au pif, ça aurait très bien pu le tuer, l'idée est aussi la même pour un auto-life).

En fait, limite ce dont j'aurais besoin c'est juste de pouvoir rajouter une formule (comme celles de combat) qui se lancerait à la perte de l'état.

Et si possible, sans l'ajout de plugin type "yanfly" qui ajoute plein de fonctions non-voulues.
Elemsis
Elemsis
Membre

Nombre de messages : 432
Age : 33
Localisation : Pyrénées-Orientales
Distinction : aucune
Date d'inscription : 05/01/2009
http://elemsischronicles.blogspot.fr/

Ajouter un effet à la perte d'un état Empty Re: Ajouter un effet à la perte d'un état

Jeu 6 Juil 2017 - 9:33
Alors, j'ai pas de solution miracle, mais j'ai débusqué une combinaison de deux plugins qui devrait faire l'affaire.

Progressive States, de Hime
http://mvplugins.com/plugin/HimeWorks/HimeWorks%20-%20Progressive%20States

Celui-ci permet que l'expiration d'un état en appelle un autre.
Pour l'exemple de la bombe à retardement, ça te donnera la possibilité d'infliger la brûlure, mais comme on est limités dans les paramètres d'états, ça ne suffit pas à infliger les dégâts de l'explosion.

C'est là qu'intervient ma deuxième trouvaille.

State Common Event, de Gilgamar
https://forums.rpgmakerweb.com/index.php?threads/state-common-events.57853/

Un petit notetag sur un état permet d'appeler un événement commun lorsqu'il est ajouté, soigné, ou qu'il expire. Tu pourras donc gérer les autres effets par événement commun.

---------------

Je n'ai pas testé, en théorie ça marche, et les deux scripts sont censés fonctionner de manière indépendante, pas besoin d'un engine quelconque ni d'un core script.
Malgré tout, une incompatibilité avec les autres plugins que tu utilises reste possible, donc ya plus qu'à tester et voir ce que ça donne.

GL!
Hermoni
Hermoni
Membre

Nombre de messages : 1042
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']
Rat de mon zoo sur le thème des rats [Ministre de la Culture]
Date d'inscription : 07/09/2015

Ajouter un effet à la perte d'un état Empty Re: Ajouter un effet à la perte d'un état

Jeu 6 Juil 2017 - 18:57
Le 1er fonctionne visiblement très bien. J'ai testé rapidement et ça allait.

Le 2ème par contre a quelques soucis. D'ailleurs l'auteur avait fait un truc du même genre sur les équipements (que quelqu'un a modifié vu qu'il déconne pareil), du coup essayé de m'en inspirer pour voir ce qui peut déconner.

J'ai juste réussi à le faire charger, mais soit ça plante, soit ça marche pas.
Donc si quelqu'un qui s'y connait largement plus que moi en javascript arrive à voir c'qui déconne suis preneur (car pour le coup, c'est celui ci qui m'ouvre plus de possibilité^^).
Hermoni
Hermoni
Membre

Nombre de messages : 1042
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']
Rat de mon zoo sur le thème des rats [Ministre de la Culture]
Date d'inscription : 07/09/2015

Ajouter un effet à la perte d'un état Empty Re: Ajouter un effet à la perte d'un état

Dim 9 Juil 2017 - 3:13
Bon, après quelques recherches et tests, j'ai réussi à faire les modifs pour que ça fonctionne le script mais reste un soucis que je n'arrive pas à savoir comment je peux faire.

S'il y a plus d'un event qui doit se lancer sur le même moment, seulement le dernier se jouera. De c'que j'en ai lu c'est un soucis de si ça arrive à la même frame le dernier event mis en réserve écrase le précédent.

Du coup : Comment je pourrais contourner ce soucis pour que les events soient joué l'un après l'autre si ça arrive ?


V'la le script modifié du coup :
Code:
/*=============================================================================
* Gilgamar - State Common Event
* By Gilgamar
* G_StateCE.js
* Version: 1.02
* Free for commercial and non commercial use.
*=============================================================================*/

var Imported = Imported || {};
Imported.G_StateCE = true;

var StateCE = {};

/*:
* @plugindesc v1.02 Enable state common events.
* @author Gilgamar
*
* @param Actor
* @desc ID of game variaable to use.
* Contains ID of actor affected by state change.
* @default 0
*
* @param Occurs
* @desc ID of game variaable to use.
* Shows if state is onadd, onremove or onexpire.
* @default 0
*
* @help
* ============================================================================
* Introduction
* ============================================================================
* Enables state add/remove common events via notetags. Ex:
*
* <StateCE Event: 1 onadd>
* <StateCE Event: 2 onremove>
* <StateCE Event: 3 onexpire>
*
* The precedling lines will run common event ID 001 on state add, ID 002
* on state remove, and ID 003 on state expire for the state tagged.
*
* Use the game variable assigned in param Actor to determine which actor was
* affected by state change in your common event.
*
* Use the game variable assigned in param Occurs to determine which state
* change was applied. You can use this instead of separate common events.
* 1 = onadd
* 2 = onremove
* 3 = onexpire
*
* ============================================================================
* Changelog
* ============================================================================
* Version 1.02:
* - Added Actor param so we can see who was affected by state change
* - Added Occurs param so we can if state is add/remove or expire
*
* Version 1.01:
* - Added onexpire notetag for progressive states
* - Compatibile with Yanfly BattleEngine (turn-based and tick-based)
*
* Version 1.00:
* - Enables state add/remove common events via notetags
*/

//=============================================================================
// Parameters
//=============================================================================

StateCE.Parameters = PluginManager.parameters('G_StateCE');
StateCE.Param = StateCE.Param || {};
StateCE.Param.Actor = String(StateCE.Parameters['Actor']);
StateCE.Param.Occurs = String(StateCE.Parameters['Occurs']);

//=============================================================================
// Notetags
//=============================================================================

StateCE.DataManager_isDatabaseLoaded = DataManager.isDatabaseLoaded;
DataManager.isDatabaseLoaded = function() {
if (!StateCE.DataManager_isDatabaseLoaded.call(this)) return false;
DataManager.processSTATECENotetags1($dataStates);
return true;
};

DataManager.processSTATECENotetags1 = function(group) {
// Check if function called more than once
if (DataManager.processSTATECENotetags1.calledTimes++ > 1) return;

var note1 = /<(?:STATECE EVENT):[ ](\d+)[ ](ONADD)>/i;
var note2 = /<(?:STATECE EVENT):[ ](\d+)[ ](ONREMOVE)>/i;
var note3 = /<(?:STATECE EVENT):[ ](\d+)[ ](ONEXPIRE)>/i;

for (var n = 1; n < group.length; n++) {
var obj = group[n];
var notedata = obj.note.split(/[\r\n]+/);
// console.log(notedata)
obj.commonEvents = [];
for (var i = 0; i < notedata.length; i++) {
var line = notedata[i];
if (line.match(note1)) {
obj.commonEvents.push({
eventId: parseInt(RegExp.$1),
occurs: 'onadd'
});
} else if (line.match(note2)) {
obj.commonEvents.push({
eventId: parseInt(RegExp.$1),
occurs: 'onremove'
});
} else if (line.match(note3)) {
obj.commonEvents.push({
eventId: parseInt(RegExp.$1),
occurs: 'onexpire'
});
}
}
}
// console.log(group)

};
DataManager.processSTATECENotetags1.calledTimes = 0;

//=============================================================================
// StateCE Functions
//=============================================================================

// Queue the common event associated with the state
StateCE.changeState = function(actor, stateId, occurs) {
 if (Array.isArray(stateId)) {
 for (var j = 0; j < stateId.length; j++){
 var state = $dataStates[stateId[j]];
 for (var i = 0; i < state.commonEvents.length; i++){
 var commonEvent = state.commonEvents[i];
 if (commonEvent.occurs === occurs) {

 // Saving ID of actor affected by state change
 $gameVariables.setValue(StateCE.Param.Actor, actor._actorId);
 // Saving state occurs
 if (occurs === 'onadd') $gameVariables.setValue(StateCE.Param.Occurs, 1);
 if (occurs === 'onremove') $gameVariables.setValue(StateCE.Param.Occurs, 2);
 if (occurs === 'onexpire') $gameVariables.setValue(StateCE.Param.Occurs, 3);
 
 // DEBUGGING
 console.log('Actor', actor._actorId)
 console.log('State', occurs)
 console.log(commonEvent)
 
 // Update common events
 $gameTemp.reserveCommonEvent(commonEvent.eventId);
 }
 }
 }
 ///////////////////////////////////////////////////////
 } else {
 var state = $dataStates[stateId];
 for (var i = 0; i < state.commonEvents.length; i++){
 var commonEvent = state.commonEvents[i];
 if (commonEvent.occurs === occurs) {

 // Saving ID of actor affected by state change
 $gameVariables.setValue(StateCE.Param.Actor, actor._actorId);
 // Saving state occurs
 if (occurs === 'onadd') $gameVariables.setValue(StateCE.Param.Occurs, 1);
 if (occurs === 'onremove') $gameVariables.setValue(StateCE.Param.Occurs, 2);
 if (occurs === 'onexpire') $gameVariables.setValue(StateCE.Param.Occurs, 3);
 
 // DEBUGGING
 console.log('Actor', actor._actorId)
 console.log('State', occurs)
 console.log(commonEvent)
 
 // Update common events
 $gameTemp.reserveCommonEvent(commonEvent.eventId);
 }
 }
 }
 

 }
 
 StateCE.onAdd = function(actor, stateId) {this.changeState(actor, stateId, 'onadd')}
 StateCE.onRemove = function(actor, stateId) {this.changeState(actor, stateId, 'onremove')}
 StateCE.onExpire = function(actor, stateId) {this.changeState(actor, stateId, 'onexpire')}

 // Borrowed this function from Himeworks progressive states
 Game_Battler.prototype.compareStates = function(oldStates, newStates) {
 for (var i = 0, len = oldStates.length; i < len; i++) {
 var stateId = oldStates;
 var state = $dataStates[stateId];
 if (!newStates.contains(stateId)) {
 StateCE.onExpire(this, stateId);
 }
 }
 //}
}

//=============================================================================
// RPG Maker Overrides for State Add/Remove
//=============================================================================

StateCE.Game_Battler_removeState = Game_Battler.prototype.removeState;
Game_Battler.prototype.removeState = function(stateId) {
StateCE.Game_Battler_removeState.call(this, stateId);
StateCE.onRemove(this, stateId);
};

StateCE.Game_Battler_addState = Game_Battler.prototype.addState;
Game_Battler.prototype.addState = function(stateId) {
StateCE.Game_Battler_addState.call(this, stateId);
StateCE.onAdd(this, stateId);
};

//=============================================================================
// RPG Maker Overrides for State Expiry
//=============================================================================

/* Remove by walking */
StateCE.GameActor_updateStateSteps = Game_Actor.prototype.updateStateSteps;
Game_Actor.prototype.updateStateSteps = function(state) {
StateCE.GameActor_updateStateSteps.call(this, state);
if (!this.isStateAffected(state.id)) { StateCE.onExpire(this, state.id) }
};

/* Remove by damage */
StateCE._GameBattler_removeStatesByDamage = Game_Battler.prototype.removeStatesByDamage;
Game_Battler.prototype.removeStatesByDamage = function() {
var oldStates = this._states.clone();
StateCE._GameBattler_removeStatesByDamage.call(this);
var newStates = this._states;
this.compareStates(oldStates, newStates);
};

/* Remove by turn end and action end */
if (Imported.YEP_BattleEngineCore) {

StateCE.Game_BattlerBase_updateStateTurnTiming = Game_BattlerBase.prototype.updateStateTurnTiming;
Game_BattlerBase.prototype.updateStateTurnTiming = function(timing) {
var oldStates = this._states.clone();
StateCE.Game_BattlerBase_updateStateTurnTiming.call(this, timing);
var newStates = this._states;
this.compareStates(oldStates, newStates);
};

StateCE.Game_BattlerBase_updateStateTicks = Game_BattlerBase.prototype.updateStateTicks;
Game_BattlerBase.prototype.updateStateTicks = function() {
var oldStates = this._states.clone();
StateCE.Game_BattlerBase_updateStateTicks.call(this);
var newStates = this._states;
this.compareStates(oldStates, newStates);
};

} else {

StateCE._GameBattler_removeStatesAuto = Game_Battler.prototype.removeStatesAuto;
Game_Battler.prototype.removeStatesAuto = function(timing) {
var oldStates = this._states.clone();
StateCE._GameBattler_removeStatesAuto.call(this, timing);
var newStates = this._states;
this.compareStates(oldStates, newStates);
};

};
Contenu sponsorisé

Ajouter un effet à la perte d'un état Empty Re: Ajouter un effet à la perte d'un état

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