Project1

标题: 猜拳系统、钓鱼系统、符文系统、银行系统以及迷你地图 [打印本页]

作者: 浪使者    时间: 2008-9-9 05:20
标题: 猜拳系统、钓鱼系统、符文系统、银行系统以及迷你地图
《流浪猎人》猜拳系统、钓鱼系统、符文系统、银行系统以及迷你地图
把《流浪猎人》的内置各比较有特色的系统单独放出来给大家共享使用。

简介:

猜拳系统--实现全部猜拳功能,附带下赌注、扣减手续费等功能。
该猜拳系统小游戏会在《流浪猎人》的后续版本中出现。
http://rpg.blue/upload_program/f ... ��统_101336853.rar
钓鱼系统--《流浪猎人》原有钓鱼系统直接搬来使用,比赛部分仍然没有更新放出(作者懒啊555~)
http://rpg.blue/upload_program/f ... ��统_101339909.rar
符文系统--取材于排行榜系统,把它很另类的用于单机游戏。
http://rpg.blue/upload_program/f ... ��统_101339733.rar
银行系统--在原6R发布的银行系统基础上,做了计算公式的核心改变以及选项显示方式。
http://rpg.blue/upload_program/f ... ��统_101336992.rar

现在从《流浪猎人》里分割出来后,各个系统可单独或组合使用。

迷你地图脚本浪使者汉化版。。该迷你地图已经在《流浪猎人》的后续版本中使用了。
(可能该迷你地图脚本已经被6R发布使用了,我只是发个汉化的版)

  1. #===============================================================
  2. # ● [VX] ◦迷你地图 ◦ □
  3. # * 无须图片的迷你地图脚本,浪使者倾情汉化 *
  4. #--------------------------------------------------------------
  5. # ◦ by Woratana [原作者]
  6. # ◦ 用于 RPG Maker VX  
  7. # ◦ 最近更新: 09/06/2008
  8. # ◦ 版本: 1.0 Beta
  9. #--------------------------------------------------------------
  10. # ◦ 特别感谢: KGC 的 XP 迷你地图脚本,
  11. # 没有他的迷你地图脚本,这个就不会被做出来.
  12. #--------------------------------------------------------------

  13. module MiniMap
  14.   #===========================================================================
  15.   # [START]迷你地图脚本设置部分 地图名前+[NOMAP] 不显示
  16.   #---------------------------------------------------------------------------
  17.   SWITCH_NO_MINIMAP = 10 #  打开这个开关的话就不显示迷你地图
  18.    
  19.   MAP_RECT = [410, 20, 100, 100] # 迷你地图的大小和位置
  20.   # [X, Y, Width, Height]
  21.   # 你可以用调用脚本的方法任意改变他:
  22.   # $game_system.minimap = [X, Y, Width, Height]

  23.   MAP_Z = 0 # 迷你地图的Z轴
  24.   # 增加这个数值,如果迷你地图显示在某些物体下面的话(被覆盖)。

  25.   GRID_SIZE = 5 # 引导大小,建议数值大于3.
  26.   
  27.   MINIMAP_BORDER_COLOR = Color.new(0, 0, 255, 160) # 色彩设定
  28.   # Color.new(Red, Green, Blue, Opacity)
  29.   MINIMAP_BORDER_SIZE = 2
  30.   
  31.   FOREGROUND_COLOR = Color.new(224, 224, 255, 160) # 可通过物颜色
  32.   BACKGROUND_COLOR = Color.new(0, 0, 0, 160) # 不可通过物颜色

  33.   USE_OUTLINE_PLAYER = true # 是否描绘的角色?
  34.   PLAYER_OUTLINE_COLOR = Color.new(0, 0, 0, 192) # 角色颜色
  35.   USE_OUTLINE_EVENT = true # 是否描绘特殊事件?(如商人、敌人NPC等)
  36.   EVENT_OUTLINE_COLOR = Color.new(255, 255, 255, 192) # 特殊事件颜色
  37.   
  38.   PLAYER_COLOR = Color.new(255, 0, 0, 192) # 角色颜色设定
  39.   #---------------------------------------------------------------------------

  40.   OBJECT_COLOR = {} # 不要改变或删除这一行!
  41.   #===============================================================
  42.   # * 设置关键字和颜色
  43.   #---------------------------------------------------------------
  44.   # ** 例如:
  45.   # OBJECT_COLOR['keyword'] = Color.new(Red, Green, Blue, Opacity)
  46.   #-------------------------------------------------------------
  47.   # * 'keyword': 你想放到公共事件里来显示的颜色
  48.   # ** 标记: 'keyword' 是很关键的!
  49.   # * Color.new(...): 你需要的颜色
  50.   # 你可输入 0 - 255 的可选色彩范围 (Red, Green, Blue, Opacity)
  51.   #-------------------------------------------------------------
  52.   OBJECT_COLOR['npc'] = Color.new(30,144,255,160)
  53.   OBJECT_COLOR['treasure'] = Color.new(0,255,255,160)
  54.   OBJECT_COLOR['enemy'] = Color.new(139,35,35,160)
  55.   OBJECT_COLOR['merchant'] = Color.new(255,255,0,160)
  56.   
  57.   #===========================================================================
  58.   # * [说明] 标签:
  59.   #---------------------------------------------------------------------------
  60.   # 改变这些关闭迷你地图 & 或设置显示迷你地图~
  61.   #-----------------------------------------------------------------------
  62.   TAG_NO_MINIMAP = '[NOMAP]'
  63.   TAG_EVENT = 'MMEV'
  64.   #---------------------------------------------------------------------------

  65.   #---------------------------------------------------------------------------
  66.   # [END] 迷你地图脚本设置部分
  67.   #===========================================================================
  68.   
  69.   def self.refresh
  70.     if $scene.is_a?(Scene_Map)
  71.       $scene.spriteset.minimap.refresh
  72.     end
  73.   end
  74.   
  75.   def self.update_object
  76.     if $scene.is_a?(Scene_Map)
  77.       $scene.spriteset.minimap.update_object_list
  78.     end
  79.   end
  80. end

  81. #==============================================================================
  82. # ■ RPG::MapInfo
  83. #==============================================================================
  84. class RPG::MapInfo
  85.   def name
  86.     return @name.gsub(/\[.*\]/) { }
  87.   end

  88.   def original_name
  89.     return @name
  90.   end

  91.   def show_minimap?
  92.     return [email protected]?(MiniMap::TAG_NO_MINIMAP)
  93.   end
  94. end
  95. #==============================================================================
  96. # ■ Game_System
  97. #==============================================================================
  98. class Game_System
  99.   attr_accessor :minimap
  100.   alias wora_minimap_gamsys_ini initialize
  101.   
  102.   def initialize
  103.     wora_minimap_gamsys_ini
  104.     @minimap = MiniMap::MAP_RECT
  105.   end
  106.   
  107.   def show_minimap
  108.     return !$game_switches[MiniMap::SWITCH_NO_MINIMAP]
  109.   end
  110. end
  111. #==============================================================================
  112. # ■ Game_Map
  113. #==============================================================================
  114. class Game_Map
  115.   alias wora_minimap_gammap_setup setup
  116.   def setup(map_id)
  117.     wora_minimap_gammap_setup(map_id)
  118.     @db_info = load_data('Data/MapInfos.rvdata') if @db_info.nil?
  119.     @map_info = @db_info[map_id]
  120.   end
  121.   
  122.   def show_minimap?
  123.     return @map_info.show_minimap?
  124.   end
  125. end
  126. #==============================================================================
  127. # ■ Game_Event
  128. #==============================================================================
  129. class Game_Event < Game_Character
  130.   def mm_comment?(comment, return_comment = false )
  131.     if [email protected]?
  132.       for i in [email protected] - 1
  133.         next if @list[i].code != 108
  134.         if @list[i].parameters[0].include?(comment)
  135.           return @list[i].parameters[0] if return_comment
  136.           return true
  137.         end
  138.       end
  139.     end
  140.     return '' if return_comment
  141.     return false
  142.   end
  143. end
  144. #==============================================================================
  145. # ■ Game_MiniMap
  146. #------------------------------------------------------------------------------
  147. class Game_MiniMap
  148.   def initialize(tilemap)
  149.     @tilemap = tilemap
  150.     refresh
  151.   end

  152.   def dispose
  153.     @border.bitmap.dispose
  154.     @border.dispose
  155.     @map_sprite.bitmap.dispose
  156.     @map_sprite.dispose
  157.     @object_sprite.bitmap.dispose
  158.     @object_sprite.dispose
  159.     @position_sprite.bitmap.dispose
  160.     @position_sprite.dispose
  161.   end

  162.   def visible
  163.     return @map_sprite.visible
  164.   end

  165.   def visible=(value)
  166.     @map_sprite.visible = value
  167.     @object_sprite.visible = value
  168.     @position_sprite.visible = value
  169.     @border.visible = value
  170.   end

  171.   def refresh
  172.     @mmr = $game_system.minimap
  173.     map_rect = Rect.new(@mmr[0], @mmr[1], @mmr[2], @mmr[3])
  174.     grid_size = [MiniMap::GRID_SIZE, 1].max

  175.     @x = 0
  176.     @y = 0
  177.     @size = [map_rect.width / grid_size, map_rect.height / grid_size]

  178.     @border = Sprite.new
  179.     @border.x = map_rect.x - MiniMap::MINIMAP_BORDER_SIZE
  180.     @border.y = map_rect.y - MiniMap::MINIMAP_BORDER_SIZE
  181.     b_width = map_rect.width + (MiniMap::MINIMAP_BORDER_SIZE * 2)
  182.     b_height = map_rect.height + (MiniMap::MINIMAP_BORDER_SIZE * 2)
  183.     @border.bitmap = Bitmap.new(b_width, b_height)
  184.     @border.bitmap.fill_rect(@border.bitmap.rect, MiniMap::MINIMAP_BORDER_COLOR)
  185.     @border.bitmap.clear_rect(MiniMap::MINIMAP_BORDER_SIZE, MiniMap::MINIMAP_BORDER_SIZE,
  186.     @border.bitmap.width - (MiniMap::MINIMAP_BORDER_SIZE * 2),
  187.     @border.bitmap.height - (MiniMap::MINIMAP_BORDER_SIZE * 2))
  188.    
  189.     @map_sprite = Sprite.new
  190.     @map_sprite.x = map_rect.x
  191.     @map_sprite.y = map_rect.y
  192.     @map_sprite.z = MiniMap::MAP_Z
  193.     bitmap_width = $game_map.width * grid_size + map_rect.width
  194.     bitmap_height = $game_map.height * grid_size + map_rect.height
  195.     @map_sprite.bitmap = Bitmap.new(bitmap_width, bitmap_height)
  196.     @map_sprite.src_rect = map_rect

  197.     @object_sprite = Sprite.new
  198.     @object_sprite.x = map_rect.x
  199.     @object_sprite.y = map_rect.y
  200.     @object_sprite.z = MiniMap::MAP_Z + 1
  201.     @object_sprite.bitmap = Bitmap.new(bitmap_width, bitmap_height)
  202.     @object_sprite.src_rect = map_rect

  203.     @position_sprite = Sprite_Base.new
  204.     @position_sprite.x = map_rect.x + @size[0] / 2 * grid_size
  205.     @position_sprite.y = map_rect.y + @size[1] / 2 * grid_size
  206.     @position_sprite.z = MiniMap::MAP_Z + 2
  207.    
  208.     bitmap = Bitmap.new(grid_size, grid_size)
  209.     # Player's Outline
  210.     if MiniMap::USE_OUTLINE_PLAYER and MiniMap::GRID_SIZE >= 3
  211.       bitmap.fill_rect(bitmap.rect, MiniMap::PLAYER_OUTLINE_COLOR)
  212.       brect = Rect.new(bitmap.rect.x + 1, bitmap.rect.y + 1, bitmap.rect.width - 2,
  213.         bitmap.rect.height - 2)
  214.       bitmap.clear_rect(brect)
  215.     else
  216.       brect = bitmap.rect
  217.     end
  218.    
  219.     bitmap.fill_rect(brect, MiniMap::PLAYER_COLOR)
  220.     @position_sprite.bitmap = bitmap

  221.     draw_map
  222.     update_object_list
  223.     draw_object
  224.     update_position
  225.   end

  226.   def draw_map
  227.     bitmap = @map_sprite.bitmap
  228.     bitmap.fill_rect(bitmap.rect, MiniMap::BACKGROUND_COLOR)
  229.     map_rect = Rect.new(@mmr[0], @mmr[1], @mmr[2], @mmr[3])
  230.     grid_size = [MiniMap::GRID_SIZE, 1].max
  231.    
  232.     $game_map.width.times do |i|
  233.       $game_map.height.times do |j|
  234.         if !$game_map.passable?(i, j)
  235.           next
  236.         end
  237.         rect = Rect.new(map_rect.width / 2 + grid_size * i,
  238.           map_rect.height / 2 + grid_size * j,
  239.           grid_size, grid_size)
  240.         if grid_size >= 3
  241.           if !$game_map.passable?(i, j)
  242.             rect.height -= 1
  243.             rect.x += 1
  244.             rect.width -= 1
  245.             rect.width -= 1
  246.             rect.y += 1
  247.             rect.height -= 1
  248.           end
  249.         end
  250.         bitmap.fill_rect(rect, MiniMap::FOREGROUND_COLOR)
  251.       end
  252.     end
  253.   end

  254.   def update_object_list
  255.     @object_list = {}
  256.     $game_map.events.values.each do |e|
  257.       comment = e.mm_comment?(MiniMap::TAG_EVENT, true)
  258.       if comment != ''
  259.         type = comment.gsub(/#{MiniMap::TAG_EVENT}/){}.gsub(/\s+/){}
  260.         @object_list[type] = [] if @object_list[type].nil?
  261.         @object_list[type] << e
  262.       end
  263.     end
  264.   end

  265.   def draw_object
  266.     bitmap = @object_sprite.bitmap
  267.     bitmap.clear
  268.     map_rect = Rect.new(@mmr[0], @mmr[1], @mmr[2], @mmr[3])
  269.     grid_size = [MiniMap::GRID_SIZE, 1].max
  270.     rect = Rect.new(0, 0, grid_size, grid_size)
  271.     mw = map_rect.width / 2
  272.     mh = map_rect.height / 2

  273.     @object_list.each do |key, events|
  274.       color = MiniMap::OBJECT_COLOR[key]
  275.       next if events.nil? or color.nil?
  276.       events.each do |obj|
  277.         if !obj.character_name.empty?
  278.           rect.x = mw + obj.real_x * grid_size / 256
  279.           rect.y = mh + obj.real_y * grid_size / 256
  280.           # Event's Outline
  281.           if MiniMap::USE_OUTLINE_EVENT and MiniMap::GRID_SIZE >= 3
  282.             bitmap.fill_rect(rect, MiniMap::EVENT_OUTLINE_COLOR)
  283.             brect = Rect.new(rect.x + 1, rect.y + 1, rect.width - 2,
  284.             rect.height - 2)
  285.             bitmap.clear_rect(brect)
  286.           else
  287.             brect = bitmap.rect
  288.           end
  289.           bitmap.fill_rect(brect, color)
  290.         end
  291.       end
  292.     end
  293.   end

  294.   def update
  295.     if @mmr != $game_system.minimap
  296.       dispose
  297.       refresh
  298.     end
  299.     draw_object
  300.     update_position
  301.     if @map_sprite.visible
  302.       @map_sprite.update
  303.       @object_sprite.update
  304.       @position_sprite.update
  305.     end
  306.   end

  307.   def update_position
  308.     map_rect = Rect.new(@mmr[0], @mmr[1], @mmr[2], @mmr[3])
  309.     grid_size = [MiniMap::GRID_SIZE, 1].max
  310.     sx = $game_player.real_x * grid_size / 256
  311.     sy = $game_player.real_y * grid_size / 256
  312.     @map_sprite.src_rect.x = sx
  313.     @map_sprite.src_rect.y = sy
  314.     @object_sprite.src_rect.x = sx
  315.     @object_sprite.src_rect.y = sy
  316.   end
  317. end
  318. #==============================================================================
  319. # ■ Spriteset_Map
  320. #------------------------------------------------------------------------------
  321. class Spriteset_Map
  322.   attr_reader :minimap
  323.   alias wora_minimap_sprsetmap_ini initialize
  324.   alias wora_minimap_sprsetmap_dis dispose
  325.   alias wora_minimap_sprsetmap_upd update
  326.   
  327.   def initialize
  328.     wora_minimap_sprsetmap_ini
  329.     if $game_map.show_minimap?
  330.       @minimap = Game_MiniMap.new(@tilemap)
  331.       $game_system.show_minimap = true if $game_system.show_minimap.nil?
  332.       @minimap.visible = $game_system.show_minimap
  333.     end
  334.   end
  335.   
  336.   def dispose
  337.     @minimap.dispose if [email protected]?
  338.     wora_minimap_sprsetmap_dis
  339.   end

  340.   def update
  341.     if [email protected]?
  342.       if $game_system.show_minimap
  343.         @minimap.visible = true
  344.         @minimap.update
  345.       else
  346.         @minimap.visible = false
  347.       end
  348.     end
  349.     wora_minimap_sprsetmap_upd
  350.   end
  351. end
  352. #==============================================================================
  353. # ■ Scene_Map
  354. #------------------------------------------------------------------------------
  355. class Scene_Map < Scene_Base
  356.   attr_reader :spriteset
  357. end
复制代码
补充:迷你地图标识显示

标记:MMEV merchant     (标识商人)
标记:MMEV npc          (标识一般的NPC)
标记:MMEV enemy        (标识敌人)

在人物事件的第一行插入以上的分类标识就ok了。。

精灵更新的地图脚本:

  1. #===============================================================
  2. # ● [VX] ◦迷你地图 ◦ □
  3. # * 无须图片的迷你地图脚本,浪使者倾情汉化 *
  4. #--------------------------------------------------------------
  5. # ◦ by Woratana [原作者]
  6. # ◦ 用于 RPG Maker VX  
  7. # ◦ 最近更新: 09/09/2008
  8. # ◦ 版本: 1.1 Beta
  9. #--------------------------------------------------------------
  10. # ◦ 特别感谢: KGC 的 XP 迷你地图脚本,
  11. # 没有他的迷你地图脚本,这个就不会被做出来.
  12. # 精灵使者更新:请在注释的第一行写入关键字,关键字可以在下面添加。
  13. #--------------------------------------------------------------

  14. module MiniMap
  15.   #===========================================================================
  16.   # [START]迷你地图脚本设置部分 地图名前+[NOMAP] 不显示
  17.   #---------------------------------------------------------------------------
  18.   SWITCH_NO_MINIMAP = 10 #  打开这个开关的话就不显示迷你地图
  19.    
  20.   MAP_RECT = [410, 20, 100, 100] # 迷你地图的大小和位置
  21.   # [X, Y, Width, Height]
  22.   # 你可以用调用脚本的方法任意改变他:
  23.   # $game_system.minimap = [X, Y, Width, Height]

  24.   MAP_Z = 0 # 迷你地图的Z轴
  25.   # 增加这个数值,如果迷你地图显示在某些物体下面的话(被覆盖)。

  26.   GRID_SIZE = 8 # 引导大小,建议数值大于3.
  27.   
  28.   MINIMAP_BORDER_COLOR = Color.new(0, 0, 255, 160) # 色彩设定
  29.   # Color.new(Red, Green, Blue, Opacity)
  30.   MINIMAP_BORDER_SIZE = 2
  31.   
  32.   FOREGROUND_COLOR = Color.new(224, 224, 255, 160) # 可通过物颜色
  33.   BACKGROUND_COLOR = Color.new(0, 0, 0, 160) # 不可通过物颜色

  34.   USE_OUTLINE_PLAYER = true # 是否描绘的角色?
  35.   PLAYER_OUTLINE_COLOR = Color.new(0, 0, 0, 192) # 角色颜色
  36.   USE_OUTLINE_EVENT = true # 是否描绘特殊事件?(如商人、敌人NPC等)
  37.   EVENT_OUTLINE_COLOR = Color.new(255, 255, 255, 192) # 特殊事件颜色
  38.   
  39.   PLAYER_COLOR = Color.new(255, 0, 0, 192) # 角色颜色设定
  40.   #---------------------------------------------------------------------------

  41.   OBJECT_COLOR = {} # 不要改变或删除这一行!
  42.   #===============================================================
  43.   # * 设置关键字和颜色
  44.   #---------------------------------------------------------------
  45.   # ** 例如:
  46.   # OBJECT_COLOR['keyword'] = Color.new(Red, Green, Blue, Opacity)
  47.   #-------------------------------------------------------------
  48.   # * 'keyword': 你想放到公共事件里来显示的颜色
  49.   # ** 标记: 'keyword' 是很关键的!
  50.   # * Color.new(...): 你需要的颜色
  51.   # 你可输入 0 - 255 的可选色彩范围 (Red, Green, Blue, Opacity)
  52.   #-------------------------------------------------------------
  53.   OBJECT_COLOR['npc'] = Color.new(30,144,255,160)
  54.   OBJECT_COLOR['treasure'] = Color.new(0,255,255,160)
  55.   OBJECT_COLOR['enemy'] = Color.new(139,35,35,160)
  56.   OBJECT_COLOR['merchant'] = Color.new(255,255,0,160)
  57.   OBJECT_COLOR['teleport'] = Color.new(255,128,0,160)
  58.   OBJECT_COLOR['door'] = Color.new(0,255,128,160)
  59.   
  60.   
  61.   #===========================================================================
  62.   # * [说明] 标签:
  63.   #---------------------------------------------------------------------------
  64.   # 改变这些关闭迷你地图 & 或设置显示迷你地图~
  65.   # TAG_EVENT的关键字和OBJECT_COLOR关键字要对应。
  66.   #-----------------------------------------------------------------------
  67.   TAG_NO_MINIMAP = '[NOMAP]'
  68.   TAG_EVENT = ["npc","enemy","treasure","merchant","teleport","door"]
  69.   #---------------------------------------------------------------------------

  70.   #---------------------------------------------------------------------------
  71.   # [END] 迷你地图脚本设置部分
  72.   #===========================================================================
  73.   
  74.   def self.refresh
  75.     if $scene.is_a?(Scene_Map)
  76.       $scene.spriteset.minimap.refresh
  77.     end
  78.   end
  79.   
  80.   def self.update_object
  81.     if $scene.is_a?(Scene_Map)
  82.       $scene.spriteset.minimap.update_object_list
  83.     end
  84.   end
  85. end

  86. #==============================================================================
  87. # ■ RPG::MapInfo
  88. #==============================================================================
  89. class RPG::MapInfo
  90.   def name
  91.     return @name.gsub(/\[.*\]/) { }
  92.   end

  93.   def original_name
  94.     return @name
  95.   end

  96.   def show_minimap?
  97.     return [email protected]?(MiniMap::TAG_NO_MINIMAP)
  98.   end
  99. end
  100. #==============================================================================
  101. # ■ Game_System
  102. #==============================================================================
  103. class Game_System
  104.   attr_accessor :minimap
  105.   alias wora_minimap_gamsys_ini initialize
  106.   
  107.   def initialize
  108.     wora_minimap_gamsys_ini
  109.     @minimap = MiniMap::MAP_RECT
  110.   end
  111.   
  112.   def show_minimap
  113.     return !$game_switches[MiniMap::SWITCH_NO_MINIMAP]
  114.   end
  115. end
  116. #==============================================================================
  117. # ■ Game_Map
  118. #==============================================================================
  119. class Game_Map
  120.   alias wora_minimap_gammap_setup setup
  121.   def setup(map_id)
  122.     wora_minimap_gammap_setup(map_id)
  123.     @db_info = load_data('Data/MapInfos.rvdata') if @db_info.nil?
  124.     @map_info = @db_info[map_id]
  125.   end
  126.   
  127.   def show_minimap?
  128.     return @map_info.show_minimap?
  129.   end
  130. end
  131. #==============================================================================
  132. # ■ Game_Event
  133. #==============================================================================
  134. class Game_Event < Game_Character
  135.   def mm_comment?(comment, return_comment = false )
  136.     if [email protected]?
  137.       for i in [email protected] - 1
  138.         next if @list[i].code != 108
  139.         if comment.include?(@list[i].parameters[0])
  140.           return @list[i].parameters[0] if return_comment
  141.           return true
  142.         end
  143.       end
  144.     end
  145.     return '' if return_comment
  146.     return false
  147.   end
  148. end

  149. #==============================================================================
  150. # ■ Game_MiniMap
  151. #------------------------------------------------------------------------------
  152. class Game_MiniMap
  153.   def initialize(tilemap)
  154.     @tilemap = tilemap
  155.     refresh
  156.   end

  157.   def dispose
  158.     @border.bitmap.dispose
  159.     @border.dispose
  160.     @map_sprite.bitmap.dispose
  161.     @map_sprite.dispose
  162.     @object_sprite.bitmap.dispose
  163.     @object_sprite.dispose
  164.     @position_sprite.bitmap.dispose
  165.     @position_sprite.dispose
  166.   end

  167.   def visible
  168.     return @map_sprite.visible
  169.   end

  170.   def visible=(value)
  171.     @map_sprite.visible = value
  172.     @object_sprite.visible = value
  173.     @position_sprite.visible = value
  174.     @border.visible = value
  175.   end

  176.   def refresh
  177.     @mmr = $game_system.minimap
  178.     map_rect = Rect.new(@mmr[0], @mmr[1], @mmr[2], @mmr[3])
  179.     grid_size = [MiniMap::GRID_SIZE, 1].max

  180.     @x = 0
  181.     @y = 0
  182.     @size = [map_rect.width / grid_size, map_rect.height / grid_size]

  183.     @border = Sprite.new
  184.     @border.x = map_rect.x - MiniMap::MINIMAP_BORDER_SIZE
  185.     @border.y = map_rect.y - MiniMap::MINIMAP_BORDER_SIZE
  186.     b_width = map_rect.width + (MiniMap::MINIMAP_BORDER_SIZE * 2)
  187.     b_height = map_rect.height + (MiniMap::MINIMAP_BORDER_SIZE * 2)
  188.     @border.bitmap = Bitmap.new(b_width, b_height)
  189.     @border.bitmap.fill_rect(@border.bitmap.rect, MiniMap::MINIMAP_BORDER_COLOR)
  190.     @border.bitmap.clear_rect(MiniMap::MINIMAP_BORDER_SIZE, MiniMap::MINIMAP_BORDER_SIZE,
  191.     @border.bitmap.width - (MiniMap::MINIMAP_BORDER_SIZE * 2),
  192.     @border.bitmap.height - (MiniMap::MINIMAP_BORDER_SIZE * 2))
  193.    
  194.     @map_sprite = Sprite.new
  195.     @map_sprite.x = map_rect.x
  196.     @map_sprite.y = map_rect.y
  197.     @map_sprite.z = MiniMap::MAP_Z
  198.     bitmap_width = $game_map.width * grid_size + map_rect.width
  199.     bitmap_height = $game_map.height * grid_size + map_rect.height
  200.     @map_sprite.bitmap = Bitmap.new(bitmap_width, bitmap_height)
  201.     @map_sprite.src_rect = map_rect

  202.     @object_sprite = Sprite.new
  203.     @object_sprite.x = map_rect.x
  204.     @object_sprite.y = map_rect.y
  205.     @object_sprite.z = MiniMap::MAP_Z + 1
  206.     @object_sprite.bitmap = Bitmap.new(bitmap_width, bitmap_height)
  207.     @object_sprite.src_rect = map_rect

  208.     @position_sprite = Sprite_Base.new
  209.     @position_sprite.x = map_rect.x + @size[0] / 2 * grid_size
  210.     @position_sprite.y = map_rect.y + @size[1] / 2 * grid_size
  211.     @position_sprite.z = MiniMap::MAP_Z + 2
  212.    
  213.     bitmap = Bitmap.new(grid_size, grid_size)
  214.     # Player's Outline
  215.     if MiniMap::USE_OUTLINE_PLAYER and MiniMap::GRID_SIZE >= 3
  216.       bitmap.fill_rect(bitmap.rect, MiniMap::PLAYER_OUTLINE_COLOR)
  217.       brect = Rect.new(bitmap.rect.x + 1, bitmap.rect.y + 1, bitmap.rect.width - 2,
  218.         bitmap.rect.height - 2)
  219.       bitmap.clear_rect(brect)
  220.     else
  221.       brect = bitmap.rect
  222.     end
  223.    
  224.     bitmap.fill_rect(brect, MiniMap::PLAYER_COLOR)
  225.     @position_sprite.bitmap = bitmap

  226.     draw_map
  227.     update_object_list
  228.     draw_object
  229.     update_position
  230.   end

  231.   def draw_map
  232.     bitmap = @map_sprite.bitmap
  233.     bitmap.fill_rect(bitmap.rect, MiniMap::BACKGROUND_COLOR)
  234.     map_rect = Rect.new(@mmr[0], @mmr[1], @mmr[2], @mmr[3])
  235.     grid_size = [MiniMap::GRID_SIZE, 1].max
  236.    
  237.     $game_map.width.times do |i|
  238.       $game_map.height.times do |j|
  239.         if !$game_map.passable?(i, j)
  240.           next
  241.         end
  242.         rect = Rect.new(map_rect.width / 2 + grid_size * i,
  243.           map_rect.height / 2 + grid_size * j,
  244.           grid_size, grid_size)
  245.         if grid_size >= 3
  246.           if !$game_map.passable?(i, j)
  247.             rect.height -= 1
  248.             rect.x += 1
  249.             rect.width -= 1
  250.             rect.width -= 1
  251.             rect.y += 1
  252.             rect.height -= 1
  253.           end
  254.         end
  255.         bitmap.fill_rect(rect, MiniMap::FOREGROUND_COLOR)
  256.       end
  257.     end
  258.   end

  259.     def update_object_list
  260.     @object_list = {}
  261.     $game_map.events.values.each do |e|
  262.       comment = e.mm_comment?(MiniMap::TAG_EVENT, true)
  263.       if comment != ''
  264.         #type = comment.gsub(/#{MiniMap::TAG_EVENT}/){}.gsub(/\s+/){}
  265.         type = comment
  266.         @object_list[type] = [] if @object_list[type].nil?
  267.         @object_list[type] << e
  268.       end
  269.     end
  270.   end

  271.   def draw_object
  272.     bitmap = @object_sprite.bitmap
  273.     bitmap.clear
  274.     map_rect = Rect.new(@mmr[0], @mmr[1], @mmr[2], @mmr[3])
  275.     grid_size = [MiniMap::GRID_SIZE, 1].max
  276.     rect = Rect.new(0, 0, grid_size, grid_size)
  277.     mw = map_rect.width / 2
  278.     mh = map_rect.height / 2

  279.     @object_list.each do |key, events|
  280.       color = MiniMap::OBJECT_COLOR[key]
  281.       next if events.nil? or color.nil?
  282.       events.each do |obj|
  283.         #if !obj.character_name.empty?
  284.           rect.x = mw + obj.real_x * grid_size / 256
  285.           rect.y = mh + obj.real_y * grid_size / 256
  286.           # Event's Outline
  287.           if MiniMap::USE_OUTLINE_EVENT and MiniMap::GRID_SIZE >= 3
  288.             bitmap.fill_rect(rect, MiniMap::EVENT_OUTLINE_COLOR)
  289.             brect = Rect.new(rect.x + 1, rect.y + 1, rect.width - 2,
  290.             rect.height - 2)
  291.             bitmap.clear_rect(brect)
  292.           else
  293.             brect = bitmap.rect
  294.           end
  295.           bitmap.fill_rect(brect, color)
  296.         #end
  297.       end
  298.     end
  299.   end

  300.   def update
  301.     if @mmr != $game_system.minimap
  302.       dispose
  303.       refresh
  304.     end
  305.     update_object_list
  306.     draw_object
  307.     update_position
  308.     if @map_sprite.visible
  309.       @map_sprite.update
  310.       @object_sprite.update
  311.       @position_sprite.update
  312.     end
  313.   end

  314.   def update_position
  315.     map_rect = Rect.new(@mmr[0], @mmr[1], @mmr[2], @mmr[3])
  316.     grid_size = [MiniMap::GRID_SIZE, 1].max
  317.     sx = $game_player.real_x * grid_size / 256
  318.     sy = $game_player.real_y * grid_size / 256
  319.     @map_sprite.src_rect.x = sx
  320.     @map_sprite.src_rect.y = sy
  321.     @object_sprite.src_rect.x = sx
  322.     @object_sprite.src_rect.y = sy
  323.   end
  324. end
  325. #==============================================================================
  326. # ■ Spriteset_Map
  327. #------------------------------------------------------------------------------
  328. class Spriteset_Map
  329.   attr_reader :minimap
  330.   alias wora_minimap_sprsetmap_ini initialize
  331.   alias wora_minimap_sprsetmap_dis dispose
  332.   alias wora_minimap_sprsetmap_upd update
  333.   
  334.   def initialize
  335.     wora_minimap_sprsetmap_ini
  336.     if $game_map.show_minimap?
  337.       @minimap = Game_MiniMap.new(@tilemap)
  338.       $game_system.show_minimap = true if $game_system.show_minimap.nil?
  339.       @minimap.visible = $game_system.show_minimap
  340.     end
  341.   end
  342.   
  343.   def dispose
  344.     @minimap.dispose if [email protected]?
  345.     wora_minimap_sprsetmap_dis
  346.   end

  347.   def update
  348.     if [email protected]?
  349.       if $game_system.show_minimap
  350.         @minimap.visible = true
  351.         @minimap.update_object_list
  352.         @minimap.update
  353.       else
  354.         @minimap.visible = false
  355.       end
  356.     end
  357.     wora_minimap_sprsetmap_upd
  358.   end
  359. end
  360. #==============================================================================
  361. # ■ Scene_Map
  362. #------------------------------------------------------------------------------
  363. class Scene_Map < Scene_Base
  364.   attr_reader :spriteset
  365. end
复制代码
更新:
稍微扩大了地图的大小。
更新了:可以用非行走图的图块显示事件(例如传送等)
新添关键字teleport(传送点) 和door(门)
再度更新:
修正了VX事件更新(例如人物消失)以后小地图没有及时刷新的问题。
用法只要在需要显示的事件页里的第一行加注释,填写关键字就可以了。
作者: xiaokemj    时间: 2008-9-9 06:59
是事件的?是的就无视…
作者: xiaokemj    时间: 2008-9-9 07:03
是事件的?是的就无视…
作者: 风雪优游    时间: 2008-9-9 07:14
即便是事件的也有参考价值嘛

作者: zianyygy12    时间: 2008-9-9 09:26
顶··我支持你LZ!
希望再接再厉
作者: xiaokemj    时间: 2008-9-10 02:08
因为比较火星,而且比较简单,才54= =
作者: 仲秋启明    时间: 2008-9-10 03:53
不错
作者: hitlerson    时间: 2008-9-10 21:03
太牛B了 ,支持一個{/hx}
作者: 沉影不器    时间: 2008-9-11 23:19
提示: 作者被禁止或删除 内容自动屏蔽
作者: 精灵使者    时间: 2008-9-12 06:33
问题是,如何标记关键字?
作者: hitlerson    时间: 2008-9-12 18:40
恩,精灵都出新的了,偶屏蔽~~~
作者: 精灵使者    时间: 2008-9-13 02:22
精灵继续更新脚本。

  1. #===============================================================
  2. # ● [VX] ◦迷你地图 ◦ □
  3. # * 无须图片的迷你地图脚本,浪使者倾情汉化 *
  4. #--------------------------------------------------------------
  5. # ◦ by Woratana [原作者]
  6. # ◦ 用于 RPG Maker VX  
  7. # ◦ 最近更新: 09/06/2008
  8. # ◦ 版本: 1.0 Beta
  9. #--------------------------------------------------------------
  10. # ◦ 特别感谢: KGC 的 XP 迷你地图脚本,
  11. # 没有他的迷你地图脚本,这个就不会被做出来.
  12. # 精灵使者更新:请在注释的第一行写入关键字,关键字可以在下面添加。
  13. #--------------------------------------------------------------

  14. module MiniMap
  15.   #===========================================================================
  16.   # [START]迷你地图脚本设置部分 地图名前+[NOMAP] 不显示
  17.   #---------------------------------------------------------------------------
  18.   SWITCH_NO_MINIMAP = 10 #  打开这个开关的话就不显示迷你地图
  19.    
  20.   MAP_RECT = [410, 20, 100, 100] # 迷你地图的大小和位置
  21.   # [X, Y, Width, Height]
  22.   # 你可以用调用脚本的方法任意改变他:
  23.   # $game_system.minimap = [X, Y, Width, Height]

  24.   MAP_Z = 0 # 迷你地图的Z轴
  25.   # 增加这个数值,如果迷你地图显示在某些物体下面的话(被覆盖)。

  26.   GRID_SIZE = 8 # 引导大小,建议数值大于3.
  27.   
  28.   MINIMAP_BORDER_COLOR = Color.new(0, 0, 255, 160) # 色彩设定
  29.   # Color.new(Red, Green, Blue, Opacity)
  30.   MINIMAP_BORDER_SIZE = 2
  31.   
  32.   FOREGROUND_COLOR = Color.new(224, 224, 255, 160) # 可通过物颜色
  33.   BACKGROUND_COLOR = Color.new(0, 0, 0, 160) # 不可通过物颜色

  34.   USE_OUTLINE_PLAYER = true # 是否描绘的角色?
  35.   PLAYER_OUTLINE_COLOR = Color.new(0, 0, 0, 192) # 角色颜色
  36.   USE_OUTLINE_EVENT = true # 是否描绘特殊事件?(如商人、敌人NPC等)
  37.   EVENT_OUTLINE_COLOR = Color.new(255, 255, 255, 192) # 特殊事件颜色
  38.   
  39.   PLAYER_COLOR = Color.new(255, 0, 0, 192) # 角色颜色设定
  40.   #---------------------------------------------------------------------------

  41.   OBJECT_COLOR = {} # 不要改变或删除这一行!
  42.   #===============================================================
  43.   # * 设置关键字和颜色
  44.   #---------------------------------------------------------------
  45.   # ** 例如:
  46.   # OBJECT_COLOR['keyword'] = Color.new(Red, Green, Blue, Opacity)
  47.   #-------------------------------------------------------------
  48.   # * 'keyword': 你想放到公共事件里来显示的颜色
  49.   # ** 标记: 'keyword' 是很关键的!
  50.   # * Color.new(...): 你需要的颜色
  51.   # 你可输入 0 - 255 的可选色彩范围 (Red, Green, Blue, Opacity)
  52.   #-------------------------------------------------------------
  53.   OBJECT_COLOR['npc'] = Color.new(30,144,255,160)
  54.   OBJECT_COLOR['treasure'] = Color.new(0,255,255,160)
  55.   OBJECT_COLOR['enemy'] = Color.new(139,35,35,160)
  56.   OBJECT_COLOR['merchant'] = Color.new(255,255,0,160)
  57.   OBJECT_COLOR['teleport'] = Color.new(255,128,0,160)
  58.   OBJECT_COLOR['door'] = Color.new(0,255,128,160)
  59.   
  60.   
  61.   #===========================================================================
  62.   # * [说明] 标签:
  63.   #---------------------------------------------------------------------------
  64.   # 改变这些关闭迷你地图 & 或设置显示迷你地图~
  65.   # TAG_EVENT的关键字和OBJECT_COLOR关键字要对应。
  66.   #-----------------------------------------------------------------------
  67.   TAG_NO_MINIMAP = '[NOMAP]'
  68.   TAG_EVENT = ["npc","enemy","treasure","merchant","teleport","door"]
  69.   #---------------------------------------------------------------------------

  70.   #---------------------------------------------------------------------------
  71.   # [END] 迷你地图脚本设置部分
  72.   #===========================================================================
  73.   
  74.   def self.refresh
  75.     if $scene.is_a?(Scene_Map)
  76.       $scene.spriteset.minimap.refresh
  77.     end
  78.   end
  79.   
  80.   def self.update_object
  81.     if $scene.is_a?(Scene_Map)
  82.       $scene.spriteset.minimap.update_object_list
  83.     end
  84.   end
  85. end

  86. #==============================================================================
  87. # ■ RPG::MapInfo
  88. #==============================================================================
  89. class RPG::MapInfo
  90.   def name
  91.     return @name.gsub(/\[.*\]/) { }
  92.   end

  93.   def original_name
  94.     return @name
  95.   end

  96.   def show_minimap?
  97.     return [email protected]?(MiniMap::TAG_NO_MINIMAP)
  98.   end
  99. end
  100. #==============================================================================
  101. # ■ Game_System
  102. #==============================================================================
  103. class Game_System
  104.   attr_accessor :minimap
  105.   alias wora_minimap_gamsys_ini initialize
  106.   
  107.   def initialize
  108.     wora_minimap_gamsys_ini
  109.     @minimap = MiniMap::MAP_RECT
  110.   end
  111.   
  112.   def show_minimap
  113.     return !$game_switches[MiniMap::SWITCH_NO_MINIMAP]
  114.   end
  115. end
  116. #==============================================================================
  117. # ■ Game_Map
  118. #==============================================================================
  119. class Game_Map
  120.   alias wora_minimap_gammap_setup setup
  121.   def setup(map_id)
  122.     wora_minimap_gammap_setup(map_id)
  123.     @db_info = load_data('Data/MapInfos.rvdata') if @db_info.nil?
  124.     @map_info = @db_info[map_id]
  125.   end
  126.   
  127.   def show_minimap?
  128.     return @map_info.show_minimap?
  129.   end
  130. end
  131. #==============================================================================
  132. # ■ Game_Event
  133. #==============================================================================
  134. class Game_Event < Game_Character
  135.   def mm_comment?(comment, return_comment = false )
  136.     if [email protected]?
  137.       for i in [email protected] - 1
  138.         next if @list[i].code != 108
  139.         if comment.include?(@list[i].parameters[0])
  140.           return @list[i].parameters[0] if return_comment
  141.           return true
  142.         end
  143.       end
  144.     end
  145.     return '' if return_comment
  146.     return false
  147.   end
  148. end

  149. #==============================================================================
  150. # ■ Game_MiniMap
  151. #------------------------------------------------------------------------------
  152. class Game_MiniMap
  153.   def initialize(tilemap)
  154.     @tilemap = tilemap
  155.     refresh
  156.   end

  157.   def dispose
  158.     @border.bitmap.dispose
  159.     @border.dispose
  160.     @map_sprite.bitmap.dispose
  161.     @map_sprite.dispose
  162.     @object_sprite.bitmap.dispose
  163.     @object_sprite.dispose
  164.     @position_sprite.bitmap.dispose
  165.     @position_sprite.dispose
  166.   end

  167.   def visible
  168.     return @map_sprite.visible
  169.   end

  170.   def visible=(value)
  171.     @map_sprite.visible = value
  172.     @object_sprite.visible = value
  173.     @position_sprite.visible = value
  174.     @border.visible = value
  175.   end

  176.   def refresh
  177.     @mmr = $game_system.minimap
  178.     map_rect = Rect.new(@mmr[0], @mmr[1], @mmr[2], @mmr[3])
  179.     grid_size = [MiniMap::GRID_SIZE, 1].max

  180.     @x = 0
  181.     @y = 0
  182.     @size = [map_rect.width / grid_size, map_rect.height / grid_size]

  183.     @border = Sprite.new
  184.     @border.x = map_rect.x - MiniMap::MINIMAP_BORDER_SIZE
  185.     @border.y = map_rect.y - MiniMap::MINIMAP_BORDER_SIZE
  186.     b_width = map_rect.width + (MiniMap::MINIMAP_BORDER_SIZE * 2)
  187.     b_height = map_rect.height + (MiniMap::MINIMAP_BORDER_SIZE * 2)
  188.     @border.bitmap = Bitmap.new(b_width, b_height)
  189.     @border.bitmap.fill_rect(@border.bitmap.rect, MiniMap::MINIMAP_BORDER_COLOR)
  190.     @border.bitmap.clear_rect(MiniMap::MINIMAP_BORDER_SIZE, MiniMap::MINIMAP_BORDER_SIZE,
  191.     @border.bitmap.width - (MiniMap::MINIMAP_BORDER_SIZE * 2),
  192.     @border.bitmap.height - (MiniMap::MINIMAP_BORDER_SIZE * 2))
  193.    
  194.     @map_sprite = Sprite.new
  195.     @map_sprite.x = map_rect.x
  196.     @map_sprite.y = map_rect.y
  197.     @map_sprite.z = MiniMap::MAP_Z
  198.     bitmap_width = $game_map.width * grid_size + map_rect.width
  199.     bitmap_height = $game_map.height * grid_size + map_rect.height
  200.     @map_sprite.bitmap = Bitmap.new(bitmap_width, bitmap_height)
  201.     @map_sprite.src_rect = map_rect

  202.     @object_sprite = Sprite.new
  203.     @object_sprite.x = map_rect.x
  204.     @object_sprite.y = map_rect.y
  205.     @object_sprite.z = MiniMap::MAP_Z + 1
  206.     @object_sprite.bitmap = Bitmap.new(bitmap_width, bitmap_height)
  207.     @object_sprite.src_rect = map_rect

  208.     @position_sprite = Sprite_Base.new
  209.     @position_sprite.x = map_rect.x + @size[0] / 2 * grid_size
  210.     @position_sprite.y = map_rect.y + @size[1] / 2 * grid_size
  211.     @position_sprite.z = MiniMap::MAP_Z + 2
  212.    
  213.     bitmap = Bitmap.new(grid_size, grid_size)
  214.     # Player's Outline
  215.     if MiniMap::USE_OUTLINE_PLAYER and MiniMap::GRID_SIZE >= 3
  216.       bitmap.fill_rect(bitmap.rect, MiniMap::PLAYER_OUTLINE_COLOR)
  217.       brect = Rect.new(bitmap.rect.x + 1, bitmap.rect.y + 1, bitmap.rect.width - 2,
  218.         bitmap.rect.height - 2)
  219.       bitmap.clear_rect(brect)
  220.     else
  221.       brect = bitmap.rect
  222.     end
  223.    
  224.     bitmap.fill_rect(brect, MiniMap::PLAYER_COLOR)
  225.     @position_sprite.bitmap = bitmap

  226.     draw_map
  227.     update_object_list
  228.     draw_object
  229.     update_position
  230.   end

  231.   def draw_map
  232.     bitmap = @map_sprite.bitmap
  233.     bitmap.fill_rect(bitmap.rect, MiniMap::BACKGROUND_COLOR)
  234.     map_rect = Rect.new(@mmr[0], @mmr[1], @mmr[2], @mmr[3])
  235.     grid_size = [MiniMap::GRID_SIZE, 1].max
  236.    
  237.     $game_map.width.times do |i|
  238.       $game_map.height.times do |j|
  239.         if !$game_map.passable?(i, j)
  240.           next
  241.         end
  242.         rect = Rect.new(map_rect.width / 2 + grid_size * i,
  243.           map_rect.height / 2 + grid_size * j,
  244.           grid_size, grid_size)
  245.         if grid_size >= 3
  246.           if !$game_map.passable?(i, j)
  247.             rect.height -= 1
  248.             rect.x += 1
  249.             rect.width -= 1
  250.             rect.width -= 1
  251.             rect.y += 1
  252.             rect.height -= 1
  253.           end
  254.         end
  255.         bitmap.fill_rect(rect, MiniMap::FOREGROUND_COLOR)
  256.       end
  257.     end
  258.   end

  259.     def update_object_list
  260.     @object_list = {}
  261.     $game_map.events.values.each do |e|
  262.       comment = e.mm_comment?(MiniMap::TAG_EVENT, true)
  263.       if comment != ''
  264.         #type = comment.gsub(/#{MiniMap::TAG_EVENT}/){}.gsub(/\s+/){}
  265.         type = comment
  266.         @object_list[type] = [] if @object_list[type].nil?
  267.         @object_list[type] << e
  268.       end
  269.     end
  270.   end

  271.   def draw_object
  272.     bitmap = @object_sprite.bitmap
  273.     bitmap.clear
  274.     map_rect = Rect.new(@mmr[0], @mmr[1], @mmr[2], @mmr[3])
  275.     grid_size = [MiniMap::GRID_SIZE, 1].max
  276.     rect = Rect.new(0, 0, grid_size, grid_size)
  277.     mw = map_rect.width / 2
  278.     mh = map_rect.height / 2

  279.     @object_list.each do |key, events|
  280.       color = MiniMap::OBJECT_COLOR[key]
  281.       next if events.nil? or color.nil?
  282.       events.each do |obj|
  283.         #if !obj.character_name.empty?
  284.           rect.x = mw + obj.real_x * grid_size / 256
  285.           rect.y = mh + obj.real_y * grid_size / 256
  286.           # Event's Outline
  287.           if MiniMap::USE_OUTLINE_EVENT and MiniMap::GRID_SIZE >= 3
  288.             bitmap.fill_rect(rect, MiniMap::EVENT_OUTLINE_COLOR)
  289.             brect = Rect.new(rect.x + 1, rect.y + 1, rect.width - 2,
  290.             rect.height - 2)
  291.             bitmap.clear_rect(brect)
  292.           else
  293.             brect = bitmap.rect
  294.           end
  295.           bitmap.fill_rect(brect, color)
  296.         #end
  297.       end
  298.     end
  299.   end

  300.   def update
  301.     if @mmr != $game_system.minimap
  302.       dispose
  303.       refresh
  304.     end
  305.     update_object_list
  306.     draw_object
  307.     update_position
  308.     if @map_sprite.visible
  309.       @map_sprite.update
  310.       @object_sprite.update
  311.       @position_sprite.update
  312.     end
  313.   end

  314.   def update_position
  315.     map_rect = Rect.new(@mmr[0], @mmr[1], @mmr[2], @mmr[3])
  316.     grid_size = [MiniMap::GRID_SIZE, 1].max
  317.     sx = $game_player.real_x * grid_size / 256
  318.     sy = $game_player.real_y * grid_size / 256
  319.     @map_sprite.src_rect.x = sx
  320.     @map_sprite.src_rect.y = sy
  321.     @object_sprite.src_rect.x = sx
  322.     @object_sprite.src_rect.y = sy
  323.   end
  324. end
  325. #==============================================================================
  326. # ■ Spriteset_Map
  327. #------------------------------------------------------------------------------
  328. class Spriteset_Map
  329.   attr_reader :minimap
  330.   alias wora_minimap_sprsetmap_ini initialize
  331.   alias wora_minimap_sprsetmap_dis dispose
  332.   alias wora_minimap_sprsetmap_upd update
  333.   
  334.   def initialize
  335.     wora_minimap_sprsetmap_ini
  336.     if $game_map.show_minimap?
  337.       @minimap = Game_MiniMap.new(@tilemap)
  338.       $game_system.show_minimap = true if $game_system.show_minimap.nil?
  339.       @minimap.visible = $game_system.show_minimap
  340.     end
  341.   end
  342.   
  343.   def dispose
  344.     @minimap.dispose if [email protected]?
  345.     wora_minimap_sprsetmap_dis
  346.   end

  347.   def update
  348.     if [email protected]?
  349.       if $game_system.show_minimap
  350.         @minimap.visible = true
  351.         @minimap.update_object_list
  352.         @minimap.update
  353.       else
  354.         @minimap.visible = false
  355.       end
  356.     end
  357.     wora_minimap_sprsetmap_upd
  358.   end
  359. end
  360. #==============================================================================
  361. # ■ Scene_Map
  362. #------------------------------------------------------------------------------
  363. class Scene_Map < Scene_Base
  364.   attr_reader :spriteset
  365. end
复制代码

更新:
稍微扩大了地图的大小。
更新了:可以用非行走图的图块显示事件(例如传送等)
新添关键字teleport(传送点) 和door(门)
再度更新:
修正了VX事件更新完毕以后没有及时刷新的问题。
作者: 越前リョーマ    时间: 2008-9-13 02:28
话说这个是高级缩略图吧,
很有价值……{/hx}
作者: 浪使者    时间: 2008-9-13 04:34
以下引用精灵使者于2008-9-11 22:33:29的发言:

问题是,如何标记关键字?


Orz~
原作是有标记的,但不在脚本里面,另外写,在人物事件编辑的第一行 分类插入以下脚本

标记:MMEV merchant     (标识商人)
标记:MMEV npc          (标识一般的NPC)
标记:MMEV enemy        (标识敌人)

真不好意思,当时发帖疏忽漏掉了。。

PS: 感谢 精灵使者 的更新脚本!~

作者: 精灵使者    时间: 2008-9-13 06:28
我更新的那个只要在第一行注释里写关键词就可以了
作者: 地龙    时间: 2008-9-13 19:07
提示: 作者被禁止或删除 内容自动屏蔽
作者: 精灵使者    时间: 2008-9-13 20:09
9月9日继续修正脚本,修正一下事件更改后没有及时刷新的错误等等。
这样就完美了。
作者: 沉影不器    时间: 2008-9-13 22:34
提示: 作者被禁止或删除 内容自动屏蔽
作者: 精灵使者    时间: 2008-9-14 06:03
以下引用沉影不器于2008-9-13 14:34:39的发言:

有没有不同长相的标志?不一定只有颜色差别...精灵使者继续更新吧

长相的标志……是不是需要修改图片啊……这个似乎不需要素材
你如果想那样的话可以试着把这个东西VX化一下吧。
http://rpg.blue/web/htm/news294.htm
我似乎最远只能做到这里了……还是脚本白痴一个
作者: 火鸡三毛老大    时间: 2008-9-14 15:13
以下引用精灵使者于2008-9-13 22:03:16的发言:


以下引用沉影不器于2008-9-13 14:34:39的发言:

有没有不同长相的标志?不一定只有颜色差别...精灵使者继续更新吧


长相的标志……是不是需要修改图片啊……这个似乎不需要素材
你如果想那样的话可以试着把这个东西VX化一下吧。
http://rpg.blue/web/htm/news294.htm
我似乎最远只能做到这里了……还是脚本白痴一个

这个MS不是很好用的说……
作者: hitlerson    时间: 2008-9-14 16:50
  1. #===============================================================
  2. # ● [VX] ◦迷你地图 ◦ □
  3. # * 无须图片的迷你地图脚本,浪使者倾情汉化 *
  4. #--------------------------------------------------------------
  5. # ◦ by Woratana [原作者]
  6. # ◦ 用于 RPG Maker VX  
  7. # ◦ 最近更新: 09/06/2008
  8. # ◦ 版本: 1.0 Beta
  9. #--------------------------------------------------------------
  10. # ◦ 特别感谢: KGC 的 XP 迷你地图脚本,
  11. # 没有他的迷你地图脚本,这个就不会被做出来.
  12. # 精灵使者更新:请在注释的第一行写入关键字,关键字可以在下面添加。
  13. #--------------------------------------------------------------
  14. #=begin
  15. module MiniMap
  16.   #===========================================================================
  17.   # [START]迷你地图脚本设置部分 地图名前+[NOMAP] 不显示
  18.   #---------------------------------------------------------------------------
  19.   SWITCH_NO_MINIMAP = 10 #  打开这个开关的话就不显示迷你地图
  20.    
  21.   MAP_RECT = [410, 20, 100, 100] # 迷你地图的大小和位置
  22.   # [X, Y, Width, Height]
  23.   # 你可以用调用脚本的方法任意改变他:
  24.   # $game_system.minimap = [X, Y, Width, Height]

  25.   MAP_Z = 0 # 迷你地图的Z轴
  26.   # 增加这个数值,如果迷你地图显示在某些物体下面的话(被覆盖)。

  27.   GRID_SIZE = 8 # 引导大小,建议数值大于3.
  28.   
  29.   MINIMAP_BORDER_COLOR = Color.new(0, 0, 255, 160) # 色彩设定
  30.   # Color.new(Red, Green, Blue, Opacity)
  31.   MINIMAP_BORDER_SIZE = 2
  32.   
  33.   FOREGROUND_COLOR = Color.new(224, 224, 255, 160) # 可通过物颜色
  34.   BACKGROUND_COLOR = Color.new(0, 0, 0, 160) # 不可通过物颜色

  35.   USE_OUTLINE_PLAYER = true # 是否描绘的角色?
  36.   PLAYER_OUTLINE_COLOR = Color.new(0, 0, 0, 192) # 角色颜色
  37.   USE_OUTLINE_EVENT = true # 是否描绘特殊事件?(如商人、敌人NPC等)
  38.   EVENT_OUTLINE_COLOR = Color.new(255, 255, 255, 192) # 特殊事件颜色
  39.   EVENT_CHARACTOR_ZOOM = 0.4  #显示头像的缩放比例
  40.   EVENT_CHARACTOR_H    = 0.6  #显示头像的大小比例 1为显示全身像 0.5为显示半身像
  41.   EVENT_CHARACTOR_X = 2       #显示头像的X坐标
  42.   EVENT_CHARACTOR_Y = 13      #显示头像的X坐标
  43.                               #要显示头像请再事件中加注释“显示头像”
  44.   
  45.   PLAYER_COLOR = Color.new(255, 0, 0, 192) # 角色颜色设定
  46.   #---------------------------------------------------------------------------

  47.   OBJECT_COLOR = {} # 不要改变或删除这一行!
  48.   #===============================================================
  49.   # * 设置关键字和颜色
  50.   #---------------------------------------------------------------
  51.   # ** 例如:
  52.   # OBJECT_COLOR['keyword'] = Color.new(Red, Green, Blue, Opacity)
  53.   #-------------------------------------------------------------
  54.   # * 'keyword': 你想放到公共事件里来显示的颜色
  55.   # ** 标记: 'keyword' 是很关键的!
  56.   # * Color.new(...): 你需要的颜色
  57.   # 你可输入 0 - 255 的可选色彩范围 (Red, Green, Blue, Opacity)
  58.   #-------------------------------------------------------------
  59.   OBJECT_COLOR['npc'] = Color.new(30,144,255,160)
  60.   OBJECT_COLOR['treasure'] = Color.new(0,255,255,160)
  61.   OBJECT_COLOR['enemy'] = Color.new(139,35,35,160)
  62.   OBJECT_COLOR['merchant'] = Color.new(255,255,0,160)
  63.   OBJECT_COLOR['teleport'] = Color.new(255,128,0,160)
  64.   OBJECT_COLOR['door'] = Color.new(0,255,128,160)
  65.   
  66.   
  67.   #===========================================================================
  68.   # * [说明] 标签:
  69.   #---------------------------------------------------------------------------
  70.   # 改变这些关闭迷你地图 & 或设置显示迷你地图~
  71.   # TAG_EVENT的关键字和OBJECT_COLOR关键字要对应。
  72.   #-----------------------------------------------------------------------
  73.   TAG_NO_MINIMAP = '[NOMAP]'
  74.   TAG_EVENT = ["npc","enemy","treasure","merchant","teleport","door"]
  75.   #---------------------------------------------------------------------------

  76.   #---------------------------------------------------------------------------
  77.   # [END] 迷你地图脚本设置部分
  78.   #===========================================================================
  79.   
  80.   def self.refresh
  81.     if $scene.is_a?(Scene_Map)
  82.       $scene.spriteset.minimap.refresh
  83.     end
  84.   end
  85.   
  86.   def self.update_object
  87.     if $scene.is_a?(Scene_Map)
  88.       $scene.spriteset.minimap.update_object_list
  89.     end
  90.   end
  91. end

  92. #==============================================================================
  93. # ■ RPG::MapInfo
  94. #==============================================================================
  95. class RPG::MapInfo
  96.   def name
  97.     return @name.gsub(/\[.*\]/) { }
  98.   end

  99.   def original_name
  100.     return @name
  101.   end

  102.   def show_minimap?
  103.     return [email protected]?(MiniMap::TAG_NO_MINIMAP)
  104.   end
  105. end
  106. #==============================================================================
  107. # ■ Game_System
  108. #==============================================================================
  109. class Game_System
  110.   attr_accessor :minimap
  111.   alias wora_minimap_gamsys_ini initialize
  112.   
  113.   def initialize
  114.     wora_minimap_gamsys_ini
  115.     @minimap = MiniMap::MAP_RECT
  116.   end
  117.   
  118.   def show_minimap
  119.     return !$game_switches[MiniMap::SWITCH_NO_MINIMAP]
  120.   end
  121. end
  122. #==============================================================================
  123. # ■ Game_Map
  124. #==============================================================================
  125. class Game_Map
  126.   alias wora_minimap_gammap_setup setup
  127.   def setup(map_id)
  128.     wora_minimap_gammap_setup(map_id)
  129.     @db_info = load_data('Data/MapInfos.rvdata') if @db_info.nil?
  130.     @map_info = @db_info[map_id]
  131.   end
  132.   
  133.   def show_minimap?
  134.     return @map_info.show_minimap?
  135.   end
  136. end
  137. #==============================================================================
  138. # ■ Game_Event
  139. #==============================================================================
  140. class Game_Event < Game_Character
  141.   def mm_comment?(comment, return_comment = false )
  142.     if [email protected]?
  143.       for i in [email protected] - 1
  144.         next if @list[i].code != 108
  145.         if comment.include?(@list[i].parameters[0])
  146.           return @list[i].parameters[0] if return_comment
  147.           return true
  148.         end
  149.       end
  150.     end
  151.     return '' if return_comment
  152.     return false
  153.   end
  154.   def view_charactor
  155.     if [email protected]?
  156.       for i in [email protected] - 1
  157.         next if @list[i].code != 108
  158.         if @list[i].parameters[0] = "显示头像"
  159.           return true
  160.         end
  161.       end
  162.     end
  163.     return false
  164.   end
  165. end

  166. #==============================================================================
  167. # ■ Game_MiniMap
  168. #------------------------------------------------------------------------------
  169. class Game_MiniMap
  170.   def initialize(tilemap)
  171.     @tilemap = tilemap
  172.     refresh
  173.   end

  174.   def dispose
  175.     @border.bitmap.dispose
  176.     @border.dispose
  177.     @map_sprite.bitmap.dispose
  178.     @map_sprite.dispose
  179.     @object_sprite.bitmap.dispose
  180.     @object_sprite.dispose
  181.     @position_sprite.bitmap.dispose
  182.     @position_sprite.dispose
  183.   end

  184.   def visible
  185.     return @map_sprite.visible
  186.   end

  187.   def visible=(value)
  188.     @map_sprite.visible = value
  189.     @object_sprite.visible = value
  190.     @position_sprite.visible = value
  191.     @border.visible = value
  192.   end

  193.   def refresh
  194.     @mmr = $game_system.minimap
  195.     map_rect = Rect.new(@mmr[0], @mmr[1], @mmr[2], @mmr[3])
  196.     grid_size = [MiniMap::GRID_SIZE, 1].max

  197.     @x = 0
  198.     @y = 0
  199.     @size = [map_rect.width / grid_size, map_rect.height / grid_size]

  200.     @border = Sprite.new
  201.     @border.x = map_rect.x - MiniMap::MINIMAP_BORDER_SIZE
  202.     @border.y = map_rect.y - MiniMap::MINIMAP_BORDER_SIZE
  203.     b_width = map_rect.width + (MiniMap::MINIMAP_BORDER_SIZE * 2)
  204.     b_height = map_rect.height + (MiniMap::MINIMAP_BORDER_SIZE * 2)
  205.     @border.bitmap = Bitmap.new(b_width, b_height)
  206.     @border.bitmap.fill_rect(@border.bitmap.rect, MiniMap::MINIMAP_BORDER_COLOR)
  207.     @border.bitmap.clear_rect(MiniMap::MINIMAP_BORDER_SIZE, MiniMap::MINIMAP_BORDER_SIZE,
  208.     @border.bitmap.width - (MiniMap::MINIMAP_BORDER_SIZE * 2),
  209.     @border.bitmap.height - (MiniMap::MINIMAP_BORDER_SIZE * 2))
  210.    
  211.     @map_sprite = Sprite.new
  212.     @map_sprite.x = map_rect.x
  213.     @map_sprite.y = map_rect.y
  214.     @map_sprite.z = MiniMap::MAP_Z
  215.     bitmap_width = $game_map.width * grid_size + map_rect.width
  216.     bitmap_height = $game_map.height * grid_size + map_rect.height
  217.     @map_sprite.bitmap = Bitmap.new(bitmap_width, bitmap_height)
  218.     @map_sprite.src_rect = map_rect

  219.     @object_sprite = Sprite.new
  220.     @object_sprite.x = map_rect.x
  221.     @object_sprite.y = map_rect.y
  222.     @object_sprite.z = MiniMap::MAP_Z + 1
  223.     @object_sprite.bitmap = Bitmap.new(bitmap_width, bitmap_height)
  224.     @object_sprite.src_rect = map_rect
  225.     @object_sprite1 = {}

  226.     @position_sprite = Sprite_Base.new
  227.     @position_sprite.x = map_rect.x + @size[0] / 2 * grid_size
  228.     @position_sprite.y = map_rect.y + @size[1] / 2 * grid_size
  229.     @position_sprite.z = MiniMap::MAP_Z + 2
  230.    
  231.     bitmap = Bitmap.new(grid_size, grid_size)
  232.     # Player's Outline
  233.     if MiniMap::USE_OUTLINE_PLAYER and MiniMap::GRID_SIZE >= 3
  234.       bitmap.fill_rect(bitmap.rect, MiniMap::PLAYER_OUTLINE_COLOR)
  235.       brect = Rect.new(bitmap.rect.x + 1, bitmap.rect.y + 1, bitmap.rect.width - 2,
  236.         bitmap.rect.height - 2)
  237.       bitmap.clear_rect(brect)
  238.     else
  239.       brect = bitmap.rect
  240.     end
  241.    
  242.     bitmap.fill_rect(brect, MiniMap::PLAYER_COLOR)
  243.     @position_sprite.bitmap = bitmap

  244.     draw_map
  245.     update_object_list
  246.     draw_object
  247.     update_position
  248.   end

  249.   def draw_map
  250.     bitmap = @map_sprite.bitmap
  251.     bitmap.fill_rect(bitmap.rect, MiniMap::BACKGROUND_COLOR)
  252.     map_rect = Rect.new(@mmr[0], @mmr[1], @mmr[2], @mmr[3])
  253.     grid_size = [MiniMap::GRID_SIZE, 1].max
  254.    
  255.     $game_map.width.times do |i|
  256.       $game_map.height.times do |j|
  257.         if !$game_map.passable?(i, j)
  258.           next
  259.         end
  260.         rect = Rect.new(map_rect.width / 2 + grid_size * i,
  261.           map_rect.height / 2 + grid_size * j,
  262.           grid_size, grid_size)
  263.         if grid_size >= 3
  264.           if !$game_map.passable?(i, j)
  265.             rect.height -= 1
  266.             rect.x += 1
  267.             rect.width -= 1
  268.             rect.width -= 1
  269.             rect.y += 1
  270.             rect.height -= 1
  271.           end
  272.         end
  273.         bitmap.fill_rect(rect, MiniMap::FOREGROUND_COLOR)
  274.       end
  275.     end
  276.   end

  277.     def update_object_list
  278.     @object_list = {}
  279.     $game_map.events.values.each do |e|
  280.       comment = e.mm_comment?(MiniMap::TAG_EVENT, true)
  281.       if comment != ''
  282.         #type = comment.gsub(/#{MiniMap::TAG_EVENT}/){}.gsub(/\s+/){}
  283.         type = comment
  284.         @object_list[type] = [] if @object_list[type].nil?
  285.         @object_list[type] << e
  286.       end
  287.     end
  288.   end

  289.   def draw_object
  290.     bitmap = @object_sprite.bitmap
  291.     bitmap.clear
  292.     map_rect = Rect.new(@mmr[0], @mmr[1], @mmr[2], @mmr[3])
  293.     grid_size = [MiniMap::GRID_SIZE, 1].max
  294.     rect = Rect.new(0, 0, grid_size, grid_size)
  295.     mw = map_rect.width / 2
  296.     mh = map_rect.height / 2
  297.     @object_list.each do |key, events|
  298.       color = MiniMap::OBJECT_COLOR[key]
  299.       next if events.nil? or color.nil?
  300.       events.each do |obj|
  301.         if !obj.character_name.empty?
  302.           obj_pic = obj.character_name
  303.           obj_hue = obj.character_hue
  304.         end
  305.           rect.x = mw + obj.real_x * grid_size / 256
  306.           rect.y = mh + obj.real_y * grid_size / 256
  307.           # Event's Outline
  308.           if MiniMap::USE_OUTLINE_EVENT and MiniMap::GRID_SIZE >= 3
  309.             bitmap.fill_rect(rect, MiniMap::EVENT_OUTLINE_COLOR)
  310.             brect = Rect.new(rect.x + 1, rect.y + 1, rect.width - 2,
  311.             rect.height - 2)
  312.             if obj_pic != nil and obj.view_charactor
  313.               @object_sprite1[obj].dispose if @object_sprite1[obj] != nil
  314.               @object_sprite1[obj] = Sprite.new
  315.               #p rect.x,rect.y,brect.x,brect.y
  316.               @object_sprite1[obj].x = map_rect.x + rect.x
  317.               @object_sprite1[obj].y = map_rect.y + rect.y
  318.               @object_sprite1[obj].z = MiniMap::MAP_Z + 1
  319.               @object_sprite1[obj].bitmap = RPG::Cache.character(obj_pic,obj_hue)
  320.               @object_sprite1[obj].zoom_x ,@object_sprite1[obj].zoom_y = MiniMap::EVENT_CHARACTOR_ZOOM , MiniMap::EVENT_CHARACTOR_ZOOM
  321.               @cw = @object_sprite1[obj].bitmap.width / 4
  322.               @ch = @object_sprite1[obj].bitmap.height / 4
  323.               @object_sprite1[obj].ox = @cw / 2
  324.               @object_sprite1[obj].oy = @ch
  325.               @object_sprite1[obj].src_rect.set(0, 0, @cw, @ch*MiniMap::EVENT_CHARACTOR_H)
  326.               #brect1 = Rect.new(rect.x + 1, rect.y + 1, rect.width - 2, rect.height - 2)
  327.               #@object_sprite1[obj].src_rect = map_rect
  328.             end
  329.           else
  330.             brect = bitmap.rect
  331.           end
  332.           bitmap.fill_rect(brect, color)
  333.         #end
  334.       end
  335.     end
  336.   end

  337.   def update
  338.     if @mmr != $game_system.minimap
  339.       dispose
  340.       refresh
  341.     end
  342.     update_object_list
  343.     draw_object
  344.     update_position
  345.     if @map_sprite.visible
  346.       @map_sprite.update
  347.       @object_sprite.update
  348.       for obj in @object_sprite1.values
  349.         obj.update
  350.       end
  351.       @position_sprite.update
  352.     end
  353.   end

  354.   def update_position
  355.     map_rect = Rect.new(@mmr[0], @mmr[1], @mmr[2], @mmr[3])
  356.     grid_size = [MiniMap::GRID_SIZE, 1].max
  357.     sx = $game_player.real_x * grid_size / 256
  358.     sy = $game_player.real_y * grid_size / 256
  359.     @map_sprite.src_rect.x = sx
  360.     @map_sprite.src_rect.y = sy
  361.     @object_sprite.src_rect.x = sx
  362.     @object_sprite.src_rect.y = sy
  363.     for obj in @object_sprite1.values
  364.       obj.x += a - map_rect.x + MiniMap::EVENT_CHARACTOR_X
  365.       obj.y += b - map_rect.y + MiniMap::EVENT_CHARACTOR_Y
  366.     end
  367.   end
  368. end
  369. #==============================================================================
  370. # ■ Spriteset_Map
  371. #------------------------------------------------------------------------------
  372. class Spriteset_Map
  373.   attr_reader :minimap
  374.   alias wora_minimap_sprsetmap_ini initialize
  375.   alias wora_minimap_sprsetmap_dis dispose
  376.   alias wora_minimap_sprsetmap_upd update
  377.   
  378.   def initialize
  379.     wora_minimap_sprsetmap_ini
  380.     if $game_map.show_minimap?
  381.       @minimap = Game_MiniMap.new(@tilemap)
  382.       $game_system.show_minimap = true if $game_system.show_minimap.nil?
  383.       @minimap.visible = $game_system.show_minimap
  384.     end
  385.   end
  386.   
  387.   def dispose
  388.     @minimap.dispose if [email protected]?
  389.     wora_minimap_sprsetmap_dis
  390.   end

  391.   def update
  392.     if [email protected]?
  393.       if $game_system.show_minimap
  394.         @minimap.visible = true
  395.         @minimap.update_object_list
  396.         @minimap.update
  397.       else
  398.         @minimap.visible = false
  399.       end
  400.     end
  401.     wora_minimap_sprsetmap_upd
  402.   end
  403. end
  404. #==============================================================================
  405. # ■ Scene_Map
  406. #------------------------------------------------------------------------------
  407. class Scene_Map < Scene_Base
  408.   attr_reader :spriteset
  409. end
  410. #=end
复制代码


我承认我没用VX测试过,应该能运行的吧
显示头像的NPC距离远点啊,不然图片要叠加的
作者: 白羽    时间: 2008-9-14 19:50
提示: 作者被禁止或删除 内容自动屏蔽
作者: 沉影不器    时间: 2008-9-14 23:08
提示: 作者被禁止或删除 内容自动屏蔽
作者: hitlerson    时间: 2008-9-15 03:15
有人说那个脚本VX不能用,呵呵,没弄过VX,不知道VX的角色图是这样的哦,没Hue的~!

改好了,这个是VX版本的,当然我自己测试用的是XP版本的,也放着吧



VX版
  1. #===============================================================
  2. # ● [VX] ◦迷你地图 ◦ □
  3. # * 无须图片的迷你地图脚本,浪使者倾情汉化 *
  4. #--------------------------------------------------------------
  5. # ◦ by Woratana [原作者]
  6. # ◦ 用于 RPG Maker VX  
  7. # ◦ 最近更新: 09/06/2008
  8. # ◦ 版本: 1.0 Beta
  9. #--------------------------------------------------------------
  10. # ◦ 特别感谢: KGC 的 XP 迷你地图脚本,
  11. # 没有他的迷你地图脚本,这个就不会被做出来.
  12. #--------------------------------------------------------------

  13. module MiniMap
  14.   #===========================================================================
  15.   # [START]迷你地图脚本设置部分 地图名前+[NOMAP] 不显示
  16.   #---------------------------------------------------------------------------
  17.   SWITCH_NO_MINIMAP = 10 #  打开这个开关的话就不显示迷你地图
  18.    
  19.   MAP_RECT = [410, 20, 100, 100] # 迷你地图的大小和位置
  20.   # [X, Y, Width, Height]
  21.   # 你可以用调用脚本的方法任意改变他:
  22.   # $game_system.minimap = [X, Y, Width, Height]

  23.   MAP_Z = 0 # 迷你地图的Z轴
  24.   # 增加这个数值,如果迷你地图显示在某些物体下面的话(被覆盖)。

  25.   GRID_SIZE = 5 # 引导大小,建议数值大于3.
  26.   
  27.   MINIMAP_BORDER_COLOR = Color.new(0, 0, 255, 160) # 色彩设定
  28.   # Color.new(Red, Green, Blue, Opacity)
  29.   MINIMAP_BORDER_SIZE = 2
  30.   
  31.   FOREGROUND_COLOR = Color.new(224, 224, 255, 160) # 可通过物颜色
  32.   BACKGROUND_COLOR = Color.new(220, 0, 0, 160) # 不可通过物颜色

  33.   USE_OUTLINE_PLAYER = true # 是否描绘的角色?
  34.   PLAYER_OUTLINE_COLOR = Color.new(0, 0, 0, 192) # 角色颜色
  35.   USE_OUTLINE_EVENT = true # 是否描绘特殊事件?(如商人、敌人NPC等)
  36.   EVENT_OUTLINE_COLOR = Color.new(255, 255, 255, 192) # 特殊事件颜色
  37.   EVENT_CHARACTOR_ZOOM = 0.5  #显示头像的缩放比例
  38.   EVENT_CHARACTOR_H    = 1  #显示头像的大小比例 1为显示全身像 0.5为显示半身像
  39.   EVENT_CHARACTOR_X = -2       #显示头像的X坐标
  40.   EVENT_CHARACTOR_Y = 8      #显示头像的X坐标
  41.                               #要显示头像请再事件中加注释“显示头像”
  42.   
  43.   PLAYER_COLOR = Color.new(255, 0, 0, 192) # 角色颜色设定
  44.   #---------------------------------------------------------------------------

  45.   OBJECT_COLOR = {} # 不要改变或删除这一行!
  46.   #===============================================================
  47.   # * 设置关键字和颜色
  48.   #---------------------------------------------------------------
  49.   # ** 例如:
  50.   # OBJECT_COLOR['keyword'] = Color.new(Red, Green, Blue, Opacity)
  51.   #-------------------------------------------------------------
  52.   # * 'keyword': 你想放到公共事件里来显示的颜色
  53.   # ** 标记:  #===============================================================
  54. # ● [VX] ◦迷你地图 ◦ □
  55. # * 无须图片的迷你地图脚本,浪使者倾情汉化 *
  56. #--------------------------------------------------------------
  57. # ◦ by Woratana [原作者]
  58. # ◦ 用于 RPG Maker VX  
  59. # ◦ 最近更新: 09/06/2008
  60. # ◦ 版本: 1.0 Beta
  61. #--------------------------------------------------------------
  62. # ◦ 特别感谢: KGC 的 XP 迷你地图脚本,
  63. # 没有他的迷你地图脚本,这个就不会被做出来.
  64. #--------------------------------------------------------------

  65. module MiniMap
  66.   #===========================================================================
  67.   # [START]迷你地图脚本设置部分 地图名前+[NOMAP] 不显示
  68.   #---------------------------------------------------------------------------
  69.   SWITCH_NO_MINIMAP = 10 #  打开这个开关的话就不显示迷你地图
  70.    
  71.   MAP_RECT = [410, 20, 100, 100] # 迷你地图的大小和位置
  72.   # [X, Y, Width, Height]
  73.   # 你可以用调用脚本的方法任意改变他:
  74.   # $game_system.minimap = [X, Y, Width, Height]

  75.   MAP_Z = 0 # 迷你地图的Z轴
  76.   # 增加这个数值,如果迷你地图显示在某些物体下面的话(被覆盖)。

  77.   GRID_SIZE = 5 # 引导大小,建议数值大于3.
  78.   
  79.   MINIMAP_BORDER_COLOR = Color.new(0, 0, 255, 160) # 色彩设定
  80.   # Color.new(Red, Green, Blue, Opacity)
  81.   MINIMAP_BORDER_SIZE = 2
  82.   
  83.   FOREGROUND_COLOR = Color.new(224, 224, 255, 160) # 可通过物颜色
  84.   BACKGROUND_COLOR = Color.new(220, 0, 0, 160) # 不可通过物颜色

  85.   USE_OUTLINE_PLAYER = true # 是否描绘的角色?
  86.   PLAYER_OUTLINE_COLOR = Color.new(0, 0, 0, 192) # 角色颜色
  87.   USE_OUTLINE_EVENT = true # 是否描绘特殊事件?(如商人、敌人NPC等)
  88.   EVENT_OUTLINE_COLOR = Color.new(255, 255, 255, 192) # 特殊事件颜色
  89.   EVENT_CHARACTOR_ZOOM = 0.5  #显示头像的缩放比例
  90.   EVENT_CHARACTOR_H    = 1  #显示头像的大小比例 1为显示全身像 0.5为显示半身像
  91.   EVENT_CHARACTOR_X = -2       #显示头像的X坐标
  92.   EVENT_CHARACTOR_Y = 8      #显示头像的X坐标
  93.                               #要显示头像请再事件中加注释“显示头像”
  94.   
  95.   PLAYER_COLOR = Color.new(255, 0, 0, 192) # 角色颜色设定
  96.   #---------------------------------------------------------------------------

  97.   OBJECT_COLOR = {} # 不要改变或删除这一行!
  98.   #===============================================================
  99.   # * 设置关键字和颜色
  100.   #---------------------------------------------------------------
  101.   # ** 例如:
  102.   # OBJECT_COLOR['keyword'] = Color.new(Red, Green, Blue, Opacity)
  103.   #-------------------------------------------------------------
  104.   # * 'keyword': 你想放到公共事件里来显示的颜色
  105.   # ** 标记: 'keyword' 是很关键的!
  106.   # * Color.new(...): 你需要的颜色
  107.   # 你可输入 0 - 255 的可选色彩范围 (Red, Green, Blue, Opacity)
  108.   #-------------------------------------------------------------
  109.   OBJECT_COLOR['npc'] = Color.new(30,144,255,160)
  110.   OBJECT_COLOR['treasure'] = Color.new(0,255,255,160)
  111.   OBJECT_COLOR['enemy'] = Color.new(139,35,35,160)
  112.   OBJECT_COLOR['merchant'] = Color.new(255,255,0,160)
  113.   
  114.   #===========================================================================
  115.   # * [说明] 标签:
  116.   #---------------------------------------------------------------------------
  117.   # 改变这些关闭迷你地图 & 或设置显示迷你地图~
  118.   #-----------------------------------------------------------------------
  119.   TAG_NO_MINIMAP = '[NOMAP]'
  120.   TAG_EVENT = ["npc","enemy","merchant","treasure"]
  121.   #---------------------------------------------------------------------------

  122.   #---------------------------------------------------------------------------
  123.   # [END] 迷你地图脚本设置部分
  124.   #===========================================================================
  125.   
  126.   def self.refresh
  127.     if $scene.is_a?(Scene_Map)
  128.       $scene.spriteset.minimap.refresh
  129.     end
  130.   end
  131.   
  132.   def self.update_object
  133.     if $scene.is_a?(Scene_Map)
  134.       $scene.spriteset.minimap.update_object_list
  135.     end
  136.   end
  137. end

  138. #==============================================================================
  139. # ■ RPG::MapInfo
  140. #==============================================================================
  141. class RPG::MapInfo
  142.   def name
  143.     return @name.gsub(/\[.*\]/) { }
  144.   end

  145.   def original_name
  146.     return @name
  147.   end

  148.   def show_minimap?
  149.     return [email protected]?(MiniMap::TAG_NO_MINIMAP)
  150.   end
  151. end
  152. #==============================================================================
  153. # ■ Game_System
  154. #==============================================================================
  155. class Game_System
  156.   attr_accessor :minimap
  157.   alias wora_minimap_gamsys_ini initialize
  158.   
  159.   def initialize
  160.     wora_minimap_gamsys_ini
  161.     @minimap = MiniMap::MAP_RECT
  162.   end
  163.   
  164.   def show_minimap
  165.     return !$game_switches[MiniMap::SWITCH_NO_MINIMAP]
  166.   end
  167. end
  168. #==============================================================================
  169. # ■ Game_Map
  170. #==============================================================================
  171. class Game_Map
  172.   alias wora_minimap_gammap_setup setup
  173.   def setup(map_id)
  174.     wora_minimap_gammap_setup(map_id)
  175.     @db_info = load_data('Data/MapInfos.rvdata') if @db_info.nil?
  176.     @map_info = @db_info[map_id]
  177.   end
  178.   
  179.   def show_minimap?
  180.     return @map_info.show_minimap?
  181.   end
  182. end
  183. #==============================================================================
  184. # ■ Game_Event
  185. #==============================================================================
  186. class Game_Event < Game_Character
  187.   def mm_comment?(comment, return_comment = false )
  188.     if [email protected]?
  189.       for i in [email protected] - 1
  190.         next if @list[i].code != 108
  191.         if comment.include?(@list[i].parameters[0])
  192.           return @list[i].parameters[0] if return_comment
  193.           return true
  194.         end
  195.       end
  196.     end
  197.     return '' if return_comment
  198.     return false
  199.   end
  200.   def view_charactor
  201.     if [email protected]?
  202.       for i in [email protected] - 1
  203.         next if @list[i].code != 108
  204.         if @list[i].parameters[0] = "显示头像"
  205.           return true
  206.         end
  207.       end
  208.     end
  209.     return false
  210.   end
  211. end
  212. #==============================================================================
  213. # ■ Game_MiniMap
  214. #------------------------------------------------------------------------------
  215. class Game_MiniMap
  216.   def initialize(tilemap)
  217.     @tilemap = tilemap
  218.     refresh
  219.   end

  220.   def dispose
  221.     @border.bitmap.dispose
  222.     @border.dispose
  223.     @map_sprite.bitmap.dispose
  224.     @map_sprite.dispose
  225.     @object_sprite.bitmap.dispose
  226.     @object_sprite.dispose
  227.     @position_sprite.bitmap.dispose
  228.     @position_sprite.dispose
  229.   end

  230.   def visible
  231.     return @map_sprite.visible
  232.   end

  233.   def visible=(value)
  234.     @map_sprite.visible = value
  235.     @object_sprite.visible = value
  236.     @position_sprite.visible = value
  237.     @border.visible = value
  238.   end

  239.   def refresh
  240.     @mmr = $game_system.minimap
  241.     map_rect = Rect.new(@mmr[0], @mmr[1], @mmr[2], @mmr[3])
  242.     grid_size = [MiniMap::GRID_SIZE, 1].max

  243.     @x = 0
  244.     @y = 0
  245.     @size = [map_rect.width / grid_size, map_rect.height / grid_size]

  246.     @border = Sprite.new
  247.     @border.x = map_rect.x - MiniMap::MINIMAP_BORDER_SIZE
  248.     @border.y = map_rect.y - MiniMap::MINIMAP_BORDER_SIZE
  249.     b_width = map_rect.width + MiniMap::MINIMAP_BORDER_SIZE
  250.     b_height = map_rect.height + MiniMap::MINIMAP_BORDER_SIZE
  251.     @border.bitmap = Bitmap.new(b_width, b_height)
  252.     @border.bitmap.fill_rect(@border.bitmap.rect, MiniMap::MINIMAP_BORDER_COLOR)
  253.     @border.bitmap.clear_rect(MiniMap::MINIMAP_BORDER_SIZE, MiniMap::MINIMAP_BORDER_SIZE,
  254.     @border.bitmap.width - (MiniMap::MINIMAP_BORDER_SIZE * 2),
  255.     @border.bitmap.height - (MiniMap::MINIMAP_BORDER_SIZE * 2))
  256.    
  257.     @map_sprite = Sprite.new
  258.     @map_sprite.x = map_rect.x
  259.     @map_sprite.y = map_rect.y
  260.     @map_sprite.z = MiniMap::MAP_Z
  261.     bitmap_width = $game_map.width * grid_size + map_rect.width
  262.     bitmap_height = $game_map.height * grid_size + map_rect.height
  263.     @map_sprite.bitmap = Bitmap.new(bitmap_width, bitmap_height)
  264.     @map_sprite.src_rect = map_rect

  265.     @object_sprite = Sprite.new
  266.     @object_sprite.x = map_rect.x
  267.     @object_sprite.y = map_rect.y
  268.     @object_sprite.z = MiniMap::MAP_Z + 1
  269.     @object_sprite.bitmap = Bitmap.new(bitmap_width, bitmap_height)
  270.     @object_sprite.src_rect = map_rect
  271.     @object_sprite1 = {}
  272.    
  273.     @position_sprite = Sprite_Base.new
  274.     @position_sprite.x = map_rect.x + @size[0] / 2 * grid_size
  275.     @position_sprite.y = map_rect.y + @size[1] / 2 * grid_size
  276.     @position_sprite.z = MiniMap::MAP_Z + 2
  277.    
  278.     bitmap = Bitmap.new(grid_size, grid_size)
  279.     # Player's Outline
  280.     if MiniMap::USE_OUTLINE_PLAYER and MiniMap::GRID_SIZE >= 3
  281.       bitmap.fill_rect(bitmap.rect, MiniMap::PLAYER_OUTLINE_COLOR)
  282.       brect = Rect.new(bitmap.rect.x + 1, bitmap.rect.y + 1, bitmap.rect.width - 2,
  283.         bitmap.rect.height - 2)
  284.       bitmap.clear_rect(brect)
  285.     else
  286.       brect = bitmap.rect
  287.     end
  288.    
  289.     bitmap.fill_rect(brect, MiniMap::PLAYER_COLOR)
  290.     @position_sprite.bitmap = bitmap

  291.     draw_map
  292.     update_object_list
  293.     draw_object
  294.     update_position
  295.   end

  296.   def draw_map
  297.     bitmap = @map_sprite.bitmap
  298.     bitmap.fill_rect(bitmap.rect, MiniMap::BACKGROUND_COLOR)
  299.     map_rect = Rect.new(@mmr[0], @mmr[1], @mmr[2], @mmr[3])
  300.     grid_size = [MiniMap::GRID_SIZE, 1].max
  301.    
  302.     $game_map.width.times do |i|
  303.       $game_map.height.times do |j|
  304.         if !$game_map.passable?(i, j)
  305.           next
  306.         end
  307.         rect = Rect.new(map_rect.width / 2 + grid_size * i,
  308.           map_rect.height / 2 + grid_size * j,
  309.           grid_size, grid_size)
  310.         if grid_size >= 3
  311.           if !$game_map.passable?(i, j)
  312.             rect.height -= 1
  313.             rect.x += 1
  314.             rect.width -= 1
  315.             rect.width -= 1
  316.             rect.y += 1
  317.             rect.height -= 1
  318.           end
  319.         end
  320.         bitmap.fill_rect(rect, MiniMap::FOREGROUND_COLOR)
  321.       end
  322.     end
  323.   end

  324.   def update_object_list
  325.     @object_list = {}
  326.     $game_map.events.values.each do |e|
  327.       comment = e.mm_comment?(MiniMap::TAG_EVENT, true)
  328.       if comment != ''
  329.         #type = comment.gsub(/#{MiniMap::TAG_EVENT}/){}.gsub(/\s+/){}
  330.         type = comment
  331.         @object_list[type] = [] if @object_list[type].nil?
  332.         @object_list[type] << e
  333.       end
  334.     end
  335.   end

  336.   def draw_object
  337.     bitmap = @object_sprite.bitmap
  338.     bitmap.clear
  339.     map_rect = Rect.new(@mmr[0], @mmr[1], @mmr[2], @mmr[3])
  340.     grid_size = [MiniMap::GRID_SIZE, 1].max
  341.     rect = Rect.new(0, 0, grid_size, grid_size)
  342.     mw = map_rect.width / 2
  343.     mh = map_rect.height / 2
  344.     @object_list.each do |key, events|
  345.       color = MiniMap::OBJECT_COLOR[key]
  346.       next if events.nil? or color.nil?
  347.       events.each do |obj|
  348.         if !obj.character_name.empty?
  349.           obj_pic = obj.character_name
  350.         end
  351.           rect.x = mw + obj.real_x * grid_size / 256
  352.           rect.y = mh + obj.real_y * grid_size / 256
  353.           # Event's Outline
  354.           if MiniMap::USE_OUTLINE_EVENT and MiniMap::GRID_SIZE >= 3
  355.             bitmap.fill_rect(rect, MiniMap::EVENT_OUTLINE_COLOR)
  356.             brect = Rect.new(rect.x + 1, rect.y + 1, rect.width - 2,
  357.             rect.height - 2)
  358.             if obj_pic != nil and obj.view_charactor
  359.               @object_sprite1[obj].dispose if @object_sprite1[obj] != nil
  360.               @object_sprite1[obj] = Sprite.new
  361.               #p rect.x,rect.y,brect.x,brect.y
  362.               @object_sprite1[obj].x = map_rect.x + rect.x
  363.               @object_sprite1[obj].y = map_rect.y + rect.y
  364.               @object_sprite1[obj].z = MiniMap::MAP_Z + 1
  365.               @object_sprite1[obj].bitmap = Cache.character(obj_pic)
  366.               @object_sprite1[obj].zoom_x ,@object_sprite1[obj].zoom_y = MiniMap::EVENT_CHARACTOR_ZOOM , MiniMap::EVENT_CHARACTOR_ZOOM
  367.               sign = obj_pic[/^[\!\$]./]
  368.               if sign != nil and sign.include?('$')
  369.                 cw = bitmap.width / 3
  370.                 ch = bitmap.height / 4
  371.               else
  372.                 cw = bitmap.width / 12
  373.                 ch = bitmap.height / 8
  374.               end
  375.               @object_sprite1[obj].ox = cw / 2
  376.               @object_sprite1[obj].oy = ch
  377.               @object_sprite1[obj].src_rect.set(0, 0, 2*cw, 1.1*ch*MiniMap::EVENT_CHARACTOR_H)
  378.               #brect1 = Rect.new(rect.x + 1, rect.y + 1, rect.width - 2, rect.height - 2)
  379.               #@object_sprite1[obj].src_rect = map_rect
  380.             end
  381.           else
  382.             brect = bitmap.rect
  383.           end
  384.           bitmap.fill_rect(brect, color)
  385.         #end
  386.       end
  387.     end
  388.   end

  389.   def update
  390.     if @mmr != $game_system.minimap
  391.       dispose
  392.       refresh
  393.     end
  394.     draw_object
  395.     update_position
  396.     if @map_sprite.visible
  397.       @map_sprite.update
  398.       @object_sprite.update
  399.       for obj in @object_sprite1.values
  400.         obj.update
  401.       end
  402.       @position_sprite.update
  403.     end
  404.   end

  405.   def update_position
  406.     map_rect = Rect.new(@mmr[0], @mmr[1], @mmr[2], @mmr[3])
  407.     grid_size = [MiniMap::GRID_SIZE, 1].max
  408.     sx = $game_player.real_x * grid_size / 256
  409.     sy = $game_player.real_y * grid_size / 256
  410.     @map_sprite.src_rect.x = sx
  411.     @map_sprite.src_rect.y = sy
  412.     a = @object_sprite.x - sx ; b = @object_sprite.y - sy
  413.     @object_sprite.src_rect.x = sx
  414.     @object_sprite.src_rect.y = sy
  415.     for obj in @object_sprite1.values
  416.       obj.x += a - map_rect.x + MiniMap::EVENT_CHARACTOR_X
  417.       obj.y += b - map_rect.y + MiniMap::EVENT_CHARACTOR_Y
  418.     end
  419.   end
  420. end
  421. #==============================================================================
  422. # ■ Spriteset_Map
  423. #------------------------------------------------------------------------------
  424. class Spriteset_Map
  425.   attr_reader :minimap
  426.   alias wora_minimap_sprsetmap_ini initialize
  427.   alias wora_minimap_sprsetmap_dis dispose
  428.   alias wora_minimap_sprsetmap_upd update
  429.   
  430.   def initialize
  431.     wora_minimap_sprsetmap_ini
  432.     if $game_map.show_minimap?
  433.       @minimap = Game_MiniMap.new(@tilemap)
  434.       $game_system.show_minimap = true if $game_system.show_minimap.nil?
  435.       @minimap.visible = $game_system.show_minimap
  436.     end
  437.   end
  438.   
  439.   def dispose
  440.     @minimap.dispose if [email protected]?
  441.     wora_minimap_sprsetmap_dis
  442.   end

  443.   def update
  444.     if [email protected]?
  445.       if $game_system.show_minimap
  446.         @minimap.visible = true
  447.         @minimap.update
  448.       else
  449.         @minimap.visible = false
  450.       end
  451.     end
  452.     wora_minimap_sprsetmap_upd
  453.   end
  454. end
  455. #==============================================================================
  456. # ■ Scene_Map
  457. #------------------------------------------------------------------------------
  458. class Scene_Map < Scene_Base
  459.   attr_reader :spriteset
  460. end
复制代码



XP版
  1. #===============================================================
  2. # ● [VX] ◦迷你地图 ◦ □
  3. # * 无须图片的迷你地图脚本,浪使者倾情汉化 *
  4. #--------------------------------------------------------------
  5. # ◦ by Woratana [原作者]
  6. # ◦ 用于 RPG Maker VX  
  7. # ◦ 最近更新: 09/06/2008
  8. # ◦ 版本: 1.0 Beta
  9. #--------------------------------------------------------------
  10. # ◦ 特别感谢: KGC 的 XP 迷你地图脚本,
  11. # 没有他的迷你地图脚本,这个就不会被做出来.
  12. #--------------------------------------------------------------

  13. module MiniMap
  14.   #===========================================================================
  15.   # [START]迷你地图脚本设置部分 地图名前+[NOMAP] 不显示
  16.   #---------------------------------------------------------------------------
  17.   SWITCH_NO_MINIMAP = 10 #  打开这个开关的话就不显示迷你地图
  18.    
  19.   MAP_RECT = [410, 20, 100, 100] # 迷你地图的大小和位置
  20.   # [X, Y, Width, Height]
  21.   # 你可以用调用脚本的方法任意改变他:
  22.   # $game_system.minimap = [X, Y, Width, Height]

  23.   MAP_Z = 0 # 迷你地图的Z轴
  24.   # 增加这个数值,如果迷你地图显示在某些物体下面的话(被覆盖)。

  25.   GRID_SIZE = 5 # 引导大小,建议数值大于3.
  26.   
  27.   MINIMAP_BORDER_COLOR = Color.new(0, 0, 255, 160) # 色彩设定
  28.   # Color.new(Red, Green, Blue, Opacity)
  29.   MINIMAP_BORDER_SIZE = 2
  30.   
  31.   FOREGROUND_COLOR = Color.new(224, 224, 255, 160) # 可通过物颜色
  32.   BACKGROUND_COLOR = Color.new(220, 0, 0, 160) # 不可通过物颜色

  33.   USE_OUTLINE_PLAYER = true # 是否描绘的角色?
  34.   PLAYER_OUTLINE_COLOR = Color.new(0, 0, 0, 192) # 角色颜色
  35.   USE_OUTLINE_EVENT = true # 是否描绘特殊事件?(如商人、敌人NPC等)
  36.   EVENT_OUTLINE_COLOR = Color.new(255, 255, 255, 192) # 特殊事件颜色
  37.   EVENT_CHARACTOR_ZOOM = 0.4  #显示头像的缩放比例
  38.   EVENT_CHARACTOR_H    = 0.6  #显示头像的大小比例 1为显示全身像 0.5为显示半身像
  39.   EVENT_CHARACTOR_X = 2       #显示头像的X坐标
  40.   EVENT_CHARACTOR_Y = 13      #显示头像的X坐标
  41.                               #要显示头像请再事件中加注释“显示头像”
  42.   
  43.   PLAYER_COLOR = Color.new(255, 0, 0, 192) # 角色颜色设定
  44.   #---------------------------------------------------------------------------

  45.   OBJECT_COLOR = {} # 不要改变或删除这一行!
  46.   #===============================================================
  47.   # * 设置关键字和颜色
  48.   #---------------------------------------------------------------
  49.   # ** 例如:
  50.   # OBJECT_COLOR['keyword'] = Color.new(Red, Green, Blue, Opacity)
  51.   #-------------------------------------------------------------
  52.   # * 'keyword': 你想放到公共事件里来显示的颜色
  53.   # ** 标记: 'keyword' 是很关键的!
  54.   # * Color.new(...): 你需要的颜色
  55.   # 你可输入 0 - 255 的可选色彩范围 (Red, Green, Blue, Opacity)
  56.   #-------------------------------------------------------------
  57.   OBJECT_COLOR['npc'] = Color.new(30,144,255,160)
  58.   OBJECT_COLOR['treasure'] = Color.new(0,255,255,160)
  59.   OBJECT_COLOR['enemy'] = Color.new(139,35,35,160)
  60.   OBJECT_COLOR['merchant'] = Color.new(255,255,0,160)
  61.   
  62.   #===========================================================================
  63.   # * [说明] 标签:
  64.   #---------------------------------------------------------------------------
  65.   # 改变这些关闭迷你地图 & 或设置显示迷你地图~
  66.   #-----------------------------------------------------------------------
  67.   TAG_NO_MINIMAP = '[NOMAP]'
  68.   TAG_EVENT = ["npc","enemy","merchant","treasure"]
  69.   #---------------------------------------------------------------------------

  70.   #---------------------------------------------------------------------------
  71.   # [END] 迷你地图脚本设置部分
  72.   #===========================================================================
  73.   
  74.   def self.refresh
  75.     if $scene.is_a?(Scene_Map)
  76.       $scene.spriteset.minimap.refresh
  77.     end
  78.   end
  79.   
  80.   def self.update_object
  81.     if $scene.is_a?(Scene_Map)
  82.       $scene.spriteset.minimap.update_object_list
  83.     end
  84.   end
  85. end

  86. #==============================================================================
  87. # ■ RPG::MapInfo
  88. #==============================================================================
  89. class RPG::MapInfo
  90.   def name
  91.     return @name.gsub(/\[.*\]/) { }
  92.   end

  93.   def original_name
  94.     return @name
  95.   end

  96.   def show_minimap?
  97.     return [email protected]?(MiniMap::TAG_NO_MINIMAP)
  98.   end
  99. end
  100. #==============================================================================
  101. # ■ Game_System
  102. #==============================================================================
  103. class Game_System
  104.   attr_accessor :minimap
  105.   alias wora_minimap_gamsys_ini initialize
  106.   
  107.   def initialize
  108.     wora_minimap_gamsys_ini
  109.     @minimap = MiniMap::MAP_RECT
  110.   end
  111.   
  112.   def show_minimap
  113.     return !$game_switches[MiniMap::SWITCH_NO_MINIMAP]
  114.   end
  115. end
  116. #==============================================================================
  117. # ■ Game_Map
  118. #==============================================================================
  119. class Game_Map
  120.   alias wora_minimap_gammap_setup setup
  121.   def setup(map_id)
  122.     wora_minimap_gammap_setup(map_id)
  123.     @db_info = load_data('Data/MapInfos.rxdata') if @db_info.nil?
  124.     @map_info = @db_info[map_id]
  125.   end
  126.   
  127.   def show_minimap?
  128.     return @map_info.show_minimap?
  129.   end
  130. end
  131. #==============================================================================
  132. # ■ Game_Event
  133. #==============================================================================
  134. class Game_Event < Game_Character
  135.   def mm_comment?(comment, return_comment = false )
  136.     if [email protected]?
  137.       for i in [email protected] - 1
  138.         next if @list[i].code != 108
  139.         if comment.include?(@list[i].parameters[0])
  140.           return @list[i].parameters[0] if return_comment
  141.           return true
  142.         end
  143.       end
  144.     end
  145.     return '' if return_comment
  146.     return false
  147.   end
  148.   def view_charactor
  149.     if [email protected]?
  150.       for i in [email protected] - 1
  151.         next if @list[i].code != 108
  152.         if @list[i].parameters[0] = "显示头像"
  153.           return true
  154.         end
  155.       end
  156.     end
  157.     return false
  158.   end
  159. end
  160. #==============================================================================
  161. # ■ Game_MiniMap
  162. #------------------------------------------------------------------------------
  163. class Game_MiniMap
  164.   def initialize(tilemap)
  165.     @tilemap = tilemap
  166.     refresh
  167.   end

  168.   def dispose
  169.     @border.bitmap.dispose
  170.     @border.dispose
  171.     @map_sprite.bitmap.dispose
  172.     @map_sprite.dispose
  173.     @object_sprite.bitmap.dispose
  174.     @object_sprite.dispose
  175.     @position_sprite.bitmap.dispose
  176.     @position_sprite.dispose
  177.   end

  178.   def visible
  179.     return @map_sprite.visible
  180.   end

  181.   def visible=(value)
  182.     @map_sprite.visible = value
  183.     @object_sprite.visible = value
  184.     @position_sprite.visible = value
  185.     @border.visible = value
  186.   end

  187.   def refresh
  188.     @mmr = $game_system.minimap
  189.     map_rect = Rect.new(@mmr[0], @mmr[1], @mmr[2], @mmr[3])
  190.     grid_size = [MiniMap::GRID_SIZE, 1].max

  191.     @x = 0
  192.     @y = 0
  193.     @size = [map_rect.width / grid_size, map_rect.height / grid_size]

  194.     @border = Sprite.new
  195.     @border.x = map_rect.x - MiniMap::MINIMAP_BORDER_SIZE
  196.     @border.y = map_rect.y - MiniMap::MINIMAP_BORDER_SIZE
  197.     b_width = map_rect.width + MiniMap::MINIMAP_BORDER_SIZE
  198.     b_height = map_rect.height + MiniMap::MINIMAP_BORDER_SIZE
  199.     @border.bitmap = Bitmap.new(b_width, b_height)
  200.     @border.bitmap.fill_rect(@border.bitmap.rect, MiniMap::MINIMAP_BORDER_COLOR)
  201.     #@border.bitmap.clear_rect(MiniMap::MINIMAP_BORDER_SIZE, MiniMap::MINIMAP_BORDER_SIZE,
  202.     #@border.bitmap.width - (MiniMap::MINIMAP_BORDER_SIZE * 2),
  203.     #@border.bitmap.height - (MiniMap::MINIMAP_BORDER_SIZE * 2))
  204.    
  205.     @map_sprite = Sprite.new
  206.     @map_sprite.x = map_rect.x
  207.     @map_sprite.y = map_rect.y
  208.     @map_sprite.z = MiniMap::MAP_Z
  209.     bitmap_width = $game_map.width * grid_size + map_rect.width
  210.     bitmap_height = $game_map.height * grid_size + map_rect.height
  211.     @map_sprite.bitmap = Bitmap.new(bitmap_width, bitmap_height)
  212.     @map_sprite.src_rect = map_rect

  213.     @object_sprite = Sprite.new
  214.     @object_sprite.x = map_rect.x
  215.     @object_sprite.y = map_rect.y
  216.     @object_sprite.z = MiniMap::MAP_Z + 1
  217.     @object_sprite.bitmap = Bitmap.new(bitmap_width, bitmap_height)
  218.     @object_sprite.src_rect = map_rect
  219.     @object_sprite1 = {}
  220.    
  221.     @position_sprite = Sprite_Base.new
  222.     @position_sprite.x = map_rect.x + @size[0] / 2 * grid_size
  223.     @position_sprite.y = map_rect.y + @size[1] / 2 * grid_size
  224.     @position_sprite.z = MiniMap::MAP_Z + 2
  225.    
  226.     bitmap = Bitmap.new(grid_size, grid_size)
  227.     # Player's Outline
  228.     if MiniMap::USE_OUTLINE_PLAYER and MiniMap::GRID_SIZE >= 3
  229.       bitmap.fill_rect(bitmap.rect, MiniMap::PLAYER_OUTLINE_COLOR)
  230.       brect = Rect.new(bitmap.rect.x + 1, bitmap.rect.y + 1, bitmap.rect.width - 2,
  231.         bitmap.rect.height - 2)
  232.       #bitmap.clear_rect(brect)
  233.     else
  234.       brect = bitmap.rect
  235.     end
  236.    
  237.     bitmap.fill_rect(brect, MiniMap::PLAYER_COLOR)
  238.     @position_sprite.bitmap = bitmap

  239.     draw_map
  240.     update_object_list
  241.     draw_object
  242.     update_position
  243.   end

  244.   def draw_map
  245.     bitmap = @map_sprite.bitmap
  246.     bitmap.fill_rect(bitmap.rect, MiniMap::BACKGROUND_COLOR)
  247.     map_rect = Rect.new(@mmr[0], @mmr[1], @mmr[2], @mmr[3])
  248.     grid_size = [MiniMap::GRID_SIZE, 1].max
  249.    
  250.     $game_map.width.times do |i|
  251.       $game_map.height.times do |j|
  252.         if !$game_map.passable?(i, j)
  253.           next
  254.         end
  255.         rect = Rect.new(map_rect.width / 2 + grid_size * i,
  256.           map_rect.height / 2 + grid_size * j,
  257.           grid_size, grid_size)
  258.         if grid_size >= 3
  259.           if !$game_map.passable?(i, j)
  260.             rect.height -= 1
  261.             rect.x += 1
  262.             rect.width -= 1
  263.             rect.width -= 1
  264.             rect.y += 1
  265.             rect.height -= 1
  266.           end
  267.         end
  268.         bitmap.fill_rect(rect, MiniMap::FOREGROUND_COLOR)
  269.       end
  270.     end
  271.   end

  272.   def update_object_list
  273.     @object_list = {}
  274.     $game_map.events.values.each do |e|
  275.       comment = e.mm_comment?(MiniMap::TAG_EVENT, true)
  276.       if comment != ''
  277.         #type = comment.gsub(/#{MiniMap::TAG_EVENT}/){}.gsub(/\s+/){}
  278.         type = comment
  279.         @object_list[type] = [] if @object_list[type].nil?
  280.         @object_list[type] << e
  281.       end
  282.     end
  283.   end

  284.   def draw_object
  285.     bitmap = @object_sprite.bitmap
  286.     bitmap.clear
  287.     map_rect = Rect.new(@mmr[0], @mmr[1], @mmr[2], @mmr[3])
  288.     grid_size = [MiniMap::GRID_SIZE, 1].max
  289.     rect = Rect.new(0, 0, grid_size, grid_size)
  290.     mw = map_rect.width / 2
  291.     mh = map_rect.height / 2
  292.     @object_list.each do |key, events|
  293.       color = MiniMap::OBJECT_COLOR[key]
  294.       next if events.nil? or color.nil?
  295.       events.each do |obj|
  296.         if !obj.character_name.empty?
  297.           obj_pic = obj.character_name
  298.           obj_hue = obj.character_hue
  299.         end
  300.           rect.x = mw + obj.real_x * grid_size / 256
  301.           rect.y = mh + obj.real_y * grid_size / 256
  302.           # Event's Outline
  303.           if MiniMap::USE_OUTLINE_EVENT and MiniMap::GRID_SIZE >= 3
  304.             bitmap.fill_rect(rect, MiniMap::EVENT_OUTLINE_COLOR)
  305.             brect = Rect.new(rect.x + 1, rect.y + 1, rect.width - 2,
  306.             rect.height - 2)
  307.             if obj_pic != nil and obj.view_charactor
  308.               @object_sprite1[obj].dispose if @object_sprite1[obj] != nil
  309.               @object_sprite1[obj] = Sprite.new
  310.               #p rect.x,rect.y,brect.x,brect.y
  311.               @object_sprite1[obj].x = map_rect.x + rect.x
  312.               @object_sprite1[obj].y = map_rect.y + rect.y
  313.               @object_sprite1[obj].z = MiniMap::MAP_Z + 1
  314.               @object_sprite1[obj].bitmap = RPG::Cache.character(obj_pic,obj_hue)
  315.               @object_sprite1[obj].zoom_x ,@object_sprite1[obj].zoom_y = MiniMap::EVENT_CHARACTOR_ZOOM ,MiniMap::EVENT_CHARACTOR_ZOOM
  316.               @cw = @object_sprite1[obj].bitmap.width / 4
  317.               @ch = @object_sprite1[obj].bitmap.height / 4
  318.               @object_sprite1[obj].ox = @cw / 2
  319.               @object_sprite1[obj].oy = @ch
  320.               @object_sprite1[obj].src_rect.set(0, 0, @cw, @ch*MiniMap::EVENT_CHARACTOR_H)
  321.               #brect1 = Rect.new(rect.x + 1, rect.y + 1, rect.width - 2, rect.height - 2)
  322.               #@object_sprite1[obj].src_rect = map_rect
  323.             end
  324.             #bitmap.clear_rect(brect)
  325.           else
  326.             #brect = bitmap.rect
  327.           end
  328.           bitmap.fill_rect(brect, color)
  329.         #end
  330.       end
  331.     end
  332.   end

  333.   def update
  334.     if @mmr != $game_system.minimap
  335.       dispose
  336.       refresh
  337.     end
  338.     draw_object
  339.     update_position
  340.     if @map_sprite.visible
  341.       @map_sprite.update
  342.       @object_sprite.update
  343.       for obj in @object_sprite1.values
  344.         obj.update
  345.       end
  346.       @position_sprite.update
  347.     end
  348.   end

  349.   def update_position
  350.     map_rect = Rect.new(@mmr[0], @mmr[1], @mmr[2], @mmr[3])
  351.     grid_size = [MiniMap::GRID_SIZE, 1].max
  352.     sx = $game_player.real_x * grid_size / 256
  353.     sy = $game_player.real_y * grid_size / 256
  354.     @map_sprite.src_rect.x = sx
  355.     @map_sprite.src_rect.y = sy
  356.     a = @object_sprite.x - sx ; b = @object_sprite.y - sy
  357.     @object_sprite.src_rect.x = sx
  358.     @object_sprite.src_rect.y = sy
  359.     for obj in @object_sprite1.values
  360.       obj.x += a - map_rect.x + MiniMap::EVENT_CHARACTOR_X
  361.       obj.y += b - map_rect.y + MiniMap::EVENT_CHARACTOR_Y
  362.     end
  363.   end
  364. end
  365. #==============================================================================
  366. # ■ Spriteset_Map
  367. #------------------------------------------------------------------------------
  368. class Spriteset_Map
  369.   attr_reader :minimap
  370.   alias wora_minimap_sprsetmap_ini initialize
  371.   alias wora_minimap_sprsetmap_dis dispose
  372.   alias wora_minimap_sprsetmap_upd update
  373.   
  374.   def initialize
  375.     wora_minimap_sprsetmap_ini
  376.     if $game_map.show_minimap?
  377.       @minimap = Game_MiniMap.new(@tilemap)
  378.       $game_system.show_minimap = true if $game_system.show_minimap.nil?
  379.       @minimap.visible = $game_system.show_minimap
  380.     end
  381.   end
  382.   
  383.   def dispose
  384.     @minimap.dispose if [email protected]?
  385.     wora_minimap_sprsetmap_dis
  386.   end

  387.   def update
  388.     if [email protected]?
  389.       if $game_system.show_minimap
  390.         @minimap.visible = true
  391.         @minimap.update
  392.       else
  393.         @minimap.visible = false
  394.       end
  395.     end
  396.     wora_minimap_sprsetmap_upd
  397.   end
  398. end
复制代码

作者: 越前リョーマ    时间: 2008-9-15 04:07
以下引用hitlerson于2008-9-14 19:15:23的发言:

有人说那个脚本VX不能用,呵呵,没弄过VX,不知道VX的角色图是这样的哦,没Hue的~!

改好了,这个是VX版本的,当然我自己测试用的是XP版本的,也放着吧

感觉比较不错,但是好像没地图缩略图的感觉…… = =
作者: 沉影不器    时间: 2008-9-15 04:29
提示: 作者被禁止或删除 内容自动屏蔽
作者: 飘飘落    时间: 2008-9-15 17:30
提示: 作者被禁止或删除 内容自动屏蔽
作者: 精灵使者    时间: 2008-9-15 17:39
以下引用沉影不器于2008-9-14 20:29:02的发言:

用了行走图头像就破坏那份国外脚本的感觉了...看第一眼就一直喜欢那样的简洁感

话说回来,改头像可能更合多数的的心意

我建议使用XP以前那种小地图缩略图来改,加上事件和头像肯定会很爽。
作者: Mage    时间: 2008-12-7 23:50
提示: 作者被禁止或删除 内容自动屏蔽
作者: yoxi    时间: 2008-12-8 00:13
提示: 作者被禁止或删除 内容自动屏蔽
作者: 劫狱    时间: 2008-12-8 00:41
提示: 作者被禁止或删除 内容自动屏蔽
作者: 宾少    时间: 2009-6-12 08:00
迷你地图中的那个描绘特殊事件好象不能用吧~
USE_OUTLINE_EVENT = true这样没错吧~可是不能显示哟~
作者: 精灵使者    时间: 2009-6-12 08:00
楼上的好像错误连连,请重新修改。
无法找到character和色调
作者: 马甲中の爪    时间: 2010-6-27 13:38
提示: 作者被禁止或删除 内容自动屏蔽
作者: 沉夜    时间: 2010-7-3 19:10
我顶·····
作者: aoxuebankin    时间: 2010-9-18 16:02
支持支持




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