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

Project1

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

[有事请教] 請問ツクール工房A1的氣泡對話插件,要如何使用?(已解決)

[复制链接]

Lv3.寻梦者

梦石
0
星屑
2991
在线时间
646 小时
注册时间
2009-1-21
帖子
273
跳转到指定楼层
1
发表于 2023-1-9 15:02:57 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 御之嵐 于 2023-1-14 09:27 编辑

如標題

這個日本的氣泡對話插件
研究半天還是沒有動作

網址
http://a1tktk.web.fc2.com/mv_plugin_page/popup_message.html

必要プラグイン:A1共通プラグイン
JAVASCRIPT 代码复制下载
  1. //=============================================================================
  2. // A1Common.js
  3. //=============================================================================
  4. /*:
  5.  * @plugindesc ツクール工房A1(仮)の共通スクリプトです。
  6.  * @author ツクール工房A1(仮)
  7.  *
  8.  * @help このプラグインにはプラグインコマンドはありません。
  9.  *
  10.  *  プラグインコマンドに多重配列が使えるようになります。
  11.  *  例  :コマンド AAA BBB,CCC,DDD
  12.  *  結果:コマンド AAA,[BBB,CCC,DDD]
  13.  *
  14.  *  例  :コマンド AAA BBB,[CCC,DDD],EEE
  15.  *  結果:コマンド AAA,[BBB,[CCC,DDD],EEE]
  16.  *
  17.  *  プラグインコマンドに文字列リテラルが使えるようになります。
  18.  *  例  :コマンド ${1+2}
  19.  *  結果:コマンド 3
  20.  *
  21.  *  プラグインコマンドを定義して呼び出せます。
  22.  *    「プラグインコマンドの定義」をオーバーライドして
  23.  *    プラグインコマンドで呼び出したいメソッドを定義します。
  24.  *    使用方法は「セルフスイッチ拡張」プラグイン等を参考にお願いします。
  25.  *
  26.  *  メモの内容を配列・ハッシュ化して読み込めます。
  27.  *  例  :<データ名 arg,arg,arg,arg...>
  28.  *  結果:メモの内容を配列で読み込みます。  
  29.  *     重複したデータ名がある場合、多重配列化して連結します。
  30.  *
  31.  *  例  :<データ名 key arg,arg,arg...>
  32.  *  結果:メモの内容をハッシュで読み込みます。  
  33.  *     重複したデータ名・keyがある場合は多重配列を連結します。
  34.  *
  35.  *  例  :<データ名>
  36.  *  結果:メモの内容にデータ名と一致するものがあれば True を返します。
  37.  *
  38.  */
  39. //=============================================================================
  40. // 更新履歴  2020/06/27 Ver1.00 リリース
  41. //           2020/06/27 Ver1.01 後の拡張機能の為にevalを関数化
  42. //           2020/06/27 Ver1.01 条件式を厳格化
  43. //           2020/06/28 Ver1.10 メモの内容を読み取る機能を追加
  44. //           2020/06/28 Ver1.10 テキストの幅を計算する機能を追加
  45. //           2020/06/30 Ver1.20 共通スクリプト以外のバージョンチェック機能を追加
  46. //           2020/06/30 Ver1.20 シーンにウィンドウを追加・削除する機能を追加
  47. //           2020/06/30 Ver1.20 エスケープ文字の入ったテキストの幅を計算する機能を追加
  48. //           2020/06/30 Ver1.20 顔や歩行のFileNameとIndexをキーにして列挙する機能を追加
  49. //           2020/07/02 Ver1.21 テキストの幅を計算するエスケープ文字の対象を追加
  50. //           2020/07/02 Ver1.30 エスケープ文字引数の処理を追加
  51. //           2020/07/05 Ver1.40 データベースロード完了後の処理(空定義)追加
  52. //           2020/07/05 Ver1.50 ファイル・フォルダ一覧取得処理追加
  53. //           2020/07/10 Ver1.60 配列化にTO_FLOATを追加
  54. //=============================================================================
  55. // ■ バージョン定義
  56. //=============================================================================
  57. var $A1Common = null;
  58. var $A1PlugInImpoted = {};
  59. $A1PlugInImpoted["A1共通スクリプト"] = 1.60;
  60. //=============================================================================
  61. // ■ 定数
  62. //=============================================================================
  63. const TO_STRING = 0;
  64. const TO_INT    = 1;
  65. const TO_FLOAT  = 2;
  66. //=============================================================================
  67. // ■ プラグイン設定値
  68. //=============================================================================
  69. var A1PlugInParams = {};
  70. //=============================================================================
  71. // ■ A1共通スクリプト
  72. //=============================================================================
  73. function A1Common() {
  74.   this.initialize.apply(this, arguments);
  75. };
  76. //=============================================================================
  77. // ○ バージョンチェック
  78. //=============================================================================
  79. A1Common.VersionCheck = function(plugin_name, version, import_name = "A1共通スクリプト") {
  80.   if ($A1PlugInImpoted[import_name] < version){
  81.     alert(`${plugin_name} には ${import_name} Ver ${version} 以上が必要です。`);
  82.     return false;
  83.   }
  84.   return true;
  85. };
  86. //=============================================================================
  87. // ○ イニシャライズ
  88. //=============================================================================
  89. A1Common.prototype.initialize = function() {
  90.   this._define_command = {};
  91.   this.define_command();
  92. };
  93. //=============================================================================
  94. // ○ プラグインコマンドの定義
  95. //=============================================================================
  96. A1Common.prototype.define_command = function() {
  97.   return this._define_command;
  98. };
  99. //=============================================================================
  100. // ○ プラグインコマンドの実行
  101. //=============================================================================
  102. A1Common.prototype.proc_define_command = function(command, args) {
  103. if (command in this._define_command){
  104.    return this._define_command[command].call(this, args)
  105. }
  106. return false;
  107. };
  108. //=============================================================================
  109. // ○ Eval結果で文字列を置換
  110. //=============================================================================
  111. A1Common.ReplaceEval = function(text, exp){
  112.   var exp_result  = exp.exec(text);
  113.   if (exp_result === null){ return text }
  114.   var exp_text  = exp_result[1];
  115.   var text_end  = exp_text.indexOf("}");
  116.   if (text_end < 0) { text_end = exp_text.length }
  117.   var eval_text = exp_text.substring(0, text_end);
  118.   text = text.replace(`\${${eval_text}}`, A1Common.ProcEval(eval_text))
  119.   return A1Common.ReplaceEval(text, exp);
  120. };
  121. //=============================================================================
  122. // ○ Evalを実行する
  123. //=============================================================================
  124. A1Common.ProcEval = function(command){
  125.   return eval(command);
  126. };
  127. //=============================================================================
  128. // ○ 配列を考慮したスプリット
  129. //=============================================================================
  130. A1Common.SplitArgs = function(text, result_args = [], to_int = TO_STRING){
  131.   text = A1Common.ReplaceEval(text, /\$\{(\S+)\}/);
  132.   var args = text.split(",");
  133.   if (args.length === 1) {
  134.     var array_sym  = /^\[(\S+)\]/;
  135.     var array_args = array_sym.exec(text);
  136.     if (array_args !== null) { result_args.push([array_args[1]]) }
  137.         else { result_args.push(A1Common.to_i(text, to_int)) }
  138.   }
  139.   else {
  140.     A1Common.ArrayInArray(args, result_args, to_int)
  141.   }
  142.   return result_args;
  143. };
  144. //=============================================================================
  145. // ○ 配列の中の配列
  146. //=============================================================================
  147. A1Common.ArrayInArray = function(args, result_args, to_int){
  148.   var push_array = [];
  149.   var temp_array = [];
  150.   var left_count  = 0;
  151.   var right_count = 0;
  152.   args.forEach(function(text) {
  153.     var left_sym    = /^\[(\S+)/;
  154.     var right_sym   = /(\S+)\]/;
  155.     var left_array  = left_sym.exec(text);
  156.     var right_array = right_sym.exec(text);
  157.     if (left_array !== null){
  158.       if (left_count === 0){
  159.         temp_array.push(left_array[1])
  160.       }
  161.       else {
  162.         temp_array.push(A1Common.to_i(text, to_int))
  163.       };
  164.       left_count += 1;
  165.     }
  166.     else if (right_array !== null){
  167.       right_count += 1;
  168.       if (right_count === left_count) {
  169.         temp_array.push(right_array[1]);
  170.         A1Common.ArrayInArray(temp_array, push_array, to_int);
  171.         temp_array  = [];
  172.         left_count  = 0;
  173.         right_count = 0;
  174.       }
  175.       else {
  176.         temp_array.push(A1Common.to_i(text, to_int));
  177.       }
  178.     }
  179.     else if (left_count > 0) {
  180.       temp_array.push(A1Common.to_i(text, to_int));
  181.     }
  182.     else {
  183.       A1Common.SplitArgs(text, push_array, to_int)
  184.     }
  185.   });
  186.   result_args.push(push_array);
  187. };
  188. //=============================================================================
  189. // ○ 文字列を数値にできるものだけ数値にする
  190. //=============================================================================
  191. A1Common.to_i = function(text, to_int){
  192.   if(to_int === TO_STRING) { return text }
  193.   var int_exp    = /^(-?[0-9]+\.?[0-9]*$)/
  194.   var int_result = int_exp.exec(text)
  195.   if(int_result === null) { return text }
  196.   var ret;
  197.   if(to_int === TO_FLOAT){
  198.     ret = parseFloat(text)
  199.   }
  200.   else if(to_int === TO_INT){
  201.     ret = parseInt(text)
  202.   }
  203.   if(isNaN(ret)){ return text }
  204.   return ret;
  205. };
  206. //=============================================================================
  207. // ○ メモを読み込む
  208. //=============================================================================
  209. A1Common.ReadNote = function(note_key, note, to_int = TO_STRING, ret = false){
  210.   var note_exp    = new RegExp(`<${note_key}\\s?(.*)>\\n`);
  211.   var exp_result  = note_exp.exec(note);
  212.   if(exp_result === null){ return ret }
  213.   if(exp_result[1] === ""){ return true }
  214.   var data = exp_result[1].split(" ")
  215.   var result_args = [];
  216.   var match_string = exp_result[0];
  217.   if(data.length === 1){
  218.     A1Common.SplitArgs(data[0], result_args, to_int);
  219.     if(ret === false){
  220.       ret = result_args;
  221.     }
  222.     else{
  223.       ret = ret.concat(result_args);
  224.         }
  225.     note = note.replace(match_string, "");
  226.     ret = A1Common.ReadNote(note_key, note, to_int, ret);
  227.     if(ret.length === 1){
  228.        ret = ret[0];
  229.         }
  230.   }
  231.   else{
  232.     var key = data.shift();
  233.     A1Common.SplitArgs(key, result_args, to_int);
  234.     key = result_args[0];
  235.     if(ret === false){ ret = {} }
  236.     result_args = [];
  237.     data.forEach(function(arg) { A1Common.SplitArgs(arg, result_args, to_int) });
  238.     if(ret === false || !(key in ret)){
  239.       ret[key] = result_args;
  240.     }
  241.     else{
  242.       ret[key] = ret[key].concat(result_args);
  243.         }
  244.     note = note.replace(match_string, "");
  245.     ret = A1Common.ReadNote(note_key, note, to_int, ret);
  246.   }
  247.   return ret;
  248. };
  249. //=============================================================================
  250. // ○ テキストの横幅を取得する
  251. //=============================================================================
  252. A1Common.CalcTextWidth = function(text, FontFace, FontSize){
  253.   var bitmap = new Bitmap(0, 0);
  254.   bitmap.fontFace = FontFace;
  255.   bitmap.fontSize = FontSize;
  256.   return bitmap.measureTextWidth(text);
  257. };
  258. //=============================================================================
  259. // ○ テキストのスプライトを作成する。
  260. //=============================================================================
  261. A1Common.CreateTextSplite = function(text, FontFace, FontSize, height, align = "left"){
  262.   var width = A1Common.CalcTextWidth(text, FontFace, FontSize);
  263.   var bitmap = new Bitmap(width, height);
  264.   bitmap.fontFace = FontFace;
  265.   bitmap.fontSize = FontSize;
  266.   bitmap.drawText(text, 0, 0, width, height, align);
  267.   var sprite = new Sprite(bitmap);
  268.   return sprite;
  269. };
  270. //=============================================================================
  271. // ○ エスケープ文字入りテキストの横幅を取得する
  272. //=============================================================================
  273. A1Common.CalcTextWidthInEscape = function(text, FontFace, FontSize){
  274.   var iconCount;
  275.   var maxWidth = 0;
  276.   var splitText = text.split("\n");
  277.   for(var i = 0; i < splitText.length; i++){
  278.     var line = splitText[i];
  279.     iconCount = (line.match( /\x1bI\[\d+\]/g ) || []).length
  280.     line = A1Common.removeEscapeCharacter(line);
  281.     var textWidth = A1Common.CalcTextWidth(line, FontFace, FontSize) + 32 * iconCount;
  282.     maxWidth = maxWidth < textWidth ? textWidth : maxWidth;
  283.   }
  284.   return maxWidth;
  285. };
  286. //=============================================================================
  287. // ○ テキストのエスケープ文字を消去する
  288. //=============================================================================
  289. A1Common.removeEscapeCharacter = function(text){
  290.   text = text.replace(/\x1bC\[\d+\]/g, "");
  291.   text = text.replace(/\x1bI\[\d+\]/g, "");
  292.   text = text.replace(/\x1b{/g, "");
  293.   text = text.replace(/\x1b}/g, "");
  294.   text = text.replace(/\x1b\$/g, "");
  295.   text = text.replace(/\x1b\./g, "");
  296.   text = text.replace(/\x1b\|/g, "");
  297.   text = text.replace(/\x1b\!/g, "");
  298.   text = text.replace(/\x1b>/g, "");
  299.   text = text.replace(/\x1b</g, "");
  300.   text = text.replace(/\x1b\^/g, "");
  301.   text = text.replace(/\x1bFC\[[^\]]*,*\d+\]/g, "");
  302.   return text;
  303. };
  304. //=============================================================================
  305. // ○ 顔グラフィックや歩行グラフィックのキーを作成
  306. //=============================================================================
  307. A1Common.makeFaceCharKeys = function(ary, ret = []) {
  308.   if(Array.isArray(ary[0])){
  309.     var makeAry = ary.shift();
  310.     A1Common.makeFaceCharKeys(makeAry, ret);
  311.     if(ary.length > 0){ A1Common.makeFaceCharKeys(ary, ret) }
  312.   }
  313.   else{
  314.     var name = ary.shift();
  315.     if(ary.length > 0){
  316.       for(var i = 0; i < ary.length; i++){
  317.         ret.push([name, parseInt(ary[i])]);
  318.           }
  319.     }
  320.     else{
  321.       ret.push([name]);
  322.         }
  323.   }
  324.   return ret;
  325. };
  326. //=============================================================================
  327. // ○ パスの存在チェック
  328. //=============================================================================
  329. A1Common.pathExist = function(path) {
  330.   try {
  331.     var fs = require('fs');
  332.     fs.statSync(path);
  333.     return true;
  334.   } catch (error) {
  335.     if (error.code === 'ENOENT') {
  336.       return false;
  337.     } else {
  338.     }
  339.   }
  340. };
  341. //=============================================================================
  342. // ○ A1Common フォルダ内のファイル/フォルダ取得
  343. //=============================================================================
  344. A1Common.getFolder = function(path, dirList, exp = true){
  345.   var ret = [];
  346.   var fs = require('fs');
  347.   fs.readdir(path, function(err,files){
  348.     if (err) return console.log(err);
  349.     files.forEach( function (file,idx){
  350.       fs.lstat(path+'/'+file,function(err,stats){
  351.       if(err) return console.log(err);
  352.         if(stats.isDirectory() && dirList === true){
  353.           ret.push(file)
  354.         }
  355.         if(stats.isDirectory() === false && dirList === false){
  356.           if(exp === false){
  357.             var tmp = file.split(".")
  358.             file = file.slice(0, (tmp[tmp.length - 1].length + 1) * -1);
  359.             if(ret.some( fileName => fileName === file) === false){
  360.               ret.push(file)
  361.                         }
  362.                   }
  363.           else{
  364.             ret.push(file)
  365.                   }
  366.         }
  367.       });                  
  368.     });
  369.   });
  370.   return ret;
  371. };
  372. //=============================================================================
  373. // ○ データベースロード完了後の処理
  374. //=============================================================================
  375. A1Common.afterDataLoad = function() {
  376. };
  377. //=============================================================================
  378. // ■ function(_global)
  379. //=============================================================================
  380. (function(_global) {
  381. //=============================================================================
  382. // ☆ Scene_Boot 準備完了か判定
  383. //=============================================================================
  384. var A1CommonSB_isReady = Scene_Boot.prototype.isReady;
  385. Scene_Boot.prototype.isReady = function() {
  386.   var ret = A1CommonSB_isReady.apply(this);
  387.   if(ret === true){ A1Common.afterDataLoad() }
  388.   return ret;
  389. };
  390. //=============================================================================
  391. // ○ Window_Base マスク用の矩形調整
  392. //=============================================================================
  393. Window_Base.prototype.maskRect = function(rect) {
  394. };
  395. //=============================================================================
  396. // ☆ WindowLayer ウィンドウのマスク範囲設定
  397. //=============================================================================
  398. var A1CommonWL_maskWindow = WindowLayer.prototype._maskWindow;
  399. WindowLayer.prototype._maskWindow = function(window, shift) {
  400.   var ret = A1CommonWL_maskWindow.apply(this, arguments);
  401.   var rect = this._windowRect;
  402.   window.maskRect(rect);
  403.   return ret;
  404. };
  405. //=============================================================================
  406. // ○ SceneManager シーンにウィンドウを追加 [AddWindow]
  407. //=============================================================================
  408. SceneManager.sceneAddWindow = function(window) {
  409.   this._scene.addWindow(window);
  410. };
  411. //=============================================================================
  412. // ○ SceneManager シーンにウィンドウを追加 [AddChild]
  413. //=============================================================================
  414. SceneManager.sceneAddChild = function(window) {
  415.   this._scene.addChild(window);
  416. };
  417. //=============================================================================
  418. // ○ SceneManager シーンからウィンドウを削除
  419. //=============================================================================
  420. SceneManager.sceneRemoveWindow = function(window) {
  421.   this._scene._windowLayer.removeChild(window)
  422. };
  423. //=============================================================================
  424. // ○ SceneManager シーンからウィンドウを削除して追加
  425. //=============================================================================
  426. SceneManager.sceneReAddWindow = function(window) {
  427.   this.sceneRemoveWindow(window);
  428.   this.sceneAddWindow(window);
  429. };
  430. //=============================================================================
  431. // ○ SceneManager シーンの指定ウィンドウを1つ前に置く
  432. //=============================================================================
  433. SceneManager.sceneForwardWindow = function(window, forward) {
  434.   this.sceneRemoveWindow(window);
  435.   this.sceneRemoveWindow(forward);
  436.   this.sceneAddWindow(window);
  437.   this.sceneAddWindow(forward);
  438. };
  439. //=============================================================================
  440. // ☆ DataManager データベースのロード
  441. //=============================================================================
  442. var A1CommonDM_loadDatabase = DataManager.loadDatabase;
  443. DataManager.loadDatabase = function() {
  444.   var ret = A1CommonDM_loadDatabase.apply(this, arguments);
  445.   $A1Common = new A1Common();
  446. };
  447. //=============================================================================
  448. // ☆ Game_Interpreter プラグインコマンド
  449. //=============================================================================
  450. var A1CommonGI_pluginCommand = Game_Interpreter.prototype.pluginCommand;
  451. Game_Interpreter.prototype.pluginCommand = function(command, args) {
  452.   var result_args = [];
  453.   args.forEach(function(arg) { A1Common.SplitArgs(arg, result_args) });
  454.   args = result_args;
  455.   if ($A1Common.proc_define_command(command, args)) {
  456.     return true;
  457.   } else {
  458.     var result = A1CommonGI_pluginCommand.call(this, command, args);
  459.     return result;
  460.   }
  461. };
  462. //=============================================================================
  463. // ☆ Window_Base エスケープ文字引数の処理
  464. //=============================================================================
  465. var A1CommonWB_obtainEscapeParam = Window_Message.prototype.obtainEscapeParam;
  466. Window_Base.prototype.obtainEscapeParam = function(textState) {
  467.   var ret = A1CommonWB_obtainEscapeParam.apply(this, arguments);
  468.   if(ret !== ''){ return ret }
  469.   var arr = /^\[([^\]],*\d+)\]/.exec(textState.text.slice(textState.index));
  470.   if (arr) {
  471.     textState.index += arr[0].length;
  472.     var data = arr[1].split(",");
  473.     if(data.length === 1){
  474.       data[0] = parseInt(data[0]);
  475.     }
  476.     else {
  477.       data[1] = parseInt(data[1]);
  478.         }
  479.     ret = data;
  480.   };
  481.   return ret;
  482. };
  483. })(this);




氣泡對話插件  プラグイン本体
JAVASCRIPT 代码复制下载
  1. //=============================================================================
  2. // A1PopupMessage.js
  3. //=============================================================================
  4. /*:
  5.  * @plugindesc 吹き出しメッセージを表示します。
  6.  * @author ツクール工房A1(仮)
  7.  *
  8.  * @help メッセージを吹き出しで表示します。
  9.  * ※表示した吹き出しメッセージは
  10.  *   プラグインコマンドでクローズするまで表示し続けます。
  11.  *
  12.  * 必要プラグイン
  13.  *   ツクール工房A1(仮)共通スクリプト Ver 1.20 以上
  14.  *
  15.  * 必要ファイル
  16.  *   Window_Popup.png
  17.  *   img/system に配置してください。
  18.  *
  19.  * 併用プラグイン
  20.  *   ネームウィンドウ Ver 1.10 以上
  21.  *
  22.  * データベース「アクター」の「メモ」に記載
  23.  *   <顔グラフィック FaceName>
  24.  *    顔グラフィックとアクターを紐づけます。
  25.  *    FaceName で指定した顔グラフィックファイル全てに同じ表示名を適用します。
  26.  *     ※ネームウィンドウと共用です
  27.  *
  28.  *   <顔グラフィック FaceName,FaceIndex,,FaceIndex,FaceIndex...>
  29.  *    顔グラフィックとアクターを紐づけます。
  30.  *    FaceName で指定した顔グラフィックファイルの内、続けて列挙する FaceIndex を表示名に適用します。
  31.  *     ※ネームウィンドウと共用です
  32.  *
  33.  *   <歩行グラフィック characterName>
  34.  *    歩行グラフィックとアクターを紐づけます。
  35.  *    characterName で指定した顔グラフィックファイル全てに同じ表示名を適用します。
  36.  *
  37.  *   <歩行グラフィック characterName,characterIndex,characterIndex,characterIndex...>
  38.  *    歩行グラフィックとアクターを紐づけます。
  39.  *    characterName で指定した歩行グラフィックファイルの内、続けて列挙する characterIndex を表示名に適用します。
  40.  *
  41.  * プラグインコマンド:
  42.  *   吹き出しメッセージ on|off
  43.  *     吹き出しメッセージの使用状態を切り替えます。
  44.  *
  45.  *   吹き出しメッセージ eventID
  46.  *     続くメッセージを eventID で指定したイベントの吹き出しとして表示します。
  47.  *
  48.  *   吹き出しクローズ
  49.  *     現在表示している吹き出しメッセージを全てクローズします。
  50.  *
  51.  *   --------------------------------------注--------------------------------------
  52.  *    説明が煩雑になっていますが
  53.  *    1キャラにつき顔グラフィックと歩行グラフィックが
  54.  *    1ファイルずつになっていると扱いやすいので、おすすめです。
  55.  *
  56.  *    例:歩行グラフィック登録 アレックス顔 アレックス歩行
  57.  *        歩行グラフィック解除 ブライアン顔
  58.  *        吹き出しクローズ 顔 キャロル顔
  59.  *        吹き出しクローズ 歩行 デイジー歩行
  60.  *   ------------------------------------------------------------------------------
  61.  *
  62.  *   吹き出しクローズ ID eventID,eventID,eventID...
  63.  *     列挙した eventID のイベントに表示されている吹き出しメッセージをクローズします。
  64.  *
  65.  *   吹き出しクローズ 顔 faceName
  66.  *   吹き出しクローズ 顔 [faceName],[faceName]...
  67.  *     指定した faceName に紐づいたイベントに表示されている吹き出しメッセージをクローズします。
  68.  *     列挙する場合は、faceName 一つ毎に [ ] で囲ってください
  69.  *
  70.  *   吹き出しクローズ 顔 faceName,faceIndex
  71.  *   吹き出しクローズ 顔 faceName,faceIndex,faceIndex,faceIndex...
  72.  *     指定した faceName faceIndex に紐づいたイベントに表示されている吹き出しメッセージをクローズします。
  73.  *     faceName の後に faceIndex を列挙できます。
  74.  *
  75.  *   吹き出しクローズ 顔 [faceName,faceIndex],[faceName,faceIndex]...
  76.  *   吹き出しクローズ 顔 [faceName,faceIndex,faceIndex,faceIndex...],[faceName,faceIndex,faceIndex,faceIndex...]...
  77.  *     [ ] で囲むことで、faceName faceIndex のセットを列挙できます。
  78.  *
  79.  *   吹き出しクローズ 歩行 characterName
  80.  *   吹き出しクローズ 歩行 [characterName],[characterName]...
  81.  *     上記「吹き出しクローズ 顔」の歩行グラフィック版です
  82.  *     同様の使い方ができます。
  83.  *
  84.  *   吹き出しクローズ 歩行 characterName,characterIndex
  85.  *   吹き出しクローズ 歩行 characterName,characterIndex,characterIndex,characterIndex...
  86.  *     上記「吹き出しクローズ 顔」の歩行グラフィック版です
  87.  *     同様の使い方ができます。
  88.  *
  89.  *   吹き出しクローズ 歩行 [characterName,characterIndex],[characterName,characterIndex]...
  90.  *   吹き出しクローズ 歩行 [characterName,characterIndex,characterIndex,characterIndex...],[characterName,characterIndex,characterIndex,characterIndex...]...
  91.  *     上記「吹き出しクローズ 顔」の歩行グラフィック版です
  92.  *     同様の使い方ができます。
  93.  *
  94.  *   歩行グラフィック登録 FaceName characterName
  95.  *    顔グラフィックと歩行グラフィックを紐づけます。
  96.  *    FaceName で指定した顔グラフィックファイル全てに、characterNameで指定した歩行グラフィック全てを適用します。
  97.  *
  98.  *   歩行グラフィック登録 FaceName,FaceIndex characterName,characterIndex
  99.  *   歩行グラフィック登録 FaceName,FaceIndex,FaceIndex,FaceIndex... characterName,characterIndex,characterIndex,characterIndex...
  100.  *    顔グラフィックと歩行グラフィックを紐づけます。
  101.  *    FaceName で指定した顔グラフィックファイルの内、続けて列挙する FaceIndex を
  102.  *    characterName で指定した歩行グラフィックファイルの内、続けて列挙する characterIndex に紐づけます。
  103.  *
  104.  *   歩行グラフィック解除 FaceName
  105.  *    「歩行グラフィック登録 FaceName characterName」にて登録した紐づけを解除します。
  106.  *
  107.  *   歩行グラフィック解除 FaceName,FaceIndex characterName,characterIndex
  108.  *   歩行グラフィック解除 FaceName,FaceIndex,FaceIndex,FaceIndex... characterName,characterIndex,characterIndex,characterIndex...
  109.  *    顔グラフィックと歩行グラフィックの紐づけを解除します。。
  110.  *    FaceName で指定した顔グラフィックファイルの内、続けて列挙する FaceIndex を
  111.  *    characterName で指定した歩行グラフィックファイルの内、続けて列挙する characterIndex の紐づけを解除します。
  112.  *
  113.  * ネームウィンドウ併用時プラグインコマンド:
  114.  *   吹き出しクローズ 名前 表示名
  115.  *   吹き出しクローズ 名前 表示名,表示名,表示名...
  116.  *     指定した 表示名 に紐づいたイベントに表示されている吹き出しメッセージをクローズします。
  117.  *
  118.  * 「登録用コモンイベント番号」に設定したコモンイベントに
  119.  *  上記プラグインコマンドを記載することで、ゲーム起動時に歩行グラフィック登録します。
  120.  *
  121.  *  データベース「アクター」の「メモ」やプラグインコマンドにて登録していないアクターは
  122.  *  データベース「アクター」で設定しているcharacterName characterIndexにてアクターを紐づけます。
  123.  *
  124.  * @param 歩行登録用コモンイベント番号
  125.  * @desc 歩行グラフィック登録用のコモンイベント番号
  126.  * デフォルト: 0
  127.  * @default 0
  128.  *
  129.  * @param 表示位置補正[x座標]
  130.  * @desc 吹き出しメッセージの x 座標を補正します
  131.  * デフォルト: 0
  132.  * @default 0
  133.  *
  134.  * @param 表示位置補正[y座標・上]
  135.  * @desc メッセージのウィンドウ位置が「上」の際の y 座標を補正します
  136.  * デフォルト: 0
  137.  * @default 0
  138.  *
  139.  * @param 表示位置補正[y座標・下]
  140.  * @desc メッセージのウィンドウ位置が「下」の際の y 座標を補正します
  141.  * デフォルト: 0
  142.  * @default 0
  143.  *
  144.  * @param ヒレ表示位置補正[x座標]
  145.  * @desc 吹き出しメッセージのヒレの x 座標を補正します
  146.  * デフォルト: 0
  147.  * @default 0
  148.  *
  149.  * @param ヒレ表示位置補正[y座標・上]
  150.  * @desc メッセージのウィンドウ位置が「上」の際のヒレの y 座標を補正します
  151.  * デフォルト: 0
  152.  * @default 0
  153.  *
  154.  * @param ヒレ表示位置補正[y座標・下]
  155.  * @desc メッセージのウィンドウ位置が「下」の際のヒレの y 座標を補正します
  156.  * デフォルト: 0
  157.  * @default 0
  158.  *
  159. */
  160. //=============================================================================
  161. // 更新履歴  2020/06/30 Ver1.00 リリース
  162. //           2020/06/30 Ver1.01 ネームウィンドウプラグインを導入しないと
  163. //                              メッセージが表示される不具合を修正
  164. //           2020/07/02 Ver1.02 エスケープ文字の処理に対応
  165. //=============================================================================
  166. // ■ バージョン定義
  167. //=============================================================================
  168. $A1PlugInImpoted["吹き出しメッセージ"] = 1.02;
  169. //=============================================================================
  170. // ■ バージョンチェック
  171. //=============================================================================
  172. var common = A1Common.VersionCheck("吹き出しメッセージ", 1.20);
  173. if (common){
  174. //=============================================================================
  175. // ■ プラグイン設定値
  176. //=============================================================================
  177. A1PlugInParams.PopupWindow = {};
  178. A1PlugInParams.PopupWindow.Parameters = PluginManager.parameters('A1PopupMessage');
  179. A1PlugInParams.PopupWindow.CharRegisterCommonEventID = Number(A1PlugInParams.PopupWindow.Parameters["歩行登録用コモンイベント番号"]) || 0;
  180. A1PlugInParams.PopupWindow.RevisionPosX          = Number(A1PlugInParams.PopupWindow.Parameters["表示位置補正[x座標]"]) || 0;
  181. A1PlugInParams.PopupWindow.RevisionUpPosY        = Number(A1PlugInParams.PopupWindow.Parameters["表示位置補正[y座標・上]"]) || 0;
  182. A1PlugInParams.PopupWindow.RevisionBottomPosY    = Number(A1PlugInParams.PopupWindow.Parameters["表示位置補正[y座標・下]"]) || 0;
  183. A1PlugInParams.PopupWindow.RevisionPopPosX       = Number(A1PlugInParams.PopupWindow.Parameters["ヒレ表示位置補正[x座標]"]) || 0;
  184. A1PlugInParams.PopupWindow.RevisionPopUpPosY     = Number(A1PlugInParams.PopupWindow.Parameters["ヒレ表示位置補正[y座標・上]"]) || 0;
  185. A1PlugInParams.PopupWindow.RevisionPopBottomPosY = Number(A1PlugInParams.PopupWindow.Parameters["ヒレ表示位置補正[y座標・下]"]) || 0;
  186. //=============================================================================
  187. // ■ グローバル変数定義
  188. //=============================================================================
  189. var $dataCharLink = null;
  190. //=============================================================================
  191. // ■ DataCharLink
  192. //=============================================================================
  193. function DataCharLink() {
  194.   this.initialize.apply(this, arguments);
  195. };
  196. //=============================================================================
  197. // ○ DataCharLink オブジェクト初期化
  198. //=============================================================================
  199. DataCharLink.prototype.initialize = function() {
  200.   this._linkChar    = {};
  201.   this._linkIndex   = -1;
  202.   this._removeChar  = [];
  203.   this.SearchLinkActor();
  204.   this.SearchLinkRegister("歩行グラフィック登録",   A1PlugInParams.PopupWindow.CharRegisterCommonEventID);
  205. };
  206. //=============================================================================
  207. // ○ DataCharLink 歩行グラフィックのリンク先を探す [アクター]
  208. //=============================================================================
  209. DataCharLink.prototype.SearchLinkActor = function() {
  210.   for(var i = 1; i < $dataActors.length; i++){
  211.     var face_key = [];
  212.     var char_key = [];
  213.     var face_note_data = A1Common.ReadNote("顔グラフィック", $dataActors[i].note, TO_INT);
  214.     var char_note_data = A1Common.ReadNote("歩行グラフィック", $dataActors[i].note, TO_INT);
  215.     if(char_note_data === false){ char_key.push([$dataActors[i].characterName, $dataActors[i].characterIndex]) }
  216.     else { char_key = this.CreateKeys([char_note_data]) }
  217.     if(face_note_data === false){ face_key.push([$dataActors[i].faceName,      $dataActors[i].faceIndex])      }
  218.     else { face_key = this.CreateKeys(face_note_data) }
  219.     this.AddLinkFromNote(face_key, char_key);
  220.     this.addSearchLinkActor(i, face_key, char_key);
  221.   }
  222. };
  223. //=============================================================================
  224. // ○ DataCharLink 歩行グラフィックのリンク先を探す [アクター・拡張用]
  225. //=============================================================================
  226. DataCharLink.prototype.addSearchLinkActor = function(i, face_key, char_key) {
  227. };
  228. //=============================================================================
  229. // ○ DataCharLink キーを作成する
  230. //=============================================================================
  231. DataCharLink.prototype.CreateKeys = function(note_data, keys = []) {
  232.  return A1Common.makeFaceCharKeys(note_data);
  233. };
  234. //=============================================================================
  235. // ○ DataCharLink 歩行グラフィックのリンク先を探す [レジスター]
  236. //=============================================================================
  237. DataCharLink.prototype.SearchLinkRegister = function(command_name, commonEventID) {
  238.   if(commonEventID === void 0 || commonEventID === 0){ return false }
  239.   var commonEvent = $dataCommonEvents[commonEventID];
  240.   var list = commonEvent.list;
  241.   for(var i = 0; i < list.length; i++){
  242.     var line = list[i];
  243.     if (line.code !== 356){ continue };
  244.     var params = line.parameters;
  245.     var args = params[0].split(" ");
  246.     var command = args.shift();
  247.     if (command !== command_name) { continue };
  248.     if(command_name === "歩行グラフィック登録"){ this.AddLinkFromEvent(args[0], args[1]) }
  249.     this.addSearchLinkRegister(i, args[0], args[1], command_name);
  250.   }
  251. };
  252. //=============================================================================
  253. // ○ DataCharLink 歩行グラフィックのリンク先を探す [レジスター・拡張用]
  254. //=============================================================================
  255. DataCharLink.prototype.addSearchLinkRegister = function(i, face_args, char_args, command_name) {
  256. };
  257. //=============================================================================
  258. // ○ DataCharLink 歩行グラフィックのリンク先を追加する [イベントから]
  259. //=============================================================================
  260. DataCharLink.prototype.AddLinkFromEvent = function(face_args, char_args) {
  261.   var keys = this.CreateFaceAndCharKeys(face_args, char_args);
  262.   var face_key = keys[0];
  263.   var char_key = keys[1];
  264.   this.AddLinkFromNote(face_key, char_key);
  265. };
  266. //=============================================================================
  267. // ○ DataCharLink 歩行グラフィックのリンク先を削除する [イベントから]
  268. //=============================================================================
  269. DataCharLink.prototype.RemoveLinkFromEvent = function(face_args) {
  270.   var face_key = this.CreateKeys(face_args);
  271.   this.AddLinkFromNote(face_key, null, true);
  272. };
  273. //=============================================================================
  274. // ○ DataCharLink 顔グラフィックと歩行グラフィックのキーを作成する
  275. //=============================================================================
  276. DataCharLink.prototype.CreateFaceAndCharKeys = function(face_args, char_args) {
  277.   var result_args = [];
  278.   if(Array.isArray(face_args) === false){ A1Common.SplitArgs(face_args, result_args, TO_INT) }
  279.   var face_key = this.CreateKeys(result_args.length > 0 ? result_args : face_args);
  280.   var result_args = [];
  281.   if(Array.isArray(char_args) === false){ A1Common.SplitArgs(char_args, result_args, TO_INT) }
  282.   var char_key = this.CreateKeys(result_args.length > 0 ? result_args : char_args);
  283.   return [face_key, char_key];
  284. };
  285. //=============================================================================
  286. // ○ DataCharLink 歩行グラフィックのリンク先を追加する [メモから]
  287. //=============================================================================
  288. DataCharLink.prototype.AddLinkFromNote = function(face_key, char_key, remove = false) {
  289.   for(var i = 0; i < face_key.length; i++){
  290.     if(remove === false) { this.AddLink(face_key[i], char_key) };
  291.     if(remove === true)  { this.RemoveLink(face_key[i]) };
  292.   }
  293. };
  294. //=============================================================================
  295. // ○ DataCharLink 歩行グラフィックのリンク先を追加する
  296. //=============================================================================
  297. DataCharLink.prototype.AddLink = function(face_key, char_key) {
  298.   if(this._linkChar[face_key] === void 0){ this._linkChar[face_key] = char_key };
  299. };
  300. //=============================================================================
  301. // ○ DataCharLink 歩行グラフィックのリンク先を解除する
  302. //=============================================================================
  303. DataCharLink.prototype.RemoveLink = function(face_key) {
  304.   if(this._linkChar[face_key] !== void 0){
  305.     delete this._linkChar[face_key]
  306.     this._removeChar.push(face_key);
  307.   }
  308. };
  309. //=============================================================================
  310. // ○ DataCharLink 歩行グラフィック解除済の顔グラフィックを取得する
  311. //=============================================================================
  312. DataCharLink.prototype.RemoveChar = function(face_key) {
  313.   return this._removeChar;
  314. };
  315. //=============================================================================
  316. // ○ DataCharLink 歩行グラフィック解除済の顔グラフィックをクリアする
  317. //=============================================================================
  318. DataCharLink.prototype.clearRemoveChar = function() {
  319.   this._removeChar = [];
  320. };
  321. //=============================================================================
  322. // ○ DataCharLink 歩行グラフィックのリンク名称
  323. //=============================================================================
  324. DataCharLink.prototype.LinkChar = function(face_key) {
  325.   return this._linkChar[face_key];
  326. };
  327. //=============================================================================
  328. // ■ Window_PopupMessage
  329. //=============================================================================
  330. function Window_PopupMessage() {
  331.   this.initialize.apply(this, arguments);
  332. };
  333. //=============================================================================
  334. // ○ Window_PopupMessage 継承元設定
  335. //=============================================================================
  336. Window_PopupMessage.prototype = Object.create(Window_Base.prototype);
  337. Window_PopupMessage.prototype.constructor = Window_PopupMessage;
  338. //=============================================================================
  339. // ○ Window_PopupMessage オブジェクト初期化
  340. //=============================================================================
  341. Window_PopupMessage.prototype.initialize = function(LinkEvent, messageWindow) {
  342.   this._messageWindow = messageWindow;
  343.   this._linkEvent   = LinkEvent;
  344.   this._windowWidth = Graphics.boxWidth;
  345.   this.createPopupSplite();
  346.   var x      = this.windowX();
  347.   var y      = this.windowY();
  348.   var width  = this.windowWidth();
  349.   var height = this.windowHeight();
  350.   Window_Base.prototype.initialize.call(this, x, y, width, height);
  351.   this._positionType = 2;
  352.   this._popupType    = 0;
  353.   this.move(x, y, 0, height);
  354.   this.openness = 0;
  355.   this.setupPopupSplite();
  356. };
  357. //=============================================================================
  358. // ○ Window_PopupMessage 吹き出しのヒレをセットアップ
  359. //=============================================================================
  360. Window_PopupMessage.prototype.setupPopupSplite = function() {
  361.   var key = [this._positionType === 0 ? 0 : 1, 0];
  362.   this._popupSplite = new Sprite(this._popupBitmap[key]);
  363.   this.addChild(this._popupSplite);
  364. };
  365. //=============================================================================
  366. // ○ Window_PopupMessage 吹き出しのヒレを作成
  367. //=============================================================================
  368. Window_PopupMessage.prototype.createPopupSplite = function() {
  369.   this._popupSplite = null;
  370.   this._popupBitmap = {};
  371.   this.createBltBitmap(0 , 0);
  372.   this.createBltBitmap(1 , 0);
  373.   this.createBltBitmap(0 , 1);
  374.   this.createBltBitmap(1 , 1);
  375. };
  376. //=============================================================================
  377. // ○ Window_PopupMessage 吹き出しのヒレ用Bitmapを作成
  378. //=============================================================================
  379. Window_PopupMessage.prototype.createBltBitmap = function(positionType, popupType) {
  380.   var key = [positionType, popupType];
  381.   var tempBitmap         = ImageManager.loadSystem('Window_Popup');
  382.   var bitmapWidth        = tempBitmap.width  / 2;
  383.   var bitmapHeight       = tempBitmap.height / 2;
  384.   this._popupBitmap[key] = new Bitmap(bitmapWidth, bitmapHeight);
  385.   var x = positionType === 0 ? 0 : bitmapWidth;
  386.   var y = popupType    === 0 ? 0 : bitmapHeight;
  387.   this._popupBitmap[key].blt(tempBitmap, x, y, bitmapWidth, bitmapHeight, 0, 0);
  388. };
  389. //=============================================================================
  390. // ○ Window_PopupMessage ウィンドウの幅
  391. //=============================================================================
  392. Window_PopupMessage.prototype.windowWidth = function() {
  393.   return this._windowWidth;
  394. };
  395. //=============================================================================
  396. // ○ Window_PopupMessage ウィンドウの幅を設定
  397. //=============================================================================
  398. Window_PopupMessage.prototype.setWindowWidth = function(value) {
  399.   this._windowWidth = value + 144 + this.standardPadding() * 4;
  400. };
  401. //=============================================================================
  402. // ○ Window_PopupMessage ウィンドウの高さ
  403. //=============================================================================
  404. Window_PopupMessage.prototype.windowHeight = function() {
  405.   return this.fittingHeight(4);
  406. };
  407. //=============================================================================
  408. // ○ Window_PopupMessage ポップアップタイプの設定
  409. //=============================================================================
  410. Window_PopupMessage.prototype.setPopupType = function(value) {
  411.   this._popupType = value;
  412. };
  413. //=============================================================================
  414. // ○ Window_PopupMessage フレーム更新
  415. //=============================================================================
  416. Window_PopupMessage.prototype.update = function() {
  417.   Window_Base.prototype.update.call(this);
  418.   var x = this.windowX();
  419.   var y = this.windowY();
  420.   this.opacity = this._linkEvent.opacity();
  421.   this.contentsOpacity = this.opacity;
  422.   this.move(x, y, this.windowWidth(), this.windowHeight());
  423.   this.movePopupSplite();
  424. };
  425. //=============================================================================
  426. // ○ Window_PopupMessage ウィンドウのx座標
  427. //=============================================================================
  428. Window_PopupMessage.prototype.windowX = function() {
  429.   var x = this._linkEvent.screenX() - 96 + A1PlugInParams.PopupWindow.RevisionPosX;
  430.   var moveX = 0;
  431.   if(x + this.width > Graphics.boxWidth){
  432.     moveX = x - (Graphics.boxWidth - this.width);
  433.     x -= moveX;
  434.   }
  435.   if(x < 0){
  436.     moveX = x;
  437.     x = 0;
  438.   }
  439.   if(this._popupSplite) { this._popupSplite.x = 96 + moveX + A1PlugInParams.PopupWindow.RevisionPopPosX }
  440.   return x;
  441. };
  442. //=============================================================================
  443. // ○ Window_PopupMessage ウィンドウのy座標
  444. //=============================================================================
  445. Window_PopupMessage.prototype.windowY = function() {
  446.   var y;
  447.   if(this._positionType === 0) { y = this._linkEvent.screenY() - this.height - 80 + A1PlugInParams.PopupWindow.RevisionUpPosY}
  448.   if(this._positionType > 0)   { y = this._linkEvent.screenY() + 32  + A1PlugInParams.PopupWindow.RevisionBottomPosY}
  449.   return y;
  450. };
  451. //=============================================================================
  452. // ○ Window_PopupMessage ウィンドウの位置タイプ設定
  453. //=============================================================================
  454. Window_PopupMessage.prototype.setPositionType = function(value) {
  455.   var key = [value === 0 ? 0 : 1, this._popupType];
  456.   this._popupSplite.bitmap = this._popupBitmap[key];
  457.   this._positionType = value;
  458. };
  459. //=============================================================================
  460. // ○ Window_PopupMessage ヒレの移動
  461. //=============================================================================
  462. Window_PopupMessage.prototype.movePopupSplite = function() {
  463.   if(this._positionType === 0) { this._popupSplite.y = this.height - 4 + A1PlugInParams.PopupWindow.RevisionPopUpPosY}
  464.   if(this._positionType > 0)   { this._popupSplite.y = 0 - this._popupSplite.height + 4 + A1PlugInParams.PopupWindow.RevisionPopBottomPosY}
  465.   this._popupSplite.opacity = Math.min(this.opacity, this.openness);
  466. };
  467. //=============================================================================
  468. // ○ Window_PopupMessage 顔グラフィックの描画
  469. //=============================================================================
  470. Window_PopupMessage.prototype.drawMessageFace = function() {
  471.   this.drawFace($gameMessage.faceName(), $gameMessage.faceIndex(), 0, 0);
  472.   ImageManager.releaseReservation(this._imageReservationId);
  473. };
  474. //=============================================================================
  475. // ○ Window_PopupMessage 内容のクリア
  476. //=============================================================================
  477. Window_PopupMessage.prototype.clear = function() {
  478.   this.contents.clear();
  479. };
  480. //=============================================================================
  481. // ○ Window_PopupMessage エスケープ文字の処理
  482. //=============================================================================
  483. Window_PopupMessage.prototype.processEscapeCharacter = function(code, textState) {
  484.   this._messageWindow.processEscapeCharacter(code, textState);
  485. };
  486. //=============================================================================
  487. // ■ function(_global)
  488. //=============================================================================
  489. (function(_global) {
  490. //=============================================================================
  491. // ☆ DataManager ゲームオブジェクトの作成
  492. //=============================================================================
  493. var A1PopupMessageDM_createGameObjects = DataManager.createGameObjects;
  494. DataManager.createGameObjects = function() {
  495.   var ret = A1PopupMessageDM_createGameObjects.apply(this);
  496.   if($dataCharLink === null){ $dataCharLink = new DataCharLink() }
  497.   return ret;
  498. };
  499. //=============================================================================
  500. // ○ Window_Message エスケープ文字の変換
  501. //=============================================================================
  502. Window_Message.prototype.convertEscapeCharacters = function(text) {
  503.   text = Window_Base.prototype.convertEscapeCharacters.call(this, text);
  504.   var kp_exp = /\x1bKP/gi;
  505.   var popupType = (text.match(kp_exp) || []).length > 0 ? 1 : 0
  506.   text = text.replace(kp_exp, this.setPopupType(popupType));
  507.   return text;
  508. };
  509. //=============================================================================
  510. // ○ Window_Base ポップアップタイプの設定
  511. //=============================================================================
  512. Window_Message.prototype.setPopupType = function(value) {
  513.   this._popupType = value;
  514.   return "";
  515. };
  516. //=============================================================================
  517. // ☆ Window_Message メンバ変数の初期化
  518. //=============================================================================
  519. var A1PopupMessageWM_initMembers = Window_Message.prototype.initMembers;
  520. Window_Message.prototype.initMembers = function() {
  521.   this._popupWindows = {};
  522.   this._linkEvent    = {};
  523.   this._linkFaceName = {};
  524.   this._linkEventID = null;
  525.   var ret = A1PopupMessageWM_initMembers.apply(this);
  526.   return ret;
  527. };
  528. //=============================================================================
  529. // ☆ Window_Message メッセージの開始
  530. //=============================================================================
  531. var A1PopupMessageWM_startMessage = Window_Message.prototype.startMessage;
  532. Window_Message.prototype.startMessage = function() {
  533.   this._linkEventID = null;
  534.   this._popupType   = 0;
  535.   this.SearchLinkEvent();
  536.   var ret = A1PopupMessageWM_startMessage.apply(this);
  537.   return ret;
  538. };
  539. //=============================================================================
  540. // ☆ Window_Message 新しいメッセージの作成
  541. //=============================================================================
  542. var A1PopupMessageWM_newPage = Window_Message.prototype.newPage;
  543. Window_Message.prototype.newPage = function(textState) {
  544.   if(this._linkEventID && $gameSystem.usePopupMessage() === true){
  545.     this._popupWindows[this._linkEventID].clear();
  546.     this.setPopupWidth(this._linkEventID);
  547.   }
  548.   var ret = A1PopupMessageWM_newPage.apply(this, arguments);
  549.   return ret;
  550. };
  551. //=============================================================================
  552. // ○ Window_Message 吹き出しメッセージウィンドウ幅の設定
  553. //=============================================================================
  554. Window_Message.prototype.setPopupWidth = function(LinkEventID) {
  555.   var fontFace  = this.contents.fontFace
  556.   var fontSize  = this.contents.fontSize
  557.   var textWidth = A1Common.CalcTextWidthInEscape(this._textState.text, fontFace, fontSize);
  558.   this._popupWindows[LinkEventID].setWindowWidth(textWidth);
  559.   this._popupWindows[LinkEventID].setPopupType(this._popupType);
  560. };
  561. //=============================================================================
  562. // ☆ Window_Message 表示位置の更新
  563. //=============================================================================
  564. var A1PopupMessageWM_updatePlacement = Window_Message.prototype.updatePlacement;
  565. Window_Message.prototype.updatePlacement = function() {
  566.   var ret = A1PopupMessageWM_updatePlacement.apply(this);
  567.   if(this._linkEventID && $gameSystem.usePopupMessage() === true){
  568.     this.setPopupWindow(this._linkEventID)
  569.   }
  570. };
  571. //=============================================================================
  572. // ○ Window_Message 吹き出しメッセージウィンドウの設定
  573. //=============================================================================
  574. Window_Message.prototype.setPopupWindow = function(LinkEventID) {
  575.   this._popupWindows[LinkEventID].setPositionType(this._positionType);
  576.   this._popupWindows[LinkEventID].open();
  577. };
  578. //=============================================================================
  579. // ☆ Window_Message 顔グラフィックの描画
  580. //=============================================================================
  581. var A1PopupMessageWM_drawMessageFace = Window_Message.prototype.drawMessageFace;
  582. Window_Message.prototype.drawMessageFace = function() {
  583.   var ret = A1PopupMessageWM_drawMessageFace.apply(this);
  584.   if(this._linkEventID && $gameSystem.usePopupMessage() === true){
  585.     this._popupWindows[this._linkEventID].drawMessageFace();
  586.   }
  587.   return ret;
  588. };
  589. //=============================================================================
  590. // ○ Window_Message リンクするイベントの検索
  591. //=============================================================================
  592. Window_Message.prototype.SearchLinkEvent = function() {
  593.   var ret;
  594.   var LinkEvent = this.FaceLinkEvent();
  595.   if(LinkEvent && $gameSystem.usePopupMessage() === true){
  596.     this.openness = 0;
  597.     this.ShowPopupMessage(LinkEvent);
  598.     return true;
  599.   }
  600.   return false;
  601. };
  602. //=============================================================================
  603. // ○ Window_Message 吹き出しメッセージの表示
  604. //=============================================================================
  605. Window_Message.prototype.ShowPopupMessage = function(LinkEvent) {
  606.   this.CreatePopupMessage(LinkEvent)
  607. };
  608. //=============================================================================
  609. // ○ Window_Message 吹き出しメッセージの作成
  610. //=============================================================================
  611. Window_Message.prototype.CreatePopupMessage = function(LinkEvent) {
  612.   var LinkEventID = LinkEvent === $gamePlayer ? -1 : LinkEvent.eventId();
  613.   this._linkEventID = LinkEventID;
  614.   if((LinkEventID in this._popupWindows) === false){
  615.     this._popupWindows[LinkEventID] = new Window_PopupMessage(LinkEvent, this);
  616.     SceneManager.sceneAddWindow(this._popupWindows[LinkEventID]);
  617.   }
  618. };
  619. //=============================================================================
  620. // ○ Window_Message 文字の処理
  621. //=============================================================================
  622. Window_Message.prototype.processCharacter = function(textState) {
  623.   if(this._linkEventID  && $gameSystem.usePopupMessage() === true){
  624.     this._popupWindows[this._linkEventID].processCharacter(textState)
  625.   }
  626.   else {
  627.     Window_Base.prototype.processCharacter.call(this, textState)
  628.   }
  629. };
  630. //=============================================================================
  631. // ○ Window_Message 顔グラフィックとリンクしている歩行イベントの取得
  632. //=============================================================================
  633. Window_Message.prototype.FaceLinkEvent = function() {
  634.   var ret;
  635.   var TempEventID = $gameTemp.tempPopupID();
  636.   if(TempEventID){
  637.     ret = $gameMap.event(TempEventID);
  638.     $gameTemp.setTempPopupID(null);
  639.   }
  640.   else {
  641.     var events = $gameMap.events();
  642.     var key  = [$gameMessage.faceName()];
  643.     var char = $dataCharLink.LinkChar(key);
  644.     if(char === void 0){
  645.       var key = [$gameMessage.faceName(), $gameMessage.faceIndex()];
  646.       char = $dataCharLink.LinkChar(key);
  647.         }
  648.     if(char === void 0){ return false };
  649.     ret = this.LinkEventSearch($gamePlayer, char, key);
  650.     if(ret){ return ret }
  651.     for(var i = 0; i < events.length; i++){
  652.       ret = this.LinkEventSearch(events[i], char, key);
  653.       if(ret){ break }
  654.         }
  655.   }
  656.   return ret;
  657. };
  658. //=============================================================================
  659. // ○ Window_Message 顔グラフィックとリンクしている歩行イベントの検索
  660. //=============================================================================
  661. Window_Message.prototype.LinkEventSearch = function(event, char, key) {
  662.   var ret;
  663.   var event_key = [event.characterName(), event.characterIndex()];
  664.   var result = char.find(item => JSON.stringify(item) === JSON.stringify(event_key));
  665.   if(result !== void 0){
  666.     ret = event;
  667.     var eventID = event === $gamePlayer ? -1 : ret.eventId();
  668.     this._linkEvent[eventID] = key;
  669.   }
  670.   return ret;
  671. };
  672. //=============================================================================
  673. // ☆ Window_Message ウィンドウのオープン
  674. //=============================================================================
  675. var A1PopupMessageWM_open = Window_Message.prototype.open;
  676. Window_Message.prototype.open = function() {
  677.   if(this._linkEventID){ return false }
  678.   var ret = A1PopupMessageWM_open.apply(this, arguments);
  679.   return ret;
  680. };
  681. //=============================================================================
  682. // ☆ Window_Message メッセージの終端
  683. //=============================================================================
  684. var A1PopupMessageWM_terminateMessage = Window_Message.prototype.terminateMessage;
  685. Window_Message.prototype.terminateMessage = function() {
  686.   for(key in this._popupWindows){ this._popupWindows[key].pause = false }
  687.   var ret = A1PopupMessageWM_terminateMessage.apply(this);
  688.   return ret;
  689. };
  690. //=============================================================================
  691. // ☆ Window_Message 一時停止
  692. //=============================================================================
  693. var A1PopupMessageWM_startPause = Window_Message.prototype.startPause;
  694. Window_Message.prototype.startPause = function() {
  695.   var ret = A1PopupMessageWM_startPause.apply(this, arguments);
  696.   if(this._linkEventID){ this._popupWindows[this._linkEventID].pause = true }
  697.   return ret;
  698. };
  699. //=============================================================================
  700. // ○ Window_Message 吹き出しメッセージの強制クローズ
  701. //=============================================================================
  702. Window_Message.prototype.forceClosePopup = function() {
  703.   for(key in this._popupWindows){ this._popupWindows[key].close() }
  704.   $gameSystem.setUsePopupMessage(null);
  705. };
  706. //=============================================================================
  707. // ○ Window_Message 吹き出しメッセージのクローズ
  708. //=============================================================================
  709. Window_Message.prototype.closePopup = function(id, remove = false) {
  710.   if(id in this._popupWindows){ this._popupWindows[id].close() }
  711. };
  712. //=============================================================================
  713. // ○ Window_Message 吹き出しメッセージのクローズ [ID指定]
  714. //=============================================================================
  715. Window_Message.prototype.closePopupID = function() {
  716.   var list = $gameTemp.closePopupID();
  717.   for(var i = 0; i < list.length; i++){ this.closePopup(list[i]) }
  718.   $gameTemp.setClosePopupID(null);
  719. };
  720. //=============================================================================
  721. // ○ Window_Message 吹き出しメッセージのクローズ [ALL]
  722. //=============================================================================
  723. Window_Message.prototype.closePopupAll = function() {
  724.   for(var id in this._popupWindows){ this._popupWindows[id].close() }
  725.   $gameTemp.setClosePopupAll(null);
  726. };
  727. //=============================================================================
  728. // ○ Window_Message 吹き出しメッセージのクローズ [歩行グラフィック指定]
  729. //=============================================================================
  730. Window_Message.prototype.closePopupChar = function() {
  731.   var list = A1Common.makeFaceCharKeys($gameTemp.closePopupChar())
  732.   var events = $gameMap.events();
  733.   for(var i = 0; i < list.length; i++){
  734.     var info = list[i];
  735.     var key = info.length === 1 ? [info[0]] : [info[0], info[1]];
  736.     for(var j = -1; j < events.length; j++){
  737.       var event   = j === -1 ? $gamePlayer : events[j];
  738.       var eventID = j === -1 ? -1 : events[j].eventId();
  739.       if(event.characterName() !== key[0]){ continue }
  740.       if(key.length === 1 || key[1] === event.characterIndex()){ this.closePopup(eventID) }
  741.         }
  742.   }
  743.   $gameTemp.setClosePopupChar(null);
  744. };
  745. //=============================================================================
  746. // ○ Window_Message 吹き出しメッセージのクローズ [顔グラフィック指定]
  747. //=============================================================================
  748. Window_Message.prototype.closePopupFace = function() {
  749.   this.closePopupForFace(A1Common.makeFaceCharKeys($gameTemp.closePopupFace()));
  750.   $gameTemp.setClosePopupFace(null);
  751. };
  752. //=============================================================================
  753. // ○ Window_Message 吹き出しメッセージのクローズ [歩行リンク解除]
  754. //=============================================================================
  755. Window_Message.prototype.closePopupRemoveFace = function() {
  756.   this.closePopupForFace(A1Common.makeFaceCharKeys($dataCharLink.RemoveChar()), true);
  757.   $dataCharLink.clearRemoveChar();
  758. };
  759. //=============================================================================
  760. // ○ Window_Message 吹き出しメッセージのクローズ [顔グラフィック指定]
  761. //=============================================================================
  762. Window_Message.prototype.closePopupForFace = function(list, remove = false) {
  763.   for(var i = 0; i < list.length; i++){
  764.     var info = list[i];
  765.     var key = info.length === 1 ? [info[0]] : [info[0], info[1]];
  766.     for(eventID in this._linkEvent){
  767.       if(JSON.stringify(this._linkEvent[eventID]) === JSON.stringify(key)){ this.closePopup(eventID, remove) }
  768.     }
  769.   }
  770. };
  771. //=============================================================================
  772. // ☆ Window_Message フレーム更新
  773. //=============================================================================
  774. var A1PopupMessageWM_update = Window_Message.prototype.update;
  775. Window_Message.prototype.update = function() {
  776.   if($gameSystem.usePopupMessage() === false){ this.forceClosePopup() }
  777.   if($gameTemp.closePopupID().length > 0)  { this.closePopupID() }
  778.   if($gameTemp.closePopupChar().length > 0){ this.closePopupChar() }
  779.   if($gameTemp.closePopupFace().length > 0){ this.closePopupFace() }
  780.   if($dataCharLink.RemoveChar().length > 0){ this.closePopupRemoveFace() }
  781.   if($gameTemp.closePopupAll() === true)   { this.closePopupAll() }
  782.   var ret = A1PopupMessageWM_update.apply(this);
  783.   return ret;
  784. };
  785. //=============================================================================
  786. // ☆ Scene_Boot システムイメージのロード
  787. //=============================================================================
  788. var A1PopupMessageSB_loadSystemImages = Scene_Boot.loadSystemImages;
  789. Scene_Boot.loadSystemImages = function() {
  790.   var ret = A1PopupMessageSB_loadSystemImages.apply(this);
  791.   ImageManager.reserveSystem('Window_Popup');
  792.   return ret;
  793. };
  794. //=============================================================================
  795. // ☆ Game_Temp オブジェクト初期化
  796. //=============================================================================
  797. var A1_PopupMessageGT_initialize = Game_Temp.prototype.initialize;
  798. Game_Temp.prototype.initialize = function() {
  799.   var ret = A1_PopupMessageGT_initialize.apply(this);
  800.   this._tempPopupID    = null;
  801.   this._closePopupID   = [];
  802.   this._closePopupChar = [];
  803.   this._closePopupFace = [];
  804.   this._closePopupName = [];
  805.   this._closePopupAll  = null;
  806.   return ret;
  807. };
  808. //=============================================================================
  809. // ○ Game_Temp 吹き出しメッセージ全クローズの取得
  810. //=============================================================================
  811. Game_Temp.prototype.closePopupAll = function(value) {
  812.   return this._closePopupAll;
  813. };
  814. //=============================================================================
  815. // ○ Game_Temp 吹き出しメッセージ全クローズの設定
  816. //=============================================================================
  817. Game_Temp.prototype.setClosePopupAll = function(value) {
  818.   this._closePopupAll = value;
  819. };
  820. //=============================================================================
  821. // ○ Game_Temp 吹き出しメッセージクローズイベントの取得
  822. //=============================================================================
  823. Game_Temp.prototype.closePopupID = function() {
  824.   return this._closePopupID;
  825. };
  826. //=============================================================================
  827. // ○ Game_Temp 吹き出しメッセージクローズイベントの設定
  828. //=============================================================================
  829. Game_Temp.prototype.setClosePopupID = function(value) {
  830.   this.addClosePopup(value, this._closePopupID);
  831. };
  832. //=============================================================================
  833. // ○ Game_Temp 吹き出しメッセージクローズ歩行グラフィックの取得
  834. //=============================================================================
  835. Game_Temp.prototype.closePopupChar = function() {
  836.   return this._closePopupChar;
  837. };
  838. //=============================================================================
  839. // ○ Game_Temp 吹き出しメッセージクローズ歩行グラフィックの設定
  840. //=============================================================================
  841. Game_Temp.prototype.setClosePopupChar = function(value) {
  842.   this.addClosePopup(value, this._closePopupChar);
  843. };
  844. //=============================================================================
  845. // ○ Game_Temp 吹き出しメッセージクローズ顔グラフィックの取得
  846. //=============================================================================
  847. Game_Temp.prototype.closePopupFace = function() {
  848.   return this._closePopupFace;
  849. };
  850. //=============================================================================
  851. // ○ Game_Temp 吹き出しメッセージクローズ顔グラフィックの設定
  852. //=============================================================================
  853. Game_Temp.prototype.setClosePopupFace = function(value) {
  854.   this.addClosePopup(value, this._closePopupFace);
  855. };
  856. //=============================================================================
  857. // ○ Game_Temp 吹き出しメッセージクローズの追加
  858. //=============================================================================
  859. Game_Temp.prototype.addClosePopup = function(value, target) {
  860.   if(value === null){
  861.     target.splice(0);
  862.   }
  863.   else if(Array.isArray(value) === true){
  864.     for(var i = 0; i < value.length; i++){ target.push(value[i]) }
  865.   }
  866.   else{
  867.     target.push(value);
  868.   }
  869. };
  870. //=============================================================================
  871. // ○ Game_Temp 吹き出しメッセージ一時表示イベントの取得
  872. //=============================================================================
  873. Game_Temp.prototype.tempPopupID = function() {
  874.   return this._tempPopupID;
  875. };
  876. //=============================================================================
  877. // ○ Game_Temp 吹き出しメッセージ一時表示イベントの設定
  878. //=============================================================================
  879. Game_Temp.prototype.setTempPopupID = function(value) {
  880.   this._tempPopupID = value;
  881. };
  882. //=============================================================================
  883. // ☆ Game_System オブジェクト初期化
  884. //=============================================================================
  885. var A1_PopupMessageGS_initialize = Game_System.prototype.initialize;
  886. Game_System.prototype.initialize = function() {
  887.   var ret = A1_PopupMessageGS_initialize.apply(this);
  888.   this._usePopupMessage   = null;
  889.   return ret;
  890. };
  891. //=============================================================================
  892. // ○ Game_System 吹き出しメッセージ使用状態の取得
  893. //=============================================================================
  894. Game_System.prototype.usePopupMessage = function() {
  895.   return this._usePopupMessage;
  896. };
  897. //=============================================================================
  898. // ○ Game_System 吹き出しメッセージ使用状態の設定
  899. //=============================================================================
  900. Game_System.prototype.setUsePopupMessage = function(value) {
  901.   this._usePopupMessage = value;
  902. };
  903. //=============================================================================
  904. // ☆ A1Common プラグインコマンドの定義
  905. //=============================================================================
  906. var A1_PopupMessage_define_command = A1Common.prototype.define_command;
  907. A1Common.prototype.define_command = function() {
  908.   var command = A1_PopupMessage_define_command.apply(this);
  909.   command["吹き出しメッセージ"] = Game_Interpreter.A1_PopupMessage.bind(this);
  910.   command["吹き出しクローズ"]   = Game_Interpreter.A1_ClosePopupMessage.bind(this);
  911.   command["歩行グラフィック登録"]   = Game_Interpreter.A1_RegisterCharLink.bind(this);
  912.   command["歩行グラフィック解除"]   = Game_Interpreter.A1_RemoveCharLink.bind(this);
  913.   return command;
  914. };
  915. //=============================================================================
  916. // ○ Game_Interpreter プラグインコマンド [吹き出しメッセージ]
  917. //=============================================================================
  918. Game_Interpreter.A1_PopupMessage = function(args) {
  919.   if     (args[0] === "on" )    { $gameSystem.setUsePopupMessage(true)  }
  920.   else if(args[0] === "off")    { $gameSystem.setUsePopupMessage(false) }
  921.   else{ $gameTemp.setTempPopupID(parseInt(args[0])) }
  922.   return true;
  923. };
  924. //=============================================================================
  925. // ○ Game_Interpreter プラグインコマンド [吹き出しクローズ]
  926. //=============================================================================
  927. Game_Interpreter.A1_ClosePopupMessage = function(args) {
  928.   if     (args[0] === "ID" )  { $gameTemp.setClosePopupID(parseInt(args[1]))  }
  929.   else if(args[0] === "歩行") { $gameTemp.setClosePopupChar(args[1]) }
  930.   else if(args[0] === "顔")   { $gameTemp.setClosePopupFace(args[1]) }
  931.   else { $gameTemp.setClosePopupAll(true) }
  932.   return true;
  933. };
  934. //=============================================================================
  935. // ○ Game_Interpreter プラグインコマンド [歩行グラフィック登録]
  936. //=============================================================================
  937. Game_Interpreter.A1_RegisterCharLink = function(args) {
  938.   $dataCharLink.AddLinkFromEvent(args[0], args[1]);
  939.   return true;
  940. };
  941. //=============================================================================
  942. // ○ Game_Interpreter プラグインコマンド [歩行グラフィック解除]
  943. //=============================================================================
  944. Game_Interpreter.A1_RemoveCharLink = function(args) {
  945.   $dataCharLink.RemoveLinkFromEvent(args[0]);
  946.   return true;
  947. };
  948. //=============================================================================
  949. // ■ ネームウィンドウ使用時の処理
  950. //=============================================================================
  951. var nameWindow = null;
  952. if($A1PlugInImpoted["ネームウィンドウ"]){
  953.   nameWindow = A1Common.VersionCheck("吹き出しメッセージ", 1.10, "ネームウィンドウ");
  954. }
  955. if(nameWindow){
  956. //=============================================================================
  957. // ☆ Window_FaceName オブジェクト初期化
  958. //=============================================================================
  959. var A1PopupMessageWithNameWindowWFN_initialize = Window_FaceName.prototype.initialize;
  960. Window_FaceName.prototype.initialize = function(FaceName, x, y) {
  961.   var ret = A1PopupMessageWithNameWindowWFN_initialize.apply(this, arguments);
  962.   this._parentWindow = null;
  963.   return ret;
  964. };
  965. //=============================================================================
  966. // ○ Window_FaceName フレーム更新
  967. //=============================================================================
  968. var A1PopupMessageWithNameWindowWFN_update = Window_FaceName.prototype.update;
  969. Window_FaceName.prototype.update = function() {
  970.   var ret = A1PopupMessageWithNameWindowWFN_update.apply(this);
  971.   this._splite.opacity = Math.min(this.openness, this.opacity);
  972.   return ret;
  973. };
  974. //=============================================================================
  975. // ○ Window_FaceName 親ウインドウの設定
  976. //=============================================================================
  977. Window_FaceName.prototype.setParentWindow = function(window) {
  978.   this._parentWindow = window;
  979. };
  980. //=============================================================================
  981. // ○ Window_FaceName 親ウインドウの取得
  982. //=============================================================================
  983. Window_FaceName.prototype.parentWindow = function() {
  984.   return this._parentWindow;
  985. };
  986. //=============================================================================
  987. // ☆ Window_PopupMessage オブジェクト初期化
  988. //=============================================================================
  989. var A1PopupMessageWithNameWindowWPM_initialize = Window_PopupMessage.prototype.initialize;
  990. Window_PopupMessage.prototype.initialize = function(LinkEvent) {
  991.   var ret = A1PopupMessageWithNameWindowWPM_initialize.apply(this, arguments);
  992.   this._linkNameWindow = null;
  993.   return ret;
  994. };
  995. //=============================================================================
  996. // ○ Window_PopupMessage リンクするネームウィンドウの取得
  997. //=============================================================================
  998. Window_PopupMessage.prototype.linkNameWindow = function() {
  999.   return this._linkNameWindow;
  1000. };
  1001. //=============================================================================
  1002. // ○ Window_PopupMessage リンクするネームウィンドウの設定
  1003. //=============================================================================
  1004. Window_PopupMessage.prototype.setLinkNameWindow = function(window) {
  1005.   this._linkNameWindow = window;
  1006.   if(window){
  1007.     window.setParentWindow(this);
  1008.     SceneManager.sceneForwardWindow(this, window);
  1009.   }
  1010. };
  1011. //=============================================================================
  1012. // ☆ Window_PopupMessage フレーム更新
  1013. //=============================================================================
  1014. var A1PopupMessageWithNameWindowWPM_update = Window_PopupMessage.prototype.update;
  1015. Window_PopupMessage.prototype.update = function() {
  1016.   var ret = A1PopupMessageWithNameWindowWPM_update.apply(this);
  1017.   this.moveNameWindow();
  1018.   return ret;
  1019. };
  1020. //=============================================================================
  1021. // ○ Window_PopupMessage ウィンドウのオープン
  1022. //=============================================================================
  1023. Window_PopupMessage.prototype.open = function() {
  1024.   Window_Base.prototype.open.call(this);
  1025.   if($gameSystem.usePopupMessage() !== true){ return false }
  1026.   var window = this._linkNameWindow;
  1027.   if(window && $gameSystem.ShowNameWindow() === true){ window.open() };
  1028. };
  1029. //=============================================================================
  1030. // ○ Window_PopupMessage ウィンドウのクローズ
  1031. //=============================================================================
  1032. Window_PopupMessage.prototype.close = function() {
  1033.   Window_Base.prototype.close.call(this);
  1034.   if($gameSystem.usePopupMessage() !== true){ return false }
  1035.   var window = this._linkNameWindow;
  1036.   if(window && $gameSystem.ShowNameWindow() === true){ window.close() };
  1037. };
  1038. //=============================================================================
  1039. // ○ Window_PopupMessage ネームウィンドウの移動
  1040. //=============================================================================
  1041. Window_PopupMessage.prototype.moveNameWindow = function() {
  1042.   if($gameSystem.usePopupMessage() !== true){ return false }
  1043.   var x = this.nameWindowX();
  1044.   var y = this.nameWindowY();
  1045.   var window = this._linkNameWindow;
  1046.   if(window){
  1047.     window.move(x, y, window.windowWidth(), window.windowHeight())
  1048.     window.opacity = this.opacity;
  1049.   }
  1050. };
  1051. //=============================================================================
  1052. // ○ Window_PopupMessage ネームウィンドウのx座標
  1053. //=============================================================================
  1054. Window_PopupMessage.prototype.nameWindowX = function() {
  1055.   return this.x + 72;
  1056. };
  1057. //=============================================================================
  1058. // ○ Window_PopupMessage ネームウィンドウのy座標
  1059. //=============================================================================
  1060. Window_PopupMessage.prototype.nameWindowY = function() {
  1061.   var y;
  1062.   if(this._positionType > 0)  { y = this.y + this.height - this.lineHeight() / 2}
  1063.   if(this._positionType === 0){ y = this.y - this.lineHeight() / 2}
  1064.   return y;
  1065. };
  1066. //=============================================================================
  1067. // ☆ Window_Message 吹き出しメッセージの作成
  1068. //=============================================================================
  1069. var A1PopupMessageWithNameWindowWM_CreatePopupMessage = Window_Message.prototype.CreatePopupMessage;
  1070. Window_Message.prototype.CreatePopupMessage = function(LinkEvent) {
  1071.   var ret = A1PopupMessageWithNameWindowWM_CreatePopupMessage.apply(this, arguments);
  1072.   return ret;
  1073. };
  1074. //=============================================================================
  1075. // ☆ Window_Message 顔グラフィックとリンクしている名前の検索
  1076. //=============================================================================
  1077. var A1PopupMessageWithNameWindowWM_FindLinkName = Window_Message.prototype.FindLinkName;
  1078. Window_Message.prototype.FindLinkName = function(key) {
  1079.   var ret = A1PopupMessageWithNameWindowWM_FindLinkName.apply(this, arguments);
  1080.   if(ret !== void 0){ this._linkFaceName[key] = ret }
  1081.   return ret;
  1082. };
  1083. //=============================================================================
  1084. // ☆ Window_Message 吹き出しメッセージウィンドウの設定
  1085. //=============================================================================
  1086. var A1PopupMessageWithNameWindowWPM_setPopupWindow = Window_Message.prototype.setPopupWindow;
  1087. Window_Message.prototype.setPopupWindow = function(LinkEventID) {
  1088.   if($gameSystem.usePopupMessage() === true){
  1089.     var eventKey = this._linkEvent[LinkEventID];
  1090.     var LinkName = this._linkFaceName[eventKey];
  1091.     this._popupWindows[LinkEventID].setLinkNameWindow(this._nameWindow[LinkName]);
  1092.   }
  1093.   var ret = A1PopupMessageWithNameWindowWPM_setPopupWindow.apply(this, arguments);
  1094.   return ret;
  1095. };
  1096. //=============================================================================
  1097. // ☆ Window_Message ネームウィンドウの移動
  1098. //=============================================================================
  1099. var A1PopupMessageWithNameWindowWPM_moveNameWindow = Window_Message.prototype.moveNameWindow;
  1100. Window_Message.prototype.moveNameWindow = function(window, key) {
  1101.   if(window.parentWindow()){ return false }
  1102.   var ret = A1PopupMessageWithNameWindowWPM_moveNameWindow.apply(this, arguments);
  1103.   return ret;
  1104. };
  1105. //=============================================================================
  1106. // ☆ Window_Message ネームウィンドウのオープン
  1107. //=============================================================================
  1108. var A1PopupMessageWithNameWindowWM_OpenNameWindow = Window_Message.prototype.OpenNameWindow;
  1109. Window_Message.prototype.OpenNameWindow = function() {
  1110.   if($gameSystem.usePopupMessage() !== true){
  1111.     return A1PopupMessageWithNameWindowWM_OpenNameWindow.apply(this);
  1112.   }
  1113.   if($gameSystem.ShowNameWindow() === false){ return false }
  1114.   for(var key in this._nameWindow){
  1115.     if(this._nameWindow[key].parentWindow()) { continue }
  1116.     this._nameWindow[key].open();
  1117.   };
  1118. };
  1119. //=============================================================================
  1120. // ☆ Window_Message ネームウィンドウのクローズ
  1121. //=============================================================================
  1122. var A1PopupMessageWithNameWindowWM_CloseNameWindow = Window_Message.prototype.CloseNameWindow;
  1123. Window_Message.prototype.CloseNameWindow = function() {
  1124.   if($gameSystem.usePopupMessage() !== true){
  1125.     return A1PopupMessageWithNameWindowWM_CloseNameWindow.apply(this);
  1126.   }
  1127.   for(var key in this._nameWindow){
  1128.     if(this._nameWindow[key].parentWindow()){ continue }
  1129.     this._nameWindow[key].close();
  1130.   }
  1131. };
  1132. //=============================================================================
  1133. // ☆ Window_Message ネームウィンドウの表示
  1134. //=============================================================================
  1135. var A1PopupMessageWithNameWindowWM_ShowNameWindow = Window_Message.prototype.ShowNameWindow;
  1136. Window_Message.prototype.ShowNameWindow = function(LinkName) {
  1137.   if($gameSystem.usePopupMessage() !== true){
  1138.     return A1PopupMessageWithNameWindowWM_ShowNameWindow.apply(this, arguments);
  1139.   }
  1140.   for(var key in this._nameWindow){
  1141.     if(this._nameWindow[key].parentWindow()){ continue }
  1142.     this._nameWindow[key].visible = false;
  1143.   }
  1144.   if(LinkName in this._nameWindow){ this._nameWindow[LinkName].visible = true  }
  1145.   else{ this.CreateNameWindow(LinkName) }
  1146. };
  1147. //=============================================================================
  1148. // ☆ Window_Message 吹き出しメッセージの強制クローズ
  1149. //=============================================================================
  1150. var A1PopupMessageWithNameWindowWM_forceClosePopup = Window_Message.prototype.forceClosePopup;
  1151. Window_Message.prototype.forceClosePopup = function() {
  1152.   for(var key in this._popupWindows){ this._popupWindows[key].setLinkNameWindow(null) }
  1153.   for(var key in this._nameWindow)  {
  1154.     this._nameWindow[key].setParentWindow(null);
  1155.     this._nameWindow[key].openness = 0;
  1156.   }
  1157.   var ret = A1PopupMessageWithNameWindowWM_forceClosePopup.apply(this);
  1158.   return ret;
  1159. };
  1160. //=============================================================================
  1161. // ☆ Window_Message フレーム更新
  1162. //=============================================================================
  1163. var A1PopupMessageWithNameWindowWM_update = Window_Message.prototype.update;
  1164. Window_Message.prototype.update = function() {
  1165.   var ret = A1PopupMessageWithNameWindowWM_update.apply(this);
  1166.   if($gameTemp.closePopupName().length > 0){ this.closePopupName() }
  1167.   return ret;
  1168. };
  1169. //=============================================================================
  1170. // ○ Window_Message 吹き出しメッセージのクローズ [名前指定]
  1171. //=============================================================================
  1172. Window_Message.prototype.closePopupName = function() {
  1173.   var list = $gameTemp.closePopupName();
  1174.   for(var i = 0; i < list.length; i++){
  1175.     var linkFace = this._linkFaceName;
  1176.     for(var key in linkFace){
  1177.       if(linkFace[key] !== list[i]){ continue }
  1178.       var linkEvent = this._linkEvent;
  1179.       for(eventID in linkEvent){
  1180.         var result = A1Common.SplitArgs(key, [], TO_INT);
  1181.         if(JSON.stringify(linkEvent[eventID]) === JSON.stringify(result[0])){ this.closePopup(eventID) }
  1182.       }
  1183.         }
  1184.   }
  1185.   $gameTemp.setClosePopupName(null);
  1186. };
  1187. //=============================================================================
  1188. // ☆ Window_Message 吹き出しメッセージのクローズ
  1189. //=============================================================================
  1190. var A1PopupMessageWithNameWindowWM_closePopup = Window_Message.prototype.closePopup;
  1191. Window_Message.prototype.closePopup = function(id, remove = false) {
  1192.   if(remove === true){
  1193.     var popupWindow = this._popupWindows[id];
  1194.     if(popupWindow){
  1195.       var nameWindow = popupWindow.linkNameWindow();
  1196.       if(nameWindow){
  1197.         nameWindow.setParentWindow(null);
  1198.           nameWindow.openness = 0;
  1199.       }
  1200.       popupWindow.setLinkNameWindow(null);
  1201.     }
  1202.   }
  1203.   var ret = A1PopupMessageWithNameWindowWM_closePopup.apply(this, arguments);
  1204.   return ret;
  1205. };
  1206. //=============================================================================
  1207. // ○ Game_Temp 吹き出しメッセージクローズ名称の取得
  1208. //=============================================================================
  1209. Game_Temp.prototype.closePopupName = function() {
  1210.   return this._closePopupName;
  1211. };
  1212. //=============================================================================
  1213. // ○ Game_Temp 吹き出しメッセージクローズ名称の設定
  1214. //=============================================================================
  1215. Game_Temp.prototype.setClosePopupName = function(value) {
  1216.   this.addClosePopup(value, this._closePopupName);
  1217. };
  1218. //=============================================================================
  1219. // ☆ Game_Interpreter プラグインコマンド [吹き出しクローズ]
  1220. //=============================================================================
  1221. var A1PopupMessageWithNameWindowGI_A1_ClosePopupMessage = Game_Interpreter.A1_ClosePopupMessage;
  1222. Game_Interpreter.A1_ClosePopupMessage = function(args) {
  1223.   var ret = A1PopupMessageWithNameWindowGI_A1_ClosePopupMessage.apply(this, arguments);
  1224.   if(args[0] === "名前") { $gameTemp.setClosePopupName(args[1]) }
  1225.   return ret;
  1226. };
  1227. //=============================================================================
  1228. // ■ ネームウィンドウ使用時の処理 ここまで
  1229. //=============================================================================
  1230. }
  1231. })(this);
  1232. }




必要ファイル:Window_Popup.png(MV版)


必要素材
放入 /img/system  底下

----------------------------------------
插件命令 使用
  1. 吹き出しメッセージ on
复制代码

沒有反應

指定事件
  1. 吹き出しメッセージ eventID
复制代码

ID輸入之後也是沒有反應

所以想請問一下
這個插件腳本要怎麼使用

----------------------------------------
另外
同一個作者的
對話名稱顯示插件
可以跟氣泡對話況併行使用
也麻煩講解一下使用方法

網址
http://a1tktk.web.fc2.com/mv_plugin_page/name_window.html

JAVASCRIPT 代码复制下载
  1. //=============================================================================
  2. // A1NameWindow.js
  3. //=============================================================================
  4. /*:
  5.  * @plugindesc メッセージウィンドウにネームウィンドウを表示します。
  6.  * @author ツクール工房A1(仮)
  7.  *
  8.  * @help データベース「アクター」の「メモ」及びプラグインコマンドで表示名を設定します。
  9.  *
  10.  * 必要プラグイン
  11.  *   ツクール工房A1(仮)共通スクリプト Ver1.10 以上
  12.  *
  13.  * データベース「アクター」の「メモ」に記載
  14.  *   <顔グラフィック FaceName>
  15.  *   <顔グラフィック FaceName,FaceIndex,FaceIndex,FaceIndex...>
  16.  *
  17.  *   <顔グラフィック FaceName>
  18.  *    顔グラフィックとアクター名を紐づけます。
  19.  *    FaceName で指定した顔グラフィックファイル全てに同じ表示名を適用します。
  20.  *
  21.  *   <顔グラフィック FaceName,FaceIndex,,FaceIndex,FaceIndex...>
  22.  *    顔グラフィックとアクター名を紐づけます。
  23.  *    FaceName で指定した顔グラフィックファイルの内
  24.  *    続けて列挙する FaceIndex を表示名に適用します。
  25.  *
  26.  * プラグインコマンド:
  27.  *   ネームウィンドウ on|off
  28.  *   ネームウィンドウ 表示名
  29.  *   顔グラフィック登録 表示名 FaceName
  30.  *   顔グラフィック登録 表示名 FaceName,FaceIndex,FaceIndex,FaceIndex...
  31.  *   ネームウィンドウ非表示登録 表示名
  32.  *   ネームウィンドウ非表示登録 表示名
  33.  *
  34.  *   顔グラフィック解除 FaceName
  35.  *   顔グラフィック解除 FaceName,FaceIndex,FaceIndex,FaceIndex...
  36.  *
  37.  *   ネームウィンドウ on|off
  38.  *    ネームウィンドウ表示の on off を切り替えます。
  39.  *
  40.  *   ネームウィンドウ 表示名
  41.  *    次のメッセージの際に、表示名でネームウィンドウを表示します。
  42.  *
  43.  *   顔グラフィック登録 表示名 FaceName
  44.  *    顔グラフィックと表示名を紐づけます。
  45.  *    FaceName で指定した顔グラフィックファイル全てに同じ表示名を適用します。
  46.  *
  47.  *   顔グラフィック登録 表示名 FaceName,FaceIndex,FaceIndex,FaceIndex...
  48.  *    顔グラフィックと表示名を紐づけます。
  49.  *    FaceName で指定した顔グラフィックファイルの内
  50.  *    続けて列挙する FaceIndex を表示名に適用します。
  51.  *
  52.  *   顔グラフィック解除 FaceName
  53.  *    「顔グラフィック登録 表示名 FaceName」にて登録した紐づけを解除します。
  54.  *
  55.  *   顔グラフィック解除 表示名 FaceName,FaceIndex,FaceIndex,FaceIndex...
  56.  *    顔グラフィックと表示名の紐づけを解除します。。
  57.  *    FaceName で指定した顔グラフィックファイルの内
  58.  *    続けて列挙する FaceIndex の表示名を解除します。
  59.  *    「顔グラフィック登録 表示名 FaceName」にて登録した紐づけは解除できません。
  60.  *
  61.  *   ネームウィンドウ非表示登録 表示名
  62.  *    表示名 で指定したネームウィンドウを表示させなくします。
  63.  *
  64.  *   ネームウィンドウ非表示解除 表示名
  65.  *    表示名 で指定したネームウィンドウの非表示登録を解除します。
  66.  *
  67.  * 「登録用コモンイベント番号」に設定したコモンイベントに
  68.  *  上記プラグインコマンドを記載することで、ゲーム起動時に顔グラフィック登録します。
  69.  *
  70.  *  データベース「アクター」の「メモ」やプラグインコマンドにて登録していないアクターは
  71.  *  データベース「アクター」で設定しているFaceName FaceIndexにてアクター名を紐づけます。
  72.  *
  73.  * @param 登録用コモンイベント番号
  74.  * @desc 顔グラフィック登録用のコモンイベント番号
  75.  * デフォルト: 0
  76.  * @default 0
  77.  *
  78.  * @param フォント名
  79.  * @desc ネームウィンドウのフォント名
  80.  * デフォルト: GameFont
  81.  * @default GameFont
  82.  *
  83.  * @param フォントサイズ
  84.  * @desc ネームウィンドウのフォントサイズ
  85.  * デフォルト: 28
  86.  * @default 28
  87.  *
  88.  */
  89. //=============================================================================
  90. // 更新履歴  2020/06/28 Ver1.00 リリース
  91. //           2020/06/29 Ver1.01 ウィンドウ表示位置に対応
  92. //           2020/06/29 Ver1.10 プラグインコマンド「ネームウィンドウ非表示登録」追加
  93. //           2020/06/29 Ver1.10 プラグインコマンド「ネームウィンドウ非表示解除」追加
  94. //           2020/06/29 Ver1.10 吹き出しメッセージ対応
  95. //=============================================================================
  96. // ■ バージョン定義
  97. //=============================================================================
  98. $A1PlugInImpoted["ネームウィンドウ"] = 1.10;
  99. //=============================================================================
  100. // ■ バージョンチェック
  101. //=============================================================================
  102. var common = A1Common.VersionCheck("ネームウィンドウ", 1.10);
  103. if (common){
  104. //=============================================================================
  105. // ■ プラグイン設定値
  106. //=============================================================================
  107. A1PlugInParams.NameWindow = {};
  108. A1PlugInParams.NameWindow.Parameters = PluginManager.parameters('A1NameWindow');
  109. A1PlugInParams.NameWindow.RegisterCommonEventID = Number(A1PlugInParams.NameWindow.Parameters["登録用コモンイベント番号"]) || 0;
  110. A1PlugInParams.NameWindow.FontFace = String(A1PlugInParams.NameWindow.Parameters["フォント名"])     || "GameFont";
  111. A1PlugInParams.NameWindow.FontSize = Number(A1PlugInParams.NameWindow.Parameters["フォントサイズ"]) || 28;
  112. //=============================================================================
  113. // ■ グローバル変数定義
  114. //=============================================================================
  115. var $dataFaceLink = null;
  116. //=============================================================================
  117. // ■ DataFaceLink
  118. //=============================================================================
  119. function DataFaceLink() {
  120.   this.initialize.apply(this, arguments);
  121. };
  122. //=============================================================================
  123. // ○ DataFaceLink オブジェクト初期化
  124. //=============================================================================
  125. DataFaceLink.prototype.initialize = function() {
  126.   this._linkFace  = {};
  127.   this._linkIndex = -1;
  128.   this.SearchLinkActor();
  129.   this.SearchLinkRegister();
  130. };
  131. //=============================================================================
  132. // ○ DataFaceLink 顔グラフィックのリンク先を探す [アクター]
  133. //=============================================================================
  134. DataFaceLink.prototype.SearchLinkActor = function() {
  135.   for(var i = 1; i < $dataActors.length; i++){
  136.     var key;
  137.     var note_data  = A1Common.ReadNote("顔グラフィック", $dataActors[i].note, TO_INT);
  138.     var actor_name = $dataActors[i].name;
  139.     if(note_data === false){
  140.       key = [$dataActors[i].faceName, $dataActors[i].faceIndex];
  141.       this.AddLink(key, actor_name);
  142.         }
  143.     else{
  144.       this.AddLinkFromNote(note_data, actor_name);
  145.         }
  146.   }
  147. };
  148. //=============================================================================
  149. // ○ DataFaceLink 顔グラフィックのリンク先を探す [レジスター]
  150. //=============================================================================
  151. DataFaceLink.prototype.SearchLinkRegister = function() {
  152.   var commonEventID = A1PlugInParams.NameWindow.RegisterCommonEventID;
  153.   if(commonEventID === 0){ return false }
  154.   var commonEvent = $dataCommonEvents[commonEventID];
  155.   var list = commonEvent.list;
  156.   for(var i = 0; i < list.length; i++){
  157.     var line = list[i];
  158.     if (line.code !== 356){ continue };
  159.     var params = line.parameters;
  160.     var args = params[0].split(" ");
  161.     var command = args.shift();
  162.     if (command !== "顔グラフィック登録") { continue };
  163.     var result_args = A1Common.SplitArgs(args[1], [], TO_INT);
  164.     this.AddLinkFromNote(result_args[0], args[0]);
  165.   }
  166. };
  167. //=============================================================================
  168. // ○ DataFaceLink 顔グラフィックのリンク先を追加する [イベントから]
  169. //=============================================================================
  170. DataFaceLink.prototype.AddLinkFromEvent = function(args, name) {
  171.   this.AddLinkFromNote(args, name);
  172. };
  173. //=============================================================================
  174. // ○ DataFaceLink 顔グラフィックのリンク先を追加する [メモから]
  175. //=============================================================================
  176. DataFaceLink.prototype.AddLinkFromNote = function(note_data, actor_name, remove = false) {
  177.   if(Array.isArray(note_data[0])){
  178.     for(var i = 0; i < note_data.length; i++){
  179.       this.AddLinkFromNote(note_data[i], actor_name);
  180.         }
  181.   }
  182.   else{
  183.     if(Array.isArray(note_data)){
  184.       var face_name = note_data.shift();
  185.       for(var i = 0; i < note_data.length; i++){
  186.         var key = [face_name, note_data[i]];
  187.         if(remove === false) { this.AddLink(key, actor_name) };
  188.         if(remove === true)  { this.RemoveLink(key) };
  189.       }
  190.     }
  191.     else {
  192.       if(remove === false) { this.AddLink(note_data, actor_name) };
  193.       if(remove === true)  { this.RemoveLink(note_data) };
  194.         }
  195.   }
  196. };
  197. //=============================================================================
  198. // ○ DataFaceLink 顔グラフィックのリンク先を追加する
  199. //=============================================================================
  200. DataFaceLink.prototype.AddLink = function(key, actor_name) {
  201.   if(this._linkFace[key] === void 0){ this._linkFace[key] = actor_name };
  202. };
  203. //=============================================================================
  204. // ○ DataFaceLink 顔グラフィックのリンク先を解除する
  205. //=============================================================================
  206. DataFaceLink.prototype.RemoveLink = function(key) {
  207.   if(this._linkFace[key] !== void 0){ delete this._linkFace[key] };
  208. };
  209. //=============================================================================
  210. // ○ DataFaceLink 顔グラフィックのリンク先を解除する [イベントから]
  211. //=============================================================================
  212. DataFaceLink.prototype.RemoveLinkFromEvent = function(args) {
  213.   this.AddLinkFromNote(args, null, true);
  214. };
  215. //=============================================================================
  216. // ○ 顔グラフィックのリンク名称
  217. //=============================================================================
  218. DataFaceLink.prototype.LinkName = function(key) {
  219.   return this._linkFace[key];
  220. };
  221. //=============================================================================
  222. // ■ Window_FaceName
  223. //=============================================================================
  224. function Window_FaceName() {
  225.   this.initialize.apply(this, arguments);
  226. };
  227. //=============================================================================
  228. // ○ Window_FaceName 継承元設定
  229. //=============================================================================
  230. Window_FaceName.prototype = Object.create(Window_Base.prototype);
  231. Window_FaceName.prototype.constructor = Window_FaceName;
  232. //=============================================================================
  233. // ○ Window_FaceName オブジェクト初期化
  234. //=============================================================================
  235. Window_FaceName.prototype.initialize = function(FaceName, x, y) {
  236.   this._faceName    = FaceName;
  237.   this._splite      = this.CreateTextSplite(FaceName);
  238.   this._nameWidth   = this._splite.width;
  239.   this._nameHeight  = this._splite.height;
  240.   var width  = this.windowWidth();
  241.   var height = this.windowHeight();
  242.   this._splite.x    = (width - this._splite.width) / 2
  243.   Window_Base.prototype.initialize.call(this, x, y, width, height);
  244.   this.addChild(this._splite);
  245.   this.openness = 0;
  246.   this._splite.opacity = 0;
  247. };
  248. //=============================================================================
  249. // ○ Window_FaceName 名前のスプライトを作成する
  250. //=============================================================================
  251. Window_FaceName.prototype.CreateTextSplite = function(FaceName) {
  252.   var FontFace = A1PlugInParams.NameWindow.FontFace;
  253.   var FontSize = A1PlugInParams.NameWindow.FontSize;
  254.   var height   = this.lineHeight();
  255.   return A1Common.CreateTextSplite(FaceName, FontFace, FontSize, height, "center");
  256. };
  257. //=============================================================================
  258. // ○ Window_FaceName ウィンドウの幅
  259. //=============================================================================
  260. Window_FaceName.prototype.windowWidth = function() {
  261.     return this._nameWidth + 16;
  262. };
  263. //=============================================================================
  264. // ○ Window_FaceName ウィンドウの高さ
  265. //=============================================================================
  266. Window_FaceName.prototype.windowHeight = function() {
  267.     return this._nameHeight;
  268. };
  269. //=============================================================================
  270. // ○ Window_FaceName マスク用の矩形調整
  271. //=============================================================================
  272. Window_FaceName.prototype.maskRect = function(rect) {
  273.   rect.width  = 0;
  274.   rect.height = 0;
  275. };
  276. //=============================================================================
  277. // ○ Window_FaceName フレーム更新
  278. //=============================================================================
  279. Window_FaceName.prototype.update = function() {
  280.   Window_Base.prototype.update.call(this);
  281.   this._splite.opacity = this.openness;
  282. };
  283. //=============================================================================
  284. // ○ Window_FaceName ウィンドウのオープン
  285. //=============================================================================
  286. Window_FaceName.prototype.open = function() {
  287.   var result = $gameSystem.hiddenNameWindow().find(item => item === this._faceName);
  288.   if(result === this._faceName){ this.close() }
  289.   else{ Window_Base.prototype.open.call(this) }
  290. };
  291. //=============================================================================
  292. // ■ function(_global)
  293. //=============================================================================
  294. (function(_global) {
  295. //=============================================================================
  296. // ☆ DataManager ゲームオブジェクトの作成
  297. //=============================================================================
  298. var A1NameWindowDM_createGameObjects = DataManager.createGameObjects;
  299. DataManager.createGameObjects = function() {
  300.   var ret = A1NameWindowDM_createGameObjects.apply(this);
  301.   if($dataFaceLink === null){ $dataFaceLink = new DataFaceLink() }
  302.   return ret;
  303. };
  304. //=============================================================================
  305. // ☆ Window_Message メンバ変数の初期化
  306. //=============================================================================
  307. var A1NameWindowWM_initMembers = Window_Message.prototype.initMembers;
  308. Window_Message.prototype.initMembers = function() {
  309.   this.initNameWindowMembers();
  310.   var ret = A1NameWindowWM_initMembers.apply(this);
  311.   return ret;
  312. };
  313. //=============================================================================
  314. // ○ Window_Message メンバ変数の初期化 [ネームウィンドウ]
  315. //=============================================================================
  316. Window_Message.prototype.initNameWindowMembers = function() {
  317.   this._forwardLinkName  = null;
  318.   this._nameWindow       = {};
  319. };
  320. //=============================================================================
  321. // ☆ Window_Message 新しいメッセージの作成
  322. //=============================================================================
  323. var A1NameWindowWM_newPage = Window_Message.prototype.newPage;
  324. Window_Message.prototype.newPage = function(textState) {
  325.   var ret = A1NameWindowWM_newPage.apply(this, arguments);
  326.   var LinkName = this.FaceLinkName();
  327.   if(LinkName){
  328.     if(LinkName !== this._forwardLinkName){ this.ShowNameWindow(LinkName) }
  329.     this._forwardLinkName = LinkName;
  330.   }
  331.   else{
  332.     this.CloseNameWindow();
  333.   }
  334.   return ret;
  335. };
  336. //=============================================================================
  337. // ○ Window_Message ネームウィンドウのオープン
  338. //=============================================================================
  339. Window_Message.prototype.OpenNameWindow = function() {
  340.   if($gameSystem.ShowNameWindow() === false){ return false }
  341.   for(var key in this._nameWindow){ this._nameWindow[key].open() };
  342. };
  343. //=============================================================================
  344. // ○ Window_Message ネームウィンドウのクローズ
  345. //=============================================================================
  346. Window_Message.prototype.CloseNameWindow = function() {
  347.   for(var key in this._nameWindow){ this._nameWindow[key].close() }
  348. };
  349. //=============================================================================
  350. // ○ Window_Message ネームウィンドウの強制クローズ
  351. //=============================================================================
  352. Window_Message.prototype.forceCloseNameWindow = function() {
  353.   for(var key in this._nameWindow){ this._nameWindow[key].close() }
  354. };
  355. //=============================================================================
  356. // ○ Window_Message ネームウィンドウの表示
  357. //=============================================================================
  358. Window_Message.prototype.ShowNameWindow = function(LinkName) {
  359.   for(var key in this._nameWindow){ this._nameWindow[key].visible      = false }
  360.   if(LinkName in this._nameWindow){ this._nameWindow[LinkName].visible = true  }
  361.   else{ this.CreateNameWindow(LinkName) }
  362. };
  363. //=============================================================================
  364. // ○ Window_Message ネームウィンドウの作成
  365. //=============================================================================
  366. Window_Message.prototype.CreateNameWindow = function(LinkName) {
  367.   var x = this.nameWindowX();
  368.   var y = this.nameWindowY();
  369.   this._nameWindow[LinkName] = new Window_FaceName(LinkName, x, y);
  370.   this.addChild(this._nameWindow[LinkName]);
  371.   SceneManager.sceneAddWindow(this._nameWindow[LinkName]);
  372. };
  373. //=============================================================================
  374. // ○ Window_Message 顔グラフィックとリンクしている名前の取得
  375. //=============================================================================
  376. Window_Message.prototype.FaceLinkName = function() {
  377.   var ret;
  378.   var tmpName = $gameTemp.TempShowName();
  379.   if(tmpName){
  380.     ret = tmpName;
  381.   }
  382.   else {
  383.     var key = [$gameMessage.faceName()];
  384.     ret = this.FindLinkName(key);
  385.     if(ret === void 0){
  386.       var key = [$gameMessage.faceName(), $gameMessage.faceIndex()];
  387.       ret = this.FindLinkName(key);
  388.         }
  389.   }
  390.   return ret;
  391. };
  392. //=============================================================================
  393. // ○ Window_Message 顔グラフィックとリンクしている名前の検索
  394. //=============================================================================
  395. Window_Message.prototype.FindLinkName = function(key) {
  396.   return $dataFaceLink.LinkName(key);
  397. };
  398. //=============================================================================
  399. // ☆ Window_Message メッセージの終端
  400. //=============================================================================
  401. var A1NameWindowWM_terminateMessage = Window_Message.prototype.terminateMessage;
  402. Window_Message.prototype.terminateMessage = function() {
  403.   var ret = A1NameWindowWM_terminateMessage.apply(this);
  404.   $gameTemp.setTempShowName(null);
  405.   return ret;
  406. };
  407. //=============================================================================
  408. // ○ Window_Message ウィンドウのオープン
  409. //=============================================================================
  410. Window_Message.prototype.open = function() {
  411.   Window_Base.prototype.open.call(this);
  412.   var LinkName = this.FaceLinkName();
  413.   if(LinkName){ this.OpenNameWindow() };
  414. };
  415. //=============================================================================
  416. // ○ Window_Message ウィンドウのクローズ
  417. //=============================================================================
  418. Window_Message.prototype.close = function() {
  419.   Window_Base.prototype.close.call(this);
  420.   this.CloseNameWindow();
  421. };
  422. //=============================================================================
  423. // ☆ Window_Message フレーム更新
  424. //=============================================================================
  425. var A1NameWindowWM_update = Window_Message.prototype.update;
  426. Window_Message.prototype.update = function() {
  427.   var ret = A1NameWindowWM_update.apply(this);
  428.   for(var key in this._nameWindow){ this.moveNameWindow(this._nameWindow[key], key) }
  429.   if($gameSystem.ShowNameWindow() === false){
  430.     this.forceCloseNameWindow();
  431.     $gameSystem.setShowNameWindow(null);
  432.   }
  433.   return ret;
  434. };
  435. //=============================================================================
  436. // ○ Window_Message ネームウィンドウの移動
  437. //=============================================================================
  438. Window_Message.prototype.moveNameWindow = function(window, key) {
  439.   window.move(this.nameWindowX(key), this.nameWindowY(key), window.width, window.height)
  440. };
  441. //=============================================================================
  442. // ○ Window_Message ネームウィンドウのx座標
  443. //=============================================================================
  444. Window_Message.prototype.nameWindowX = function(key) {
  445.   return this.x + 72;
  446. };
  447. //=============================================================================
  448. // ○ Window_Message ネームウィンドウのy座標
  449. //=============================================================================
  450. Window_Message.prototype.nameWindowY = function(key) {
  451.   var y;
  452.   if(this._positionType === 0){ y = this.y + this.height - this.lineHeight() / 2}
  453.   if(this._positionType > 0)  { y = this.y - this.lineHeight() / 2}
  454.   return y;
  455. };
  456. //=============================================================================
  457. // ☆ Game_System オブジェクト初期化
  458. //=============================================================================
  459. var A1_NemeWindowGS_initialize = Game_System.prototype.initialize;
  460. Game_System.prototype.initialize = function() {
  461.   var ret = A1_NemeWindowGS_initialize.apply(this);
  462.   this._showNameWindow   = null;
  463.   this._hiddenNameWindow = [];
  464.   return ret;
  465. };
  466. //=============================================================================
  467. // ○ Game_System ネームウィンドウ表示状態の取得
  468. //=============================================================================
  469. Game_System.prototype.ShowNameWindow = function() {
  470.   return this._showNameWindow;
  471. };
  472. //=============================================================================
  473. // ○ Game_System ネームウィンドウ表示状態の設定
  474. //=============================================================================
  475. Game_System.prototype.setShowNameWindow = function(value) {
  476.   this._showNameWindow = value;
  477. };
  478. //=============================================================================
  479. // ○ Game_System ネームウィンドウ非表示の取得
  480. //=============================================================================
  481. Game_System.prototype.hiddenNameWindow = function() {
  482.   return this._hiddenNameWindow;
  483. };
  484. //=============================================================================
  485. // ○ Game_System ネームウィンドウ非表示登録
  486. //=============================================================================
  487. Game_System.prototype.addHiddenNameWindow = function(name) {
  488.   this._hiddenNameWindow.push(name);
  489. };
  490. //=============================================================================
  491. // ○ Game_System ネームウィンドウ非表示解除
  492. //=============================================================================
  493. Game_System.prototype.removeHiddenNameWindow = function(name) {
  494.   if(this._hiddenNameWindow(name) !== void 0){ delete this._hiddenNameWindow(name) }
  495. };
  496. //=============================================================================
  497. // ☆ Game_Temp オブジェクト初期化
  498. //=============================================================================
  499. var A1_NemeWindowGT_initialize = Game_Temp.prototype.initialize;
  500. Game_Temp.prototype.initialize = function() {
  501.   var ret = A1_NemeWindowGT_initialize.apply(this);
  502.   this._tempShowName  = null;
  503.   return ret;
  504. };
  505. //=============================================================================
  506. // ○ Game_Temp ネームウィンドウ一時表示名の取得
  507. //=============================================================================
  508. Game_Temp.prototype.TempShowName = function() {
  509.   return this._tempShowName;
  510. };
  511. //=============================================================================
  512. // ○ Game_Temp ネームウィンドウ一時表示名の設定
  513. //=============================================================================
  514. Game_Temp.prototype.setTempShowName = function(value) {
  515.   this._tempShowName = value;
  516. };
  517. //=============================================================================
  518. // ☆ A1Common プラグインコマンドの定義
  519. //=============================================================================
  520. var A1_NemeWindow_define_command = A1Common.prototype.define_command;
  521. A1Common.prototype.define_command = function() {
  522.   var command = A1_NemeWindow_define_command.apply(this);
  523.   command["ネームウィンドウ"]           = Game_Interpreter.A1_NameWindow.bind(this);
  524.   command["ネームウィンドウ非表示登録"] = Game_Interpreter.A1_AddHiddenNameWindow.bind(this);
  525.   command["ネームウィンドウ非表示解除"] = Game_Interpreter.A1_RemoveHiddenNameWindow.bind(this);
  526.   command["顔グラフィック登録"]         = Game_Interpreter.A1_RegisterNameLink.bind(this);
  527.   command["顔グラフィック解除"]         = Game_Interpreter.A1_RemoveNameLink.bind(this);
  528.   return command;
  529. };
  530. //=============================================================================
  531. // ○ Game_Interpreter プラグインコマンド [ネームウィンドウ]
  532. //=============================================================================
  533. Game_Interpreter.A1_NameWindow = function(args) {
  534.   if     (args[0] === "on" )    { $gameSystem.setShowNameWindow(true)  }
  535.   else if(args[0] === "off")    { $gameSystem.setShowNameWindow(false) }
  536.   else{ $gameTemp.setTempShowName(args[0]) }
  537.   return true;
  538. };
  539. //=============================================================================
  540. // ○ Game_Interpreter プラグインコマンド [ネームウィンドウ非表示登録]
  541. //=============================================================================
  542. Game_Interpreter.A1_AddHiddenNameWindow = function(args) {
  543.   $gameSystem.addHiddenNameWindow(args[0]);
  544.   return true;
  545. };
  546. //=============================================================================
  547. // ○ Game_Interpreter プラグインコマンド [ネームウィンドウ非表示解除]
  548. //=============================================================================
  549. Game_Interpreter.A1_RemoveHiddenNameWindow = function(args) {
  550.   $gameSystem.removeHiddenNameWindow(args[0]);
  551.   return true;
  552. };
  553. //=============================================================================
  554. // ○ Game_Interpreter プラグインコマンド [顔グラフィック登録]
  555. //=============================================================================
  556. Game_Interpreter.A1_RegisterNameLink = function(args) {
  557.   $dataFaceLink.AddLinkFromEvent(args[1], args[0]);
  558.   return true;
  559. };
  560. //=============================================================================
  561. // ○ Game_Interpreter プラグインコマンド [顔グラフィック解除]
  562. //=============================================================================
  563. Game_Interpreter.A1_RemoveNameLink = function(args) {
  564.   $dataFaceLink.RemoveLinkFromEvent(args[0]);
  565.   return true;
  566. };
  567. })(this);
  568. }



以上
還請幫忙解惑
如果可以 希望能有個DEMO 讓我參考參考
非常感謝

Lv5.捕梦者

梦石
0
星屑
22963
在线时间
8639 小时
注册时间
2011-12-31
帖子
3367
2
发表于 2023-1-9 20:55:39 | 只看该作者
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
2991
在线时间
646 小时
注册时间
2009-1-21
帖子
273
3
 楼主| 发表于 2023-1-9 22:07:37 | 只看该作者
本帖最后由 御之嵐 于 2023-1-30 11:08 编辑
tseyik 发表于 2023-1-9 20:55
[fold]//=============================================================================
// A1NameWind ...



先感謝你的翻譯
插件說明我大致上看得懂
但是用起來就是沒動作吶

像是基本的插件命令
  1. * プラグインコマンド:
  2. *   吹き出しメッセージ on|off
  3. *     吹き出しメッセージの使用状態を切り替えます。
  4. *
  5. *   吹き出しメッセージ eventID
  6. *     続くメッセージを eventID で指定したイベントの吹き出しとして表示します。
  7. *
  8. *   吹き出しクローズ
  9. *     現在表示している吹き出しメッセージを全てクローズします。
复制代码


這個區塊使用起來就沒動作
是哪裡沒設定嗎?
插件那邊我是都沒去動
數值都是 預設  0

至於下面可以一起併行使用的 對話名稱顯示插件
我也只有
  1. * プラグインコマンド:
  2. *   ネームウィンドウ 表示名
复制代码


這段插件命令有動作
其他也是無法動作
研究整下午
目前還是無解

回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
22963
在线时间
8639 小时
注册时间
2011-12-31
帖子
3367
4
发表于 2023-1-10 23:09:16 | 只看该作者



回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
2991
在线时间
646 小时
注册时间
2009-1-21
帖子
273
5
 楼主| 发表于 2023-1-11 12:57:58 | 只看该作者

非常感謝
原來前置作業的登錄都還要弄
想說直接就能用ON OFF 或者 指定事件ID使用的說
效果是有出來了,只是有夠難用
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-17 18:57

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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