Project1

标题: 如何破除地图999张的限制(对RmxpDATA数据熟析的人进) [打印本页]

作者: TERENCE    时间: 2008-4-9 20:53
标题: 如何破除地图999张的限制(对RmxpDATA数据熟析的人进)
MS我很早以前问过这个问题,
但因为论坛回档的关系,
所以找不到原帖的答案,
我只好重发一次。

制作地图超过999张对一般人来说虽然不太可能,
但我还是想问一下如何破除地图999张的限制??

(不要给我回答:"我弱弱的问你 你游戏做了几张地图" 之类的话){/gg}
(我想要的是确据的答案,谢谢!!){/wx}
[LINE]1,#dddddd[/LINE]本贴由论坛斑竹水迭澜结贴,如楼主认为问题未解决,请重新将此贴编辑为“有事请教”,并回帖叙述疑点即可~ ^-^
作者: cZooCz    时间: 2008-4-9 20:55
··先佩服下··~强人!{/pz}
作者: 幻の飞鱼    时间: 2008-4-9 21:01
我只有个大致推测=。=

在两个工程里制作地图,最后再整和

具体没实践过,但是同时使用两个数据库以前是有先例的
作者: Cidolfus    时间: 2008-4-9 21:01
提示: 作者被禁止或删除 内容自动屏蔽
作者: wy29    时间: 2008-4-9 21:08
提示: 作者被禁止或删除 内容自动屏蔽
作者: 禾西    时间: 2008-4-9 21:09
遊戲進行到一定程度换地圖文件==
作者: 劍之飛龍☆    时间: 2008-4-9 21:10
恩恩,MS挺麻烦的,需要改很多吧……
作者: 冰水    时间: 2008-4-9 22:22
只要加两句脚本改个目录就好了。
一个目录放900个地图。当前目录没有则换个路径.
Game_Map类里
@map = load_data(sprintf("Data/Map%03d.rxdata", @map_id))
改成
读取前再加个判断,用hash什么的都随意…….
地图路径="Data"
@map = load_data(sprintf("#{地图路径}/Map%03d.rxdata", @map_id))
就好了。
Map%03d改成04%d会造成读取不能的……

作者: TERENCE    时间: 2008-4-10 04:50
以下引用冰水于2008-4-9 14:22:36的发言:

只要加两句脚本改个目录就好了。
一个目录放900个地图。当前目录没有则换个路径.
Game_Map类里
@map = load_data(sprintf("Data/Map%03d.rxdata", @map_id))
改成
读取前再加个判断,用hash什么的都随意…….
地图路径="Data"
@map = load_data(sprintf("#{地图路径}/Map%03d.rxdata", @map_id))
就好了。
Map%03d改成04%d会造成读取不能的……

这样在做地图场所移动的时候会有错误吧!?
这样要怎么做出跨越目录地图场所移动?
顺带一问:Map%03d应该是表示3位数的地图ID吧!

[LINE]1,#dddddd[/LINE]

以下引用wy29于2008-4-9 13:08:57的发言:

好像得破解游戏的某个dll或exe。

因为默认的地图编号是3位数的,
如果要突破1000的话,得用4位数。
所以脚本里的class Game_Map也得修改。

如果破解游戏的某个dll或exe(突破1000),
脚本里class Game_Map的@map = load_data(sprintf("Data/Map%03d.rxdata", @map_id))
修改成@map = load_data(sprintf("Data/Map%04d.rxdata", @map_id))
就可以了吧??
作者: feifei124    时间: 2008-4-10 05:25
提示: 作者被禁止或删除 内容自动屏蔽
作者: 沉影不器    时间: 2008-4-10 05:27
提示: 作者被禁止或删除 内容自动屏蔽
作者: TERENCE    时间: 2008-4-10 05:37
我目前想到了一个办法:(不知道可不可行){/gg}

先建立N个Data资料夹(Data1,Data2,.....DataN)
再利用游戏某变量 $game_variables[1]=数值 控制

把Game_Map类里@map = load_data(sprintf("Data/Map%03d.rxdata", @map_id))
改成
case $game_variables[1]
when 0
  @map = load_data(sprintf("Data1/Map%03d.rxdata", @map_id))
when 1
  @map = load_data(sprintf("Data2/Map%03d.rxdata", @map_id))
when 2
  @map = load_data(sprintf("Data3/Map%03d.rxdata", @map_id))
.........
when N-1
  @map = load_data(sprintf("DataN/Map%03d.rxdata", @map_id))
end

当制作地图超过999张(该999张地图Data都存放在Data1资料夹下),
新的工程开始制作新地图,做完后存档,
把新的地图Data复制到以前的工程Data2资料夹下,
依此类推.......

当然制作新的工程过程中必须注意
开关ID,Tilesets ID,变量ID..等等 要跟以前的工程配合才行
跨越目录地图场所移动时,
利用游戏变量$game_variables[1]先帶入你要的Data资料夹数值


(哪位对 RMXP DATA数据 熟析的人帮我看看.....会不会有问题)
作者: 七仙女    时间: 2008-4-10 07:42
提示: 作者被禁止或删除 内容自动屏蔽
作者: 禾西    时间: 2008-4-10 17:39
$game_map要用
$game_map           = Game_Map.new
重新讀取

事實上禾西認爲,既然都重新讀取了那麽直接在
Game_Map的initialize當中加入參數,比如:initialize(file_id=1)
然後根據file_id代替$game_variables[1]

再然後就根據TERENCE閣下的方法好了。

因爲$game_map只是記載了地圖事件和獨立開關而已。換掉不會産生大問題。
[LINE]1,#dddddd[/LINE]系统信息:本贴获得楼主认可,66RPG感谢您的热情解答~
作者: 冰水    时间: 2008-4-10 19:22
以下引用TERENCE于2008-4-9 20:50:57的发言:
脚本里class Game_Map的@map = load_data(sprintf("Data/Map%03d.rxdata", @map_id))
修改成@map = load_data(sprintf("Data/Map%04d.rxdata", @map_id))
就可以了吧??
[本贴由作者于 2008-4-9 20:51:36 最后编辑]


用脚本读当然可以,关键是制作的时候rmxp无法打开超过999号的地图,也没法修改。
跨越目录地图场所移可以用脚本来实现。
改成4位的好象也不支持跳转。 [LINE]1,#dddddd[/LINE]系统信息:本贴获得楼主认可,66RPG感谢您的热情解答~
作者: wy29    时间: 2008-4-10 20:00
提示: 作者被禁止或删除 内容自动屏蔽
作者: TERENCE    时间: 2008-4-10 21:03
在第二招中:
那比如说 在旧的工程里 当开关1号为ON,变数2号为123,...等等数据资料
跨越目录地图场所移动后,
这些数据还能够保持原样吗??
在新工程调用相同的开关或变数时会影响吗??

(換句話說:Map***.rxdata都是存放哪些 东西/数据资料 ??)
作者: wy29    时间: 2008-4-10 21:13
提示: 作者被禁止或删除 内容自动屏蔽
作者: TERENCE    时间: 2008-4-10 21:44
以下引用wy29于2008-4-10 12:00:01的发言:
......
用默认的转换事件不会显示真正的地图,
......

那在跨越目录地图场所移动时,
如果是使用游戏某变量 $game_variables[1]=数值 控制
在事件頁里:
先把变量帶入你要的Data资料夹数值后
再使用变数指定场所移动的 目的地

即可??
作者: wy29    时间: 2008-4-10 22:01
提示: 作者被禁止或删除 内容自动屏蔽
作者: TERENCE    时间: 2008-4-10 22:27
{/hx}感谢大家的讨论!!

100积分將平分給
wy29
禾西
冰水
沉影不器
4人 主要答题
(各25分)
作者: 水迭澜    时间: 2008-4-10 22:30
嘛,其实你可以在一张地图上画四个图。中间有玩家看不到的黑色边分开,更多的估计也可以
不过如果是特殊作用的话无视我。
作者: 精灵使者    时间: 2008-4-10 23:00
那样的话问题很明显。你需要不能让角色置中,否则就会被穿帮。
作者: 水迭澜    时间: 2008-4-10 23:32
以下引用精灵使者于2008-4-10 15:00:12的发言:
<br><script language="javascript">
<!--
strCont="那样的话问题很明显。你需要不能让角色置中,否则就会被穿帮。";
document.write(ubb.spbShowTopic(strCont,1));
//-->
</script>那样的话问题很明显。你需要不能让角色置中,否则就会被穿帮。

改脚本也就半小时的事,比LZ提出的方法简单多了
作者: 精灵使者    时间: 2008-4-11 06:48
我做的屋子通常都是仅仅放满屏幕的小地图,所以四处走路地图不移动。如果按照楼上的说法,四处走路地图就移动了,那很明显就看出来了。
作者: 水迭澜    时间: 2008-4-11 08:56
你可以根据地图名或者变量在脚本里设置不移动啊……我不是表达过这意思了么……




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