370 lines
No EOL
12 KiB
JavaScript
370 lines
No EOL
12 KiB
JavaScript
//=============================================================================
|
||
// MOG_TrPopUpBattle.js
|
||
//=============================================================================
|
||
|
||
/*:
|
||
* @target MZ
|
||
* @plugindesc (v1.0) Apresenta os ícones dos tesouros após o inimigo morrer.
|
||
* @author Moghunter
|
||
* @url https://mogplugins.wordpress.com
|
||
*
|
||
* @param Drop Item Real Time
|
||
* @desc Ganhar o item em tempo real.
|
||
* @type boolean
|
||
* @default true
|
||
*
|
||
* @param Animation Type
|
||
* @desc Tipo de animação.
|
||
* 0 - Bouncing 1 - Floating
|
||
* @type select
|
||
* @default 0
|
||
* @option Bouncing
|
||
* @value 0
|
||
* @option Floating
|
||
* @value 1
|
||
*
|
||
* @param Fade Duration
|
||
* @desc Tempo para fazer o item desaparecer.
|
||
* @type number
|
||
* @default 20
|
||
* @min 5
|
||
*
|
||
* @param Scale
|
||
* @desc Tamanho do ícone do tesouro.
|
||
* @default 0.8
|
||
*
|
||
* @help
|
||
* =============================================================================
|
||
* ♦♦♦ MOG Treasure PopUp Battle ♦♦♦
|
||
* Author - Moghunter
|
||
* Version - 1.0
|
||
* Updated - 2021/04/04
|
||
* https://mogplugins.wordpress.com
|
||
* =============================================================================
|
||
* Apresenta os ícones dos tesouros após o inimigo morrer.
|
||
*
|
||
*/
|
||
|
||
//=============================================================================
|
||
// ** PLUGIN PARAMETERS
|
||
//=============================================================================
|
||
var Imported = Imported || {};
|
||
Imported.MOG_TrPopUpBattle = true;
|
||
var Moghunter = Moghunter || {};
|
||
|
||
Moghunter.parameters = PluginManager.parameters('MOG_TrPopUpBattle');
|
||
Moghunter.trPopup_animation = Number(Moghunter.parameters['Animation Type'] || 0);
|
||
Moghunter.trPopup_scale = Number(Moghunter.parameters['Scale'] || 0.8);
|
||
Moghunter.trPopup_fadeDuration = Number(Moghunter.parameters['Fade Duration'] || 20);
|
||
Moghunter.trPopup_dropRealTime = String(Moghunter.parameters['Drop Item Real Time'] || 'false');
|
||
|
||
//=============================================================================
|
||
// ■■■ Game Temp ■■■
|
||
//=============================================================================
|
||
|
||
//==============================
|
||
// ♦ ALIAS ♦ Initialize
|
||
//==============================
|
||
var _mog_trPopBattle_tempInitialize = Game_Temp.prototype.initialize;
|
||
Game_Temp.prototype.initialize = function() {
|
||
_mog_trPopBattle_tempInitialize.call(this);
|
||
this._trBatNeedPopUp = false;
|
||
this._trBatRealTimeDrop = String(Moghunter.trPopup_dropRealTime) == 'true' ? true : false;
|
||
this._trBatDropLock = false;
|
||
};
|
||
|
||
//=============================================================================
|
||
// ■■■ Game Temp ■■■
|
||
//=============================================================================
|
||
|
||
//==============================
|
||
// ♦ ALIAS ♦ initMembers
|
||
//==============================
|
||
var _mog_trPopBattle_gEnemy_initMembers = Game_Enemy.prototype.initMembers;
|
||
Game_Enemy.prototype.initMembers = function() {
|
||
_mog_trPopBattle_gEnemy_initMembers.call(this);
|
||
this._treasure = {};
|
||
this._treasure.needPopup = false;
|
||
this._treasure.checked = false;
|
||
this._treasure.item = [];
|
||
};
|
||
|
||
//==============================
|
||
// ♦ OVERWRITE ♦ make Drop Items
|
||
//==============================
|
||
Game_Enemy.prototype.makeDropItems = function() {
|
||
if (this._treasure.checked) {
|
||
return this._treasure.item;
|
||
} else {
|
||
const rate = this.dropItemRate();
|
||
return this.enemy().dropItems.reduce((r, di) => {
|
||
if (di.kind > 0 && Math.random() * di.denominator < rate) {
|
||
return r.concat(this.itemObject(di.kind, di.dataId));
|
||
} else {
|
||
return r;
|
||
}
|
||
}, []);
|
||
};
|
||
};
|
||
|
||
//=============================================================================
|
||
// ■■■ Battle Manager ■■■
|
||
//=============================================================================
|
||
|
||
//==============================
|
||
// ♦ ALIAS ♦ gain Drop Items
|
||
//==============================
|
||
var _mog_BMangr_gainDropItems = BattleManager.gainDropItems;
|
||
BattleManager.gainDropItems = function() {
|
||
if ($gameTemp._trBatDropLock) {return};
|
||
_mog_BMangr_gainDropItems.call(this);
|
||
};
|
||
|
||
//=============================================================================
|
||
// ■■■ Scene Map ■■■
|
||
//=============================================================================
|
||
|
||
//==============================
|
||
// ♦ ALIAS ♦ Initialize
|
||
//==============================
|
||
var _mog_trPopup_scMap_initialize = Scene_Map.prototype.initialize;
|
||
Scene_Map.prototype.initialize = function() {
|
||
$gameTemp._trBatDropLock = false;
|
||
_mog_trPopup_scMap_initialize.call(this)
|
||
};
|
||
|
||
//=============================================================================
|
||
// ■■■ Sprite Enemy ■■■
|
||
//=============================================================================
|
||
|
||
//==============================
|
||
// ♦ ALIAS ♦ Update Collapse
|
||
//==============================
|
||
var _mog_trPopBattle_sprEnemy_updateCollapse = Sprite_Enemy.prototype.updateCollapse;
|
||
Sprite_Enemy.prototype.updateCollapse = function() {
|
||
_mog_trPopBattle_sprEnemy_updateCollapse.call(this);
|
||
if (this._effectDuration === 0 && !this._enemy._treasure.checked) {this.checkTreasurePopup()};
|
||
};
|
||
|
||
//==============================
|
||
// ♦ ALIAS ♦ Update Boss Collapse
|
||
//==============================
|
||
var _mog_trPopBattle_sprEnemy_updateBossCollapse = Sprite_Enemy.prototype.updateBossCollapse;
|
||
Sprite_Enemy.prototype.updateBossCollapse = function() {
|
||
_mog_trPopBattle_sprEnemy_updateBossCollapse.call(this);
|
||
if (this._effectDuration === 0 && !this._enemy._treasure.checked) {this.checkTreasurePopup()};
|
||
};
|
||
|
||
//==============================
|
||
// ♦ ALIAS ♦ Update Instant Collapse
|
||
//==============================
|
||
var _mog_trPopBattle_sprEnemy_updateInstantCollapse = Sprite_Enemy.prototype.updateInstantCollapse;
|
||
Sprite_Enemy.prototype.updateInstantCollapse = function() {
|
||
_mog_trPopBattle_sprEnemy_updateInstantCollapse.call(this);
|
||
if (this._effectDuration === 0 && !this._enemy._treasure.checked) {this.checkTreasurePopup()};
|
||
};
|
||
|
||
//==============================
|
||
// * check Treasure Popup
|
||
//==============================
|
||
Sprite_Enemy.prototype.checkTreasurePopup = function() {
|
||
this._enemy._treasure.item = this._enemy.makeDropItems();
|
||
this._enemy._treasure.checked = true;
|
||
if (this._enemy._treasure.item) {
|
||
this._enemy._treasure.needPopup = true;
|
||
$gameTemp._trBatNeedPopUp = true;
|
||
};
|
||
};
|
||
|
||
//=============================================================================
|
||
// ■■■ Spriteset Battle ■■■
|
||
//=============================================================================
|
||
|
||
//==============================
|
||
// ♦ ALIAS ♦ update
|
||
//==============================
|
||
var _mog_trPopupBat_sprBat_update = Spriteset_Battle.prototype.update;
|
||
Spriteset_Battle.prototype.update = function() {
|
||
_mog_trPopupBat_sprBat_update.call(this);
|
||
if ($gameTemp._trBatNeedPopUp) {this.treasurePopupR()};
|
||
};
|
||
|
||
//==============================
|
||
// * treasurePopupR
|
||
//==============================
|
||
Spriteset_Battle.prototype.treasurePopupR = function() {
|
||
$gameTemp._trBatNeedPopUp = false;
|
||
if (!this._enemiesTreasure) {this._enemiesTreasure = []};
|
||
for (var i = 0; i < this._enemySprites.length; i++) {
|
||
if (this._enemySprites[i]._enemy && this._enemySprites[i]._enemy._treasure.needPopup) {
|
||
this._enemySprites[i]._enemy._treasure.needPopup = false;
|
||
this._enemiesTreasure[i] = new SpriteEnemyTrP(this._enemySprites[i]);
|
||
this._enemiesTreasure[i].z = this._enemySprites[i].z ? this._enemySprites[i].z + 1 : 2;
|
||
this._battleField.addChild(this._enemiesTreasure[i]);
|
||
};
|
||
};
|
||
};
|
||
|
||
//=============================================================================
|
||
// ■■■ Sprite Enemy TrP ■■■
|
||
//=============================================================================
|
||
function SpriteEnemyTrP() {
|
||
this.initialize.apply(this, arguments);
|
||
};
|
||
|
||
SpriteEnemyTrP.prototype = Object.create(Sprite.prototype);
|
||
SpriteEnemyTrP.prototype.constructor = SpriteEnemyTrP;
|
||
|
||
//==============================
|
||
// ♦ ALIAS ♦ Initialize
|
||
//==============================
|
||
SpriteEnemyTrP.prototype.initialize = function(sprite) {
|
||
Sprite.prototype.initialize.call(this);
|
||
this._sprite = sprite;
|
||
this._mode = Moghunter.trPopup_animation;
|
||
this.visible = false;
|
||
this._enemy = this._sprite._enemy;
|
||
this.createIcon();
|
||
if ($gameTemp._trBatRealTimeDrop) {
|
||
$gameTemp._trBatDropLock = true;
|
||
this.gainDropItemsIcons();
|
||
};
|
||
};
|
||
|
||
//==============================
|
||
// * gainDropItems
|
||
//==============================
|
||
SpriteEnemyTrP.prototype.gainDropItemsIcons = function() {
|
||
const items = this._enemy._treasure.item;
|
||
for (const item of items) {
|
||
$gameParty.gainItem(item, 1);
|
||
}
|
||
|
||
};
|
||
|
||
//==============================
|
||
// * create Icon
|
||
//==============================
|
||
SpriteEnemyTrP.prototype.createIcon = function() {
|
||
this._iconImg = ImageManager.loadSystem("IconSet")
|
||
this._icons = [];
|
||
for (var i = 0; i < this._enemy._treasure.item.length; i++) {
|
||
var item = this._enemy._treasure.item[i];
|
||
if (item) {
|
||
this._icons[i] = new Sprite(this._iconImg)
|
||
this._icons[i].item = item;
|
||
this._icons[i].index = i;
|
||
this._icons[i].anchor.x = 0.5;
|
||
this._icons[i].anchor.y = 1;
|
||
this.refreshIcons(this._icons[i]);
|
||
this.addChild(this._icons[i]);
|
||
};
|
||
};
|
||
this._icons.sort(function(a, b){return b.intY-a.intY});
|
||
this.children.sort(function(a, b){return b.intY-a.intY});
|
||
for (var i = 0; i < this._icons.length; i++) {
|
||
this.refreshWait(this._icons[i],i,this._icons.length);
|
||
};
|
||
};
|
||
|
||
//==============================
|
||
// * refresh Wait
|
||
//==============================
|
||
SpriteEnemyTrP.prototype.refreshWait = function(sprite,index,maxv) {
|
||
var mv = maxv * 20;
|
||
var mvt = mv - (20 * index)
|
||
sprite.wait = Moghunter.trPopup_fadeDuration + mvt;
|
||
};
|
||
|
||
//==============================
|
||
// * refresh Icons
|
||
//==============================
|
||
SpriteEnemyTrP.prototype.refreshIcons = function(sprite) {
|
||
var w = ImageManager.iconWidth;
|
||
var h = ImageManager.iconHeight;
|
||
var iconindex = sprite.item.iconIndex;
|
||
var sx = iconindex % 16 * w;
|
||
var sy = Math.floor(iconindex / 16) * h;
|
||
var hr = Math.randomInt(h);
|
||
sprite.setFrame(sx,sy,w,h);
|
||
sprite.intY = ((this._sprite.height / 3) + hr) - h;
|
||
sprite.dr = 60;
|
||
sprite.dy = 15;
|
||
sprite.y = -40;
|
||
sprite.ry = sprite.y + sprite.intY;
|
||
var randx = (Math.random() * 0.5) + (sprite.index / 8);
|
||
var rands = Math.randomInt(2);
|
||
sprite.sx = rands === 0 ? randx : -randx;
|
||
sprite.scale.x = Moghunter.trPopup_scale;
|
||
sprite.scale.y = sprite.scale.x;
|
||
};
|
||
|
||
//==============================
|
||
// * Update Bounce
|
||
//==============================
|
||
SpriteEnemyTrP.prototype.updateBounce = function(sprite) {
|
||
sprite.dy += 0.6;
|
||
sprite.ry += sprite.dy;
|
||
if (sprite.ry >= 0) {
|
||
sprite.ry = 0;
|
||
sprite.dy *= -0.7;
|
||
};
|
||
sprite.y = -sprite.intY + Math.round(sprite.ry);
|
||
if (sprite.y < -sprite.intY) {sprite.x += sprite.sx};
|
||
if (sprite.y === -sprite.intY) {this.updateFade(sprite)};
|
||
};
|
||
|
||
//==============================
|
||
// * Update Float
|
||
//==============================
|
||
SpriteEnemyTrP.prototype.updateFloat= function(sprite) {
|
||
sprite.wait--;
|
||
if (sprite.wait > 0) {return};
|
||
sprite.y -= 3
|
||
sprite.opacity -= 8;
|
||
};
|
||
|
||
//==============================
|
||
// * Update Animation
|
||
//==============================
|
||
SpriteEnemyTrP.prototype.updateAnimation= function(sprite) {
|
||
if (this._mode === 1) {
|
||
this.updateFloat(sprite);
|
||
} else {
|
||
this.updateBounce(sprite);
|
||
};
|
||
};
|
||
|
||
//==============================
|
||
// * Update Fade
|
||
//==============================
|
||
SpriteEnemyTrP.prototype.updateFade = function(sprite) {
|
||
sprite.wait--;
|
||
if (sprite.wait > 0) {return};
|
||
sprite.opacity -= 15;
|
||
sprite.scale.x -= 0.05
|
||
sprite.scale.y += 0.15
|
||
};
|
||
|
||
//==============================
|
||
// * Update Sprites
|
||
//==============================
|
||
SpriteEnemyTrP.prototype.updateSprites = function(sprite) {
|
||
this.visible = true;
|
||
this.updateAnimation(sprite);
|
||
if (sprite.opacity <= 0) {sprite.visible = false};
|
||
};
|
||
|
||
//==============================
|
||
// * Update
|
||
//==============================
|
||
SpriteEnemyTrP.prototype.update = function() {
|
||
Sprite.prototype.update.call(this);
|
||
this.x = this._sprite.x;
|
||
this.y = this._sprite.y;
|
||
if (this._iconImg.isReady()) {
|
||
for (var i = 0; i < this._icons.length; i++) {
|
||
if (this._icons[i].visible) {this.updateSprites(this._icons[i])};
|
||
};
|
||
};
|
||
}; |