Project1

标题: 【插件】地图上显示伤害 [打印本页]

作者: gonglinyuan    时间: 2016-4-19 15:01
标题: 【插件】地图上显示伤害
本帖最后由 gonglinyuan 于 2016-4-19 21:29 编辑

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

JAVASCRIPT 代码复制下载
  1. /*:
  2. -------------------------------------------------------------------------------
  3. @title mapDamagePopup
  4. @author gonglinyuan
  5. @version 0.1.0
  6. @date 2016-04-19
  7. @filename Util_MapDamagePopup.js
  8. -------------------------------------------------------------------------------
  9. @plugindesc pop up damage on map characters
  10. @help
  11. You can invoke the mapDamagePopup with the following pluginCommand:
  12. mapDamagePopup <character> <row> <value> [isCritical?]
  13. <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.
  14. <row>: Number of rows in "System/Damage.png". Numbered form 0 to 4. Row 4 indicates "Miss".
  15. <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.)
  16. [isCritical?]: Whether it is critical damage or not. "true" indicates it is critical, otherwise not.
  17.  */
  18. (function() {
  19.  
  20.         var _Sprite_Character_initMembers = Sprite_Character.prototype.initMembers;
  21.         Sprite_Character.prototype.initMembers = function() {
  22.                 _Sprite_Character_initMembers.call(this);
  23.                 this._damages = [];
  24.         };
  25.  
  26.         Sprite_Character.prototype.updateDamagePopup = Sprite_Battler.prototype.updateDamagePopup;
  27.  
  28.         Sprite_Character.prototype.setupDamagePopup = function() {
  29.                 if (this._character._spriteDamage) {
  30.                         this._character._spriteDamage.x = this.x;
  31.                         this._character._spriteDamage.y = this.y;
  32.                         this._character._spriteDamage.z = this.z + 1;
  33.                         this._damages.push(this._character._spriteDamage);
  34.                         this.parent.addChild(this._character._spriteDamage);
  35.                         this._character._spriteDamage = null;
  36.                 }
  37.         };
  38.  
  39.         var _Sprite_Character_update = Sprite_Character.prototype.update;
  40.         Sprite_Character.prototype.update = function() {
  41.                 _Sprite_Character_update.call(this);
  42.                 this.updateDamagePopup();
  43.         };
  44.  
  45.         var _Game_Character_initMembers = Game_Character.prototype.initMembers;
  46.         Game_Character.prototype.initMembers = function() {
  47.                 _Game_Character_initMembers.call(this);
  48.                 this._spriteDamage = null;
  49.         };
  50.  
  51.         var getTarget = function(target) {
  52.                 if (target < -1) {
  53.                         return $gamePlayer.followers().follower(-target - 2);
  54.                 } else if (target == -1) {
  55.                         return $gamePlayer;
  56.                 } else if (target == 0) {
  57.                         return $gameMap.event(this.eventId());
  58.                 } else if (target > 0) {
  59.                         return $gameMap.event(target);
  60.                 }
  61.         }
  62.  
  63.         var _Game_Interpreter_pluginCommand = Game_Interpreter.prototype.pluginCommand;
  64.         Game_Interpreter.prototype.pluginCommand = function(command, args) {
  65.                 _Game_Interpreter_pluginCommand.call(this, command, args);
  66.                 if (command == "mapDamagePopup") {
  67.                         var target = getTarget.call(this, Number(args[0]));
  68.                         var row = Number(args[1]);
  69.                         var value = Number(args[2]);
  70.                         var sprite = new Sprite_Damage();
  71.                         if (row < 4) {
  72.                                 sprite.createDigits(row, value);
  73.                         } else {
  74.                                 sprite.createMiss();
  75.                         }
  76.                         if (args[3] === "true") {
  77.                                 sprite.setupCriticalEffect();
  78.                         }
  79.                         console.log(target, row, value, sprite);
  80.                         target._spriteDamage = sprite;
  81.                 }
  82.         };
  83. })();


使用方法见注释。

例子:给角色回复50点生命值——(插件指令)mapDamagePopup -1 1 50
其中mapDamagePopup是命令的名称
-1指的是主角。这个和fuki的定义是一样的。0指本事件。1以上指事件编号。-2以下指跟随角色。
1指的是img/system/Damage.png中的第2行(行从0开始标号)。
50指的是回血的数值,注意这里不用写成-50
作者: 魔力的觉醒    时间: 2017-1-27 18:52
很好用  还是很稳得
作者: 白嫩白嫩的    时间: 2017-1-27 23:58
请问楼主大神,能否实现实时伤害的显示呢? 必须要对每一次的血量变更单独写插件指令吗?

mapDamagePopup -1 1 50     50这个数值和变量能否挂钩?
作者: 952193683    时间: 2017-7-10 12:45
效果不错,就是太死板固定了,没法灵活使用
作者: 天空娃娃    时间: 2017-7-18 10:48
楼主,使用后弹出没有意义...
作者: wmzmtz    时间: 2018-2-25 16:03
白嫩白嫩的 发表于 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号变量,当然也可以灵活调用用其它变量
作者: 天空娃娃    时间: 2022-2-12 11:40
大佬大佬,这个MZ能用么?




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