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

Project1

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

[已经解决] 如何改变局部地图

[复制链接]

Lv1.梦旅人

梦石
0
星屑
245
在线时间
219 小时
注册时间
2015-9-24
帖子
166
跳转到指定楼层
1
发表于 2016-1-22 16:22:15 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
想做建筑物增筑····

Lv5.捕梦者

梦石
0
星屑
23068
在线时间
8648 小时
注册时间
2011-12-31
帖子
3367
2
发表于 2016-1-22 17:02:54 | 只看该作者
本帖最后由 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為名的資料時、會全部削除。
*/

点评

我发了图···地图边缘要怎么设置呢··  发表于 2016-1-23 17:59
ID是自己給的,如ABC,FX  发表于 2016-1-23 17:38
去网上看了下没找到原帖···不懂日语····  发表于 2016-1-23 17:33
额,没懂,怎么判定对应ID···  发表于 2016-1-23 17:30

评分

参与人数 1梦石 +1 收起 理由
余烬之中 + 1 0x0

查看全部评分

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
258 小时
注册时间
2011-12-23
帖子
72
3
发表于 2016-1-23 02:37:09 | 只看该作者
自带有一个叫TDDP_BindPictureToMap的,貌似能达到这样的效果。没用过,看名字也介绍而已。

点评

我看了下,这个是固定远景图不是改地图的··  发表于 2016-1-23 17:44
[
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1232
在线时间
1017 小时
注册时间
2011-4-30
帖子
1516
4
发表于 2016-1-23 09:02:53 | 只看该作者
复制事件,离开地图保存事件位置和方向https://rpg.blue/thread-386409-1-1.html
以前写的……或许可以参考

点评

还没那么智能……只能复制本地图的……不过未来可能研究下  发表于 2016-1-23 20:13
就是说新开一张地图然后把原来地图上的事件复制过去造成地图变化的效果?  发表于 2016-1-23 19:09
事件复制。  发表于 2016-1-23 19:00
没看懂···具体用在哪些场合呢  发表于 2016-1-23 17:29
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
245
在线时间
219 小时
注册时间
2015-9-24
帖子
166
5
 楼主| 发表于 2016-1-23 17:58:09 | 只看该作者
用是能用了···但是怎么设定地图边缘呢····@tseyik 如图···增加的土块完全暴露了···

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

1.png

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

2.png

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

3.png

点评

3q~~1.01可以了~非常好用~  发表于 2016-1-24 13:01
1.01好像可指定copy目的copy/copy来源地圖  发表于 2016-1-23 20:22
旧版有bug,js己更新到1.01  发表于 2016-1-23 20:14
汗!留多些空白位,原圖是示範才放這麼接近  发表于 2016-1-23 20:01
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1232
在线时间
1017 小时
注册时间
2011-4-30
帖子
1516
6
发表于 2016-1-24 01:52:56 | 只看该作者
本帖最后由 余烬之中 于 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. })();
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-12-23 06:58

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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