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

Project1

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

[有事请教] 求帮我改一个地图合并插件里面的一个东西

[复制链接]

Lv3.寻梦者

梦石
0
星屑
1206
在线时间
561 小时
注册时间
2014-11-30
帖子
155
跳转到指定楼层
1
发表于 2018-5-25 23:54:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 309988769 于 2018-5-25 23:57 编辑

这个地图合并插件里面设置了滚动类型·地图平铺·强调外观步数·BGM自动演奏·BGS自动演奏*战斗背景设置- 禁止冲刺设置·远景设置都同步于第一张地图,如果我是用双远景插件的话,就成了所有合并在一起的大地图全部是显示第一个小地图的远景了,能不能帮我改一下,远景设置不同步第一个地图,谢谢大佬
JAVASCRIPT 代码复制
  1. /=============================================================================
  2. // 複数のマップを繋げて1つの大きなマップにするプラグイン
  3. // FTKR_ConnectingMapGenerator.js
  4. // プラグインNo : 83
  5. // 作成者     : フトコロ
  6. // 作成日     : 2018/04/22
  7. // 最終更新日   : 2018/04/28
  8. // バージョン   : v1.2.0
  9. //=============================================================================
  10.  
  11. var Imported = Imported || {};
  12. Imported.FTKR_CMG = true;
  13.  
  14. var FTKR = FTKR || {};
  15. FTKR.CMG = FTKR.CMG || {};
  16.  
  17. //=============================================================================
  18. /*:
  19.  * @plugindesc v1.2.0 将多个地图连接成一张大地图的插件
  20.  * @author フトコロ
  21.  *
  22.  * @param 連結マップの横サイズ
  23.  * @desc 横向连接的地图数量。 你可以在游戏中改变它。
  24.  * @default 2
  25.  * @type number
  26.  * @min 0
  27.  *
  28.  * @param 連結マップの縦サイズ
  29.  * @desc 垂直连接的地图数量。 你可以在游戏中改变它。
  30.  * @default 2
  31.  * @type number
  32.  * @min 0
  33.  *
  34.  * @help
  35.  *-----------------------------------------------------------------------------
  36.  * 概要
  37.  *-----------------------------------------------------------------------------
  38.  * 您可以连接多个地图并将其显示为一张大地图。
  39.  *
  40.   *在合并后的地图中,为每个地图设置的事件也可以单独执行。
  41.   *但是,需要注意,因为连接后事件的ID在映射中发生了变化。
  42.  *
  43.  *
  44.  *-----------------------------------------------------------------------------
  45.  * 設定方法
  46.  *-----------------------------------------------------------------------------
  47.  * 1.将此插件添加到“插件管理器(插件管理)”
  48.   *请。
  49.  *
  50.  *
  51.  *-----------------------------------------------------------------------------
  52.  * 如何连接地图
  53.  *-----------------------------------------------------------------------------
  54.  * 首先,您可以设置垂直和水平连接多少个地图来生成地图。
  55.  *
  56.   *有以下两种设定方法。
  57.   * - 垂直和水平件的初始值由插件参数设置。
  58.   *·执行以下插件命令并为每个位置移动进行设置。
  59.  *
  60.   *插件命令
  61.   * * []不用于实际输入
  62.  *
  63.  * CMG_级联地图大小[水平地图数量] [垂直地图数量]
  64.  * CMG_CONNECTING_MAP_SIZE [cols] [lines]
  65.  *
  66.  *    水平地图数量(cols)
  67.   *:更改要水平连接的地图数量。
  68.   你可以通过指定* \ v [n]来引用变量n的值。
  69.  *
  70.  *    垂直地图数量(线条)
  71.   *:更改垂直链接地图的数量。
  72.   你可以通过指定* \ v [n]来引用变量n的值。
  73.  *
  74.  *
  75.  * 接下来,执行下面的插件命令并指定要连接的地图ID。
  76.   *同时,可以多次输入相同的地图ID。
  77.  * ※[]は実際の入力に使用しません
  78.  *
  79.  *
  80.  * CMG_地图连接[地图1] [地图2] [地图3] [地图4] ...
  81.  * CMG_CONNECTING_MAP [map1] [map2] [map3] [map4] ...
  82.  *
  83.  *    マップ1(map1)
  84.  *         *:指定要在拼接后放置在地图左上角的地图的ID。
  85.   *合并后的地图设置将接管地图1的设置。
  86.   你可以通过指定* \ v [n]来引用变量n的值。
  87.   通过从为随机零件ID n设置的多个映射ID指定* \ R [n]
  88.   *随机选择并设定其值。
  89.  *
  90.  *    地图*(地图*)
  91.   *:根据要连接的地图数量指定地图ID。
  92.   *:4个地图则是2 * 2连接,3*3就需要9个地图。
  93.   你可以通过指定* \ v [n]来引用变量n的值。
  94.   通过从为随机零件ID n设置的多个映射ID指定* \ R [n]
  95.   *随机选择并设定其值。
  96.  *
  97.  * ※关于随机部分ID,
  98.  *
  99.  *
  100.  * 输入示例)连接2 * 2地图时输入
  101.   * CMG_地图连接2 3 4 5
  102.  *  CMG_CONNECTING_MAP 2 3 4 5
  103.  *
  104.  *
  105.  * 输入示例)使用变量连接2 * 1映射时的输入
  106.  *  CMG_マップ連結 \v[1] \v[2]
  107.  *  CMG_CONNECTING_MAP \v[1] \v[2]
  108.  *   ⇒变量ID 1中的值被视为地图1,变量ID 2中的值被视为地图2
  109.   *连接。
  110.  *
  111.  *
  112.  * 在安排地图时,
  113.   *将地图1拖到左上角,从那里到地图2,地图3,...向右。
  114.   *达到水平地图数量的上限时,下降一级,连接地图
  115.   *屏幕的右下角是最后一个地图。
  116.  *
  117.  * 简单的地图放置图像
  118.  *
  119.  * ・1*2の場合
  120.  *    1
  121.  *    2
  122.  *
  123.  * ・2*2の場合   ・3*2の場合
  124.  *    1 2        1 2 3
  125.  *    3 4        4 5 6
  126.  *
  127.  * ・3*3の場合
  128.  *    1 2 3
  129.  *    4 5 6
  130.  *    7 8 9
  131.  *
  132.  *
  133.  * 您也可以通过逐行分割来设置它。
  134.   * 4 * 4随着大小的数量变大,在数据库中很难看到
  135.   *在这里使用是很好的。
  136.  *
  137.  * CMG_地图连结分割[分割ID]地图[地图1] [地图2] [地图3] [地图4] ...
  138.  * CMG_CONNECTING_MAP SPLIT [splitId] MAP [map1] [map2] [map3] [map4] ...
  139.  *
  140.  *    分割ID(splitId)
  141.  *        :指定从0到要连接的地图的行数的值 - 1。
  142.   *:所有行都需要设置。
  143.  *
  144.  *    マップ*(map*)
  145.  *        : 按照要连接的地图的列数指定地图ID。
  146.   *:地图2为垂直/水平2 * 2,地图3为垂直/水平3 * 3。
  147.   你可以通过指定* \ v [n]来引用变量n的值。
  148.   通过从为随机零件ID n设置的多个映射ID指定* \ R [n]
  149.   *随机选择并设定其值。
  150.  *
  151.  *
  152.  * 设置分区数据后,生成它。
  153.  *
  154.  * CMG_マップ連結 生成
  155.  * CMG_CONNECTING_MAP MAKE
  156.  *
  157.  *
  158.  * 输入示例)连接2 * 2地图时输入
  159.  *  CMG_マップ連結 分割 0 マップ 2 3
  160.  *  CMG_マップ連結 分割 1 マップ 4 5
  161.  *  CMG_マップ連結 生成
  162.  *
  163.  *  CMG_CONNECTING_MAP SPLIT 0 MAP 2 3
  164.  *  CMG_CONNECTING_MAP SPLIT 1 MAP 4 5
  165.  *  CMG_CONNECTING_MAP MAKE
  166.  *
  167.  *
  168.  * 设置拼接地图的大小和地图ID进行连接后
  169.   *请执行位置移动事件。
  170.  *
  171.   *如果您选择一个要链接的地图,请在移动地点时设置地图ID和坐标
  172.   *合并后移至该位置。
  173.  *
  174.   *请注意,如果多次链接了相同的地图ID,则表示首次展示位置
  175.   *在地图上移动。
  176.  *
  177.  *
  178.  *-----------------------------------------------------------------------------
  179.  * 从连接的地图移动时
  180.  *-----------------------------------------------------------------------------
  181.  * 移动到一个地方时务必执行以下命令。
  182.  *
  183.  * CMG_マップ連結解除
  184.  * CMG_CLEAR_CONNECTING_MAP
  185.  *
  186.  *
  187.  *-----------------------------------------------------------------------------
  188.  * 拼接地图的条件
  189.  *-----------------------------------------------------------------------------
  190.  * 有必要匹配要连接的地图的宽度和高度。
  191.  *
  192.   *例如,连接2 * 2地图时,
  193.  *
  194.   * 1.使地图1和地图2的高度相同。
  195.   * 2.使地图1和地图3具有相同的宽度。
  196.   * 3.制作地图2和地图4的宽度相同。
  197.   * 4.使地图3和地图4的高度相同。
  198.  *
  199.   *另外,所有地图都必须使用相同的拼贴集。
  200.  *
  201.  *
  202.  *-----------------------------------------------------------------------------
  203.  * 连接后的地图设置
  204.  *-----------------------------------------------------------------------------
  205.  * 合并后的地图设置(* 1)将继承“地图1”所用地图的设置。
  206.  *
  207.   *(* 1)地图设置接管
  208.   *·滚动类型
  209.   *·地图平铺
  210.   *·强调外观步数
  211.   *·BGM自动演奏
  212.   *·BGS自动演奏
  213.   *战斗背景设置
  214.   * - 禁止冲刺设置
  215.   *·远景设置
  216.   *·备忘录的内容
  217.  *
  218.   *例如,与以下命令连接时
  219.   * CMG_地图连接2 3 4 5
  220.   *连接后的地图设置与地图ID 2相同。
  221.  *
  222.  *
  223.   *请注意,以下设置在合并之前和之后发生变化。
  224.  *
  225.   *·遇到
  226.   *·事件ID
  227.  *
  228.  *
  229.  *-----------------------------------------------------------------------------
  230.  * 合并后遇到地图
  231.  *-----------------------------------------------------------------------------
  232.  * 在每个地图中设置拼接后地图的拼接
  233.  *它成为遭遇的综合设置。
  234.  *
  235.  *例如,在拼接前的地图中
  236.  *•敌人组ID 1包含在地图1的整个区域
  237.  * - 地图2的整个区域中的敌人组ID 2
  238.  如果*已设置,则在连接后
  239.  *•敌方组ID 1和敌方组ID 2
  240.  *将开始计数。
  241.  *
  242.  *
  243.  *同样在按地区设置的情况下
  244.  *例如,在拼接前的地图中
  245.  *·地图1的区域1中的敌方组ID 1
  246.  *·敌方组ID 2到地图2的地区1
  247.  *·地图3的区域2中的敌方组ID 3
  248.  如果*已设置,则在连接后
  249.  *•敌方组织ID 1和敌方组织ID 2
  250.  *•链接地图区域2中的敌方组ID 3
  251.  *将开始计数。
  252.  *
  253.  *这也适用于连接前在地图1中为区域2设置的区域
  254.  *连接后,敌人组ID 3将出现。
  255.  *
  256.  *
  257.  *-----------------------------------------------------------------------------
  258.  * 合并后的地图的事件ID
  259.  *-----------------------------------------------------------------------------
  260.  * 可以在下面的脚本来获得合并后的地图的事件ID。
  261.  *
  262.  * $gameMap.cmgEventId(mapId, eventId)
  263.  *    mapId:创建事件的地图的ID(数据库上的地图)
  264.   * eventId:创建事件的地图上的事件ID
  265.  *
  266.  * 输入示例)
  267.  *    $gameMap.cmgEventId(2, 3)
  268.  *
  269.  *
  270.  * 但是,在此活动中,您可以使用this._ eventId获取您的ID。
  271.   *即使合并后,这一点也不会改变。
  272.  *
  273.  *
  274.  *-----------------------------------------------------------------------------
  275.  * 关于随机部件ID
  276.  *-----------------------------------------------------------------------------
  277.  * 通过在设置拼接图时将其设置为\ R [n],我们将其设置为随机部件ID n
  278.   *从多个地图ID中选择一个随机数并设置该值。
  279.  *
  280.   *要设置随机部件ID,请执行以下插件命令
  281.   *可以设置。
  282.  *
  283.  * CMG_ランダムパーツセット [パーツID] マップ [マップID] [マップID] [マップID] ...
  284.  * CMG_SET_RANDOM_PARTS [partsId] MAP [mapId] [mapId] [mapId] ...
  285.  *
  286.  *    パーツID(partsId)
  287.  *        : 0 以上の任意の値を指定します。
  288.  *        : 連結マップのマップIDを設定するときに\R[n]で指定する番号に相当します。
  289.  *
  290.  *    マップID(mapId)
  291.  *        : このセットで選ばれるマップのIDを設定します。
  292.  *        : 設定可能な数に制限はありません。
  293.  *         \v[n] と指定することで変数 n の値を参照できます。
  294.  *
  295.  *
  296.  *-----------------------------------------------------------------------------
  297.  * 本プラグインのライセンスについて(License)
  298.  *-----------------------------------------------------------------------------
  299.  * 本プラグインはMITライセンスのもとで公開しています。
  300.  * This plugin is released under the MIT License.
  301.  *
  302.  * Copyright (c) 2018 Futokoro
  303.  * [url]http://opensource.org/licenses/mit-license.php[/url]
  304.  *
  305.  *
  306.  * プラグイン公開元
  307.  * [url]https://github.com/futokoro/RPGMaker/blob/master/README.md[/url]
  308.  *
  309.  *
  310.  *-----------------------------------------------------------------------------
  311.  * 変更来歴
  312.  *-----------------------------------------------------------------------------
  313.  *
  314.  * v1.2.0 - 2018/04/28 : 不具合修正、機能追加
  315.  *    1. 場所移動先によって、アクターが表示されずゲームが動かなくなる不具合を修正。
  316.  *    2. 連結マップが正しく生成できない場合がある不具合を修正。
  317.  *    3. 連結マップの行ごとに分割して設定する機能を追加
  318.  *    4. ランダムに複数のマップIDから一つを設定する機能を追加。
  319.  *
  320.  * v1.1.1 - 2018/04/27 : ヘルプ修正
  321.  *    1. ヘルプの誤記修正
  322.  *    2. プラグインコマンドに変数を使用できることを追記。
  323.  *
  324.  * v1.1.0 - 2018/04/22 : 仕様変更
  325.  *    1. 連結する縦横のマップの数を設定する機能を追加。4つ以上のマップを連結可能。
  326.  *    2. マップ数の設定機能に合わせて、連結するマップIDを設定する
  327.  *       プラグインコマンドの仕様を変更。
  328.  *
  329.  * v1.0.1 - 2018/04/22 : ヘルプの誤記修正
  330.  *
  331.  * v1.0.0 - 2018/04/22 : 初版作成
  332.  *
  333.  *-----------------------------------------------------------------------------
  334. */
  335. //=============================================================================
  336. var $dataCmgMaps = [];
  337.  
  338. function Game_CmgEvent() {
  339.     this.initialize.apply(this, arguments);
  340. }
  341.  
  342. (function() {
  343.  
  344.     var paramParse = function(obj) {
  345.         return JSON.parse(JSON.stringify(obj, paramReplace));
  346.     }
  347.  
  348.     var paramReplace = function(key, value) {
  349.         try {
  350.             return JSON.parse(value || null);
  351.         } catch (e) {
  352.             return value;
  353.         }
  354.     };
  355.  
  356.     var setArgStr = function(arg) {
  357.         return convertEscapeCharacters(arg);
  358.     };
  359.  
  360.     var setArgNum = function(arg) {
  361.         try {
  362.             return Number(eval(setArgStr(arg)));
  363.         } catch (e) {
  364.             return 0;
  365.         }
  366.     };
  367.  
  368.     var convertEscapeCharacters = function(text) {
  369.         text = text.replace(/\\/g, '\x1b');
  370.         text = text.replace(/\x1b\x1b/g, '\\');
  371.         text = text.replace(/\x1bV\[(\d+)\]/gi, function() {
  372.             return $gameVariables.value(parseInt(arguments[1]));
  373.         }.bind(this));
  374.         text = text.replace(/\x1bV\[(\d+)\]/gi, function() {
  375.             return $gameVariables.value(parseInt(arguments[1]));
  376.         }.bind(this));
  377.         text = text.replace(/\x1bR\[(\d+)\]/gi, function() {
  378.             return parseInt(randomGetArray(FTKR.CMG.rand[parseInt(arguments[1])]));
  379.         }.bind(this));
  380.         return text;
  381.     };
  382.  
  383.     //objのメモ欄から <metacode: x> の値を読み取って返す
  384.     var readObjectMeta = function(obj, metacodes) {
  385.         if (!obj) return false;
  386.         var match = {};
  387.         metacodes.some(function(metacode){
  388.             var metaReg = new RegExp('<' + metacode + ':[ ]*(.+)>', 'i');
  389.             match = metaReg.exec(obj.note);
  390.             return match;
  391.         });
  392.         return match ? match[1] : '';
  393.     };
  394.  
  395.     var randomGetArray = function(args) {
  396.         if (Array.isArray(args)) {
  397.             var arg = args[Math.randomInt(args.length)];
  398.         } else {
  399.             var arg = args;
  400.         }
  401.         return arg
  402.     };
  403.  
  404.     //=============================================================================
  405.     // プラグイン パラメータ
  406.     //=============================================================================
  407.     var parameters = PluginManager.parameters('FTKR_ConnectingMapGenerator');
  408.  
  409.     FTKR.CMG = {
  410.         mapW : paramParse(parameters['連結マップの横サイズ']),
  411.         mapH : paramParse(parameters['連結マップの縦サイズ']),
  412.         rand : [],
  413.     };
  414.  
  415.     //=============================================================================
  416.     // DataManager
  417.     //=============================================================================
  418.     DataManager._mapLoaders = [];
  419.     DataManager._errorUrls = [];
  420.  
  421.     DataManager.loadConnectingMapData = function(mapId, index) {
  422.         if (mapId > 0) {
  423.             var filename = 'Map%1.json'.format(mapId.padZero(3));
  424.             this._mapLoaders[index] = ResourceHandler.createLoader('data/' + filename, this.loadConnectingDataFile.bind(this, '$dataCmgMaps', filename, index));
  425.             this.loadConnectingDataFile('$dataCmgMaps', filename, index);
  426.         } else {
  427.             this.makeEmptyMap();
  428.         }
  429.     };
  430.  
  431.     DataManager.loadConnectingDataFile = function(name, src, index) {
  432.         var xhr = new XMLHttpRequest();
  433.         var url = 'data/' + src;
  434.         xhr.open('GET', url);
  435.         xhr.overrideMimeType('application/json');
  436.         xhr.onload = function() {
  437.             if (xhr.status < 400) {
  438.                 if (!window[name]) window[name] = [];
  439.                 window[name][index] = JSON.parse(xhr.responseText);
  440.                 DataManager.onConnectingLoad(window[name][index]);
  441.             }
  442.         };
  443.         xhr.onerror = this._mapLoaders[index] || function() {
  444.             DataManager._errorUrls[index] = DataManager._errorUrl || url;
  445.         };
  446.         window[name][index] = null;
  447.         xhr.send();
  448.     };
  449.  
  450.     DataManager.onConnectingLoad = function(object) {
  451.         var array;
  452.         this.extractMetadata(object);
  453.         array = object.events;
  454.         if (Array.isArray(array)) {
  455.             for (var i = 0; i < array.length; i++) {
  456.                 var data = array[i];
  457.                 if (data && data.note !== undefined) {
  458.                     this.extractMetadata(data);
  459.                 }
  460.             }
  461.         }
  462.     };
  463.  
  464.     DataManager.checkCmgError = function(index) {
  465.         if (DataManager._errorUrls[index]) {
  466.             throw new Error('Failed to load: ' + DataManager._errorUrls[index]);
  467.         }
  468.     };
  469.  
  470.     DataManager.isConnectingMapsLoaded = function(arr) {
  471.         if (Array.isArray(arr)) {
  472.             return arr.every(function(ar, i){
  473.                 if (!$gamePlayer._connectingMaps[i]) return true;
  474.                 var result = this.isConnectingMapLoaded(i);
  475.                 return result
  476.             },this);
  477.         }
  478.         return false;
  479.     };
  480.  
  481.     DataManager.isConnectingMapLoaded = function(index) {
  482.         this.checkCmgError(index);
  483.         return this.dataMap(index);
  484.     };
  485.  
  486.     DataManager.dataMap = function(cmgMapId) {
  487.         return $dataCmgMaps[cmgMapId];
  488.     };
  489.  
  490.     DataManager.pushMapData = function(data, mapId, index) {
  491.         var dataMap = this.dataMap(mapId);
  492.         if (!!dataMap) {
  493.             var len = dataMap.width;
  494.             var newdata = dataMap.data.slice(index * len, (index + 1) * len);
  495.             Array.prototype.push.apply(data, newdata);
  496.         }
  497.     };
  498.  
  499.     DataManager.cmgMapId = function(mapId) {
  500.         if (!$gamePlayer._connectingMaps) return -1;
  501.         var cmgMapId = -1;
  502.         $gamePlayer._connectingMaps.some(function(cMap, i){
  503.             if (cMap && cMap === mapId) {
  504.                 cmgMapId = i;
  505.                 return true;
  506.             }
  507.         });
  508.         return cmgMapId;
  509.     };
  510.  
  511.     DataManager.cmgMapW = function() {
  512.         return this._cmgMapW || 0;
  513.     };
  514.  
  515.     DataManager.cmgMapH = function() {
  516.         return this._cmgMapH || 0;
  517.     };
  518.  
  519.     //=============================================================================
  520.     // Game_Interpreter
  521.     //=============================================================================
  522.  
  523.     var _CMG_Game_Interpreter_pluginCommand = Game_Interpreter.prototype.pluginCommand;
  524.     Game_Interpreter.prototype.pluginCommand = function(command, args) {
  525.         _CMG_Game_Interpreter_pluginCommand.call(this, command, args);
  526.         if (!command.match(/CMG_(.+)/i)) return;
  527.         command = (RegExp.$1 + '').toUpperCase();
  528.         switch (command) {
  529.             case '連結マップサイズ':
  530.             case 'CONNECTING_MAP_SIZE':
  531.                 DataManager._cmgMapW = setArgNum(args[0]);
  532.                 DataManager._cmgMapH = setArgNum(args[1]);
  533.                 break;
  534.             case 'マップ連結':
  535.             case 'CONNECTING_MAP':
  536.                 switch(args[0].toUpperCase()) {
  537.                     case '分割':
  538.                     case 'SPLIT':
  539.                         if (!$gamePlayer._splitMaps) $gamePlayer._splitMaps = [];
  540.                         var splitId = setArgNum(args[1]);
  541.                         switch(args[2].toUpperCase()) {
  542.                             case 'マップ':
  543.                             case 'MAP':
  544.                                 args = args.slice(3);
  545.                                 $gamePlayer._splitMaps[splitId] = args.map(function(arg){
  546.                                     return setArgNum(arg);
  547.                                 });
  548.                                 break;
  549.                         }
  550.                         break;
  551.                     case '生成':
  552.                     case 'MAKE':
  553.                         $gamePlayer._connectingMaps = [];
  554.                         $gamePlayer._splitMaps.forEach( function(splitMap){
  555.                             Array.prototype.push.apply($gamePlayer._connectingMaps, splitMap);
  556.                         });
  557.                         break;
  558.                         break;
  559.                     default:
  560.                         $gamePlayer._connectingMaps = args.map(function(arg){
  561.                             return setArgNum(arg);
  562.                         });
  563.                         break;
  564.                 }
  565.                 break;
  566.             case 'ランダムパーツセット':
  567.             case 'SET_RANDOM_PARTS':
  568.                 var partsId = setArgNum(args[0]);
  569.                 switch(args[1].toUpperCase()) {
  570.                     case 'マップ':
  571.                     case 'MAP':
  572.                         args = args.slice(2);
  573.                         FTKR.CMG.rand[partsId] = args.map(function(arg){
  574.                             return setArgNum(arg);
  575.                         });
  576.                         break;
  577.                     default:
  578.                         FTKR.CMG.rand[partsId] = [];
  579.                         break;
  580.                 }
  581.                 break;
  582.             case 'マップ連結解除':
  583.             case 'CLEAR_CONNECTING_MAP':
  584.                 $gamePlayer._connectingMaps = null;
  585.                 $gamePlayer._splitMaps = [];
  586.                 $dataCmgMaps = [];
  587.                 break;
  588.         }
  589.     };
  590.  
  591.     //=============================================================================
  592.     // Game_Player
  593.     //=============================================================================
  594.  
  595.     Game_Character.prototype.getCmgMapX = function(cmgMapId, mapX) {
  596.         for (var i = 0; i < cmgMapId % DataManager.cmgMapW(); i++) {
  597.             mapX += DataManager.dataMap(i).width;
  598.         }
  599.         return mapX;
  600.     };
  601.  
  602.     Game_Character.prototype.getCmgMapY = function(cmgMapId, mapY) {
  603.         var m = 0;
  604.         if (cmgMapId >= DataManager.cmgMapW()){
  605.             for (var i = 0; i < Math.floor(cmgMapId / DataManager.cmgMapH()); i++) {
  606.                 mapY += DataManager.dataMap(m).height;
  607.                 m += DataManager.cmgMapW();
  608.             }
  609.         }
  610.         return mapY;
  611.     };
  612.  
  613.     //=============================================================================
  614.     // Game_Player
  615.     //=============================================================================
  616.  
  617.     var _CMG_Game_Player_initMembers = Game_Player.prototype.initMembers;
  618.     Game_Player.prototype.initMembers = function() {
  619.         _CMG_Game_Player_initMembers.call(this);
  620.         DataManager._cmgMapW = FTKR.CMG.mapW;
  621.         DataManager._cmgMapH = FTKR.CMG.mapH;
  622.     };
  623.  
  624.     var _CMG_Game_Player_performTransfer = Game_Player.prototype.performTransfer;
  625.     Game_Player.prototype.performTransfer = function() {
  626.         if (this.isTransferring()) {
  627.             var maps = this._connectingMaps;
  628.             if (maps) {
  629.                 var cmgMapId = DataManager.cmgMapId(this._newMapId);
  630.                 this._newX = this.getCmgMapX(cmgMapId, this._newX);
  631.                 this._newY = this.getCmgMapY(cmgMapId, this._newY);
  632.                 this._newMapId = this._connectingMaps[0];
  633.             }
  634.         }
  635.         _CMG_Game_Player_performTransfer.call(this);
  636.     };
  637.  
  638.     //=============================================================================
  639.     // Game_CmgEvent
  640.     //=============================================================================
  641.  
  642.     Game_CmgEvent.prototype = Object.create(Game_Event.prototype);
  643.     Game_CmgEvent.prototype.constructor = Game_CmgEvent;
  644.  
  645.     Game_CmgEvent.prototype.initialize = function(mapId, eventId, cmgMapId) {
  646.         this._cmgMapId = cmgMapId;
  647.         Game_Event.prototype.initialize.call(this, mapId, eventId);
  648.         var x = this.getCmgMapX(this._cmgMapId, this.event().x);
  649.         var y = this.getCmgMapY(this._cmgMapId, this.event().y);
  650.         this.locate(x, y);
  651.         this.refresh();
  652.     };
  653.  
  654.     //=============================================================================
  655.     // Game_Map
  656.     //=============================================================================
  657.  
  658.     var _CMG_Game_Map_setupEvents = Game_Map.prototype.setupEvents;
  659.     Game_Map.prototype.setupEvents = function() {
  660.         _CMG_Game_Map_setupEvents.call(this);
  661.         if ($gamePlayer._connectingMaps) {
  662.             this._events = [];
  663.             for (var i = 0; i < $dataMap.events.length; i++) {
  664.                 if ($dataMap.events[i]) {
  665.                     var cmgMapId = this.cmgMapId(i);
  666.                     this._events[i] = new Game_CmgEvent(this._mapId, i, cmgMapId);
  667.                 }
  668.             }
  669.         }
  670.     };
  671.  
  672.     Game_Map.prototype.cmgMapId = function(index) {
  673.         if (!$gamePlayer._connectingMaps) return -1;
  674.         var cmgMapId = -1;
  675.         var len = 0;
  676.         $dataCmgMaps.some(function(dataMap, i){
  677.             if (dataMap) {
  678.                 len += dataMap.events.length;
  679.                 if (len > index) {
  680.                     cmgMapId = i;
  681.                     return true;
  682.                 }
  683.             }
  684.         });
  685.         return cmgMapId;
  686.     };
  687.  
  688.     Game_Map.prototype.cmgEventId = function(mapId, eventId) {
  689.         var cmgMapId = 0;
  690.         var num = 0;
  691.         $gamePlayer._connectingMaps.some( function(cmapId, i){
  692.             if (cmapId === mapId) {
  693.                 cmgMapId = i;
  694.                 return true;
  695.             }
  696.         });
  697.         $dataCmgMaps.forEach( function(dataMap, i){
  698.             if (i < $dataCmgMaps.length - 1) {
  699.                 if (cmgMapId > i) num += dataMap.events.length;
  700.             }
  701.         });
  702.         return num + eventId;
  703.     };
  704.  
  705.     //=============================================================================
  706.     // Scene_Map
  707.     //=============================================================================
  708.  
  709.     var _CMG_Scene_Map_create = Scene_Map.prototype.create
  710.     Scene_Map.prototype.create = function() {
  711.         if ($gamePlayer._connectingMaps && $gamePlayer._connectingMaps.length) {
  712.             Scene_Base.prototype.create.call(this);
  713.             this._transfer = $gamePlayer.isTransferring();
  714.             $gamePlayer._connectingMaps.forEach(function(cmapId, i){
  715.                 if (cmapId > 0) DataManager.loadConnectingMapData(cmapId, i);
  716.             });
  717.             this._cmgMapCreate = true;
  718.         } else {
  719.             _CMG_Scene_Map_create.call(this);
  720.         }
  721.     };
  722.  
  723.     var _CMG_Scene_Map_isReady = Scene_Map.prototype.isReady;
  724.     Scene_Map.prototype.isReady = function() {
  725.         if ($gamePlayer._connectingMaps) {
  726.             if (!DataManager.isConnectingMapsLoaded($gamePlayer._connectingMaps)) {
  727.                 return false;
  728.             } else {
  729.                 if (this._cmgMapCreate) {
  730.                     var mapId = $gamePlayer._connectingMaps[0];
  731.                     DataManager.loadMapData(mapId);
  732.                     this._cmgMapCreate = false;
  733.                 }
  734.                 if (!this._mapLoaded && DataManager.isMapLoaded()) {
  735.                     if ($gamePlayer._connectingMaps) this.createConnectingMap();
  736.                     this.onMapLoaded();
  737.                     this._mapLoaded = true;
  738.                 }
  739.                 return this._mapLoaded && Scene_Base.prototype.isReady.call(this);
  740.             }
  741.         } else {
  742.             return _CMG_Scene_Map_isReady.call(this);
  743.         }
  744.     };
  745.  
  746.     Scene_Map.prototype.createConnectingMap = function() {
  747.         this.setupConnectingMapData();
  748.         this.setupConnectingMapWidth();
  749.         this.setupConnectingMapHeight();
  750.         this.setupConnectingMapEvents();
  751.         this.setupConnectingMapEncounterList();
  752.     };
  753.  
  754.     Scene_Map.prototype.setupConnectingMapData = function() {
  755.         var data = [];
  756.         var mapH = DataManager.cmgMapH();
  757.         var mapW = DataManager.cmgMapW();
  758.         var dataMap = null;
  759.         for (var i = 0; i < 6; i++) {
  760.             for (var m = 0; m < mapH; m++) {
  761.                 dataMap = DataManager.dataMap(mapW * m);
  762.                 if (!!dataMap) {
  763.                     var num = dataMap.height;
  764.                     for (var h = num * i; h < num * (i + 1); h++) {
  765.                         for (var v = mapW * m; v < mapW * (m + 1); v++) {
  766.                             DataManager.pushMapData(data, v, h);
  767.                         }
  768.                     }
  769.                 }
  770.             }
  771.         }
  772.         $dataMap.data = data;
  773.     };
  774.  
  775.     Scene_Map.prototype.setupConnectingMapWidth = function() {
  776.         var width = 0;
  777.         $dataCmgMaps.some( function(dataMap, i){
  778.             if (i >= DataManager.cmgMapW()) return true;
  779.             if (dataMap) {
  780.                 width += dataMap.width;
  781.             }
  782.         });
  783.         $dataMap.width = width;
  784.     };
  785.  
  786.     Scene_Map.prototype.setupConnectingMapHeight = function() {
  787.         var height = 0;
  788.         $dataCmgMaps.forEach( function(dataMap, i){
  789.             if (!(i % DataManager.cmgMapW())) {
  790.                 if (dataMap) {
  791.                     height += dataMap.height;
  792.                 }
  793.             }
  794.         });
  795.         $dataMap.height = height;
  796.     };
  797.  
  798.     Scene_Map.prototype.setupConnectingMapEvents = function() {
  799.         var events = [];
  800.         $gamePlayer._connectingMaps.forEach(function(map, i){
  801.             if (map) {
  802.                 var cmgEvents = DataManager.dataMap(i).events;
  803.                 Array.prototype.push.apply(events, cmgEvents);
  804.             }
  805.         });
  806.         $dataMap.events = events;
  807.     };
  808.  
  809.     Scene_Map.prototype.setupConnectingMapEncounterList = function() {
  810.         var encounterList = [];
  811.         $gamePlayer._connectingMaps.forEach(function(map, i){
  812.             if (map) {
  813.                 var list = DataManager.dataMap(i).encounterList;
  814.                 Array.prototype.push.apply(encounterList, list);
  815.             }
  816.         });
  817.         $dataMap.encounterList = encounterList;
  818.     };
  819.  
  820. }());//EOF

头像被屏蔽

Lv4.逐梦者 (禁止发言)

梦石
0
星屑
15559
在线时间
14 小时
注册时间
2018-5-26
帖子
10
2
发表于 2018-5-26 17:29:11 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv4.逐梦者 (禁止发言)

梦石
0
星屑
15559
在线时间
14 小时
注册时间
2018-5-26
帖子
10
3
发表于 2018-5-26 17:41:04 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-30 08:00

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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