//=============================================================================
// 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
//=============================================================================