Connexion automatique

Pas encore membre ? Inscrivez-vous ici !
Vous avez oublié votre mot de passe ? On vous aide ici

AccueilPage d'accueilFAQRechercherS'enregistrerConnexion

Sélecteur de thème :


Partagez | .
Ajouter un effet à la perte d'un état

Hermoni
Garde du Trésor

Garde du Trésor
avatar
En ligne

Nombre de messages : 818
Localisation : Quelque part entre la cuisine et le clavier.
Capacités : bon
Distinction : aucune
Date d'inscription : 07/09/2015

MessageSujet: Ajouter un effet à la perte d'un état   Mer 5 Juil 2017 - 15: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
Philosophe

Philosophe
avatar
http://elemsischronicles.blogspot.fr/

Nombre de messages : 399
Age : 26
Localisation : Pyrénées-Orientales
Capacités : confirmé
Distinction : aucune
Date d'inscription : 05/01/2009

MessageSujet: Re: Ajouter un effet à la perte d'un état   Mer 5 Juil 2017 - 20: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
Garde du Trésor

Garde du Trésor
avatar
En ligne

Nombre de messages : 818
Localisation : Quelque part entre la cuisine et le clavier.
Capacités : bon
Distinction : aucune
Date d'inscription : 07/09/2015

MessageSujet: Re: Ajouter un effet à la perte d'un état   Jeu 6 Juil 2017 - 5: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
Garde du Trésor

Garde du Trésor
avatar
En ligne

Nombre de messages : 818
Localisation : Quelque part entre la cuisine et le clavier.
Capacités : bon
Distinction : aucune
Date d'inscription : 07/09/2015

MessageSujet: Re: Ajouter un effet à la perte d'un état   Sam 8 Juil 2017 - 14: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é




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