Project1

标题: 如何改变局部地图 [打印本页]

作者: chenyilindzh    时间: 2016-1-22 16:22
标题: 如何改变局部地图
想做建筑物增筑····
作者: tseyik    时间: 2016-1-22 17:02
本帖最后由 tseyik 于 2016-1-24 13:44 编辑

SupponChangeTileId 1.01
MITライセンス:プラグイン内の著作権表記を消さなければ、自由に使用・改造・再配布・販売などが行えます。
發表於 twitter http://tm.lucky-duet.com/

SupponChangeTileId


* このプラグインを使用するときは以下のようにプラグインコマンドを入力してください。
*
* SupponCTI add 1 2 3 4 5 6 11 12 13
*
* 、
*1為 ID、
* 2是來源地圖ID、
* 3是來源X座標、
* 4是來源Y座標、
* 5是來源寛(以圖塊為單位)、
* 6是來源高(以圖塊為單位)、
* 11目的地圖ID、
* 12是目的地X座標、
* 13是目的地Y座標、
* 來源地的區域設定亦會複制。
* ID用abc這些文字。
* 省略地圖ID時(0?(這要測試一下))、視為同地圖間複制處理。
*
*
*用以下指令削除copy資料。
*
* SupponCTI remove 1
*
* この場合、
* 削除1為 ID的資料。若有複数相同ID為名的資料時、會全部削除。
*/
作者: roy12585    时间: 2016-1-23 02:37
自带有一个叫TDDP_BindPictureToMap的,貌似能达到这样的效果。没用过,看名字也介绍而已。
作者: 汪汪    时间: 2016-1-23 09:02
复制事件,离开地图保存事件位置和方向https://rpg.blue/thread-386409-1-1.html
以前写的……或许可以参考
作者: chenyilindzh    时间: 2016-1-23 17:58
用是能用了···但是怎么设定地图边缘呢····@tseyik 如图···增加的土块完全暴露了···

1.png (58 KB, 下载次数: 27)

1.png

2.png (47.18 KB, 下载次数: 24)

2.png

3.png (13.05 KB, 下载次数: 22)

3.png

作者: 汪汪    时间: 2016-1-24 01:52
本帖最后由 余烬之中 于 2016-1-24 13:45 编辑

只写了些很基础的方法
JAVASCRIPT 代码复制
  1. //=============================================================================
  2. // ceshi.js
  3. //=============================================================================
  4. /*:
  5.  * @plugindesc 名称
  6.  * @author wangwang作者信息
  7.  *
  8.  * @param cs
  9.  * @desc 默认参数
  10.  * @default 汪汪
  11.  *
  12.  * @help
  13.  * 帮助的信息
  14.  *
  15.  *
  16.  */
  17.  
  18.  
  19.  
  20.  
  21. (function() {
  22.  
  23.         ww_tileAdd = {}       
  24.  
  25.         //临时读取 地图文件
  26.         ww_tileAdd._tempMapData = {}
  27.         //保存的 地图文件数据
  28.         ww_tileAdd._mapData = {}
  29.         //添加记录
  30.         ww_tileAdd._mapDataAdd = {}
  31.         ww_tileAdd._loadListeners = {}
  32.  
  33.  
  34.         //读取时呼叫
  35.         ww_tileAdd._callLoadListeners = function(mapId) {
  36.                 var loadListeners = ww_tileAdd._loadListeners[mapId]
  37.                 if (Array.isArray(loadListeners)){
  38.                     while (loadListeners.length > 0) {
  39.                         var listener = loadListeners.shift();
  40.                         listener();
  41.                     }
  42.                 }
  43.                 ww_tileAdd._loadListeners[mapId] = []
  44.         };
  45.         //添加呼叫
  46.         ww_tileAdd.addLoadListener = function(mapId,listner) {
  47.             if (ww_tileAdd._tempMapData[mapId]) {
  48.                 listner();
  49.             } else {
  50.                     if (!Array.isArray(ww_tileAdd._loadListeners[mapId])){
  51.                             ww_tileAdd._loadListeners[mapId] = []
  52.                     }
  53.                 ww_tileAdd._loadListeners[mapId].push(listner);       
  54.                 if(ww_tileAdd._tempMapData[mapId] !== null){
  55.                             ww_tileAdd._tempMapDataLoad(mapId)
  56.                     }
  57.  
  58.             }
  59.         };
  60.         //读取数据文件
  61.         ww_tileAdd.loadDataFile = function(mapId, src) {
  62.             var xhr = new XMLHttpRequest();
  63.             var url = 'data/' + src;
  64.             xhr.open('GET', url);
  65.             xhr.overrideMimeType('application/json');
  66.             xhr.onload = function() {
  67.                 if (xhr.status < 400) {
  68.                     ww_tileAdd._tempMapData[mapId] = JSON.parse(xhr.responseText);
  69.                     ww_tileAdd.onLoad(ww_tileAdd._tempMapData[mapId]);
  70.                     ww_tileAdd._callLoadListeners(mapId)
  71.                 }
  72.             };
  73.             xhr.onerror = function() {
  74.                 DataManager._errorUrl = DataManager._errorUrl || url;
  75.             };
  76.             ww_tileAdd._tempMapData[mapId] = null;
  77.             xhr.send();
  78.         };
  79.         //当读取
  80.         ww_tileAdd.onLoad = function(object) {
  81.             var array;
  82.             DataManager.extractMetadata(object);
  83.             array = object.events;
  84.             if (Array.isArray(array)) {
  85.                 for (var i = 0; i < array.length; i++) {
  86.                     var data = array[i];
  87.                     if (data && data.note !== undefined) {
  88.                         DataManager.extractMetadata(data);
  89.                     }
  90.                 }
  91.             }
  92.         };
  93.         //读取临时地图数据
  94.         ww_tileAdd._tempMapDataLoad = function (mapId) {
  95.                 if (mapId > 0) {
  96.                 var filename = 'Map%1.json'.format(mapId.padZero(3));
  97.                 ww_tileAdd.loadDataFile(mapId, filename);
  98.             } else {
  99.                 ww_tileAdd.makeEmptyMap(mapId);
  100.             }
  101.         }
  102.         //制作空白地图
  103.         ww_tileAdd.makeEmptyMap = function(mapId) {
  104.             ww_tileAdd._tempMapData[mapId] = {};
  105.             var MapData = ww_tileAdd._tempMapData[mapId]
  106.             MapData.data = [];
  107.             MapData.events = [];
  108.             MapData.width = 100;
  109.             MapData.height = 100;
  110.             MapData.scrollType = 3;
  111.         };
  112.  
  113.  
  114.  
  115.  
  116.  
  117.  
  118.  
  119.         //是横向循环
  120.         ww_tileAdd._isLoopHorizontal = function(scrollType) {
  121.             return scrollType === 2 || scrollType === 3;
  122.         };
  123.         //是纵向循环
  124.         ww_tileAdd._isLoopVertical = function(scrollType) {
  125.             return scrollType === 1 || scrollType === 3;
  126.         };
  127.  
  128.  
  129.  
  130.  
  131.  
  132.  
  133.  
  134.  
  135.  
  136.         //图块复制(本地图的 x,y,z处图块,复制到x,y,z)
  137.         ww_tileAdd.tileClone = function (x,y,z,tx,ty,tz){
  138.                 var tile = ww_tileAdd.loadNowMapTile(x,y,z)
  139.                 var tmapid =  $gameMap.mapId()
  140.                 ww_tileAdd.changeMapTile(tmapid,tx,ty,tz,tile)
  141.         }
  142.         //图块区域复制(本地图的x,y,宽,高,z区域的图块,复制到x,y,z)
  143.         ww_tileAdd.tileAreaClone = function (x,y,w,h,z,tx,ty,tz){
  144.                 var tileArea = ww_tileAdd.loadNowMapTileArea(x,y,z)
  145.                 var tmapid =  $gameMap.mapId()
  146.                 ww_tileAdd.changeMapTileArea(tmapid,tx,ty,tz,tileArea)
  147.         }
  148.  
  149.         //图块克隆(fmapid地图的x,y,z的图块,克隆到tmapid地图的x,y,z)
  150.         ww_tileAdd.tile2 = function (fmapid,x,y,z,tmapid,tx,ty,tz){
  151.                 ww_tileAdd.addLoadListener(
  152.                         fmapid,
  153.                         function () {
  154.                                 var tile = ww_tileAdd.loadMapTile(fmapid,x,y,z)
  155.                                 ww_tileAdd.changeMapTile(tmapid,tx,ty,tz,tile)
  156.                         }
  157.                 )
  158.         }
  159.  
  160.         //图块区域克隆(fmapid地图的x,y,宽,高,z区域的图块,克隆到tmapid地图的x,y,z)
  161.         ww_tileAdd.tileArea2 = function (fmapid,x,y,w,h,z,tmapid,tx,ty,tz){
  162.                 ww_tileAdd.addLoadListener(
  163.                         fmapid,
  164.                         function () {
  165.                                 var tileArea = ww_tileAdd.loadMapTileArea(fmapid,x,y,w,h,z)
  166.                                 if(Array.isArray(tileArea)){
  167.                                         ww_tileAdd.changeMapTileArea(tmapid,tx,ty,tz,tileArea)
  168.                                 }
  169.                         }
  170.                 )
  171.         }
  172.  
  173.         //改变地图图块
  174.         ww_tileAdd.changeMapTile = function (mapid,x,y,z,tile){
  175.                 ww_tileAdd._mapDataAdd[mapid] = ww_tileAdd._mapDataAdd[mapid] || []
  176.                 var key = ["changeMapTile",x,y,z,tile]
  177.                 ww_tileAdd._mapDataAdd[mapid].push(key)
  178.  
  179.                 if( mapid ==  $gameMap.mapId() && DataManager.isMapLoaded()){
  180.                         ww_tileAdd._changeNowMapTile(x,y,z,tile)
  181.                         $gameMap.requestRefresh()
  182.             }
  183.         }
  184.         //改变地图图块区域
  185.         ww_tileAdd.changeMapTileArea = function (mapid,x,y,z,tileArea){
  186.                 ww_tileAdd._mapDataAdd[mapid] = ww_tileAdd._mapDataAdd[mapid] || []
  187.                 var key = ["changeMapTileArea",x,y,z,tileArea]
  188.                 ww_tileAdd._mapDataAdd[mapid].push(key)
  189.                 if( mapid ==  $gameMap.mapId() && DataManager.isMapLoaded()){
  190.                         ww_tileAdd._changeNowMapTileArea(x,y,z,tileArea)
  191.                         $gameMap.requestRefresh()
  192.             }
  193.         }
  194.  
  195.  
  196.  
  197.     //改变当前地图图块
  198.         ww_tileAdd._changeNowMapTile = function(x, y, z, tile) {
  199.                 var tile = tile || 0
  200.             if ($dataMap.data) {
  201.                 var width = $dataMap.width;
  202.                 var height =$dataMap.height;
  203.                 var horizontalWrap = ww_tileAdd._isLoopHorizontal($dataMap.scrollType)
  204.                         var verticalWrap = ww_tileAdd._isLoopVertical($dataMap.scrollType)
  205.                 if (horizontalWrap) {
  206.                     x = x.mod(width);
  207.                 }
  208.                 if (verticalWrap) {
  209.                     y = y.mod(height);
  210.                 }
  211.                 if (x >= 0 && x < width && y >= 0 && y < height) {
  212.                     $dataMap.data[(z * height + y) * width + x] = tile
  213.                 }
  214.             }
  215.         };
  216.  
  217.         //改变当前地图图块区域
  218.         ww_tileAdd._changeNowMapTileArea = function(x0, y0, z, tileArea) {
  219.                 var tileArea = tileArea
  220.             if ($dataMap.data) {
  221.                 var width = $dataMap.width;
  222.                 var height =$dataMap.height;
  223.                 var horizontalWrap = ww_tileAdd._isLoopHorizontal($dataMap.scrollType)
  224.                         var verticalWrap = ww_tileAdd._isLoopVertical($dataMap.scrollType)               
  225.                         for (var wi =0 ;wi<tileArea.length ;wi++){
  226.                                 var tileArea2 = tileArea[wi]
  227.                                 if (Array.isArray(tileArea2)){
  228.                                         for (var hi = 0;hi<tileArea2.length;hi++){
  229.                                                 var tile = tileArea2[hi]
  230.                                                 var x = x0 + wi
  231.                                                 var y = x0 + hi                                
  232.                                                 if (horizontalWrap) {
  233.                                                     x = x.mod(width);
  234.                                         }
  235.                                         if (verticalWrap) {
  236.                                             y = y.mod(height);
  237.                                         }
  238.                                         if (x >= 0 && x < width && y >= 0 && y < height) {
  239.                                             $dataMap.data[(z * height + y) * width + x] = tile
  240.                                         }
  241.                                         }
  242.                                 }
  243.                         }
  244.             }
  245.         };
  246.  
  247.         ww_tileAdd.loadMapTile =function (fmapid,x,y,z) {
  248.                 var mapdata = ww_tileAdd._tempMapData[fmapid]
  249.                 if (mapdata){
  250.                         var data = mapdata.data
  251.                         if (data) {
  252.                                 var width = mapdata.width
  253.                                 var height = mapdata.height
  254.                                 var horizontalWrap = ww_tileAdd._isLoopHorizontal(mapdata.scrollType)
  255.                                 var verticalWrap = ww_tileAdd._isLoopVertical(mapdata.scrollType)
  256.                         if (horizontalWrap) {
  257.                             x = x.mod(width);
  258.                         }
  259.                         if (verticalWrap) {
  260.                             y = y.mod(height);
  261.                         }
  262.                         if (x >= 0 && x < width && y >= 0 && y < height) {
  263.                             return data[(z * height + y) * width + x] || 0;
  264.                         }
  265.                     }
  266.             }
  267.             return 0;
  268.         }
  269.  
  270.         ww_tileAdd.loadMapTileArea =function (fmapid,x0,y0,w,h,z) {
  271.                 var tileArea =[]
  272.                 for (var wi=0;wi<w;wi++){
  273.                         tileArea[wi]=[]
  274.                         for (var hi = 0;hi<h;hi++){
  275.                                 tileArea[wi][hi]=0
  276.                         }
  277.                 }
  278.                 var mapdata = ww_tileAdd._tempMapData[fmapid]
  279.                 if (mapdata){
  280.                         var data = mapdata.data
  281.                         if (data) {
  282.                                 var width = mapdata.width
  283.                                 var height = mapdata.height
  284.                                 var horizontalWrap = ww_tileAdd._isLoopHorizontal(mapdata.scrollType)
  285.                                 var verticalWrap = ww_tileAdd._isLoopVertical(mapdata.scrollType)
  286.                                 for (var wi=0;wi<w;wi++){
  287.                                         for (var hi = 0;hi<h;hi++){
  288.                                                 var x = x0 + wi
  289.                                                 var y = x0 + hi
  290.                                         if (horizontalWrap) {
  291.                                             x = x.mod(width);
  292.                                         }
  293.                                         if (verticalWrap) {
  294.                                             y = y.mod(height);
  295.                                         }
  296.                                         if (x >= 0 && x < width && y >= 0 && y < height) {
  297.                                             tileArea[wi][hi] = data[(z * height + y) * width + x] || 0;
  298.                                         }
  299.                                         }
  300.                                 }
  301.                     }
  302.             }
  303.             return tileArea;
  304.         }
  305.  
  306.  
  307.  
  308.         ww_tileAdd.loadNowMapTile =function (x,y,z) {
  309.                 var mapdata = $dataMap
  310.                 if (mapdata){
  311.                         var data = mapdata.data
  312.                         if (data) {
  313.                                 var width = mapdata.width
  314.                                 var height = mapdata.height
  315.                                 var horizontalWrap = ww_tileAdd._isLoopHorizontal(mapdata.scrollType)
  316.                                 var verticalWrap = ww_tileAdd._isLoopVertical(mapdata.scrollType)
  317.                         if (horizontalWrap) {
  318.                             x = x.mod(width);
  319.                         }
  320.                         if (verticalWrap) {
  321.                             y = y.mod(height);
  322.                         }
  323.                         if (x >= 0 && x < width && y >= 0 && y < height) {
  324.                             return data[(z * height + y) * width + x] || 0;
  325.                         }
  326.                     }
  327.                 }
  328.                 return 0;
  329.         }
  330.  
  331.  
  332.         ww_tileAdd.loadNowMapTileArea =function (x0,y0,w,h,z) {
  333.                 var tileArea =[]
  334.                 for (var wi=0;wi<w;wi++){
  335.                         tileArea[wi]=[]
  336.                         for (var hi = 0;hi<h;hi++){
  337.                                 tileArea[wi][hi]=0
  338.                         }
  339.                 }
  340.                 var mapdata = $dataMap
  341.                 if (mapdata){
  342.                         var data = mapdata.data
  343.                         if (data) {
  344.                                 var width = mapdata.width
  345.                                 var height = mapdata.height
  346.                                 var horizontalWrap = ww_tileAdd._isLoopHorizontal(mapdata.scrollType)
  347.                                 var verticalWrap = ww_tileAdd._isLoopVertical(mapdata.scrollType)
  348.                                 for (var wi=0;wi<w;wi++){
  349.                                         for (var hi = 0;hi<h;hi++){
  350.                                                 var x = x0 + wi
  351.                                                 var y = x0 + hi
  352.                                         if (horizontalWrap) {
  353.                                             x = x.mod(width);
  354.                                         }
  355.                                         if (verticalWrap) {
  356.                                             y = y.mod(height);
  357.                                         }
  358.                                         if (x >= 0 && x < width && y >= 0 && y < height) {
  359.                                             tileArea[wi][hi] = data[(z * height + y) * width + x] || 0;
  360.                                         }
  361.                                         }
  362.                                 }
  363.                     }
  364.             }
  365.             return tileArea;
  366.         }
  367.  
  368.  
  369.  
  370.     //当地图读取时的处理
  371.         ww_tileAdd._onMapLoaded = function () {
  372.                 var mapid = $gameMap.mapId()
  373.                 var mapDataAdds = ww_tileAdd._mapDataAdd[mapid]
  374.                 if (Array.isArray(mapDataAdds)){
  375.                         while (mapDataAdds.length > 0) {
  376.                         var mapDataAdd = mapDataAdds.shift();
  377.                         if(mapDataAdd[0] ){
  378.                                 if( mapDataAdd[0] == "changeMapTile"){
  379.                                         var x =  mapDataAdd[1] || 0
  380.                                         var y =  mapDataAdd[2] || 0
  381.                                         var z =  mapDataAdd[3] || 0
  382.                                         var tile =  mapDataAdd[4] || 0
  383.                                         ww_tileAdd._changeNowMapTile(x,y,z,tile)
  384.                                 }
  385.                                 if( mapDataAdd[0] == "changeMapTileArea"){
  386.                                         var x =  mapDataAdd[1] || 0
  387.                                         var y =  mapDataAdd[2] || 0
  388.                                         var z =  mapDataAdd[3] || 0
  389.                                         var tileArea =  mapDataAdd[4] || 0
  390.                                         ww_tileAdd._changeNowMapTileArea(x,y,z,tileArea)
  391.                                 }
  392.                         }
  393.                     }
  394.                 }
  395.                 return true;
  396.         }
  397.  
  398.  
  399.  
  400.         ww_tileAdd._onMapLoaded2 = Scene_Map.prototype.onMapLoaded
  401.         Scene_Map.prototype.onMapLoaded = function() {
  402.                 ww_tileAdd._onMapLoaded()
  403.                 ww_tileAdd._onMapLoaded2.call(this);       
  404.         };
  405.  
  406.  
  407.  
  408.  
  409. })();





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