//============================================================================= // MOG_TreasurePopup.js //============================================================================= /*: * @target MZ * @plugindesc (v1.1) Apresenta o ícone e o nome do tesouro ganho. * @author Moghunter * @url https://mogplugins.wordpress.com * * @param Duration * @desc Duração de apresentação do tesouro. * @default 15 * * @param Fade Speed * @desc Velocidade de Fade. * @default 5 * * @param X - Axis * @desc Posição X-Axis. * @default 0 * * @param Y - Axis * @desc Posição Y-Axis. * @default -32 * * @param Random Movement * @desc Movimento aleatório. * @default false * * @param X Speed * @desc Velocidade de movimento X-Axis. * @default 0 * * @param Y Speed * @desc Velocidade de movimento Y-Axis. * @default 1 * * @param Font Size * @desc Definição do tamanho da fonte. * @default 16 * * @param Icon Scale * @desc Zoom do ícone de 0.10 a 3.00. * @default 0.60 * * @param Treasure Space Y-Axis * @desc Espaço entre um tesouro e outro. * @default 20 * * @param Zoom Effect * @desc Ativar efeito de zoom. * @default false * * @param Gold Popup * @desc Apresentar o dinheiro. * @default true * * @param Gold Icon Index * @desc Index do ícone do ouro na imagem de ícones. * @default 163 * * @command TreasurePopVisible * @desc Ativar ou desativar o plugin. * @text Enable / Disable * * @arg enable * @desc Ativar ou desativar. * @text Active * @default true * @type boolean * * @help * ============================================================================= * +++ MOG - Treasure Popup (v1.1) +++ * By Moghunter * https://mogplugins.wordpress.com * ============================================================================= * Apresenta o ícone e o nome do tesouro ganho. * * ============================================================================= * * HISTÓRICO * ============================================================================= * (v1.1) Correção na função sort relativo a codificação. * */ //============================================================================= // ■■■ PLUGIN PARAMETERS ■■■ //============================================================================= var Imported = Imported || {}; Imported.MOG_TreasurePopup = true; var Moghunter = Moghunter || {}; Moghunter.parameters = PluginManager.parameters("MOG_TreasurePopup"); Moghunter.trpopup_X = Number(Moghunter.parameters["X - Axis"] || 0); Moghunter.trpopup_Y = Number(Moghunter.parameters["Y - Axis"] || 0); Moghunter.trpopup_GoldVisible = String( Moghunter.parameters["Gold Popup"] || "true" ); Moghunter.trpopup_Random = String( Moghunter.parameters["Random Movement"] || "false" ); Moghunter.trpopup_SX = Number(Moghunter.parameters["X Speed"] || 0); Moghunter.trpopup_SY = Number(Moghunter.parameters["Y Speed"] || 1); Moghunter.trpopup_IconScale = Number(Moghunter.parameters["Icon Scale"] || 0.6); Moghunter.trpopup_ItemSpace = Number( Moghunter.parameters["Treasure Space Y-Axis"] || 20 ); Moghunter.trpopup_waitD = Number(Moghunter.parameters["Duration"] || 15); Moghunter.trpopup_Zoom = String(Moghunter.parameters["Zoom Effect"] || "false"); Moghunter.trpopup_fadeSpeed = Number(Moghunter.parameters["Fade Speed"] || 5); Moghunter.trpopup_goldIconIndex = Number( Moghunter.parameters["Gold Icon Index"] || 163 ); Moghunter.trpopup_fontSize = Number(Moghunter.parameters["Font Size"] || 16); //============================================================================= // ■■■ PluginManager ■■■ //============================================================================= PluginManager.registerCommand( "MOG_TreasurePopup", "TreasurePopVisible", (data) => { var enable = String(data.enable) == "true" ? true : false; $gameSystem._trspupVisible = enable; } ); //============================================================================= // ■■■ Game System ■■■ //============================================================================= //============================== // ♦ ALIAS ♦ Initialize //============================== var _mog_treapopup_Gsys_initialize = Game_System.prototype.initialize; Game_System.prototype.initialize = function () { _mog_treapopup_Gsys_initialize.call(this); this._trspupData = []; this._trspupSprData = null; this._trspupVisible = true; this._trspupMapID = 0; }; //============================================================================= // ■■■ Game Interpreter ■■■ //============================================================================= //============================== // ♦ ALIAS ♦ Command 125 //============================== var _mog_treaPopUP_gint_command125 = Game_Interpreter.prototype.command125; Game_Interpreter.prototype.command125 = function (params) { _mog_treaPopUP_gint_command125.call(this, params); if (Moghunter.trpopup_GoldVisible === "true") { this.checkTreasurePopup(3, params); } return true; }; //============================== // ♦ ALIAS ♦ Command 126 //============================== var _mog_treaPopUP_gint_command126 = Game_Interpreter.prototype.command126; Game_Interpreter.prototype.command126 = function (params) { _mog_treaPopUP_gint_command126.call(this, params); this.checkTreasurePopup(0, params); return true; }; //============================== // ♦ ALIAS ♦ command 127 //============================== var _mog_treaPopUP_gint_command127 = Game_Interpreter.prototype.command127; Game_Interpreter.prototype.command127 = function (params) { _mog_treaPopUP_gint_command127.call(this, params); this.checkTreasurePopup(1, params); return true; }; //============================== // ♦ ALIAS ♦ command 128 //============================== var _mog_treaPopUP_gint_command128 = Game_Interpreter.prototype.command128; Game_Interpreter.prototype.command128 = function (params) { _mog_treaPopUP_gint_command128.call(this, params); this.checkTreasurePopup(2, params); return true; }; //============================== // * checkTreasurePopup //============================== Game_Interpreter.prototype.checkTreasurePopup = function (type, params) { if ($gameSystem._trspupVisible) { if (type > 2) { var amount = this.operateValue(params[0], params[1], params[2]); } else { var amount = this.operateValue(params[1], params[2], params[3]); } if (amount > 0 && SceneManager._scene.constructor.name === "Scene_Map") { for (i = 0; i < $gameMap.events().length; i++) { var eve = $gameMap.events()[i]; if (eve && this._eventId === eve._eventId) { var x = eve.screenX(); var y = eve.screenY(); $gameSystem._trspupData.push([ this.trPopupType(type, params), amount, x, y, ]); } } } } }; //============================== // * Tr popup Type //============================== Game_Interpreter.prototype.trPopupType = function (type, params) { if (type === 0) { return $dataItems[params[0]]; } if (type === 1) { return $dataWeapons[params[0]]; } if (type === 2) { return $dataArmors[params[0]]; } return null; }; //============================================================================= // ■■■ Scene Map ■■■ //============================================================================= //============================== // ♦ ALIAS ♦ Terminate //============================== var _mog_treapopup_scMap_terminate = Scene_Map.prototype.terminate; Scene_Map.prototype.terminate = function () { _mog_treapopup_scMap_terminate.call(this); if (this._spriteset) { this._spriteset.recordTreasureData(); } }; //============================================================================= // ■■■ SpriteSet Base ■■■ //============================================================================= //============================== // ** create Hud Field //============================== Spriteset_Base.prototype.createHudField3 = function () { this._hudField3 = new Sprite(); this._hudField3.z = 100; this.addChild(this._hudField3); }; //============================== // ** sort MZ //============================== Spriteset_Base.prototype.sortMz = function () { if (this._hudField1) { this._hudField1.children.sort((a, b) => a.z - b.z); } if (this._hudField2) { this._hudField2.children.sort((a, b) => a.z - b.z); } if (this._hudField3) { this._hudField3.children.sort((a, b) => a.z - b.z); } }; //============================== // ♦ ALIAS ♦ create Lower Layer //============================== var _mog_trspop_sprtBase_createLowerLayer = Spriteset_Map.prototype.createLowerLayer; Spriteset_Map.prototype.createLowerLayer = function () { _mog_trspop_sprtBase_createLowerLayer.call(this); this.setTreasureField(); }; //============================== // * set Treasure Field //============================== Spriteset_Map.prototype.setTreasureField = function () { if (!this._hudField3) { this.createHudField3(); } this.createTreasureField(); if ( $gameSystem._trspupSprData && $gameSystem._trspupMapID === $gameMap._mapId ) { this.loadTreasureIcons(); } else { $gameSystem._trspupData = []; $gameSystem._trspupSprData = null; } $gameSystem._trspupMapID = $gameMap._mapId; }; //============================== // * record Treasure Data //============================== Spriteset_Map.prototype.recordTreasureData = function () { if (!this._treasureIcons || this._treasureIcons.length === 0) { return; } $gameSystem._trspupSprData = []; for (i = 0; i < this._treasureIcons.length; i++) { $gameSystem._trspupSprData[i] = {}; $gameSystem._trspupSprData[i]._item = this._treasureIcons[i]._item; $gameSystem._trspupSprData[i]._amount = this._treasureIcons[i]._amount; $gameSystem._trspupSprData[i].x = this._treasureIcons[i].x; $gameSystem._trspupSprData[i].y = this._treasureIcons[i].y; $gameSystem._trspupSprData[i].opacity = this._treasureIcons[i].opacity; $gameSystem._trspupSprData[i].scale = this._treasureIcons[i].scale.x; $gameSystem._trspupSprData[i]._sx = this._treasureIcons[i]._sx; $gameSystem._trspupSprData[i]._sy = this._treasureIcons[i]._sy; $gameSystem._trspupSprData[i]._cx = this._treasureIcons[i]._cx; $gameSystem._trspupSprData[i]._cy = this._treasureIcons[i]._cy; $gameSystem._trspupSprData[i]._wait = this._treasureIcons[i]._wait; } }; //============================== // * create Treasure Field //============================== Spriteset_Map.prototype.createTreasureField = function () { this._treasureIcons = []; this._treasureField = new Sprite(); this._treasureField.z = 110; this._hudField3.addChild(this._treasureField); this.sortMz(); }; //============================== // ♦ ALIAS ♦ update //============================== var _mog_treapopup_sprmap_update = Spriteset_Map.prototype.update; Spriteset_Map.prototype.update = function () { _mog_treapopup_sprmap_update.call(this); if (this._treasureField) { this.updateTreasureIcons(); } }; //============================== // * load Treasure Icons //============================== Spriteset_Map.prototype.loadTreasureIcons = function () { for (i = 0; i < $gameSystem._trspupSprData.length; i++) { this._treasureIcons.push( new TreasureIcons( null, $gameSystem._trspupSprData[i], i, $gameSystem._trspupSprData.length ) ); this._treasureField.addChild(this._treasureIcons[i]); } $gameSystem._trspupSprData = null; }; //============================== // * refresh Treasure Icons //============================== Spriteset_Map.prototype.refreshTreasureIcons = function () { for (i = 0; i < $gameSystem._trspupData.length; i++) { this._treasureIcons.push( new TreasureIcons( $gameSystem._trspupData[i], null, i, $gameSystem._trspupData.length ) ); this._treasureField.addChild( this._treasureIcons[this._treasureIcons.length - 1] ); } $gameSystem._trspupData = []; }; //============================== // * need Refresh Treasure Icons //============================== Spriteset_Map.prototype.needRefreshTreasureIcons = function () { if ($gameSystem._trspupData.length > 0) { return true; } return false; }; //============================== // * create Treasure Icons //============================== Spriteset_Map.prototype.updateTreasureIcons = function () { if (this.needRefreshTreasureIcons()) { this.refreshTreasureIcons(); } for (i = 0; i < this._treasureIcons.length; i++) { if ( this._treasureIcons[i].opacity === 0 && this._treasureIcons[i]._wait[1] <= 0 ) { this._treasureField.removeChild(this._treasureField[i]); this._treasureIcons.splice(i, 1); } } }; //============================================================================= // ■■■ Treasure Icons ■■■ //============================================================================= function TreasureIcons() { this.initialize.apply(this, arguments); } TreasureIcons.prototype = Object.create(Sprite.prototype); TreasureIcons.prototype.constructor = TreasureIcons; //============================== // * Initialize //============================== TreasureIcons.prototype.initialize = function (data, dataOld, fx, fmax) { Sprite.prototype.initialize.call(this); this._fadeSpeed = Math.min(Math.max(Moghunter.trpopup_fadeSpeed, 1), 100); this._waitR = Math.min(Math.max(Moghunter.trpopup_waitD, 1), 999); this._zoomAn = String(Moghunter.trpopup_Zoom) === "true" ? true : false; this._fx = fx; this._fmax = fmax * this.waitD(); this.createName(); this.createIcon(); if (dataOld) { this.setupOld(dataOld); } else { this.setupNew(data); } this.refreshIcon(); this.refreshName(); this.x = -this.screenX() + this._cx; this.y = -this.screenY() + this._cy; }; //============================== // * SetupOld //============================== TreasureIcons.prototype.setupOld = function (data) { this._item = data._item; this._amount = data._amount; this.x = data.x; this.y = data.y; this.scale.x = data.scale; this.scale.y = data.scale; this.opacity = data.opacity; this._sx = data._sx; this._sy = data._sy; this._cx = data._cx; this._cy = data._cy; this._wait = data._wait; }; //============================== // * wait D //============================== TreasureIcons.prototype.waitD = function () { return this._waitR; }; //============================== // * SetupNew //============================== TreasureIcons.prototype.setupNew = function (data) { this._item = data[0]; this._amount = data[1]; var name = this._item ? this._item.name + " x " + this._amount : this._amount; var wd = this._name.bitmap.measureTextWidth(name); this._cx = data[2] - (ImageManager.iconWidth + 12 + wd) / 2 + Moghunter.trpopup_X + this.screenX(); this._cy = data[3] - ImageManager.iconHeight + Moghunter.trpopup_Y + this.screenY(); this._cy -= this._fx * Moghunter.trpopup_ItemSpace; var iw = this._fx * this.waitD(); var iw2 = this.waitD() + (this._fmax - iw); this._wait = [15, iw2]; this.opacity = 0; if (String(Moghunter.trpopup_Random) === "true") { var d = Math.randomInt(2); var sx = Math.random() * this.sxi() + this.sxi(); this._sx = d === 0 ? sx : -sx; this._sy = -(Math.random() + this.syi()); } else { this._sx = this.sxi(); this._sy = -this.syi(); } }; //============================== // * sxi //============================== TreasureIcons.prototype.sxi = function () { return Moghunter.trpopup_SX; }; //============================== // * syi //============================== TreasureIcons.prototype.syi = function () { return Moghunter.trpopup_SY; }; //============================== // * createIcon //============================== TreasureIcons.prototype.createIcon = function () { this._iconImg = ImageManager.loadSystem("IconSet"); this._icon = new Sprite(this._iconImg); this._icon.scale.x = Math.min( Math.max(Moghunter.trpopup_IconScale, 0.1), 3.0 ); this._icon.scale.y = this._icon.scale.x; this._icon.anchor.x = 0.5; this._icon.anchor.y = 0.5; this._icon.x = ImageManager.iconWidth / 2; this._icon.y = ImageManager.iconHeight / 2; this.addChild(this._icon); }; //============================== // * refresh Icon //============================== TreasureIcons.prototype.refreshIcon = function () { var w = ImageManager.iconWidth; var h = ImageManager.iconHeight; var iconindex = this._item ? this._item.iconIndex : Moghunter.trpopup_goldIconIndex; var sx = (iconindex % 16) * w; var sy = Math.floor(iconindex / 16) * h; this._icon.setFrame(sx, sy, w, h); }; //============================== // * create Name //============================== TreasureIcons.prototype.createName = function () { this._name = new Sprite(new Bitmap(150, 32)); this._name.x = ImageManager.iconWidth + 4; this._name.bitmap.fontSize = Moghunter.trpopup_fontSize; this.addChild(this._name); }; //============================== // * refresh Name //============================== TreasureIcons.prototype.refreshName = function () { this._name.bitmap.clear(); var name = this._item ? this._item.name + " x " + this._amount : this._amount; this._name.bitmap.drawText(name, 0, 0, 145, 32); }; //============================== // * screen Y //============================== TreasureIcons.prototype.screenX = function () { return $gameMap.displayX() * $gameMap.tileWidth(); }; //============================== // * screen Y //============================== TreasureIcons.prototype.screenY = function () { return $gameMap.displayY() * $gameMap.tileHeight(); }; //============================== // * Update Position //============================== TreasureIcons.prototype.updatePosition = function () { this.x = -this.screenX() + this._cx; this.y = -this.screenY() + this._cy; }; //============================== // * Update Movement //============================== TreasureIcons.prototype.updateMovement = function () { this._cx += this._sx; this._cy += this._sy; }; //============================== // * Update Other //============================== TreasureIcons.prototype.updateOther = function () { this.opacity -= this._fadeSpeed; if (this._zoomAn) { this.scale.x += 0.01; this.scale.y = this.scale.x; } }; //============================== // * Update //============================== TreasureIcons.prototype.update = function () { Sprite.prototype.update.call(this); if (this._wait[0] > 0) { this._wait[0]--; this.opacity += 17; this.updatePosition(); if (this._wait[1] <= 0) { this.opacity += 255; this._wait[0] = 0; } return; } if (this._wait[1] > 0) { this._wait[1]--; this.updatePosition(); return; } this.updateMovement(); this.updateOther(); this.updatePosition(); };