//============================================================================= // Mount Blade Battle System Engine Plugins - Instant Message Plugins // MBBS_InstantMessage.js //============================================================================= /*: * @plugindesc v1.1 Instant Message Plugins 群战系统MV插件系列之 - 即时消息系统 【XP移植】 * @author Chivalry Studio Plugins / Ivan * @param ---Notification--- * @default * @param MaxLimit * @desc 最多显示多少条消息 * Default: 12 * @default 12 * @param Delay * @desc 显示多少秒后才消失(单位秒) * Default: 3 * @default 3 * @param DisappearSpeed * @desc 消失速度 (越大越快); * Default: 5 * @default 5 * @param InitialX * @desc 初始位置X坐标(显示区域左上角X坐标) * Default: 0 * @default 0 * @param InitialY * @desc 初始位置Y坐标(显示区域左上角Y坐标) * Default: 312 * @default 312 * @param Width * @desc 显示区域宽度 * Default: 272 * @default 272 * @param Height * @desc 显示区域高度 * Default: 312 * @default 312 * @param ---Font Data--- * @default * @param FontFace * @desc 字体名 * Default: GameFont * @default GameFont * @param FontSize * @desc 字体大小 * Default: 28 * @default 28 * @param TextColor * @desc 字体颜色 * Default: #ffffff * @default #ffffff * @help * -------------------------------------------------------------------------------- * Free for non commercial use. * Version 1.1 * -------------------------------------------------------------------------------- * Mount Blade Battle System Engine Plugins - Instant Message Plugins 群战系统MV插件系列之 - 即时消息系统 【移植】 本系统原为XP即时消息系统脚本 by: 英顺的马甲 在下觉得这个系统写的很好,于是将这个系统翻译成了MV版本。 在下并非原作者,在下是编辑者。 * -------------------------------------------------------------------------------- * How to use: 使用方法 * -------------------------------------------------------------------------------- mes (String) the Message. [Required] 必填,字符串。想要发送的消息 color (String) for example: '#ffff00' [Optional] 选填,字符串,字体颜色。默认为系统颜色 size (Number) font Size. [Optional] 选填,数字,字体大小。默认为系统字体大小 Notification.post(msg, color, size); 发一条消息。 x: (Number) 移动目的地X坐标 [Required] y: (Number) 移动目的地Y坐标 [Required] width: (Number) 移动后宽度 [Required] height:(Number) 移动后高度 [Required] Notification.move(x,y,width,height); 移动消息显示区域到x,y,width, height Notification.clear(); 清空消息 Notification.show(); 开启消息显示 Notification.hide(); 关闭消息显示 Notification.pause(); 暂停消息显示 Notification.restore(); 恢复消息显示 * -------------------------------------------------------------------------------- * Version History * -------------------------------------------------------------------------------- * * 1.1 - [2017-5-26] * 修复调出菜单后信息栏不再显示的BUG * Fixed bug: after calling menu, the notification window will no longer display * * 1.0 - [2016-4-6] * 正式发布 * Release * */ var Imported = Imported || {}; Imported.MBBS_InstantMessage = true; var MBBS_MV = MBBS_MV || {}; MBBS_MV.InstantMessage = MBBS_MV.InstantMessage || {}; //============================================================================= // Parameter Variables //============================================================================= MBBS_MV.Parameters = PluginManager.parameters('MBBS_InstantMessage'); MBBS_MV.Param = MBBS_MV.Param || {}; //notification data MBBS_MV.Param.MaxLimit = Number(MBBS_MV.Parameters['MaxLimit']); MBBS_MV.Param.Delay = Number(MBBS_MV.Parameters['Delay']); MBBS_MV.Param.DisappearSpeed = Number(MBBS_MV.Parameters['DisappearSpeed']); MBBS_MV.Param.InitialX = Number(MBBS_MV.Parameters['InitialX']); MBBS_MV.Param.InitialY = Number(MBBS_MV.Parameters['InitialY']); MBBS_MV.Param.Width = Number(MBBS_MV.Parameters['Width']); MBBS_MV.Param.Height = Number(MBBS_MV.Parameters['Height']); //font data MBBS_MV.Param.FontFace = String(MBBS_MV.Parameters['FontFace']); MBBS_MV.Param.FontSize = Number(MBBS_MV.Parameters['FontSize']); MBBS_MV.Param.TextColor = String(MBBS_MV.Parameters['TextColor']); //============================================================================= // Plugin commands -- Game_Interpreter //============================================================================= // MBBS_MV.InstantMessage.Game_Interpreter_pluginCommand = // Game_Interpreter.prototype.pluginCommand; // Game_Interpreter.prototype.pluginCommand = function(command, args) { // MBBS_MV.InstantMessage.Game_Interpreter_pluginCommand.call(this, command, args); // if (command == "") {} // }; //============================================================================= // Notification //============================================================================= function Notification() { throw new Error('This is a static class'); }; Notification.FRAME_PER_SECOND = 60; Notification.initMember = function() { this._msg = null; this._limit = MBBS_MV.Param.MaxLimit; this._delay = MBBS_MV.Param.Delay; this._disappearSpeed = MBBS_MV.Param.DisappearSpeed; this._opacity = 0; this._pause = false; this._count = this._delay * this.FRAME_PER_SECOND; this._sprite = new Sprite(); this._sprite.bitmap = new Bitmap(1,1); this._sprite.z = 99999; this._hasInitalized = false; }; Notification.initialize = function() { this._hasInitalized = true; Notification.move( MBBS_MV.Param.InitialX, MBBS_MV.Param.InitialY, MBBS_MV.Param.Width, MBBS_MV.Param.Height ); } Object.defineProperty(Notification, 'opacity', { get: function() { return this._opacity; }, set: function(opacity) { this._opacity = opacity; this._sprite.opacity = opacity; }, configurable: true }); Notification.setFont = function(fontFace,fontSize,textColor) { this._sprite.bitmap.fontFace = fontFace; this._sprite.bitmap.fontSize = fontSize; this._sprite.bitmap.textColor = textColor; }; Notification.move = function(x,y,width,height) { this._sprite.x = x; this._sprite.y = y; this._sprite.z = 99999; this._sprite.bitmap = new Bitmap(width, height); this.refresh(); }; Notification.refresh = function () { SceneManager._scene.addChild(this._sprite); if ($gameSystem != null) { this.redraw(); } }; Notification.setLimit = function(max){ this._limit = max; }; Notification.post = function(msg, color, size) { if (this._pause) { return; } if (!this._hasInitalized) { this.initialize(); } // creating message node and push it to $gameSystem.notifications var node = new Notification_Message(msg.slice(0), color,size); $gameSystem.notifications.push(node); // shift when reach max display while($gameSystem.notifications.length > this._limit){ $gameSystem.notifications.shift(); } if ($gameSystem != null) { this.redraw(); } //reset counter to and to display the message this._count = this._delay * this.FRAME_PER_SECOND; this.opacity = 255; }; Notification.clear = function () { $gameSystem.notifications = []; this.redraw(); }; /** * Draw the nodes stored in the gameSystem Array */ Notification.redraw = function () { var b = this._sprite.bitmap; b.clear(); var b2 = new Bitmap(b.width,Graphics.boxHeight); var y = b.height; var self = this; $gameSystem.notifications.slice().reverse().slice(0,this._limit).forEach(function(n) { var x = 0; var y2 = 0; var h = n.size; b2.textColor = n.color; b2.fontSize = n.size; n.msg.split('').forEach(function(char) { if (x + b2.measureTextWidth(char) > b2.width) { x = 0; y2 += h; } b2.drawText(char,x,y2,b2.width,h,'left'); x += b2.measureTextWidth(char) + 2; }); y -= (y2+h); b.blt(b2, 0, 0, b2.width, y2 + h, 0 , y, b2.width, y2 + h); b2.clear(); y -= 4; }); }; Notification.update = function () { if (this._count > 0) { this._count -= 1; return; } if (this.opacity > 0) { this.opacity -= this._disappearSpeed; } }; Notification.show = function () { this._sprite.visible = true; this.refresh(); }; Notification.hide = function () { this._sprite.visible = false; }; Notification.pause = function () { this._pause = true; }; Notification.restore = function () { this._pause = false; }; Notification.setDelay = function (delay) { this._delay = delay; }; //============================================================================= // Notification Message //============================================================================= function Notification_Message() { this.initialize.apply(this, arguments); } Notification_Message.prototype.initialize = function(msg, color,size) { this._msg = msg == null ? '' : msg; this._color = color; this._size = size; if (color == null) { this._color = MBBS_MV.Param.TextColor; } if (size == null) { this._size = MBBS_MV.Param.FontSize; } }; Object.defineProperties(Notification_Message.prototype, { msg: { get: function() { return this._msg; }, configurable: true}, color: { get: function() { return this._color; }, configurable: true}, size: { get: function() { return this._size; }, configurable: true}, }); //============================================================================= // Game_System //============================================================================= MBBS_MV.InstantMessage.Game_System_initialize = Game_System.prototype.initialize; Game_System.prototype.initialize = function() { MBBS_MV.InstantMessage.Game_System_initialize.call(this); this._notifications = []; }; Object.defineProperty(Game_System.prototype, 'notifications', { get: function() { return this._notifications; }, set: function(arr) { this._notifications = []; }, configurable: true }); //============================================================================= // Scene_Map //============================================================================= MBBS_MV.InstantMessage.Scene_Map_update = Scene_Map.prototype.update; Scene_Map.prototype.update = function() { MBBS_MV.InstantMessage.Scene_Map_update.call(this); Notification.update(); }; MBBS_MV.InstantMessage.Scene_Map_start = Scene_Map.prototype.start; Scene_Map.prototype.start = function() { MBBS_MV.InstantMessage.Scene_Map_start.call(this); Notification.show(); }; MBBS_MV.InstantMessage.Scene_Map_stop = Scene_Map.prototype.stop; Scene_Map.prototype.stop = function() { MBBS_MV.InstantMessage.Scene_Map_stop.call(this); Notification.hide(); }; //============================================================================= // Scene_EFS_Battle //============================================================================= if (Imported.MBBS_MV) { MBBS_MV.InstantMessage.Scene_EFS_Battle_update = Scene_EFS_Battle.prototype.update; Scene_EFS_Battle.prototype.update = function() { MBBS_MV.InstantMessage.Scene_EFS_Battle_update.call(this); Notification.update(); }; MBBS_MV.InstantMessage.Scene_EFS_Battle_start = Scene_EFS_Battle.prototype.start; Scene_EFS_Battle.prototype.start = function() { MBBS_MV.InstantMessage.Scene_EFS_Battle_start.call(this); Notification.show(); }; MBBS_MV.InstantMessage.Scene_EFS_Battle_stop = Scene_EFS_Battle.prototype.stop; Scene_EFS_Battle.prototype.stop = function() { MBBS_MV.InstantMessage.Scene_EFS_Battle_stop.call(this); Notification.hide(); }; } // ====================================================================== // Game_Temp // ====================================================================== MBBS_MV.InstantMessage.Game_Temp_initialize = Game_Temp.prototype.initialize; Game_Temp.prototype.initialize = function() { MBBS_MV.InstantMessage.Game_Temp_initialize.call(this); Notification.initMember(); }; //============================================================================= // End of File //=============================================================================
yi8xuan 发表于 2017-5-25 04:56
大神你好,请问为什么本来可以显示的,一旦呼出菜单就不再显示了?
刺夜之枪 发表于 2017-5-27 04:27
已经修复BUG,谢谢你的反馈,请查看主楼
lqsg123 发表于 2018-5-27 15:27
不能用啊!报错说函数不合法。
Image 001.png (94.78 KB, 下载次数: 33)
Image 004.png (7.69 KB, 下载次数: 30)
欢迎光临 Project1 (https://rpg.blue/) | Powered by Discuz! X3.1 |