| 赞 | 1  | 
 
| VIP | 20 | 
 
| 好人卡 | 8 | 
 
| 积分 | 4 | 
 
| 经验 | 6181 | 
 
| 最后登录 | 2022-8-5 | 
 
| 在线时间 | 271 小时 | 
 
 
 
 
 
Lv2.观梦者 神隐的主犯 
	- 梦石
 - 0 
 
        - 星屑
 - 383 
 
        - 在线时间
 - 271 小时
 
        - 注册时间
 - 2008-2-22
 
        - 帖子
 - 7691
 
 
  
 
 | 
	
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员  
 
x
 
 本帖最后由 八云紫 于 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. 可以动态修改, 也就是说, 不需要切换地图就可以看到更改后的地图~~ 
  
  
 
 
   [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 或者建议请回帖说明. |   
 
评分
- 
查看全部评分
 
 
 
 
 
 |