查看: 5946|回复: 7

[原创发布] 【插件】地图上显示伤害

[复制链接]
梦石
0
星屑
60
在线时间
705 小时
注册时间
2007-12-23
回帖
809
发表于 2016-4-19 15:01:45 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 gonglinyuan 于 2016-4-19 21:29 编辑

不知道有没有人已经发过了,我找了半天一直没有找到于是就自己实现了一个。实现地并不算优美,但是起码能用。显示效果不好是RMMV自己的缘故,因为我创建的就是Sprite_Damage。

[pre lang="javascript" file="Util_MapDamagePopup.js"]/*:
-------------------------------------------------------------------------------
@title mapDamagePopup
@author gonglinyuan
@version 0.1.0
@date 2016-04-19
@filename Util_MapDamagePopup.js
-------------------------------------------------------------------------------
@plugindesc pop up damage on map characters
@help
You can invoke the mapDamagePopup with the following pluginCommand:
mapDamagePopup <character> <row> <value> [isCritical?]
<character>: Number of character on a map to show the damage. A positive number indicates an event number. 0 indicates the current event. -1 indicates the player. -2,-3,-4,... indicates followers.
<row>: Number of rows in "System/Damage.png". Numbered form 0 to 4. Row 4 indicates "Miss".
<value>: Value of damage. It is supposed to be above 0. (If it is negative, it might make the row to increase 1 according to the implementation of "createDigits" method.)
[isCritical?]: Whether it is critical damage or not. "true" indicates it is critical, otherwise not.
*/
(function() {

        var _Sprite_Character_initMembers = Sprite_Character.prototype.initMembers;
        Sprite_Character.prototype.initMembers = function() {
                _Sprite_Character_initMembers.call(this);
                this._damages = [];
        };

        Sprite_Character.prototype.updateDamagePopup = Sprite_Battler.prototype.updateDamagePopup;

        Sprite_Character.prototype.setupDamagePopup = function() {
                if (this._character._spriteDamage) {
                        this._character._spriteDamage.x = this.x;
                        this._character._spriteDamage.y = this.y;
                        this._character._spriteDamage.z = this.z + 1;
                        this._damages.push(this._character._spriteDamage);
                        this.parent.addChild(this._character._spriteDamage);
                        this._character._spriteDamage = null;
                }
        };

        var _Sprite_Character_update = Sprite_Character.prototype.update;
        Sprite_Character.prototype.update = function() {
                _Sprite_Character_update.call(this);
                this.updateDamagePopup();
        };

        var _Game_Character_initMembers = Game_Character.prototype.initMembers;
        Game_Character.prototype.initMembers = function() {
                _Game_Character_initMembers.call(this);
                this._spriteDamage = null;
        };

        var getTarget = function(target) {
                if (target < -1) {
                        return $gamePlayer.followers().follower(-target - 2);
                } else if (target == -1) {
                        return $gamePlayer;
                } else if (target == 0) {
                        return $gameMap.event(this.eventId());
                } else if (target > 0) {
                        return $gameMap.event(target);
                }
        }

        var _Game_Interpreter_pluginCommand = Game_Interpreter.prototype.pluginCommand;
        Game_Interpreter.prototype.pluginCommand = function(command, args) {
                _Game_Interpreter_pluginCommand.call(this, command, args);
                if (command == "mapDamagePopup") {
                        var target = getTarget.call(this, Number(args[0]));
                        var row = Number(args[1]);
                        var value = Number(args[2]);
                        var sprite = new Sprite_Damage();
                        if (row < 4) {
                                sprite.createDigits(row, value);
                        } else {
                                sprite.createMiss();
                        }
                        if (args[3] === "true") {
                                sprite.setupCriticalEffect();
                        }
                        console.log(target, row, value, sprite);
                        target._spriteDamage = sprite;
                }
        };
})();
[/pre]

使用方法见注释。

例子:给角色回复50点生命值——(插件指令)mapDamagePopup -1 1 50
其中mapDamagePopup是命令的名称
-1指的是主角。这个和fuki的定义是一样的。0指本事件。1以上指事件编号。-2以下指跟随角色。
1指的是img/system/Damage.png中的第2行(行从0开始标号)。
50指的是回血的数值,注意这里不用写成-50
买了正版RMMV的同学进来看一下,谢谢~
https://rpg.blue/thread-393237-1-1.html
梦石
0
星屑
199
在线时间
248 小时
注册时间
2012-4-29
回帖
313
发表于 2017-1-27 18:52:42 | 显示全部楼层
很好用  还是很稳得
你的意思就是要打架咯?
回复

使用道具 举报

梦石
0
星屑
3922
在线时间
1198 小时
注册时间
2016-8-9
回帖
2355

开拓者

发表于 2017-1-27 23:58:25 | 显示全部楼层
请问楼主大神,能否实现实时伤害的显示呢? 必须要对每一次的血量变更单独写插件指令吗?

mapDamagePopup -1 1 50     50这个数值和变量能否挂钩?
酸酸甜甜就④哇噢
回复

使用道具 举报

梦石
0
星屑
65
在线时间
232 小时
注册时间
2014-8-1
回帖
131

开拓者

发表于 2017-7-10 12:45:44 | 显示全部楼层
效果不错,就是太死板固定了,没法灵活使用
回复

使用道具 举报

梦石
0
星屑
3341
在线时间
469 小时
注册时间
2014-2-6
回帖
217
发表于 2017-7-18 10:48:38 | 显示全部楼层
楼主,使用后弹出没有意义...
回复

使用道具 举报

梦石
0
星屑
470
在线时间
271 小时
注册时间
2011-10-17
回帖
70
发表于 2018-2-25 16:03:01 | 显示全部楼层
白嫩白嫩的 发表于 2017-1-27 23:58
请问楼主大神,能否实现实时伤害的显示呢? 必须要对每一次的血量变更单独写插件指令吗?

mapDamagePopup  ...

原脚本的第69行是 var value = Number(args[2]);
改成 var value = $gameVariables.value(Number(args[2]));

这样mapDamagePopup -1 1 50的50就成了50号变量,当然也可以灵活调用用其它变量

点评

谢谢大佬指点,爱你哟~  发表于 2018-2-26 11:07

评分

参与人数 1赞 +1 收起 理由
白嫩白嫩的 + 1 认可答案

查看全部评分

回复

使用道具 举报

梦石
0
星屑
3341
在线时间
469 小时
注册时间
2014-2-6
回帖
217
发表于 2022-2-12 11:40:55 | 显示全部楼层
大佬大佬,这个MZ能用么?
回复

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部