Project1

标题: 【移植】MV版 多功能 "即时消息推送" (BUG已修复) [打印本页]

作者: 刺夜之枪    时间: 2016-4-7 09:53
标题: 【移植】MV版 多功能 "即时消息推送" (BUG已修复)
本帖最后由 刺夜之枪 于 2017-5-26 12:24 编辑






本脚本移植自英顺的马甲的XP脚本"即时消息推送"  
在下仅仅是翻译成MV版并且二次加工。
这个脚本是个很便利的推送脚本,可以自由设置窗口显示的位置。
可以发送不同大小,颜色的推送(目前版本)

点击在Github上查看
在github上查看以保持最新更新

更新日志:

1.1 - [2017-5-26] (最新)
    修复调出菜单后信息栏不再显示的BUG
    Fixed bug: after calling menu, the notification window will no longer display

1.0 - [2016-4-6]
    正式发布
    Release

@英顺的马甲


JAVASCRIPT 代码复制下载
  1. //=============================================================================
  2. // Mount Blade Battle System Engine Plugins - Instant Message Plugins
  3. // MBBS_InstantMessage.js
  4. //=============================================================================
  5. /*:
  6.  * @plugindesc v1.1 Instant Message Plugins
  7.    群战系统MV插件系列之 - 即时消息系统 【XP移植】
  8.  * @author Chivalry Studio Plugins / Ivan
  9.  
  10.  * @param ---Notification---
  11.  * @default
  12.  
  13.  * @param MaxLimit
  14.  * @desc 最多显示多少条消息
  15.  * Default: 12
  16.  * @default 12
  17.  * @param Delay
  18.  * @desc 显示多少秒后才消失(单位秒)
  19.  * Default: 3
  20.  * @default 3
  21.  * @param DisappearSpeed
  22.  * @desc 消失速度 (越大越快);
  23.  * Default: 5
  24.  * @default 5
  25.  * @param InitialX
  26.  * @desc 初始位置X坐标(显示区域左上角X坐标)
  27.  * Default: 0
  28.  * @default 0
  29.  * @param InitialY
  30.  * @desc 初始位置Y坐标(显示区域左上角Y坐标)
  31.  * Default: 312
  32.  * @default 312
  33.  * @param Width
  34.  * @desc 显示区域宽度
  35.  * Default: 272
  36.  * @default 272
  37.  * @param Height
  38.  * @desc 显示区域高度
  39.  * Default: 312
  40.  * @default 312
  41.  
  42.  * @param ---Font Data---
  43.  * @default
  44.  * @param FontFace
  45.  * @desc 字体名
  46.  * Default: GameFont
  47.  * @default GameFont
  48.  * @param FontSize
  49.  * @desc 字体大小
  50.  * Default: 28
  51.  * @default 28
  52.  * @param TextColor
  53.  * @desc 字体颜色
  54.  * Default: #ffffff
  55.  * @default #ffffff
  56.  
  57. * @help
  58. * --------------------------------------------------------------------------------
  59. * Free for non commercial use.
  60. * Version 1.1
  61. * --------------------------------------------------------------------------------
  62. * Mount Blade Battle System Engine Plugins - Instant Message Plugins
  63.   群战系统MV插件系列之 - 即时消息系统 【移植】
  64.   本系统原为XP即时消息系统脚本 by: 英顺的马甲
  65.   在下觉得这个系统写的很好,于是将这个系统翻译成了MV版本。
  66.   在下并非原作者,在下是编辑者。
  67.     
  68. * --------------------------------------------------------------------------------
  69. * How to use: 使用方法
  70. * --------------------------------------------------------------------------------
  71.  
  72.     mes (String) the Message.             [Required]
  73.     必填,字符串。想要发送的消息
  74.     color (String) for example: '#ffff00' [Optional]
  75.     选填,字符串,字体颜色。默认为系统颜色
  76.     size (Number) font Size.              [Optional]
  77.     选填,数字,字体大小。默认为系统字体大小
  78.     Notification.post(msg, color, size);
  79.     发一条消息。
  80.  
  81.     x: (Number) 移动目的地X坐标  [Required]
  82.     y: (Number) 移动目的地Y坐标  [Required]
  83.     width: (Number) 移动后宽度   [Required]
  84.     height:(Number) 移动后高度   [Required]
  85.     Notification.move(x,y,width,height);
  86.     移动消息显示区域到x,y,width, height
  87.  
  88.     Notification.clear();
  89.     清空消息
  90.  
  91.     Notification.show();
  92.     开启消息显示
  93.  
  94.     Notification.hide();
  95.     关闭消息显示
  96.  
  97.     Notification.pause();
  98.     暂停消息显示
  99.  
  100.     Notification.restore();
  101.     恢复消息显示
  102.  
  103. * --------------------------------------------------------------------------------
  104. * Version History
  105. * --------------------------------------------------------------------------------
  106. *
  107. * 1.1 - [2017-5-26]
  108. *    修复调出菜单后信息栏不再显示的BUG
  109. *    Fixed bug: after calling menu, the notification window will no longer display
  110. *
  111. * 1.0 - [2016-4-6]
  112. *    正式发布
  113. *    Release
  114. *
  115. */
  116.  
  117. var Imported = Imported || {};
  118. Imported.MBBS_InstantMessage = true;
  119. var MBBS_MV = MBBS_MV || {};
  120. MBBS_MV.InstantMessage = MBBS_MV.InstantMessage || {};
  121.  
  122. //=============================================================================
  123. // Parameter Variables
  124. //=============================================================================
  125. MBBS_MV.Parameters = PluginManager.parameters('MBBS_InstantMessage');
  126. MBBS_MV.Param = MBBS_MV.Param || {};
  127. //notification data
  128. MBBS_MV.Param.MaxLimit          = Number(MBBS_MV.Parameters['MaxLimit']);
  129. MBBS_MV.Param.Delay             = Number(MBBS_MV.Parameters['Delay']);
  130. MBBS_MV.Param.DisappearSpeed    = Number(MBBS_MV.Parameters['DisappearSpeed']);
  131. MBBS_MV.Param.InitialX          = Number(MBBS_MV.Parameters['InitialX']);
  132. MBBS_MV.Param.InitialY          = Number(MBBS_MV.Parameters['InitialY']);
  133. MBBS_MV.Param.Width             = Number(MBBS_MV.Parameters['Width']);
  134. MBBS_MV.Param.Height            = Number(MBBS_MV.Parameters['Height']);
  135. //font data
  136. MBBS_MV.Param.FontFace          = String(MBBS_MV.Parameters['FontFace']);
  137. MBBS_MV.Param.FontSize          = Number(MBBS_MV.Parameters['FontSize']);
  138. MBBS_MV.Param.TextColor         = String(MBBS_MV.Parameters['TextColor']);
  139.  
  140. //=============================================================================
  141. // Plugin commands -- Game_Interpreter
  142. //=============================================================================
  143. // MBBS_MV.InstantMessage.Game_Interpreter_pluginCommand =
  144. // Game_Interpreter.prototype.pluginCommand;
  145. // Game_Interpreter.prototype.pluginCommand = function(command, args) {
  146. //     MBBS_MV.InstantMessage.Game_Interpreter_pluginCommand.call(this, command, args);
  147. //     if (command == "") {}
  148.  
  149.  
  150. // };
  151. //=============================================================================
  152. // Notification
  153. //=============================================================================
  154. function Notification() {
  155.     throw new Error('This is a static class');
  156. };
  157.  
  158. Notification.FRAME_PER_SECOND = 60;
  159.  
  160. Notification.initMember = function() {
  161.     this._msg = null;
  162.     this._limit          = MBBS_MV.Param.MaxLimit;
  163.     this._delay          = MBBS_MV.Param.Delay;
  164.     this._disappearSpeed = MBBS_MV.Param.DisappearSpeed;
  165.     this._opacity = 0;
  166.     this._pause = false;
  167.     this._count = this._delay * this.FRAME_PER_SECOND;
  168.     this._sprite = new Sprite();
  169.     this._sprite.bitmap = new Bitmap(1,1);
  170.     this._sprite.z = 99999;
  171.     this._hasInitalized = false;
  172. };
  173.  
  174. Notification.initialize = function() {
  175.     this._hasInitalized = true;
  176.     Notification.move(
  177.         MBBS_MV.Param.InitialX,
  178.         MBBS_MV.Param.InitialY,
  179.         MBBS_MV.Param.Width,
  180.         MBBS_MV.Param.Height
  181.         );
  182. }
  183.  
  184. Object.defineProperty(Notification, 'opacity', {
  185.     get: function() {
  186.         return this._opacity;
  187.     },
  188.     set: function(opacity) {
  189.         this._opacity = opacity;
  190.         this._sprite.opacity = opacity;
  191.     },
  192.     configurable: true
  193. });
  194.  
  195. Notification.setFont = function(fontFace,fontSize,textColor) {
  196.     this._sprite.bitmap.fontFace           = fontFace;
  197.     this._sprite.bitmap.fontSize           = fontSize;
  198.     this._sprite.bitmap.textColor          = textColor;
  199. };
  200.  
  201. Notification.move = function(x,y,width,height) {
  202.     this._sprite.x = x;
  203.     this._sprite.y = y;
  204.     this._sprite.z = 99999;
  205.     this._sprite.bitmap = new Bitmap(width, height);
  206.     this.refresh();
  207. };
  208.  
  209. Notification.refresh = function () {
  210.     SceneManager._scene.addChild(this._sprite);
  211.     if ($gameSystem != null) {
  212.         this.redraw();
  213.     }
  214. };
  215.  
  216. Notification.setLimit = function(max){
  217.     this._limit = max;
  218. };
  219.  
  220. Notification.post = function(msg, color, size) {
  221.     if (this._pause) {
  222.         return;
  223.     }
  224.     if (!this._hasInitalized) {
  225.         this.initialize();
  226.     }
  227.     // creating message node and push it to $gameSystem.notifications
  228.     var node = new Notification_Message(msg.slice(0), color,size);
  229.     $gameSystem.notifications.push(node);
  230.     // shift when reach max display
  231.     while($gameSystem.notifications.length > this._limit){
  232.         $gameSystem.notifications.shift();
  233.     }
  234.     if ($gameSystem != null) {
  235.         this.redraw();
  236.     }
  237.     //reset counter to and to display the message
  238.     this._count = this._delay * this.FRAME_PER_SECOND;
  239.     this.opacity = 255;
  240.  
  241. };
  242.  
  243. Notification.clear = function () {
  244.     $gameSystem.notifications = [];
  245.     this.redraw();
  246. };
  247. /**
  248. *   Draw the nodes stored in the gameSystem Array
  249. */
  250. Notification.redraw = function () {
  251.     var b = this._sprite.bitmap;
  252.     b.clear();
  253.     var b2 = new Bitmap(b.width,Graphics.boxHeight);
  254.     var y = b.height;
  255.     var self = this;
  256.     $gameSystem.notifications.slice().reverse().slice(0,this._limit).forEach(function(n) {
  257.         var x = 0;
  258.         var y2 = 0;
  259.         var h = n.size;
  260.         b2.textColor = n.color;
  261.         b2.fontSize = n.size;
  262.        n.msg.split('').forEach(function(char) {
  263.             if (x + b2.measureTextWidth(char) > b2.width) {
  264.                 x = 0;
  265.                 y2 += h;
  266.             }
  267.             b2.drawText(char,x,y2,b2.width,h,'left');
  268.             x += b2.measureTextWidth(char) + 2;
  269.         });
  270.         y -= (y2+h);
  271.         b.blt(b2, 0, 0, b2.width, y2 + h, 0 , y, b2.width, y2 + h);
  272.         b2.clear();
  273.         y -= 4;
  274.     });
  275. };
  276.  
  277. Notification.update = function () {
  278.     if (this._count > 0) {
  279.         this._count -= 1;
  280.         return;
  281.     }
  282.     if (this.opacity > 0) {
  283.         this.opacity -= this._disappearSpeed;
  284.     }
  285. };
  286.  
  287. Notification.show = function () {
  288.     this._sprite.visible = true;
  289.     this.refresh();
  290. };
  291.  
  292. Notification.hide = function () {
  293.     this._sprite.visible = false;
  294. };
  295.  
  296. Notification.pause = function () {
  297.     this._pause = true;
  298. };
  299.  
  300. Notification.restore = function () {
  301.     this._pause = false;
  302. };
  303.  
  304. Notification.setDelay = function (delay) {
  305.     this._delay = delay;
  306. };
  307. //=============================================================================
  308. // Notification Message
  309. //=============================================================================
  310. function Notification_Message() {
  311.     this.initialize.apply(this, arguments);
  312. }
  313.  
  314. Notification_Message.prototype.initialize = function(msg, color,size) {
  315.     this._msg = msg == null ? '' : msg;
  316.     this._color = color;
  317.     this._size = size;
  318.     if (color == null) {
  319.         this._color = MBBS_MV.Param.TextColor;
  320.     }
  321.     if (size == null) {
  322.         this._size = MBBS_MV.Param.FontSize;
  323.     }
  324. };
  325.  
  326. Object.defineProperties(Notification_Message.prototype, {
  327.     msg:        { get: function() { return this._msg;       }, configurable: true},
  328.     color:      { get: function() { return this._color;     }, configurable: true},
  329.     size:       { get: function() { return this._size;      }, configurable: true},
  330. });
  331.  
  332. //=============================================================================
  333. // Game_System
  334. //=============================================================================
  335. MBBS_MV.InstantMessage.Game_System_initialize = Game_System.prototype.initialize;
  336. Game_System.prototype.initialize = function() {
  337.     MBBS_MV.InstantMessage.Game_System_initialize.call(this);
  338.     this._notifications = [];
  339. };
  340.  
  341. Object.defineProperty(Game_System.prototype, 'notifications', {
  342.     get: function() {
  343.         return this._notifications;
  344.     },
  345.     set: function(arr) {
  346.         this._notifications = [];
  347.     },
  348.     configurable: true
  349. });
  350.  
  351. //=============================================================================
  352. // Scene_Map
  353. //=============================================================================
  354. MBBS_MV.InstantMessage.Scene_Map_update = Scene_Map.prototype.update;
  355. Scene_Map.prototype.update = function() {
  356.     MBBS_MV.InstantMessage.Scene_Map_update.call(this);
  357.     Notification.update();
  358. };
  359.  
  360. MBBS_MV.InstantMessage.Scene_Map_start = Scene_Map.prototype.start;
  361. Scene_Map.prototype.start = function() {
  362.     MBBS_MV.InstantMessage.Scene_Map_start.call(this);
  363.     Notification.show();
  364. };
  365.  
  366. MBBS_MV.InstantMessage.Scene_Map_stop = Scene_Map.prototype.stop;
  367. Scene_Map.prototype.stop = function() {
  368.     MBBS_MV.InstantMessage.Scene_Map_stop.call(this);
  369.     Notification.hide();
  370. };
  371. //=============================================================================
  372. // Scene_EFS_Battle
  373. //=============================================================================
  374. if (Imported.MBBS_MV) {
  375.  
  376.     MBBS_MV.InstantMessage.Scene_EFS_Battle_update = Scene_EFS_Battle.prototype.update;
  377.     Scene_EFS_Battle.prototype.update = function() {
  378.         MBBS_MV.InstantMessage.Scene_EFS_Battle_update.call(this);
  379.         Notification.update();
  380.     };
  381.  
  382.     MBBS_MV.InstantMessage.Scene_EFS_Battle_start = Scene_EFS_Battle.prototype.start;
  383.     Scene_EFS_Battle.prototype.start = function() {
  384.         MBBS_MV.InstantMessage.Scene_EFS_Battle_start.call(this);
  385.         Notification.show();
  386.     };
  387.  
  388.     MBBS_MV.InstantMessage.Scene_EFS_Battle_stop = Scene_EFS_Battle.prototype.stop;
  389.     Scene_EFS_Battle.prototype.stop = function() {
  390.         MBBS_MV.InstantMessage.Scene_EFS_Battle_stop.call(this);
  391.         Notification.hide();
  392.     };
  393. }
  394.  
  395. // ======================================================================
  396. // Game_Temp
  397. // ======================================================================
  398. MBBS_MV.InstantMessage.Game_Temp_initialize = Game_Temp.prototype.initialize;
  399. Game_Temp.prototype.initialize = function() {
  400.     MBBS_MV.InstantMessage.Game_Temp_initialize.call(this);
  401.     Notification.initMember();
  402. };
  403.  
  404. //=============================================================================
  405. // End of File
  406. //=============================================================================

作者: 日月星辰    时间: 2016-4-7 10:40
本帖最后由 日月星辰 于 2016-4-6 20:41 编辑

@英顺的马甲

这个仿网游设置以前就觉得挺好 记得我曾经改过一个xp版本,还提供了玩家输入框,让玩家输入特定字符随时查询攻略啊,作弊码之类 考虑一起实现了吧XD
不过 lz 应该是 log 群战系统的各种信息用对吧 hh


@人要在名字后加个空格
作者: 309988769    时间: 2016-4-7 21:42
日月星辰 发表于 2016-4-7 10:40
@英顺的马甲

这个仿网游设置以前就觉得挺好 记得我曾经改过一个xp版本,还提供了玩家输入框,让玩家输入 ...

楼主能不能做成你的群战系统那样呢,获得道具装备等等用推送显示,特别是战斗中的即时动作,伤害等等,也用推送,包括胜利后的奖励显示,完全放下MV的窗口显示就好了,想等你的插件
作者: z340161558    时间: 2016-4-12 09:24
请问你签名的哪个游戏有没有网站群啥的 我特别感兴趣.本人也说设计工作者会手绘,前端代码也懂一点 可否进群?
作者: pandeng421    时间: 2016-4-13 12:47
汇报一个BUG:把这个脚本写在公共事件里的话,第一次执行这个公共事件,会正常显示消息,但第二次执行这个事件就不会再显示消息了。
作者: 丝诺温特    时间: 2017-5-12 11:28
话说能不能在消息里带图片?
想做个主角在做自己事情时NPC在旁边讲话不影响主角本身行动。。。
作者: yi8xuan    时间: 2017-5-25 20:56
大神你好,请问为什么本来可以显示的,一旦呼出菜单就不再显示了?
作者: 刺夜之枪    时间: 2017-5-27 04:27
yi8xuan 发表于 2017-5-25 04:56
大神你好,请问为什么本来可以显示的,一旦呼出菜单就不再显示了?

已经修复BUG,谢谢你的反馈,请查看主楼
作者: yi8xuan    时间: 2017-5-27 04:32
刺夜之枪 发表于 2017-5-27 04:27
已经修复BUG,谢谢你的反馈,请查看主楼

辛苦楼主了,这个推送功能很简洁,相当喜欢
作者: walf_man    时间: 2017-5-27 13:05
学习了,各路大神涌入mv,我大mv生态越来越好
作者: 英顺的马甲    时间: 2017-6-14 14:24
我都忘了自己有搞过这货了
作者: 952193683    时间: 2017-7-24 22:26
请问可以自己设定显示和关闭吗?就类似于打开开关显示,开关关闭就关闭了
作者: 洲崎西养豚场    时间: 2018-4-5 10:32
本帖最后由 洲崎西养豚场 于 2018-4-5 10:35 编辑

原来要放到所有插件最上面
作者: lqsg123    时间: 2018-5-27 15:27
不能用啊!报错说函数不合法。
作者: lqsg123    时间: 2018-5-28 00:21
本帖最后由 lqsg123 于 2018-5-28 00:23 编辑
lqsg123 发表于 2018-5-27 15:27
不能用啊!报错说函数不合法。


Notification.post(”你事实上是事实是事实是事实是事实“);
大佬,我开了插件,输入这个命令,然后就报错

Image 001.png (94.78 KB, 下载次数: 33)

Image 001.png

Image 004.png (7.69 KB, 下载次数: 30)

Image 004.png





欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1