查看: 2587|回复: 5

[已经解决] 添加“某些地图禁止打开小地图”

[复制链接]
梦石
0
星屑
1556
在线时间
626 小时
注册时间
2010-8-5
回帖
317
发表于 2014-10-1 21:33:11 | 显示全部楼层 |阅读模式

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

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

×
我想让某些地图不会触发小地图系统

例如,把某些不出发小地图系统的地图ID统一起来写个数据组
          然后这些地图里就不会触发小地图系统
PS:为什么不能把“最初可见”给关闭?无论是flash 还是 true 每次进入地图都会是默认打开?100号开关也不行

[pre lang="ruby" line="1"]module PLAN_Map_Window
  WIN_X       = 20         # 窗口的初始 X 座標
  WIN_Y       = 0         # 窗口的初始 Y 座標
  WIN_WIDTH   = 640      # 地图的宽度
  WIN_HEIGHT  = 480      # 地图的高度
  
  #。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
  # 新加:个别地图缩放比例设置,格式:地图ID => 缩放比例  。
  #未添加的地图,用下面的 地图的放缩比例 。
  R_ZOOM      = {1=>10.0, 102=>6.0,103=>4.5,104=>4.5,105=>4.5,
                 106=>4.5,107=>4.5,108=>4.5}
  #。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
  
  ZOOM        = 5.0       # 地图的放缩比例
  ZOOMP       = 1         # 小地图上角色的缩放(1为图片原来大小,往大调节时图片变小)
  SHOWPLAYER  = false     # 是否显示角色,当为true时,小地图将显示角色为false时显示兰色的标记
  PLAYCW      = 4         #当使用上面的显示角色时,这个用来设置,角色的横向帧数
  PLAYCH      = 4         #当使用上面的显示角色时,这个用来设置,角色的综向帧数
  WINDOWSKIN  = ""        # 自定义地图窗口素材,如果留空则是默认的

  ON_OFF_KEY  = Input::A  # 打开地图的按钮,A就是键盘的Z键

  SWITCH      = 100       # 禁用地图功能的开关,默认这个就是打开100号开关则禁止
                          # 使用地图功能,关闭则可以使用地图功能

  WINDOW_MOVE = false     # 是否可以自动改变窗口位置(true:可改变, false:固定)
  
  OVER_X      = 0   # 自动改变后窗口的位置x
  OVER_Y      = 512 - WIN_HEIGHT       #自动改变后窗口的位置y

  OPACITY     = 0       # 窗口的透明度
  C_OPACITY   = 255       # 地图的透明度
  VISIBLE     = false  # 最初是否可见
end
#==============================================================================
# ■ Game_Temp
#==============================================================================
class Game_Temp
  attr_accessor  :map_visible     # 地图的表示状態
  alias plan_map_window_initialize initialize
  def initialize
    plan_map_window_initialize
    @map_visible = true
  end
end
#==============================================================================
# ■ Scene_Map
#==============================================================================
class Scene_Map
  #--------------------------------------------------------------------------
  # ● 主处理
  #--------------------------------------------------------------------------
  alias plan_map_window_main main
  def main
    @map_window         = Window_Map.new
    @map_window.visible = $game_temp.map_visible
    plan_map_window_main
    @map_window.dispose
  end
  #--------------------------------------------------------------------------
  # ● 更新
  #--------------------------------------------------------------------------
  alias plan_map_window_update update
  def update
    $game_temp.map_visible = @map_window.visible
    plan_map_window_update
    unless $game_switches[PLAN_Map_Window::SWITCH]      
      if Kboard.keyboard($R_Key_TAB)
        if @map_window.visible
          @map_window.visible = false
        else
          @map_window.visible = true
        end
      end
    else
      if @map_window.visible
        @map_window.visible = false
      end
    end
    if @map_window.visible
      @map_window.update
    end
  end
  #--------------------------------------------------------------------------
  # ● 场所移动的变化
  #--------------------------------------------------------------------------
  alias plan_map_window_transfer_player transfer_player
  def transfer_player
    visible = @map_window.visible
    @map_window.visible = false
    plan_map_window_transfer_player
    @map_window.dispose
    @map_window = Window_Map.new
    @map_window.visible = visible
  end
end
#==============================================================================
# ■ Window_Map
#==============================================================================
class Window_Map < Window_Base
  #--------------------------------------------------------------------------
  # ● 初始化
  #--------------------------------------------------------------------------
  def initialize
    x = PLAN_Map_Window::WIN_X
    y = PLAN_Map_Window::WIN_Y
    w = PLAN_Map_Window::WIN_WIDTH
    h = PLAN_Map_Window::WIN_HEIGHT
    super(x, y, w, h)
    unless PLAN_Map_Window::WINDOWSKIN.empty?
      self.windowskin = RPG::Cache.windowskin(PLAN_Map_Window::WINDOWSKIN)
    end
    self.contents = Bitmap.new(width - 32, height - 32)
    self.opacity = PLAN_Map_Window::OPACITY
    self.contents_opacity = PLAN_Map_Window::C_OPACITY
    @old_real_x = $game_player.real_x
    @old_real_y = $game_player.real_y
    @all_map = make_all_map
    self.visible = PLAN_Map_Window::VISIBLE
    refresh
  end
  #--------------------------------------------------------------------------
  # ● 缩小图做成
  #--------------------------------------------------------------------------
  def make_all_map
    all_map = RPG::Cache.icon("地图" + $game_map.map_id.to_s)  
    cw = $game_map.width * 32
    ch = $game_map.height * 32
    src_rect = Rect.new(0, 0, cw, ch)
    self.contents.blt(0 , 0, all_map, src_rect)
    #-------------------------------------------------------------
    #..............................................................
    if PLAN_Map_Window::R_ZOOM.keys.include?($game_map.map_id)
      zoom = PLAN_Map_Window::R_ZOOM[$game_map.map_id]
    else
      zoom = PLAN_Map_Window::ZOOM
    end
    #..............................................................
    #--------------------------------------------------------------
    w = ($game_map.width / zoom) * 32
    h = ($game_map.height / zoom) * 32
    ret_bitmap = Bitmap.new(w, h)
    src_rect = Rect.new(0, 0, all_map.width, all_map.height)
    dest_rect = Rect.new(0, 0, ret_bitmap.width, ret_bitmap.height)
    ret_bitmap.stretch_blt(dest_rect, all_map, src_rect)
    all_map.dispose
    return ret_bitmap
  end
  #--------------------------------------------------------------------------
  # ● 刷新
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
   
    if PLAN_Map_Window::R_ZOOM.keys.include?($game_map.map_id)
      zoom = PLAN_Map_Window::R_ZOOM[$game_map.map_id]
    else
      zoom = PLAN_Map_Window::ZOOM
    end
    one_tile_size = 32 / zoom
   
    x = $game_player.real_x - 128 * (self.contents.width / one_tile_size) / 2
    y = $game_player.real_y - 128 * (self.contents.height / one_tile_size) / 2
    x = x * one_tile_size / 128
    y = y * one_tile_size / 128
    half_width = self.contents.width * 128 / 2
    rest_width = ($game_map.width * 128 - $game_player.real_x) * one_tile_size
    rev_x = 0
    if @all_map.width < self.contents.width
      rev_x = (half_width - $game_player.real_x * one_tile_size) / 128
      rev_x -= (self.contents.width - @all_map.width) / 2
      x += rev_x
    elsif half_width > $game_player.real_x * one_tile_size
      rev_x = (half_width - $game_player.real_x * one_tile_size) / 128
      x += rev_x
    elsif half_width > rest_width
      rev_x = -((half_width - rest_width) / 128)
      x += rev_x
    end
    half_height = self.contents.height * 128 / 2
    rest_height = ($game_map.height * 128 - $game_player.real_y) * one_tile_size
    rev_y = 0
    if @all_map.height < self.contents.height
      rev_y = (half_height - $game_player.real_y * one_tile_size) / 128
      rev_y -= (self.contents.height - @all_map.height) / 2
      y += rev_y
    elsif half_height > $game_player.real_y * one_tile_size
      rev_y = (half_height - $game_player.real_y * one_tile_size) / 128
      y += rev_y
    elsif half_height > rest_height
      rev_y = -((half_height - rest_height) / 128)
      y += rev_y
    end
    src_rect = Rect.new(x, y, self.contents.width, self.contents.height)
    self.contents.blt(0, 0, @all_map, src_rect)
    if PLAN_Map_Window::WINDOW_MOVE == true
      wr = PLAN_Map_Window::WIN_X + self.width
      wl = PLAN_Map_Window::WIN_X
      ht = PLAN_Map_Window::WIN_Y
      he = PLAN_Map_Window::WIN_Y + self.height
      if $game_player.screen_x >= wl and $game_player.screen_x <= wr
        if $game_player.screen_y >= ht and $game_player.screen_y <= he
          self.x = PLAN_Map_Window::OVER_X
          self.y = PLAN_Map_Window::OVER_Y
        else
          self.x = PLAN_Map_Window::WIN_X
          self.y = PLAN_Map_Window::WIN_Y
        end
      else
        self.x = PLAN_Map_Window::WIN_X
        self.y = PLAN_Map_Window::WIN_Y
      end
    end
    if $game_party.actors.size > 0
      actor = $game_party.actors[0]
      if PLAN_Map_Window::SHOWPLAYER
      bitmap = RPG::Cache.character(actor.character_name, actor.character_hue)
      width = bitmap.width / PLAN_Map_Window::PLAYCW
      height = bitmap.height / PLAN_Map_Window::PLAYCH
      src_rect = Rect.new(0, 0, width, height)
      if PLAN_Map_Window::R_ZOOM.keys.include?($game_map.map_id)
        zoom = PLAN_Map_Window::R_ZOOM[$game_map.map_id]
      else
        zoom = PLAN_Map_Window::ZOOM
      end
      w = width / zoom
      h = height / zoom
      else
      bitmap = RPG::Cache.icon("标记" )
      width = (bitmap.width / PLAN_Map_Window::ZOOMP)
      height = (bitmap.height / PLAN_Map_Window::ZOOMP)
      src_rect = Rect.new(0, 0, width, height)
      w = width
      h = height
      end
      x = self.contents.width / 2 - w / 2 + one_tile_size / 2 - rev_x
      y = self.contents.height / 2 - h / 2 - rev_y
      dest_rect = Rect.new(x, y, w, h)
      self.contents.stretch_blt(dest_rect, bitmap, src_rect)
    end
  end
  #--------------------------------------------------------------------------
  # ● 更新
  #--------------------------------------------------------------------------
  def update
    super
    if @old_real_x != $game_player.real_x or @old_real_y != $game_player.real_y
      @old_real_x = $game_player.real_x
      @old_real_y = $game_player.real_y
      refresh
    end
  end
  #--------------------------------------------------------------------------
  # ● 释放
  #--------------------------------------------------------------------------
  def dispose
    super
    @all_map.dispose
  end
end[/pre]
梦石
0
星屑
1556
在线时间
626 小时
注册时间
2010-8-5
回帖
317
 楼主| 发表于 2014-10-1 21:35:31 | 显示全部楼层
或者提示的时候显示这张图片[版主,我连贴了。。]
提示.png
回复

使用道具 举报

梦石
0
星屑
1556
在线时间
626 小时
注册时间
2010-8-5
回帖
317
 楼主| 发表于 2014-10-2 09:19:06 | 显示全部楼层
回复

使用道具 举报

梦石
0
星屑
76
在线时间
1379 小时
注册时间
2012-7-5
回帖
1643

开拓者

发表于 2014-10-2 09:38:47 | 显示全部楼层
关闭最初可见的方法 :
第 23 行 关闭 100 号开关意味着打开小地图, 而开关们默认都是关闭的状态
解决姿势 : 把 67 行的 unless 改成 if , 同时顺手改动一下注释


禁用小地图 :
在 125 行 make_all_map 这里加一句分歧, 让它当前地图id在开头的数组(请自行添加)里时就返回 2L 的那张图
例如: 你在开头加了 NO_MAP = [1,2,3]
定义的时候
  1. def make_all_map
  2.   if PLAN_Map_Window::NO_MAP.include? $game_map.map_id
  3.     return Bitmap.new '提示.png的路径'
  4.   else
  5.     xxxxxxxxxxxxxxxxxxxxxxxx
  6.     return ret_bitmap
  7.   end
  8. end
复制代码


另外通过按键改变真伪值(true => false; false => true)可以不用像这个脚本里这么麻烦, 我举个例子
  1. visible ^= true if Input.trigger?(Input::A)
复制代码
就行了

点评

另外看楼主贴的脚本,似乎是以前被整合过的脚本。最新版本似乎不是这样的  发表于 2014-10-2 18:24
其实这个开关等除了读档或者存档,完全是留给事件党用的入口。  发表于 2014-10-2 18:23
↓ 说了是举例子, 我完全可以把visible改成别的能读取到的数据, 只是想说这种写法可以省字数  发表于 2014-10-2 18:20
麻烦的原因很简单。你试试读档或者存档试试看。你写的不会保存开启/关闭的状态  发表于 2014-10-2 18:13
谢谢喽.问题解决啦  发表于 2014-10-2 12:31

评分

参与人数 1梦石 +1 收起 理由
RyanBern + 1 认可答案

查看全部评分


  -fk: -azogi:
回复

使用道具 举报

梦石
0
星屑
1556
在线时间
626 小时
注册时间
2010-8-5
回帖
317
 楼主| 发表于 2014-10-2 12:01:22 | 显示全部楼层
kuerlulu 发表于 2014-10-2 09:38
关闭最初可见的方法 :
第 23 行 关闭 100 号开关意味着打开小地图, 而开关们默认都是关闭的状态
解决姿势  ...

还有个问题.

不能触发小地图功能的地图。打开后提示了图片。但是有一个很诡异的事。。。那个角色标记的图还在上面..

额.关于  新跳转到一个地图 不默认打开小地图功能.我还是没懂。。

点评

角色标记的图可能与小地图背景不是同一个bitmap, 也是我没仔细看. 依葫芦画瓢肛掉就好了  发表于 2014-10-2 12:11
你可以按F9看一下默认100号开关开没开....  发表于 2014-10-2 12:10
回复

使用道具 举报

精灵族の天使<

梦石
0
星屑
1712
在线时间
3039 小时
注册时间
2007-3-16
回帖
33092

开拓者贵宾

发表于 2014-10-2 18:10:17 | 显示全部楼层
#=>你的小地图版本已过期!
请更新新版【有打开/关闭小地图的开关】
https://rpg.blue/forum.php?mod=viewthread&tid=175971
回复

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部