Project1
标题:
[vx] 图块、通行度动态修改与扩展 V1.3.0614 (2011-6-14日更新)
[打印本页]
作者:
八云紫
时间:
2010-8-28 18:06
标题:
[vx] 图块、通行度动态修改与扩展 V1.3.0614 (2011-6-14日更新)
本帖最后由 八云紫 于 2013-10-25 13:21 编辑
好吧,这个脚本感觉和 流星姐 的那个脚本撞车了,不过还是发一下吧.
http://pan.baidu.com/s/1mVzOP
更新后的脚本如下
#===============================================================================
# ■ VX 简易地图扩张
#-------------------------------------------------------------------------------
# *脚本说明及使用方法*
# => 参考引用网址
#-------------------------------------------------------------------------------
# 更新作者: 铃仙·优昙华院·因幡
# 许可协议: FSL -DNR
# 项目版本: 1.3.0614
# 引用网址: http://rpg.blue/thread-155105-1-1.html
#-------------------------------------------------------------------------------
# - *1.0.0828* By 铃仙·优昙华院·因幡
# * 更新内容: 1.基本脚本组建
# - *1.1.0829* By 铃仙·优昙华院·因幡
# * 更新内容: 1.添加 A系列模块替换功能
# 2.添加自动执行功能
# - *1.2.0913* By 铃仙·优昙华院·因幡
# * 更新内容: 1.优化脚本结构
# 2.添加动态修改B C D E中某图块通行度功能
# 3.添加动态修改针对某地图坐标的通行度功能
# 4.附赠送查看地图图块ID脚本插件,详细请查阅《图块ID查看》
# - *1.3.0614* By 铃仙·优昙华院·因幡
# * 更新内容: 1.修正在多次切换同一张地图后,出现图块读取错误的 BUG
# 2.优化整体甲苯结构
# 3.优化使用方法
#===============================================================================
$fscript = {} if $fscript == nil
$fscript["*MapExpansion*"] = "1.3.0614"
#==============================================================================
# ■ reisen_module
#------------------------------------------------------------------------------
# 配置模块
#==============================================================================
module FSL
module ReisenMapExpansion
ALL_MAP = "A1A2A3A4A5BCDE"
A_MAP = "A1A2A3A4A5"
NOT_A_MAP = "BCDE"
# 地图自动切换设定
MAP_DATA = {
# 地图ID => 方案
2 => 2,
}
CAN = 0x06
NOT_CAN = 0x0f
HIGH = 0x16
# 单块地图通行设定
MAP_TILE_ID_PASSAGE = {
# [地图ID,x,y] => [通行度]
[ 1, 5, 5] => [NOT_CAN],
}
end
module Timap_id
TIMAPID = ["TileA1", "TileA2", "TileA3", "TileA4", "TileA5", "TileB",
"TileC", "TileD", "TileE"]
end
end
#==============================================================================
# ■ Game_Map
#------------------------------------------------------------------------------
# 处理地图的类。包含卷动以及可以通行的判断功能。本类的实例请参考 $game_map 。
#==============================================================================
class Game_Map
#--------------------------------------------------------------------------
# ● 定义实例变量
#--------------------------------------------------------------------------
attr_accessor :game_timap_need_refresh
attr_reader :game_timap_id
CAN = FSL::ReisenMapExpansion::CAN
NOT_CAN = FSL::ReisenMapExpansion::NOT_CAN
HIGH = FSL::ReisenMapExpansion::HIGH
#--------------------------------------------------------------------------
# ● 初始化对像
#--------------------------------------------------------------------------
alias reisen_map_expansion_initialize initialize
def initialize
@game_timap_id = nil
@game_timap_need_refresh = false
@map_tile_xy_passage = FSL::ReisenMapExpansion::MAP_TILE_ID_PASSAGE
reisen_map_expansion_initialize
end
#--------------------------------------------------------------------------
# ● 可以通行判定
# x : X 坐标
# y : Y 坐标
# flag : 通行度标志(非交通工具时,一般为 0x01)
#--------------------------------------------------------------------------
alias reisen_map_expansion_passable? passable?
def passable?(x, y, flag = 0x01)
return false if @map_tile_xy_passage[[@map_id, x, y]] == [NOT_CAN]
reisen_map_expansion_passable?(x, y, flag)
end
#--------------------------------------------------------------------------
# ● 设置
# map_id : 地图 ID
#--------------------------------------------------------------------------
alias reisen_map_expansion_setup setup
def setup(map_id)
reisen_map_expansion_setup(map_id)
if FSL::ReisenMapExpansion::MAP_DATA[map_id] != nil
reisen_map_data = FSL::ReisenMapExpansion::MAP_DATA[map_id]
change_tilemap(reisen_map_data)
end
end
#--------------------------------------------------------------------------
# ● 设置单个坐标通行度
#--------------------------------------------------------------------------
def set_tile_id_passages(map_id, x, y, flag)
@map_tile_xy_passage[[map_id, x, y]] = flag
end
#--------------------------------------------------------------------------
# ● 获取通行度
#--------------------------------------------------------------------------
def get_passages
unless @game_timap_id
@passages = $data_system.passages
else
@passages = (load_data("Data/System_#{@game_timap_id}.rvdata")).passages
end
end
#--------------------------------------------------------------------------
# ● 刷新
#--------------------------------------------------------------------------
def refresh
if @map_id > 0
get_passages
for event in @events.values
event.refresh
end
for common_event in @common_events.values
common_event.refresh
end
end
@need_refresh = false
end
#--------------------------------------------------------------------------
# ● 更改单个地图元件通行度
#--------------------------------------------------------------------------
def chang_tile_passage(tile_id, flag)
if tile_id <= 2000
@passages[tile_id] = flag
end
end
#--------------------------------------------------------------------------
# ● 更改地图元件与通行度
#--------------------------------------------------------------------------
def change_tilemap(index)
if $scene.is_a?(Scene_Map)
@game_timap_id = index
get_passages
@game_timap_need_refresh = true
end
end
end
#==============================================================================
# ■ Spriteset_Map
#------------------------------------------------------------------------------
# 处理地图画面活动块和元件的类。本类在 Scene_Map 类的内部使用。
#==============================================================================
class Spriteset_Map
#--------------------------------------------------------------------------
# ● 生成地图元件
#--------------------------------------------------------------------------
def create_tilemap
@tilemap = Tilemap.new(@viewport1)
@titlemap_name = []
load_tilemap
end
#--------------------------------------------------------------------------
# ● 加载 原件
#--------------------------------------------------------------------------
def load_tilemap
(0..8).each do |i|
filename = "#{FSL::Timap_id::TIMAPID[i]}_#{$game_map.game_timap_id}"
if @titlemap_name[i] != filename
if FileTest.exist?("Graphics/System/" + filename + ".png")
@tilemap.bitmaps[i].dispose if @tilemap.bitmaps[i]
@tilemap.bitmaps[i] = Cache.system(filename)
@titlemap_name[i] = filename
else
@tilemap.bitmaps[i].dispose if @tilemap.bitmaps[i]
@tilemap.bitmaps[i] = Cache.system(FSL::Timap_id::TIMAPID[i])
@titlemap_name[i] = FSL::Timap_id::TIMAPID[i] + "_"
end
end
end
@tilemap.map_data = $game_map.data
@tilemap.passages = $game_map.passages
end
#--------------------------------------------------------------------------
# ● 更新地图元件
#--------------------------------------------------------------------------
alias reisen_update_tilemap update_tilemap
def update_tilemap
if $game_map.game_timap_need_refresh
load_tilemap
$game_map.game_timap_need_refresh = false
end
reisen_update_tilemap
end
#--------------------------------------------------------------------------
# ● 更改地图元件
#--------------------------------------------------------------------------
def change_tilemap
load_tilemap
end
end
#==============================================================================
# ■ Scene_Map
#------------------------------------------------------------------------------
# 处理地图画面的类。
#==============================================================================
class Scene_Map < Scene_Base
#--------------------------------------------------------------------------
# ● 定义实例变量
#--------------------------------------------------------------------------
attr_accessor :spriteset
end
#==============================================================================
# ■ Game_Interpreter
#------------------------------------------------------------------------------
# 执行事件命令的解释器。本类在 Game_Map 类、Game_Troop 类、与
# Game_Event 类的内部使用。
#==============================================================================
class Game_Interpreter
#--------------------------------------------------------------------------
# ● 常量
#--------------------------------------------------------------------------
CAN = FSL::ReisenMapExpansion::CAN
NOT_CAN = FSL::ReisenMapExpansion::NOT_CAN
HIGH = FSL::ReisenMapExpansion::HIGH
#--------------------------------------------------------------------------
# ● 更改单个地图元件通行度
#--------------------------------------------------------------------------
def chang_tile_passage(tile_id, flag)
$game_map.chang_tile_passage(tile_id, flag)
end
#--------------------------------------------------------------------------
# ● 切换地图元件与通行度
#--------------------------------------------------------------------------
def change_tilemap(index)
$game_map.change_tilemap(index)
end
#--------------------------------------------------------------------------
# ● 设置单个坐标通行度
#--------------------------------------------------------------------------
def set_id_passages(map_id, x, y, flag)
$game_map.set_tile_id_passages(map_id, x, y, flag)
end
end
复制代码
下载范例(2011-6-14日更新): 正在上传
最后是用法,有点点复杂.
1. 请先记住几个关键的文件
1) System.rvdata 包含通行度的数据文件 ,位于 data/ 里
2) MapXXX.rvdata 地图数据文件,包含 ID 为 XXX 的地图所有数据,
位于 data/ 里
3) TileB.png TileC.png TileD.png TileE.png
包含地图元件的图片素材, B 对应 B图块, 以此类推, 位于
Graphics/System/ 里
2. 当你的地图元件不够使用的时候,请打开另一个 VX ,将需要相加的地图
元件添加或替换新建的工程(
个人认为自己工程的复制更好
)里,然后画
地图,设定事件什么的.
3. 都做完后,请一次点击 测试 -> 打开游戏目录 , 找到 Data 文件夹, 将里
面的 System.rvdata 重命名为 System_X.rvdata, 其中 X 为数字, 要记住这个
数字,因为后面也要使用. 将需要替换的图块也这样重命名, 比如我替换掉了 B
图块, 那么将 TileB.png 重命名为 TileB_X.png 这里的 X 要与之前的相同. 将
重命名后的 System_X.rvdata TileB_X.png MapXXX.rvdata
(这里
要注意 MapXXX 不要和自己工程里的地图数据重名)
复制到自己的游戏
工程的响应文件夹里.
4. 以上完成后, 使用事件脚本, 写上脚本: change_tilemap(index, str, bool)
其中:
index: 图块替换方案ID , 其实就是第 3 步里的那个 X . 填写 nil 的话,就
是使用这个工程默认的图块和通行度
str: 需要替换的图块, 比如需要替换 B 图块, 就是 "B"; 替换多个就写在一
起, 比如要替换 B D E 三个, 那么就是 "BDE"
bool : 保留, 填 0 就可以了.
比如范例的: change_tilemap(2, "B", false) 使用方案2 , 替换掉 B 图块. false 无视.
5. 目前只能替换 B C D E 四个图块的素材, 但是 通行度 是可以全部替换掉的.
6. 可以动态修改, 也就是说, 不需要切换地图就可以看到更改后的地图~~
[line]2[/line]
[1.2] 版本更新后使用方法:
1. 替换默认图块等方法参考上面。
2. 针对 B C D E 图块的通行度修改,
注意,是对某个图块的全部修改,通行度替换后,修改无效。
使用方法:
事件 -> 脚本 -> chang_tile_passage(tile_id, flag)
其中: tile_id -> 图块ID 0~2000 之间
flag -> 通行标志,可以有如下值 CAN:可以通行,NOT_CAN:不可通行
3. 针对坐标的通行度修改,
注意,是对某个坐标的修改,通行度替换后,修改依旧有效。
使用方法:
事件 -> 脚本 -> chang_tile_passageset_id_passages(map_id, x, y, flag)
其中: map_id, x, y -> 地图ID , X Y坐标
flag -> 通行标志,可以有如下值 CAN:可以通行,NOT_CAN:不可通行
4. 附送图块ID 查看脚本, 使用时,填写 "2:XX" 那个 XX数字即可
class Game_Map
#--------------------------------------------------------------------------
# ● 获取图块ID
#--------------------------------------------------------------------------
def get_tile_id(x, y, n)
@map.data[x, y, (n % 3)]
end
end
class Window_reisen_Map < Window_Base
def initialize
super(0, 0, 100, 140)
@old_x, @old_y = -1, -1
update
end
def update
if @old_x != $game_player.x or @old_y != $game_player.y
@old_x, @old_y = $game_player.x, $game_player.y
self.contents.clear
self.contents.draw_text(0, 0, 100, 32, "0:#{$game_map.get_tile_id(@old_x, @old_y, 0) - 2000}")
self.contents.draw_text(0,32, 100, 32, "1:#{$game_map.get_tile_id(@old_x, @old_y, 1)}")
self.contents.draw_text(0,64, 100, 32, "2:#{$game_map.get_tile_id(@old_x, @old_y, 2)}")
end
end
end
class Scene_Map < Scene_Base
alias reisen_old_initialize initialize
def initialize
reisen_old_initialize
@window_reisen_map = Window_reisen_Map.new
end
alias reisen_old_update update
def update
@window_reisen_map.update
reisen_old_update
end
alias reisen_old_terminate terminate
def terminate
reisen_old_terminate
@window_reisen_map.dispose
end
end
复制代码
就是这样的吧, 有什么 BUG 或者建议请回帖说明.
MapExpansion.rar
2011-6-14 14:23 上传
点击文件名下载附件
2.65 MB, 下载次数: 32419
作者:
DeathKing
时间:
2010-8-28 18:08
好详尽的帮助O_O
作者:
夕阳武士
时间:
2010-8-28 18:10
了解了,看上去用法也是相当简单,回去测试一下!待编辑
作者:
untrueterry
时间:
2010-8-28 18:36
提示:
作者被禁止或删除 内容自动屏蔽
作者:
八云紫
时间:
2010-8-28 18:43
回复
untrueterry
的帖子
显示和通行度测试了,问题应该没有.
现在只是脚本调用函数的时候就会马上改变,有点不好就是了~~
作者:
q375430574
时间:
2010-8-28 22:21
提示:
作者被禁止或删除 内容自动屏蔽
作者:
wangswz
时间:
2010-8-28 22:58
重命名为 System_X.rvdata之后不用切换就能在编辑里直接看到?还是必须要使用change_tilemap(index, str, bool)?使用事件的话就是半自动的?需要执行自动事件?
我记得有个简单扩张的也是需要System_X.rvdata这样 但是编辑地图的话还是只能看到当前图块的 只能进入游戏才能看到替换的样子
作者:
untrueterry
时间:
2010-8-28 23:01
提示:
作者被禁止或删除 内容自动屏蔽
作者:
八云紫
时间:
2010-8-28 23:05
回复
wangswz
的帖子
可以打开另一个 VX 来画地图. 这样就可以看到了.
不过 推荐是 将自己的工程复制一份, 然后用替换后的图块来画地图, 这样可以避免新建地图的时候, 新地图的信息问题.
画好后 , 再修改复制到自己原来的工程就可以了~~~
作者:
untrueterry
时间:
2010-8-28 23:17
提示:
作者被禁止或删除 内容自动屏蔽
作者:
八云紫
时间:
2010-8-28 23:26
回复
untrueterry
的帖子
图层什么的不需要考虑,直接用默认的. 是不是图层也需要换掉?
自动执行的话,正在更新~~~
作者:
木葬枫
时间:
2010-8-29 00:44
咱是来摸摸女仆酱的~~
作者:
八云紫
时间:
2010-8-29 14:25
本帖最后由 铃仙·优昙华院·因幡 于 2010-8-31 14:38 编辑
更新了下脚本, 更新内容如下:
1. 添加 A系列图块替换
2. 添加切换地图自动切换图块
PS: 图层问题在研究
作者:
沉影不器
时间:
2010-9-3 20:35
提示:
作者被禁止或删除 内容自动屏蔽
作者:
八云紫
时间:
2010-9-3 20:58
回复
沉影不器
的帖子
多个 VX 来协助, 会好一点~~~
虽然还是麻烦~~
作者:
lzy136188230
时间:
2010-9-3 22:36
“添加切换地图自动切换图块”
这个功能要设置哪里吗?
作者:
八云紫
时间:
2010-9-4 12:39
回复
lzy136188230
的帖子
前几行有个module ,里面可以填上 地图ID => 需要转换的图块编号
比如 1 => "B" 切换带 1号地图的时候, B图块切换~~
作者:
八云紫
时间:
2010-9-13 11:51
好吧,无聊的时候,更新下脚本。~~~~ > <
作者:
1049079876
时间:
2011-1-5 20:15
提示:
作者被禁止或删除 内容自动屏蔽
作者:
Lenneth
时间:
2011-4-27 14:48
本帖最后由 Lenneth 于 2011-4-29 17:16 编辑
4.29
修正了菜单ESC返回地图恢复成原图块的错误(本来原版没有这个问题的说= =)
*******************
不知道这算不算挖坟,嘛,不管那些了
今天下了这个图块扩充脚本后,使用时候发现一些问题
1:无法同时修改复数图块,“BCD”类似这样的参数无效
2:切换地图的时候会发生错误
没解决的问题:
无论设置一个还是全部图块,通行是全部一起修改的,要想单独图块生效只能手动设置,脚本里有说明
以上问题不知道别人是否也出现过,既然弄了半天修改好(至少我自己在用了= =),就顺便发上来吧
如果有同样问题的可以试试这个修改版
MapEx_Fix.rar
(2.17 MB, 下载次数: 383)
2011-4-29 17:13 上传
点击文件名下载附件
作者:
铃仙·优昙华院·因幡
时间:
2011-4-27 15:08
回复
Lenneth
的帖子
"无论设置一个还是全部图块,通行是全部一起修改的,要想单独图块生效只能手动设置"
记得是有 按照 地图坐标来时啥的来修改通行度的. 另外, 对图块来修改通行度, 一定是对全部的这个图块有效的.
修改复数图块 啥, 其实懒得写, 嘎. 用的人不多.
切换地图的时候会发生错误, 求错误类型.
作者:
Lenneth
时间:
2011-4-27 17:35
通行问题不大,所以我也懒的改= =
原来的脚本来回切换地图会出现类似“找不到文件TileB_2_2.png”这样的问题
总之脚本还是蛮好的,自动执行的设置很方便,先谢过了
作者:
风雪优游
时间:
2011-6-14 11:57
更新顶起来。
作者:
八云紫
时间:
2011-6-14 14:29
好吧, 更新了一下.
内容啥的就不说了. 说下使用方法, 和之前的方法一样, 只是 参数2 和 3 没意义.
脚本会自动的去读取 图块_序号.png 的图块. 没有的话, 就读取默认的.
荣获想把图块都切换回 VX 默认的那个的话, 方案序号请填写 nil
八云紫于2011-6-14 14:29补充以下内容:
好吧, 更新了一下.
内容啥的就不说了. 说下使用方法, 和之前的方法一样, 只是 参数2 和 3 没意义.
脚本会自动的去读取 图块_序号.png 的图块. 没有的话, 就读取默认的.
荣获想把图块都切换回 VX 默认的那个的话, 方案序号请填写 nil
作者:
zh99998
时间:
2011-6-14 14:53
来拜一下紫大人嗯
更新的好及时
我上次测试的时候居然没发现有bug- -orz
作者:
5810707
时间:
2011-9-29 20:56
能做到修改指定坐标的图块吗?
作者:
Front
时间:
2011-11-30 21:56
附件下载不了.
作者:
红十字
时间:
2011-12-4 12:12
好东西,十分感谢
红十字于2011-12-4 12:13补充以下内容:
DDDDDDDD
作者:
palpal5
时间:
2012-11-6 08:29
回去测试一下!待编辑
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1