132 lines
4 KiB
JavaScript
132 lines
4 KiB
JavaScript
//=============================================================================
|
|
// StateIconInMap.js
|
|
//=============================================================================
|
|
|
|
/*:ja
|
|
* @plugindesc マップ時にステートアイコンを表示
|
|
* @author tubo
|
|
*
|
|
* @param map iconIndex
|
|
* @desc マップに表示するアイコン番号("4":12 ステート[4]の表示をアイコン[12]に変更)
|
|
* @default "4":18, "5":19
|
|
*
|
|
* @param hide stateId
|
|
* @desc 頭上に表示させないステート番号
|
|
* @default 1,2,3
|
|
*
|
|
* @param show number
|
|
* @desc 表示数(-1:全て表示 0:表示しない 1:優先度が最大のみ 2~:指定数を優先度順に交互表示)
|
|
* @default 1
|
|
*
|
|
* @param offset
|
|
* @desc 座標の調整 x,y
|
|
* @default 0,0
|
|
*
|
|
* @param is hiding in event
|
|
* @desc イベント時に隠すかどうか
|
|
* @default true
|
|
*
|
|
* @help
|
|
* ステートのメモ欄に
|
|
* <mapIcon: n>と表記するとn番のアイコンを表示します
|
|
* <mapIcon: 0>で非表示になります
|
|
* 指定がない場合はそのままアイコンを表示します
|
|
*
|
|
*/
|
|
|
|
|
|
(function() {
|
|
|
|
var parameters = PluginManager.parameters('StateIconInMap');
|
|
var SIM = {};
|
|
SIM.replaceIcon = JSON.parse('{'+parameters['map iconIndex']+'}');
|
|
SIM.hide = JSON.parse('['+parameters['hide stateId']+']');
|
|
SIM.offset = JSON.parse('['+parameters['offset']+']');
|
|
SIM.showNumber = JSON.parse(parameters['show number']);
|
|
SIM.eventHide = JSON.parse(parameters['is hiding in event']);
|
|
|
|
|
|
// Sprite_Character
|
|
var _Sprite_Character_setCharacter_sim = Sprite_Character.prototype.setCharacter;
|
|
Sprite_Character.prototype.setCharacter = function(character) {
|
|
_Sprite_Character_setCharacter_sim.call(this,character);
|
|
if (!this._mapStateSprite) {
|
|
var sprite = new Sprite_MapStateIcon();
|
|
this._mapStateSprite = sprite;
|
|
this.addChild(sprite);
|
|
}
|
|
if (character.constructor == Game_Player) {
|
|
this._mapStateSprite.setup($gameParty.leader());
|
|
} else if (character.actor) {
|
|
this._mapStateSprite.setup(character.actor());
|
|
// } else if (character.constructor == Game_Event && character.enemy) {
|
|
// this._mapStateSprite.setup(character.enemy());
|
|
}
|
|
};
|
|
|
|
|
|
// Sprite_MapStateIcon
|
|
function Sprite_MapStateIcon() {
|
|
this.initialize.apply(this, arguments);
|
|
}
|
|
Sprite_MapStateIcon.prototype = Object.create(Sprite_StateIcon.prototype);
|
|
Sprite_MapStateIcon.prototype.constructor = Sprite_MapStateIcon;
|
|
|
|
Sprite_MapStateIcon.prototype.updateIcon = function() {
|
|
if ($gameMap.isEventRunning() && SIM.eventHide) {
|
|
this._animationIndex = 0;
|
|
this._iconIndex = 0;
|
|
return;
|
|
}
|
|
if (this._battler && SIM.showNumber != 0) {
|
|
if (!$gamePlayer.followers().isVisible() && this._battler.index() !== 0) {
|
|
this._animationIndex = 0;
|
|
this._iconIndex = 0;
|
|
return;
|
|
}
|
|
var states = this._battler.states();
|
|
states = states.filter( function(state) {
|
|
return state.meta.mapIcon !== "0" && SIM.replaceIcon[state.id] !== 0 && SIM.hide.indexOf(state.id) === -1;
|
|
} );
|
|
if (states.length > 0) {
|
|
this.x = SIM.offset[0];
|
|
this.y = -this.parent.height - 16 + SIM.offset[1];
|
|
|
|
if (SIM.showNumber === -1) {
|
|
} else if (SIM.showNumber === 1) {
|
|
states = [states.reduce( function(a,b) {
|
|
return a.priority > b.priority ? a : b;
|
|
} )];
|
|
} else {
|
|
states.sort( function(a,b) {
|
|
return a.priority > b.priority;
|
|
} )
|
|
if (states.length > SIM.showNumber) {
|
|
states.splice(SIM.showNumber);
|
|
}
|
|
}
|
|
var icons = states.map( function(state) {
|
|
if (state.meta.mapIcon) return Number(state.meta.mapIcon);
|
|
if (SIM.replaceIcon[state.id]) return SIM.replaceIcon[state.id];
|
|
return state.iconIndex;
|
|
} );
|
|
|
|
if (icons.length > 0) {
|
|
this._animationIndex++;
|
|
if (this._animationIndex >= icons.length) {
|
|
this._animationIndex = 0;
|
|
}
|
|
this._iconIndex = icons[this._animationIndex];
|
|
} else {
|
|
this._animationIndex = 0;
|
|
this._iconIndex = 0;
|
|
}
|
|
} else {
|
|
this._animationIndex = 0;
|
|
this._iconIndex = 0;
|
|
}
|
|
}
|
|
};
|
|
|
|
})();
|
|
|