设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 7062|回复: 26
打印 上一主题 下一主题

[原创发布] 【移植】MV版 多功能 "即时消息推送" (BUG已修复)

[复制链接]

Lv3.寻梦者

梦石
0
星屑
1759
在线时间
2524 小时
注册时间
2010-10-12
帖子
1454

开拓者

跳转到指定楼层
1
发表于 2016-4-7 09:53:53 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
本帖最后由 刺夜之枪 于 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. //=============================================================================

点评

仔细一看才发现原来你没用插件指令的功能  发表于 2017-7-25 00:29
为什么没有@英顺的马甲 成功?谁帮我艾特一下- -  发表于 2016-4-7 10:02

评分

参与人数 4星屑 +85 +3 收起 理由
OK一个好用户名 + 1 精品文章
众神与将军 + 1
玛尔斯 + 1
未命名 + 85 怎么可以不赞。

查看全部评分


Lv2.观梦者

梦石
0
星屑
329
在线时间
890 小时
注册时间
2009-10-12
帖子
1829
2
发表于 2016-4-7 10:40:54 | 只看该作者
本帖最后由 日月星辰 于 2016-4-6 20:41 编辑

@英顺的马甲

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


@人要在名字后加个空格

点评

原来如此。确实,我写这个一开始为了群战log的,既然写了顺便发布吧。 玩家输入的话需要更高级的UI系统配合(一般玩家使用鼠标选择窗口)  发表于 2016-4-7 11:05
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1211
在线时间
561 小时
注册时间
2014-11-30
帖子
155
3
发表于 2016-4-7 21:42:51 | 只看该作者
日月星辰 发表于 2016-4-7 10:40
@英顺的马甲

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

楼主能不能做成你的群战系统那样呢,获得道具装备等等用推送显示,特别是战斗中的即时动作,伤害等等,也用推送,包括胜利后的奖励显示,完全放下MV的窗口显示就好了,想等你的插件

点评

获得道具装备等等自动发推送的功能还没加,马上就加。 其次群战系统MV正在制作中  发表于 2016-4-8 01:16
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
42 小时
注册时间
2015-10-21
帖子
10
4
发表于 2016-4-12 09:24:57 | 只看该作者
请问你签名的哪个游戏有没有网站群啥的 我特别感兴趣.本人也说设计工作者会手绘,前端代码也懂一点 可否进群?

点评

143529290  发表于 2016-4-12 09:38
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
612
在线时间
284 小时
注册时间
2011-8-31
帖子
101
5
发表于 2016-4-13 12:47:25 | 只看该作者
汇报一个BUG:把这个脚本写在公共事件里的话,第一次执行这个公共事件,会正常显示消息,但第二次执行这个事件就不会再显示消息了。

点评

在下简单测试了一下,没有问题啊。麻烦你具体说一下当时的情况吧,比如公共事件怎么设置的怎么触发的。  发表于 2016-4-13 13:03
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
327
在线时间
159 小时
注册时间
2015-7-3
帖子
186
6
发表于 2017-5-12 11:28:10 | 只看该作者
话说能不能在消息里带图片?
想做个主角在做自己事情时NPC在旁边讲话不影响主角本身行动。。。

点评

这个版本没有这个功能,如果有需要可以加一个。这个消息弹框是完全不影响主角行动的,大可放心。  发表于 2017-5-14 05:06
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
105
在线时间
121 小时
注册时间
2016-8-25
帖子
35
7
发表于 2017-5-25 20:56:46 | 只看该作者
大神你好,请问为什么本来可以显示的,一旦呼出菜单就不再显示了?

点评

谢谢你的反馈!鄙人居然一直没有发现这个BUG,等我明天有空就修复一下。  发表于 2017-5-26 12:55
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1759
在线时间
2524 小时
注册时间
2010-10-12
帖子
1454

开拓者

8
 楼主| 发表于 2017-5-27 04:27:02 | 只看该作者
yi8xuan 发表于 2017-5-25 04:56
大神你好,请问为什么本来可以显示的,一旦呼出菜单就不再显示了?

已经修复BUG,谢谢你的反馈,请查看主楼

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
105
在线时间
121 小时
注册时间
2016-8-25
帖子
35
9
发表于 2017-5-27 04:32:30 | 只看该作者
刺夜之枪 发表于 2017-5-27 04:27
已经修复BUG,谢谢你的反馈,请查看主楼

辛苦楼主了,这个推送功能很简洁,相当喜欢

评分

参与人数 1星屑 +6 收起 理由
刺夜之枪 + 6 谢谢,对于推送功能如果还有什么需求的话可.

查看全部评分

回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
14681
在线时间
718 小时
注册时间
2011-7-16
帖子
1428

开拓者

10
发表于 2017-5-27 13:05:15 | 只看该作者
学习了,各路大神涌入mv,我大mv生态越来越好
RMMV网络插件,开源免费,内含服务器端,无需强制登录,云数据,弹幕,云存档,排名,兑换码,版本检测,可自由上架下架删除。q群399090587
免打包运行MV游戏,云游戏,安卓App雷神游戏厅,在线玩游戏,上传下载游戏
开源游戏:重装机兵之重装归来【RMMV制作】全球首款按照美剧分季分集的方式发布的游戏
体素画 -- MV画3D像素图的画板
RMMV显示3D模型和场景的插件
RMMV显示spine骨骼动画的插件
RMMV秘密通道插件
突破敌群数量上限8个的插件
在rmmv中显示gif动态图片的插件
一款可以在mv游戏界面的任意位置显示任意文字的插件
RMMV Toast 插件 带物品得失提示,可以设置开启关闭 兼容yep itemcore
制作一个改名卡道具插件、调整标题页面菜单的插件、在标题页面之前显示大段文字的插件、标题页面显示版本号的插件
物品得失自动提示自动上色自动换行插件
我的Q群 663889472
另外,我的插件、范例、游戏都在这里
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2025-1-10 07:40

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表