Project1

标题: 行動予測[坐等汉化] [打印本页]

作者: j296196585    时间: 2020-11-14 23:35
标题: 行動予測[坐等汉化]




使用方法:

在技能的笔记栏中用<fsText:预测文本>这样的标签设定行动预测请
在敌人的战斗画面中输入
重复显示预测文本。

此插件已在MIT许可证下发放,用于商业利益,
可自由使用改造、再发放等。

*笔记栏标签(技能):
*
*<fsText:预测文本>
*敌人使用该技能的回合的指令输入中,预测文本为
*显示为重叠在敌人图形上。
*没有这个标签时会代替技能名显示。
*
*通过中途对预测文本进行换行,行动预测的显示也变成多行。
超过设置的Linkma*行数
不能。
*
* <fsIcon:5>
*在预测文本的开头显示5号图标。
*没有这个标签的情况下用技能图标表示费用。
*
*showIcon为OFF(假)时不显示。
*
*
*笔记栏标签(敌人角色):
*
* <fsOffsetX:50>
*将该敌人的行动预测显示位置向右移动50点。向左移动时
请输入*的设置值。
*
* <fsOffsetY:80>
*将该敌人的行动预测显示位置向下移动80点。如果向上移动
*请设定负值。
*
*
*插件命令:
*
* fsStop
*使行动预测功能无效。游戏开始时行动预测机能有效
成为*。保存在动态数据中。
*
* fsStart
*有效地进行无效的行动预测功能。
*
*
*插件参数补充:
*
* maxLines
*设置行动予测表示的最大行数。行数越多,位图就越大
*为了生成,请不要设置超出必要的大值。
*
*1回合有多次行动的场合,需要行动回数的行数。
*在行动预测显示中利用换行符时,需要的行数会进一步增加。
*
*颜色/backColor/headerColor
*该参数包含黑色或蓝色等颜色名称,
可以设定像*#000000和#0000ff这样的彩色代码。
*
*标题文本
*活动预测器左上角显示的页眉文本。如果什么都不输入的话
*隐藏页眉文本。
*
* cornerRadius
* TMBitmapEx.js在这个插件之上的位置导入,
*通过将该参数的值设为1以上,可以确认行动预测的背景
在矩形中。
* /


12

RUBY 代码复制
  1. //=============================================================================
  2. // TMPlugin - エネミー行動予測
  3. // バージョン: 1.1.0
  4. // 最終更新日: 2018/08/21
  5. // 配布元    : [url]http://hikimoki.sakura.ne.jp/[/url]
  6. //-----------------------------------------------------------------------------
  7. // Copyright (c) 2016 tomoaky
  8. // Released under the MIT license.
  9. // [url]http://opensource.org/licenses/mit-license.php[/url]
  10. //=============================================================================
  11.  
  12. /*:
  13. * @plugindesc 敵キャラの次の行動のヒントなどをテキストで表示します。
  14. * より戦略的なターンバトルが実現できるかもしれません。
  15. *
  16. * @author tomoaky ([url]http://hikimoki.sakura.ne.jp/[/url])
  17. *
  18. * @param width
  19. * @type number
  20. * @desc 行動予測表示の横幅
  21. * 初期値: 240
  22. * @default 240
  23. *
  24. * @param maxLines
  25. * @type number
  26. * @desc 行動予測表示の最大行数
  27. * 初期値: 3
  28. * @default 3
  29. *
  30. * @param lineHeight
  31. * @type number
  32. * @desc 行動予測表示の 1 行の高さ
  33. * 初期値: 36
  34. * @default 36
  35. *
  36. * @param fontSize
  37. * @type number
  38. * @desc 行動予測表示のフォントサイズ
  39. * 初期値: 28
  40. * @default 28
  41. *
  42. * @param color
  43. * @desc 行動予測表示の文字色
  44. * 初期値: white
  45. * @default white
  46. *
  47. * @param backColor
  48. * @desc 行動予測表示の背景の色
  49. * 初期値: black
  50. * @default black
  51. *
  52. * @param backOpacity
  53. * @type number
  54. * @max 255
  55. * @desc 行動予測表示の背景の不透明度
  56. * 初期値: 128 ( 0255 )
  57. * @default 128
  58. *
  59. * @param textAlign
  60. * @type select
  61. * @option left
  62. * @option center
  63. * @option right
  64. * @desc 行動予測表示の行揃え
  65. * @default center
  66. *
  67. * @param showIcon
  68. * @type boolean
  69. * @desc スキル名の頭にアイコンも表示する
  70. * 初期値: ON( ON = 表示 / OFF = 非表示 )
  71. * @default true
  72. *
  73. * @param headerText
  74. * @desc 行動予測表示のヘッダーテキスト
  75. * 初期値: Next
  76. * @default Next
  77. *
  78. * @param headerHeight
  79. * @type number
  80. * @desc 行動予測表示のヘッダーの高さ
  81. * 初期値: 20
  82. * @default 20
  83. *
  84. * @param headerFontSize
  85. * @type number
  86. * @desc 行動予測表示のヘッダーのフォントサイズ
  87. * 初期値: 16
  88. * @default 16
  89. *
  90. * @param headerColor
  91. * @desc 行動予測表示のヘッダーの文字色
  92. * 初期値: red
  93. * @default red
  94. *
  95. * @param cornerRadius
  96. * @type number
  97. * @desc TMBitmapEx.js導入時の、角丸矩形の丸部分の半径
  98. * 初期値: 6
  99. * @default 6
  100. *
  101. * @help
  102. * TMPlugin - エネミー行動予測 ver1.1.0
  103. *
  104. * 使い方:
  105. *
  106. *   スキルのメモ欄に <fsText:予測テキスト> のようなタグで行動予測の設定を
  107. *   してください。
  108. *   戦闘シーンでパーティのコマンドを入力している間、敵グラフィックに
  109. *   重なるように予測テキストが表示されるようになります。
  110. *
  111. *   このプラグインは RPGツクールMV Version 1.6.1 で動作確認をしています。
  112. *
  113. *   このプラグインはMITライセンスのもとに配布しています、商用利用、
  114. *   改造、再配布など、自由にお使いいただけます。
  115. *
  116. *
  117. * メモ欄タグ(スキル):
  118. *
  119. *   <fsText:予測テキスト>
  120. *     敵がこのスキルを使用するターンのコマンド入力中に、予測テキストが
  121. *     敵グラフィックに重なるように表示されます。
  122. *     このタグがない場合はスキル名を代わりに表示します。
  123. *
  124. *     予測テキストを途中で改行することで、行動予測の表示も複数行になります。
  125. *     ただしプラグインパラメータ maxLines で設定した行数を超えることは
  126. *     できません。
  127. *
  128. *   <fsIcon:5>
  129. *     予測テキストの頭に 5 番のアイコンを表示します。
  130. *     このタグがない場合はスキルアイコンを代わりに表示します。
  131. *
  132. *     プラグインパラメータ showIcon がOFF(false)の場合は表示しません。
  133. *
  134. *
  135. * メモ欄タグ(敵キャラ):
  136. *
  137. *   <fsOffsetX:50>
  138. *     この敵の行動予測の表示位置を右に 50 ドットずらします。左にずらす場合は
  139. *     負の値を設定してください。
  140. *
  141. *   <fsOffsetY:80>
  142. *     この敵の行動予測の表示位置を下に 80 ドットずらします。上にずらす場合は
  143. *     負の値を設定してください。
  144. *
  145. *
  146. * プラグインコマンド:
  147. *
  148. *   fsStop
  149. *     行動予測機能を無効にします。ゲーム開始時は行動予測機能が有効に
  150. *     なっています。行動予測機能の状態はセーブデータに保存されます。
  151. *
  152. *   fsStart
  153. *     無効にした行動予測機能を有効にします。
  154. *
  155. *
  156. * プラグインパラメータ補足:
  157. *
  158. *   maxLines
  159. *     行動予測表示の最大行数を設定します。行数が多いほど大きなビットマップが
  160. *     生成されるため、必要以上に大きな値は設定しないでください。
  161. *
  162. *     1ターンに複数回の行動がある場合、行動回数分の行数が必要になります。
  163. *     行動予測表示に改行を利用する場合はさらに必要な行数が増えます。
  164. *
  165. *   color / backColor / headerColor
  166. *     このパラメータには、black や blue といったカラーネームと、
  167. *     #000000 や #0000ff のようなカラーコードを設定することができます。
  168. *
  169. *   headerText
  170. *     行動予測の左上に表示するヘッダーテキストです。何も入力しなければ
  171. *     ヘッダーテキストは非表示になります。
  172. *
  173. *   cornerRadius
  174. *     TMBitmapEx.js をこのプラグインよりも上の位置に導入しつつ、
  175. *     このパラメータの値を 1 以上にすることで、行動予測の背景を
  176. *     角丸の矩形にすることができます。
  177. */
  178.  
  179. var Imported = Imported || {};
  180. Imported.TMFutureSight = true;
  181.  
  182. (function() {
  183.  
  184.         var parameters = PluginManager.parameters('TMFutureSight');
  185.         var SightWidth = +(parameters['width'] || 240);
  186.         var SightMaxLines = +(parameters['maxLines'] || 3);
  187.         var SightLineHeight = +(parameters['lineHeight'] || 36);
  188.         var SightFontSize = +(parameters['fontSize'] || 28);
  189.         var SightColor = parameters['color'] || 'white';
  190.         var SightBackColor = parameters['backColor'] || 'black';
  191.         var SightBackOpacity = +(parameters['backOpacity'] || 128);
  192.         var SightCornerRadius = +(parameters['cornerRadius'] || 6);
  193.         var SightTextAlign = parameters['textAlign'] || 'center';
  194.         var SightShowIcon = JSON.parse(parameters['showIcon'] || 'true');
  195.         var SightHeaderText = parameters['headerText'];
  196.         var SightHeaderHeight = +(parameters['headerHeight'] || 20);
  197.         var SightHeaderFontSize = +(parameters['headerFontSize'] || 16);
  198.         var SightHeaderColor = parameters['headerColor'] || 'red';
  199.  
  200.         //-----------------------------------------------------------------------------
  201.         // Game_System
  202.         //
  203.  
  204.         Game_System.prototype.isFutureSightEnabled = function() {
  205.                 if (this._futureSightEnabled == null) {
  206.                         this._futureSightEnabled = true;
  207.                 }
  208.                 return this._futureSightEnabled;
  209.         };
  210.  
  211.         Game_System.prototype.disableFutureSight = function() {
  212.                 this._futureSightEnabled = false;
  213.         };
  214.  
  215.         Game_System.prototype.enableFutureSight = function() {
  216.                 this._futureSightEnabled = true;
  217.         };
  218.  
  219.         //-----------------------------------------------------------------------------
  220.         // Game_Enemy
  221.         //
  222.  
  223.         Game_Enemy.prototype.setFutureSightTexts = function() {
  224.                 this._futureSightTexts = [];
  225.                 this._futureSightIcons = [];
  226.                 for (var i = 0; i < this._actions.length; i++) {
  227.                         if (this._actions[i]) {
  228.                                 var skill = this._actions[i].item();
  229.                                 if (skill) {
  230.                                         if (skill.meta.fsText) {
  231.                                                 this._futureSightTexts.push(skill.meta.fsText);
  232.                                         } else {
  233.                                                 this._futureSightTexts.push(skill.name);
  234.                                         }
  235.                                         this._futureSightIcons.push(this.fsIconIndex(skill));
  236.                                 }
  237.                         }
  238.                 }
  239.         };
  240.  
  241.         Game_Enemy.prototype.fsIconIndex = function(skill) {
  242.                 if (!SightShowIcon) {
  243.                         return 0;
  244.                 }
  245.                 if (skill.meta.fsIcon) {
  246.                         return +skill.meta.fsIcon;
  247.                 }
  248.                 return skill.iconIndex;
  249.         };
  250.  
  251.         Game_Enemy.prototype.resetFutureSightTexts = function() {
  252.                 this._futureSightTexts = [];
  253.         };
  254.  
  255.         Game_Enemy.prototype.futureSightTexts = function() {
  256.                 return this._futureSightTexts || [];
  257.         };
  258.  
  259.         Game_Enemy.prototype.futureSightIcons = function() {
  260.                 return this._futureSightIcons || [];
  261.         };
  262.  
  263.         //-----------------------------------------------------------------------------
  264.         // Game_Troop
  265.         //
  266.  
  267.         var _Game_Troop_makeActions = Game_Troop.prototype.makeActions;
  268.         Game_Troop.prototype.makeActions = function() {
  269.                 _Game_Troop_makeActions.call(this);
  270.                 if ($gameSystem.isFutureSightEnabled() && !BattleManager._preemptive) {
  271.                         this.members().forEach(function(member) {
  272.                                 member.setFutureSightTexts();
  273.                         });
  274.                 }
  275.         };
  276.  
  277.         var _Game_Troop_increaseTurn = Game_Troop.prototype.increaseTurn;
  278.         Game_Troop.prototype.increaseTurn = function() {
  279.                 _Game_Troop_increaseTurn.call(this);
  280.                 this.members().forEach(function(member) {
  281.                         member.resetFutureSightTexts();
  282.                 });
  283.         };
  284.  
  285.         //-----------------------------------------------------------------------------
  286.         // Game_Interpreter
  287.         //
  288.  
  289.         var _Game_Interpreter_pluginCommand = Game_Interpreter.prototype.pluginCommand;
  290.         Game_Interpreter.prototype.pluginCommand = function(command, args) {
  291.                 _Game_Interpreter_pluginCommand.call(this, command, args);
  292.                 if (command === 'fsStart') {
  293.                         $gameSystem.enableFutureSight();
  294.                 } else if (command === 'fsStop') {
  295.                         $gameSystem.disableFutureSight();
  296.                 }
  297.         };
  298.  
  299.         //-----------------------------------------------------------------------------
  300.         // Sprite_Enemy
  301.         //
  302.  
  303.         var _Sprite_Enemy_update = Sprite_Enemy.prototype.update;
  304.         Sprite_Enemy.prototype.update = function() {
  305.                 _Sprite_Enemy_update.call(this);
  306.                 if (this._enemy) {
  307.                         this.updateFutureSight();
  308.                 }
  309.         };
  310.  
  311.         Sprite_Enemy.prototype.updateFutureSight = function() {
  312.                 if (!this._futureSightSprite && this.parent) {
  313.                         this._futureSightSprite = new Sprite_FutureSight(this);
  314.                         this.parent.addChild(this._futureSightSprite);
  315.                 }
  316.         };
  317.  
  318.         //-----------------------------------------------------------------------------
  319.         // Sprite_FutureSight
  320.         //
  321.  
  322.         function Sprite_FutureSight() {
  323.                 this.initialize.apply(this, arguments);
  324.         }
  325.  
  326.         Sprite_FutureSight.prototype = Object.create(Sprite.prototype);
  327.         Sprite_FutureSight.prototype.constructor = Sprite_FutureSight;
  328.  
  329.         Sprite_FutureSight.prototype.initialize = function(enemySprite) {
  330.                 Sprite.prototype.initialize.call(this);
  331.                 this._enemySprite = enemySprite;
  332.                 var width = SightWidth;
  333.                 var height = SightLineHeight * SightMaxLines + SightHeaderHeight;
  334.                 this.bitmap = new Bitmap(width, height);
  335.                 this.anchor.x = 0.5;
  336.                 this.anchor.y = 1;
  337.                 this.z = 10;
  338.                 this._texts = [];
  339.                 this._icons = [];
  340.         };
  341.  
  342.         Sprite_FutureSight.prototype.refresh = function() {
  343.                 this.bitmap.clear();
  344.                 if (this._texts.length > 0) {
  345.                         var lines = this._texts.reduce(function(r, text) {
  346.                                 return r + text.split('\n').length;
  347.                         }, 0);
  348.                         var y = SightHeaderHeight;
  349.                         var width = this.bitmap.width;
  350.                         var height = SightLineHeight * lines;
  351.                         this.drawSightBack(0, y, width, height);
  352.                         this.drawSightHeader(0, 0, width, SightHeaderHeight);
  353.                         this.drawSightText(4, y, width - 8, SightLineHeight);
  354.                 }
  355.         };
  356.  
  357.         Sprite_FutureSight.prototype.drawSightBack = function(x, y, width, height) {
  358.                 this.bitmap.paintOpacity = SightBackOpacity;
  359.                 if (Imported.TMBitmapEx && SightCornerRadius) {
  360.                         this.bitmap.fillRoundRect(x, y, width, height, SightCornerRadius, SightBackColor);
  361.                 } else {
  362.                         this.bitmap.fillRect(x, y, width, height, SightBackColor);
  363.                 }
  364.                 this.bitmap.paintOpacity = 255;
  365.         };
  366.  
  367.         Sprite_FutureSight.prototype.drawSightHeader = function(x, y, width, height) {
  368.                 if (SightHeaderText) {
  369.                         this.bitmap.fontSize = SightHeaderFontSize;
  370.                         this.bitmap.textColor = SightHeaderColor;
  371.                         this.bitmap.drawText(SightHeaderText, x, y, width, height);
  372.                 }
  373.         };
  374.  
  375.         Sprite_FutureSight.prototype.drawSightText = function(x, y, width, height) {
  376.                 this.bitmap.fontSize = SightFontSize;
  377.                 this.bitmap.textColor = SightColor;
  378.                 for (var i = 0; i < this._texts.length; i++) {
  379.                         var text = this._texts[i];
  380.                         var iconIndex = this._icons[i];
  381.                         var dx = x;
  382.                         var dw = width;
  383.                         if (iconIndex > 0) {
  384.                                 var iconX = this.sightIconX(text, width);
  385.                                 if (iconX <= 0) {
  386.                                         iconX = 0;
  387.                                         dx += SightLineHeight;
  388.                                         dw -= SightLineHeight;
  389.                                 }
  390.                                 this.drawSightIcon(iconIndex, x + iconX, y);
  391.                         }
  392.                         var arr = text.split('\n');
  393.                         for (var j = 0; j < arr.length; j++) {
  394.                                 this.bitmap.drawText(arr[j], dx, y, dw, height, SightTextAlign);
  395.                                 y += SightLineHeight;
  396.                         }
  397.                 }
  398.         };
  399.  
  400.         Sprite_FutureSight.prototype.sightIconX = function(text, width) {
  401.                 var textWidth = this.bitmap.measureTextWidth(text);
  402.                 if (SightTextAlign === 'left') {
  403.                         return 0;
  404.                 } else if (SightTextAlign === 'center') {
  405.                         return (width - textWidth) / 2 - SightLineHeight;
  406.                 } else {
  407.                         return width - textWidth - SightLineHeight;
  408.                 }
  409.         };
  410.  
  411.         Sprite_FutureSight.prototype.drawSightIcon = function(iconIndex, x, y) {
  412.                 var bitmap = ImageManager.loadSystem('IconSet');
  413.                 var pw = Window_Base._iconWidth;
  414.                 var ph = Window_Base._iconHeight;
  415.                 var sx = iconIndex % 16 * pw;
  416.                 var sy = Math.floor(iconIndex / 16) * ph;
  417.                 var dw = SightLineHeight - 4;
  418.                 var dh = SightLineHeight - 4;
  419.                 this.bitmap.blt(bitmap, sx, sy, pw, ph, x + 2, y + 2, dw, dh);
  420.         };
  421.  
  422.         Sprite_FutureSight.prototype.update = function() {
  423.                 Sprite.prototype.update.call(this);
  424.                 var futureSightTexts = this._enemySprite._enemy.futureSightTexts().concat();
  425.                 var futureSightIcons = this._enemySprite._enemy.futureSightIcons().concat();
  426.                 if (this._texts.toString() !== futureSightTexts.toString() ||
  427.                                 this._icons.toString() !== futureSightIcons.toString()) {
  428.                         this._texts = futureSightTexts;
  429.                         this._icons = futureSightIcons;
  430.                         this.refresh();
  431.                 }
  432.                 var enemy = this._enemySprite._enemy.enemy();
  433.                 this.x = this._enemySprite.x + (+enemy.meta.fsOffsetX || 0);
  434.                 this.y = this._enemySprite.y + (+enemy.meta.fsOffsetY || 0);
  435.         };
  436.  
  437. })();





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