注册会员 登录
Project1 返回首页

guoxiaomi的个人空间 https://rpg.blue/?210672 [收藏] [复制] [分享] [RSS]

日志

地图菜单窗口-2:地图菜单窗口插件

已有 515 次阅读2017-2-24 11:15 |个人分类:任务界面功能扩展

#==============================================================================
# 地图菜单
# 修改日期:2017-02-24
#------------------------------------------------------------------------------
# 制作: guoxiaomi
# 鸣谢:66RPG 叶子
#------------------------------------------------------------------------------
# 2017-02-34更新
# 增加 '@' 选项 Return,按下确认键后返回上级菜单
#------------------------------------------------------------------------------
# 【删除】
# 1. 此版本只保留了一个任务,所以是纯净版
# 2. 此版本只保留了取消键的音效,以及主菜单确认键的音效
# 【修改】
# 3. 此版本修改了 '@' 选项,现在要用 Pageturning Quitmenu Refresh Switchon[n]
# 这些比较长的参数代替原来的 P Q R S[n]。这是为了方便后续插件脚本的编写。
# 4. 修正了任务名称出现正则表达式字符的问题,现在可以随意使用 /.*?+-[]/ 等
# 5. 现在只有 '@' 选项部分不同但其他名称相同的 task 会被正常识别为不同 task
# 【新增】
# 6. 在呼叫菜单中使用 \c[n] 命令修改主菜单颜色: call_mapmenu('\c[2]默认设置')
# 7. 在 '@' 选项中使用 Textcolor[n] 修改子菜单颜色
# 8. 用 $wmm_position 设置窗口位置,nil会调用默认窗口位置
# 9. 用 $wmm_backopacity 设置窗口透明度,nil会调用默认透明度
# 【脚本】
# 10. 提供一个脚本模板
#==============================================================================
class Interpreter
def call_mapmenu(*commands)
# 更新输入的数据
Input.update
# 刷新任务
$game_party.get_tasks_info
# 生成主菜单页面
@mapmenu_window = Window_MapMenu.new(commands)
# 清空退出标记
@quit_mapmenu = false
# 进入死循环
loop do
# 退出循环的条件是 @mapmenu_window.quit == true
if @mapmenu_window.quit
@mapmenu_window.dispose_allwindow
@mapmenu_window = nil
end
# 窗口被释放时退出死循环
if @mapmenu_window == nil
Input.update
break
end
# 刷新窗口
@mapmenu_window.update if @mapmenu_window
# 刷新显示和输出
Graphics.update
Input.update
end
# 刷新地图信息
$game_map.need_refresh = true
end
end

class Window_MapMenu POSITION_1,2=>POSITION_2,3=>POSITION_3}
end
if !$wmm_backopacity
$wmm_backopacity = BACK_OPACITY
end
# 读取 commands 的颜色, command 需要插有 \c[i] or \\c[i]
@cmd_color = [0] * commands.size
commands.each_index do |index|
if commands[index] =~ /\\c\[(\d)\]/
@cmd_color[index] = $1.to_i
commands[index].gsub!(/\\c\[(\d)\]/, "")
end
end
# 继承父类方法
super($wmm_position[1][2], commands)
# 主菜单窗口
self.opacity = 255
self.back_opacity = $wmm_backopacity
self.x = $wmm_position[1][0]
self.y = $wmm_position[1][1]
self.z = WINDOW_Z
self.height = $wmm_position[1][3]
# 如果是单选项,取消index框
if self.commands.size == 1
self.index = -1
end
# 展示窗口
@show_window = Window_Task.new(0)
@show_window.x = $wmm_position[3][0]
@show_window.y = $wmm_position[3][1]
@show_window.z = self.z
@show_window.width = $wmm_position[3][2]
@show_window.height = $wmm_position[3][3]
@show_window.visible = false
@show_window.active = false
@show_window.back_opacity = self.back_opacity
end

def update
super
# 主菜单窗口激活时
if self.active
# 子菜单是不显示的
@show_window.visible = false
# 按下确认键时打开子菜单
if Input.trigger?(Input::C) || self.commands.size == 1
# 播放确认 SE
$game_system.se_play($data_system.decision_se) if !self.commands.size == 1
# 取消激活
self.active = false
# 搜索编写的Task Info
@id_ary = $game_party.find_idbyname(/^#{Regexp.escape(@commands[@index])}:/)
commands = []
colors = []
@id_ary.each do |id|
ary = $game_party.tasks_info[id].name[@commands[@index].length+1,99].split('@')
commands.push ary[0]
if ary[1] =~ /[Tt]extcolor\[(\d+)\]/
colors.push $1.to_i
else
colors.push 0
end
end
# 创建子菜单窗口
@sub_window = Window_SubCommand.new($wmm_position[2][2],commands,colors)
@sub_window.x = $wmm_position[2][0]
@sub_window.y = $wmm_position[2][1]
@sub_window.z = self.z
@sub_window.height = $wmm_position[2][3]
@sub_window.opacity = 255
@sub_window.back_opacity = self.back_opacity
@sub_window.visible = true
@sub_window.active = true
@sub_window.refresh
@sub_window.index = 0
# 刷新输入
Input.update
end
# 按下取消键时退出窗口
if Input.trigger?(Input::B)
@quit = true
$game_system.se_play($data_system.cancel_se)
end
end
if @sub_window != nil && @sub_window.active
@show_window.visible = true
#-------------------------------------------------------------------------
# 读取参数到ary[0](主菜单),ary[1](子菜单),和ary[2](选项)
#-------------------------------------------------------------------------
id = @id_ary[@sub_window.index]
task = $game_party.tasks_info[id]
ary = task.name.split(/[:@]/)
# 选项不存在,或者被改变时,返回主菜单
if !id || @sub_window.commands[@sub_window.index] != ary[1]
@sub_window.dispose
@sub_window = nil
self.active = true
return
else

end
#-------------------------------------------------------------------------
# 刷新窗口内容,并且强制从顶部显示
#-------------------------------------------------------------------------
if @sub_window_index != @sub_window.index || @refresh_show || @id != id
@show_window.refresh(id)
@id = id
@sub_window_index = @sub_window.index
@refresh_show = nil
end
#-------------------------------------------------------------------------
# 按下取消键时的更新:返回到主菜单
#-------------------------------------------------------------------------
if Input.trigger?(Input::B)
if self.commands.size == 1
@quit = true
else
@sub_window.dispose
@sub_window = nil
self.active = true
Input.update
end
$game_system.se_play($data_system.cancel_se)
end
#-------------------------------------------------------------------------
# 按下确认键时的更新
#-------------------------------------------------------------------------
if Input.trigger?(Input::C)
run_confirm(ary)
$game_party.get_tasks_info
Input.update
end
#-------------------------------------------------------------------------
# 按下方向键(左)时的更新
#-------------------------------------------------------------------------
if Input.trigger?(Input::LEFT)
run_left(ary)
$game_party.get_tasks_info
Input.update
$game_system.se_play($data_system.cursor_se)
end
#-------------------------------------------------------------------------
# 按下方向键(右)时的更新
#-------------------------------------------------------------------------
if Input.trigger?(Input::RIGHT)
run_right(ary)
$game_party.get_tasks_info
Input.update
$game_system.se_play($data_system.cursor_se)
end
end
@sub_window.update if @sub_window != nil
end

def dispose_allwindow
@show_window.dispose if @show_window
@sub_window.dispose if @sub_window
self.dispose if !self.disposed?
end

#--------------------------------------------------------------------------
# ● 描绘项目
#--------------------------------------------------------------------------
def draw_item(index, color)
color = text_color(@cmd_color[index])
super(index, color)
end

end

class Game_Party
def find_idbyname(reg)
get_tasks_info
ary = []
@tasks_info.each_index do |i|
next if !@tasks_info[i].is_a?(Game_Task)
if @tasks_info[i].name =~ reg
ary.push i
end
end
return ary
end
end

class Window_Command @show_window.height
@show_window.oy -= @show_window.height - 32
else
@show_window.oy = 0
end
end
end

#--------------------------------------------------------------------------
# 方向键(右)
#--------------------------------------------------------------------------
def run_right(ary)
#--------------------------------------------------------------------------
# 自定义的处理
#--------------------------------------------------------------------------

#--------------------------------------------------------------------------
# @ 的选项
#--------------------------------------------------------------------------
# 可以用右方向键翻页
if ary[2] =~ /[pP]ageturing/
if @show_window.oy + @show_window.height > @show_window.contents.height - 32
@show_window.oy = 0
else
@show_window.oy += @show_window.height - 32
end
end
end
end

#------------------------------------------------------------------------------
# 制作: guoxiaomi
#------------------------------------------------------------------------------
class Window_Show < Window_Base
def initialize(x, y, width, height)
super(x, y, width, height)
self.contents = Bitmap.new(width - 32, height - 32)
end
#--------------------------------------------------------------------------
# ● 设置文本
# text : 窗口显示的字符串
# align : 对齐方式 (0..左对齐、1..中间对齐、2..右对齐)
#--------------------------------------------------------------------------
def set_text(text, align = 0)
# 如果文本和对齐方式的至少一方与上次的不同
if text != @text or align != @align
# 再描绘文本
self.contents.clear
self.contents.font.color = normal_color
self.contents.draw_text(4, 0, self.width - 40, 32, text, align)
@text = text
@align = align
@actor = nil
end
self.visible = true
end
end

鸡蛋

鲜花

评论 (0 个评论)

facelist doodle 涂鸦笔

您需要登录后才可以评论 登录 | 注册会员

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-4-26 04:07

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

返回顶部