Project1
标题:
(VX)如何显示特定地图名称?
[打印本页]
作者:
31号焦糖色
时间:
前天 18:59
标题:
(VX)如何显示特定地图名称?
本帖最后由 31号焦糖色 于 2026-6-23 19:27 编辑
地图名显示脚本
在Main的上方插入一个页,将本脚本复制到那页中即可
(第26行、30行部分需手动调整)
:
#==============================================================================
# ————————————————————————————————————
# 本脚本来自www.66rpg.com,转载和使用请保留此信息
# ————————————————————————————————————
#==============================================================================
# ■ 地图名显示脚本
# by Yuee
# 修改 龙魂 Q767444342
# 再修改(31号焦糖色):增加白名单/黑名单模式,指定地图显示/不显示
#==============================================================================
# ■ Window_MapName
# 显示地图名字的窗口。
#==============================================================================
class Window_MapName < Window_Base
#--------------------------------------------------------------------------
# ● 配置区
#--------------------------------------------------------------------------
# 总开关:61号开关ON时,所有地图都不显示
SWITCH = 61
# 显示模式:
# :blacklist = 黑名单(列表里的地图不显示,其他都显示)
# :whitelist = 白名单(只有列表里的地图才显示)
# ↓↓↓默认初始状态为黑名单模式
MODE = :blacklist
# 地图ID列表(改成你自己的地图ID)
# 比如 [2, 5, 7] 表示地图ID为2、5、7的地图
MAP_LIST = [] # 先放空,全部地图都显示,测试没问题再往里加
# 窗口位置
NAME_X = 20
NAME_Y = 20
NAME_W = 200
NAME_H = 60
# 显示时间(单位:帧,60帧=1秒)
SHOW_DELAY = 5 # 出现前等多久
SHOW_FADEIN = 30 # 淡入动画时间
SHOW_STAY = 50 # 完全显示停留时间
SHOW_FADEOUT = 30 # 淡出动画时间
# 透明度
OPACITY_BORDER = 244 # 边框
OPACITY_BG = 244 # 背景
OPACITY_TEXT = 255 # 文字
# 文字颜色(红, 绿, 蓝, 透明度)
TEXT_COLOR = Color.new(255, 255, 255, 255)
#--------------------------------------------------------------------------
# ● 初始化
#--------------------------------------------------------------------------
def initialize
super(NAME_X, NAME_Y, NAME_W, NAME_H)
self.opacity = 0
self.back_opacity = 0
self.contents_opacity = 0
self.contents = Bitmap.new(width - 32, height - 32)
@show_time = 0
@last_map_id = 0
end
#--------------------------------------------------------------------------
# ● 更新显示
#--------------------------------------------------------------------------
def setname
# 总开关判断
return if $game_switches[SWITCH] == true
current_map_id = $game_map.map_id
# 地图变了 → 重置显示状态
if current_map_id != @last_map_id
@last_map_id = current_map_id
# 判断这张地图是否应该显示地图名
if map_should_show?(current_map_id)
@show_time = SHOW_DELAY + SHOW_FADEIN + SHOW_STAY + SHOW_FADEOUT
refresh_text(current_map_id)
else
@show_time = 0
self.opacity = 0
self.back_opacity = 0
self.contents_opacity = 0
return
end
end
# 显示时间到了就隐藏
if @show_time <= 0
self.opacity = 0
self.back_opacity = 0
self.contents_opacity = 0
return
end
# 根据剩余帧数计算透明度
total = SHOW_FADEIN + SHOW_STAY + SHOW_FADEOUT
elapsed = total - (@show_time - SHOW_DELAY)
if elapsed < 0
# 等待阶段,完全透明
self.opacity = 0
self.back_opacity = 0
self.contents_opacity = 0
elsif elapsed < SHOW_FADEIN
# 淡入阶段
rate = elapsed.to_f / SHOW_FADEIN
self.opacity = (OPACITY_BORDER * rate).to_i
self.back_opacity = (OPACITY_BG * rate).to_i
self.contents_opacity = (OPACITY_TEXT * rate).to_i
elsif elapsed < SHOW_FADEIN + SHOW_STAY
# 停留阶段,完全显示
self.opacity = OPACITY_BORDER
self.back_opacity = OPACITY_BG
self.contents_opacity = OPACITY_TEXT
else
# 淡出阶段
fade_elapsed = elapsed - SHOW_FADEIN - SHOW_STAY
rate = 1.0 - fade_elapsed.to_f / SHOW_FADEOUT
rate = 0 if rate < 0
self.opacity = (OPACITY_BORDER * rate).to_i
self.back_opacity = (OPACITY_BG * rate).to_i
self.contents_opacity = (OPACITY_TEXT * rate).to_i
end
@show_time -= 1
end
private
#--------------------------------------------------------------------------
# ● 判断地图是否应该显示
#--------------------------------------------------------------------------
def map_should_show?(map_id)
if MODE == :whitelist
return MAP_LIST.include?(map_id)
else
return !MAP_LIST.include?(map_id)
end
end
#--------------------------------------------------------------------------
# ● 刷新文字内容
#--------------------------------------------------------------------------
def refresh_text(map_id)
self.contents.clear
self.contents.font.color = TEXT_COLOR
map_name = $data_mapinfos[map_id].name rescue "地图#{map_id}"
self.contents.draw_text(4, 0, width - 40, 32, map_name, 1)
end
end
#==============================================================================
# ■ Scene_Map
#==============================================================================
class Scene_Map
alias smn_main main
def main
@mapname = Window_MapName.new
smn_main
@mapname.dispose
end
alias smn_update update
def update
@mapname.setname
smn_update
end
end
#==============================================================================
# ■ Scene_Title
#==============================================================================
class Scene_Title
alias smn_main main
def main
$data_mapinfos = load_data("Data/MapInfos.rvdata")
smn_main
end
end
复制代码
关于黑名单/白名单模式区别
比如只有 地图 ID 为 3 和 5 的地图不显示名字,其他都显示(使用黑名单模式):
MODE = :blacklist
MAP_LIST = [3, 5]
复制代码
比如只有 地图 ID 为 2、7、10 的地图显示名字,其他都不显示
(使用白名单模式)
:
MODE = :whitelist
MAP_LIST = [2, 7, 10]
复制代码
关于如何查看地图ID
在地图编辑器里,对左下角地图列表按右键,点击“地图属性”,弹窗最左上角显示即为地图ID。
(系统显示地图ID为001,在脚本里直接用1指代即可)
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1