设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 2400|回复: 9
打印 上一主题 下一主题

[已经解决] 求助自定义菜单+全局变量新选项 选项无效问题

[复制链接]

Lv1.梦旅人

梦石
0
星屑
65
在线时间
332 小时
注册时间
2009-9-10
帖子
115
跳转到指定楼层
1
发表于 2014-2-4 16:06:21 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
5星屑
游戏通关设定
file = File.open("finished.rvdata","wb")

Marshal.dump($game_variables,file)

Marshal.dump($game_actors,file)

file.close

当finished.rvdata文件在文件夹出现的时候 开始游戏选择新选项无效
(原脚本在其他游戏里面出现有效 变量改变新选项出现)

原脚本修改是箭兰兄,我把原脚本加入到了 标题菜单脚本里 就应该是这里出毛病了

本人一点都不懂脚本 求指教

工程
http://pan.baidu.com/s/1c09XDN6 有1个BGM和一些SE7M附件挂不上

再请求能做到跟继续游戏的效果一样 当finished.rvdata(好比存档)文件不存在时候 选项变成灰色无法选取这样

最佳答案

查看完整内容

脚本冲突加乱改脚本简直丧心病狂. 修复完毕

Lv2.观梦者

狂気の月兔

梦石
0
星屑
276
在线时间
1245 小时
注册时间
2009-4-7
帖子
879

贵宾

2
发表于 2014-2-4 16:06:22 | 只看该作者
脚本冲突加乱改脚本简直丧心病狂.

Scripts.rvdata (140.09 KB, 下载次数: 73)

修复完毕
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
65
在线时间
332 小时
注册时间
2009-9-10
帖子
115
3
 楼主| 发表于 2014-2-6 11:12:49 | 只看该作者
我咋看不到回复=,=

点评

回复是广告, 于是被.....  发表于 2014-2-6 12:00
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
65
在线时间
332 小时
注册时间
2009-9-10
帖子
115
4
 楼主| 发表于 2014-2-6 15:03:19 | 只看该作者
感谢版主隆恩

版主我再麻烦你一下 我加了沉影不器的这个

请问怎么兼容···删了就弹出来 存档和切换视角 的开关提示

不删切换视角没有反应···真心不懂怎么改 求帮助!





#==============================================================================
# vx新截图存档 by 沉影不器
#------------------------------------------------------------------------------
# ☆ 核心部分是内存位图的输入输出
#    (快速存储Bitmap的Marshal 作者: 柳之一) 强大啊
#------------------------------------------------------------------------------
# ▼ 相比rmxp正版截图存档(作者: 柳柳),主要变动如下:
#     ① 省去了 screenshot.dll 文件 (因快速存储Bitmap的Marshal的存在)
#     ② 无须人工新建存档文件夹,脚本将自建
#     ③ 方便地更改最大存档数,只需设置最大值
#==============================================================================
MAX_SAVE_ID = 16                          # 最大存档数
SAVE_DIR = "Saves/"                       # 改变的存档目录(不希望改变目录请删)
#==============================================================================
# (快速存储Bitmap的Marshal 作者: 柳之一) 强大啊
#==============================================================================
class Font
  def marshal_dump
  end
  def marshal_load(obj)
  end
end

class Bitmap
  # 传送到内存的API函数
  RtlMoveMemory_pi = Win32API.new('kernel32', 'RtlMoveMemory', 'pii', 'i')
  RtlMoveMemory_ip = Win32API.new('kernel32', 'RtlMoveMemory', 'ipi', 'i')
  def _dump(limit)
    data = "rgba" * width * height
    RtlMoveMemory_pi.call(data, address, data.length)
    [width, height, Zlib::Deflate.deflate(data)].pack("LLa*") # 压缩
  end
  def self._load(str)
    w, h, zdata = str.unpack("LLa*")
    b = self.new(w, h)
    RtlMoveMemory_ip.call(b.address, Zlib::Inflate.inflate(zdata), w * h * 4)
    return b
  end
# [[[bitmap.object_id * 2 + 16] + 8] + 16] == 数据的开头
  def address
    buffer, ad = "rgba", object_id * 2 + 16
    RtlMoveMemory_pi.call(buffer, ad, 4)
    ad = buffer.unpack("L")[0] + 8
    RtlMoveMemory_pi.call(buffer, ad, 4)
    ad = buffer.unpack("L")[0] + 16
    RtlMoveMemory_pi.call(buffer, ad, 4)
    return buffer.unpack("L")[0]
  end
end

#==============================================================================
# ■ Game_Temp
#==============================================================================
class Game_Temp
  #--------------------------------------------------------------------------
  # ● 定义实例变量
  #--------------------------------------------------------------------------
  attr_accessor :save_bitmap        # 存档位图
  #--------------------------------------------------------------------------
  # ● 初始化对象
  #--------------------------------------------------------------------------
  alias ini initialize
  def initialize
    ini
    @save_bitmap = Bitmap.new(1, 1)
  end
end

#==============================================================================
# ■ Window_SaveFile
#==============================================================================
class Window_SaveFile < Window_Base
  #--------------------------------------------------------------------------
  # ● 定义实例变量
  #--------------------------------------------------------------------------
  attr_reader   :filename                 # 文件名
  attr_reader   :file_exist               # 文件存在标志
  #--------------------------------------------------------------------------
  # ● 初始化对象
  #     file_index : 存档文件索引 (0~3)
  #     filename   : 文件名
  #--------------------------------------------------------------------------
  def initialize(file_index, filename)
    super(160, 56, 384, 360)
    @file_index = file_index
    @filename = filename
    make_dir(SAVE_DIR) if SAVE_DIR != nil
    load_gamedata
    refresh(@file_index)
  end
  #--------------------------------------------------------------------------
  # ● 读取部分游戏数据
  #--------------------------------------------------------------------------
  def load_gamedata
    @file_exist = FileTest.exist?(SAVE_DIR + @filename)
    if @file_exist
      file = File.open(SAVE_DIR + @filename, "r")
      begin
        @characters          = Marshal.load(file)
        @frame_count         = Marshal.load(file)
        @last_bgm            = Marshal.load(file)
        @last_bgs            = Marshal.load(file)
        @game_system         = Marshal.load(file)
        @game_message        = Marshal.load(file)
        @game_switches       = Marshal.load(file)
        @game_variables      = Marshal.load(file)
        @game_self_switches  = Marshal.load(file)
        @game_actors         = Marshal.load(file)
        @game_party          = Marshal.load(file)
        @game_troop          = Marshal.load(file)
        @game_map            = Marshal.load(file)
        @game_player         = Marshal.load(file)
        # 读取截图
        @file_bitmap         = Marshal.load(file)
        @total_sec = @frame_count / Graphics.frame_rate
      rescue
        @file_exist = false
      ensure
        file.close
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● 刷新
  #     index : 索引
  #--------------------------------------------------------------------------
  def refresh(index)
    file_index = index
    self.contents.clear
    self.contents.font.color = normal_color
    if @file_exist
      # 描绘底部阴影
      self.contents.fill_rect(12+3, 4+3, 326,249, Color.new(0,0,64))
      # 描绘截图
      draw_snap_bitmap(12, 4)
      draw_party_characters(152, 296)
      draw_playtime(0, 296+8, contents.width - 40, 2)
    else
      self.contents.draw_text(0, 296, 384-32, 24, "无此存档!", 1)
    end
  end
  #--------------------------------------------------------------------------
  # ◎ 更改索引
  #     index : 索引
  #--------------------------------------------------------------------------
  def file_index=(file_index)
    @file_index = file_index
  end
  #--------------------------------------------------------------------------
  # ● 描绘游戏人物
  #     x : 描画先 X 座標
  #     y : 描画先 Y 座標
  #--------------------------------------------------------------------------
  def draw_party_characters(x, y)
    for i in [email protected]
      name = @characters[0]
      index = @characters[1]
      draw_character(name, index, x + i * 48, y)
    end
  end
  #--------------------------------------------------------------------------
  # ◎ 生成保存路径
  #     path : 路径
  #--------------------------------------------------------------------------
  def make_dir(path)
    dir = path.split("/")
    for i in 0...dir.size
      unless dir == "."
        add_dir = dir[0..i].join("/")
        begin
          Dir.mkdir(add_dir)
        rescue
        end
      end
    end
  end
  #--------------------------------------------------------------------------
  # ◎ 生成文件名
  #     file_index : 存档文件索引 (0~3)
  #--------------------------------------------------------------------------
  def make_filename(file_index)
    return "Save#{file_index + 1}.rvdata"
  end
  #--------------------------------------------------------------------------
  # ◎ 描绘截图
  #     x : 描画先 X 座標
  #     y : 描画先 Y 座標
  #--------------------------------------------------------------------------
  def draw_snap_bitmap(x, y)
    bitmap = @file_bitmap
    if bitmap == nil
      self.contents.draw_text(0, 112, 384-32, 24, "找不到截图文件!", 1)
    else
      self.contents.blur
      rect = Rect.new(0, 0, 0, 0)
      rect.width = bitmap.width
      rect.height = bitmap.height
      self.contents.blt(x, y, bitmap, rect)
    end
  end
  #--------------------------------------------------------------------------
  # ● 描绘游戏时间
  #     x     : 描绘目标 X 坐标
  #     y     : 描绘目标 Y 坐标
  #     width : 宽
  #     align : 配置
  #--------------------------------------------------------------------------
  def draw_playtime(x, y, width, align)
    hour = @total_sec / 60 / 60
    min = @total_sec / 60 % 60
    sec = @total_sec % 60
    time_string = sprintf("%02d:%02d:%02d", hour, min, sec)
    self.contents.font.color = normal_color
    self.contents.draw_text(x, y, width, WLH, time_string, 2)
  end
end

#==============================================================================
# ■ Scene_Base
#==============================================================================
class Scene_Base
  #--------------------------------------------------------------------------
  # ◎ 生成存档位图快照
  #--------------------------------------------------------------------------
  def snapshot_for_save
    d_rect = Rect.new(0, 0, 326, 249)
    s_rect = Rect.new(0, 0, 544, 416)
    save_bitmap = Graphics.snap_to_bitmap
    $game_temp.save_bitmap.dispose
    $game_temp.save_bitmap = Bitmap.new(326, 249)
    $game_temp.save_bitmap.stretch_blt(d_rect, save_bitmap, s_rect)
  end
end

#==============================================================================
# ■ Scene_Map
#==============================================================================
class Scene_Map < Scene_Base
  #--------------------------------------------------------------------------
  # ● 结束处理
  #--------------------------------------------------------------------------
  alias save_terminate terminate
  def terminate
    snapshot_for_save
    save_terminate
  end
end

#==============================================================================
# ■ Scene_Title
#==============================================================================
class Scene_Title < Scene_Base
  #--------------------------------------------------------------------------
  # ● 判断继续是否有效
  #--------------------------------------------------------------------------
  def check_continue
    @continue_enabled = (Dir.glob(SAVE_DIR + 'Save*.rvdata').size > 0)
  end
end

#==============================================================================
# ■ Scene_File
#------------------------------------------------------------------------------
#  处理文件的类。
#==============================================================================
class Scene_File < Scene_Base
  #--------------------------------------------------------------------------
  # ● 初始化对象
  #     saving     : 存档标志 (false 为载入画面)
  #     from_title : 调用标题画面的 "继续" 标志
  #     from_event : 事件的 "调用存档画面" 的调用标志
  #--------------------------------------------------------------------------
  def initialize(saving, from_title, from_event)
    @saving = saving
    @from_title = from_title
    @from_event = from_event
  end
  #--------------------------------------------------------------------------
  # ● 开始处理
  #--------------------------------------------------------------------------
  def start
    super
    create_menu_background
    @help_window = Window_Help.new
    create_command_window
    if @saving
      @Index = $game_temp.last_file_index
      @help_window.set_text(Vocab::SaveMessage)
    else
      @index = self.latest_file_index
      @help_window.set_text(Vocab::LoadMessage)
    end
    @refresh_index = @command_window.index = @index
    @item_max = MAX_SAVE_ID
    create_savefile_window
  end
  #--------------------------------------------------------------------------
  # ● 结束处理
  #--------------------------------------------------------------------------
  def terminate
    super
    dispose_menu_background
    @help_window.dispose
    dispose_item_windows
  end
  #--------------------------------------------------------------------------
  # ● 还原至原先的画面
  #--------------------------------------------------------------------------
  def return_scene
    if @from_title
      $scene = Scene_Title.new
    elsif @from_event
      $scene = Scene_Map.new
    else
      $scene = Scene_Menu.new(4)
    end
  end
  #--------------------------------------------------------------------------
  # ● 更新画面
  #--------------------------------------------------------------------------
  def update
    super
    update_menu_background
    @help_window.update
    update_savefile_windows
    update_savefile_selection
  end
  #--------------------------------------------------------------------------
  # ◎ 生成存档文件列表窗口
  #--------------------------------------------------------------------------
  def create_command_window
    file_names = []
    digit = MAX_SAVE_ID.to_s.size
    str_f = ""
    digit.times{|n| str_f += "0"}
    str_f[str_f.size-1, 1] = digit.to_s
    for i in 0...MAX_SAVE_ID
      id = sprintf("%#{str_f}d", i+1)
      file_names.push(Vocab::File + "\s" + id)
    end
    @command_window = Window_Command.new(160, file_names)
    @command_window.height = 360
    @command_window.y = 56
  end
  #--------------------------------------------------------------------------
  # ● 生成存档文件窗口
  #--------------------------------------------------------------------------
  def create_savefile_window
    @savefile_window = Window_SaveFile.new(@command_window.index, make_filename(@command_window.index))
  end
  #--------------------------------------------------------------------------
  # ● 释放存档文件
  #--------------------------------------------------------------------------
  def dispose_item_windows
    @command_window.dispose
    @savefile_window.dispose
  end
  #--------------------------------------------------------------------------
  # ● 更新存档文件窗口
  #--------------------------------------------------------------------------
  def update_savefile_windows
    @command_window.update
    @savefile_window.update
  end
  #--------------------------------------------------------------------------
  # ● 更新存档文件选择
  #--------------------------------------------------------------------------
  def update_savefile_selection
    if Input.trigger?(Input::C)
      determine_savefile
    end
    if Input.trigger?(Input::B)
      Sound.play_cancel
      return_scene
    end
    if @refresh_index != @command_window.index
      @refresh_index = @command_window.index
      @savefile_window.dispose
      create_savefile_window
      end
  end
  #--------------------------------------------------------------------------
  # ● 确定存档文件
  #--------------------------------------------------------------------------
  def determine_savefile
    if @saving
      Sound.play_save
      do_save
    else
      if @savefile_window.file_exist
        Sound.play_load
        do_load
      else
        Sound.play_buzzer
        return
      end
    end
    $game_temp.last_file_index = @index
  end
  #--------------------------------------------------------------------------
  # ◎ 生成文件名
  #     file_index : 存档文件索引
  #--------------------------------------------------------------------------
  def make_filename(file_index)
    return "Save#{file_index + 1}.rvdata"
  end
  #--------------------------------------------------------------------------
  # ● 按时间戳选择最新的文件
  #--------------------------------------------------------------------------
  def latest_file_index
    index = 0
    latest_time = Time.at(0) # 时间戳
    for i in 0...MAX_SAVE_ID
      file_name = make_filename(i)
      if FileTest.exist?(SAVE_DIR + file_name)
        file = File.open(SAVE_DIR + file_name, "r")
        if file.mtime > latest_time
          latest_time = file.mtime
          index = i
        end
      end
    end
    return index
  end
  #--------------------------------------------------------------------------
  # ● 执行存档
  #--------------------------------------------------------------------------
  def do_save
    file_name = make_filename(@command_window.index)
    file = File.open(SAVE_DIR + file_name, "wb")
    write_save_data(file)
    # 保存位图
    $file_bitmap = $game_temp.save_bitmap
    Marshal.dump($file_bitmap, file)
    file.close
    return_scene
  end
  #--------------------------------------------------------------------------
  # ● 执行载入
  #--------------------------------------------------------------------------
  def do_load
    file_name = make_filename(@command_window.index)
    file = File.open(SAVE_DIR + file_name, "rb")
    read_save_data(file)
    file.close
    $scene = Scene_Map.new
    RPG::BGM.fade(1500)
    Graphics.fadeout(60)
    Graphics.wait(40)
    @last_bgm.play
    @last_bgs.play
  end
end
回复

使用道具 举报

Lv2.观梦者

狂気の月兔

梦石
0
星屑
276
在线时间
1245 小时
注册时间
2009-4-7
帖子
879

贵宾

5
发表于 2014-2-6 15:35:09 | 只看该作者
存档和切换视角 的开关提示

指的是啥?
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
65
在线时间
332 小时
注册时间
2009-9-10
帖子
115
6
 楼主| 发表于 2014-2-6 16:17:49 | 只看该作者
这个样子-如果没有存档和切换视角文件 就变成了false

其实我希望兼容一点,找档位拓展脚本没找到。4个档不够用

1.jpg (17.35 KB, 下载次数: 30)

1.jpg

2.jpg (53.44 KB, 下载次数: 31)

2.jpg
回复

使用道具 举报

Lv2.观梦者

狂気の月兔

梦石
0
星屑
276
在线时间
1245 小时
注册时间
2009-4-7
帖子
879

贵宾

7
发表于 2014-2-6 16:51:42 | 只看该作者
啊, 那个是我之前测试的时候忘记删掉了. 大概, 你搜索 p 删掉就好了,
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-24 01:18

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表